截至目前为止,全面支持MCP能力的一个客户端实现。
# Fast-Agent 框架:关键技术与知识点
github.com/evalstate/fast-agent
Fast-Agent 是一个功能强大的 AI 代理框架,旨在简化复杂 AI 应用的构建。它支持多模态交互、工作流编排以及外部工具集成,特别适合需要快速开发的场景。
## 核心特点
有2点是最重要的,MCP全能力原生支持,尤其是提了很多次的human-in-loop的实现(需要依赖Sampling功能)
1. MCP 原生支持
- 完整支持 MCP(Model-Client-Protocol)特性,包括采样功能。
2. 多模态支持
- 支持图像、PDF 等多模态内容。
- 通过 Prompts、Resources 和 MCP Tool Call 结果处理多模态数据。
Sampling是我比较关心的特性。
采样支持
- 每个客户端/服务器对可配置采样 LLM。
- 在配置文件中指定模型名称。
人机交互
- Agent 可请求人工输入以获取额外上下文。
- 提供交互式命令行界面,支持与工作流组件聊天。
关于Sampling,fast-agent提供了一个示例:
根据topic生成故事,在读取resource的时候,调用Sampling来生成特定的resource。也就是说,能够通过资源地址来获取动态生成的故事。(标准化的好处)
我参考了这个实现,在 Memory MCP 里,增加了一个动态的resource,根据topic,结合你的知识图谱信息。
github.com/shadowcz007/memory_mcp 这个项目还处于早期实验阶段,需要有代码知识才能用得起来,mcp_client.py是stdio的使用示例,演示了sampling的实现,下周有空的时候,我会制作一个配套的客户端
先实现 读取resource的代码:
实现完基本逻辑后,把Sampling的代码写入:
( 另外,在些resource的返回的时候,注意是str的返回格式)
在MCP客户端(sse方式)会接收到一个事件类型:
仔细观看返回的数据里,是一个method叫 "sampling/createMessage" ,参数里有messages。我们使用客户端把这个messages发给 LLM,我们暂时手动替客户端完成这个操作。
Gemini的结果
Grok3的结果
——
以上,就是关于MCP的Sampling是怎么使用的介绍,我总结成一张图:
( 本页已更新到 《智能体和AI编程》PDF,可以联系我获取 litnmnm )
## fast-Agent的主要工作流类型
在fast-agent的example示例里,有具体的代码示例,简单来讲,就是把Agent塞进了MCP,当成了 MCP 的工具来调用不同的Agent组合。
而Agent的组合,fast-agent做了高度的抽象,抽象成了几种工作流模式(并行、路由等),工作流是几种固定的 Agent 协作方式:
1. 基础 Agent
- 提供简单的 LLM 交互接口。
- 支持历史记录保存和人工输入功能。
2. Chain(链式工作流)
- 按顺序调用多个 Agent。
- 可配置是否累积消息,或是否与最终 Agent 继续对话。
3. Parallel(并行工作流)
- 将相同消息同时发送给多个 Agent(fan-out)。
- 使用聚合 Agent 处理组合结果(fan-in)。
- 适用于集成多个 LLM 的创意生成场景。
4. Evaluator-Optimizer(评估-优化工作流)
- 结合生成器和评估器两个 Agent。
- 循环迭代,直到满足质量要求或达到最大迭代次数。
- 适合研究和内容生成任务。
5. Router(路由工作流)
- 使用 LLM 评估消息,并将其路由到最合适的 Agent。
- 自动生成基于 Agent 指令和可用服务器的路由提示。
6. Orchestrator(编排工作流)
- 使用 LLM 生成计划,将复杂任务分配给可用 Agent。
- 支持一次性计划(full)或迭代计划(iterative)。
除此之外,还有哪些技术亮点?
提示词管理
支持 MCP 提示词,通过 `apply_prompt(name, arguments)` 应用。交互式界面中支持 `/prompt` 命令。
通过 / 或者 @ 来实现MCP不同能力的调用,是目前能看到的方式。
目前,关于MCP的客户端用户体验,还处于非常早期,没有特别好的体验,大部分需要按照技术的逻辑进行接入和使用,但 MCP Server的优势也很明显, 留给客户端的创新空间非常大。
近期推荐: