在上一篇文章中,我们介绍了 LangChain 的基础用法:LLM 调用、Function Call、Memory、RAG、结构化输出。
但这些还只是"单 Agent"场景。如果遇到更复杂的需求呢?
“帮我分析一下茅台股票的投资价值,包括行业前景、财务数据、风险评估,最后生成一份投资报告。”
这种任务需要多个专业角色的协作:
LangGraph 就是来解决这个问题的。
是不是有小伙伴就有些困惑了,有了LangChain为什么还要LangGraph,这两个都到底是什么关系?简单来说,LangChain管 “零件” 的封装(LLM、提示词、工具、记忆),LangGraph管 “流程” 的编排(状态、循环、分支、多智能体)。LangChain 封装了 LLM调用、Prompt、工具、记忆等 的复杂性,让开发者能够快速搭建标准智能体;而LangGraph 则为需要深度控制流程、自定义逻辑的场景提供了灵活的图式编程能力。

怎么选?简单的讲:简单任务 → LangChain;多步骤、多 Agent 协作 → LangGraph。
有了整体理解,那我们继续“分析一下茅台股票的投资价值”任务。
# 安装 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 pytestcp .env.example .env编辑 .env(也可以配置在环境变量中【优先级高于.env】,或配置在配置中心也可):
DEEPSEEK_API_KEY=sk-xxxpython -c "import importlib.metadata; print(importlib.metadata.version('langgraph'))"


LangChain 生态
├── LangChain Core(LLM、Prompt、Memory、Tools)
└── LangGraph(构建复杂的多 Agent 协作系统)关系说明:
选择建议:
场景 | LangChain | LangGraph |
|---|---|---|
简单对话 | ✅ | ✅(可用但没必要) |
带记忆对话 | ✅ | ✅ |
工具调用 | ✅ | ✅ |
多步骤流水线 | ⚠️ 麻烦 | ✅ 优雅 |
多 Agent 协作 | ⚠️ 难维护 | ✅ 原生支持 |
条件循环 | ❌ 复杂 | ✅ 原生支持 |
状态管理 | 手动维护 | ✅ 自动累积 |
LangGraph的核心设计理念:

图 = 节点(Node) + 边(Edge) + 状态(State)状态是节点之间共享的数据容器:
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:消息自动追加,不会覆盖节点是执行具体任务的函数:
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
}边定义节点之间的流转关系:
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)"""构建工作流图"""
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 协作

src/
├── state/ # 状态管理
│ └── __init__.py # StockAnalysisState 定义
├── agents/ # Agent 实现
│ ├── __init__.py # 四个节点 + 工具
│ └── tools.py # 工具定义
└── workflow/ # 工作流
└── __init__.py # StockAnalysisWorkflow1. 状态定义
# 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. 工具定义
# 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. 节点实现
# 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. 工作流
# 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 selffrom src.workflow import StockAnalysisWorkflow
workflow = StockAnalysisWorkflow()
workflow.build()
result = workflow.run("茅台(600519)")
print(result["final_report"])运行:
# 运行演示
uv run python demos/main.py运行结果:
% 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 个分析步骤
方向 | 具体建议 |
|---|---|
工具扩展 | 接入真实金融 API(Wind、Choice),获取实时行情和公告 |
Agent 增强 | 增加宏观研究员、竞争对手对比分析师等角色 |
循环支持 | 让风险评估师可以要求行业研究员重新补充信息(数据不足→重新研究) |
记忆持久化 | 使用 Redis 存储历史分析报告,支持多轮对话 |
流式输出 | 使用 stream() 逐步展示每个节点的结果 |
多股票支持 | 抽象为通用框架,支持任意股票分析 |
Human-in-the-loop | 加入人工审批节点 |
可视化 | 接入 LangSmith 调试可视化 |
GitHub: https://github.com/helloworldtang/langgraph-tutorials.git
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 的核心价值: