Appearance
RAG 与工具调用
大模型本身不适合承担所有事实和动作。知识会更新,系统状态会变化,很多任务还需要查询数据库、调用接口或写入业务系统。RAG 和工具调用就是把模型接到外部世界的两类核心方式。
RAG 解决什么
RAG(Retrieval-Augmented Generation)把外部资料检索出来,再放进模型上下文,让模型基于资料回答。
它适合:
- 企业知识库问答。
- 技术文档助手。
- 法规、制度、产品说明等需要引用依据的场景。
- 知识更新频繁,不适合频繁微调的场景。
RAG 不适合:
- 需要实时写入系统的动作。
- 检索不到资料却强行回答的场景。
- 资料本身质量很差或权限边界不清的场景。
RAG 链路
- 文档清洗和切块。
- 生成向量并建立索引。
- 用户提问后检索相关片段。
- 对片段排序、过滤、压缩。
- 把片段放入上下文。
- 模型基于片段生成回答。
- 返回答案和来源。
这条链路里,检索质量往往比提示词更影响最终答案。
RAG 常见问题
| 问题 | 原因 | 处理方式 |
|---|---|---|
| 答非所问 | 检索召回错误 | 优化切块、查询改写、混合检索 |
| 回答漏关键点 | 片段太分散或排序差 | 重排、摘要、合并上下文 |
| 引用不存在 | 模型没有被约束基于资料回答 | 要求引用来源,缺资料时拒答 |
| 权限泄露 | 索引没有按用户权限过滤 | 检索阶段做权限裁剪 |
| 成本高 | 上下文塞太多 | 过滤、压缩、分层检索 |
工具调用解决什么
工具调用让模型通过受控接口获取实时信息或执行动作。
适合:
- 查询订单状态。
- 计算价格。
- 读取文件。
- 创建工单。
- 调用搜索、数据库、部署平台。
工具调用的关键是:模型提出意图,工具层负责校验和执行。不能把模型输出直接当作可信指令。
RAG 与工具调用的区别
| 维度 | RAG | 工具调用 |
|---|---|---|
| 主要目标 | 提供知识依据 | 获取状态或执行动作 |
| 输入 | 用户问题 | 模型生成的工具参数 |
| 输出 | 文档片段 | 结构化结果或执行状态 |
| 风险 | 检索错、引用错、权限泄露 | 参数错、越权、误写入 |
| 典型控制 | 权限过滤、来源引用 | 参数校验、审计、人工确认 |
与 Agent、MCP 的关系
Agent 常把 RAG 和工具调用串成多步任务。MCP 可以作为工具连接协议,把文件、数据库、API 统一暴露给客户端。
例如代码问答:
- RAG 检索相关设计文档。
- 工具读取源码。
- 模型解释问题。
- Agent 运行测试验证。
总结
RAG 把外部知识带进上下文,工具调用把模型意图接到外部动作。RAG 关注资料是否找对,工具调用关注动作是否安全可控。真实应用往往两者结合,并通过权限、审计、引用和人工确认建立边界。
