RAG 和 MCP 经常一起出现,但它们解决的是两个不同问题:
1 | MCP:AI 应用怎样连接一个系统并调用其能力 |
“通过 MCP 进入 Google Drive”不会自动建立向量知识库;“已经有 RAG”也不意味着其他 AI 客户端能以统一方式调用它。
场景一:实时搜索外部文档
假设 AI 应用已经连接一个文档系统的 MCP Server,Server 提供搜索和读取工具。工具名称由具体实现决定,这里用伪名称表示:
1 | search_files(query) |
用户问“北京出差住宿标准是多少”,处理流程可以是:
1 | AI 应用通过 MCP 调用 search_files |
这已经符合“检索、增强、生成”的基本思路,但检索能力取决于外部系统。它可能主要依赖文件名、全文关键词和元数据,不一定使用可控的 Embedding、切片和重排序。
适合:
- 文件数量不大,查询频率不高。
- 关键词和文件名比较明确。
- 希望每次直接读取外部系统中的最新内容。
- 不想额外维护同步索引。
场景二:同步到独立 RAG 索引
当文件多、查询频繁或需要更强语义搜索时,可以建立自己的检索索引:
1 | 外部文档系统 |
查询时:
1 | 用户问题 |
优点是检索策略可控、查询快、可以做混合搜索;代价是要处理同步延迟、删除传播、版本冲突和权限映射。
把自建 RAG 暴露成 MCP Tool
如果已经有内部接口:
1 | POST /knowledge/search |
可以增加一个薄的 MCP Server,把业务接口注册为工具:
1 | Codex / 其他 AI Host |
工具的输入可以设计为:
1 | { |
返回值应包含足够的可验证信息:
1 | { |
第一版只提供 search_knowledge_base 也可以。确实需要读取全文时,再增加 get_document Tool 或文档 Resource。没有必要为了“看起来完整”同时实现所有 MCP 能力。
同一个 MCP Server 能否服务不同模型
MCP Server 面向的是实现 MCP Client 的 AI 应用,不是某一个模型参数本身:
1 | 模型 A → AI Host A ┐ |
不同 Host 的配置、认证方式、工具选择能力和最终回答可能不同,但 Server 的工具契约可以复用。前提是各 Host 支持所需协议版本、传输方式和认证机制。
谁负责什么
| 组件 | 主要职责 |
|---|---|
| AI Host | 管理模型、Context、用户确认和最终体验 |
| MCP Client | 与 Server 建立连接并发送协议请求 |
| MCP Server | 暴露搜索工具、校验权限、调用检索服务 |
| RAG 服务 | 文档处理、索引、召回、过滤和重排序 |
| 文档系统 | 保存原始文件、版本和业务权限 |
| 生成模型 | 阅读返回证据并组织答案 |
生产落地时的关键问题
权限
不要让 MCP Server 接受客户端随意传入的 tenantId 就视为可信。租户和用户身份应来自可靠认证,并在检索阶段做服务端权限过滤。
新鲜度
记录文档版本、同步时间和删除状态。对高时效资料,可以采用事件同步、定时增量同步,或在回答前回源确认。
引用
搜索结果应保留文档标题、章节、页码或原文链接。模型生成的“引用文字”不能替代真实来源定位。
写操作
知识搜索通常可以设计为只读。创建、修改和删除文档应使用独立工具,并配置更严格权限、确认与审计。
可观测性
一次调用应能追踪:用户问题、所选工具、检索条件、候选证据、模型输入、答案、耗时、错误和费用,同时对敏感内容做脱敏。
一句话记忆
1 | MCP 负责把 AI 接到知识库服务,RAG 负责在服务内部找到证据; |