昇腾 NPU ×LangGraph:5 大 Agent 协作打造金融投研全流程自动化
昇腾 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 版本不支持该参数
设计上有几个关键决策:
-
延迟导入 mindspore:
_try_import_mindspore()只在真正推理时才import mindspore,避免在开发机(无 CANN 环境)上 import 本模块就报错。_MS_AVAILABLE标记位避免重复尝试导入。 -
mindformers 优先,原生回退:
load_model先尝试mindformers.AutoModel(高层 API,推荐路径),失败再回退到原生load_checkpoint + load_param_into_net。这覆盖了从预置大模型到自训 checkpoint 的两种典型场景。 -
流式推理的 token-by-token 实现:MindSpore 不原生支持流式生成,这里通过增量推理实现——每步用当前已生成序列前向一次,取最后一个位置的 logits 做 top-p 采样,yield 每个 token 的解码文本。配合前端 SSE 通道,分析师能实时看到推理链展开。
4.2 NPU 设备监控与自动分配
NPUMonitor(backend/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 商业模式
- SaaS 订阅:按席位收费,投研 Agent 平台托管(云端昇腾算力);
- 私有化部署:券商 / 基金内网部署,按年 license + 算力支持;
- Agent 模板市场:投研 / 风控 / 异动等工作流模板按需购买;
- 专家经验沉淀:把资深分析师推理链固化为 Agent 模板,按调用计费。
6.2 跨场景可扩展
底座 LangGraph 编排 + Agent 注册表设计,从投研可平滑拓展到:
- 合规:监管文件核对 Agent(可解释 / 可追溯 / 可申诉);
- 客服:客户经理表单录入 Agent;
- 跨境支付:7–8 环节容错编排 Agent。
七、总结与展望
SmartInvestAgent 的工程实践验证了三个关键结论:
- LangGraph 状态图 + 依赖分层并行是金融多 Agent 编排的可行范式,比纯线性 chain 显著降低端到端延迟;
- 昇腾 NPU 通过 MindSpore + mindformers 路径已能支撑金融 LLM 推理,
enable_auto_mixed_precision+op_compile_mode="fast"是性能调优的两个关键开关; - 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 落地的任何问题,我会逐条回复。
- 点赞
- 收藏
- 关注作者
评论(0)