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调用模式下,最常见的场景是这样的:

python
复制
下载
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

  1. 大脑(LLM) :负责理解、推理、规划和决策

  2. 规划(Planning) :将复杂任务分解为可执行的小步骤

  3. 工具(Tools) :Agent可以调用的外部函数或API(如引擎、数据库查询、发送邮件等)

  4. 记忆(Memory) :短期记忆(对话上下文)+ 长期记忆(外部向量数据库存储的经验)

ReAct工作模式

Agent最核心的运行框架是ReAct(Reasoning + Acting) ,即“思考-行动”循环-52。其工作流程如下:

text
复制
下载
用户提问 → Thought(分析该做什么) → Action(调用工具) → Observation(获取结果) → 继续思考或给出最终答案

这个过程不断循环,直到任务完成。ReAct通过将内部的推理过程外显化,极大地提高了任务执行的准确性和可解释性-43


四、概念关系与区别总结

维度RAGAgent
本质信息获取与增强任务规划与执行
类比“开卷考试”的查阅能力“手和脚”的动手能力
解决的核心问题幻觉、知识滞后复杂任务自动执行
是否需要多步循环通常单次检索后生成多轮“思考-行动”循环

一句话记忆RAG让LLM“知道更多”,Agent让LLM“能做更多” 。两者并非对立关系,在现代AI助手架构中通常组合使用——先用RAG保证答案准确性,再用Agent驱动行动闭环。


五、代码实战:基于LangChain搭建一个可检索、可行动的AI助手

下面我们基于LangChain框架,从零搭建一个兼具RAG能力和Agent能力的问答助手。环境需要Python 3.10+,并安装以下依赖-15

bash
复制
下载
pip install langchain langchain-community langchain-openai chromadb faiss-cpu pypdf python-dotenv

5.1 第一步:文档加载与文本切分

python
复制
下载
 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~1200chunk_overlap=80~150;切分过大会引入噪声,过小会丢失语义-11

5.2 第二步:向量化存储(构建知识库)

python
复制
下载
 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问答链

python
复制
下载
 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(添加工具调用能力)

python
复制
下载
 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会按以下流程自动执行:

  1. 识别出需要调用 get_weathercalculate 两个工具

  2. 先调用天气工具获取结果,再调用计算器

  3. 整合两个结果,生成最终回复


六、底层原理与技术支撑

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助手,敬请期待。