首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >如何用LangGraph实现多Agent 协作开发,20分钟包教包会!(有配套github源码,零帧起手,开箱即协作。文末有GLM免费token福利,手慢无)

如何用LangGraph实现多Agent 协作开发,20分钟包教包会!(有配套github源码,零帧起手,开箱即协作。文末有GLM免费token福利,手慢无)

作者头像
烟雨平生
发布2026-04-14 19:16:07
发布2026-04-14 19:16:07
540
举报

在上一篇文章中,我们介绍了 LangChain 的基础用法:LLM 调用、Function Call、Memory、RAG、结构化输出。

但这些还只是"单 Agent"场景。如果遇到更复杂的需求呢?

帮我分析一下茅台股票的投资价值,包括行业前景、财务数据、风险评估,最后生成一份投资报告。

这种任务需要多个专业角色的协作:

  • 行业研究员:收集行业信息、竞争格局
  • 财务分析师:分析财务指标、估值水平
  • 风险评估师:评估各类投资风险
  • 报告撰写者:汇总生成最终报告

LangGraph 就是来解决这个问题的。

是不是有小伙伴就有些困惑了,有了LangChain为什么还要LangGraph,这两个都到底是什么关系?简单来说,LangChain管 “零件” 的封装(LLM、提示词、工具、记忆),LangGraph管 “流程” 的编排(状态、循环、分支、多智能体)。LangChain 封装了 LLM调用、Prompt、工具、记忆等 的复杂性,让开发者能够快速搭建标准智能体;而LangGraph 则为需要深度控制流程、自定义逻辑的场景提供了灵活的图式编程能力。

怎么选?简单的讲:简单任务 → LangChain;多步骤、多 Agent 协作 → LangGraph。

有了整体理解,那我们继续“分析一下茅台股票的投资价值”任务。

一、环境准备。工欲善其事,必先利其器

1.1 依赖安装

代码语言:javascript
复制
# 安装 uv
curl -LsSf https://astral.sh/uv/install.sh | sh

# 创建虚拟环境
uv venv
source .venv/bin/activate

# 安装依赖
uv add langchain langchain-openai langchain-core langgraph python-dotenv pydantic pytest

1.2 环境变量

代码语言:javascript
复制
cp .env.example .env

编辑 .env(也可以配置在环境变量中【优先级高于.env】,或配置在配置中心也可):

代码语言:javascript
复制
DEEPSEEK_API_KEY=sk-xxx

1.3 验证安装

代码语言:javascript
复制
python -c "import importlib.metadata; print(importlib.metadata.version('langgraph'))"

二、LangGraph 是什么?

2.1 与LangChain的关系

  • LangChain:更偏向应用层的组件与集成,强调易用与快速拼装
  • LangGraph:更偏向流程编排与状态管理,强调可控、可恢复、可扩展
代码语言:javascript
复制
LangChain 生态
├── LangChain Core(LLM、Prompt、Memory、Tools)
└── LangGraph(构建复杂的多 Agent 协作系统)

关系说明

  • LangChain Core:提供基础组件(LLM 调用、Prompt 模板、Memory 等)
  • LangGraph:构建在 LangChain Core 之上,用图结构编排复杂工作流

选择建议

  • 简单任务 → LangChain
  • 多步骤、多 Agent 协作 → LangGraph

2.2 LangGraph 解决了什么问题?

场景

LangChain

LangGraph

简单对话

✅(可用但没必要)

带记忆对话

工具调用

多步骤流水线

⚠️ 麻烦

✅ 优雅

多 Agent 协作

⚠️ 难维护

✅ 原生支持

条件循环

❌ 复杂

✅ 原生支持

状态管理

手动维护

✅ 自动累积

2.3 核心思想

LangGraph的核心设计理念:

  1. 基于图结构:使用节点(Node)、边(Edge)、状态(State)三大抽象
  2. 复杂流程支持:支持循环、条件分支、并行执行
  3. 状态持久化:通过检查点(checkpoint)机制实现状态保存和恢复
  4. 人工介入:支持人在回路(Human-in-the-Loop,HITL)机制

代码语言:javascript
复制
图 = 节点(Node) + 边(Edge) + 状态(State)
  • Node:执行任务
  • Edge:控制流转
  • State:全局共享数据

三、核心概念

3.1 状态(State)

状态是节点之间共享的数据容器:

代码语言:javascript
复制
class StockAnalysisState(TypedDict):
    messages: Annotated[Sequence[BaseMessage], add] #消息历史,自动累积
    next_agent: str         # 下一个节点
    industry_research: str  # 行业前景
    financial_data: str     # 财务数据
    risk_assessment: str    # 风险评估
    final_report: str       # 最终报告
  • Annotated + add:消息自动追加,不会覆盖
  • 所有节点读写同一份状态

3.2 节点(Node)

节点是执行具体任务的函数:

代码语言:javascript
复制
def industry_researcher_node(state: StockAnalysisState) -> StockAnalysisState:
    # 1. 读取状态
    query = state["messages"][-1].content

    # 2. 调用工具获取行业信息
    result = get_industry_info.invoke({"industry": "白酒"})

    # 3. 返回更新后的状态
    return {
        "messages": [AIMessage(content=result)],
        "next_agent": "financial_analyst",
        "industry_research": result
    }

3.3 边(Edge)

边定义节点之间的流转关系:

代码语言:javascript
复制
workflow.add_edge("industry_researcher", "financial_analyst")
workflow.add_edge("financial_analyst", "risk_assessor")
workflow.add_edge("risk_assessor", "report_writer")
workflow.add_edge("report_writer", END)

3.4 执行流程

代码语言:javascript
复制
"""构建工作流图"""
from langgraph.graph import StateGraph, END
from ..state import StockAnalysisState
g = StateGraph(StockAnalysisState)

# 注册节点
g.add_node("industry_researcher", industry_researcher_node)
g.add_node("financial_analyst",   financial_analyst_node)
g.add_node("risk_assessor",       risk_assessor_node)
g.add_node("report_writer",       report_writer_node)

# 入口
g.set_entry_point("industry_researcher")
g.add_edge("report_writer", END)
app = workflow.compile()
result = app.invoke({"messages": [HumanMessage(content="分析股票投资价值")]})

四、实战:多 Agent 协作(可直接运行)

4.1 任务分解

任务:"帮我分析一下茅台股票的投资价值,包括行业前景、财务数据、风险评估,最后生成一份投资报告。"

解决方案:四个专业 Agent 协作

4.2 项目结构

代码语言:javascript
复制
src/
├── state/           # 状态管理
│   └── __init__.py  # StockAnalysisState 定义
├── agents/          # Agent 实现
│   ├── __init__.py  # 四个节点 + 工具
│   └── tools.py     # 工具定义
└── workflow/       # 工作流
    └── __init__.py  # StockAnalysisWorkflow

4.3 核心代码

1. 状态定义

代码语言:javascript
复制
# src/state/__init__.py

class StockAnalysisState(TypedDict):
    messages: Annotated[Sequence[BaseMessage], add]
    next_agent: str
    industry_research: str      # 行业前景
    financial_data: str         # 财务数据
    risk_assessment: str        # 风险评估
    final_report: str          # 最终报告

2. 工具定义

代码语言:javascript
复制
# src/agents/tools.py

@tool
def get_industry_info(industry: str) -> str:
    """查询行业信息和前景"""
    ...

@tool
def get_financial_data(stock: str) -> str:
    """查询股票财务数据"""
    ...

@tool
def get_risk_factors(stock: str) -> str:
    """查询股票风险因素"""
    ...

3. 节点实现

代码语言:javascript
复制
# src/agents/__init__.py

def industry_researcher_node(state: StockAnalysisState) -> StockAnalysisState:
    """行业前景研究员"""
    llm = get_llm()
    llm_with_tools = llm.bind_tools([get_industry_info])

    # 调用工具获取行业信息
    result = get_industry_info.invoke({"industry": "白酒"})

    return {
        "messages": [AIMessage(content=result)],
        "next_agent": "financial_analyst",
        "industry_research": result
    }

def financial_analyst_node(state: StockAnalysisState) -> StockAnalysisState:
    """财务数据分析师"""
    # 类似实现...

def risk_assessor_node(state: StockAnalysisState) -> StockAnalysisState:
    """风险评估师"""
    # 类似实现...

def report_writer_node(state: StockAnalysisState) -> StockAnalysisState:
    """投资报告撰写者"""
    # 类似实现...

4. 工作流

代码语言:javascript
复制
# src/workflow/__init__.py

from src.agents import (
    StockAnalysisWorkflow,
    industry_researcher_node,
    financial_analyst_node,
    risk_assessor_node,
    report_writer_node
)

class StockAnalysisWorkflow:
    def build(self):
        g = StateGraph(StockAnalysisState)
        g.add_node("industry_researcher", industry_researcher_node)
        g.add_node("financial_analyst", financial_analyst_node)
        g.add_node("risk_assessor", risk_assessor_node)
        g.add_node("report_writer", report_writer_node)

        g.set_entry_point("industry_researcher")
        g.add_edge("industry_researcher", "financial_analyst")
        g.add_edge("financial_analyst", "risk_assessor")
        g.add_edge("risk_assessor", "report_writer")
        g.add_edge("report_writer", END)

        self.app = g.compile()
        return self

4.4 使用示例

代码语言:javascript
复制
from src.workflow import StockAnalysisWorkflow

workflow = StockAnalysisWorkflow()
workflow.build()

result = workflow.run("茅台(600519)")

print(result["final_report"])

运行:

代码语言:javascript
复制
# 运行演示
uv run python demos/main.py

运行结果

代码语言:javascript
复制
% uv run python demos/main.py
============================================================
LangGraph 多 Agent 协作演示
任务:分析茅台股票的投资价值
============================================================

🔄 开始分析...
------------------------------------------------------------

============================================================
🎯 任务目标:分析股票投资价值
============================================================
📌 目标股票:茅台(600519)
============================================================

============================================================
🔄 [行业研究员] 开始工作
   正在查询行业前景信息...
============================================================

============================================================
🔄 [行业研究员] 分析问题
   用户问题: 请分析 茅台(600519) 的投资价值,包括行业前景、财务数据、风险评估,最后生成投资报告。...
============================================================

============================================================
🔄 [行业研究员] 调用 LLM 决策
   决定是否调用工具...
============================================================

============================================================
🔄 [行业研究员] 直接生成
   未触发工具,使用 LLM 直接生成
============================================================

============================================================
🔄 [行业研究员] 完成分析
   结果摘要: ### **白酒行业前景分析:聚焦高端白酒赛道(以茅台为例)**

#### **一、行业规模与增长趋势**
1. **行业整体规模**:  
   中国白酒行业市场规模超**6000亿元**,其中高端白酒(单价800元以上)占比约**20%-25%**,但利润贡献率超过行业总利润的**50%**。以茅台、五粮液、泸州老窖为代表的高端品牌是核心驱动力。  
2. **增长趋势**:  
   - ...
============================================================

============================================================
🔄 [行业研究员] 交接给
   → 财务分析师
============================================================

============================================================
🔄 [财务分析师] 开始工作
   正在查询财务数据和估值...
============================================================

============================================================
🔄 [财务分析师] 调用 LLM 决策
   决定调用哪些财务工具...
============================================================

============================================================
🔄 [财务分析师] 执行工具调用
   调用工具: get_financial_data
============================================================

============================================================
🔄 [财务分析师] 工具返回
   财务指标获取成功
============================================================

============================================================
🔄 [财务分析师] 执行工具调用
   调用工具: get_stock_price
============================================================

============================================================
🔄 [财务分析师] 工具返回
   估值数据获取成功
============================================================

============================================================
🔄 [财务分析师] 分析数据
   LLM 正在分析财务指标...
============================================================

============================================================
🔄 [财务分析师] 完成分析
   结果摘要: 贵州茅台(600519)核心财务指标:
- 营收:约 1500 亿元(近年持续增长,年增速约 15-20%)
- 净利润:约 750 亿元,净利率约 50%(行业最高)
- ROE:约 35%(持续高水平)
- 毛利率:约 92%(极强定价权)
- 现金流:经营性现金流充裕,几乎无有息负债
- 分红:每年高比例分红,股息率约 2-3%
- PE:约 25-30 倍(历史中枢水平)

贵州茅台(60...
============================================================

============================================================
🔄 [财务分析师] 交接给
   → 风险评估师
============================================================

============================================================
🔄 [风险评估师] 开始工作
   正在评估投资风险...
============================================================

============================================================
🔄 [风险评估师] 获取风险数据
   调用风险查询工具...
============================================================

============================================================
🔄 [风险评估师] 工具返回
   风险因素获取成功
============================================================

============================================================
🔄 [风险评估师] 综合评估
   结合行业和财务数据进行风险评级...
============================================================

============================================================
🔄 [风险评估师] 完成评估
   结果摘要: 贵州茅台主要风险因素:
1. 估值风险:当前 PE 处于历史中枢,若市场情绪下行,估值可能压缩
2. 政策风险:反腐、限制三公消费政策可能影响商务需求
3. 消费降级风险:宏观经济下行时,高端消费可能受压制
4. 竞争风险:其他高端白酒品牌(五粮液、国窖)持续追赶
5. 食品安全风险:任何质量事件都可能对品牌造成重大冲击
6. 汇率风险:出口业务受汇率波动影响(占比较小)

综合风险评估:
###...
============================================================

============================================================
🔄 [风险评估师] 交接给
   → 报告撰写者
============================================================

============================================================
🔄 [报告撰写者] 开始工作
   正在汇总分析结果,撰写投资报告...
============================================================

============================================================
🔄 [报告撰写er] 整合行业分析
   正在整合行业前景研究...
============================================================

============================================================
🔄 [报告撰写者] 整合财务分析
   正在整合财务数据分析...
============================================================

============================================================
🔄 [报告撰写者] 整合风险评估
   正在整合风险评估结果...
============================================================

============================================================
🔄 [报告撰写者] 生成报告
   LLM 正在撰写投资报告...
============================================================

============================================================
🔄 [报告撰写者] 完成撰写
   投资报告生成完毕!
============================================================

============================================================
✅ 所有分析步骤完成!
============================================================


============================================================
📊 分析完成!
============================================================

【行业前景】
### **白酒行业前景分析:聚焦高端白酒赛道(以茅台为例)**

#### **一、行业规模与增长趋势**
1. **行业整体规模**:  
   中国白酒行业市场规模超**6000亿元**,其中高端白酒(单价800元以上)占比约**20%-25%**,但利润贡献率超过行业总利润的**50%**。以茅台、五粮液、泸州老窖为代表的高端品牌是核心驱动力。  
2. **增长趋势**:  
   - **短期承压与长期韧性**:受经济周期、消费结构调整影响,行业增速阶段性放缓,但高端白酒凭借**强品牌壁垒和稀缺性**,仍保持高于行业平均的增速(近年高端赛道年化增长率约**10%-15%**, 显著高...

【财务数据】
贵州茅台(600519)核心财务指标:
- 营收:约 1500 亿元(近年持续增长,年增速约 15-20%)
- 净利润:约 750 亿元,净利率约 50%(行业最高)
- ROE:约 35%(持续高水平)
- 毛利率:约 92%(极强定价权)
- 现金流:经营性现金流充裕,几乎无有息负债
- 分红:每年高比例分红,股息率约 2-3%
- PE:约 25-30 倍(历史中枢水平)

贵州茅台(600519):当前价格约 1680 元,市值约 2.1 万亿,PE 约 27 倍,PB 约 9 倍

分析:### 贵州茅台(600519)财务分析报告

#### 一、盈利能力分析:顶级护城河与卓越盈...

【风险评估】
贵州茅台主要风险因素:
1. 估值风险:当前 PE 处于历史中枢,若市场情绪下行,估值可能压缩
2. 政策风险:反腐、限制三公消费政策可能影响商务需求
3. 消费降级风险:宏观经济下行时,高端消费可能受压制
4. 竞争风险:其他高端白酒品牌(五粮液、国窖)持续追赶
5. 食品安全风险:任何质量事件都可能对品牌造成重大冲击
6. 汇率风险:出口业务受汇率波动影响(占比较小)

综合风险评估:
### **贵州茅台(600519)投资风险综合评估报告**

结合行业前景与公司财务数据分析,贵州茅台的核心投资逻辑在于其**无与伦比的品牌护城河、顶级的盈利质量以及高端白酒赛道的长期确定性**。然而,其...

============================================================
📝 最终投资报告
============================================================

### **贵州茅台(600519)投资报告**

**1. 投资摘要**
**结论:维持“买入”评级,目标价位1,900元。** 茅台作为高端白酒绝对龙头,拥有无与伦比的品牌护城河与定价权,财务表现堪称A股典范(ROE约35%,净利率约50%)。尽管面临估值及宏观消费情绪波动 等风险,但其在高端赛道的稀缺性、盈利的确定性以及健康的现金流,使其成为长期价值投资的优质标的。当前估值(PE约27倍)处于历史中枢,具备配置价值。

**2. 行业前景**
高端白酒是确定性最高的赛道,增长逻辑已转向“结构升级+稀缺价值”。行业呈现寡头垄断格局,茅台独占近50%高端市场份额,护城河极深。消费升级与高净值人群扩容支撑长期需求,商务与民间消费已成 核心,政策影响有限。挑战在于宏观经济敏感度与年轻化转型,但头部企业凭借品牌与渠道控制力,有望持续享受溢价,格局强者恒强。

**3. 财务分析**
公司呈现顶级盈利能力与财务质量。毛利率约92%、净利率约50%,ROE长期维持在35%左右,为A股标杆。营收与净利润保持15-20%的稳健增长,由提价、产品结构升级及直营渠道扩张驱动。现金流极其充沛,得益于“先款后货”模式,几乎无有息负债,并维持高比例分红。财务结构稳健,风险极低。

**4. 风险评估**
综合风险评级为“中”。主要风险包括:1)**估值风险(中)**:当前估值合理但非低估,对市场情绪敏感;2)**食品安全风险(高)**:为最高级别潜在风险,任何质量事件都可能严重冲击品牌信誉;3)**消费降级风险(中)**:宏观经济下行可能短期压制高端需求。政策风险、竞争风险及汇率风险评级为“低”,对公司基本面影响有限。

**5. 投资建议**
**建议:买入。** 目标价位1,900元,对应约30倍前瞻市盈率,基于其稳健增长与稀缺溢价。投资者可在估值合理区间分批配置,将其作为组合的长期核心资产。需密切关注批价走势、直营渠道进展及提价 政策的落地,这些将是关键的业绩催化剂。短期需承受市场波动,但长期看,其品牌价值与盈利确定性有望带来持续回报。

*免责声明:本报告基于公开信息分析,不构成任何投资建议。市场有风险,投资需谨慎。*

共经过 5 个分析步骤

五、架构图

六、LangGraph 的优势

  1. 状态统一管理,无全局变量混乱
  2. 流程声明式,可读性极强
  3. 条件路由 / 循环天然支持
  4. 多 Agent 协作结构清晰
  5. 易于调试、可视化、扩展

七、提升质量的下一步

方向

具体建议

工具扩展

接入真实金融 API(Wind、Choice),获取实时行情和公告

Agent 增强

增加宏观研究员、竞争对手对比分析师等角色

循环支持

让风险评估师可以要求行业研究员重新补充信息(数据不足→重新研究)

记忆持久化

使用 Redis 存储历史分析报告,支持多轮对话

流式输出

使用 stream() 逐步展示每个节点的结果

多股票支持

抽象为通用框架,支持任意股票分析

Human-in-the-loop

加入人工审批节点

可视化

接入 LangSmith 调试可视化

八、配套项目

GitHub: https://github.com/helloworldtang/langgraph-tutorials.git

代码语言:javascript
复制
git clone https://github.com/helloworldtang/langgraph-tutorials.git
cd langgraph-tutorials

uv venv && source .venv/bin/activate
uv add langchain langchain-openai langchain-core langgraph python-dotenv pydantic

cp .env.example .env  # 配置 DEEPSEEK_API_KEY

uv run python demos/main.py
uv run pytest tests/ -v

九、总结

对比项

传统写法

LangGraph

状态管理

全局变量 / 手动传

TypedDict 自动累积

流程控制

if/else/for

图结构 + 条件边

多 Agent

混乱耦合

节点化、可插拔

循环

难写易 bug

原生支持

LangGraph 的核心价值:

  1. 状态驱动:所有数据在状态中流动,自动累积
  2. 声明式流程:意图与实现分离,易于理解。复杂工作流不乱
  3. 条件路由:根据状态动态选择下一步
  4. 自然循环:节点之间可以互相调用
  5. 职责分离:每个节点只做一件事。多角色协作清晰
  6. 企业级:生产可用、可调试、可扩展
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2026-04-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 的数字化之路 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、环境准备。工欲善其事,必先利其器
    • 1.1 依赖安装
    • 1.2 环境变量
    • 1.3 验证安装
  • 二、LangGraph 是什么?
    • 2.1 与LangChain的关系
    • 2.2 LangGraph 解决了什么问题?
    • 2.3 核心思想
  • 三、核心概念
    • 3.1 状态(State)
    • 3.2 节点(Node)
    • 3.3 边(Edge)
    • 3.4 执行流程
  • 四、实战:多 Agent 协作(可直接运行)
    • 4.1 任务分解
    • 4.2 项目结构
    • 4.3 核心代码
    • 4.4 使用示例
  • 五、架构图
  • 六、LangGraph 的优势
  • 七、提升质量的下一步
  • 八、配套项目
  • 九、总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档