LangGraph构建RAG智能体
简单RAG只做一次检索。RAG智能体自己决定何时搜索、搜什么、何时回答。
💡 你将学到
简单RAG只做一次检索。RAG智能体自己决定何时搜索、搜什么、何时回答。
📜 目录
使用 LangGraph 构建 2026 年研究型 RAG Agent:打造会调用工具的研究代理
普通 RAG 只做一次检索,然后直接回答。而 RAG agent(即 agentic RAG)则能动态决策:它可以搜索多个数据源、改写查询,并自行判断何时信息已足够。LangGraph(GitHub 38,600 星,MIT 协议)是 2026 年构建这类有状态 agent 循环的标准框架。
RAG 与 RAG Agent 的对比
| 方面 | 基础 RAG | RAG Agent |
|---|---|---|
| 检索 | 一次,固定不变 | 多次,自适应调整 |
| 查询 | 按原样输入 | 可被改写 |
| 数据源 | 单一存储 | 多种工具 |
| 决定何时回答 | 从不 | 可以 |
| 后续问题处理 | 无状态 | 完整状态 |
图结构
[start] -> retrieve -> grade_documents
^ |
| v
| relevant? --no--> rewrite_query -> retrieve
| |
| yes
| v
+----- generate -> [end]
关键节点:retrieve(搜索向量存储)、grade(检查结果是否能回答提问)、rewrite(若结果不佳则改进查询)、generate(生成最终答案)。
最小化实现
from langgraph.graph import StateGraph
def retrieve(state):
docs = vectorstore.search(state["question"])
return {"docs": docs}
def generate(state):
answer = llm.invoke(f"Answer using: {state['docs']}")
return {"answer": answer}
graph = StateGraph(ResearchState)
graph.add_node("retrieve", retrieve)
graph.add_node("generate", generate)
graph.add_edge("retrieve", "generate")
graph.set_entry_point("retrieve")
app = graph.compile()
什么时候你真正需要 Agent
- 查询跨越多个知识领域
- 用户提出模糊问题,需要查询改写
- 你拥有多种工具(向量搜索 + SQL + 网络搜索)
- 你希望系统能说"我不知道",而不是胡编乱造
常见问题
LangGraph 还是 LangChain? LangGraph 是 LangChain 团队打造的更新型图结构框架,适合用于构建 agent。而普通的 LangChain 链式结构处理简单的线性 RAG 已经足够。
什么是检索器 + 评分器模式? 这是最常见的 RAG agent 模式:先检索,再对文档评分,如果分数偏低就改写查询并重试——从而提升难题的解答准确率。
它支持本地模型吗? 支持——只需将 LLM 换成 Ollama,向量存储换成 Chroma 即可;图逻辑本身与具体模型无关。
相关文章
❓ 常见问题
LangGraph 还是 LangChain?
LangGraph 是 LangChain 团队打造的更新型图结构框架,适合用于构建 agent。而普通的 LangChain 链式结构处理简单的线性 RAG 已经足够。
什么是检索器 + 评分器模式?
这是最常见的 RAG agent 模式:先检索,再对文档评分,如果分数偏低就改写查询并重试——从而提升难题的解答准确率。
它支持本地模型吗?
支持——只需将 LLM 换成 Ollama,向量存储换成 Chroma 即可;图逻辑本身与具体模型无关。
本站文章由编辑人工撰写,收录的工具均经过实测或公开资料核验。文中链接指向工具官网或 GitHub 仓库,仅作信息参考,不构成付费推广。
