OpenFinance 是一个面向量化研究与风控演练的全栈工作台(monorepo),包含:
backend:FastAPI 服务,负责研究计划、因子计算、策略选择、回测、风控审批、任务编排与 SSE 事件流。frontend:Next.js 工作台,提供 Chat、Pipeline、Tasks、Reports、Risk 等页面。shared/contracts:前后端共享事件/模型约定。
当前代码默认可离线运行(LLM stub),无需先配置真实大模型 Key。
- 异步长任务体系:
Chat -> 立即返回 task_id -> SSE/Tasks 跟踪 -> 完成后结果可回放 - Pipeline 多阶段可观测:
task.created/progress/heartbeat/variant_started/variant_done/done/error - Parent/Child 任务:Tasks 页可看父任务与各变体子任务进度
- 任务状态可恢复:前端持久化活跃任务,切页/刷新后可继续恢复状态
- 市场上下文锁定:Pipeline 启动后 market 固化并传递到子任务与 run/report
- 迁移预检(preflight):跨市场规则不匹配时先告警再确认
- Chat 风控快照同步:ChatResponse 返回
risk_snapshot与approvals_snapshot - Developer Mode 可观测:Live Trace + Reasoning Steps(不暴露私有 CoT,仅暴露可审计摘要)
OpenFinance/
backend/ # FastAPI + research/backtest/trading
frontend/ # Next.js workbench UI
infra/scripts/ # 启停、重置、验收脚本
shared/contracts/ # 共享事件与模型契约
.openfinance/ # 本地运行产物(运行后生成)
.runlogs/ # 本地日志(运行后生成)
- Python
3.11+ - Node.js
18+ - npm
9+ - 可选:
make(Windows 用户可直接使用start_dev.bat)
git clone https://github.com/MorikawaSouma/OpenFinance.git
cd OpenFinanceCopy-Item .env.example .env默认推荐保留:
OPENFINANCE_LLM_FORCE_STUB=true
如果接入真实模型:
OPENFINANCE_LLM_FORCE_STUB=falseOPENFINANCE_ZHIPU_API_KEY=<your_key>
方式 A(推荐,有 make):
make backend-install
make frontend-install方式 B(无 make):
cd backend
python -m pip install -e ".[dev]"
cd ../frontend
npm install
cd ..Windows 一键启动(推荐):
start_dev.bat或跨平台:
make dev说明:
start_dev.bat会调用infra/scripts/start_dev.ps1 -Restart- 若
3000/8000被占用,会自动回退可用端口并写入.runlogs/dev.ports
先查看实际端口:
Get-Content .runlogs/dev.ports默认地址(未回退时):
- Frontend:
http://127.0.0.1:3000 - Backend Docs:
http://127.0.0.1:8000/docs - Health Check:
http://127.0.0.1:8000/healthz - SSE Stream:
http://127.0.0.1:8000/events/stream
powershell -ExecutionPolicy Bypass -File infra/scripts/stop_dev.ps1/Dashboard:最近运行概览、快捷操作/chatChat:对话入口,支持 User/Developer 模式/pipelinePipeline:研究流程触发与过程查看/tasksTasks:父子任务树、进度、阶段、结果链接/datasetsDatasets:数据集版本与摘要/strategiesStrategies:策略版本与参数/factorsFactors:因子版本与健康报告/reportsReports:回测列表与对比/reports/{runId}Report Detail:指标、净值、交易、归因/evidenceEvidence:证据包与来源/riskRisk:审批流、锁状态、Kill Switch、风控事件/settingsSettings:工作台配置
GET /workbench/tasksGET /workbench/tasks/{task_id}POST /run/submitPOST /pipeline/run/submitPOST /workbench/backtests/runPOST /workbench/factors/run/submit
shared/contracts/events.json 中已定义主要事件类型:
task.createdtask.progresstask.heartbeattask.variant_startedtask.variant_donetask.donetask.erroragent.dispatched/agent.completedtool.call.started/tool.call.finishedartifact.createdreasoning.step.created/reasoning.step.updatedreasoning.trace.finalchat.delta/chat.done
- Chat 返回结论与引用
- Developer Mode 可看到
Reasoning Steps(意图识别、证据使用、结论综合) - 任务会被正常闭环(创建后进入 done/error,不应长期停在 initializing)
- Chat 立即返回
accepted + task_id - 前端显示 Running Card,可跳转 Tasks
- Pipeline 运行中持续推送阶段/心跳/子任务进度
- 完成后结果写入任务
result/result_ref,可直接打开 Report/Evidence/Plan
Developer Mode 面向调试和审计,不展示私有 CoT 原文,展示的是“可审计摘要”:
- Live Trace:agent/tool/artifact/audit 实时事件流
- Reasoning Steps:结构化步骤(hypothesis/evidence/counterevidence/revision/decision/warning)
- trace_id 追踪:支持
GET /trace/{trace_id}/restore恢复上下文
常用路径(默认):
.openfinance/registry/tasks.json.openfinance/registry/runs.jsonl.openfinance/registry/datasets.jsonl.openfinance/registry/plans.jsonl.openfinance/registry/audit.jsonl.openfinance/registry/chat_sessions.json.openfinance/registry/evidence.sqlite3.openfinance/registry/factors.sqlite3.openfinance/registry/approvals.sqlite3.openfinance/artifacts/factors/.runlogs/backend.out.log.runlogs/frontend.out.log
后端测试:
make backend-test或:
cd backend
pytest前端 E2E:
cd frontend
npm run test:e2e后端验收脚本(Windows):
powershell -ExecutionPolicy Bypass -File infra/scripts/acceptance_backend.ps1- 检查
GET /healthz - 检查
.runlogs/dev.ports里的实际端口 - 确认
NEXT_PUBLIC_API_BASE指向正确后端地址
- 刷新
/tasks并查看该任务status/error - 检查
.runlogs/backend.out.log与.openfinance/registry/tasks.json - 服务重启后,历史
queued/running任务会被恢复为error(防止“假运行”)
make dev-reset或:
python infra/scripts/dev_reset.py --yeslive trading默认关闭- 支持审批流与状态迁移(pending/approved/enabled/revoked)
- 支持
kill switch一键阻断
如果你是第一次看这个仓库,建议从以下路径开始阅读代码:
backend/openfinance/api/routes_chat.pybackend/openfinance/research/pipeline.pybackend/openfinance/quant/backtest/runner.pyfrontend/src/components/providers/workbench-provider.tsxfrontend/src/app/chat/page.tsx