闲云AI助手技术科普 | RAG与Agent原理+代码+面试题
📅 北京时间:2026年4月9日

一、开篇引入
在AI写作工具领域,闲云AI助手作为一款专为网文作者设计的智能创作工具,凭借其先进的AI技术实现了从智能续写到剧情管理的全方位写作辅助-1。而在其背后支撑这一切的核心技术,正是当前AI应用开发中最火的两大架构——RAG(检索增强生成)与Agent(智能体)。很多开发者对这两者的认知仍然停留在概念层面:只会调用API、不懂底层原理、面试中被问到就卡壳。本文将系统拆解RAG与Agent的技术逻辑,辅以可运行的代码示例和面试高频考题,帮助你建立从概念到落地的完整知识链路。

二、痛点切入:为什么需要RAG和Agent?
🔴 传统大模型开发的痛点
看看下面这段传统代码,是不是很眼熟?
import openai def ask_model(question): 传统方式:直接询问大模型 response = openai.ChatCompletion.create( model="gpt-4", messages=[{"role": "user", "content": question}] ) return response.choices[0].message.content 问题:模型无法访问最新知识,容易产生“幻觉” print(ask_model("我们公司最新发布的产品的定价是多少?")) 模型可能会编造一个完全不存在的价格!
❌ 传统方式的三大致命缺陷
知识固化:模型的知识止步于训练数据的截止日期,无法获取实时信息
能力局限:只能回答问题,无法调用工具执行任务(如查数据库、发邮件、生成图表)
“幻觉”严重:当不知道答案时,模型倾向于编造而非承认“不知道”
正是这三大痛点,催生了RAG和Agent这两大技术的诞生与发展。
三、核心概念讲解:RAG(检索增强生成)
📚 标准定义
RAG,全称 Retrieval-Augmented Generation,中文译为“检索增强生成” ,是一种在生成回答前先从外部知识库中检索相关信息,再将这些信息作为上下文输入给大模型生成答案的技术范式-15。
🎯 拆解关键词,理解其内涵
把RAG拆成三个部分来理解:
| 组成部分 | 解释 | 类比 |
|---|---|---|
| Retrieval(检索) | 从知识库中查找相关文档 | 考试前翻书找知识点 |
| Augmented(增强) | 将检索到的内容与问题拼接 | 把找到的笔记贴在试卷上 |
| Generation(生成) | 让模型基于“问题+检索内容”生成答案 | 看着笔记回答题目 |
💡 生活化类比
RAG就像一个开卷考试的学霸:普通LLM是闭卷考试,全靠记忆;而RAG允许它先翻书(检索知识库),找到相关资料后再作答。这样一来,即使遇到没学过的新知识,也能通过翻书找到答案——既保证了答案的准确性,又避免了凭空编造。
✅ RAG的核心价值
解决知识时效性:知识库可以随时更新,无需重新训练模型
大幅降低“幻觉”:模型必须基于检索到的内容回答,不能凭空编造
保护数据隐私:私有知识可以存在本地向量数据库,无需上传给模型厂商
四、关联概念讲解:Agent(智能体)
🤖 标准定义
Agent,中文译为“智能体”,是一种能自主感知环境、进行思考规划、调用外部工具执行任务,并对执行结果进行反思改进的自主实体-15。
🧩 Agent的核心能力构成
一个完整的Agent通常包含四大能力模块:
记忆(Memory) :记住历史对话和任务状态
工具调用(Tool Use) :调用API、数据库、计算器等外部能力
规划(Planning) :将复杂任务拆解为多个子步骤
反思(Reflection) :检查执行结果,必要时修正路径-15
🏭 闲云AI助手中的Agent应用场景
以闲云AI助手的“智能续写”功能为例,其背后的Agent工作流程如下-1:
这正是Agent区别于传统RAG的核心所在——RAG让模型“知道更多”,Agent让模型“能做更多”-15。
五、概念关系与区别总结
📊 RAG vs Agent:一张表看懂核心区别
| 对比维度 | RAG(检索增强生成) | Agent(智能体) |
|---|---|---|
| 核心定位 | 让模型“知道更多” | 让模型“能做更多” |
| 工作模式 | 被动问答 | 自主行动 |
| 典型能力 | 检索知识库 → 生成回答 | 规划任务 → 调用工具 → 反思修正 |
| 输出形式 | 文本答案 | 文本答案 + 工具执行结果 |
| 适用场景 | 知识问答、智能客服、文档 | 任务执行、流程自动化、多步骤操作 |
| 技术复杂度 | 较低 | 较高 |
💡 一句话记忆口诀
RAG 是“开卷考试”让你答得准,Agent 是“项目经理”帮你把事办成。
🔗 两者并非互斥,而是互补协作
在实际的闲云AI助手这类应用中,两者往往是协同工作的:Agent负责理解用户意图、规划任务步骤,而RAG则负责在每一步检索相关知识来支撑决策。AI应用正从“单模型智能”向“多智能体协同”快速演化,RAG、Agent与MCP(模型上下文协议)共同构成了新一代AI应用的核心架构-15。
六、代码示例:从零实现一个极简RAG + Agent
📦 环境准备
安装依赖 pip install openai langchain chromadb tiktoken
🔍 示例一:极简RAG实现(约20行核心代码)
import openai from langchain.embeddings import OpenAIEmbeddings from langchain.vectorstores import Chroma 1. 准备知识库文档 documents = [ "闲云AI助手是一款专为网文作者设计的AI写作工具。", "闲云支持智能续写,能在3秒内完成千余字的情节延续。", "闲云AI助手具备人设管理、剧情追踪和自动取章节名功能。" ] 2. 构建向量数据库 embeddings = OpenAIEmbeddings() vectorstore = Chroma.from_texts(documents, embeddings) 3. RAG核心检索生成函数 def rag_answer(question): 检索相关文档 retrieved_docs = vectorstore.similarity_search(question, k=2) context = "\n".join([doc.page_content for doc in retrieved_docs]) 将检索内容拼接到提示词中 prompt = f""" 基于以下参考资料回答问题。如果资料中没有答案,请回答"不知道"。 参考资料: {context} 问题:{question} 回答: """ response = openai.ChatCompletion.create( model="gpt-3.5-turbo", messages=[{"role": "user", "content": prompt}] ) return response.choices[0].message.content 测试 print(rag_answer("闲云AI助手有哪些核心功能?")) 输出:闲云AI助手具备人设管理、剧情追踪和自动取章节名等功能。
⚙️ 关键步骤解读
| 步骤 | 说明 |
|---|---|
| ① 准备知识库 | 将需要检索的文档预先准备好 |
| ② 构建向量数据库 | 将文档转为向量并存储,便于相似度检索 |
| ③ 相似度检索 | 根据用户问题找出最相关的K个文档片段 |
| ④ 上下文拼接 | 将检索结果与用户问题合并成Prompt |
| ⑤ 生成回答 | 模型基于检索内容生成准确回答 |
🤖 示例二:Agent核心框架(带规划与反思)
from langchain.agents import initialize_agent, Tool from langchain.llms import OpenAI 1. 定义可用的工具 def search_knowledge_base(query: str) -> str: """从知识库中检索信息""" 这里可以调用上面的RAG检索函数 return f"检索结果:关于'{query}'的文档..." def send_email(recipient: str, content: str) -> str: """发送邮件(示例)""" return f"邮件已发送至{recipient}" tools = [ Tool(name="KnowledgeBase", func=search_knowledge_base, description="知识库"), Tool(name="EmailSender", func=send_email, description="发送邮件") ] 2. 初始化Agent(ReAct模式) agent = initialize_agent( tools=tools, llm=OpenAI(temperature=0), agent="zero-shot-react-description", verbose=True ) 3. 用户下达任务 task = "请先查询闲云AI助手的最新功能介绍,然后将查询结果发送邮件给 team@example.com" Agent会自动执行:理解→规划→调用工具→反思→完成 result = agent.run(task)
📈 新旧方式对比:效果一目了然
| 对比项 | 传统LLM直接调用 | RAG + Agent方案 |
|---|---|---|
| 知识时效性 | 无法获取最新信息 | ✅ 可实时更新知识库 |
| 任务执行能力 | 仅能回答问题 | ✅ 可调用工具、执行多步骤任务 |
| 答案准确性 | 存在“幻觉”风险 | ✅ 基于检索内容,准确率显著提升 |
| 成本 | 低 | 稍高(需维护向量库和Agent框架) |
七、底层原理支撑
RAG和Agent之所以能高效运作,底层离不开几个关键技术支柱:
1️⃣ 向量数据库与Embedding
将文档转化为高维向量,通过余弦相似度等算法快速找到语义相关的文档。常用向量数据库包括Chroma、Milvus、Pinecone等-29。
2️⃣ 大模型与注意力机制
RAG和Agent都建立在Transformer架构的大语言模型之上,其自注意力机制能够有效融合用户输入和检索到的上下文信息。
3️⃣ Function Calling(函数调用)
OpenAI等大模型厂商提供的Function Calling能力,是Agent调用外部工具的技术基础——模型可以生成结构化的JSON参数,系统据此执行对应的函数并返回结果。
4️⃣ 知识图谱与推理引擎
在更复杂的Agent场景中,知识图谱用于构建“用户意图-任务步骤-资源需求”的关联模型,让Agent能够理解深层语义并做出合理规划-14。
八、高频面试题与参考答案
📝 面试题1:RAG和Agent有什么区别?各自适用什么场景?
【标准答案】
RAG(检索增强生成)和Agent(智能体)的核心区别在于能力边界:
RAG侧重“知道更多”——通过检索外部知识库来增强模型的回答质量,本质是被动问答。适用于知识问答系统、智能客服、文档等场景-15。
Agent侧重“能做更多”——具备自主规划、工具调用和反思修正能力,本质是主动执行。适用于任务自动化、多步骤流程处理等场景-15。
【踩分点】 能说清“知道 vs 能做”的本质区别,并能分别给出典型应用场景,即可获得高分。
📝 面试题2:如何评估和提升RAG系统的检索召回率?
【标准答案】
提升RAG检索召回率的常用策略:
多路检索融合:同时使用向量检索(语义匹配)和关键词检索(BM25),再对结果进行重排序融合-29。
查询改写:对用户原始问题进行扩写或分解,生成多个相关查询并行检索。
分块策略优化:调整文档分块大小,或采用滑动窗口重叠分块,确保关键信息不被切散。
元数据过滤:在检索前先根据时间、类别等元数据缩小检索范围。
【踩分点】 面试官希望听到具体的工程化方案,而非“用更好的Embedding模型”这种泛泛回答-33。
📝 面试题3:Agent在执行任务时最常见的失败场景有哪些?如何解决?
【标准答案】
三大常见失败场景及解决方案:
| 失败场景 | 具体表现 | 解决方案 |
|---|---|---|
| 工具调用失败 | LLM生成的参数格式不对或值非法 | 增加参数校验层,格式不合法时让LLM重生成;加入失败重试机制;对关键调用做人工兜底-35 |
| 上下文溢出 | 对话轮数过多,Context超限导致Agent遗忘 | 做上下文压缩,定期对历史对话做摘要;采用滑动窗口控制保留的对话轮数-35 |
| 目标漂移 | Agent在执行过程中偏离原始目标 | 每步执行后做目标对齐检查;加入定期反思机制,必要时重新规划-35 |
【踩分点】 能够结合项目经验说明具体场景和对应解法,尤其是“如何权衡效果与成本”,比堆砌概念更有说服力-35。
📝 面试题4:请简述ReAct模式和CoT模式的区别。
【标准答案】
| 模式 | 全称 | 核心机制 | 适用场景 |
|---|---|---|---|
| CoT | Chain of Thought(思维链) | 要求模型在输出结论前,先输出中间推理步骤 | 纯推理类问题(数学题、逻辑推理) |
| ReAct | Reasoning + Acting | 交替进行“推理”和“行动”,每步推理后可调用工具获取外部信息 | 需要与环境交互的任务(问答+检索) |
在RAG场景中,ReAct通常比纯CoT效果更好——因为它让模型可以在推理过程中动态决定何时需要检索外部知识-29。
【踩分点】 能说清CoT是“先想再做”,ReAct是“边想边做”,并能结合实际案例说明效果提升幅度。
九、结尾总结
✅ 核心知识点回顾
| 知识点 | 一句话总结 |
|---|---|
| RAG | 通过检索外部知识库增强模型回答质量,解决“幻觉”和知识时效性问题 |
| Agent | 具备规划、工具调用和反思能力,让模型从“问答”升级为“执行” |
| 二者关系 | RAG让模型“知道更多”,Agent让模型“能做更多”,在实际应用中协同互补 |
| 底层技术 | 向量数据库、Embedding、Function Calling、注意力机制缺一不可 |
🎯 进阶学习方向预告
下一篇我们将深入探讨:
MCP(模型上下文协议) —— 让多个Agent能够标准化协作的统一协议
Agentic RAG —— 融合Agent主动决策能力的下一代RAG架构-29
多Agent协同系统 —— 多个Agent分工协作处理超复杂任务
💡 学习建议:建议结合本文的代码示例动手实践,将RAG和Agent分别实现一遍,再尝试构建一个结合两者优势的小型项目。面试时,能用项目经验说明“你是怎么选的、为什么这么选、遇到了什么问题、如何解决的”,远比背诵概念更有竞争力。