#技术 · #AI

AI学习和总结

RAG

步骤

  1. 离线阶段:文档加载切分chunk。根据自然语义切分,并且设置一定overlap。然后用embedding模型向量化,存储在向量数据库
  2. 在线阶段:提问后,用同样模型把问题向量化,然后做混合检索,RRF融合召回后根据相关性rerank
  3. 生成:把检索到的内容和用户问题拼成 prompt,要求模型基于给定资料回答,不知道就说不知道,并且尽量附上引用来源

优化

提问优化

  1. 优化问题
  1. 问题分解策略
    顺序分解,并行分解,层次分解
  2. step back问答回退
  3. HyDE 用假答案区匹配真答案(优缺点
  4. 路由优化(逻辑路由,语义路由
  5. 问题构建策略(变成数据库语言检索

离线阶段 - 索引生成优化

  1. Multi-representation Index(多表示索引)
    Multi-representation Index 是为了解决单表示检索的一个矛盾:原文太长,嵌入向量容易稀释语义;原文太短,又丢信息。它的做法是用 LLM 为原文生成多个检索表示,比如摘要或假设性问题,用这些表示建索引。检索时用它们匹配,命中后回溯源文档,把完整原文交给 LLM 生成答案。本质上是检索和生成解耦。
  2. RAPTOR(递归抽象处理树状检索)
    RAPTOR 可以看作 Multi-representation 思路的系统化升级。Multi-representation 是给单篇文档生成几个代理表示,让匹配更准;RAPTOR 则是用递归摘要把整个文档库组织成一棵语义树,检索时既能在叶子层拿细节,也能在高层拿宏观摘要。它解决的是多跳、整合型问题里‘只见树木不见森林’的问题。
  3. ColBERT(Token级别上下文检索) ColBERT 比普通单向量检索更耗存储和计算,因为普通做法是把文档所有 token 向量池化成一个向量,而 ColBERT 保留每个 token 的向量序列。好处是避免了压缩损失,查询里每个 token 可以各自去找最匹配的文档 token,保留细粒度匹配证据,而不是被平均成一个模糊的整体向量。代价是索引存储量大约变成 token 数倍,在线 MaxSim 计算也更重。

在线阶段 - 检索优化

  1. Ranking(排序):对检索结果进行初步排序 精排前,RRF融合混合检索结果,计算排名召回 精排阶段,根据专门排序引擎或者LLM重排筛选
  2. Refinement(精炼):对检索结果进行过滤和优化
  3. Adaptive Retrieval(自适应检索):根据查询特征动态调整检索策略

生成 - 优化

CRAG(纠错检索增强生成)

  1. 检索评估器
  2. 知识精炼
  3. 网络搜索 Self-RAG(自反思检索增强生成) 把问题分解为是否需要检索

评估RAG

  1. 检索质量
  1. 生成质量
  1. 端到端评估

Agent

架构分层

感知层、认知层、执行层、记忆层

组成部分

大语言模型、规划模块、记忆模块、工具集

工作原理

ReAct, Chain of Thought, Plan-and-Execute, Self-Ask

LangChain

LangGraph

Transformer

Harness

读代码学习

离线入库:

  1. 解析PDF/TXT/MarkDown/Docx,返回 list[textBlock],包含文章页数,标题等信息
  2. 分块,800/120 切分,注意标点符号,并且拼接标题
  3. 文本转化为向量,id,embedding(和标题拼接的doc转化的向量),docments,matadata(chunk信息)
  4. 存入chorma,chorma返回的是距离

在线问答:

  1. BM25+RRF

retrieval_service.py ★★★ 第5步 检索总编排(最该精读) retrieval_scoring.py ★ 纯函数 BM25+RRF(最好读,从这里入门) reranker_client.py 第6步 精排(可降级) prompt_builder.py 第7步 拼 prompt + 清理引用 llm_client.py 第8步 调大模型 rag_service.py ★★ 编排:检索→拼prompt→生成→清理→存历史

  1. BM25 用jieba分词,然后计算在每篇文章出现的次数。词的罕见程度,出现的频次都会影响分数。
  2. RRF:向量检索和BM25融合,根据rank计算分数。k=60

问题:

  1. 超时重试,异常降级,防死循环,未检索到正确文章如何排查
  2. 如何节约Token,防止幻觉,持久化

1. agent是什么?和RAG,workflow,chain有什么区别?

Agent 是能自主决定下一步做什么的系统,控制流由模型决策。
RAG 是一种能力/架构模式,专门解决模型知识不足需要外部证据。可以是一条链,也可以嵌入agent。
chain 是 固定顺序的调用编排:A → B → C,步骤和顺序预先写死。它没有自主决策。
Workflow 比 chain 更宽,是带分支、条件、并行、人工节点的流程编排,但路由规则仍然是人预先定义的。

2. Agent核心由几个模块组成?

目标与任务理解模块,规划/决策模块,工具/动作执行模块,记忆/状态模块,输出与校验模块

3. ReAct执行流程

方式介绍
Reactthought — action — observation循环 优点:灵活,走一步看一步
plan-and-execute适合流程长,且子任务存在依赖
Reflexion自我纠错反思,在上面基础加一层复盘,下一次尝试规避
Tree-of-Thought展开多个推理后择优,适合复杂规划任务
DAG一次生成完整的工具依赖图,可并行token,成本低

4. Function calling作用

让模型从”只会生成文本”变成”能结构化的表达要调什么工具、传什么参数”,但执行本身不在模型里

5. Memory负责什么?

保持信息的延续性和可复用性。短期记忆,长期记忆,中间状态记忆
短期记忆压缩分四层:最近轮对话保留,更早轮结构化摘要,指针话文档片段,丢弃对后续决策无关信息
长期记忆防污染:按需取用,分级权重,时效性(新覆盖旧),记忆不当作事实
指代绑定在短期记忆里怎么维护:做一个表,内容包含实体,出现轮次等等。按照权重,比如类型,后提及的。没有就直接问

6. Agent架构是什么?

7. 怎么判断何时调用工具

规则兜底,llm判断

8. 幻觉原因,怎么处理

检索没召回到,模型硬答;召回到了但不相关,模型被误导;模型编造引用、编号越界;模型在正确证据上过度推理、加戏;多轮里指代绑错,答非所问

9. 工具超时怎么容错

超时重试,熔断,降级方案,记录

10. RAG召回不准怎么排查

入库侧,召回侧,精排侧,查询侧分级排查

11. 死循环怎么解决

先判断是哪种死循环,有agent循环死循环,工具失败重试死循环,状态机原地打转。 设置重试次数,时间,收敛判断,记录

12. prompt怎么设计

设置好边界和拒答
约束要双重:prompt+代码硬约束
审计独立prompt,对抗找问题
节省上下文:渐进式披露,指针化,分层
改动可回归,测评

13. 怎么统计token

openAI的usage字段,使用时标注记录

14. 怎么测评效果的

建固定标注集:问题 → 正确片段 → 标准答案,分可回答和必拒答两类,方便拒答阈值、证据充分性阈值、相关性过滤阈值设置
确定性测试断言, 收敛度评估

15. agent回答不稳定怎么办

看是输入侧,检索侧,生成侧,工具侧,哪里的问题。同样问题多次问根据路径,答案分布等等,定位来源

16.

17. 多agent适合什么场景?有什么问题

18. 为什么用langgraph

19. 优化agent怎么做

20. agent最大局限?

规划不确定性,结果不可预测,成本高

21.如何做agent的监控

22. 多agent怎么设计,设计角色,通信

按职责分:规划者,执行者,审阅者,仲裁者
通信:共享状态,消息传递
模式:supervisor,pipeline(流水线),parallel(并行),debate(辩论),层级模式
责任可追溯,单个可独立,结构化输出,循环检测+轮次上限

23.意图识别:

24. 遇到了哪些问题怎么解决的

  1. 不同车型文档难以区分---元数据加上车型
  2. xxx错误码怎么处理---BM25更容易检索到,混合检索
  3. 拒答阈值不好定,且 Reranker 可能挂
  4. 自主迭代不收敛

25. 和最值得讲的经历

完

谢谢你读到这里。