项目简介
'fast-agent' 是一个用于构建和运行基于 Model Context Protocol (MCP) 的 LLM Agent 应用的框架。它提供了一套简洁的 Python 装饰器和 API,帮助开发者定义 Agents、构建复杂工作流,并方便地与 MCP 服务器交互,利用服务器提供的资源、工具和 Prompt 能力。该框架本身主要作为 MCP 客户端运行,但其测试和示例代码中包含了使用 'mcp.server.fastmcp' 实现的简单 MCP 服务器,表明该仓库也提供了构建 MCP 服务器的能力。
主要功能点
- Agent 定义: 使用装饰器 '@fast.agent' 轻松定义 Agent,配置其指令、使用的 MCP 服务器和 LLM 模型。
- 工作流编排: 支持多种内置工作流类型,如 'Chain' (顺序执行)、'Parallel' (并行执行)、'Router' (智能路由)、'Orchestrator' (任务分解与协调) 和 'Evaluator-Optimizer' (迭代优化)。
- MCP 服务器集成: Agent 可以声明需要连接的 MCP 服务器 ('servers' 参数),并通过框架提供的 API 调用服务器上的工具、访问资源和获取 Prompt。
- 资源管理: 支持通过 MCP 服务器访问和处理各种资源(如文件、图片、PDF),包括将资源嵌入到 Prompt 中发送给 LLM。
- 工具调用: Agent 可以通过声明服务器并在 Prompt 中触发工具调用,框架负责与 MCP 服务器通信并处理工具返回的结果。
- Prompt 模板: 支持加载和应用 Prompt 模板,将结构化 Prompt 发送给 LLM。
- 多模态支持: 支持在 Prompt 和工具调用结果中包含图片和 PDF 等多模态内容。
- 灵活的模型支持: 集成了多种 LLM 提供商(如 Anthropic, OpenAI)和本地模型。
- 会话管理: 框架维护 Agent 的消息历史,支持有状态的对话。
- 结构化输出: 支持将 LLM 的响应解析为 Pydantic 模型或其他结构化数据。
- 人机协作: 支持 Agent 请求人类输入以获取更多上下文。
- 日志与调试: 提供丰富的日志输出和交互式调试能力。
虽然 'fast-agent' 主要面向 Agent 开发者(即 MCP 客户端用户),但其内部使用了 'mcp.server.fastmcp' 组件,并且仓库中包含可运行的 MCP 服务器示例代码(主要用于集成测试),因此可以认为该仓库包含了实现 MCP 服务器的能力。
安装步骤
推荐使用 'uv' 包管理器进行安装:
- 安装 'uv' (如果尚未安装):
curl -LsSf https://astral.sh/uv/install.sh | sh # 或者对于 Windows: winget install uv - 安装 'fast-agent-mcp' 包:
uv pip install fast-agent-mcp
这将安装 'fast-agent' 框架及其核心依赖。根据您需要集成的 MCP 服务器类型和 LLM 提供商,可能还需要额外的依赖项。
服务器配置
'fast-agent' 作为 MCP 客户端时,需要在 'fastagent.config.yaml' 文件中配置其需要连接的 MCP 服务器。以下是配置示例结构及其参数说明:
# fastagent.config.yaml mcp: servers: # 服务器的唯一名称,Agent 通过此名称引用服务器 my_custom_server: # 传输协议: stdio, sse, websocket transport: "stdio" # 启动 MCP 服务器进程的命令 (仅 stdio 需要) command: "python" # 传递给命令的参数 (仅 stdio 需要) args: ["-m", "your_mcp_server_module"] # 连接到 SSE 或 WebSocket 服务器的 URL (仅 sse, websocket 需要) url: null # 发送到 SSE 或 WebSocket 服务器的额外 HTTP 头 (可选, 仅 sse, websocket 需要) headers: Authorization: "Bearer your_token" # 读取服务器响应的超时时间 (秒, 可选) read_timeout_seconds: 60 # SSE 传输协议下的读取超时时间 (秒, 可选) read_transport_sse_timeout_seconds: 300 # 认证配置 (可选) auth: type: "basic" # 认证类型, 如 "basic", "token" token: "your_auth_token" # 认证令牌或密码 # 用于采样请求的 LLM 模型 (可选) sampling: model: "haiku" # 可以配置多个服务器... another_server: transport: "sse" url: "http://localhost:8723/sse" # ... 其他配置 ...
请注意:上述 JSON 格式仅为说明配置结构,实际配置需使用 YAML 格式编写到 'fastagent.config.yaml' 文件中。
基本使用方法
以下是一个简单的 'fast-agent' Agent 示例,它连接到一个名为 'my_custom_server' 的 MCP 服务器,并尝试调用服务器上的 'check_weather' 工具:
import asyncio from mcp_agent.core.fastagent import FastAgent # 可能还需要导入 mcp.types 中的 CallToolResult 等类型 # 创建 FastAgent 应用实例 fast = FastAgent("My Weather Agent") # 定义 Agent,声明连接到 my_custom_server @fast.agent( name="weather_reporter", instruction="我是一个天气报告Agent,可以使用 my_custom_server 提供的工具。", servers=["my_custom_server"] # 引用 config.yaml 中定义的服务器名称 ) async def main(): async with fast.run() as agent: print("Agent 启动成功!") try: # 调用服务器上的 'check_weather' 工具 # 参数必须是 JSON 格式的字符串 response = await agent.weather_reporter.send('***CALL_TOOL my_custom_server-check_weather {"location": "London"}') # 或者使用更直接的工具调用 API (如果可用且服务器支持) # response: CallToolResult = await agent.weather_reporter.call_tool("check_weather", {"location": "London"}) print(f"天气报告:{response}") except Exception as e: print(f"调用工具时发生错误:{e}") if __name__ == "__main__": asyncio.run(main())
要运行此 Agent,请确保:
- 您已经创建了上述 'fastagent.config.yaml' 文件,其中定义了 'my_custom_server',并配置了正确的 'command' 和 'args' 来启动您的 MCP 服务器。
- 您的 MCP 服务器正在运行或可以通过 'command'/'args' 正确启动。
- 您的 MCP 服务器上有一个名为 'check_weather' 并接受 'location' 参数的工具。
- 在包含 'fastagent.config.yaml' 和上述 Python 文件的目录下运行脚本,例如使用 'uv run your_agent_script.py'。
通过这种方式,'fast-agent' Agent 可以方便地利用外部 MCP 服务器提供的各种能力。
信息
分类
AI与计算