吴师兄大模型
实战项目 · 面试解析

请解释检索增强生成(Retrieval-Augmented Generation, RAG)的基本概念、核心架构组成及工作流程,说明其解决的关键问题,并对比分析在哪些应用场景下RAG优于纯参数化记忆的大模型,举例说明其优势与局限性。

Agent 智能体进阶
← 返回列表
核心概念

Agent 的记忆模块是将 LLM 从无状态函数转变为有状态智能体的关键组件。三层 Memory 架构:In-Context Memory(当前上下文,有限)、Short-Term Buffer(会话历史缓冲)、Long-Term Storage(向量库 + 知识图谱,无限)。核心挑战:如何在上下文窗口有限的前提下,让 Agent 既记住近期对话的细节,又能检索到久远但相关的历史信息。

面试答题思路
4步拆解
1
先说三层 Memory 架构
In-Context(有限实时)-> Short-Term Buffer(Redis,会话级)-> Long-Term Storage(向量库,跨会话持久化)。说清楚各层的职责和存储介质。
2
说超长历史的管理策略
层次化摘要(MemGPT 方案)+ 遗忘机制(参考艾宾浩斯曲线)+ 检索综合评分(语义相关性 + 时间衰减 + 重要性)。
3
说多轮对话的 Query 改写
代词指代消解是多轮对话最常见的问题,Query 改写是最简单有效的解决方案,体现你做过真实项目。
4
给出数据库 Schema 设计
Milvus 向量库的 Schema 设计(embedding + metadata),体现你考虑过生产环境的工程实现细节。
详细解析

三层 Memory 架构

Layer 1: In-Context Memory(有限,实时)

|- System Prompt(只读指令)

|- Working Memory(当前工作空间)

|- Recent Messages(最近消息)

Layer 2: Short-Term Buffer(会话级,临时)

|- Session History(会话历史)

|- Temporary Scratchpad(临时草稿)

|- 存储:Redis(低延迟,TTL 过期)

Layer 3: Long-Term Storage(跨会话,持久)

|- Vector Database(向量语义检索)

|- Knowledge Graph(图谱关系推理)

|- User Profiles(用户画像)

|- 存储:Milvus / Qdrant + PostgreSQL

数据库存储格式设计

python
# Milvus 向量数据库 Schema(用于长期记忆语义检索)
from pymilvus import CollectionSchema, FieldSchema, DataType

fields = [

FieldSchema(name="doc_id", dtype=DataType.VARCHAR,

max_length=128, is_primary=True),

FieldSchema(name="content", dtype=DataType.VARCHAR, max_length=65535),

FieldSchema(name="embedding", dtype=DataType.FLOAT_VECTOR, dim=1536),

FieldSchema(name="metadata", dtype=DataType.JSON),

FieldSchema(name="created_at", dtype=DataType.INT64),

]

# metadata 字段存储关键信息

metadata = {

"user_id": "USR001",

"session_id": "SESSION_001",

"memory_type": "episodic", # episodic / semantic / procedural

"importance": 0.85, # 重要性分数

"access_count": 3, # 访问次数(强化记忆用)

"last_accessed": "2024-01-15T10:30:00Z"

}

多轮对话的 Query 改写

python
def rewrite_query_with_history(query: str, history: list) -> str:

if not has_pronoun(query):

return query

prompt = (

f"对话历史:{format_history(history[-3:])}\n"

f"当前问题:{query}\n"

"请将当前问题改写为独立完整的问题(不含代词):"

)

return llm.generate(prompt)

# 示例: # 历史:用户之前问了意外险相关问题 # 当前:「那摔伤算吗?」-> 改写为「意外险中摔伤是否在保障范围内?」

检索综合评分公式

综合分数 = alpha * 语义相关性 + beta * 时间衰减 + gamma * 重要性

时间衰减:decay = exp(-lambda * (now - last_accessed) / days)

重要性:access_count / max_access_count(越常被调取越重要)

超长历史的管理策略

层次化摘要(MemGPT 方案):

原始对话 -> 每日摘要 -> 每周摘要 -> 长期精华

新对话发生时:查近期详细记录 + 早期概要,详细与全局兼顾

记忆遗忘机制(参考艾宾浩斯遗忘曲线):

长时间未访问 -> 降低权重 -> 最终删除

经常被访问 -> 增加权重 -> 永久保留

重点提示
Query 改写是多轮对话的关键技术:在检索前用 LLM 将含代词的问题改写为完整独立的问题(「那摔伤算吗」-> 「意外险中摔伤是否在保障范围内」),可大幅提升检索召回率,是最简单有效的多轮对话优化手段,实测提升约 12%。
不要把所有对话历史直接塞进 Prompt:随对话轮数增加,token 消耗急剧增加。应采用「最近 N 轮完整 + 早期摘要」策略。同时不要纯靠时间截断,应结合语义相关性检索历史,避免遗漏久远但仍相关的关键信息。
知识卡片
4个知识点
MemGPT 核心思想

将操作系统虚拟内存管理引入 LLM:主上下文(有限)+ 外部存储(无限)。LLM 通过函数调用自主决定何时读写记忆,实现「无限上下文」的幻觉效果。Berkeley NeurIPS 2023 提出。

Mem0 生产级记忆

2025 年最新方案:基于图的可扩展 Memory 架构。相比 OpenAI 方案提升 26% 准确率,降低 91% p95 延迟,节省 90%+ token 成本。支持 ADD/UPDATE/DELETE/NOOP 四种写入决策。

记忆的三种类型

语义记忆(Semantic):事实知识,通过 RAG 实现;情景记忆(Episodic):具体事件和经历,存对话历史;程序记忆(Procedural):如何执行任务,通过工作流模板积累。

向量库 Schema 设计

每条 Memory Entry 必须携带:content(文本)、embedding(向量)、metadata(user_id/session_id/importance/memory_type/access_count)。importance 和 access_count 是检索排序的关键字段。

面试官视角

被问Agent 的长期记忆怎么实现,不要只说用向量数据库。正确答案:我们用三层架构:Layer 1 是当前上下文窗口的 In-Context Memory;Layer 2 是 Redis 存储的短期会话历史(TTL 24小时);Layer 3 是 Milvus 向量库存储的长期记忆(持久化)。检索时综合考虑语义相关性 + 时间衰减 + 访问频率三个维度加权排序。多轮对话中,我们在检索前做 Query 改写,把『那摔伤算吗』这类含代词的问题改写为『意外险中摔伤是否在保障范围内』,检索召回率提升约 12%。