2 LangGraph 编排深化、异步任务闭环与前端产品化
2 LangGraph 编排深化、异步任务闭环与前端产品化
阶段时间:约 2026-04-06~2026-04-30
项目:FinAgent
摘要
本阶段在上一阶段的基础上,把系统推进到可异步执行、可轮询感知进度、可按用户隔离与清理的联调形态,并完成数据链路工程化分层与前端产品化的一轮集中迭代:后端侧落地 LangGraph 主图与子图(含分析师 ReAct 工具循环)、任务创建即落盘与 stage_log 驱动的进度语义、Dataflow 与 HTTP 路由解耦及 vendor 回退;工程侧修复本机 Ollama 在 Windows 代理环境下的调用问题,补齐 GET /api/history、DELETE /api/analysis/tasks/{task_id} 与用户维度隔离;前端侧完成登录页两段式与动态背景、react-router-dom 系统级路由与登录守卫、报告 Markdown 统一渲染与 PDF 导出、走势看板(K 线 + 均线 + 成交量)以及首页实时财经新闻。整体上,本阶段目标是把「图执行 → API 契约 → 多页面体验」对齐到可演示、可迭代的工程与产品标准,分析师阶段 LLM 输出质量仍在持续优化中。
一、阶段目标与主线叙事
上一阶段已固定五阶段投研叙事与 AkShare 数据封装。本阶段的主线可以概括为三条:
- 编排运行时:用 LangGraph 表达主流程(分析师子图 → 研究辩论 → 交易员 → 风控 → 组合经理 → 汇总报告),用
AnalysisGraphState+stage_log同时服务节点协作与前端进度展示。 - 任务与数据架构:异步
POST /api/analysis/tasks配合轮询;Dataflow 层统一route_to_vendor,与 FastAPI「任务生命周期」解耦;providers 专注拉数与归一化。 - 前端产品化:从「能联调」升级为可分享 URL、可读报告、可看走势、有资讯入口的完整侧栏信息架构(首页 / 单股 / 走势看板 / 分析报告;任务中心在导航上收敛,历史与报告由报告页承载)。
二、编排与状态:LangGraph、任务 API 与前端轮询
主图在 runner 侧串起 analyst、research_debate、trader、risk_review、portfolio_manager、build_report 等节点;分析师子图内四位专科(市场 / 舆情 / 新闻 / 基本面)共用 「Analyst 节点 + ToolNode + tools_condition」 的 ReAct 模板,避免工具未执行完就提前收口,并支持按角色限制工具集与 analyst_react_summaries 审计摘要。
状态设计不仅是 LLM 上下文,更是 API 与前端的事实来源:task_id、ticker、analysis_date、user_id、各阶段产物、report_json / report_markdown、以及最关键的 stage_log(pending / running / succeeded / skipped / failed 与时间戳)。节点侧统一「标记 running → 执行业务 → 标记 succeeded/failed → _persist_running_snapshot」模式;preseeded=True 表示创建任务时已写入进度骨架,前端拿到 task_id 即可立刻轮询,无需等待首节点结束。
典型接口形态:POST /api/analysis/tasks 创建并后台执行图;GET /api/analysis/tasks/{task_id} 读状态与 stage_log;GET .../result 取终态结果;只读报告另有 JSON / Markdown 路由;删除走 DELETE /api/analysis/tasks/{task_id} 并清理落盘文件。
(组员技术展开见 组员博客。)
三、数据层:Dataflow 路由与 Providers 边界
本阶段明确 两类路由:HTTP 路由负责任务鉴权、校验、触发与落盘;Dataflow 路由(route_to_vendor)负责抽象工具名到 vendor → providers 的映射、优选 vendor 与失败回退。图编排与 analyst_pipeline 结构化补齐复用同一条数据调用路径,上层不直接依赖 AkShare,便于替换数据源、单独跑 provider smoke 与定位「空数据 / 列不一致」类问题。
Providers 继续承担 OHLCV、新闻、社媒、扩展基本面等归一化职责,与任务状态、图节点流转严格分离。
(架构与时序说明见 组员博客。)
四、后端工程:本机 LLM、异步任务、历史与用户隔离
- LLM 与本机 Ollama:在未显式配置 OpenAI 兼容
base_url时,优先走本机 Ollama;对11434等本机地址使用httpx且trust_env=False,避免 Windows 系统代理把127.0.0.1流量导向代理导致 502;可通过环境变量关闭自动本机探测以强制走公网。 - 异步任务与归属:创建任务时先落盘 running 并写入
user_id,后台任务执行 LangGraph;读状态 / 报告前校验任务归属。 - 历史与删除:
GET /api/history按当前用户过滤;无user_id的旧落盘文件不入列表;删除接口真实删除 state + report 等产物,避免「前端列表删掉刷新又回来」。 - 契约与测试:
AnalysisTaskState等 schema 与前端对齐;pytest 通过 mock 覆盖异步成功、失败无报告、历史列表与删除等路径。
(变更清单与踩坑表见 组员博客 中「本机 LLM、任务中心/历史」等相关周报。)
五、前端:登录、路由、报告、走势与首页
- 登录页:intro / form 两段式流程;全屏循环视频背景 + 暗角蒙版限定在
.loginWrap,避免污染已登录主壳;毛玻璃卡片、新拟态 Tab、登录 / 注册横向滑动切换;认证仍对接/api/auth/*。 - 系统级路由:引入 react-router-dom,路径包括
/、/single、/trend、/report、/login;未登录重定向、登录后location.state.from回跳、已登录访问/login回首页;侧栏NavLink样式修复(去下划线、防溢出)。 - 单股分析:
runAnalyze串联创建任务、轮询至终态、取结果;股票代码 全角 / 大小写 / shsz 前缀与后缀 等规范化后请求/api/analysis/ticker/{ticker}/meta联动公司名;分析日期默认当天且 禁止未来日;状态文案中文化与stage_log映射进度。 - 报告体验:Markdown 反转义标准化 +
ReactMarkdown+remark-gfm统一渲染;报告页支持查看与 PDF 下载,列表对接GET /api/history,进入页面重新加载。 - 走势看板:K 线、MA5/MA10/MA30、成交量副图;默认可展示 A 股总体(以上证指数为参考),输入个股后切换个股走势。
- 首页:「实时财经新闻」按平台聚合,短 TTL 缓存与无效链接降级,减少标题乱跳与 404。
- 导航收敛:移除任务中心独立挂载,历史与操作集中在分析报告页,降低重复入口。
(登录页与单股分析、路由升级见 组员博客;报告展示、走势看板与首页新闻见 组员博客。)
六、界面截图(本地开发环境 127.0.0.1:5173)
登录
登录 / 注册表单
首页(能力概览 + 实时财经新闻)
走势看板(K 线、均线、成交量)
分析报告列表(历史、状态、查看 / PDF / 删除)
报告查看弹窗(结论文本 + 工具原始数据摘录)
七、阶段成果与如何复现
成果可概括为:
| 维度 | 本阶段产出 |
|---|---|
| 编排 | LangGraph 主图 + 分析师 ReAct 子图;stage_log 与 preseeded 任务语义 |
| 数据 | Dataflow 与 API 解耦;route_to_vendor + providers 统一工具路径 |
| 工程 | 本机 Ollama 稳定调用;异步任务、历史、按用户过滤与真实删除 |
| 产品 | 登录视觉升级;URL 路由与守卫;报告 Markdown + PDF;走势看板;首页新闻 |
复现路径:
- 根目录 venv 安装后端依赖;配置 LLM(本机 Ollama 或显式 OpenAI 兼容端点)。
cd backend启动uvicorn;frontend下npm run dev,或使用根目录start-dev.bat。- 注册 / 登录后依次验证:单股分析异步完成、报告页历史列表、走势看板、首页新闻加载。
八、小结与下阶段展望
本阶段 FinAgent 在图编排运行时、数据路由分层与前端可读可信三条线上同步推进:后端把「执行图」和「取数」拆开,前端把「能返回字符串」升级为「像研究报告与看盘工具」。已知限制包括:分析师阶段 LLM 输出质量与可解释性仍需迭代;新闻源与部分 meta 依赖外网稳定性;深链预填(如 /single?ticker=...)、导出模板与数据层观测指标等可作为自然延伸。
下阶段展望: 已基本实现分析师节点,(完整版将在下一阶段产出);下一步将逐步实现接下来的四个节点——研究辩论、交易员、风控、组合经理——与主图阶段及报告、前端展示持续对齐。
九、组员个人博客(CSDN)
| 组员 | 博客 |
|---|---|
| yjd(LangGraph、路由编排、分析师子图等) | https://blog.csdn.net/2301_80139500 |
| cjw(异步任务与历史、报告与走势看板、首页新闻等) | https://blog.csdn.net/2301_80431247 |
| qjh(Dataflow 分层、FastAPI 与数据路由协作等) | https://blog.csdn.net/2301_80202012 |
| wyf(登录页、单股分析、系统级 URL 与路由等) | https://blog.csdn.net/2301_81374824 |
更多推荐

所有评论(0)