模型边界02:推理与检索
从模型记忆、外部知识、RAG 到工具调用,理解推理和检索的职责边界,以及如何让模型在合适的场景使用合适的能力。
推理和检索是大模型的两种核心能力,但它们的职责不同。理解它们的边界,才能正确使用模型。
推理能力:模型的内在能力
推理能力是模型从训练数据中学到的知识和逻辑推理能力。
推理的类型
| 类型 | 描述 | 示例 |
|---|---|---|
| 常识推理 | 基于常识的推理 | ”天要下雨了,应该带伞” |
| 逻辑推理 | 基于逻辑规则的推理 | ”如果 A > B,B > C,那么 A > C” |
| 数学推理 | 数学计算和推导 | ”2+2=4” |
| 类比推理 | 基于类比的推理 | ”鸟会飞,飞机也会飞,所以飞机像鸟” |
| 因果推理 | 基于因果关系的推理 | ”因为下雨了,所以地面湿了” |
推理能力的边界
模型的推理能力是有限的:
| 限制 | 描述 | 示例 |
|---|---|---|
| 精确计算 | 复杂计算可能出错 | ”12345 × 6789” 可能算错 |
| 长链推理 | 多步推理可能出错 | 复杂数学证明可能出错 |
| 因果推断 | 可能混淆相关性和因果性 | ”吸烟的人更容易得肺癌,但不一定是因果关系” |
| 常识缺失 | 缺乏某些领域的常识 | 对特定文化的常识可能缺失 |
| 逻辑漏洞 | 推理过程中可能出现逻辑漏洞 | ”所有鸟都会飞,企鹅是鸟,所以企鹅会飞”(错误) |
提高推理能力的方法
| 方法 | 原理 | 适用场景 |
|---|---|---|
| Chain-of-Thought | 让模型一步步推理,展示中间过程 | 复杂推理任务 |
| Self-Consistency | 多次推理,选择最一致的答案 | 高风险推理任务 |
| Verification | 让模型验证自己的推理结果 | 需要准确结果的场景 |
| Tool Use | 将复杂计算交给专门工具 | 数学计算、精确查询 |
Chain-of-Thought 示例:
问题:小明有 5 个苹果,给了小红 2 个,又买了 3 个,现在有几个?
推理过程:
1. 小明原来有 5 个苹果
2. 给了小红 2 个,剩下 5-2=3 个
3. 又买了 3 个,现在有 3+3=6 个
答案:6 个
检索能力:获取外部知识
检索能力是模型获取外部知识的能力,通常通过 RAG(检索增强生成)实现。
检索的类型
| 类型 | 描述 | 适用场景 |
|---|---|---|
| 向量检索 | 基于语义相似度的检索 | 语义搜索、问答 |
| 关键词检索 | 基于关键词匹配的检索 | 精确搜索 |
| 混合检索 | 结合向量和关键词检索 | 需要精确和语义匹配 |
| 结构化检索 | 基于结构化数据的检索 | 数据库查询 |
检索的流程
用户查询 → Embedding → 向量检索 → Top-K 结果 → 重排序 → 上下文 → LLM → 回答
关键步骤:
- 查询处理:将用户查询转换为向量
- 向量检索:在向量数据库中查找相似文档
- 结果重排序:对检索结果进行重排序
- 上下文构建:将检索到的文档作为上下文输入模型
- 答案生成:模型基于上下文生成答案
检索的挑战
| 挑战 | 描述 | 影响 |
|---|---|---|
| 召回率 | 能否检索到相关文档 | 影响答案的准确性 |
| 精度 | 检索结果是否精确 | 影响答案的质量 |
| 时效性 | 文档是否是最新的 | 影响答案的时效性 |
| 完整性 | 是否覆盖所有相关信息 | 影响答案的完整性 |
| 噪声 | 是否包含不相关信息 | 影响答案的准确性 |
推理与检索的职责边界
理解推理和检索的职责边界,才能合理分工。
什么时候用推理
| 场景 | 描述 | 示例 |
|---|---|---|
| 常识问题 | 不需要外部知识 | ”水的沸点是多少” |
| 逻辑推理 | 需要逻辑分析 | ”如果 A 是 B 的子集,B 是 C 的子集,那么 A 是 C 的子集” |
| 创意生成 | 需要创造力 | ”写一首关于春天的诗” |
| 语言理解 | 需要理解语言 | ”这句话是什么意思” |
| 代码生成 | 需要编程知识 | ”写一个排序算法” |
什么时候用检索
| 场景 | 描述 | 示例 |
|---|---|---|
| 事实查询 | 需要最新信息 | ”今天的天气怎么样” |
| 专业知识 | 需要领域知识 | ”如何治疗糖尿病” |
| 文档问答 | 需要基于特定文档 | ”根据这份文档,项目的目标是什么” |
| 代码理解 | 需要理解代码上下文 | ”这段代码的功能是什么” |
| 历史信息 | 需要历史数据 | ”去年的销售额是多少” |
推理与检索的配合
大多数复杂任务需要推理和检索的配合:
用户查询 → 检索相关知识 → 推理分析 → 生成答案
示例:
用户:如何优化 MySQL 查询性能?
检索:找到 MySQL 性能优化的相关文档
推理:分析文档中的优化策略,结合用户场景给出建议
答案:根据文档,你可以通过以下方式优化 MySQL 查询性能...
RAG:检索增强生成
RAG 是将检索和推理结合的技术,是当前最常用的 AI 应用架构。
RAG 的优势
| 优势 | 描述 | 示例 |
|---|---|---|
| 减少幻觉 | 答案基于真实文档 | 避免模型编造事实 |
| 时效性 | 可以获取最新信息 | 回答关于最新事件的问题 |
| 可追溯 | 答案可以追溯到来源 | 提高答案的可信度 |
| 领域适配 | 可以针对特定领域 | 医疗、法律等专业领域 |
| 成本控制 | 可以使用较小的模型 | 降低推理成本 |
RAG 的架构
┌─────────────────┐
│ 知识库构建 │
│ 文档 → 切分 → │
│ Embedding → │
│ 向量数据库 │
└────────┬────────┘
│
▼
┌─────────────────┐
│ 用户查询 │
└────────┬────────┘
│
▼
┌─────────────────┐
│ 向量检索 │
│ 查询 → Embedding│
│ → Top-K 结果 │
└────────┬────────┘
│
▼
┌─────────────────┐
│ 上下文构建 │
│ 检索结果 → │
│ 上下文 │
└────────┬────────┘
│
▼
┌─────────────────┐
│ LLM 推理 │
│ 上下文 → │
│ 答案生成 │
└─────────────────┘
RAG 的优化方向
| 方向 | 方法 | 效果 |
|---|---|---|
| 检索优化 | 优化切分策略、模型选择 | 提高召回率和精度 |
| 重排序 | 使用 Cross Encoder 重排序 | 提高精度 |
| 上下文压缩 | 对上下文进行压缩 | 节省 token |
| 多轮检索 | 多次检索,逐步精化 | 提高准确性 |
| 混合检索 | 结合关键词和向量检索 | 兼顾精确和语义 |
工具调用:扩展模型能力
工具调用是让模型使用外部工具的能力,是扩展模型能力的重要方式。
工具的类型
| 类型 | 描述 | 示例 |
|---|---|---|
| API 调用 | 调用外部 API | 天气 API、股票 API |
| 数据库查询 | 查询数据库 | SQL 查询 |
| 文件操作 | 读写文件 | 读取文档、保存结果 |
| 代码执行 | 执行代码 | 运行 Python 脚本 |
| 搜索引擎 | 搜索互联网 | 获取最新信息 |
工具调用的流程
用户查询 → 模型分析 → 选择工具 → 调用工具 → 获取结果 → 生成答案
关键步骤:
- 意图识别:模型识别用户是否需要使用工具
- 工具选择:模型选择合适的工具
- 参数生成:模型生成工具调用的参数
- 工具执行:执行工具调用
- 结果处理:将工具返回的结果作为上下文
- 答案生成:基于工具结果生成最终答案
工具调用的挑战
| 挑战 | 描述 | 影响 |
|---|---|---|
| 意图识别 | 能否正确识别是否需要工具 | 影响用户体验 |
| 工具选择 | 能否选择合适的工具 | 影响结果准确性 |
| 参数生成 | 能否生成正确的参数 | 影响工具调用成功率 |
| 结果理解 | 能否正确理解工具返回的结果 | 影响答案质量 |
| 错误处理 | 能否处理工具调用失败 | 影响系统稳定性 |
项目判断清单
- 需要最新信息 → 使用检索或搜索引擎
- 需要领域知识 → 使用 RAG
- 需要精确计算 → 使用计算器工具
- 需要逻辑推理 → 使用 Chain-of-Thought
- 需要代码执行 → 使用代码执行工具
- 需要数据库查询 → 使用数据库工具
- 答案需要可追溯 → 使用 RAG
- 减少幻觉 → 使用 RAG + 低 Temperature