Transformer 原理
Agent 架构
规划算法
记忆系统
Function Calling
RAG 深度
评估体系
深度问答
🤖 AI Agent 架构深度解析
Agent 的本质: 一个以 LLM 为核心的认知系统,能够感知、思考、行动、学习
1. 完整架构图
┌─────────────────────────────────────────────────────────────┐
│ AI Agent 架构 │
├─────────────────────────────────────────────────────────────┤
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ 感知层 │ │ 认知层 │ │ 执行层 │ │
│ │ - 输入解析 │───▶│ - LLM 推理 │───▶│ - 工具调用 │ │
│ │ - 多模态 │ │ - 任务规划 │ │ - API 执行 │ │
│ └─────────────┘ └─────────────┘ └─────────────┘ │
│ ▲ │ │ │
│ │ ▼ │ │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ 记忆系统 │ │
│ │ - 短期记忆 (对话历史) - 长期记忆 (向量数据库) │ │
│ │ - 工作记忆 (任务状态) - 程序记忆 (技能库) │ │
│ └─────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────┘
2. 感知层详解
输入处理流水线
用户输入 → 意图识别 → 实体抽取 → 上下文融合 → LLM 输入
示例:
输入:"帮我查一下北京明天的天气,然后发给张三"
1. 意图识别:[查询天气,发送消息]
2. 实体抽取:{地点:北京,时间:明天,接收人:张三}
3. 上下文融合:结合历史对话理解"张三"是谁
4. LLM 输入:结构化的任务描述
3. 认知层 - LLM 推理核心
LLM 在 Agent 中的角色:
理解器 :解析用户意图
规划器 :拆解任务步骤
决策器 :选择合适工具
整合器 :汇总结果生成回答
4. 执行层 - 工具调用机制
工具调用三要素:
工具描述 :让 LLM 理解何时使用
参数 Schema :定义输入格式
执行器 :实际调用 API/代码
🎯 Agent 规划算法深度解析
1. ReAct 算法(Reasoning + Acting)
核心思想: 推理和行动交替进行,每一步都显式思考
ReAct 执行流程示例:
任务:"北京今天气温多少?比上海高吗?"
Thought 1: 我需要查询北京和上海的今日气温
Action 1: get_weather(city="北京")
Observation 1: 北京今日气温 25°C
Thought 2: 我还需要查询上海的气温
Action 2: get_weather(city="上海")
Observation 2: 上海今日气温 28°C
Thought 3: 北京 25°C,上海 28°C,北京比上海低 3°C
Final Answer: 北京今天气温 25°C,比上海低 3°C
ReAct 的 Prompt 模板
You are an AI assistant that helps users by reasoning and taking actions.
You have access to the following tools:
{tool_descriptions}
Use the following format:
Thought: you should always think about what to do
Action: the action to take, should be one of [{tool_names}]
Action Input: the input to the action
Observation: the result of the action
... (this Thought/Action/Action Input/Observation can repeat N times)
Thought: I now know the final answer
Final Answer: the final answer to the original input question
Begin!
Question: {input}
Thought: {agent_scratchpad}
2. Plan-and-Execute 算法
与 ReAct 的区别:
ReAct :边思考边行动,适合探索性任务
Plan-and-Execute :先规划后执行,适合结构化任务
Plan-and-Execute 流程:
1. Planner LLM 生成计划:
任务:"写一份竞品分析报告"
计划:
- 步骤 1: 搜索竞品 A 的最新动态
- 步骤 2: 搜索竞品 B 的最新动态
- 步骤 3: 整理双方功能对比
- 步骤 4: 撰写分析报告
2. Executor 按步骤执行:
- 执行步骤 1 → 结果 A
- 执行步骤 2 → 结果 B
- 执行步骤 3 → 结果 C
- 执行步骤 4 → 最终报告
3. (可选)Reflector 检查结果,决定是否需要调整
3. Tree of Thoughts(ToT)
核心思想: 让 LLM 探索多个推理路径,选择最优解
ToT 算法流程:
1. 思维分解:将问题分解为多个思维步骤
2. 思维生成:为每个步骤生成 k 个候选思维
3. 状态评估:评估每个候选的价值
4. 搜索算法:BFS/DFS 探索思维树
5. 回溯:如果当前路径不行,回退尝试其他路径
适用场景:复杂推理、创意写作、数学问题
4. 规划算法对比
算法
优势
劣势
适用场景
ReAct
可解释性强,错误易定位
步骤多,Token 消耗大
工具调用、信息检索
Plan-and-Execute
全局规划,效率高
计划可能不完整
多步骤任务、工作流
ToT
能探索多种可能
计算成本高
复杂推理、创意任务
Reflection
自我纠错,质量高
需要多次迭代
代码生成、写作
🧠 Agent 记忆系统深度设计
1. 记忆分层架构
┌─────────────────────────────────────────────────────────┐
│ Agent 记忆系统 │
├─────────────────────────────────────────────────────────┤
│ 短期记忆 (Short-term) │
│ - 当前对话历史 (Context Window 内) │
│ - 容量:4K-128K tokens │
│ - 实现:列表存储,滑动窗口 │
├─────────────────────────────────────────────────────────┤
│ 长期记忆 (Long-term) │
│ - 向量数据库存储 │
│ - 容量:百万级文档 │
│ - 实现:Embedding + 向量检索 │
├─────────────────────────────────────────────────────────┤
│ 工作记忆 (Working) │
│ - 任务执行状态 │
│ - 中间变量、临时结果 │
│ - 实现:JSON/数据库 │
├─────────────────────────────────────────────────────────┤
│ 程序记忆 (Procedural) │
│ - 技能库、工具使用方法 │
│ - 实现:Fine-tuning 或 Prompt 模板 │
└─────────────────────────────────────────────────────────┘
2. 长期记忆实现细节
向量数据库选型
数据库
类型
规模
延迟
适用场景
Pinecone
云服务
亿级
<50ms
企业级、免运维
Milvus
开源
十亿级
<30ms
大规模、自部署
Chroma
开源
百万级
<20ms
快速原型、小规模
Qdrant
开源
亿级
<40ms
高性能、支持过滤
PGVector
PG 扩展
千万级
<100ms
已有 PG 架构
记忆检索优化策略
1. 混合检索(Hybrid Search)
# 向量相似度 + 关键词匹配
results = (
0.7 * vector_search(query) +
0.3 * bm25_search(query)
)
2. 时间衰减
# 近期记忆权重更高
score = similarity * time_decay_factor
time_decay = exp(-days_since_creation / 30)
3. 相关性过滤
# 先过滤再检索,减少搜索空间
filtered_docs = filter_by_metadata(tags=["project_a"])
results = vector_search(query, filtered_docs)
3. 记忆压缩技术
问题: 对话历史太长,超出 Context Window
解决: 压缩记忆,保留关键信息
压缩策略:
1. 摘要压缩:
原始:10 轮对话 → 摘要:"用户询问了 A、B、C 问题,得到 X、Y、Z 答案"
2. 关键信息提取:
从对话中提取实体、偏好、约束等结构化信息
3. 分层存储:
- 最近 5 轮:完整保留
- 5-20 轮:摘要存储
- 20+ 轮:只保留关键信息
⚙️ Function Calling 深度解析
1. 工作原理
Function Calling 完整流程:
┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐
│ 用户 │ │ LLM │ │ 系统 │ │ 工具 │
│ 输入 │────▶│ 推理 │────▶│ 执行 │────▶│ 调用 │
└──────────┘ └──────────┘ └──────────┘ └──────────┘
│ │ │ │
│ │ │ │
▼ ▼ ▼ ▼
"查北京天气" 输出函数调用 解析并执行 返回结果
{name: get_weather, API 调用
args: {city: "北京"}} │
│
▼
{"temp": 25}
│
▼
LLM 生成最终回答
2. 函数定义最佳实践
{
"name": "search_knowledge_base",
"description": "从公司知识库搜索相关信息。当用户询问公司内部政策、流程、文档时使用此函数。",
"parameters": {
"type": "object",
"properties": {
"query": {
"type": "string",
"description": "搜索关键词,应提取用户问题中的核心实体和意图"
},
"department": {
"type": "string",
"description": "限定搜索范围到特定部门",
"enum": ["HR", "Finance", "IT", "Sales", "All"]
},
"doc_type": {
"type": "string",
"description": "文档类型过滤",
"enum": ["policy", "procedure", "faq", "template", "all"]
},
"max_results": {
"type": "integer",
"description": "最大返回结果数",
"default": 5
}
},
"required": ["query"]
}
}
最佳实践要点:
1. description 要详细,说明何时使用
2. 参数描述要清晰,指导 LLM 如何填充
3. 使用 enum 限制取值范围
4. 设置合理的 default 值
5. required 字段明确必填参数
3. 多函数调用策略
场景 1:顺序调用
任务:"查北京天气并邮件发给张三"
调用序列:
1. get_weather(city="北京") → 25°C
2. send_email(to="张三", body="北京今天 25°C")
场景 2:并行调用
任务:"对比北京、上海、广州的天气"
并行调用:
- get_weather(city="北京")
- get_weather(city="上海")
- get_weather(city="广州")
然后汇总结果
场景 3:条件调用
任务:"如果明天下雨,提醒带伞"
逻辑:
1. get_weather(city="北京", date="明天")
2. if "雨" in forecast:
send_reminder("带伞")
4. 错误处理与重试
常见错误类型:
参数错误:LLM 生成的参数不符合 schema
工具执行失败:API 超时、返回错误
结果解析失败:返回格式不符合预期
处理策略:
参数验证:执行前校验参数格式
自动重试:失败后最多重试 3 次
错误反馈:将错误信息返回给 LLM,让其调整
Fallback:提供降级方案
📚 RAG 技术深度解析
1. Embedding 模型原理
Embedding 本质: 将文本映射到高维向量空间,语义相似的文本向量距离更近
主流 Embedding 模型对比
模型
维度
MTEB 排名
中文效果
推理速度
text-embedding-3-large
3072
#3
★★★★☆
快 (API)
text-embedding-3-small
1536
#15
★★★★☆
快 (API)
bge-large-zh-v1.5
1024
#8
★★★★★
中 (本地)
m3e-base
768
#25
★★★★☆
快 (本地)
jina-embeddings-v2
1024
#12
★★★★☆
快 (API)
2. 分块策略深度分析
分块大小的影响:
太小(<200 字) :信息不完整,检索精度低
适中(300-600 字) :平衡检索精度和上下文完整性
太大(>1000 字) :包含噪声多,LLM 注意力分散
智能分块算法实现:
def semantic_chunk(text, max_size=500, overlap=50):
"""
基于语义边界的智能分块
"""
chunks = []
start = 0
while start < len(text):
# 计算目标结束位置
end = min(start + max_size, len(text))
# 在 [end-100, end] 范围内寻找最佳分割点
# 优先级:段落结束 > 句子结束 > 逗号 > 任意位置
split_point = find_best_split(text, start, end)
chunk = text[start:split_point].strip()
if chunk:
chunks.append(chunk)
# 下一个 chunk 从 overlap 处开始
start = split_point - overlap
return chunks
def find_best_split(text, start, end):
# 优先级 1: 段落结束
for i in range(end, max(start, end-100), -1):
if text[i-2:i] == '\n\n':
return i
# 优先级 2: 句子结束
for i in range(end, max(start, end-100), -1):
if text[i-1] in '。!?.!?':
return i
# 默认:直接返回 end
return end
3. 检索优化技术
混合检索实现
def hybrid_search(query, vector_store, bm25_index, top_k=5):
"""
混合检索:向量检索 + 关键词检索
"""
# 向量检索(语义相似)
vector_results = vector_store.search(query, k=top_k*2)
# BM25 检索(关键词匹配)
bm25_results = bm25_index.search(query, k=top_k*2)
# 合并结果(RRF - Reciprocal Rank Fusion)
merged = reciprocal_rank_fusion(
vector_results,
bm25_results,
weights=[0.6, 0.4]
)
return merged[:top_k]
def reciprocal_rank_fusion(results_lists, weights, k=60):
"""
RRF 融合算法
score = sum(weight / (k + rank))
"""
scores = {}
for results, weight in zip(results_lists, weights):
for rank, doc in enumerate(results):
doc_id = doc.id
if doc_id not in scores:
scores[doc_id] = 0
scores[doc_id] += weight / (k + rank)
# 按分数排序
sorted_docs = sorted(scores.items(), key=lambda x: x[1], reverse=True)
return [doc for doc_id, score in sorted_docs]
4. Rerank 技术详解
为什么需要 Rerank?
向量检索是"粗排",基于向量相似度;Rerank 是"精排",基于更复杂的交叉编码器,能理解更细粒度的相关性。
Rerank 工作原理:
1. 粗排:向量检索返回 Top 50 文档
2. 精排:Cross Encoder 对每个 (query, doc) 对打分
3. 重排序:按分数重新排序,取 Top 5
Cross Encoder vs Bi-Encoder:
- Bi-Encoder (向量检索):
query → [Encoder] → q_vector
doc → [Encoder] → d_vector
相似度 = cosine(q_vector, d_vector)
优点:可预计算,速度快
- Cross Encoder (Rerank):
[query, doc] → [Encoder] → 相关性分数
优点:精度高,能理解复杂语义
缺点:需要逐对计算,速度慢
📊 AI 系统评估体系
1. RAGAS 评估框架详解
RAGAS(Retrieval Augmented Generation Assessment)
是目前最主流的 RAG 系统评估框架,包含 4 个核心指标。
Faithfulness(忠实度)
定义:答案是否完全基于检索到的上下文,没有编造信息
计算方法:
1. 从答案中提取所有陈述
2. 对每个陈述,问"这个能从上下文推导出来吗?"
3. Faithfulness = 可推导的陈述数 / 总陈述数
示例:
上下文:"公司年假制度:入职 1 年 5 天,5 年 10 天"
答案:"入职 1 年有 5 天年假" → ✓ 可推导
答案:"入职 3 年有 8 天年假" → ✗ 无法推导(编造)
Faithfulness = 1/1 = 1.0 (第一个答案)
Faithfulness = 0/1 = 0.0 (第二个答案)
Answer Relevancy(答案相关性)
定义:答案是否直接回答了用户问题
计算方法:
1. 从答案反向生成问题
2. 计算生成的问题与原始问题的相似度
3. 相似度高 → 答案相关
示例:
问题:"如何申请年假?"
答案 A:"登录 HR 系统,点击请假申请..." → 相关
答案 B:"公司年假制度是..." → 不相关(答非所问)
Context Precision(上下文精确度)
定义:检索到的内容是否相关,且排名靠前
计算公式:
Precision@k = (相关文档数 @ k) / k
示例:
检索结果 Top 5: [相关,无关,相关,无关,无关]
Precision@5 = 2/5 = 0.4
Context Recall(上下文召回率)
定义:应该被检索到的相关内容,是否真的被检索到了
计算方法:
1. 基于标准答案,确定哪些文档是"应该被检索到"的
2. Recall = 实际检索到的相关文档数 / 应该检索到的总数
示例:
应该检索到的文档:[doc1, doc2, doc3]
实际检索到:[doc1, doc3]
Recall = 2/3 = 0.67
2. Agent 评估指标
指标
定义
计算方法
目标值
任务完成率
成功完成的任务比例
成功数/总数
>85%
步骤准确率
每个步骤执行正确的比例
正确步骤数/总步骤数
>90%
工具选择准确率
选择正确工具的比例
正确选择数/总选择数
>95%
平均步骤数
完成任务的平均步骤
总步骤数/任务数
越低越好
平均响应时间
从输入到输出的时间
总时间/任务数
<5s
🎤 深度面试问答
Q1: Transformer 的 Self-Attention 为什么需要缩放(除以√d_k)?
原因: 防止点积结果过大,导致 softmax 梯度消失。
详细解释:
当向量维度 d_k 很大时,Q 和 K 的点积结果会很大
softmax(x) 在 x 很大时梯度接近 0(饱和区)
梯度接近 0 → 反向传播时梯度消失 → 模型无法学习
除以√d_k 后,点积结果的方差保持为 1,避免饱和
Var(Q·K) = d_k → Var(Q·K/√d_k) = 1
💡 这题考察对 Transformer 底层原理的理解,能说出"梯度消失"是加分项
Q2: ReAct 和 Plan-and-Execute 各有什么优缺点?实际项目中如何选择?
ReAct 优缺点:
✓ 可解释性强,每步思考可见
✓ 错误易定位,知道哪步出错
✓ 适合探索性任务
✗ Token 消耗大(多次推理)
✗ 可能陷入循环
Plan-and-Execute 优缺点:
✓ 全局规划,效率高
✓ Token 消耗相对少
✓ 适合结构化任务
✗ 计划可能不完整
✗ 执行中难以调整
选择策略:
工具调用、信息检索 → ReAct
多步骤工作流、报告生成 → Plan-and-Execute
复杂任务 → 混合使用(高层规划 + 底层 ReAct)
💡 能给出"混合使用"的思路,展示实际项目经验
Q3: 如何设计一个支持百万级文档的 RAG 系统?需要考虑哪些技术点?
架构设计:
向量数据库选型 :Milvus/Qdrant(支持亿级)
分片策略 :按业务/时间/部门分片
索引优化 :HNSW/IVF 索引,平衡精度和速度
检索优化:
混合检索:向量 + 关键词
元数据过滤:先过滤再检索,减少搜索空间
多级检索:粗排 (1000) → 精排 (100) → Rerank(10)
性能优化:
缓存:热门查询结果缓存
异步:检索和生成并行
批处理:批量向量化
成本控制:
开源 Embedding(BGE)替代 OpenAI
本地部署 Rerank 模型
增量更新:只向量化新文档
💡 这题考察系统设计能力,要展现全链路思考
Q4: Agent 执行任务失败,如何定位问题?请给出系统化的排查方法。
排查框架:
1. 输入层检查
- 用户输入是否清晰?
- 上下文是否完整?
2. 理解层检查
- LLM 是否正确理解意图?
- 实体抽取是否准确?
3. 规划层检查
- 任务拆解是否合理?
- 步骤顺序是否正确?
4. 执行层检查
- 工具选择是否正确?
- 参数是否符合 schema?
- API 调用是否成功?
5. 整合层检查
- 结果解析是否正确?
- 最终回答是否准确?
工具方法:
完整日志:记录每一步的输入输出
Trace 追踪:可视化执行流程
单元测试:针对每个工具写测试
A/B 测试:对比不同 Prompt 效果
💡 展现系统化的问题排查思维,不是盲目试错
Q5: 如何优化 Agent 的响应速度?从哪些维度入手?
1. 模型层面
使用更快的模型(GPT-3.5 vs GPT-4)
小模型处理简单任务,大模型处理复杂任务
本地部署开源模型(减少网络延迟)
2. Prompt 层面
精简 Prompt,减少 Token
使用系统消息预置规则
避免冗长的 Few-shot 示例
3. 架构层面
并行执行:独立任务并行调用
流式输出:边生成边返回
缓存:热门问题直接返回缓存答案
4. 检索层面
减少检索数量(Top 10 → Top 5)
使用更快的向量索引
预计算常用查询结果
5. 工程层面
💡 从多个维度回答,展现全面的技术视野
Q6: 讲一讲你对 AI Agent 未来发展的看法?
短期趋势(1-2 年):
多模态 Agent :能看、能听、能说、能做
长程规划 :能完成小时/天级别的任务
工具生态 :更多 API 支持 Function Calling
低代码平台 :业务人员也能创建 Agent
中期趋势(3-5 年):
自主学习能力 :从反馈中持续改进
多 Agent 协作 :Agent 团队完成复杂任务
记忆增强 :长期记忆更精准、个性化
垂直领域 :医疗、法律、金融专业 Agent
长期趋势(5-10 年):
通用智能 :接近人类水平的推理能力
人机融合 :Agent 成为人的"第二大脑"
社会影响 :工作方式、组织结构的变革
挑战:
可靠性:任务成功率需要达到 99%+
安全性:防止被滥用、确保对齐
成本:大规模部署的经济可行性
伦理:责任归属、隐私保护
💡 展现行业洞察力,有自己独立的思考和判断