昇腾 NPU ×LangGraph:5 大 Agent 协作打造金融投研全流程自动化

举报
yd_256782412 发表于 2026/08/02 16:16:22 2026/08/02
【摘要】 基于 LangGraph 状态图编排 5 大专业 Agent( 行情监控 / 研报分析 / 投资推理 / 风险评估 / 知识图谱),在华为昇腾 910B4 NPU 上原生运行 MindSpore 推理,4 大工作流模 板覆盖深度投研、快速风控、行业对比、异动深挖,把投研报告产出时间从2-3天压缩到压缩到 10 分钟

昇腾 NPU × LangGraph:5 大 Agent 协作打造金融投研全流程自动化

本文分享"华为昇腾 × AtomGit AI 社区 金融行业应用 Agent 黑客松"参赛项目 SmartInvestAgent 的设计与落地。系统基于 LangGraph 多智能体编排,在华为昇腾 910B4 NPU 上原生运行 MindSpore 推理,通过 5 大专业 Agent 协作,将一份可交付的投研报告产出时间从 2–3 天压缩到 10 分钟。

一、为什么金融一线需要"投研 Agent 编排引擎"

机构投研分析师的日常作业高度碎片化:

  • 行情监控:盯盘、异动检测、量价预警,依赖多终端切换;
  • 研报分析:PDF 解析、观点提取、多报告交叉对比;
  • 投资推理:基本面 / 技术面 / 资金面 / 情绪面多维融合;
  • 风险评估:VaR、最大回撤、Beta、组合风险分级预警;
  • 知识图谱:产业链追溯、关联实体推理、隐含线索发现。

这 5 类能力分散在不同系统中,分析师每天重复"整理数据 → 拼接观点 → 撰写报告",单份深度报告耗时 2–3 天。真正的痛点不是缺工具,而是缺一个能把专家推理链固化为可编排 Agent 的底座——这正是 SmartInvestAgent 要解决的问题。

二、整体架构:LangGraph 状态图 + Agent 注册表

                    ┌─────────────────────────────────────────┐
                    │           用户 / 金融一线员工            │
                          (Web UI / SSE 流式对话 / API)       │
                    └──────────────────┬──────────────────────┘
                                       │
                    ┌──────────────────▼──────────────────────┐
                    │       LangGraph 编排引擎 (意图识别)      │
                    │  状态图 + 任务分解 + 故障隔离 + SSE推送   │
                    └──────────────────┬──────────────────────┘
                                       │
        ┌──────────────┬───────────────┼───────────────┬──────────────┐
        ▼              ▼               ▼               ▼              ▼
  ┌──────────┐  ┌──────────┐   ┌──────────┐   ┌──────────┐   ┌──────────┐
  │ 行情监控  │  │ 研报分析  │   │ 投资推理  │   │ 风险评估  │   │ 知识图谱  │
  │  Agent   │  │  Agent   │   │  Agent   │   │  Agent   │   │  Agent   │
  └────┬─────┘  └────┬─────┘   └────┬─────┘   └────┬─────┘   └────┬─────┘
       │             │              │              │              │
       ▼             ▼              ▼              ▼              ▼
  ┌──────────────────────────────────────────────────────────────────────┐
  │                          基础设施层                                   │
  │  AKShare行情 │ RAG(Milvus+BGE-M3) │ Neo4j图谱 │ PostgreSQL │ Redis  │
  └──────────────────────────────────────────────────────────────────────┘
                                       │
                    ┌──────────────────▼──────────────────────┐
                    │       LLM 后端 (factory 自动切换)        │
                    │   Mock │ GPU (vLLM) │ 昇腾NPU(MindSpore) │
                    └─────────────────────────────────────────┘

2.1 编排引擎的核心节点

编排引擎基于 LangGraph 状态图实现,核心节点如下(节选自 backend/app/core/orchestrator/graph.py):

节点 职责
_intent_recognition 识别用户意图,决定走单 Agent 还是多 Agent 编排
_task_decomposition 把复杂请求分解为有依赖关系的子任务图
_route_execution 路由到并行执行或顺序执行分支
_parallel_execution 按依赖层并行调度多个 Agent
_sequential_execution 顺序执行需要前后依赖的 Agent 链
_result_aggregation 汇总各 Agent 输出,生成最终结构化结果

关键设计是 _group_by_dependency_layers:把任务按依赖关系分层,同一层内的 Agent 用 asyncio.gather 并行执行,层与层之间串行等待。这使得"行情监控 → 研报检索 → 知识图谱 → 多源推理 → 风险评估 → 报告生成"6 步链路中可并行的部分自动并行,端到端延迟显著下降。

2.2 故障隔离

金融场景对可用性要求高,单个 Agent 异常不能拖垮整条编排链。FaultIsolator_safe_execute 包裹的 Agent 调用中捕获异常,把失败任务标记为 skipped 并记录降级原因,编排引擎继续推进其余任务。Demo 模式下所有依赖自动降级为 Mock,保证 python start_demo.py 在零外部依赖下端到端跑通。

三、5 大专业 Agent 能力矩阵

Agent 职责 关键能力
MarketMonitorAgent 行情监控 实时行情、异动检测、K 线分析、量价预警
ReportAnalysisAgent 研报分析 PDF 解析、观点提取、多报告对比、PDF 导出
InferenceAgent 投资推理 多维信息融合、推理链构建、投资建议生成
RiskAssessmentAgent 风险评估 VaR / 波动率 / 最大回撤 / Beta、组合风险、环境调整
KnowledgeGraphAgent 知识图谱 产业链追溯、关联推理、实体查询、图谱导入

每个 Agent 都遵循 BaseAgent 抽象:输入 AgentState,输出结构化结果 + 思考过程元数据。思考过程通过 SSE 实时推送到前端,让分析师能看到 Agent 的推理链而不是黑盒结果——这对金融合规与可解释性至关重要。

四、昇腾 NPU 原生适配:从 vLLM 到 MindSpore 的工程落地

这是本项目最硬核的部分。LLM 后端通过 factory.py 的注册表模式实现三路切换:

_REGISTRY: dict[str, type[LLMInferenceBackend]] = {
    "gpu": GPUBackend,
    "ascend_npu": AscendNPUBackend,
    "mock": MockLLMBackend,
}

4.1 MindSpore 推理引擎

MindSporeEngine 是昇腾 NPU 推理的核心封装(backend/app/infra/llm/mindspore_engine.py),关键实现:

def _init_context(self) -> None:
    """配置 MindSpore 运行上下文 (Ascend device + 混合精度 + 快速编译)。"""
    ms = _try_import_mindspore()
    if ms is None:
        return
    ms.set_context(
        mode=ms.GRAPH_MODE,
        device_target="Ascend",
        device_id=self._device_id,
        save_graphs=False,
        enable_auto_mixed_precision=True,
    )
    try:
        ms.set_context(op_compile_mode="fast")  # CANN 算子快速编译
    except (KeyError, ValueError):
        pass  # 某些 MindSpore 版本不支持该参数

设计上有几个关键决策:

  1. 延迟导入 mindspore_try_import_mindspore() 只在真正推理时才 import mindspore,避免在开发机(无 CANN 环境)上 import 本模块就报错。_MS_AVAILABLE 标记位避免重复尝试导入。

  2. mindformers 优先,原生回退load_model 先尝试 mindformers.AutoModel(高层 API,推荐路径),失败再回退到原生 load_checkpoint + load_param_into_net。这覆盖了从预置大模型到自训 checkpoint 的两种典型场景。

  3. 流式推理的 token-by-token 实现:MindSpore 不原生支持流式生成,这里通过增量推理实现——每步用当前已生成序列前向一次,取最后一个位置的 logits 做 top-p 采样,yield 每个 token 的解码文本。配合前端 SSE 通道,分析师能实时看到推理链展开。

4.2 NPU 设备监控与自动分配

NPUMonitorbackend/app/infra/llm/npu_monitor.py)通过 npu-smi 命令解析设备状态:

def auto_assign_device(self) -> int:
    """自动分配可用 NPU 设备(显存充足)。策略:选择空闲显存最大的设备。"""
    device_count = self.get_device_count()
    if device_count == 0:
        logger.warning("No NPU device available, falling back to device 0")
        return 0
    min_free_mb = int(os.environ.get("NPU_MIN_FREE_MEMORY_MB", "4096"))
    best_device, best_free = 0, -1
    for dev_id in range(device_count):
        free = self.get_device_memory(dev_id).get("free_mb", 0)
        if free > best_free:
            best_free, best_device = free, dev_id
    if best_free < min_free_mb:
        logger.warning("All NPU devices have insufficient free memory ...")
    return best_device

这套机制让多卡昇腾环境(如 2 × Ascend 910B4)下的推理任务能自动均衡到空闲显存最大的卡,避免单卡 OOM。get_device_info 还会解析 ASCEND_HOME_PATH 环境变量推断 CANN 版本,方便 Prometheus 采集 NPU 利用率指标做容量规划。

五、4 大工作流模板:从投研到异动响应

系统预置 4 个开箱即用的工作流模板(backend/app/core/workflows/templates.py),覆盖金融一线 80% 高频场景:

模板 步骤数 预估耗时 输出
deep_investment_research 深度投研分析 6 步 3–5 分钟 投研报告 PDF
quick_risk_scan 快速风控扫描 4 步 30 秒 风险概览 + 预警列表
industry_comparison 行业对比分析 4 步 2–3 分钟 行业对比报告
anomaly_deep_dive 异动深度分析 5 步 1–2 分钟 异动分析报告

以"深度投研分析"为例,6 步 SSE 流全 success:行情监控 → 研报检索 → 知识图谱 → 多源推理 → 风险评估 → 报告生成。每一步的中间结果都通过 SSE 推送,分析师可以随时打断、追问、调整参数。

六、商业化与跨场景可扩展

6.1 商业模式

  1. SaaS 订阅:按席位收费,投研 Agent 平台托管(云端昇腾算力);
  2. 私有化部署:券商 / 基金内网部署,按年 license + 算力支持;
  3. Agent 模板市场:投研 / 风控 / 异动等工作流模板按需购买;
  4. 专家经验沉淀:把资深分析师推理链固化为 Agent 模板,按调用计费。

6.2 跨场景可扩展

底座 LangGraph 编排 + Agent 注册表设计,从投研可平滑拓展到:

  • 合规:监管文件核对 Agent(可解释 / 可追溯 / 可申诉);
  • 客服:客户经理表单录入 Agent;
  • 跨境支付:7–8 环节容错编排 Agent。

七、总结与展望

SmartInvestAgent 的工程实践验证了三个关键结论:

  1. LangGraph 状态图 + 依赖分层并行是金融多 Agent 编排的可行范式,比纯线性 chain 显著降低端到端延迟;
  2. 昇腾 NPU 通过 MindSpore + mindformers 路径已能支撑金融 LLM 推理,enable_auto_mixed_precision + op_compile_mode="fast" 是性能调优的两个关键开关;
  3. Demo 模式零依赖降级是黑客松 / 投评审场景的杀手锏——同一套代码既能 DEMO_MODE=True 跑通端到端,又能切到真实昇腾算力跑生产。

下一步规划:

  • 接入更多数据源(Tushare、Wind)并做缓存层优化;
  • 探索 MindSpore 2.9 + MindFormers 1.9 的 KV-Cache 复用,进一步压低流式推理首 token 延迟;
  • 把 Agent 推理链固化为可导出的 “投研剧本”,支撑跨机构复制。

项目地址:SmartInvestAgent(华为昇腾 × AtomGit AI 社区 金融行业应用 Agent 黑客松参赛作品)

演示视频SmartInvestAgent 端到端 Demo(昇腾 NPU 真跑通)

License:MIT(参赛作品已授权主办方非商业展示,知识产权归参赛者所有)

欢迎在评论区交流昇腾 NPU 适配、LangGraph 编排、金融 Agent 落地的任何问题,我会逐条回复。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。