数据源工具

📎 引用文件

本文引用的文件 - tushare_fallbacks.py - qveris_tool.py - fred_macro_tool.py - _http.py - accessor.py - settings_routes.py - test_tushare_fallbacks.py - test_qveris_tool.py - test_fred_macro_tool.py

目录

  1. 简介
  2. 项目结构
  3. 核心组件
  4. 架构总览
  5. 详细组件分析
  6. 依赖关系分析
  7. 性能与限流
  8. 故障转移与降级策略
  9. 数据格式、对齐与质量校验
  10. 配置与认证管理
  11. 多数据源协作与一致性
  12. 监控与可观测性
  13. 故障排查指南
  14. 结论

简介

本文件系统性梳理 Vibe-Trading 的数据源工具集,重点覆盖三类能力: - Tushare 备用方案与降级:当免费/主用数据源不可用时,通过 Tushare 恢复研究流程。 - QVeris 专业金融数据服务:付费市场能力发现、检查与执行,内置会话级预算与请求限流。 - FRED 宏观经济指标:读取美联储经济数据库时间序列,统一封装为标准化输出。

文档同时说明认证配置、连接池、请求限流、数据格式转换、时间序列对齐、质量验证、数据源选择策略、故障转移与性能监控等关键主题。

项目结构

围绕三个工具模块及其共享基础设施: - tushare_fallbacks:面向中国市场的资金流向、龙虎榜、北向资金、融资融券等数据的 Tushare 适配层。 - qveris_tool:QVeris 客户端、配置读写、搜索/检查/执行工具及会话级预算控制。 - fred_macro_tool:FRED 宏观时间序列的只读工具,统一解析缺失值与限制返回规模。 - 共享基础:HTTP 限流与连接池(_http.py)、环境变量配置访问器(accessor.py)、设置路由(settings_routes.py)。

graph TB subgraph "数据源工具" TF["Tushare 备用适配器"] QV["QVeris 客户端与工具"] FM["FRED 宏观工具"] end subgraph "共享基础设施" HTTP["HTTP 限流与连接池"] CFG["环境配置访问器"] API["设置路由(凭证更新)"] end TF --> CFG QV --> CFG FM --> HTTP QV --> HTTP API --> CFG

图表来源 - tushare_fallbacks.py:1-232 - qveris_tool.py:1-665 - fred_macro_tool.py:1-260 - _http.py:88-179 - accessor.py:52-92 - settings_routes.py:635-673

章节来源 - tushare_fallbacks.py:1-232 - qveris_tool.py:1-665 - fred_macro_tool.py:1-260 - _http.py:88-179 - accessor.py:52-92 - settings_routes.py:635-673

核心组件

章节来源 - tushare_fallbacks.py:22-232 - qveris_tool.py:38-147,202-353,382-665:38-147 - qveris_tool.py:202-353 - qveris_tool.py:382-665 - fred_macro_tool.py:49-177

架构总览

sequenceDiagram participant Caller as "调用方" participant Tool as "数据源工具" participant Client as "外部客户端" participant Net as "网络/限流" participant Provider as "数据提供方" Caller->>Tool : 发起请求 Tool->>Net : 限流/连接复用 Net-->>Tool : 通过或等待 Tool->>Client : 构造请求参数/鉴权 Client->>Provider : HTTP 请求 Provider-->>Client : JSON/数据 Client-->>Tool : 响应体 Tool->>Tool : 格式转换/对齐/校验 Tool-->>Caller : 标准信封输出

图表来源 - qveris_tool.py:239-344 - fred_macro_tool.py:143-177 - _http.py:120-179

详细组件分析

Tushare 备用适配器

flowchart TD Start(["进入 fetch_*"]) --> ParseCode["解析/校验股票代码"] ParseCode --> DateWin["计算宽泛日期窗口"] DateWin --> CallTS["调用 Tushare Pro API"] CallTS --> Normalize["字段映射/单位换算/空值处理"] Normalize --> Sort["按日期排序/截取最近N条"] Sort --> Envelope["组装标准信封"] Envelope --> End(["返回"])

图表来源 - tushare_fallbacks.py:113-232

章节来源 - tushare_fallbacks.py:22-232 - test_tushare_fallbacks.py:15-110

QVeris 客户端与工具

classDiagram class QVerisConfig { +bool enabled +string base_url +string api_key +string mode +float budget_credits_per_session } class QVerisClient { +search(query, limit, session_id) dict +inspect(tool_ids, search_id, session_id) dict +execute(tool_id, parameters, ...) dict +usage_history(**params) dict +credits_ledger(**params) dict -_request(method, path, ...) dict -_wait_for_slot() void } class QVerisSearchTool { +execute(**kwargs) string } class QVerisInspectTool { +execute(**kwargs) string } class QVerisExecuteTool { +execute(**kwargs) string -_quote(client, tool_id, kwargs) dict } QVerisExecuteTool --> QVerisClient : "调用" QVerisSearchTool --> QVerisClient : "调用" QVerisInspectTool --> QVerisClient : "调用" QVerisClient --> QVerisConfig : "读取配置"

图表来源 - qveris_tool.py:38-147 - qveris_tool.py:202-353 - qveris_tool.py:394-470 - qveris_tool.py:472-665

sequenceDiagram participant Agent as "Agent/调用方" participant Exec as "QVerisExecuteTool" participant Client as "QVerisClient" participant Market as "QVeris 市场" Agent->>Exec : execute(tool_id, parameters, expected_cost?) Exec->>Client : inspect(tool_ids) 获取权威报价 Client->>Market : POST /tools/by-ids Market-->>Client : {results : [{expected_cost,...}]} Exec->>Exec : 比较 caller_hint vs server_quote,取较大值 Exec->>Exec : 会话预算预留线程锁 Exec->>Client : execute(tool_id, parameters, ...) Client->>Market : POST /tools/execute Market-->>Client : {cost, result?} Client-->>Exec : 响应 Exec->>Exec : 扣减预算/记录花费 Exec-->>Agent : {ok, cost, remaining_credits, ...}

图表来源 - qveris_tool.py:498-665 - qveris_tool.py:239-344

章节来源 - qveris_tool.py:38-147 - qveris_tool.py:202-353 - qveris_tool.py:394-665 - test_qveris_tool.py:49-414

FRED 宏观工具

flowchart TD A["接收参数"] --> B{"series_id 有效?"} B -- 否 --> E["返回错误信封"] B -- 是 --> C["构建查询参数(api_key, file_type, dates)"] C --> D["throttled_get_json(host='fred')"] D --> E2{"是否成功?"} E2 -- 否 --> E E2 -- 是 --> F["解析observations, 缺失值转None"] F --> G["按limit保留最新观测"] G --> H["组装标准信封"] H --> I["返回"]

图表来源 - fred_macro_tool.py:108-177 - fred_macro_tool.py:180-260 - _http.py:155-179

章节来源 - fred_macro_tool.py:49-260 - test_fred_macro_tool.py:1-182

依赖关系分析

graph LR CFG["EnvConfig 单例"] --> TF["Tushare 备用适配器"] CFG --> QV["QVeris 工具"] CFG --> FM["FRED 工具"] HTTP["HTTP 限流/连接池"] --> FM HTTP --> QV API["设置路由"] --> CFG

图表来源 - accessor.py:52-92 - _http.py:88-179 - settings_routes.py:635-673

章节来源 - accessor.py:52-92 - _http.py:88-179 - settings_routes.py:635-673

性能与限流

章节来源 - fred_macro_tool.py:31-47,143-177:31-47 - qveris_tool.py:202-273 - _http.py:88-179

故障转移与降级策略

章节来源 - tushare_fallbacks.py:18-30 - qveris_tool.py:137-175,382-470:137-175 - fred_macro_tool.py:98-107

数据格式、对齐与质量校验

章节来源 - tushare_fallbacks.py:46-87,113-232:46-87 - fred_macro_tool.py:207-254 - qveris_tool.py:355-379,498-561:355-379

配置与认证管理

章节来源 - tushare_fallbacks.py:22-30 - settings_routes.py:635-673 - qveris_tool.py:49-147 - fred_macro_tool.py:98-107 - accessor.py:52-92

多数据源协作与一致性

章节来源 - tushare_fallbacks.py:113-232 - qveris_tool.py:382-665 - fred_macro_tool.py:108-177

监控与可观测性

章节来源 - qveris_tool.py:239-273,645-665:239-273 - test_qveris_tool.py:260-279 - fred_macro_tool.py:143-177

故障排查指南

章节来源 - tushare_fallbacks.py:18-30 - qveris_tool.py:154-175,563-624:154-175 - fred_macro_tool.py:122-159 - test_fred_macro_tool.py:129-161

结论

该数据源工具集通过统一的接口与健壮的错误处理,实现了: - 灵活的多源接入与降级:Tushare 作为可靠的备用源,QVeris 提供付费扩展能力,FRED 专注宏观数据。 - 严格的认证与配额管理:环境变量与本地配置结合,QVeris 会话级预算控制。 - 稳定的限流与连接复用:按 host 桶限流与连接池,降低外部依赖风险。 - 一致的数据格式与质量保障:日期、数值、空值语义统一,便于跨源对齐与分析。

这些设计使系统在复杂的外部环境下仍能提供稳定、可控、可观测的数据服务能力。