1.1大模型存储面试题
LangChain和LangGraph的存储体系,核心可以概括为 “一个为短期状态而生,一个为长期知识而存” 。它们一个负责跟踪“进行到哪一步了”,另一个负责记住“用户是谁”。
下面我将从存储逻辑、策略、常用数据库三个维度,为你系统梳理。
1. 存储体系概览:Checkpointers vs. Stores
LangGraph 提供了两种互补的持久化系统,你可以把它们理解为AI的“工作记忆(内存)”和“长期记忆(硬盘)”。
| 特性 | Checkpointers (检查点) | Stores (存储) |
|---|---|---|
| 核心作用 | 保存图状态的“快照”,主要用于短期、线程范围内的记忆。 | 保存应用定义的键值数据,用于长期、跨线程的记忆。 |
| 存储逻辑 | 状态快照 (State Snapshots):在每个步骤后保存整个图的状态(如对话历史)。 | 键值文档 (Key-Value Documents):将记忆作为JSON文档存储,通过命名空间(namespace)和键(key)组织。 |
| 数据范围 | 限定在单个 thread_id (会话线程) 内。 |
可跨多个 thread_id,通过自定义命名空间(如 user_id)访问。 |
| 主要用途 | 实现多轮对话连续性、人机协同、故障恢复、“时间旅行”等。 | 存储用户偏好、长期事实、跨会话共享的知识等。 |
| 访问方式 | 在图编译时传入,通过 thread_id 自动管理。 |
在节点或工具函数中通过 store 对象手动读写。 |
2. 深入Checkpointers(短期记忆/状态持久化)
存储逻辑与策略
- 核心机制:LangGraph 的短期记忆是通过检查点(Checkpoint) 机制实现的。在图每次执行步骤后,当前的状态(State)都会被自动保存。
- 恢复机制:当使用相同的
thread_id再次调用图时,系统会自动加载该线程的最新检查点,从而恢复对话。 - 管理策略:对于长对话,可以采用消息修剪(Trimming) 或摘要(Summarization) 等策略来管理历史消息,避免超出模型上下文窗口。
常用数据库(后端)
Checkpointers 的核心是 BaseCheckpointSaver 接口的各种实现。
- 内存(开发/测试):
MemorySaver。 - PostgreSQL(生产):
PostgresSaver。 - SQLite(轻量级):
SqliteSaver。 - MongoDB:
MongoDBSaver。 - Redis:
RedisSaver。 - Amazon DynamoDB:
DynamoDBSaver。 - Azure Cosmos DB:
CosmosDBSaver。
3. 深入Stores(长期记忆/知识持久化)
存储逻辑与策略
- 核心机制:长期记忆被存储为JSON文档,并通过 “命名空间 (Namespace)” 和 “键 (Key)” 进行组织。命名空间类似文件夹,通常包含用户或组织ID,例如
(user_id, "memories")。 - 读写操作:通过
store.put()和store.search()等方法进行读写。可以按命名空间列出或搜索记忆。 - 索引支持:部分
Store实现(如InMemoryStore)支持配置索引(如嵌入索引),以实现语义搜索。
常用数据库(后端)
Stores 的核心是 BaseStore 接口的各种实现。
- 内存(开发/测试):
InMemoryStore。 - PostgreSQL(生产):
PostgresStore。常与pgvector扩展结合,支持向量检索。 - MongoDB(生产):
MongoDBStore。 - Redis(生产):
RedisStore。 - 其他:还支持如
AstraDBStore、CassandraStore等多种键值存储。
4. 向量存储(Vector Stores):RAG的核心
虽然严格来说 Vector Stores 不属于记忆系统,但它在 RAG(检索增强生成) 中扮演着外部知识库的角色,是实现长期、非结构化知识存储的关键。
- 存储逻辑:将文本转换为向量嵌入(Embeddings)进行存储,并支持基于向量相似度的检索。
- 常用数据库:LangChain 支持海量的向量数据库,常见的有:
- 开源/本地:Chroma, FAISS
- 云服务:Pinecone, Milvus (Zilliz), Weaviate
- 数据库插件:PostgreSQL (+ pgvector), Cassandra
5. 存储策略与最佳实践总结
- 分清场景,按需选择:为对话连续性和故障恢复使用 Checkpointers;为跨会话的用户画像和事实记忆使用 Stores;为外部知识库检索使用 Vector Stores。
- 开发测试用内存,生产环境用数据库:
InMemoryStore和MemorySaver仅适用于开发和测试。生产环境务必切换为PostgresStore、PostgresSaver等持久化后端。 - 注意数据过期与清理:设计合理的数据过期策略(TTL),避免无效数据占用存储空间。
- 大流量下的Checkpointer优化:对于高吞吐量部署,考虑使用BLOB存储来防止数据库膨胀。某些
Saver实现(如RedisSaver)只保留最新检查点以优化性能。
解决大模型幻觉,智能体(Agent) 和大模型(LLM) 的策略逻辑完全不同:
- LLM(被动回答):像个记忆力超群但爱瞎编的学霸。策略重点是**“在张嘴前,把正确答案塞到它眼皮底下”(RAG),以及“逼它把解题步骤写出来”**(CoT)。
- Agent(主动行动):像个会使用工具的外包主管。策略重点是**“不懂别猜,自己去查”(调用API/搜索引擎),以及“找同事交叉检查”**(多智能体辩论)。
我为你梳理了一套**“五层防御塔”**体系,从低阶到高阶,覆盖了当下大模型幻觉治理的全部策略:
第一层:地基防御(数据与模型层)—— 源头治理
这是最根本的,但也是成本最高的。
- 高质量数据清洗:训练/微调时,去除数据中的事实性错误和矛盾内容。策略:使用“去重”(Deduplication)和“毒性/事实性过滤”。
- RLHF / DPO(偏好对齐):通过强化学习(RLHF)或直接偏好优化(DPO),让模型学会说“我不知道”,而不是硬编造一个错误答案。策略:在奖励模型中,给“承认未知”的行为打高分。
第二层:外挂大脑(检索增强生成 RAG)—— 业界主流必杀技
这是目前解决事实性幻觉(Factual Hallucination)最有效的手段。核心逻辑是“检索先行,生成靠后”。
- 基础策略:用户提问 -> 去向量库搜资料 -> 把资料塞进Prompt -> 强制模型基于资料回答。
- 高阶进阶(专门针对Agent):
- HyDE(假设性文档嵌入):让Agent先自己瞎编一个“假设性答案”,然后用这个假设答案去搜资料。虽然答案是编的,但它包含的语义能搜到更匹配的文档。
- 多路召回 + 重排序(Rerank):Agent不只用向量检索,还会同时用搜索引擎(如Bing/Google API)和关键词检索(BM25)。召回一堆资料后,用一个轻量级“重排序模型”把最相关的排在前面,防止检索噪声污染LLM。
第三层:思维显影(推理时干预)—— 逼它写出草稿纸
针对逻辑性幻觉(Logic Hallucination)(即逻辑跳跃导致的错误)。
- CoT(思维链)与 ReAct:强制Agent输出思考过程。策略:
Thought -> Action -> Observation。让模型把推理步骤写出来,而不是直接给结论。一旦模型把步骤写出来,人类或代码就能在中间步骤发现逻辑断层。 - Self-Consistency(自一致性):策略:让大模型针对同一个问题,走 3-5 条不同的推理路径(提高 Temperature)。最后投票,选出现次数最多的答案。如果 3 条路都得出同一个结果,幻觉概率大大降低。
第四层:工具外挂(Agent 核心必杀)—— 手不够长就伸工具
这是Agent相比普通LLM最大的优势,也是面试最高频的考点。
- 工具调用(Tool / Function Calling):策略:识别到“数学/计算”问题,Agent强制调用计算器;识别到“实时天气/股价”,强制调用API插件;识别到“大段文本知识”,强制去查SQL数据库。让工具返回客观事实,取代模型的凭空臆测。
- 代码执行(Code Interpreter):策略:遇到逻辑计算或数据分析,Agent不自己算,而是生成一段 Python 代码,丢进沙盒环境执行,拿执行结果作为回答。机器算的,绝不会产生幻觉。
第五层:事后验证(AI 自我纠偏)—— 找 AI 给 AI 查作业
这是目前最前沿的策略,利用多智能体(Multi-Agent)或反思机制(Reflection)。
- Reflection(自我反思):策略:让 Agent 先生成初稿,然后 Prompt 它换一个身份(如“严厉的审稿人”),对初稿进行找茬(“这段话的依据在哪里?”)。根据找茬结果,Agent 再修改第二版。明显降低幻觉率。
- 多智能体辩论(Multi-Agent Debate):策略(究极体):
- 执行者 Agent:负责给出答案。
- 验证者 Agent:负责联网搜索或查知识库,核实执行者答案里的每一个数据点。
- 裁判 Agent:如果验证者发现错误,裁判强制执行者重写。
- 诚实性分类器(Honesty Classifier):在Agent链路最后加一个小模型(如BERT),专门用来判断“生成内容”和“检索到的参考资料”是否存在事实冲突(即幻觉检测)。若有冲突,拒绝回答并触发重新生成。
大王总结(面试标准话术)
如果面试官问:“你如何解决大模型幻觉?”
你可以这样回答:
“我会建立 ‘防幻觉三层漏斗’:
- 入口层(防患未然):通过 RAG + 重排序(Rerank),确保喂给模型的参考资料是准确且高相关的,从源头堵住胡说的空间。
- 过程层(显式推理):利用 ReAct 策略,强制Agent调用工具(如搜索API、计算器)获取客观数据,并利用 CoT(思维链) 把推理过程暴露出来,方便人工或代码在中间步骤截断错误。
- 出口层(双重校验):引入 Self-Reflection(自我反思) 机制,让Agent自己换位思考当‘检查员’,对生成的答案进行事实性校验。如果置信度低于阈值,触发‘我不知道’兜底回复,绝不编造。”
特别注意:RAG 是地基,Agent 工具调用是房梁,自我反思是天花板。在实际业务中,不要把希望寄托在把 GPT-4 调得更好上,而要寄托在让 Agent 学会查资料和用计算器上! 对于非创造性的知识问答,只要 Agent 学会了查库,幻觉率可以直接降到 1% 以下。
更多推荐



所有评论(0)