LangGraph 多 Agent RAG 框架实战
本文介绍 LangGraph 这一面向长周期、有状态智能体的低级别编排框架,通过 StateGraph 构建“检索→相关性判断→生成答案”的多 Agent RAG 工作流,并提供可直接运行的完整代码示例,帮助开发者理解如何在复杂检索场景中实现持久执行、人机回环与生产化部署。
LangGraph 多 Agent RAG 框架实战
1. LangGraph 概述与定位
LangGraph 是一个面向长时运行(long-running)、**有状态(stateful)**智能体的低级别编排框架。它为构建、管理和部署具备持久状态的复杂工作流提供底层基础设施,既可独立使用,也能与 LangChain 生态无缝集成。
与高层封装不同,LangGraph 更强调状态机、图结构与执行持久性,因此特别适合需要多步推理、循环迭代、人在回路(Human-in-the-loop)的 RAG 与 Agentic 检索场景。
说明:本文标题中的“多 Agent RAG 框架实战”为中文改写定位。LangGraph 本身是一个通用编排框架,并非仅服务于 RAG;其官方介绍中针对多 Agent RAG 的具体架构细节未在本文中展开。
2. 核心能力:持久执行、人机回环与记忆
LangGraph 为长周期、有状态的工作流提供以下关键能力:
- Durable Execution(持久执行):支持智能体在故障后自动恢复,从断点继续运行,适合长周期任务。
- Human-in-the-loop(人机回环):允许在任意执行节点暂停,人工检查并修改状态后继续执行。
- Comprehensive Memory(综合记忆):同时支持短期工作记忆(单次会话内的上下文)与长期跨会话记忆。
这些能力共同支撑起 LangGraph 在复杂 Agent 工作流中的可靠性。
3. 可观测性与生产化部署
在可观测性方面,LangSmith 提供执行路径可视化、状态追踪与运行时指标,帮助开发者理解复杂 Agent 行为。
在生产部署方面,LangGraph Platform(原 LangGraph Cloud)提供面向有状态、长周期工作流的生产级部署基础设施,支持规模化、可靠地将智能体系统上线。
4. LangGraph 生态系统
LangGraph 可与 LangChain 产品无缝集成,构成完整的智能体开发工具链:
- LangGraph:核心编排框架,负责状态管理与图执行。
- LangChain:提供集成与可复用组件,简化 LLM 应用开发。
- LangSmith:提供可观测性、评估与调试能力。
- LangGraph Platform:提供专用部署平台与可视化能力,支持团队共享与快速迭代。
5. 实战:构建多 Agent RAG 检索工作流
下面给出一个最小可运行的 LangGraph 多 Agent RAG 示例。该示例使用 StateGraph 编排“检索 → 相关性判断 → 生成答案”的流程,可直接复制并在本地执行。
注:本示例演示的是基于图节点的多步骤 RAG 模式。严格意义上的多 Agent 系统还需要引入 Agent 之间的委托、通信与任务分配机制,读者可在此基础上进一步扩展。
5.1 环境准备
# 安装依赖
pip install -U langgraph langchain langchain-openai
# 配置 OpenAI API Key
export OPENAI_API_KEY="your-openai-api-key"
5.2 完整代码
from typing import TypedDict, List
from langgraph.graph import StateGraph, END
from langchain_openai import ChatOpenAI
# 定义全局状态
class RAGState(TypedDict):
question: str # 用户问题
retrieved_docs: List[str] # 检索到的文档
relevance: str # 相关性判断结果
answer: str # 最终答案
# 初始化 LLM
llm = ChatOpenAI(model="gpt-4o-mini", temperature=0)
# 节点 1:检索 Agent(模拟检索)
def retrieve(state: RAGState):
"""
根据用户问题检索相关文档。
实际项目中可替换为向量检索、BM25、混合检索等。
"""
question = state["question"]
docs = [
f"Doc A: 关于「{question}」的背景信息。",
f"Doc B: 关于「{question}」的技术细节。",
]
return {"retrieved_docs": docs}
# 节点 2:相关性判断 Agent
def grade_relevance(state: RAGState):
"""
判断检索到的文档是否与用户问题相关。
"""
question = state["question"]
docs = "\n".join(state["retrieved_docs"])
prompt = (
f"判断以下文档是否与问题相关,仅回复 relevant 或 irrelevant。\n"
f"问题:{question}\n文档:{docs}"
)
response = llm.invoke(prompt)
relevance = "relevant" if "relevant" in response.content.lower() else "irrelevant"
return {"relevance": relevance}
# 节点 3:生成答案 Agent
def generate(state: RAGState):
"""
基于相关文档生成最终答案。
"""
question = state["question"]
docs = "\n".join(state["retrieved_docs"])
prompt = (
f"基于以下文档回答问题,如果文档不足请说明。\n"
f"文档:{docs}\n问题:{question}"
)
response = llm.invoke(prompt)
return {"answer": response.content}
# 条件边:根据相关性决定下一步
def should_generate(state: RAGState):
"""
如果文档相关则生成答案;否则可扩展为查询重写并重新检索。
"""
if state["relevance"] == "relevant":
return "generate"
return "rewrite_query" # 示例中直接结束,实际可接入重写节点
# 构建 StateGraph
builder = StateGraph(RAGState)
builder.add_node("retrieve", retrieve)
builder.add_node("grade", grade_relevance)
builder.add_node("generate", generate)
builder.set_entry_point("retrieve")
builder.add_edge("retrieve", "grade")
builder.add_conditional_edges(
"grade",
should_generate,
{
"generate": "generate",
"rewrite_query": END, # 示例中直接结束
},
)
builder.add_edge("generate", END)
graph = builder.compile()
# 执行工作流
if __name__ == "__main__":
result = graph.invoke({"question": "LangGraph 的核心优势是什么?"})
print("最终答案:", result["answer"])
5.3 代码说明
| 组件 | 作用 |
|---|---|
RAGState | 定义工作流全局状态,所有节点共享 |
retrieve | 模拟文档检索,可替换为真实检索器 |
grade_relevance | 判断文档与问题的相关性 |
generate | 基于相关文档生成答案 |
should_generate | 条件边,控制流程走向 |
StateGraph | LangGraph 的核心图结构 |
该示例为基于 LangGraph 官方
StateGraphAPI 的演示性实现。具体的检索器、重排序器、查询重写策略以及多 Agent 协作细节可根据业务需求进一步扩展。
6. 技术渊源与学习资源
LangGraph 的设计灵感源自 Pregel 与 Apache Beam,公共接口借鉴了 NetworkX。它由 LangChain Inc 构建,但可以不依赖 LangChain 独立使用。
推荐学习路径:
- 官方文档:概念概述、使用指南与 API 参考。
- LangGraph Quickstart:快速上手构建第一个 LangGraph 应用。
- LangChain Academy:结构化的免费课程,适合系统学习。
- 社区与案例:社区论坛、Built with LangGraph 案例研究、贡献指南等。
原文来源:LangGraph GitHub Repository / LangChain 官方文档
原文链接
相关文章
RAG 三大范式与技术体系论文解读
文章系统解读了 RAG 综述论文,梳理了从 Naive RAG、Advanced RAG 到 Modular RAG 的三大范式演进,并深入解析检索、生成与增强三大核心技术,帮助读者理解 RAG 如何缓解 LLM 幻觉与知识滞后问题,构建更可信的知识密集型应用。
阅读更多Chroma 快速入门与双栈实战指南
本文是一份 Chroma 向量数据库的入门实战指南,面向 RAG 与知识库场景,介绍 Python 与 JavaScript 双栈的安装部署、核心 API(collection 增删改查、add/query)、数据写入与检索过滤,并简要说明本地部署迁移到 Chroma Cloud 的方法,帮助开发者快速上手搭建语义检索能力。
阅读更多