Research OS — 个人金融研究与决策辅助系统

一句话点题:把两年积累的私域研究记忆,变成可推理、可复盘、可计胜率的决策操作系统。 本文不只介绍产品·更以三个具体工程问题为锚展开:LLM 抽取的原文引用为什么 73% 都找不回原文?为什么单个模型生成的交易判断不能直接用?为什么传统量化回测不适合研究类策略?这三个问题分别催生了 Quote Grounding、六席位委员会、Decision Replay。

2026/5/7作者: Gdnbit
AIRAGLLM金融决策辅助多模型PythonFastAPIReact全栈

终于有个工具能告诉我「现在该做不该做」而不是「请阅读以下 47 篇研报」。可惜还不能帮我止损。

一句话点题:把两年积累的私域研究记忆,变成可推理、可复盘、可计胜率的决策操作系统。

本文不只介绍产品·更以三个具体工程问题为锚展开:LLM 抽取的原文引用为什么 73% 都找不回原文?为什么单个模型生成的交易判断不能直接用?为什么传统量化回测不适合研究类策略?这三个问题分别催生了 Quote Grounding、六席位委员会、Decision Replay。

1. 背景

1.1 个人投资研究的真实问题

每天的输入端:5 个社交平台(Twitter / 微博 / 小红书 / 抖音 / 微信公众号)+ 16 个数据源(行情 / 宏观 / 事件 / 链上 / 情绪)+ N 份 PDF 研报与群聊截图。一周下来一台机器里堆了几百份原文,散落在 Notion、本地 Markdown、相册里。

痛点 量化
信息层散落 每周新增 ≈ 200 条文本观点 / 50 张研报截图 / 30 段视频
决策层无法复盘 一个月前为什么仓位 30% / 现在为什么 60%?没记录
LLM 直接生成研报不可追溯 90% 的"看似合理"输出找不到原始引用
多模型成本爆炸 同时跑 4-5 个模型对话·一天费用极容易过百

研究类 SaaS 工具(Bloomberg / Benzinga / Koyfin)解决信息层但不解决"我个人观点的累积",AI 助理(ChatGPT / Claude / Perplexity)解决泛化提问但不解决"基于我两年研究的判断"。两边都不解决"现在该不该做"

1.2 信息层与决策层之间的断裂

业界 RAG 系统通常止步于"检索 + 生成"。金融研究需要更多:

  • 真伪与兑现独立建模 · 一条预测可能是"说过 / 是真的 / 实现了 / 市场按预期反应了"四个不同状态。混在一起就没法做后验校准。
  • 私域是核心资产 · 我看了两年的某研究员观点,比 ChatGPT 默认知识更值钱。不能让模型反客为主。
  • 决策不只判方向 · 还要判"现在做值不值"——funding cost 多少、波动率状态、等待价值窗口。
  • 委员会而非单模型 · 一个模型生成的判断不够稳健·要至少四个不同视角互相校验,分歧本身就是信号。

1.3 目标

一句话:把私域研究记忆变成可推理的决策操作系统,每个判断都附带反证 / 风险 / 失效条件 / 完整证据链。

2. 设计概览

2.1 八条核心原则

V2 升级时确立的设计约束,所有后续工程决策都对照这 8 条评估:

  1. 私域知识是核心资产,公共数据是校准器,不可反客为主
  2. 公共数据服务于证据校准与决策复现,不做无边界囤积
  3. 模型动态激活,不无条件全员出动,成本控制核心是少喂无效信息
  4. 社交源是精选研究员池,不是噪音流量池
  5. 真假消息与兑现状态独立建模
  6. 决策不只判方向,还判"现在做值不值"
  7. Decision Replay 优先于传统回测
  8. 所有高确信输出必须附带反证、风险、失效条件与证据链

2.2 四层逻辑架构

Research OS · 四层逻辑架构 第四层 · 发现与学习层 Opportunity Scout · Daily Radar · Decision Replay · 后验校准 · 胜率统计 第三层 · 决策层 Committee Orchestrator · 动态六席 · SignalScorer · 最终裁决 · ActionEconomics · 反证与失效 第二层 · 证据层 MarketStateCard · FlowSignalCard · EventCard V2 · MacroSnapshot · DecisionSnapshot · 数据覆盖摘要 第一层 · 记忆层 ClaimCard · SpeakerProfile V2 · EvidenceSpan · RawSource · pgvector 语义索引 · 生命周期管理 浅橙色块为闭环层(学习与记忆)· 透明块为正向流(证据与决策)

四层不是物理目录·而是逻辑分层。记忆层是核心资产、私域驱动;证据层是校准器、公共数据驱动;决策层是动态推理引擎;发现与学习层关闭从决策回归到记忆的反馈循环。

2.3 数据源全景

接入 16 个数据源 + 5 个社交平台。每条都有独立的冷却时长 + Mock 降级 + content_hash 去重:

类别 数据源 拉取方式 冷却
行情 Binance 现货 / Futures · Yahoo Finance · CoinGecko 主动轮询 HTTP 5 / 3 / 15 分钟
宏观 FRED · Alpha Vantage 主动轮询 24h / 24h
事件 RSS 多源(CoinDesk / Reuters / etc.) 主动轮询 1h
链上情绪 待接入 3 路(链上 / 衍生品 / 情绪指数)
社交媒体 Twitter / 微博 → RSSHub · 小红书 / 抖音 → MediaCrawler · 微信 → We-MP-RSS 混合 30min
私域 PDF / 图片 / TXT · GPT-5 Vision 识别 事件驱动

分级分源 + 互为降级:行情 Binance → Yahoo → CoinGecko,新闻 RSS 多源冗余,社媒三个独立中间件。任一源挂掉不会整条断。

2.4 技术栈

技术 选型理由
后端 FastAPI + Python 3.11 + SQLAlchemy 异步 IO 友好 · OpenAPI 自动生成 · 类型严格
前端 React 18 + TypeScript + Vite + TailwindCSS 社区活跃 · 编译快 · 组件复用率高
数据库 SQLite(开发)/ PostgreSQL + pgvector(生产) 单机零依赖 · 平滑升级到向量检索
缓存 Redis(可选 · 降级到内存字典) Mock 降级让本地开发零依赖
AI 接入 OpenRouter 统一路由 单 Key 路由 10 个模型 · 中转 IP 隔离 · 按量付费
视觉识别 GPT-5 Vision + Pillow(长图分块) 长图自动切片 + 多图自动拼接
PDF pdfplumber + PyMuPDF + Vision 降级链 三级降级·扫描件最终走 Vision
视频转写 Gemini 2.5 Flash Google AI Studio 免费层·成本接近零
社交拉取 RSSHub + MediaCrawler + We-MP-RSS 三个独立开源中间件·5 平台覆盖
部署 Docker Compose / Uvicorn + Nginx 开发用 compose · 生产可拆

3. 核心模块

3.1 Ingestion Pipeline · 多模态观点抽取

输入端是混乱的:PDF 研报、群聊截图、长图、视频。IngestionWorkflow 把它们统一处理成结构化的 ClaimCard

输入 处理链路 关键点
文本 PDF pdfplumber · 提文本 失败降级到 PyMuPDF
扫描件 PDF PyMuPDF · 转图 → Vision 三级降级链
长图 Pillow · 自动分块 → Vision · 拼接 单图 max 8K 像素,自动切片
多图 Vision 各自识别 → 语义合并 content_hash 去重
视频 Gemini 2.5 Flash · 转写 Google AI Studio 免费层

抽取出的 ClaimCard 结构化字段:作者 · 日期 · 资产标签 · 立场 · full_quote(原文引用)· 置信度。中英文 / 表格 / 截图全支持。

3.2 Quote Grounding · 三级匹配 + Double Check

整个系统中最关键的设计。LLM 抽取出的 full_quote 经常与原文存在差异——改写措辞、跨消息拼接、用 …… 串联——导致无法回溯到原文精确位置。

Quote Grounding · 三级匹配 + Double Check LLM 输出的 full_quote 可能与原文存在改写 / 拼接 / 省略 1 精确匹配 · str.find(quote) 原文中直接找完全相同的字符串 2 归一化匹配 · NFKC + CJK Radical 修复 Unicode 归一化 / 合并空白 / 修复 OCR 错位汉字(U+2E80-U+2EFF) 3 模糊匹配 · 滑窗 + difflib SequenceMatcher 在 compact 空间中搜索 · threshold ≥ 0.75 4 Double Check · LLM 二次校验剩余 NOT_FOUND 把"找不到"的 quote 重新喂给 LLM · 让它从原文里抽一段最接近的 verbatim grounded · 89.6%

命中后用原文片段替换 LLM 输出的 quote,保证 verbatim。这一步是后续所有"溯源审计"的地基——没有 grounded quote 就没法做反证、没法做后验校准。

优化历程——四轮迭代把 grounding 率从 27% 推到 89.6%:

Quote Grounding 优化曲线·四轮迭代把原文回溯率从最初的 27% 推到 89.6%·每一轮的具体改动见下表

阶段 改动 Grounded 率
最初(无 grounding) LLM 输出直接落库 ~27%
+ Quote Grounding 模块 三级匹配链 58.5%
+ Prompt 正反例引导 system prompt 加群聊正反例·禁拼接 / 禁省略号 72.0%
+ NFKC + CJK Radical 修复 修 PDF OCR 输出的 U+2E80-U+2EFF 错位汉字 76.8%
+ Double Check 把 NOT_FOUND 重喂给 LLM 二次抽 89.6%

详见 docs/optimization/QUOTE_GROUNDING.md(仓库内部文档)。

3.3 六席位委员会 · 动态激活

研究类决策不能只靠一个模型生成判断——单模型有偏好、有盲区、有训练数据偏差。CommitteeOrchestrator 编排六个席位独立辩论,最后由裁决模型综合。

六席位委员会 · 动态激活 + 最终裁决 最终裁决 Claude Opus 综合裁决 A · 主席 基准 / Opus B · 概率 Gemini Pro C · 风控 GPT-5.4 D · 结构 GLM-5 E · 审计 Gemini Flash 可选激活 F · 经济性 Gemini Flash 可选激活 实线为默认席位 · 虚线为按场景动态激活 · 全员到齐时一次决策约消耗 8 万 token

席位职责:

席位 角色 主选模型 关注
A 主席(基准) Claude Opus 4.6 综合判断与基准方向
B 概率推演 Gemini 3.1 Pro 多分支概率分布
C 风控 GPT-5.4 反证、找漏洞、对冲建议
D 市场结构 GLM-5 庄散博弈、机构行为与叙事背离
E 真伪审计(可选) Gemini Flash 信源可信度、消息真假
F 执行经济性(可选) Gemini Flash funding cost / 波动率 / 等待价值

裁决约束

  • conviction > 0.7 才可判 strong consensus
  • 四方方向严重分歧 → consensus_level=split · conviction 上限 0.45
  • 市场结构分析师发现机构行为与叙事背离 → 必须在裁决中突出警告
  • 所有高确信输出必须附带反证、风险、失效条件、证据链

3.4 决策简报与证据链

BriefingWorkflow 编排完整的简报生成:

  1. MCP 上下文聚合 · ResearchMemoryMCP(三路混合召回)+ EventFeedMCP + MarketDataMCP + FlowContinuityMCP
  2. 信息融合 · FusionSkill 把四类数据融合成统一上下文
  3. 简报生成 · BriefingSkill 输出结构化 BriefingCard:执行摘要 / 支持论点 / 反面论点 / 关键风险 / 策略建议 / 推荐操作 / 失效条件
  4. 证据链接 · 关联的 Claim / Event / Market 数据写入 BriefingEvidenceLink 表,支持任意一句结论反查到原始引用

3.5 决策回放与策略蒸馏

传统量化做"历史回测"——把策略套到过去的 K 线上看赚不赚。但研究系统的策略往往不是规则化的("我觉得 BTC 现在 risk-on"),无法 backtest。

Decision Replay 换一个思路:每次出 briefing 时存一份 DecisionSnapshot(时点证据快照 + 委员会裁决 + 推荐操作),事后用户标注实际结果("涨了 / 跌了 / 横盘"),LLM 回放分析"哪一步看错了 / 哪一席位贡献最大"。胜率统计基于这些标注累积。

StrategyDistillationWorkflow 反向工作:从原始研究资料里蒸馏出可执行的交易策略(策略名称 / 类型 / 核心逻辑 / 适用资产 / 进场条件 / 退出规则 / 风险因素),通过 StrategySourceLink 记录策略与原始来源的蒸馏关系。

3.6 OpenRouter 路由 + 角色化模型

10 个 Skill 角色 × 3 级 fallback,统一通过 OpenRouter 路由:

角色 主选 备选 选择理由
briefing Claude Sonnet 4.6 Gemini Flash 长文输出清晰·稳健 workhorse
fusion Gemini 3.1 Pro DeepSeek V3.2 量化推理强·1M 上下文窗口
extraction DeepSeek V3.2 Gemini Flash Lite 成本极低·中文优秀
committee_a(主席) Claude Opus 4.6 Claude Sonnet 4.6 Arena #1·旗舰推理
committee_b(概率) Gemini 3.1 Pro Gemini Flash 量化分析强
committee_c(风控) GPT-5.4 GPT-5.4 Mini 反证与找漏洞
committee_d(结构) GLM-5 DeepSeek V3.2 BFCL #2·审计与 Schema 校验
strategy Claude Opus 4.6 Gemini Pro 深度推理
speaker DeepSeek V3.2 Gemini Flash Lite 低成本画像
embedding Qwen3-Embedding-4B text-embedding-3-small 嵌入向量化

万能 Fallback 是 DeepSeek V3.2,无论是哪个角色,主备都挂时统一兜底——它不受区域限制,可达性最稳。

4. 工程要点

4.1 NFKC + CJK Radical 修复 · Quote Grounding 76.8% 的关键

审查 NOT_FOUND 样本时发现,PDF OCR 输出的汉字使用了 CJK Radical Supplement 字符(U+2E80-U+2EFF),例如 ⽐特币(⽐ 是 U+2F63)而非标准 比特币(比 是 U+6BD4)。这些字符视觉上完全相同,但 Unicode code point 不同,导致精确匹配失败。

仅这一步把 grounding 率从 72% 推到 76.8%。同时把同样的归一化也应用到 LLM 输出的 quote 端,让两端在归一化空间里比对。

4.2 Prompt 自适应优化 · PromptAdapter

不同模型对 prompt 的偏好差异极大:Claude 强调完整填写、Gemini 防止嵌套 wrapper、GPT 严格遵守 system prompt、GLM 中文分析强但需控制输出长度、DeepSeek 需要确保数值范围合法。

PromptAdapter 根据模型型号自动追加适配后缀,并维护一个温度矩阵(按"技能 × 模型家族"二维查表):

技能 × 模型 温度 来源
提取 + DeepSeek 0.05 经验:极低温确保格式
委员会辩论 + GPT 0.35 经验:反证需适度发散
裁决 + Claude 0.15 经验:高稳定性
简报 + Gemini 0.30 官方推荐

每个温度都标注来源(官方 / 经验 / 待验),方便审计和后续 A/B 调整。

4.3 4 层社媒去重架构

社媒拉取最大的工程难点不是抓取本身,而是去重——同一条帖子可能从 RSSHub 拉一次、用户手动转发再拉一次、隔天 ETag 失效再拉一次。四层去重逐层兜底:

这一套架构同时覆盖 5 个平台(Twitter / 微博 / 小红书 / 抖音 / 微信公众号),每个平台只需实现"原始数据 → 五元组"的映射函数。

4.4 LLMClient · Mock 降级 + 3 级 Fallback

LLMClient 三级 Fallback 状态流·主选模型挂掉自动切备选·备选挂掉切万能兜底·全部失败时降级到 Mock 响应保证开发可用

关键决策

  • 可重试 vs 不可重试 · 4xx 客户端错误立刻停 retry(不浪费 token),5xx / 429 才退避重试
  • 三级 fallback · 主选 → 备选 → 万能 fallback(DeepSeek V3.2,可达性最稳)
  • Mock 降级 · 全挂时返回结构化 Mock 响应而非抛错,让本地开发零依赖、无 API Key 也能跑

4.5 asyncio 原生调度 · 无 Celery / Redis

研究类系统不需要复杂的 broker,asyncio 内嵌进 FastAPI 进程即可:

任务 频率 功能
市场快照采集 15 min Watchlist + 默认资产的行情快照
A 股基金增强采集 14:00–15:00 / 2 min 聚焦 CSI300 / ZZ500 / CYB / HSI
生命周期检查 1 h 扫描并更新过期 ClaimCard 状态
自动研究简报 6 h Watchlist 热门资产自动生成 Briefing
社交媒体抓取 6 h 5 平台增量拉取(staleness 触发)
每日雷达扫描 12 h 检测分歧 / 资金异动 / 事件催化

所有定时任务通过 asyncio.to_thread 包装同步操作,不阻塞 FastAPI 事件循环。启动时延迟 5 秒执行首次快照,确保服务先就绪。好处:启停简单、无外部依赖、对单用户研究系统足够;代价:单进程崩溃所有任务停摆,未来需要扩多实例时要换 Celery。当前阶段不值得引入额外组件。

5. 现状与展望

5.1 已完成(截至 2026-04-22)

模块 主要产出 状态
Ingestion Pipeline PDF / 图片 / 长图 / 视频全模态接入 · 三级降级
Quote Grounding 三级匹配 + Double Check · 89.6%
六席位委员会 V2 动态激活 + 最终裁决
决策简报 RAG + 实时市场 · 证据链接表
决策回放 DecisionSnapshot + 后验校准 + 胜率
策略蒸馏 StrategyCard + StrategySourceLink
16 数据源 行情 / 宏观 / 事件 / 链上 / 社媒
5 平台社媒 RSSHub + MediaCrawler + We-MP-RSS
OpenRouter 路由 10 角色 × 3 级 fallback
验证中心 13 场景全链路 + AI 评审
全量 pytest 429 / 429 通过
23 张表 + 25 ORM 模型 SQLite (dev) / PostgreSQL+pgvector (prod)

5.2 边界与未做

刻意不做的清单和做了的清单一样重要:

  • 不做实时交易终端。Bloomberg / Benzinga 是 Push 推流 + SOC 2 / FINRA 合规,研究系统是 15 分钟轮询·不是同一物种
  • 不做精确滑点估算。完整执行成本需要订单簿数据,简化为 funding cost / 波动率状态 / 等待价值窗口三维度
  • 不做云端账户。私域记忆是核心资产,全程本机·零网络出口(除 LLM API + 数据源)
  • 不做 1m / 5m 全量 OHLCV 缓存。BTC 1m 一年 52 万条,个人系统存储不值得·保留 15 分钟快照 + 日度技术状态已足够
  • 暂不引入 efinance / AKShare。接口频繁变动 / 文档差 / Breaking change 多,等成熟后再评估
  • 席位 7(Actor & Motive)暂不做。深度人物动机分析 ROI 极低,SpeakerProfile V2 + 来源画像已可覆盖大部分需求

5.3 下一步

  • Phase 14 · 数据质量 SLI/SLO · 完整性 / 新鲜度 / 错误率三个 SLI + 主动告警
  • Phase 15 · Source Health 面板 · 消费现有 source_health_logs · 加 sparkline 可视化
  • Phase 16 · Chat RAG 升级 · 引入 Re-ranker + 时效衰减
  • Phase 17 · Prompt 温度矩阵全验证 · 把"待验"温度通过 A/B 测试转成"经验"
  • Phase 18 · Daily Radar 结构化升级 · 当前 auto_briefing_job 是雏形 · 升级成结构化每日雷达输出

参考资料