Skip to content

Latest commit

 

History

History
502 lines (361 loc) · 19 KB

File metadata and controls

502 lines (361 loc) · 19 KB

LangGraph ReAct Agent 模板

Version LangGraph Build License README EN DeepWiki Twitter

基于 LangGraph 构建的 ReAct 智能体 模板,专为本地开发者设计,与 LangGraph Studio 无缝协作。ReAct 智能体是简洁的原型智能体,可以灵活扩展支持多种工具。

🎉 最新 v0.2.0 版本:完整的评估系统和多模型支持!查看 发布说明 了解所有新功能详情。

LangGraph Studio 界面截图

核心逻辑定义在 src/react_agent/graph.py 中,展示了一个灵活的 ReAct 智能体,能够迭代地推理用户查询并执行操作。模板采用模块化架构,在 src/common/ 中包含共享组件,集成 MCP 外部文档源,并提供完整的测试套件。

🌟 欢迎加入社区

如果此项目对您有帮助,请点个 ⭐ Star,万分感谢! 同时,您还可以访问我们的 B 站空间 获取教程和 LangGraph 高级开发技巧。

📚 LangChain 实战系列图书

掌握 Agent 技术先机!从掌握 LangGraph 开始!我们的新书《LangGraph实战》现已出版,点击查看详情 ❤️

📱 加入飞书群

欢迎您扫描下方二维码加入我们的技术讨论群:

飞书群二维码

v0.2.0 核心特性

🚀 专为国内开发者准备的模型平台

  • 硅基流动 SiliconFlow: 完整的中国大模型云平台集成,支持 Qwen、GLM、DeepSeek 等国产开源模型
  • 通义千问系列模型: 通过 langchain-qwq 包提供 Qwen 系列模型支持,包括 Qwen-Plus、Qwen-Turbo、QwQ-32B、QvQ-72B
  • OpenAI 兼容: 支持 GPT-4o、GPT-4o-mini 等模型,以及任何 OpenAI API 格式的提供商

🔬 生产级智能体评估系统

  • 双重评估框架: 图轨迹评估 + 多轮对话仿真,全方位测试智能体性能
  • LLM-as-Judge 方法论: 基于场景特定评判标准的专业评估系统
  • 硅基流动模型评估: 使用国产开源模型进行智能体性能基准测试,提供多种 10B 以下模型便于测试评估
  • LangSmith 集成: 完整的评估跟踪和历史分析系统

🛠 Agent 工具集成生态系统

  • 模型上下文协议(MCP,Model Context Protocol): 运行时动态外部工具加载
  • DeepWiki MCP 服务器: 可选加载的 MCP 工具,用于 GitHub 仓库文档访问和问答功能
  • Web 搜索: 内置传统的 LangChain 工具(Tavily),用于互联网信息的检索

🆕 LangGraph v0.6 新特性

Note

LangGraph v0.6 新功能: LangGraph Context 替代了传统的 config['configurable'] 模式。运行时上下文现在通过 invoke/streamcontext 参数传递,提供了更清洁、更直观的智能体配置方式。

  • 上下文驱动配置: 通过 context 参数传递运行时上下文,而不是 config['configurable']
  • 简化的 API: 为智能体传递运行时配置提供更清洁的接口
  • 向后兼容: 从旧配置模式的渐进迁移路径

📊 LangGraph Platform 开发支持

  • 本地开发服务器: 完整的 LangGraph Platform 开发环境
  • 70+ 测试用例: 单元、集成和端到端测试覆盖,完整测试 DeepWiki 工具加载和执行
  • ReAct 循环验证: 确保正确的工具-模型交互

🤖 AI 驱动开发

  • 使用 Claude Code 开发: 本模板使用先进的 AI 开发环境构建
  • 持续迭代: 我们将持续完善和添加新模板
  • 社区驱动: 为不同场景的 LangGraph 开发提供更多选择

工作原理

ReAct 智能体的工作流程:

  1. 接收用户查询作为输入
  2. 推理需要执行什么操作来回答查询
  3. 使用可用工具执行选定的操作
  4. 观察操作结果
  5. 重复步骤 2-4 直到能够提供最终答案

智能体内置 Web 搜索功能和可选的 DeepWiki MCP 文档工具,可轻松扩展以支持各种用例的自定义工具。

示例执行追踪

查看这些 LangSmith 追踪记录,了解智能体的实际工作原理:

快速开始

使用 uv 安装(推荐)

  1. 安装 uv(如果尚未安装):
curl -LsSf https://astral.sh/uv/install.sh | sh
  1. 克隆仓库:
git clone https://github.com/webup/langgraph-up-react.git
cd langgraph-up-react
  1. 安装依赖(包括开发依赖):
uv sync --dev
  1. 复制示例环境文件并填入必要的 API 密钥:
cp .env.example .env

环境配置

  1. 编辑 .env 文件,添加您的 API 密钥:
# 必需:阿里云百炼平台模型
REGION=cn  # 或 'international' 使用国内端点(默认)

# 必需:搜索功能所需
TAVILY_API_KEY=your_tavily_api_key

# 必需:如使用通义千问模型(默认)
DASHSCOPE_API_KEY=your_dashscope_api_key

# 推荐:硅基流动大模型云平台(用于评估和多模型支持)
SILICONFLOW_API_KEY=your_siliconflow_api_key

# 可选:OpenAI 模型服务平台密钥
OPENAI_API_KEY=your_openai_key

# 可选:如使用兼容 OpenAI 模型接口的服务平台
OPENAI_API_BASE=your_openai_base

# 可选:始终启用 DeepWiki 文档工具
ENABLE_DEEPWIKI=true

主要搜索工具使用 Tavily。在 此处 创建 API 密钥。

模型配置

模板使用 qwen:qwen-flash 作为默认模型,定义在 src/common/context.py 中。您可以通过三种方式配置不同的模型:

  1. 运行时上下文(编程使用推荐)
  2. 环境变量
  3. LangGraph Studio 助手配置

模型配置方法

1. 运行时上下文(推荐)

使用新的 LangGraph v0.6 上下文参数在运行时配置模型:

from common.context import Context
from react_agent import graph

# 通过上下文配置模型
result = await graph.ainvoke(
    {"messages": [("user", "您的问题")]},
    context=Context(model="openai:gpt-4o-mini")
)

2. 环境变量

.env 文件中设置 MODEL 环境变量:

MODEL=anthropic:claude-3.5-haiku

3. LangGraph Studio 助手配置

在 LangGraph Studio 中,通过 Assistant 配置模型。创建或更新具有不同模型配置的助手,以便在不同设置之间轻松切换。

支持的模型格式

模型字符串格式提供商:模型名称(遵循 LangChain init_chat_model 命名约定)

# OpenAI 模型
"openai:gpt-4o-mini"
"openai:gpt-4o"

# 硅基流动模型(国产开源模型云平台)
"siliconflow:Qwen/Qwen3-8B"           # Qwen 系列高效模型
"siliconflow:THUDM/GLM-4-9B-0414"     # GLM 系列对话模型
"siliconflow:THUDM/GLM-Z1-9B-0414"    # GLM 推理增强模型

# 通义千问模型(支持区域配置)
"qwen:qwen-flash"          # 默认模型
"qwen:qwen-plus"           # 平衡性能
"qwen:qwq-32b-preview"     # 推理模型
"qwen:qvq-72b-preview"     # 多模态推理

# Anthropic 模型
"anthropic:claude-4-sonnet"
"anthropic:claude-3.5-haiku"

各提供商 API 密钥设置

硅基流动(推荐用于评估)

SILICONFLOW_API_KEY=your-siliconflow-api-key

获取 API 密钥:硅基流动控制台 - 支持 Qwen、GLM、DeepSeek 等国产开源模型

通义千问(默认)

DASHSCOPE_API_KEY=your-dashscope-api-key
REGION=cn  # 或 'international' 使用国际端点

获取 API 密钥:DashScope 控制台

OpenAI

OPENAI_API_KEY=your-openai-api-key

获取 API 密钥:OpenAI 平台

Anthropic

ANTHROPIC_API_KEY=your-anthropic-api-key

获取 API 密钥:Anthropic 控制台

OpenAI 兼容提供商

OPENAI_API_KEY=your-provider-api-key
OPENAI_API_BASE=https://your-provider-api-base-url/v1

支持 SiliconFlow、Together AI、Groq 和其他 OpenAI 兼容 API。

自定义说明

添加新工具

src/common/tools.py 中扩展智能体功能:

async def my_custom_tool(input: str) -> str:
    """自定义工具描述。"""
    # 您的工具逻辑
    return "工具输出"

定义结构化输出

当需要返回结构化响应(例如工具输出或图状态)时,请使用 AgentBaseModel。它默认启用严格类型检查、禁止未知字段,并支持字段别名序列化:

from pydantic import Field

from common import AgentBaseModel


class Answer(AgentBaseModel):
    display_name: str = Field(alias="displayName")
    score: float


result = Answer(display_name="居里", score=0.98)
assert result.model_dump(by_alias=True) == {"displayName": "居里", "score": 0.98}

共享的 schema 基类请放在 src/common/basemodel.py 中,以保持 src/common/models/ 目录专注于模型客户端集成。

添加新的 MCP 工具

集成外部 MCP 服务器以获得更多功能:

  1. 配置 MCP 服务器,在 src/common/mcp.py 中:
MCP_SERVERS = {
    "deepwiki": {
        "url": "https://mcp.deepwiki.com/mcp",
        "transport": "streamable_http",
    },
    # 示例:Context7 库文档服务
    "context7": {
        "url": "https://mcp.context7.com/sse",
        "transport": "sse",
    },
}
  1. 添加服务器函数
async def get_context7_tools() -> List[Callable[..., Any]]:
    """获取 Context7 文档工具。"""
    return await get_mcp_tools("context7")
  1. 在上下文中启用 - 添加上下文标志并在 get_tools() 函数中加载工具:
# 在 src/common/tools.py 中
if context.enable_context7:
    tools.extend(await get_context7_tools())

Tip

Context7 示例:MCP 配置中已包含注释的 Context7 服务器设置。Context7 提供最新的库文档和示例 - 只需取消注释配置并添加上下文标志即可启用。

修改系统提示

编辑 src/common/prompts.py 中的默认系统提示。

开发工作流

启动开发服务器

make dev        # 启动 LangGraph 开发服务器(uv run langgraph dev --no-browser)
make dev_ui     # 启动带 LangGraph Studio Web UI 界面的服务器

测试

make test                    # 运行单元和集成测试(默认)
make test_unit               # 仅运行单元测试
make test_integration        # 运行集成测试  
make test_e2e               # 运行端到端测试(需要运行服务器)
make test_all               # 运行所有测试套件

代码质量

make lint       # 运行 linter(ruff + mypy)
make format     # 使用 ruff 自动格式化代码

LangGraph Studio 功能

  • 可视化图结构: 查看智能体的执行流程
  • 实时调试: 逐步执行和状态检查
  • 交互式测试: 直接在 Studio 中测试智能体

架构

模板采用模块化架构:

  • src/react_agent/: 核心智能体图和状态管理
  • src/common/: 共享组件(上下文、模型、工具、提示、MCP 集成)
  • tests/: 完整测试套件,包含 fixtures 和 MCP 集成覆盖
  • langgraph.json: LangGraph Agent 的各项基础配置

关键组件:

  • src/common/mcp.py: 外部文档源的 MCP 客户端管理
  • 动态工具加载: 基于上下文配置的运行时工具选择
  • 上下文系统: 支持环境变量的集中化配置

此架构支持多智能体和不同实现间的轻松组件重用。

🔬 智能体评估系统

为什么需要评估?

智能体评估是生产级 AI 应用的关键环节,它能够:

  • 🎯 验证性能: 确保智能体在不同场景下的推理和工具使用能力
  • 🛡️ 安全检测: 通过对抗性测试发现潜在的安全边界问题
  • 📊 基准对比: 量化不同模型和配置的性能差异
  • 🔄 持续改进: 为智能体优化提供客观的性能指标

双重评估框架

本模板提供业界领先的综合评估系统,采用双重评估方法论:

🎯 图轨迹评估(Graph Trajectory Evaluation)

测试智能体的推理模式和工具使用决策:

# 运行所有模型和场景的图轨迹评估
make eval_graph

# 测试特定硅基流动模型
make eval_graph_qwen    # Qwen/Qwen3-8B 模型
make eval_graph_glm     # GLM-4-9B-0414 模型

评估场景

  • 简单问题: "法国的首都是什么?" - 测试基础事实的效率回答
  • 搜索必需: "人工智能的最新新闻是什么?" - 测试工具使用和信息综合
  • 多步推理: "可再生能源的优缺点和最新发展是什么?" - 测试复杂分析任务

🔄 多轮对话仿真(Multi-turn Chat Simulation)

测试对话能力和角色适应性:

# 启动开发服务器(多轮评估需要)
make dev

# 在另一个终端运行多轮评估
make eval_multiturn

# 测试特定用户角色
make eval_multiturn_polite   # 礼貌用户角色
make eval_multiturn_hacker   # 对抗性用户角色

角色场景

  • 写作助手 × 用户角色:专业邮件撰写协作
  • 客服代表 × 用户角色:账户问题解决支持
  • 面试官 × 用户角色:技术面试流程管理

硅基流动模型评估优势

使用中国领先的大模型云平台进行评估:

  • 🇨🇳 国产模型: 使用 Qwen/Qwen3-8B、GLM-4-9B-0414 等国产开源模型
  • 🏅 先进评估器: GLM-Z1-9B-0414 推理模型作为 LLM 评判器
  • 🧪 丰富选择: 提供多种 10B 以下开源模型,便于开展评估测试实验

评估系统详情

评估系统提供了完整的智能体性能分析框架,包含详细的测试场景、评估方法论和结果分析。

要了解具体的评估结果、测试场景和使用方法,请参阅详细的评估系统文档。

快速开始评估

# 设置必需的环境变量
export SILICONFLOW_API_KEY="your_siliconflow_api_key"
export TAVILY_API_KEY="your_tavily_api_key"
export LANGSMITH_API_KEY="your_langsmith_api_key"

# 运行综合评估套件
make evals

# 或分别运行各类评估
make eval_graph       # 图轨迹评估(独立运行)
make eval_multiturn   # 多轮对话评估(需要服务器)

查看更多版本信息

访问 GitHub Releases 页面查看所有版本发布说明:https://github.com/webup/langgraph-up-react/releases

Tip

硅基流动 API 密钥: 在 硅基流动控制台 获取 API 密钥,支持 Qwen、GLM、DeepSeek 等多种国产开源模型。

评估系统特性

  • 🎯 LLM-as-Judge 方法论: 场景特定的自定义评判标准
  • 📊 专业报告系统: 详细的评分提取和排名系统
  • 🔍 轨迹标准化: 兼容 JSON 序列化的轨迹处理
  • 📈 LangSmith 集成: 全面的跟踪和历史分析
  • ⚙️ 集中化配置: config.py 中的统一评估设置

详细评估文档请参见:tests/evaluations/README.md

开发与社区

路线图与贡献

  • 📋 ROADMAP.md - 当前里程碑和未来规划
  • 🐛 欢迎 Issues 和 PR - 通过 提交 issue 或提交 pull request 帮助我们改进
  • 🤖 使用 Claude Code 开发 - 本模板使用 Claude Code 积极开发维护

参与贡献

我们鼓励社区贡献!无论是:

  • 报告 bug 或建议新功能
  • 添加新工具或模型集成
  • 改进文档
  • 分享您的用例和模板

查看我们的路线图,了解下一步工作计划以及如何参与贡献。

了解更多

LangChain 实战系列图书

《LangGraph实战》《LangChain实战》照片 《LangGraph实战》购书海报 《LangChain实战》购书海报

致谢

本项目的构建离不开以下优秀的开源项目和服务平台:

LangChain 官方项目

  • LangGraph - 强大的智能体图构建框架
  • LangChain - 构建 LLM 应用的核心库
  • AgentEvals - 智能体评估框架,提供 LLM-as-Judge 方法论
  • OpenEvals - 开放评估工具和方法
  • LangSmith - LLM 应用跟踪和调试平台

LangChain 社区集成

MaaS 平台服务

  • 硅基流动 (SiliconFlow) - 提供国产开源模型的 MaaS 平台(中国用户 10B 以下模型永久免费)
  • 阿里云百炼 (DashScope) - 通义千问系列模型服务平台

查看所有版本更新详情:📋 GitHub Releases

感谢所有贡献者和开源社区的支持!🙏