2026-04-08 手把手教你从零建立AI助手:RAG与Agent核心实战
引言:为什么“建立AI助手”是2026年开发者必学的能力
AI应用已从单纯的“聊天框”演变为具备感知、决策与执行能力的智能体(Agent)-3。大量开发者在建立AI助手的过程中普遍存在一个通病:会用框架的现成Demo,却搞不懂RAG和Agent的本质区别;能跑通代码,但一问原理就卡壳;面试被问到“Agent和LLM有什么区别”时,支支吾吾说不清楚。本文将直面这些问题,带你在建立AI助手的完整链路中,吃透RAG与Agent这两大支柱技术,从概念到代码,从原理到面试,一次打通。

本文将从以下几个板块展开:先剖析传统问答方式的痛点,引出RAG的必要性;然后讲解RAG与Agent的核心概念与关系;接着通过可运行的代码示例展示如何从零搭建一个AI助手;再深入底层原理,为进阶学习铺路;最后梳理高频面试题,帮你直击踩分点。
一、痛点切入:为什么需要RAG与Agent?

传统大模型问答的“三大硬伤”
在纯LLM调用模式下,最常见的场景是这样的:
import openai response = openai.chat.completions.create( model="gpt-4", messages=[{"role": "user", "content": "介绍一下LangChain框架的最新版本特性"}] ) print(response.choices[0].message.content)
这段代码存在三个致命问题:
1. 知识滞后:大模型的知识截止于训练数据的时间点,无法回答训练后出现的新信息。
2. 幻觉问题:模型可能“自信满满地输出与事实不符的内容”,这在金融、医疗等高风险场景中尤为危险-21。
3. 无行动能力:当用户提出“帮我查询今天的天气并预订一家评分最高的餐厅”这类需要调用外部工具的需求时,纯LLM无法执行任何实际操作。
这些问题正是RAG和Agent技术诞生的驱动力。
二、核心概念讲解:RAG(Retrieval-Augmented Generation)
定义与拆解
RAG,全称Retrieval-Augmented Generation(检索增强生成),是一种将“外部知识检索”和“大语言模型生成”相结合的混合架构-40。
拆解来看:
Retrieval(检索) :先从知识库中检索与用户问题最相关的文档片段
Augmented(增强) :将检索到的内容“增强”到模型的输入上下文中
Generation(生成) :LLM基于检索到的证据生成最终回答
生活化类比
想象一场“开卷考试”。纯LLM相当于一个记忆力超强但只能闭卷作答的学霸——他记住了海量知识,但如果考到教材出版之后的新内容,就只能“编造”答案。而RAG模式下的AI助手,则相当于允许这位学霸现场翻书查阅——翻到的资料越多越准,答案就越靠谱-52。
核心价值
RAG直接解决了大模型的两个核心短板:事实准确性和知识时效性。它将生成过程与“可验证的最新证据”紧密绑定,让AI的每一次回答都有据可查-21。据行业报告,约70%的企业已在使用向量数据库与RAG技术来定制LLM应用-34。
三、关联概念讲解:Agent(AI智能体)
定义
Agent,全称AI Agent(人工智能智能体),是一个以LLM为“大脑”的自主系统,能够理解复杂目标、进行规划、并调用外部工具来执行任务-52。
Agent的核心组件
一个典型的Agent包含四个关键部分-52:
大脑(LLM) :负责理解、推理、规划和决策
规划(Planning) :将复杂任务分解为可执行的小步骤
工具(Tools) :Agent可以调用的外部函数或API(如引擎、数据库查询、发送邮件等)
记忆(Memory) :短期记忆(对话上下文)+ 长期记忆(外部向量数据库存储的经验)
ReAct工作模式
Agent最核心的运行框架是ReAct(Reasoning + Acting) ,即“思考-行动”循环-52。其工作流程如下:
用户提问 → Thought(分析该做什么) → Action(调用工具) → Observation(获取结果) → 继续思考或给出最终答案这个过程不断循环,直到任务完成。ReAct通过将内部的推理过程外显化,极大地提高了任务执行的准确性和可解释性-43。
四、概念关系与区别总结
| 维度 | RAG | Agent |
|---|---|---|
| 本质 | 信息获取与增强 | 任务规划与执行 |
| 类比 | “开卷考试”的查阅能力 | “手和脚”的动手能力 |
| 解决的核心问题 | 幻觉、知识滞后 | 复杂任务自动执行 |
| 是否需要多步循环 | 通常单次检索后生成 | 多轮“思考-行动”循环 |
一句话记忆:RAG让LLM“知道更多”,Agent让LLM“能做更多” 。两者并非对立关系,在现代AI助手架构中通常组合使用——先用RAG保证答案准确性,再用Agent驱动行动闭环。
五、代码实战:基于LangChain搭建一个可检索、可行动的AI助手
下面我们基于LangChain框架,从零搭建一个兼具RAG能力和Agent能力的问答助手。环境需要Python 3.10+,并安装以下依赖-15:
pip install langchain langchain-community langchain-openai chromadb faiss-cpu pypdf python-dotenv5.1 第一步:文档加载与文本切分
document_loader.py import os from langchain_community.document_loaders import PyPDFLoader from langchain_text_splitters import RecursiveCharacterTextSplitter def load_and_split(file_path: str): """加载PDF文档并切分成语义块""" loader = PyPDFLoader(file_path) 逐页加载,自动记录页码 docs = loader.load() splitter = RecursiveCharacterTextSplitter( chunk_size=1000, 每块最大字符数 chunk_overlap=100, 相邻块重叠,保留上下文连续性 ) chunks = splitter.split_documents(docs) return [chunk for chunk in chunks if chunk.page_content.strip()]
关键参数说明:中文技术文档推荐 chunk_size=800~1200,chunk_overlap=80~150;切分过大会引入噪声,过小会丢失语义-11。
5.2 第二步:向量化存储(构建知识库)
vector_store.py from langchain_community.embeddings import OpenAIEmbeddings from langchain_community.vectorstores import FAISS def build_vector_store(chunks): """将文档块转为向量并存储""" embeddings = OpenAIEmbeddings(model="text-embedding-3-small") vector_store = FAISS.from_documents(chunks, embeddings) return vector_store 使用时 chunks = load_and_split("your_document.pdf") vector_store = build_vector_store(chunks) retriever = vector_store.as_retriever(search_kwargs={"k": 3}) 每次检索返回最相关的3个片段
5.3 第三步:构建RAG问答链
rag_chain.py from langchain_openai import ChatOpenAI from langchain.prompts import ChatPromptTemplate from langchain.schema.runnable import RunnablePassthrough from langchain.schema.output_parser import StrOutputParser 定义Prompt模板 prompt_template = ChatPromptTemplate.from_template(""" 你是一个专业的技术助手。请基于以下参考资料回答用户的问题。 如果参考资料中没有相关信息,请如实告知,不要编造。 【参考资料】 {context} 【用户问题】 {question} 请给出准确、简洁的回答: """) 构建RAG链 llm = ChatOpenAI(model="gpt-4", temperature=0) temperature=0保证答案稳定性 def format_docs(docs): return "\n\n".join([doc.page_content for doc in docs]) rag_chain = ( {"context": retriever | format_docs, "question": RunnablePassthrough()} | prompt_template | llm | StrOutputParser() ) 调用示例 answer = rag_chain.invoke("什么是LangChain?") print(answer)
5.4 第四步:升级为可行动Agent(添加工具调用能力)
agent_with_tools.py from langchain.agents import create_tool_calling_agent, AgentExecutor from langchain.tools import tool 定义工具1:天气查询 @tool def get_weather(city: str) -> str: """查询指定城市的当前天气(模拟API调用)""" 实际生产环境中这里调用真实天气API weather_data = {"北京": "晴,25°C", "上海": "多云,22°C", "深圳": "阵雨,28°C"} return weather_data.get(city, f"未找到{city}的天气信息") 定义工具2:计算器 @tool def calculate(expression: str) -> str: """执行数学计算,输入如 '2 + 3 4'""" try: result = eval(expression) return f"计算结果:{result}" except Exception as e: return f"计算错误:{str(e)}" 定义工具3:知识库检索(复用上面的RAG检索器) @tool def search_knowledge(query: str) -> str: """从知识库中检索相关文档内容""" docs = retriever.get_relevant_documents(query) if not docs: return "未找到相关信息" return "\n".join([doc.page_content[:500] for doc in docs[:2]]) 组装Agent tools = [get_weather, calculate, search_knowledge] agent = create_tool_calling_agent( llm=ChatOpenAI(model="gpt-4", temperature=0), tools=tools, prompt=ChatPromptTemplate.from_messages([ ("system", "你是一个智能助手,可以使用工具来回答用户问题。"), ("human", "{input}"), ("placeholder", "{agent_scratchpad}"), ]) ) agent_executor = AgentExecutor(agent=agent, tools=tools, verbose=True) 测试:Agent自动规划执行 response = agent_executor.invoke({ "input": "北京今天的天气怎么样?顺便帮我算一下 125 8 等于多少" }) print(response["output"])
运行上述代码时,Agent会按以下流程自动执行:
识别出需要调用
get_weather和calculate两个工具先调用天气工具获取结果,再调用计算器
整合两个结果,生成最终回复
六、底层原理与技术支撑
RAG和Agent背后依赖三个核心技术支柱:
1. 向量检索(Embedding + 向量数据库) :将文本转化为高维向量,通过余弦相似度等算法计算语义相关性,快速找到最匹配的文档片段。
2. 函数调用(Function Calling) :LLM根据用户请求生成结构化的JSON输出,声明需要调用的函数及其参数,应用程序负责实际执行并返回结果-32。这是Agent能够“行动”的关键机制。
3. ReAct循环(Reasoning + Acting) :Agent内部维护一个思考-行动-观察的迭代循环,LLM在每一步自主决策下一步该做什么,直到任务完成-39。这种模式将AI从一个“单次应答器”升级为“多步推理执行器”。
七、高频面试题与参考答案
面试题1:什么是RAG?它与SFT有什么区别?
参考答案:RAG(Retrieval-Augmented Generation)是一种结合外部知识检索与大语言模型生成的混合架构,先检索相关文档再让模型基于这些文档生成回答。
区别在于:SFT(监督微调)是在模型内部“灌知识” ,让模型死记硬背;RAG是让模型“查资料” ,按需检索外部知识。RAG的优势是更新快、可溯源、灵活性高;SFT的优势是推理更自然、无额外检索开销-40。
面试题2:AI Agent和普通LLM调用有什么本质区别?
参考答案:普通LLM调用是单次、静态、无状态的交互——用户输入Prompt,模型返回结果。AI Agent则具有四个本质特征:①状态性(拥有内部记忆)、②主动性(自主决策下一步行动)、③工具使用(调用API/数据库执行操作)、④多步推理(将复杂任务分解为子任务并循环执行)-43。
面试题3:什么是ReAct模式?它的核心流程是怎样的?
参考答案:ReAct(Reasoning+Acting)是Agent的核心工作框架,通过交替执行“思考”与“行动”完成复杂任务。流程为:观察→推理→行动→观察→… ,具体包括:LL先生成思考链(Thought)分析任务,然后执行动作(Action)调用工具,再观察结果(Observation)进入下一轮推理,直至任务完成。这种模式显著减少了幻觉,提升了任务成功率-39。
面试题4:如何优化Agent的响应延迟?
参考答案:三大策略:①模型轻量化,使用蒸馏模型替代旗舰模型处理简单意图;②模型路由,简单任务用小模型,复杂推理才调用大模型;③缓存机制,对高频问题预存答案。某电商Agent通过缓存优化,平均响应时间从3.2秒降至1.5秒-39。
面试题5:RAG检索质量差,通常有哪些原因?如何优化?
参考答案:常见原因包括:切片策略不合理(块太小丢失语义、块太大引入噪声)、向量召回率低、文档格式复杂(表格/图表未正确处理)。优化方案:调整chunk_size和chunk_overlap、引入rerank重排模型、采用多通道检索(关键词+向量混合检索),对复杂文档可使用布局识别+OCR预处理-40。
八、结尾总结
回顾全文核心知识点:
✅ RAG = 检索 + 生成,解决“知道什么”的问题,让AI基于外部证据作答
✅ Agent = 规划 + 行动 + 记忆,解决“能做什么”的问题,让AI自主执行复杂任务
✅ RAG与Agent的关系:RAG增强信息获取,Agent增强任务执行,两者可组合构建完整AI助手
✅ ReAct循环是Agent的工作引擎:思考→行动→观察,不断迭代
✅ 面试重点:RAG vs SFT的区别、Agent与LLM的本质差异、ReAct流程、性能优化策略
下篇预告:本文将深入Agentic RAG——当Agent的规划能力遇上RAG的检索能力,如何构建能自主优化检索策略的下一代AI助手,敬请期待。