LangGraph 实战:7 个 Agent 如何协同产出一份 A 股研报

0 阅读6分钟

前言

最近在折腾一个基于 LangGraph + LangChain 的多智能体股票分析系统,目标是:给一个 A 股代码,自动产出一份可以直接读的基本面研报。

踩了很多坑之后总结出 7 个角色的协作架构,这篇文章把核心设计分享出来,希望对做 AI 应用的同学有参考价值。

📌 本文为工程实现笔记,所有涉及股票的示例仅用于演示 Prompt 设计与 Agent 协作逻辑,不构成任何投资建议;文中观点基于个人实测,受样本与时间窗口影响明显。


单模型的问题

一开始我试着用 DeepSeek 一把梭,Prompt 是这样:

你是 A 股分析师,请分析贵州茅台。

结果:

  • 输出 80% 是百度百科级别的"公司介绍"
  • 财务数据乱编(训练截止日期之前的 2022 年数据当成 2025 年)
  • 没有风险点、没有辩证、没有结构

这不是模型不行,是使用方式不对


为什么要多智能体?

我做了一个对比实验:同一支股票,同一套数据,分别用:

方案输出质量打分(满 10)
单模型一把梭4
9 小节结构化 Prompt7
多智能体协作9

多智能体的收益主要来自三点:

  1. 分工降低幻觉:每个 Agent 只做一件事,注意力更集中
  2. 辩论提升深度:看多看空强制对立,输出对抗性论证
  3. 风控兜底合规:最后一层专门检查过度承诺

架构设计:7 个 Agent,4 层协作

┌─ 第 1 层:信息收集(4 并行) ─┐
│ 基本面 · 技术 · 新闻 · 情绪  │
└────────────┬───────────────┘
             ▼
┌─ 第 2 层:多空辩论 ──────────┐
│    看多研究员 ⟷ 看空研究员    │
└────────────┬───────────────┘
             ▼
┌─ 第 3 层:决策整合 ──────────┐
│         交易员              │
└────────────┬───────────────┘
             ▼
┌─ 第 4 层:合规复核 ──────────┐
│          风控               │
└────────────┬───────────────┘
             ▼
          研报输出

核心设计要点

1. 信息层的工具选型

四个分析师有不同的工具链:

# 伪代码示意
FUNDAMENTAL_TOOLS = [
    get_financial_report,     # Tushare
    get_industry_peers,       # AkShare
    calc_valuation_metrics,   # 本地计算
]

TECHNICAL_TOOLS = [
    get_kline_data,           # AkShare
    calc_indicators,          # pandas_ta
]

NEWS_TOOLS = [
    fetch_recent_news,        # 新闻 API
    dedupe_and_summarize,     # LLM 摘要
]

SENTIMENT_TOOLS = [
    fetch_guba_posts,         # 东方财富股吧
    fetch_xueqiu_posts,       # 雪球
]

关键设计原则:能用代码算的绝不让 LLM 算。
MACD、RSI、PE 分位——这些都是确定性计算,用 pandas 秒出结果,把结论丢给 LLM 解读,而不是让 LLM 算数字。

2. 多空辩论的 Prompt 设计

这是最容易踩坑的地方。很多人的第一版 Prompt 是:

请从看多和看空两个角度分析这支股票。

结果 LLM 给你一段"不温不火"的文字——既不真正看多,也不真正看空。

改进方案:两个独立角色,强制站队

BULL_PROMPT = """
你是一个**只会看多**的研究员。
你的任务:基于以下信息,构建尽可能强的看多论证。
不要考虑反面观点,不要模棱两可,不要兼顾平衡。
你的 KPI 就是把看多论证写得漂亮。

输入信息:
{reports}

输出要求:
- 列出至少 3 条看多论据
- 每条论据必须引用具体数据
- 最后给出一个强烈看多的结论
"""

BEAR_PROMPT = """
你是一个**只会看空**的研究员。
...(与看多对称)
"""

这样逼出来的对抗观点,才真正有信息价值。

3. 交易员:不给买卖点位

交易员的输入是前面所有报告。关键 Prompt 约束:

TRADER_PROMPT = """
综合以下信息做决策:
- 4 份信息报告
- 看多论证 / 看空论证

输出要求:
1. 最终信号:看多 / 中性 / 看空
2. 最有分量的 3 条理由
3. 需要跟踪的 5 个指标(不是买卖点位)
4. ❌ 禁止输出任何具体价格建议(合规红线)
"""

这条 "禁止给买卖点" 是合规底线。

4. 风控:LLM 检查 LLM

风控 Agent 的任务是检查交易员的输出:

RISK_PROMPT = """
你是合规风控专员。请检查以下研报是否符合规范:

【检查项】
1. 是否有"一定""必涨""保证"等过度承诺词?
2. 是否遗漏重大风险点(商誉、政策、黑天鹅)?
3. 是否给了具体买卖价位?(红线)
4. 免责声明是否清晰?

【输入研报】
{trader_output}

【输出】
如发现问题,指出具体位置并返回"需重写";
无问题则返回"通过"。
"""

风控 Agent 用一个更便宜的模型就行(Qwen-Turbo 足够),目的是降本而不是推理。


工程上踩的坑

坑 1:并行调用的限流

4 个信息分析师并行时用同一个 API 会被限速。解决:模型分散——不同分析师用不同的供应商 API(DeepSeek / Qwen / GLM),自然分流。

坑 2:上下文爆炸

信息报告堆起来后 context 能到 30K+。解决:每个 Agent 输出前强制 summarize 到 500 字,原文存向量库供后续查询。

坑 3:多空辩论"同化"

辩论 3 轮后两边都变成"客观中立"。解决:每轮立场锁定,system prompt 里显式写"你只能看多,不能改口"。

坑 4:前端流式输出

整个流程串下来 3-8 分钟,用户容易弃用。解决:WebSocket + 分阶段 stream——每个 Agent 完成就推送进度,用户能看到"基本面分析师已完成 ✓"这种实时反馈。


参考实现

这套架构我们在个人项目里跑通了一版,用 DeepSeek V4 + 千问 Qwen-Plus 双模型可切换,Prompt 模板与 LangGraph 编排逻辑和本文描述一致。作为技术参考记录在 nbstockai.com,不是商业产品介绍——如果你也在搭类似系统,欢迎对照交叉验证。


总结

多智能体的本质不是"堆角色",而是把复杂任务拆成确定性子任务。每个子任务有明确的输入/输出/评估标准,LLM 就会表现得可靠得多。

这个思路可以迁移到:

  • 代码审查系统(架构师/审查员/修正师/测试员)
  • 文档审阅系统(事实核查/风格/术语)
  • 客户支持系统(分诊/技术/话术/质检)

只要场景有多维判断 + 合规风险,多智能体都值得考虑。

想展开了解这条技术路线,可以读我另一篇笔记 多智能体架构如何做股票分析


💬 评论区聊聊你用多智能体架构做过什么应用?

📝 本文为工程学习笔记,所涉股票代码与财务数据仅作为 Prompt 示例,不构成投资建议。

🔗 延伸阅读:AI 股票分析工具盘点 2026