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

一个全栈式个人金融研究系统:16 个数据源自动采集、私域知识库语义检索、四模型委员会辩论决策。从痛点出发,完整拆解架构设计与工程实现。

2026/4/7作者: Gdnbit
AIRAGLLM金融PythonFastAPIReact全栈项目展示

目录

项目背景

技术实现


一、项目起因

在个人理财与投资研究的过程中,我们会积累大量高价值的私域信息——分析师的深度观点、社交媒体上 KOL 的实时判断、自己长期跟踪形成的研究笔记。这些信息的价值密度远高于公开数据,却往往散落在聊天截图、研报 PDF、微信收藏夹的各个角落。

与此同时,金融研究天然具有极高的宽泛性和时效性:今天分析白银走势,明天关注黄金避险,后天研判美联储利率决议对加密货币的影响——话题跨度大、切换频繁。

在传统 LLM 对话界面(ChatGPT、Claude)上,这带来了两个核心痛点:

  • 痛点一:话题分散,上下文断裂 — 无法在同一对话中长期追踪跨资产、跨主题的信息。多开对话又难以管理和交叉引用。
  • 痛点二:私域信息无法持久化 — 每次新对话都要从零提供背景,历史积累的高价值观点无法被系统性地复用。

Research OS 因此而生——一个外挂式的个人知识库与智能研究助手。一端通过多数据源实现信息的实时自动获取,另一端将高价值私域信息结构化存储并语义索引,使其在任何新的研究问题中被精准召回。


二、项目概览

核心能力

  • 多源数据采集:集成 16 个外部数据源,覆盖加密货币、美股、港股、A 股、大宗商品、外汇等资产类别
  • 私域知识库:支持图片、PDF、Word 等多格式上传,自动完成文本提取 → 观点抽取 → 语义向量化 → 入库检索
  • RAG 语义增强:基于向量数据库的三路混合召回,在用户提问时自动注入相关私域知识
  • 委员会辩论:四个不同厂商的大语言模型从独立视角分析同一问题,由裁决官综合给出决策建议
  • 自动化运维:定时简报生成、观点生命周期管理、数据源健康监控

技术栈

层级 技术选型
后端 FastAPI + Python 3.11
前端 React 18 + TypeScript + Vite + TailwindCSS
数据库 SQLite / PostgreSQL + pgvector
缓存 Redis
LLM 网关 OpenRouter API(统一路由,角色化模型选择,自动降级)

系统架构

Research OS 架构总览
📡 数据采集层
行情 ×3 宏观 ×1 新闻 ×5 链上 ×4 社交 ×5 预测 ×1 用户上传
⚙️ 处理管线(Ingestion Pipeline)
文本提取 → 观点抽取 → 质量评分 → 去重 / 合并 → 矛盾检测 → 向量化入库
🗄️ 知识库 & 向量存储
ClaimCard 观点卡片 Speaker 来源画像 pgvector 向量索引 Redis 缓存
🧠 智能层
意图识别 → 三路混合召回 → 上下文打包 → LLM 生成
💬 对话回答 ⚖️ 委员会辩论 📋 研究简报
🖥️ 前端(React 18 + TypeScript + TailwindCSS)
Dashboard Chat KnowledgeBase Debate Inbox Watchlist DataFlow Settings

三、数据流通路径

从原始数据到最终输出,系统的处理流程分为两条主线:

主线一:数据入库
数据获取 文本提取 观点抽取 质量评分 & 去重 向量化入库
主线二:智能应答
用户提问 意图识别 三路混合召回 上下文打包 对话 / 辩论 / 简报

各步骤详解

数据获取

通过 RSS 订阅、API 调用、爬虫、用户上传等方式获取原始数据,写入 RawSource 表。

文本提取

图片执行 OCR(长图切片 + Vision 模型),PDF 提取文本层或 OCR 回退,Word 解析段落。

观点抽取

LLM 从文本中提取结构化观点(ClaimCard),包含立场、置信度、资产范围、时间窗口等。

质量评估与去重

质量评分 + 余弦相似度去重(≥ 0.92 为重复)+ 矛盾检测(同资产反向立场标记)。

向量化存储

Embedding 模型将观点转为向量,存入 pgvector 建立语义索引。

语义召回

三路混合召回(语义 + 资产匹配 + 高信任来源),综合评分后注入 LLM 上下文。

智能输出

基于私域知识 + 实时行情 + 事件信息,生成对话回答、研究简报或委员会辩论报告。


1. 数据源接入

系统共集成 16 个数据源,覆盖 6 大类别,由统一的 DataSourceManager 管理,支持健康监控、配额控制和自动降级。

1.1 行情数据源

数据源 覆盖范围 API Key 备注
Binance 现货 BTC、ETH、BNB、SOL、XRP、DOGE 不需要 实时行情,5 分钟冷却窗口
Yahoo Finance SPX、NDX、GOLD、OIL、DXY、VIX、HSI、CSI300 等 不需要 美股 / 港股 / A 股 / 商品,延迟约 15 分钟
CoinGecko BTC、ETH、BNB、SOL 免费 Key Binance 备用源,30 次/分钟

系统在服务端实时计算完整技术指标:Wilder RSI(14)EMA 均线(MA20 / MA50)、布林带(20 日,±2σ)、ATR(14) 等,无需依赖第三方指标接口。

1.2 宏观经济数据

数据源 覆盖范围 备注
FRED(美联储经济数据库) 联邦基金利率、2Y/5Y/10Y 美债收益率、CPI、失业率 免费 Key,每日调用 1 次

宏观数据获取后自动通过 Knowledge Enrichment Service 存入 RawSource,触发 Ingestion Pipeline 抽取观点入库——实现 API 数据到私域知识库的自动充实。

1.3 新闻与事件

数据源 类型 频率 备注
Alpha Vantage 英文新闻情感分析 每日 1 次 免费 Key,25 次/天,附带情感评分
财联社 中文金融快讯 每小时 免费,无需登录,实时电报流
金十数据 中文金融快讯 每小时 免费 RSS,覆盖宏观 / 外汇 / 商品
Investing.com RSS 宏观经济日历 每小时 免费,跟踪重要经济事件
Nitter RSS Twitter/X KOL 推文 每小时 开源 Twitter 镜像,无需 API Key

采集策略分层:Alpha Vantage 配额敏感,每日调用一次;中文快讯和 RSS 每小时刷新;高重要性事件(importance ≥ 0.6)自动入库。

1.4 资金流与链上数据

数据源 数据内容 更新频率 备注
Binance Futures 资金费率、未平仓合约、主动买卖比、大户多空比 实时 免费公开 API
Crypto Fear & Greed Index 加密市场情绪指数 每日 免费公开 API
DeFiLlama DeFi 协议 TVL、稳定币流通量、借贷利率 实时 免费公开 API
Glassnode(免费层) BTC 链上活跃地址、交易所净流入/出、矿工收入 每日 免费层有限指标

1.5 社交媒体信息源

社交媒体数据采集依赖三个自部署的开源项目:

平台 采集方案 开源项目 Cookie 有效期
Twitter/X RSS 订阅 RSSHub 自部署 60 天
微博 RSS 订阅 RSSHub 自部署 120 天
小红书 Playwright 爬取 MediaCrawler 自部署 10 天
抖音 Playwright + 视频转文字 MediaCrawler + Gemini Flash 转写 10 天
微信公众号 RSS 生成 We-MP-RSS 自部署 30 天

关键细节:

  • Cookie 生命周期管理:系统自动追踪各平台 Cookie 状态,到期前在前端提醒更新
  • 抖音视频转文字:利用 Google AI Studio 的 Gemini Flash(免费层 1500 次/天),将视频内容自动转录为文字稿后入库

1.6 预测市场

数据源 数据内容 备注
Polymarket 加密监管、大选、地缘政治等事件的预测概率 免费公开 API,基于链上结算

2. 私域数据上传与处理

2.1 文件上传接口

用户通过 /api/v1/upload 上传研究资料,支持的格式:

  • 图片:PNG、JPG、WEBP
  • 文档:PDF、DOCX
  • 文本:TXT、Markdown

上传时可附带 speaker_hint(来源提示)和 theme_hint(主题提示),帮助后续观点抽取更准确地归属来源。文件保存在本地 uploads/YYYYMMDD/ 目录下,使用 UUID 生成唯一文件名。

2.2 长图处理与 OCR

金融研究中大量信息以长截图形式存在(聊天记录、研报截图等),系统实现了专门的处理流程:

长图检测 (>2000px) 智能切片 (1800px/块, 200px重叠) 逐块 Vision API 识别 按序拼接文本
  • 智能切片:相邻分块保留 200 像素重叠区域,避免文字在切割边界处被截断
  • OCR 降级:Vision API 不可用时,自动降级为本地 pytesseract

2.3 PDF 与 Word 处理

  • PDF:优先 pdfplumber 提取文本层;若结果为空(扫描件),逐页转图后调用 Vision OCR,通过 progress_cb 实时报告进度
  • Word(DOCX):python-docx 解析段落文本

2.4 多图合并模式

针对一条信息分散在多张截图的场景(长聊天记录被切分、连续页面截图等),上传接口提供 merge_images=true 参数:多张图片按顺序逐一 Vision 提取,结果合并为单条 RawSource 记录。


3. 观点抽取与知识入库

Ingestion 是系统的核心处理管线,由 IngestionWorkflow 编排,将原始文本转化为结构化的观点卡片(ClaimCard)

3.1 文本分块策略

长文本按段落边界切分(双换行符 \n\n),保持段落完整性,每块不超过配置上限。每个分块独立进入后续抽取流程。

3.2 观点抽取(Claim Extraction)

每个文本块由 ClaimExtractionSkill 调用 LLM(默认 DeepSeek V3.2,成本极低)进行结构化抽取:

字段 说明
summary 观点摘要
full_quote 原文引用
stance 立场:bullish / bearish / neutral / conditional
confidence 置信度:0.0 ~ 1.0
asset_scope 涉及的资产列表
theme_scope 主题标签
time_horizon 时间范围:immediate / short / medium / long
invalidation_conditions 观点失效条件
reasoning_basis 推理依据

3.3 来源画像(Speaker Profiling)

系统为每个信息来源维护独立画像(SpeakerProfile):

  • trust_weight:可信度权重,影响召回排序和观点评分
  • domain_tags:擅长领域标签
  • 通过 SpeakerProfilingSkill 在 Ingestion 过程中自动推断或更新

3.4 质量评分

每条观点经 ClaimQualitySkill 评分,采用宽松评分策略

  • 必填字段(summary、stance、asset_scope)权重 70%
  • 可选字段(invalidation_conditions 等)权重 30%
  • 评级:A ≥ 0.75 / B ≥ 0.50 / C ≥ 0.30 / D 仅在致命缺陷时
  • 致命缺陷定义:无摘要 或 来源可信度 < 0.15

3.5 重复检测与语义合并

新观点入库前,与同资产的历史活跃观点进行重复检测。加权相似度公式:

sim = 语义余弦相似度 × 0.70 + 资产范围重叠 × 0.15 + 立场匹配 × 0.15
相似度区间 判定 处理
sim ≥ 0.92 重复 跳过入库
0.80 ≤ sim < 0.92 近似 执行语义合并
sim < 0.80 新观点 正常入库

语义合并逻辑:摘要追加或替换(新观点更长时替换);列表字段取并集去重;数值字段取最大值;立场在新观点更明确时升级(neutral → bullish/bearish)。

3.6 矛盾检测

ContradictionDetector 在入库时自动检测矛盾:

  • 触发条件:同资产 + 立场相反(bullish ↔ bearish)+ 时间范围相近 + 双方置信度均 ≥ 0.5
  • 处理方式:旧观点标记 is_contradicted = true,后续召回时降权 70%
  • 设计理念:不删除任何信息,通过降权让系统自然减少矛盾观点的影响

3.7 有效期双轨机制

观点 valid_until 通过双轨确定:

路径 条件 计算方式
事件日期路径 关联明确事件(如"FOMC 会议 6.18") 事件日期 + 衰减天数(按资产类别差异化)
影响窗口路径 无明确事件日期 创建时间 + 影响窗口天数

向后兼容:无事件日期的观点自动走影响窗口路径。


4. Embedding 与语义检索

4.1 Embedding 服务

默认模型为 Qwen3-Embedding-4B(通过 OpenRouter 调用),将文本转为高维向量。

缓存机制:对输入文本 MD5 哈希,以 adms:emb:{hash} 为 Key 存入 Redis,TTL 24 小时,避免重复调用。无 Redis 时降级为无缓存模式。

API Key 三级降级EMBEDDING_API_KEYOPENROUTER_API_KEYOPENAI_API_KEY → 返回 None(退化为关键词搜索)。

4.2 向量存储

模式 条件 特点
pgvector 模式 PGVECTOR_ENABLED=True 向量存储在 PostgreSQL vector 列,原生 l2_distance 排序,性能最优
JSON 降级模式 PGVECTOR_ENABLED=False 向量 JSON 序列化存入 TEXT 列,语义搜索退化为关键词搜索,数据保留以备升级

写入时使用 Savepoint 机制隔离 Embedding 写入失败,确保主流程不受影响。

4.3 语义搜索与多语言别名

semantic_search 实现了完整的搜索能力:pgvector 可用时走向量路径(l2_distance),否则降级为 ILIKE 关键词匹配。

系统维护多语言别名映射表(ALIAS_MAP),搜索时自动展开:

输入 自动展开为
黄金 GOLD、Gold、XAU、贵金属
BTC 比特币、Bitcoin
美联储 Fed、Federal Reserve、FOMC

5. 多路混合召回策略

5.1 三路召回设计

ResearchMemoryMCP.query_for_briefing 是 RAG 召回的核心入口:

路径 策略 目的
路径 A:语义搜索 pgvector 向量相似度 / 关键词退化 捕获与问题语义最接近的观点
路径 B:资产精确匹配 asset_scope 字段过滤 确保该资产的所有活跃观点不遗漏
路径 C:高信任来源保底 confidence 降序 Top-5 确保高质量来源不被排挤

三路结果合并去重后,进入综合评分。

5.2 综合评分排序

score = 语义排名分 × 0.5 + 来源可信度 × 0.3 + 观点置信度 × 0.2 − 矛盾惩罚 (0.3)

排序后取前 N 条注入 LLM 上下文。

5.3 数据覆盖摘要

为防止 LLM 幻觉式补充不存在的数据,每次召回时生成数据覆盖摘要,告知 LLM:当前资产有多少条活跃观点、数据时间范围、立场分布(bullish / bearish / neutral 各几条)。使 LLM 能准确区分"有数据支撑"和"缺乏信息"。


6. 意图识别与对话系统

6.1 双层意图识别

IntentRecognitionSkill 采用规则层 + LLM 层的双层架构:

第一层(规则层):关键词快速匹配,0ms 延迟,无 API 消耗。

  • 资产关键词(中英双语:"比特币" → BTC,"黄金" → GOLD)
  • 辩论意图("怎么看"、"多空"、"bull"、"bear")
  • 私域查询("我的"、"知识库"、"之前")
  • 时间范围("短期" → short,"今天" → immediate)

第二层(LLM 层):规则层置信度低于 0.65 时触发,使用低成本模型(DeepSeek V3.2),输出结构化意图 JSON,与规则层结果融合。

五种路由模式asset_analysis(资产分析)、macro(宏观分析)、debate(辩证分析)、knowledge_query(知识库查询)、chat(一般问答)。

6.2 上下文注入与对话生成

对话接口(/api/v1/chat/sessions/{id}/chat)的完整处理链路:

  1. 存储用户消息 → 意图识别(获取资产和模式)
  2. 语义搜索召回 Top-5 私域观点
  3. 构建 Prompt:私域知识参考(按相关性排序)+ 用户问题 + 对话历史(最近 8 条)
  4. 注入当前时间戳(CST)到 System Prompt
  5. LLM 生成回答 → 存储回复(含花费估算、模型名、注入上下文等元数据)

7. 量化信号评分引擎

SignalScorer 在 LLM 分析之前,用纯规则引擎对四个维度进行量化预评分:

维度 数据来源 评分逻辑
claim(私域观点) 知识库活跃观点 ∑(stance × trust × confidence) / ∑(trust × confidence)
market(行情) 价格 / RSI / 趋势 基于趋势方向和 RSI 超买超卖
flow(资金流) 资金费率 / 未平仓等 多信号加权综合
event(事件) 新闻 / 经济日历 基于 importance 和 impact_direction

自适应权重:权重根据自动推断的事件类型动态调整。支持 8 种类型:macro_policy、central_bank、earnings、crypto_sentiment、crypto_onchain、technical_breakout、geopolitical、regulatory。

评分结果以结构化文本注入 Prompt。当评分方向与 LLM 判断不一致时,要求 LLM 在叙述中说明原因。


8. 四模型委员会辩论机制

8.1 四席角色设计

委员会由四个不同厂商的模型分别扮演独立分析师:

角色 模型 分析视角
基准分析师(Baseline) Claude Opus 4.6 基于证据的直觉判断,聚焦主要矛盾
概率分析师(Probability) Gemini 3.1 Pro 概率框架,量化各情景的加权期望值
风控哨兵(Risk Sentinel) GPT-5.4 寻找尾部风险、黑天鹅、决策盲区
市场结构分析师(Structure) GLM-5 资金流向、机构行为、庄散博弈、信息不对称

设计理念:每个角色不预设立场,独立看完同样的证据后自主给出方向判断。使用不同厂商模型确保视角多样性,避免同质化。

8.2 辩论流程

CommitteeWorkflow 编排:

  1. 上下文聚合 — MCP 层收集私域观点、行情、事件、资金流
  2. 多轮发言 — 默认 2 轮,每轮 4 角色依次发言。后续轮次可见前序发言,进行质疑和认可
  3. 实时追踪 — 通过 ProgressTracker 向前端推送每个角色的分析进度
  4. 持久化 — 所有发言记录(DebateRound)存入数据库,支持回放

8.3 最终裁决

所有分析完成后,FinalAdjudicationSkill 调用裁决模型(Claude Opus)综合给出最终裁决:

字段 说明
direction 最终方向:bullish / bearish / neutral
conviction 确信度:0.0 ~ 1.0
recommended_action 建议操作:enter / watch / avoid / hold
consensus_level 共识程度:strong / moderate / weak / split
synthesis 综合裁决叙述
risk_warnings 风控哨兵识别的风险
structure_warnings 市场结构分析师的庄散博弈警告
hedging_advice 对冲 / 防守建议(必填)
invalidation_conditions 裁决失效条件

裁决约束:conviction > 0.7 时才可判定 strong_consensus;四方方向严重分歧时 consensus_level 为 split,conviction 上限 0.45;市场结构分析师发现机构行为与叙事背离时,必须在裁决中突出警告。


9. 研究简报生成

BriefingWorkflow 编排完整的简报生成链路:

  1. MCP 上下文聚合

    • ResearchMemoryMCP — 三路混合召回 + 数据覆盖摘要
    • EventFeedMCP — 最新事件
    • MarketDataMCP — 当前行情状态
    • FlowContinuityMCP — 资金流信号
  2. 信息融合(Fusion)FusionSkill 将四类数据融合为统一分析上下文

  3. 简报生成BriefingSkill 输出结构化简报卡片(BriefingCard):执行摘要、支持论点、反面论点、关键风险、策略建议、推荐操作、失效条件

  4. 证据链接:将关联的 Claim、Event、Market 数据写入 BriefingEvidenceLink 表,支持追溯


10. 策略蒸馏

StrategyDistillationWorkflow 从原始研究资料中蒸馏可执行的交易策略:

  • 输入:RawSource 文本内容
  • 处理StrategyDistillationSkill 调用 LLM(Claude Opus)识别隐含的策略逻辑
  • 输出StrategyCard,包含策略名称、类型、核心逻辑、适用资产、进场条件、退出规则、风险因素
  • 关联:通过 StrategySourceLink 记录策略与原始来源的蒸馏关系

11. 观点生命周期管理

LifecycleWorkflow 定期扫描所有活跃观点:

  • 频率:Scheduler 每小时触发一次
  • 状态转换:active → expired / invalidated
  • 审计:每次变更写入 LifecycleLog(原因、触发方式、证据快照)
  • 性能保护:每次最多处理 50 条,避免单次阻塞

12. LLM 统一调用层

12.1 OpenRouter 统一网关

所有 LLM 调用通过 LLMClient 统一封装:

  • 智能重试:指数退避,区分可重试(429/500/502/503)与不可重试(400/401/403/404)
  • 三级 Fallback:主选 → 备选 → 万能 Fallback(DeepSeek V3.2,不受区域限制)
  • Mock 降级:无 API Key 时返回结构化 Mock 响应,保证开发调试可用
  • 结构化输出:支持 JSON Schema 严格模式

12.2 角色化模型路由

系统定义 10 个 Skill 角色,每个映射到最适合的模型:

Skill 角色 主选模型 备选模型 选择理由
briefing Claude Sonnet 4.6 Gemini Flash 长文输出清晰,稳健 workhorse
fusion Gemini 3.1 Pro DeepSeek V3.2 量化推理强,1M 上下文窗口
extraction DeepSeek V3.2 Gemini Flash Lite 成本极低($0.26/M),中文优秀
committee_a Claude Opus 4.6 Claude Sonnet 4.6 Arena #1,旗舰推理
committee_b Gemini 3.1 Pro Gemini Flash Arena #3,量化分析
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 嵌入向量化

12.3 Prompt 自适应优化

PromptAdapter 根据模型型号自动调整 Prompt 策略:

模型适配后缀:Claude 强调完整填写;Gemini 防止嵌套 wrapper;GPT 严格遵守 system prompt;GLM 中文分析、控制长度;DeepSeek 确保数值范围合法。

温度矩阵:针对每个 (技能类别, 模型家族) 组合配置最优温度,标注来源(官方 / 经验 / 待验),支持审计。例如:

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

12.4 成本追踪

每次 LLM 调用自动估算成本(基于 OpenRouter 定价),记录到 CostTracker:模型名称、Skill 角色、Input/Output Token 数、估算美元成本。委员会辩论的累计成本汇总到 JobRun 记录。


13. 定时任务调度

系统使用 asyncio 原生调度,无需 Celery/Redis,内嵌在 FastAPI 进程中:

任务 频率 功能
市场快照采集 每 15 分钟 Watchlist + 默认资产的行情快照
A 股基金增强采集 14:00–15:00 每 2 分钟 聚焦 CSI300 / ZZ500 / CYB / HSI
生命周期检查 每小时 扫描并更新过期 Claim 状态
自动研究简报 每 6 小时 Watchlist 热门资产自动生成 Briefing

所有定时任务通过 asyncio.to_thread 包装同步操作,不阻塞 FastAPI 事件循环。启动时延迟 5 秒执行首次快照,确保服务先就绪。


14. 数据源健康监控

DataSourceManager 提供完整的健康监控能力:

  • 健康记录:每次调用记录成功/失败、延迟、错误信息
  • 状态计算:根据 Key 配置、失败率、最近错误自动判定 healthy / degraded / unavailable
  • 配额管理QuotaGuard 按频率类别(FAST / MEDIUM / HOURLY / DAILY)控制调用间隔
  • 告警提醒:Key 未配置、失败率 > 50%、延迟 > 10s 自动告警
  • Dashboard API:按类别分组展示所有数据源状态,供前端 DataFlow 页面消费

15. 前端页面

基于 React 18 + TypeScript + TailwindCSS 构建:

页面 功能
Dashboard 系统概览,数据源状态摘要
ResearchChat 基于知识库的智能对话,自动注入私域上下文
KnowledgeBase 知识库管理,浏览 / 搜索 / 管理 Claim 卡片
Inbox 研究简报收件箱
Watchlist 资产关注列表管理
DebateViewer 委员会辩论过程可视化回放
Strategies 蒸馏策略卡片管理
Review 观点审核与质量管理
DataFlow 数据源健康状态监控面板
Settings API Key 配置、Cookie 管理、社交媒体账号、数据源地址
Verification 系统验证与健康检查