LangGraph 多 Agent RAG 框架实战

本文介绍 LangGraph 这一面向长周期、有状态智能体的低级别编排框架,通过 StateGraph 构建“检索→相关性判断→生成答案”的多 Agent RAG 工作流,并提供可直接运行的完整代码示例,帮助开发者理解如何在复杂检索场景中实现持久执行、人机回环与生产化部署。

A
AGISeed Team
AGISeed 作者

banner

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条件边,控制流程走向
StateGraphLangGraph 的核心图结构

该示例为基于 LangGraph 官方 StateGraph API 的演示性实现。具体的检索器、重排序器、查询重写策略以及多 Agent 协作细节可根据业务需求进一步扩展。

6. 技术渊源与学习资源

LangGraph 的设计灵感源自 Pregel 与 Apache Beam,公共接口借鉴了 NetworkX。它由 LangChain Inc 构建,但可以不依赖 LangChain 独立使用。

推荐学习路径:

  • 官方文档:概念概述、使用指南与 API 参考。
  • LangGraph Quickstart:快速上手构建第一个 LangGraph 应用。
  • LangChain Academy:结构化的免费课程,适合系统学习。
  • 社区与案例:社区论坛、Built with LangGraph 案例研究、贡献指南等。

原文来源:LangGraph GitHub Repository / LangChain 官方文档

原文链接

https://github.com/langchain-ai/langgraph

相关文章

RAG 与知识库

RAG 入门:让 AI 读懂你的数据

RAG入门到精通:向量检索、Embedding、知识图谱等核心技术原理与实战部署指南。

阅读更多
RAG 与知识库

RAG 三大范式与技术体系论文解读

文章系统解读了 RAG 综述论文,梳理了从 Naive RAG、Advanced RAG 到 Modular RAG 的三大范式演进,并深入解析检索、生成与增强三大核心技术,帮助读者理解 RAG 如何缓解 LLM 幻觉与知识滞后问题,构建更可信的知识密集型应用。

阅读更多
RAG 与知识库

Chroma 快速入门与双栈实战指南

本文是一份 Chroma 向量数据库的入门实战指南,面向 RAG 与知识库场景,介绍 Python 与 JavaScript 双栈的安装部署、核心 API(collection 增删改查、add/query)、数据写入与检索过滤,并简要说明本地部署迁移到 Chroma Cloud 的方法,帮助开发者快速上手搭建语义检索能力。

阅读更多