多工具代理服务

一个基于FastAPI的多工具代理服务,通过REST接口与外部交互,支持计算器、天气查询和文件读取等功能。

  • by zmrfzn
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 zmrfzn/autogen-mcp

使用说明

autogen与mcp测试

使用GitHub模型的MCP客户端、工具服务器和单代理FastAPI服务示例。

快速开始

1.先决条件

  • Python>=3.10
  • 紫外线 已安装(快速依赖性解析器)

2.克隆和安装

git clone <your fork or repo url>
cd mcp-testing
uv sync  # installs dependencies from pyproject.toml

3.环境文件

复制示例并根据需要进行定制:

cp .env.example server/.env
cp .env.example tools/.env

编辑每个 .env 添加您的 OPENAI_API_KEY (GitHub PAT与models.read)。可选:添加 OPENWEATHER_API_KEY 天气工具。

4.运行服务

首先启动工具服务器(默认端口8090):

uv run mcp-test-tools

在第二个终端中启动API服务器(默认端口8080):

uv run mcp-test-server

可选Streamlit客户端(如果存在):

uv run mcp-test-client

或者通过助手启动所有内容:

uv run run-all

5.测试终点

curl -s localhost:8080/health | jq
curl -s -X POST localhost:8080/chat -H 'Content-Type: application/json' -d '{"message":"add 3 and 5"}' | jq

服务器

服务器是系统的入口点。外部请求将进行交互 通过REST与服务器连接。服务器将包括一个代理编排器 它可以访问多种工具。这些工具单独提供 可通过MCP访问的服务。

LLM客户端

该应用程序通过与OpenAI兼容的API端点以GitHub模型为目标。 通过以下方式更改所有组件的模型 LLM_MODEL (默认值: gpt-4.1-mini). 使用官方 openai Python SDK指向GitHub模型的基本URL。

工具

工具在服务器发送事件(SSE)上公开的单独FastMCP进程中运行:

当前工具:

  1. calculator –基本算术(加/减/乘/除)
  2. get_weather –使用OpenWeather API获取城市的当前天气(需要 OPENWEATHER_API_KEY)
  3. read_file –从本地读取文本文件 data/ 目录(安全路径检查)

每个工具都会记录开始、结束、延迟和错误,并生成 request_id.

配置

两者 server 和 tools 进程从加载环境变量 .env 文件。

GitHub模型所需的最小变量:

OPENAI_API_KEY=<your GitHub personal access token with models.read>
# Optional overrides:
OPENAI_BASE_URL=https://models.inference.ai.azure.com
LLM_MODEL=gpt-4.1-mini

笔记:

  • OPENAI_BASE_URL 如果省略,则默认为内部值。
  • 你可以交换 LLM_MODEL 任何支持的GitHub模型(例如。 gpt-4.1, gpt-4.1-nano等等)。
  • 除非重新启用遥测仪器,否则不再需要新的Relic变量。

可选变量:

  • OPENWEATHER_API_KEY –启用 get_weather 工具。
  • LOG_LEVEL –调整日志的详细程度(DEBUG, INFO等等)。
  • TOOL_HOSTNAME / TOOL_PORT –覆盖默认工具服务器位置。
  • NEW_RELIC_ENABLED –设置为 1 如果满足以下条件,则启用仪器 newrelic.ini 存在。

端点

服务器(FastAPI):

  • GET /health –简单的活性检查。
  • POST /chat –身体 { "message": "..." };返回最终助理响应加上a request_id 以及持续时间。

执行

使用 uv 脚本:

  • uv run mcp-test-tools –启动MCP SSE服务器工具。
  • uv run mcp-test-server –启动FastAPI聊天服务器。
  • uv run mcp-test-client –(如果存在)启动Streamlit客户端。
  • uv run run-all –在一个流程管理器中启动工具+服务器(+客户端,如果可用)。

日志记录

结构化日志包括相关性ID(request_id)以及时间度量。 避免使用 message 在测井 extra;我们以前缀 user_message 相反。 所有日志都转到stdout;您可以使用日志转发器进行管道传输或收集。

安全说明

  • 这 read_file 工具限制对的访问 data/ 仅目录。
  • 不要提交真正的API密钥。使用 .env 从VCS中排除的文件。
  • 天气工具具有较短的超时时间(5秒)和网络故障的错误处理功能。

延伸

通过装饰功能添加新工具 @mcp.tool("name") 在 tools/tools_server.py. 代理人在 server/agent.py 如果包含适配器初始化,则会自动加载它们。

故障排除

问题 原因 修复
FileNotFoundError: ../newrelic.ini 从其他CWD运行 使用提供的条件初始化(NEW_RELIC_ENABLED)或移动 newrelic.ini 项目根。
401/型号错误 错误或缺失 OPENAI_API_KEY 重新生成PAT models.read 范围;再出口环境。
天气工具返回配置错误 缺失 OPENWEATHER_API_KEY 为两者添加密钥 tools/.env 和 server/.env 如果代理推理使用它
高延迟 冷模型/客户端实例化每个请求 考虑缓存 OpenAIChatCompletionClient 在 app.state.
除零错误 用户要求无效操作 计算器工具故意返回错误字符串;代理人应该处理。

下一个想法

  • 代理到代理转录端点(多代理聊天),用于更丰富的演示。
  • 通过MCP集成Azure资源工具以进行云状态检查。
  • 结构化JSON日志记录(用自定义格式化程序替换格式字符串)。