增强型 LLM:工具、检索与记忆
智能体的基石积木——给 LLM 包上检索、工具、记忆三种能力,模型不变却脱胎换骨。
为什么只记结论不足以掌握增强型 LLM:工具、检索与记忆
学习“增强型 LLM:工具、检索与记忆”时,第一步不是记住结论,而是冻结输入、上下文、版本和成功标准。只有这些条件明确,增强型 LLM:工具、检索与记忆的含义才不会随着样例变化。正文已有的概念说明要与结构图、运行轨迹和失败样本互相印证,不能只凭最终输出看似正确就宣布完成。
结构分析从先打个比方开始:列出参与者、职责、连接方向、生命周期和所有权,再沿正常路径追踪数据或控制流。每一条边都要说明为什么存在、谁创建、谁消费、谁负责清理;如果边界被跨越,必须能在证据中找到第一处异常。
机制验证要把第一个概念:增强,加的是外面的壳,不是里面的模型写成可以执行的条件。正常样本证明主路径,恰好边界样本验证等号和空值,单故障样本只破坏一个假设。三类样本使用同一份观察指标,避免因为测试口径变化而把偶然结果误认成规律。
成本分析同时记录时间、空间、延迟、耦合、可维护性和不可逆操作。第二个概念:检索——先捞对资料,再带着资料回答不是一句“可能失败”,而是可复现输入、预期停点、实际轨迹、错误分类与清理步骤。任何自动重试都要有次数、预算和幂等边界。
方案比较不能只列优点。需要给出直接实现、当前方案和至少一个替代方案,逐项比较复杂度、扩展点、故障隔离和团队认知成本。当问题规模很小或变化轴稳定时,更简单的实现往往更好;模式与框架必须由真实变化压力证明。
实现阶段把大结论拆成可检查的中间产物:配置快照、结构清单、状态转移、输入输出样本、日志摘要和测试结果。每个产物带来源与生成命令,下一阶段只消费已通过门禁的版本,避免旧缓存或隐式默认值污染结论。
解释结果时必须区分相关性与因果性、接口承诺与实现细节、设计意图与运行事实。对“第三个概念:工具——让它从「只会说」到「真能做」”的判断要由独立证据支持,并明确适用范围;一旦输入分布、版本、硬件或组织边界改变,就重新运行最小实验。
复盘从首个分叉开始,而不是从最后一个报错倒推。先比较冻结输入,再比较第一份结构化中间产物,随后检查状态、约束和副作用。这样可以把复杂系统的排错范围收缩到一个阶段,避免在多个层次同时修改造成新的不确定性。
迁移到真实项目时,先选择一个最小但有代表性的切片,保存改造前基线,再逐步引入“增强型 LLM:工具、检索与记忆”中的机制。每一步只改变一个变量并保留回滚点;性能、正确性、安全性和可理解性至少各有一项可量化指标。
最终验收要求读者能脱离页面重新画出结构、口述关键链路、实现最小版本、构造一个反例并解释失败位置。若只能复述名词而不能预测中间状态,说明知识仍停留在识记层,需要回到图示和实验重新验证。
本页用、
、、、建立统一坐标。先预测这些概念在结构图和运行轨迹中的位置,再操作实验控件;如果结果与预测不一致,停止在首个分叉,不要用后续补丁掩盖早期错误。
权威目录与核心概念逐项对照
- 增强型 LLM:工具、检索与记忆
- 先打个比方
- 第一个概念:增强,加的是外面的壳,不是里面的模型
- 第二个概念:检索——先捞对资料,再带着资料回答
- 第三个概念:工具——让它从「只会说」到「真能做」
- 第四个概念:记忆——关掉就忘的,和跨会话还记得的
- 动手看:三路增强如何汇成一次「强」调用
- 用代码看一次增强调用的骨架
可复现的最小实现
先把决策记录写成机器可读结构:
{
"unit": "增强型 LLM:工具、检索与记忆",
"inputFrozen": true,
"scenario": "normal | boundary | single-fault",
"firstDivergence": null,
"cleanupRequired": true
}再用同一条执行链处理三类样本:
type Evidence = { stage: string; expected: string; actual: string };
function verify(sample: unknown, expected: readonly Evidence[]) {
const trace = runFromCleanState(sample);
return expected.find((item, index) => trace[index]?.actual !== item.expected);
}最后保存回归门禁,禁止失败样本静默通过:
normal -> complete, invariant preserved
boundary -> complete or explicit rejection
singleFault -> stop at first divergence, no stale output用统一评分解释实验结果:
本章回顾
- 增强型 LLM:工具、检索与记忆必须绑定冻结输入和明确成功标准。
- 先打个比方必须能画成结构并沿边追踪责任。
- 第一个概念:增强,加的是外面的壳,不是里面的模型要由正常、边界和单故障样本共同验证。
- 第二个概念:检索——先捞对资料,再带着资料回答必须保存第一处偏离和清理重建步骤。
- 第三个概念:工具——让它从「只会说」到「真能做」决定方案是否可以进入下一阶段。
术语表
先打个比方
上一章我们把只会背书的 AI 比作一个被关在小黑屋里的实习生:聪明,但手里啥也没有。这一章不急着让他「自己干活」,先做一件更基础的事——给他配齐家伙。
给他一个能随时翻的资料柜:遇到不懂的,去柜子里抽出相关文件再答,而不是凭记忆瞎说。再给他一部电话:需要查实时信息时,他能拨出去问一声、把答案记下来。最后给他一个笔记本:这次聊到的要点先记着,重要的还能誊进档案,下次见你时翻出来接着聊。
人还是那个人,脑子一点没变——可配齐了资料柜、电话、笔记本之后,他能办的事完全不是一个量级了。这一章讲的就是:怎么给一个 LLM 配上这三样,让它从「只会续写文字」变成一块真正能用的积木。少了这一步,后面所有更复杂的智能体,都没有可靠的零件可搭。
动手看:三路增强如何汇成一次「强」调用
前面三种增强是分开讲的,但真实场景里它们往往一起上。下面这个动画用一个具体例子把它们汇到一处——任务是「根据我们公司的退货政策,回答顾客这单能不能退」。
猜一猜:如果跳过第 ② 步检索,第 ④ 步 LLM 凭什么答出「我们公司的退货政策」?先想一想——它训练时见过你家的政策吗?再单步播放,看看少了检索这一路,输入里会缺哪块料。
第 1 / 6 步 · ① 裸 prompt 到达:顾客问「根据退货政策,我这单能退吗?」先进入 LLM 的上下文
点击播放,看检索 / 记忆 / 工具三路增强如何汇聚进同一次 LLM 调用,让它从「凭空乱答」变成「有据可依」。可暂停、单步、拖进度逐帧看。
盯住一件事:检索、记忆、工具三条通路从三个方向汇聚进同一个 base LLM 的上下文(第②~⑤步),让这一次调用从「凭空乱答」变成「有据可依」,最后给出回答(第⑥步)。这和上一章不一样——第 1 章讲的是同一个环里反复转圈(循环迭代),这一章讲的是一次调用里多路汇合(汇聚增强)。一个是时间上的反复,一个是一次调用内的富化。把这两件事分清楚,你就抓住了这两章的分界。
用代码看一次增强调用的骨架
上面的动画,落到代码里就是「调模型之前先攒料、调完看要不要执行工具」。下面这段精简的伪代码,是几乎所有增强型 LLM 的共同骨架:
def augmented_call(user_question, user_id):
# ① 检索增强:拿问题去知识库捞相关片段
docs = knowledge_base.retrieve(user_question)
# ② 记忆增强:载入这位用户的长期记忆(跨会话还记得的)
memory = long_term_memory.load(user_id)
# ③ 把三方信息拼成「富化」上下文,再带着工具清单调一次 LLM
context = [system_prompt, memory, docs, user_question]
decision = llm(context, tools=[check_order_status])
return decision逐句对照动画看:retrieve(...) 是检索(第②步,捞政策片段);long_term_memory.load(...) 是记忆(第③步,载入顾客历史);这两路结果和系统提示、用户问题一起拼进 context,就是动画里三路「汇聚」进上下文的那一刻;llm(context, tools=[...]) 则是带着工具清单调一次模型(第④步处理富化输入)。注意:到这里模型只被调了一次,没有循环——这就是「一次增强调用」。
那工具到底什么时候真执行?看 LLM 这一次的产出:
# 接上:LLM 这次产出的可能是「先调个工具」
if decision.is_tool_call:
# ④ 工具增强:系统真去执行,把结果回填进上下文
result = run_tool(decision.tool, decision.args)
context.append(decision)
context.append(result)
# 带着回填的结果,再调一次拿最终答案
decision = llm(context, tools=[check_order_status])
return decision.answeris_tool_call 是 LLM 自己决定「我需要先查一下订单状态」(对应动画第⑤步);run_tool(...) 是系统真去执行、context.append(result) 是把结果回填——这正是工具通路「产出调用 → 执行 → 回填」三步。看出门道了吗:检索和记忆是调模型前就备好的料,工具是调模型后按它的要求去执行再回填的——三路殊途同归,都是为了把上下文喂得更足。至于「要不要在这外面再套一个 while 一圈圈转」,那是上一章的循环,是把多次这样的增强调用串起来的上层结构。
容易踩的坑
小结
- 增强型 LLM = base LLM(权重不变)+ 外包三种能力,是搭一切智能体的原子单元
- 检索补「不知道私有 / 新资料」:先捞对资料再答,这套「先检索后生成」就是 RAG
- 工具补「不能行动」:LLM 产出调用 → 系统执行 → 结果回填;检索是「读」、工具是「做」
- 记忆补「没有记忆」:短期活在上下文窗口、关掉就忘,长期写进外部存储、跨会话还记得
- 一次增强调用是三路信息「汇聚」进一次调用,区别于第 1 章的「循环迭代」