QVeris 量化研究平台

📎 引用文件

本文引用的文件 - agent/src/api/qveris_routes.py - agent/src/tools/qveris_tool.py - agent/backtest/loaders/qveris_loader.py - agent/mcp_server.py - agent/src/skills/qveris/SKILL.md - agent/src/skills/qveris/references/rest-api.md - agent/backtest/loaders/base.py - frontend/src/components/settings/QVerisSettings.tsx

目录

  1. 简介
  2. 项目结构
  3. 核心组件
  4. 架构总览
  5. 详细组件分析
  6. 依赖关系分析
  7. 性能与优化
  8. 故障排查指南
  9. 结论
  10. 附录

简介

QVeris 在本项目中作为“付费能力路由器”,为量化研究提供自然语言查询、工具执行与结果处理的一体化能力。它通过搜索发现可用工具、检查参数模式,再在预算与速率限制约束下执行调用,并将返回的 OHLCV/指标/基本面等数据标准化后接入回测与策略流程。其设计强调: - 安全认证:API Key 与模式开关控制访问;配置持久化且权限受控。 - 预算控制:按会话维度预留与扣减信用额度,防止超支。 - 速率限制:对 429 响应进行退避重试,尊重 Retry-After。 - 成本优化:基于期望成本与成功率选择工具,优先低成本高成功率的候选。 - 批量与缓存:批量拉取时逐标的失败隔离、结果缓存与截断结果回填。

项目结构

围绕 QVeris 的关键代码分布在以下位置: - API 路由:设置读取/更新、状态查询(鉴权、脱敏)。 - 工具层:搜索、检查、执行三类工具,统一客户端封装与预算门控。 - 回测加载器:面向 OHLCV 的显式启用加载器,内置搜索-选择-执行-解析流水线。 - MCP 工具:对外暴露 qveris_search / qveris_inspect / qveris_execute。 - 技能文档:工作流、计费与模式说明。 - 前端设置:模式切换与预算输入。

graph TB UI["前端设置<br/>QVerisSettings"] --> API["FastAPI 路由<br/>qveris_routes"] API --> Tool["工具层<br/>qveris_tool"] Tool --> Client["HTTP 客户端<br/>search/inspect/execute"] Client --> QVeris["QVeris 服务"] Backtest["回测加载器<br/>qveris_loader"] --> Tool Backtest --> Client MCP["MCP 工具<br/>mcp_server"] --> Tool

图表来源 - agent/src/api/qveris_routes.py:139-177 - agent/src/tools/qveris_tool.py:202-353 - agent/backtest/loaders/qveris_loader.py:147-248 - agent/mcp_server.py:2024-2115

章节来源 - agent/src/api/qveris_routes.py:1-232 - agent/src/tools/qveris_tool.py:1-665 - agent/backtest/loaders/qveris_loader.py:1-685 - agent/mcp_server.py:2024-2115

核心组件

章节来源 - agent/src/tools/qveris_tool.py:38-147 - agent/src/api/qveris_routes.py:31-107 - agent/backtest/loaders/qveris_loader.py:63-119 - agent/mcp_server.py:2024-2115 - frontend/src/components/settings/QVerisSettings.tsx:270-302

架构总览

QVeris 的工作流分为三层: - 发现层:通过自然语言查询搜索可用能力,返回候选工具及其预期成本与成功率。 - 检查层:获取工具完整参数模式,确保后续执行参数正确。 - 执行层:在预算门控与速率限制保护下执行,并回填截断结果、记录用量。

sequenceDiagram participant U as "用户/策略" participant API as "API 路由" participant T as "工具层" participant C as "HTTP 客户端" participant S as "QVeris 服务" U->>API : 获取/更新配置 API->>T : 读取/保存配置 T-->>API : 脱敏配置/状态 U->>T : qveris_search(query, limit) T->>C : POST /search C->>S : 请求(含鉴权) S-->>C : 候选工具列表 C-->>T : 搜索结果 T-->>U : 候选工具(含 expected_cost/stats) U->>T : qveris_inspect(tool_ids) T->>C : POST /tools/by-ids C->>S : 请求 S-->>C : 参数模式 C-->>T : 检查结果 T-->>U : 参数模式 U->>T : qveris_execute(tool_id, parameters) T->>T : 预算预留/校验 T->>C : POST /tools/execute C->>S : 请求 S-->>C : 执行结果(可能截断) C-->>T : 结果 T->>C : GET full_content_file_url(可选) C->>S : 下载完整内容 S-->>C : 完整数据 C-->>T : 回填结果 T-->>U : 最终结果(含 cost/remaining_credits)

图表来源 - agent/src/tools/qveris_tool.py:293-353 - agent/src/tools/qveris_tool.py:563-665 - agent/backtest/loaders/qveris_loader.py:335-381

详细组件分析

配置管理与认证

flowchart TD Start(["开始"]) --> ReadCfg["读取本地配置"] ReadCfg --> EnvOverride{"环境变量覆盖?"} EnvOverride --> |是| ApplyEnv["应用 API Key/Base URL"] EnvOverride --> |否| KeepCfg["保持原配置"] ApplyEnv --> Normalize["模式归一化"] KeepCfg --> Normalize Normalize --> SaveCheck{"是否修改?"} SaveCheck --> |是| AtomicSave["原子写入+权限设置"] SaveCheck --> |否| End(["结束"]) AtomicSave --> End

图表来源 - agent/src/tools/qveris_tool.py:49-119 - agent/src/api/qveris_routes.py:149-177

章节来源 - agent/src/tools/qveris_tool.py:38-147 - agent/src/api/qveris_routes.py:73-107

自然语言查询与工具执行

sequenceDiagram participant L as "加载器/工具" participant C as "HTTP 客户端" participant S as "QVeris 服务" L->>C : search(query, limit) C->>S : POST /search S-->>C : {results, search_id} C-->>L : 搜索结果 L->>C : inspect(tool_ids, search_id) C->>S : POST /tools/by-ids S-->>C : 参数模式 C-->>L : 检查结果 L->>C : execute(tool_id, parameters, search_id) C->>S : POST /tools/execute alt 结果被截断 S-->>C : result.full_content_file_url C->>S : GET full_content_file_url S-->>C : 完整数据 end C-->>L : 执行结果(含 cost/remaining_credits)

图表来源 - agent/src/tools/qveris_tool.py:293-353 - agent/backtest/loaders/qveris_loader.py:160-202

章节来源 - agent/src/tools/qveris_tool.py:202-353 - agent/backtest/loaders/qveris_loader.py:147-248 - agent/src/skills/qveris/references/rest-api.md:190-216

搜索能力选择算法与成本优化

flowchart TD A["收到标的与区间"] --> B["构建查询"] B --> C["搜索候选工具"] C --> D{"候选有效?"} D --> |否| E["无可用能力"] D --> |是| F["过滤错误粒度"] F --> G["按成功率/成本排序"] G --> H{"预算足够?"} H --> |否| I["跳过该能力"] H --> |是| J["预留预期成本"] J --> K["执行工具"] K --> L{"成功?"} L --> |否| M["尝试下一个候选"] L --> |是| N["解析为标准OHLCV"] N --> O["返回结果"]

图表来源 - agent/backtest/loaders/qveris_loader.py:387-458 - agent/backtest/loaders/qveris_loader.py:471-554 - agent/backtest/loaders/qveris_loader.py:556-580

章节来源 - agent/backtest/loaders/qveris_loader.py:335-381 - agent/backtest/loaders/qveris_loader.py:387-580

预算控制与速率限制

classDiagram class QVerisClient { +search(query, limit, session_id) dict +inspect(tool_ids, search_id, session_id) dict +execute(tool_id, parameters, search_id, session_id, model, max_response_size) dict -_request(method, path, json_body, params, auth) dict -_wait_for_slot() void } class QVerisExecuteTool { +execute(**kwargs) str -_quote(client, tool_id, kwargs) dict } QVerisExecuteTool --> QVerisClient : "调用执行/检查"

图表来源 - agent/src/tools/qveris_tool.py:202-353 - agent/src/tools/qveris_tool.py:472-665

章节来源 - agent/src/tools/qveris_tool.py:231-274 - agent/src/tools/qveris_tool.py:563-665 - agent/backtest/loaders/qveris_loader.py:217-258

高频数据处理、批量查询与缓存

flowchart TD S["批量标的列表"] --> Loop{"遍历标的"} Loop --> Cache["检查缓存"] Cache --> |命中| ReturnCache["返回缓存结果"] Cache --> |未命中| Fetch["搜索-选择-执行"] Fetch --> Parse["标准化为OHLCV"] Parse --> Store["写入缓存"] Store --> Next["下一个标的"] ReturnCache --> Next Next --> |完成| Done["汇总结果"]

图表来源 - agent/backtest/loaders/qveris_loader.py:276-333 - agent/backtest/loaders/qveris_loader.py:556-580 - agent/backtest/loaders/base.py:181-215

章节来源 - agent/backtest/loaders/qveris_loader.py:276-333 - agent/backtest/loaders/qveris_loader.py:556-580 - agent/backtest/loaders/base.py:181-215

复杂量化场景应用案例与调优技巧

章节来源 - agent/src/skills/qveris/SKILL.md:19-80 - agent/src/tools/qveris_tool.py:293-353 - agent/backtest/loaders/qveris_loader.py:387-458

依赖关系分析

graph LR Frontend["前端设置"] --> Routes["API 路由"] Routes --> Tools["工具层"] Tools --> Client["HTTP 客户端"] Loader["回测加载器"] --> Tools MCP["MCP 工具"] --> Tools Client --> QVeris["QVeris 服务"]

图表来源 - agent/src/api/qveris_routes.py:139-177 - agent/src/tools/qveris_tool.py:202-353 - agent/backtest/loaders/qveris_loader.py:276-333 - agent/mcp_server.py:2024-2115 - frontend/src/components/settings/QVerisSettings.tsx:270-302

章节来源 - agent/src/api/qveris_routes.py:139-177 - agent/src/tools/qveris_tool.py:202-353 - agent/backtest/loaders/qveris_loader.py:276-333 - agent/mcp_server.py:2024-2115 - frontend/src/components/settings/QVerisSettings.tsx:270-302

性能与优化

[本节为通用指导,无需特定文件引用]

故障排查指南

章节来源 - agent/src/tools/qveris_tool.py:154-175 - agent/src/tools/qveris_tool.py:563-665 - agent/src/skills/qveris/references/rest-api.md:190-216

结论

QVeris 在本项目中提供了强大的付费能力路由,结合自然语言查询、工具检查与执行、预算与速率限制控制,以及批量与缓存优化,能够支撑复杂的量化研究场景。通过合理的配置、选择算法与调优策略,可以在保证成本可控的前提下,高效获取高质量数据与指标。

[本节为总结性内容,无需特定文件引用]

附录

章节来源 - agent/src/skills/qveris/SKILL.md:19-80 - agent/src/skills/qveris/references/rest-api.md:190-216