Skip to content

技术栈选型

定义 Deep Thought 系统的技术栈选型及理由。

核心原则:以 Python 为核心,架构契约驱动,运行形态无关。 每个模块只要遵守接口契约,可以跑在任何地方——本地脚本、Docker、Lambda、Cloud Worker。

决策总览

层级            技术选择                    说明
──────────────────────────────────────────────────────
语言            Python 3.11+               AI/金融数据生态最强
异步框架        FastAPI                    异步原生、自动文档、可作 API 层
数据库          embedded-postgres           嵌入式 PG,开发零配置,迁移零风险
ORM             SQLAlchemy                  屏蔽数据库差异
向量检索        pgvector (PG 扩展)          前期即可用,无需额外服务
缓存/队列       diskcache + queue.Queue     前期无需 Redis
任务调度        APScheduler                 纯 Python,轻量
LLM 调用        LiteLLM                    统一接口,支持多模型切换

1. 语言:Python 3.11+

决定:纯 Python。

理由

  • OpenBB、pandas、ccxt、IBKR API 客户端、Longbridge SDK 均为 Python 原生
  • LangGraph / CrewAI / LiteLLM 均为 Python 框架
  • 系统核心价值在数据处理和 AI 推理,不在前端交互
  • 异步能力通过 FastAPI + asyncio 覆盖

否决方案

  • 纯 TypeScript:金融数据生态弱,部分 LLM 框架支持差
  • Python + TS 混合:两套代码库,维护成本高于收益

2. 异步框架:FastAPI

决定:FastAPI 作为统一的异步框架和 API 层。

理由

  • 异步原生(async/await),适合 I/O 密集的数据采集和 LLM 调用
  • 自动生成 OpenAPI 文档,接口契约可视化
  • Pydantic 模型同时服务于数据校验、API 文档、序列化
  • 未来需要 web 界面时,FastAPI 直接提供后端 API

3. 数据库:embedded-postgres

决定:开发阶段使用 embedded-postgres,生产环境迁移至完整 PostgreSQL。

理由

  • embedded-postgres 就是 PostgreSQL,只是以子进程方式运行
  • 同一引擎、同一 SQL、同一数据格式,迁移等同于"搬家"而非"翻译"
  • 前期即可使用 PG 全部能力:JSONB、pgvector、全文搜索、ARRAY 类型
  • pip 安装,Python 代码控制启停,无需手动管理服务
  • 迁移至完整 PG 只需 pg_dump | psql,零兼容性风险

升级路径

Phase 1-5:  embedded-postgres (开发/本地运行)
Phase 6+:   Docker PostgreSQL 或云 RDS (生产部署)

否决方案

  • SQLite:类型系统弱、无原生 JSONB、迁移到 PG 有兼容性风险
  • 直接装完整 PG:前期配置重,不符合渐进式原则

pgvector 扩展

  • embedded-postgres 支持安装扩展,前期即可用 pgvector 做向量检索
  • 用于叙事的语义匹配搜索(新旧叙事对比)

4. ORM:SQLAlchemy

决定:SQLAlchemy 2.0+(使用 async 模式)。

理由

  • 屏蔽数据库差异,切换数据库只需改连接字符串
  • 声明式模型定义与 Pydantic 可互转
  • 支持异步(asyncpg 驱动),与 FastAPI 配合

5. 缓存与队列

决定:前期 diskcache + Python queue.Queue,后期可升级 Redis。

需求前期方案后期方案
缓存diskcache(磁盘持久化字典)Redis
任务队列queue.Queue + threadingCelery / Redis Queue
Pub/Sub自定义事件总线(进程内)Redis Pub/Sub

理由

  • 前期零外部依赖,pip install diskcache 即可
  • diskcache 支持过期、持久化,覆盖大部分缓存场景
  • 数据量增长或需要分布式时,平滑迁移至 Redis

6. 任务调度:APScheduler

决定:APScheduler。

理由

  • 纯 Python,无需外部服务(对比:Celery 需要 broker)
  • 支持 Cron 式调度、间隔调度、一次性任务
  • 可持久化任务状态(配合 SQLAlchemy jobstore)
  • 后期可升级为 Celery 或 Airflow,接口层隔离

7. LLM 调用:LiteLLM

决定:LiteLLM 作为统一 LLM 调用层。

理由

  • 统一接口调用 Claude / GPT / DeepSeek / 开源模型
  • 一个参数切换提供商,不改业务代码
  • 内置重试、限流、fallback 逻辑
  • 成本追踪

模型策略(详见 LLM 选型):

  • 核心分析(Persona 辩论、合成推理):Claude Opus / Sonnet
  • 叙事提取(高频、低成本):Claude Haiku / GPT-4o-mini
  • 情绪打分(结构化输出):小模型或本地模型

8. 前端与可视化

决定:前期 Streamlit,后期可升级 FastAPI + React。

Phase 1-5:  Streamlit Dashboard
            - 快速搭建,Python 原生
            - 适合内部使用、数据展示
            - 无需前端知识

Phase 6+:   FastAPI 后端 + React/TailwindCSS/Vite 前端(如需要)
            - 更丰富的交互
            - 可打包为 Electron 桌面应用

原则:前端不是系统核心,不值得前期投入。Streamlit 能覆盖 80% 的需求。

9. 模块运行形态

系统设计为契约驱动的异构架构,每个模块可独立部署:

模块                推荐形态              可迁移形态
──────────────────────────────────────────────────────────
数据采集            本地 Cron + APScheduler → Lambda
叙事发现            本地 Worker            → Lambda (事件触发)
指标计算            本地 Cron              → Cloud Worker
Persona 分析        本地 Worker            → Lambda
合成分析            本地 Worker            → Lambda
记忆系统            embedded-postgres      → 云 RDS
情绪采集            本地 Cron              → Lambda
前端 Dashboard      Streamlit              → FastAPI + React

模块间通信

  • 事件驱动(实时):进程内事件总线 → 可升级为 Redis Pub/Sub
  • 请求驱动(按需):Python 函数调用 → 可升级为 FastAPI HTTP API

10. 外部服务集成

服务接入方式说明
OpenBBPython SDK统一数据层
IBKRib_insync / REST API实时补丁
LongbridgeLongbridge SDK中国市场
Binanceccxt / REST API加密永续合约
FREDOpenBB 覆盖宏观指标

已讨论决定

  • [x] 语言:Python 3.11+
  • [x] 框架:FastAPI
  • [x] 数据库:embedded-postgres → PostgreSQL
  • [x] ORM:SQLAlchemy 2.0+
  • [x] 向量检索:pgvector
  • [x] 缓存/队列:diskcache → Redis
  • [x] 任务调度:APScheduler
  • [x] LLM:LiteLLM
  • [x] 前端:Streamlit → FastAPI + React

已确认但暂不定细节

  • [x] LLM:通过 LiteLLM 支持多模型 + 多 Provider,具体选型根据任务类型和成本动态调整,不锁定任何单一供应商
  • [x] 云部署:技术栈已支持云端实现(契约驱动 + 异构架构),具体云方案待实际需求时确定
  • [x] 监控与告警:根据实际运行需求确定选型,前期可用 Python logging + 简单通知

关联文档:规范总览 · 核心数据模型

基于 VitePress 构建