本项目专为 教育和演示目的 而开发,旨在使用 Google ADK(智能体开发套件)阐释多智能体系统的基本概念。
⚠️ 重要提示:这并非生产环境示例,而是一个教学实验室,用于理解以下内容:
# 克隆仓库
git clone <你的仓库地址>
cd multi_agent_lab
# 安装主系统依赖
cd vitra_ai
uv sync
# 安装 MCP 服务器依赖
cd ../search_mcp_server
uv sync
确保已配置 API 密钥:
# 对于 Claude(Anthropic)
export ANTHROPIC_API_KEY="你的密钥"
# 对于 Gemini(Google)
export GOOGLE_API_KEY="你的密钥"
# 对于 Ollama(本地)
# 安装 Ollama 并下载 llama3.1:8b 模型
ollama pull llama3.1:8b
# 终端 1:启动 MeiliSearch
docker run -it --rm -p 7700:7700 getmeili/meilisearch:v1.5
# 终端 2:运行 MCP 服务器
cd search_mcp_server
uv run help_customer.py
# 终端 3:运行主系统
cd vitra_ai
uv run agent.py
# 仅运行主系统(使用模拟数据)
cd vitra_ai
uv run agent.py
若要使用 ADK 的网络界面测试系统,请执行以下操作:
# 1. 首先,安装依赖
cd vitra_ai
uv sync
# 2. 激活虚拟环境
source .venv/bin/activate
# 3. 返回项目根目录
cd ..
# 4. 运行 ADK 网络界面(需在项目文件夹的上一级目录运行)
adk web
⚠️ 重要提示
adk web命令必须在项目文件夹的父目录中运行,而不是在项目文件夹内部。
# 此项目主要通过命令行运行,以下是运行主系统的基础命令
cd vitra_ai
uv run agent.py
# 若要使用 MeiliSearch 运行系统,需按以下步骤操作
# 终端 1:启动 MeiliSearch
docker run -it --rm -p 7700:7700 getmeili/meilisearch:v1.5
# 终端 2:运行 MCP 服务器
cd search_mcp_server
uv run help_customer.py
# 终端 3:运行主系统
cd vitra_ai
uv run agent.py
本系统模拟了一个具备健康咨询功能的电子商务场景,不同专业智能体协同工作以服务客户。系统架构如下:
根智能体(主协调器)
├── 购物助手(产品专家)
│ └── 帮助客户(MCP 接口)
├── 销售智能体(销售专家)
│ ├── 创建订单(订单创建)
│ ├── 计费(账单处理)
│ └── 管理库存(库存管理)
└── 健康助手(健康顾问)
├── 营养专家(营养/皮肤专家)
└── 健身专家(运动专家)
系统模拟了一个具备健康咨询功能的电子商务场景,不同专业智能体协同工作以服务客户。
系统通过不同智能体之间的协作完成任务,根智能体作为主协调器,根据客户需求将任务分配给相应的子智能体。子智能体通过 MCP 协议与外部工具和服务进行交互,实现产品搜索、订单处理、健康咨询等功能。
系统支持多种数据存储方式,包括 MeiliSearch、本地 JSON 文件、外部 REST API、SQLite 数据库和 Elasticsearch。用户可以根据需求选择合适的数据存储方式。
系统使用多种语言模型,如 Gemini、Claude 和 Llama,通过 LiteLLM 进行管理。用户需要配置相应的 API 密钥才能使用这些模型。
系统实现了基本的错误处理和日志记录功能,通过日志记录所有操作以进行审计。但错误处理功能较为简单,仅适用于演示目的。
系统未针对生产环境进行优化,主要用于教育和演示目的。在实际应用中,需要对系统进行性能优化和安全加固。
search_mcp_server/help_customer.py 文件可轻松修改以使用其他数据源:
import json
@mcp.tool()
def search_products_by_terms(terms: str):
with open("products.json", "r") as f:
products = json.load(f)
# 实现简单的按术语搜索
results = [p for p in products if terms.lower() in p['name'].lower()]
return {"hits": results}
@mcp.tool()
def search_products_by_terms(terms: str):
# 以产品 API 为例
response = requests.get(f"https://api.mercadolibre.com/sites/MLB/search?q={terms}")
return response.json()
import sqlite3
@mcp.tool()
def search_products_by_terms(terms: str):
conn = sqlite3.connect("products.db")
cursor = conn.execute("SELECT * FROM products WHERE name LIKE ?", (f"%{terms}%",))
results = cursor.fetchall()
conn.close()
return {"hits": results}
from elasticsearch import Elasticsearch
es = Elasticsearch([{'host': 'localhost', 'port': 9200}])
@mcp.tool()
def search_products_by_terms(terms: str):
response = es.search(
index="products",
body={"query": {"match": {"name": terms}}}
)
return response
multi_agent_lab/
├── vitra_ai/ # 主智能体系统
│ ├── agent.py # 根智能体配置
│ ├── prompt.py # 提示和指令
│ ├── sub_agents/ # 专业智能体
│ │ ├── shop_mate/ # 产品专家
│ │ ├── seller/ # 销售专家
│ │ └── health_mate/ # 健康顾问
│ ├── vitra_doc/ # 系统日志
│ └── pyproject.toml # 依赖项
├── search_mcp_server/ # MCP 工具服务器
│ ├── help_customer.py # 工具实现
│ ├── log/ # 操作日志
│ └── pyproject.toml # 依赖项
└── README.md # 本文件
这是一个教育项目!欢迎你:
💡 使用建议
本项目是一个学习工具,你可以利用它来理解概念、尝试修改并根据自己的教育需求进行调整!🚀