项目简介

'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' 包管理器进行安装:

  1. 安装 'uv' (如果尚未安装):
    curl -LsSf https://astral.sh/uv/install.sh | sh
    # 或者对于 Windows: winget install uv
  2. 安装 '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,请确保:

  1. 您已经创建了上述 'fastagent.config.yaml' 文件,其中定义了 'my_custom_server',并配置了正确的 'command' 和 'args' 来启动您的 MCP 服务器。
  2. 您的 MCP 服务器正在运行或可以通过 'command'/'args' 正确启动。
  3. 您的 MCP 服务器上有一个名为 'check_weather' 并接受 'location' 参数的工具。
  4. 在包含 'fastagent.config.yaml' 和上述 Python 文件的目录下运行脚本,例如使用 'uv run your_agent_script.py'。

通过这种方式,'fast-agent' Agent 可以方便地利用外部 MCP 服务器提供的各种能力。

信息

分类

AI与计算