案例解析:从 RAG 到 Agent 的技术演进
引言
随着大语言模型(LLM)如 ChatGPT、ChatGPT-4 等的发布,AI 技术彻底改变了人机交互的方式。越来越多的企业开始聚焦大模型技术的研发与应用,为日常生活带来极大便利。然而,大模型也面临着时效性、准确性等核心挑战。如何构建更高级的 LLM 应用?如何解决 LLM 面临的幻觉与知识滞后问题?这已成为 AI 领域的重要研究课题。
检索增强生成(RAG, Retrieval-Augmented Generation)技术应运而生,通过在自然语言处理中结合信息检索和文本生成,显著提升了机器理解和回应的准确性。但随着 RAG 的广泛应用,其局限性也逐渐显现。本文将深入探讨 RAG 的痛点,并分析向智能体(Agent)架构演进的必要性与实践路径。
RAG 的核心痛点
RAG 技术在问答系统、智能助手、信息检索等任务中表现优异。通过建立庞大的知识库,利用信息检索查询相关文本片段,经过筛选、排序和加权后作为生成模型的输入,能有效提高答案准确性,减少虚假信息。
然而,Naive RAG(基础 RAG)最初是为简单问题和小型文档集设计的。例如:
- 事实性问题: "特斯拉的主要风险因素是什么?"
- 特定文档查询: "作者在 YC 期间做了什么?"
针对此类问题,LLM 结合特定知识库能给出很好的答案。但在面对以下复杂场景时,RAG 往往失效:
- 总结性问题: "给我总结一下 XXX 公司的年度报告"(需跨段落整合)。
- 比较性问题: "比较开发者 A 和开发者 B 的开源贡献"(需多源对比)。
- 结构化分析 + 语义搜索: "告诉我美国最高业绩的拼车公司的风险因素"(需推理与过滤)。
- 综合性多部分问题: "告诉我文章 A 中的论点 X,文章 B 中的论点 Y,按内部风格指南制作表格并得出结论"(需多步规划与执行)。
当遇到复杂任务时,单纯的搜索系统无法提供令人满意的结果,需要引入更强的规划与执行能力。
从 RAG 到 Agent 的转变
常规的 RAG 应用通常仅通过结合自有知识库来增强大模型,局限于内容生成的范畴。若需要人工智能像高效员工一样,自主选取工具、与不同系统协作直至交付结果,则必须从 RAG 转向 Agent。
这种转变并非抛弃 RAG,而是在此基础上增加以下关键层次的功能:
- 多轮对话: 与用户进行深度交流,精准识别用户意图。
- 查询/任务规划层: 理解并规划复杂的查询和任务分解。
- 外部环境工具接口: 调用外部 API 或工具完成任务(如计算器、数据库、搜索引擎)。
- 反思机制: 对执行结果进行自我评估和修正。
- 记忆管理: 维护交互历史,提供个性化服务。
Agent 不仅能适应复杂任务,还能在多变环境中灵活应对。它专注于实现特定任务,注重与现有系统集成。Agent 能够理解语言并在现实或数字系统中采取行动,执行检索、处理、访问数据、交互数据库等多步骤任务。
人类使用工具是显著特征,Agent 同样借助外部工具释放 LLM 潜能。例如,Agent 可调用图表生成工具创建在线图表,或使用天气查询工具获取实时数据。Agent 是真正释放 LLM 潜能的关键,标志着 LLM 应用从被动响应向主动执行的范式转移。
案例分析:阿里千问 Agent 实践
近日,阿里千问团队开发了一个结合 RAG 的 Agent,用于理解包含百万字词的文档。该方案仅使用 Qwen2 模型的 8k 上下文,效果却超越了传统 RAG 和长序列原生模型。
1. Agent 构建架构
该 Agent 的构建包含三个复杂度级别,每一层都建立在前一层的基础上。
级别一:检索(Retrieval)
目标是找出与提取关键词最相关的块,主要分为三步:
- 指令与非指令分离: 将用户输入拆解为信息需求与格式指令。
- 输入示例: "回答时请用 2000 字详尽阐述,我的问题是,自行车是什么时候发明的?请用英文回复。"
- 拆解:
{"信息": ["自行车是什么时候发明的"], "指令": ["回答时用 2000 字", "尽量详尽", "用英文回复"]}
- 多语言关键词推导: 让聊天模型推导出多语言关键词以扩大检索范围。
- 转换:
{"关键词_英文": ["bicycles", "invented", "when"], "关键词_中文": ["自行车", "发明", "时间"]}
- 转换:
- BM25 检索: 运用 BM25 算法进行关键词匹配检索。
级别二:分块阅读(Chunk Reading)
解决相关块与用户查询关键词重叠不足导致失效的问题。策略如下:
- 相关性评估: 让聊天模型对每个 512 字块评估其与用户查询的相关性。若不相关输出"无",若相关输出相关句子。
- 二次检索: 取出相关句子作为新的搜索查询词,通过 BM25 检索出最相关的块。
- 生成答案: 基于检索到的上下文生成最终答案。
级别三:逐步推理(Step-by-Step Reasoning)
解决多跳推理问题。例如用户输入:"与第五交响曲创作于同一世纪的交通工具是什么?"。 模型需拆分为子问题:"第五交响曲是在哪个世纪创作的?" -> "自行车于 19 世纪发明"。 采用工具调用(函数调用)智能体或 ReAct 框架解决:
while (Lv3-智能体无法根据其记忆回答问题) {
Lv3-智能体提出一个新的子问题待解答。
Lv3-智能体向 Lv2-智能体提问这个子问题。
将 Lv2-智能体的回应添加到 Lv3-智能体的记忆中。
}
Lv3-智能体提供原始问题的最终答案。
2. 实验对比
为验证效果,采用三种模型进行比对:
- 32k-模型: 7B 对话模型,主要在 8k 上下文样本上微调,辅以少量 32k 上下文样本。
- 4k-RAG: 使用相同模型,采取 Lv1 智能体的 RAG 策略。
- 4k-智能体: 使用 32k 模型,但采用更复杂的智能体策略(Lv3)。
实验结果显示,4k-智能体始终表现优于 32k-模型和 4k-RAG。它结合 RAG 并通过工具调用,实现了更高的效率和准确率。这表明 Agent 的优势在于其动态规划与执行能力,而非单纯依赖上下文窗口大小。
实施挑战与优化方向
尽管 Agent 潜力巨大,但在落地过程中仍面临诸多挑战:
- 延迟与成本: 多步推理意味着多次 LLM 调用,增加了响应时间和 Token 消耗。优化策略包括缓存中间结果、简化规划逻辑及采用小模型辅助决策。
- 错误累积: 每一步的错误可能在下一步被放大。引入反思机制(Self-Reflection)和验证环节至关重要。
- 安全性: 自主调用工具可能带来安全风险。需建立严格的权限控制和沙箱环境。
- 可观测性: 开发者需要追踪 Agent 的行为链路,以便调试和理解决策过程。
未来展望
Agent 应用的开发必将遇到众多挑战,但这同样是一种机遇。每一种挑战都会触发新的技术融合。虽然李彦宏曾预言"以后不会存在程序员这种职业了",但笔者认为,Agent 虽然功能强大,路漫漫其修远兮,应用落地依然有很长的路要走。
未来的 Agent 应用会涵盖更多技术,终将会融进各行各业。我们期待看到:
- 多 Agent 协作: 多个 Agent 同步或异步交互,执行更复杂的任务。
- 垂直领域深化: 针对医疗、法律、金融等特定领域的专用 Agent。
- 人机协同增强: Agent 作为副驾驶,辅助人类完成创造性工作。
结语
RAG 和智能体(Agent)这些技术和理念的潜力在于相互结合。通过结合大模型的深层次语言理解和生成能力、RAG 的垂直和实时的信息检索能力以及 Agent 的决策和执行能力,可以形成更为强大和敏捷的AI应用。Agent 能够通过自我反思和反馈来改进执行,同时提供可观察性,以便开发者能够追踪和理解 Agent 的行为。结合各种工具,融合 RAG 技术,可以处理更复杂的业务逻辑,助力构建更加复杂的 LLM 应用。


