2026-07-17 · dev 分支 · COMP7705 毕业设计
多 Agent 推理驱动的量化分析框架。LangGraph + DeepSeek LLM + FastAPI + Next.js 16 + SQLite。
核心能力:金融对话分析(ReAct Agent)、策略回测(MockBrokerEngine)、实时数据采集(Yahoo/Google/AkShare)、PDF 报告、OWM 记忆、技能系统、HITL 审批、风险分析、扫描器。
agent/ = ACTIVE (主开发 — ReAct Agent 终端)
quick_ask/ = LEGACY (冻结 — 旧 LangGraph 管线)
agents/ = LEGACY (冻结 — 旧 Agent 实现)
agentgraph/= LEGACY (冻结 — 旧编排层)
其余 = SHARED (可修改)
铁律:
- ACTIVE 代码禁止 import LEGACY 代码
RunAnalysisTool是唯一允许的桥接(调用时 import)- LEGACY 目录禁止修改
- 新功能放在
agent/loop.py、agent/tools/或skills/
前端 (Next.js 16) ── 14 个页面
│ REST + SSE
▼
FastAPI (server/main.py) ── 13 个路由模块
│
▼
┌──────────────────────────────────────────┐
│ 数据层 (SHARED) │
│ DataService ──→ MarketDataStore (SQLite) │
│ ContextStore ──→ system.db + 策略级 DB │
│ MemoryStore ──→ memory.db (OWM 评分) │
│ 8 个 Provider (Yahoo/Google/AkShare) │
└──────────────────────────────────────────┘
AgentLoop — 核心执行引擎。5 阶段迭代(参照 Claude Code query.ts):
| 阶段 | 名称 | 说明 |
|---|---|---|
| 1 | Preprocess | 上下文压缩 L0→L1→L2→L3 |
| 1.5 | Prefetch | Memory 异步预取 |
| 2 | Call Model | 流式 LLM + StreamingToolExecutor |
| 3 | Execute Tools | 收集工具结果,写入 messages |
| 4 | Inject Attachments | Memory 注入为 <system-reminder> |
| 5 | Check Terminate | 错误分类 + 恢复决策 |
关键机制:needsFollowUp 自停、跨迭代去重、断路器、权限框架。
7 节系统提示:Identity → Doing Tasks → Actions → Tool Rules → Tool Descriptions → Output Rules → Environment。Skills 关键词动态注入。
L0 (工具结果截断 50K) → L1 (micro-compact,保留 15 个) → L2 (折叠大文本) → L3 (LLM 摘要,40K 令牌触发)。
错误分类 → 终止决策树(prompt_too_long → collapse_drain → reactive_compact → 终止;max_output_tokens → 升级 64K → 恢复消息 ×3 → 终止;等)。RecoveryState 追踪尝试次数。
21 个工具,5 个类别:
| 类别 | 工具 | 文件 |
|---|---|---|
| 金融数据 | get_price, get_indicators, get_news, get_fundamentals, get_meta, get_sentiment, get_macro_calendar, search_symbol, web_search, search_news, run_analysis, generate_brief, web_fetch | financial.py |
| 工作空间 | read_file, write_file, glob, bash | workspace.py |
| 技能 | load_skill, search_skills, list_skills, save_skill, delete_skill | financial.py |
| 回测 | submit_backtest_decision | backtest.py |
| 扫描器 | scan | scanner.py |
基础设施:BaseTool ABC + ToolMeta + build_tool() 工厂 + ToolRegistry 单例 + StreamingToolExecutor + PermissionManager。
| 文件 | 说明 |
|---|---|
backtest_jobs.py |
BacktestJobService (1921 行) |
backtest_policy.py |
策略资格 + 快照 |
backtest_policy_executor.py |
Agent 实验执行器 |
backtest_adapter.py |
Agent-Broker 适配器 |
backtest_errors.py |
回测错误类型 |
run_context.py |
作用域执行 |
scanner_adapter.py |
扫描器编译 |
discovery.py |
Ticker 发现 |
| 前缀 | 状态 |
|---|---|
/api/agent — Agent 对话 + 回测 + 技能 |
ACTIVE |
/api/analyze — 旧版分析 |
LEGACY |
/api/strategies /market /watchlist /monitor /insights /risk /reports /scanner /approvals /memory /settings |
SHARED |
| 方法 | 路径 | 说明 |
|---|---|---|
| POST | /chat |
SSE 流式 Agent 对话 |
| GET/POST/DELETE | /sessions |
会话 CRUD |
| POST | /backtest |
创建回测 (202 Accepted) |
| GET | /backtest/{id} |
回测状态 |
| POST | /backtest/{id}/replay |
重放 |
| GET | /backtest/{id}/*.csv |
CSV 导出 |
| POST | /scanner |
编译扫描器 |
| GET/POST/DELETE | /skills |
技能 CRUD |
main.py (CORS + 启动恢复 + 后台调度器), llm_defaults.py, monitor_engine.py, morning_brief.py, analysis_runs.py。
Next.js 16 App Router + TypeScript + shadcn/ui + TailwindCSS v4。
14 个页面:agent, dashboard, quick-ask (LEGACY), strategies, backtest, approvals, insights, monitor, memory-lab, risk, reports, scanner, settings, watchlist。
关键依赖:@tanstack/react-query (服务端状态), zustand (客户端状态), recharts (图表), remark-gfm (Markdown)。
统一数据访问入口。方法:get_prices(), get_news(), get_fundamentals(), get_indicators(), get_meta(), search_news()。
| Provider | 数据 |
|---|---|
| YFinance | OHLCV、指标、基本面 |
| Google News / RSS | 股票新闻、网页搜索 |
| AkShare | A 股基本面、新闻 |
| Bing News | 替代新闻源 |
| Finnhub | 经济日历 |
| Sentiment | 关键词情绪聚合 |
data/market_data.db — 6 张表:ohlcv, fundamentals, news, news_fts (FTS5), data_freshness, ticker_meta。
DataServiceHistoryLoader — 回测数据预加载(最多 4 次重试,递增回看窗口)。
MockBrokerEngine — 日线模拟交易。组件:models (Order/Fill/Position), ledger (账本/PnL), views (报告), risk_checks (交易前检查), config (佣金/滑点), events, backtest_runner (编排), gateway (协议接口)。
数据流:DataServiceHistoryLoader.preload() → MarketDataStore → BacktestDataService → MockBrokerEngine。
ContextStore — 每策略独立 SQLite:
| 数据库 | 表 |
|---|---|
data/system.db |
strategies, backtest_jobs, monitor_tasks, watchlists 等 |
data/insights.db |
monitoring_reports, monitor_news, daily_briefs |
data/{strategy_id}.db |
sessions, agent_reports, decisions, events, approvals |
data/memory.db |
memories (OWM 评分) |
| 模块 | 说明 | 状态 |
|---|---|---|
memory/ |
OWM 记忆 (5 因子评分 + Pre-Trade 安全检查) | SHARED |
skills/ |
76 个 SKILL.md,10 个类别 + 关键词匹配注入 | ACTIVE |
scheduler/ |
APScheduler 数据采集 (价格 15min, 新闻 30min) | SHARED |
notification/ |
多渠道告警 (邮件/Telegram/微信/WhatsApp) | ACTIVE |
risk/ |
风险分析 (集中度/相关性/VaR/压力测试) | ACTIVE |
hitl/ |
人机协作审批 (规则引擎 + 状态机) | ACTIVE |
scanner/ |
确定性股票扫描 (范围 + 条件评估) | ACTIVE |
reporting/ |
PDF 报告 (fpdf2 + Jinja2 + NotoSansCJK 中文字体) | ACTIVE |
knowledge/ |
文件知识库 (rules/findings/failures) | SHARED |
belief/ |
交易理念 (TradingBelief + 5 预设) | SHARED |
mcp/ |
MCP 外部工具集成 | SHARED |
quick_ask/ |
旧 LangGraph 管线 (5 Agent) | LEGACY |
COMP7705-Agent-Quant/
├── agent/ # ACTIVE — ReAct Agent + 回测策略 + 扫描器适配
├── server/ # FastAPI — 13 个路由 + 监控引擎 + 早间简报
├── frontend/ # Next.js 16 — 14 个页面 + UI 组件
├── broker/ # 回测引擎 — 模拟交易 + 账本 + 风控
├── dataflow/ # DataService + 8 个 Provider + MarketDataStore + HistoryLoader
├── storage/ # ContextStore — 策略级 SQLite 隔离
├── memory/ # OWM MemoryStore + 安全检查
├── skills/ # 76 个 SKILL.md + SkillLoader
├── scheduler/ # APScheduler 数据采集
├── notification/ # 多渠道告警
├── risk/ # 风险分析
├── hitl/ # 人机协作审批
├── scanner/ # 股票扫描器
├── reporting/ # PDF 报告 + 中文字体
├── knowledge/ # 文件知识库
├── belief/ # 交易理念
├── mcp/ # MCP 外部工具
├── quick_ask/ # LEGACY — LangGraph 5-Agent 管线
├── agents/ # LEGACY — 旧 Agent 实现
├── agentgraph/ # LEGACY — 旧编排层
├── test/ # 60+ 测试文件
├── docs/ # 文档
├── data/ # 运行时 SQLite 数据
├── plans/ # 设计文档
└── archive/ # 归档文件
| 类别 | 技术 |
|---|---|
| LLM | OpenAI 兼容 API (deepseek-chat / deepseek-v4-flash) |
| Agent 编排 | 自研 ReAct 循环 + LangChain ChatOpenAI (仅 LLM 调用) |
| 后端 | FastAPI + uvicorn |
| 前端 | Next.js 16 + React + TypeScript + shadcn/ui + TailwindCSS v4 |
| 数据 | Yahoo Finance, Google News, AkShare, Finnhub |
| 存储 | SQLite (WAL 模式, 每策略隔离, FTS5 全文搜索) |
| 调度 | APScheduler |
| 类型 | Pydantic |
| 测试 | pytest |
| 打包 | uv (Python), npm (前端) |