Quant Agent 完整系统规格

Quant Agent 完整系统规格

文档状态: Approved Design

版本: 1.0

日期: 2026-07-10

目标市场: A 股

研究频率: 日频横截面选股

自治等级: 受控自治

Alpha 路线: 因子表达式搜索 + 因子组合 + LightGBM/XGBoost


1. 产品定义

Quant Agent 是一个面向 A 股日频横截面选股研究的自治量化研发系统。它以研究目标和约束为输入,自动完成数据获取、数据质检、Alpha 候选生成、模型训练、组合构建、回测、稳健性验证、报告生成以及 Git 提交/PR 创建;Git 合并、生产部署和实盘上线必须由人类审批。

系统定位是"可审计的自动研究工程师",而不是能够绕过风险控制的自动交易员。LLM 负责提出假设、规划实验、选择工具和解释结果;数据清洗、因子计算、模型训练、回测、风险指标及准入门槛由版本化的确定性程序执行。

1.1 目标

  • 自动发现具有经济逻辑、统计显著性和样本外稳定性的 Alpha。
  • 自动下载并版本化行情、基本面、交易日历和股票状态数据。
  • 自动训练、调参、校准和登记机器学习模型。
  • 自动执行符合 A 股规则且无前视偏差的回测。
  • 自动生成可复现的研究报告、模型卡和部署建议。
  • 自动创建独立分支、提交代码和研究产物、创建 PR。
  • 经人工批准后自动部署到研究或模拟环境。
  • 对每次决策、工具调用、数据和产物提供端到端审计。

1.2 非目标

  • V1 不支持分钟级、高频、期权、期货或数字资产研究。
  • V1 不自动合并主分支,不自动生产部署,不自动实盘交易。
  • 不让 LLM 直接计算收益率、风险指标或回测撮合结果。
  • 不以单次最高 Sharpe 作为 Alpha 选择标准。
  • 不允许研究代码直接访问生产交易凭证。

1.3 成功标准

系统成功不等于"保证盈利",而是满足以下工程与研究标准:

  • 同一代码、配置、数据快照和随机种子可重复得到一致结果。
  • 任何报告指标都能追溯到一次不可变的实验运行。
  • 自动流水线在单节点失败后可从最近检查点恢复,不重复产生副作用。
  • 所有候选策略均经过反泄漏、成本、容量、稳定性和样本外检验。
  • 未经人工审批,系统无法合并 Git、生产部署或连接实盘交易。

2. 用户与使用场景

2.1 角色

角色 权限与职责
Quant Researcher 提交研究目标、查看实验、否决候选、评论报告
Reviewer 审阅代码、数据谱系、报告和模型卡,批准或拒绝 Git 合并
Risk Approver 审核风险、容量、暴露和模拟运行结果,批准生产部署
Platform Admin 管理工具白名单、MCP Server、密钥、配额和审计策略
Quant Agent 在授予的研究权限内执行任务,不拥有审批权

2.2 典型输入

yaml 复制代码
research_goal:
  universe: CSI800
  rebalance_frequency: weekly
  prediction_horizon: 5d
  objective: maximize_rank_ic_after_cost
  benchmark: 000906.SH
  constraints:
    max_industry_active_weight: 0.03
    max_stock_weight: 0.02
    max_turnover_one_way: 0.20
    exclude_st: true
    min_listing_days: 120
    min_adv20_cny: 30000000
  data_cutoff: "2026-06-30T15:00:00+08:00"

2.3 典型输出

  • 可执行的 Alpha 表达式与经济逻辑说明。
  • 数据快照 ID、特征集版本、标签定义和训练/验证/测试切分。
  • 模型文件、模型卡、参数、随机种子和依赖锁文件。
  • 回测结果、交易明细、归因、容量与压力测试。
  • HTML/PDF/Markdown 研究报告。
  • Git 分支、提交 SHA、PR 链接和审批包。
  • 经批准后的部署版本、运行状态和回滚目标。

3. 总体架构

#mermaid-svg-5E2GBXRscPyA8W11{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-5E2GBXRscPyA8W11 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-5E2GBXRscPyA8W11 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-5E2GBXRscPyA8W11 .error-icon{fill:#552222;}#mermaid-svg-5E2GBXRscPyA8W11 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-5E2GBXRscPyA8W11 .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-5E2GBXRscPyA8W11 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-5E2GBXRscPyA8W11 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-5E2GBXRscPyA8W11 .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-5E2GBXRscPyA8W11 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-5E2GBXRscPyA8W11 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-5E2GBXRscPyA8W11 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-5E2GBXRscPyA8W11 .marker.cross{stroke:#333333;}#mermaid-svg-5E2GBXRscPyA8W11 svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-5E2GBXRscPyA8W11 p{margin:0;}#mermaid-svg-5E2GBXRscPyA8W11 .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-5E2GBXRscPyA8W11 .cluster-label text{fill:#333;}#mermaid-svg-5E2GBXRscPyA8W11 .cluster-label span{color:#333;}#mermaid-svg-5E2GBXRscPyA8W11 .cluster-label span p{background-color:transparent;}#mermaid-svg-5E2GBXRscPyA8W11 .label text,#mermaid-svg-5E2GBXRscPyA8W11 span{fill:#333;color:#333;}#mermaid-svg-5E2GBXRscPyA8W11 .node rect,#mermaid-svg-5E2GBXRscPyA8W11 .node circle,#mermaid-svg-5E2GBXRscPyA8W11 .node ellipse,#mermaid-svg-5E2GBXRscPyA8W11 .node polygon,#mermaid-svg-5E2GBXRscPyA8W11 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-5E2GBXRscPyA8W11 .rough-node .label text,#mermaid-svg-5E2GBXRscPyA8W11 .node .label text,#mermaid-svg-5E2GBXRscPyA8W11 .image-shape .label,#mermaid-svg-5E2GBXRscPyA8W11 .icon-shape .label{text-anchor:middle;}#mermaid-svg-5E2GBXRscPyA8W11 .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-5E2GBXRscPyA8W11 .rough-node .label,#mermaid-svg-5E2GBXRscPyA8W11 .node .label,#mermaid-svg-5E2GBXRscPyA8W11 .image-shape .label,#mermaid-svg-5E2GBXRscPyA8W11 .icon-shape .label{text-align:center;}#mermaid-svg-5E2GBXRscPyA8W11 .node.clickable{cursor:pointer;}#mermaid-svg-5E2GBXRscPyA8W11 .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-5E2GBXRscPyA8W11 .arrowheadPath{fill:#333333;}#mermaid-svg-5E2GBXRscPyA8W11 .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-5E2GBXRscPyA8W11 .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-5E2GBXRscPyA8W11 .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-5E2GBXRscPyA8W11 .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-5E2GBXRscPyA8W11 .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-5E2GBXRscPyA8W11 .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-5E2GBXRscPyA8W11 .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-5E2GBXRscPyA8W11 .cluster text{fill:#333;}#mermaid-svg-5E2GBXRscPyA8W11 .cluster span{color:#333;}#mermaid-svg-5E2GBXRscPyA8W11 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-5E2GBXRscPyA8W11 .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-5E2GBXRscPyA8W11 rect.text{fill:none;stroke-width:0;}#mermaid-svg-5E2GBXRscPyA8W11 .icon-shape,#mermaid-svg-5E2GBXRscPyA8W11 .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-5E2GBXRscPyA8W11 .icon-shape p,#mermaid-svg-5E2GBXRscPyA8W11 .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-5E2GBXRscPyA8W11 .icon-shape .label rect,#mermaid-svg-5E2GBXRscPyA8W11 .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-5E2GBXRscPyA8W11 .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-5E2GBXRscPyA8W11 .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-5E2GBXRscPyA8W11 :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} approval
approval
Researcher / Reviewer
Control Plane API
Workflow Orchestrator
Planner Agent
Memory Service
Policy & Approval Engine
Event Bus
Data Agent
Alpha Discovery Agent
Training Agent
Backtest Agent
Reflection Agent
Report Agent
Git Agent
Deploy Agent
MCP Gateway
Data Lake / Warehouse
Experiment & Model Registry
Isolated Compute Runners
Git Provider
CI/CD Platform
Observability / Audit

3.1 分层原则

  1. 控制平面: 接收目标、维护状态机、分配任务、预算和权限。
  2. 推理平面: Planner 和各专业 Agent 进行规划、假设生成与解释。
  3. 执行平面: 沙箱中的确定性工具运行数据、模型和回测代码。
  4. 存储平面: 对象存储、元数据仓库、向量索引、实验与模型注册表。
  5. 治理平面: 审批、策略、密钥、审计、成本与资源配额。

3.2 推荐技术栈

能力 推荐实现 可替代实现
API FastAPI + Pydantic Go / Spring Boot
工作流 Temporal Dagster / Prefect
Agent 图 LangGraph(薄层使用) 自研状态机
消息总线 Kafka / Redpanda Redis Streams
元数据 PostgreSQL MySQL
对象存储 S3 / MinIO + Parquet HDFS
特征查询 DuckDB + Polars Spark
实验/模型注册 MLflow Weights & Biases
训练 LightGBM、XGBoost、Optuna CatBoost
回测 自研向量化日频引擎或 Qlib 适配层 Backtrader
报告 Jinja2 + Plotly + WeasyPrint Quarto
可观测性 OpenTelemetry + Prometheus + Grafana Datadog
密钥 Vault / 云密钥管理 Kubernetes Secrets
部署 Docker + Kubernetes + Argo CD Nomad

4. Agent Workflow

4.1 主工作流

#mermaid-svg-DvEnqDlK73mnL9Ll{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-DvEnqDlK73mnL9Ll .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-DvEnqDlK73mnL9Ll .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-DvEnqDlK73mnL9Ll .error-icon{fill:#552222;}#mermaid-svg-DvEnqDlK73mnL9Ll .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-DvEnqDlK73mnL9Ll .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-DvEnqDlK73mnL9Ll .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-DvEnqDlK73mnL9Ll .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-DvEnqDlK73mnL9Ll .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-DvEnqDlK73mnL9Ll .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-DvEnqDlK73mnL9Ll .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-DvEnqDlK73mnL9Ll .marker{fill:#333333;stroke:#333333;}#mermaid-svg-DvEnqDlK73mnL9Ll .marker.cross{stroke:#333333;}#mermaid-svg-DvEnqDlK73mnL9Ll svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-DvEnqDlK73mnL9Ll p{margin:0;}#mermaid-svg-DvEnqDlK73mnL9Ll .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-DvEnqDlK73mnL9Ll .cluster-label text{fill:#333;}#mermaid-svg-DvEnqDlK73mnL9Ll .cluster-label span{color:#333;}#mermaid-svg-DvEnqDlK73mnL9Ll .cluster-label span p{background-color:transparent;}#mermaid-svg-DvEnqDlK73mnL9Ll .label text,#mermaid-svg-DvEnqDlK73mnL9Ll span{fill:#333;color:#333;}#mermaid-svg-DvEnqDlK73mnL9Ll .node rect,#mermaid-svg-DvEnqDlK73mnL9Ll .node circle,#mermaid-svg-DvEnqDlK73mnL9Ll .node ellipse,#mermaid-svg-DvEnqDlK73mnL9Ll .node polygon,#mermaid-svg-DvEnqDlK73mnL9Ll .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-DvEnqDlK73mnL9Ll .rough-node .label text,#mermaid-svg-DvEnqDlK73mnL9Ll .node .label text,#mermaid-svg-DvEnqDlK73mnL9Ll .image-shape .label,#mermaid-svg-DvEnqDlK73mnL9Ll .icon-shape .label{text-anchor:middle;}#mermaid-svg-DvEnqDlK73mnL9Ll .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-DvEnqDlK73mnL9Ll .rough-node .label,#mermaid-svg-DvEnqDlK73mnL9Ll .node .label,#mermaid-svg-DvEnqDlK73mnL9Ll .image-shape .label,#mermaid-svg-DvEnqDlK73mnL9Ll .icon-shape .label{text-align:center;}#mermaid-svg-DvEnqDlK73mnL9Ll .node.clickable{cursor:pointer;}#mermaid-svg-DvEnqDlK73mnL9Ll .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-DvEnqDlK73mnL9Ll .arrowheadPath{fill:#333333;}#mermaid-svg-DvEnqDlK73mnL9Ll .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-DvEnqDlK73mnL9Ll .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-DvEnqDlK73mnL9Ll .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-DvEnqDlK73mnL9Ll .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-DvEnqDlK73mnL9Ll .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-DvEnqDlK73mnL9Ll .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-DvEnqDlK73mnL9Ll .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-DvEnqDlK73mnL9Ll .cluster text{fill:#333;}#mermaid-svg-DvEnqDlK73mnL9Ll .cluster span{color:#333;}#mermaid-svg-DvEnqDlK73mnL9Ll div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-DvEnqDlK73mnL9Ll .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-DvEnqDlK73mnL9Ll rect.text{fill:none;stroke-width:0;}#mermaid-svg-DvEnqDlK73mnL9Ll .icon-shape,#mermaid-svg-DvEnqDlK73mnL9Ll .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-DvEnqDlK73mnL9Ll .icon-shape p,#mermaid-svg-DvEnqDlK73mnL9Ll .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-DvEnqDlK73mnL9Ll .icon-shape .label rect,#mermaid-svg-DvEnqDlK73mnL9Ll .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-DvEnqDlK73mnL9Ll .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-DvEnqDlK73mnL9Ll .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-DvEnqDlK73mnL9Ll :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 修订假设
修订数据/特征
修订模型
淘汰
通过
拒绝
批准
拒绝
批准
接收研究目标
策略与权限预检
Planner 生成 Research Plan
数据目录检索与缺口分析
下载 / 更新 / 质检 / 快照
生成 Alpha 假设与候选表达式
反泄漏与表达式静态检查
批量计算因子
单因子检验与去冗余
特征集与标签固化
Walk-forward 训练与调参
组合构建与约束求解
事件驱动回测
稳健性 / 容量 / 压力测试
Reflection Gate
归档失败知识
生成报告与模型卡
创建 Git 分支与提交
创建 PR
人工合并审批
CI 构建研究/模拟制品
生产部署审批
保留候选版本
部署 + 健康检查 + 可回滚

4.2 状态机

text 复制代码
DRAFT -> PLANNED -> DATA_READY -> DISCOVERING -> TRAINING -> BACKTESTING
      -> REFLECTING -> REPORTING -> AWAITING_MERGE_APPROVAL
      -> MERGED -> AWAITING_DEPLOY_APPROVAL -> DEPLOYING -> DEPLOYED

任意可执行状态 -> RETRY_WAIT -> 原状态
任意可执行状态 -> PAUSED_BY_POLICY
任意状态 -> CANCELLED
失败且不可恢复 -> FAILED

每个状态变更必须写入 workflow_event,包含 run_id、前后状态、原因、触发者、时间、trace ID 和关联产物。

4.3 Agent 职责

Agent 输入 核心职责 输出
Planner 研究目标、预算、历史记忆 分解 DAG、定义验收门槛、分配预算 ResearchPlan
Data 计划、数据目录 选择数据源、增量下载、校验、快照 DatasetSnapshot
Alpha Discovery 数据字典、失败知识 生成经济假设、表达式搜索、初筛 AlphaCandidate\[\]
Training 特征集、标签、切分 Walk-forward 训练、调参、校准 ModelVersion
Backtest 信号、组合约束、市场规则 撮合、成本、归因、压力测试 BacktestRun
Reflection 全部证据与门槛 诊断失败、决定修订/淘汰/晋级 ReflectionDecision
Report 实验谱系与指标 生成报告、模型卡、审批摘要 ReportBundle
Git 批准的变更包 分支、commit、push、PR;禁止 merge PullRequest
Deploy 已合并版本、审批令牌 构建、发布、健康检查、回滚 Deployment

4.4 并发和预算

  • 并行只用于彼此独立的候选因子、随机种子、模型配置和压力场景。
  • 每个研究运行必须定义 token、CPU、GPU、内存、存储、API 调用和墙钟时间上限。
  • 触达软限额时 Planner 缩小搜索空间;触达硬限额时状态转为 PAUSED_BY_POLICY
  • 全局并发、数据源 QPS、训练并发和回测并发由租户及环境配额控制。

5. Memory

5.1 Memory 分层

#mermaid-svg-VUI0exik642eca1A{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-VUI0exik642eca1A .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-VUI0exik642eca1A .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-VUI0exik642eca1A .error-icon{fill:#552222;}#mermaid-svg-VUI0exik642eca1A .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-VUI0exik642eca1A .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-VUI0exik642eca1A .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-VUI0exik642eca1A .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-VUI0exik642eca1A .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-VUI0exik642eca1A .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-VUI0exik642eca1A .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-VUI0exik642eca1A .marker{fill:#333333;stroke:#333333;}#mermaid-svg-VUI0exik642eca1A .marker.cross{stroke:#333333;}#mermaid-svg-VUI0exik642eca1A svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-VUI0exik642eca1A p{margin:0;}#mermaid-svg-VUI0exik642eca1A .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-VUI0exik642eca1A .cluster-label text{fill:#333;}#mermaid-svg-VUI0exik642eca1A .cluster-label span{color:#333;}#mermaid-svg-VUI0exik642eca1A .cluster-label span p{background-color:transparent;}#mermaid-svg-VUI0exik642eca1A .label text,#mermaid-svg-VUI0exik642eca1A span{fill:#333;color:#333;}#mermaid-svg-VUI0exik642eca1A .node rect,#mermaid-svg-VUI0exik642eca1A .node circle,#mermaid-svg-VUI0exik642eca1A .node ellipse,#mermaid-svg-VUI0exik642eca1A .node polygon,#mermaid-svg-VUI0exik642eca1A .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-VUI0exik642eca1A .rough-node .label text,#mermaid-svg-VUI0exik642eca1A .node .label text,#mermaid-svg-VUI0exik642eca1A .image-shape .label,#mermaid-svg-VUI0exik642eca1A .icon-shape .label{text-anchor:middle;}#mermaid-svg-VUI0exik642eca1A .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-VUI0exik642eca1A .rough-node .label,#mermaid-svg-VUI0exik642eca1A .node .label,#mermaid-svg-VUI0exik642eca1A .image-shape .label,#mermaid-svg-VUI0exik642eca1A .icon-shape .label{text-align:center;}#mermaid-svg-VUI0exik642eca1A .node.clickable{cursor:pointer;}#mermaid-svg-VUI0exik642eca1A .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-VUI0exik642eca1A .arrowheadPath{fill:#333333;}#mermaid-svg-VUI0exik642eca1A .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-VUI0exik642eca1A .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-VUI0exik642eca1A .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-VUI0exik642eca1A .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-VUI0exik642eca1A .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-VUI0exik642eca1A .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-VUI0exik642eca1A .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-VUI0exik642eca1A .cluster text{fill:#333;}#mermaid-svg-VUI0exik642eca1A .cluster span{color:#333;}#mermaid-svg-VUI0exik642eca1A div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-VUI0exik642eca1A .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-VUI0exik642eca1A rect.text{fill:none;stroke-width:0;}#mermaid-svg-VUI0exik642eca1A .icon-shape,#mermaid-svg-VUI0exik642eca1A .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-VUI0exik642eca1A .icon-shape p,#mermaid-svg-VUI0exik642eca1A .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-VUI0exik642eca1A .icon-shape .label rect,#mermaid-svg-VUI0exik642eca1A .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-VUI0exik642eca1A .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-VUI0exik642eca1A .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-VUI0exik642eca1A :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} Working Memory

当前运行上下文
Episodic Memory

历史实验与决策
Semantic Memory

领域知识与数据字典
Procedural Memory

流程/工具/策略版本
Artifact Memory

数据/特征/模型/报告
Hybrid Retrieval
Planner / Agents

类型 内容 存储 生命周期
Working 当前计划、最近工具结果、预算、待办 Redis/PostgreSQL 单次运行,结束后摘要
Episodic 实验、决策、失败原因、反思 PostgreSQL + 向量索引 长期
Semantic A 股规则、因子定义、数据字段、研究规范 文档库 + 向量索引 版本化长期
Procedural Prompt、工具 Schema、工作流、策略规则 Git / Registry 版本化长期
Artifact Parquet、模型、图表、报告、日志 对象存储 按保留策略

5.2 Memory Record

json 复制代码
{
  "memory_id": "mem_01J...",
  "tenant_id": "team_quant",
  "type": "episodic",
  "scope": "alpha_discovery",
  "summary": "20 日反转在小盘股有效,但成本后衰减明显",
  "evidence_refs": ["exp_01J...", "bt_01J..."],
  "tags": ["reversal", "CSI800", "turnover"],
  "valid_from": "2026-07-10T00:00:00Z",
  "knowledge_cutoff": "2026-06-30T07:00:00Z",
  "confidence": 0.78,
  "created_by": "reflection-agent@1.0",
  "policy": {"ttl_days": 730, "contains_secret": false}
}

5.3 检索规则

  • 使用结构化过滤 + BM25 + 向量相似度的混合检索。
  • 必须按租户、项目、市场、频率和 knowledge_cutoff 过滤。
  • 优先检索失败实验和近似候选,防止重复探索。
  • Memory 只提供建议;关键事实必须回到证据产物验证。
  • 报告、网页或工具输出均视为不可信内容,不得覆盖系统策略或工具权限。

5.4 写入规则

  • 工具原始输出不直接进入长期记忆,只保存引用和经过验证的摘要。
  • Reflection Agent 只能提出记忆写入建议,由 Memory Policy 校验后落库。
  • 冲突事实并存并标记版本、证据和置信度,不做静默覆盖。
  • 支持按运行、用户或数据源执行删除和保留策略。

6. Planning

6.1 分层计划

  1. Mission Plan: 研究目标、宇宙、预测周期、基准、风险约束和预算。
  2. Research Plan: 数据、假设族、标签、切分、检验、模型和晋级门槛。
  3. Execution DAG: 可重试的工具任务、依赖、输入输出和幂等键。
  4. Next Action: Agent 每轮只能选择一个有明确 Schema 的动作。

6.2 ResearchPlan Schema

json 复制代码
{
  "plan_id": "plan_01J...",
  "objective": "发现 CSI800 中预测未来 5 日超额收益的稳健信号",
  "as_of": "2026-06-30T15:00:00+08:00",
  "universe": "CSI800_POINT_IN_TIME",
  "hypothesis_families": ["reversal", "quality", "liquidity", "interaction"],
  "label": "next_5d_vwap_to_vwap_excess_return",
  "validation": {
    "scheme": "purged_walk_forward",
    "train_years": 5,
    "validation_months": 12,
    "test_months": 12,
    "embargo_days": 5
  },
  "gates": {
    "min_oos_rank_ic": 0.02,
    "min_icir": 0.5,
    "min_net_sharpe": 1.0,
    "max_drawdown": 0.20,
    "max_one_way_turnover": 0.20
  },
  "budget": {
    "max_candidates": 500,
    "max_training_jobs": 80,
    "max_wall_clock_hours": 8,
    "max_cost_cny": 500
  }
}

6.3 Planner 约束

  • 计划必须在任何数据下载或训练前冻结 as_of 和数据可得时间规则。
  • 每个任务声明前置条件、预期产物、验证器、超时、重试和补偿动作。
  • 修改标签、宇宙、数据切分或主要回测假设会生成新的 plan_revision
  • Planner 无权降低组织级硬门槛;只能提高门槛或请求人工例外。
  • 计划变化必须说明新证据、影响范围和已消耗预算。

7. Alpha 自动发现

7.1 搜索空间

  • 原子字段: OHLCV、成交额、换手率、市值、估值、财务质量、分析师一致预期(若有可靠 PIT 数据)。
  • 时间算子: delay、delta、rolling mean/std/min/max/rank/corr、decay。
  • 横截面算子: rank、zscore、winsorize、neutralize、group rank。
  • 组合算子: 加减乘除、条件、截断;限制表达式深度和复杂度。
  • 模型: 线性基线、LightGBM、XGBoost;深度模型不进入 V1。

7.2 候选生成

  • 从经济假设模板、历史失败知识和数据字典生成候选。
  • 符号搜索使用语法树而非任意 Python 代码。
  • 候选先经过类型、单位、可得时间、复杂度和重复性静态检查。
  • 以多目标优化选择候选:样本外 IC、稳定性、换手、复杂度、与已有因子相关性。

7.3 防止数据窥探

  • 研究运行开始前登记候选生成空间和最大试验次数。
  • 记录全部候选,包括失败候选,估计多重检验压力。
  • 使用 Deflated Sharpe Ratio、Probability of Backtest Overfitting 或等价方法。
  • 最终锁箱测试集只能在候选冻结后运行;同一研究任务默认只允许解锁一次。
  • 任何读取测试期结果后发生的修改都创建新研究世代,不能沿用原测试结论。

8. 数据系统

8.1 数据源

V1 推荐优先使用 Tushare Pro 或合规商业数据源,并为交易所公开数据提供校验适配器。必须确认数据许可允许自动下载、缓存和内部衍生使用。

必需数据集:

  • 交易日历、股票主数据、上市/退市日期、名称与状态变更。
  • 日线未复权行情、复权因子、停牌、涨跌停价格。
  • 指数成分及权重的历史时点版本,禁止使用当前成分回填历史。
  • 财务数据及公告日期,采用 point-in-time 可得性。
  • ST/*ST、风险警示、行业分类的历史变化。

8.2 数据分层

text 复制代码
RAW       原始响应,不修改,可校验 checksum
CURATED   类型统一、去重、主键和质量规则通过
PIT       按实际可得时间对齐的时点数据
FEATURE   版本化特征和标签
SERVING   研究/模拟环境读取的发布快照

8.3 快照与谱系

每个 dataset_snapshot_id 固定以下内容:数据源版本、请求参数、下载时间、覆盖区间、对象 checksum、Schema、质量报告、可得时间规则和上游快照。任何训练、回测或报告只引用快照 ID,不引用可变的"最新表"。

8.4 数据质量门槛

  • 主键唯一性、Schema、空值率、覆盖率、数值范围和跨源一致性。
  • 交易日缺口、复权连续性、价格/成交量异常跳变。
  • 公告日在报告期之前、未来成分泄漏、退市样本缺失等专门检查。
  • 质量硬失败阻断流水线;软异常进入报告并降低置信度。

9. 模型训练

9.1 标签与切分

  • 默认标签:未来 5 个交易日 VWAP-to-VWAP 相对基准或行业的收益。
  • 特征必须滞后到决策时刻真实可得;财务字段以公告日对齐。
  • 使用 Purged Walk-forward,purge/embargo 至少覆盖标签持有期。
  • 预处理器只在训练窗口拟合,并与模型一同版本化。

9.2 训练流程

  1. 训练线性或简单排序基线。
  2. LightGBM/XGBoost 使用受限搜索空间进行 Optuna 调参。
  3. 优化目标综合 Rank IC、ICIR、稳定性和预估换手,而非训练损失单指标。
  4. 多随机种子训练并报告均值、方差和最差结果。
  5. 用 SHAP、置换重要性和单调性检查解释模型。
  6. 登记模型、依赖、特征、数据、代码 SHA、参数和指标。

9.3 模型准入

  • 必须优于简单基线,并在多数 walk-forward 窗口保持方向一致。
  • 不允许任何单特征支配模型且缺乏经济解释。
  • 训练/验证性能差距超过策略阈值时标记过拟合并阻断晋级。
  • 模型文件必须来自隔离训练任务并通过恶意反序列化安全策略;优先使用安全格式。

10. 回测规格

10.1 时间语义

默认信号在 T 日收盘数据完整后生成,订单最早在 T+1 执行。报告必须明确决策时刻、下单时刻、成交价格假设和持有周期。

10.2 A 股市场规则

  • 股票交易遵循 T+1 卖出约束。
  • 停牌期间不能成交。
  • 涨停时买单不得假设成交,跌停时卖单不得假设成交;可配置更保守的成交概率模型。
  • 使用历史 ST 状态、上市天数、退市和指数成分。
  • 佣金、印花税、过户费按交易方向和历史生效日期配置。
  • 滑点使用成交额参与率、ADV 和冲击函数建模。
  • 禁止用后复权价格直接模拟现金交易;收益计算和公司行动需保持一致。

10.3 组合构建

  • 模型分数经行业/市值中性化与异常值处理后进入优化器。
  • 约束包括单股权重、行业主动权重、风格暴露、换手、流动性和持仓数。
  • 优化失败时使用确定性降级策略,并在报告中标记。
  • 目标组合到实际成交之间保留未成交订单和现金状态。

10.4 指标

  • 收益:年化收益、超额收益、胜率、月度/年度分布。
  • 风险:波动率、Sharpe、Sortino、最大回撤、Calmar、VaR/ES。
  • 信号:Pearson/Spearman IC、ICIR、分层收益、单调性、衰减。
  • 交易:换手、成本、滑点、成交率、容量、平均持有期。
  • 暴露:行业、市值、Beta、风格和集中度。
  • 稳健性:分时期、牛熊市、行业、规模、参数扰动、成本倍增。

10.5 建议晋级门槛

这些是组织可配置的初始值,不是收益承诺:

维度 建议门槛
样本外 Rank IC >= 0.02
样本外 ICIR >= 0.5
成本后 Sharpe >= 1.0
最大回撤 <= 20%
年化单边换手 与策略约束一致且成本后仍通过
窗口稳定性 至少 70% OOS 窗口 IC 为正
成本压力 2 倍基准成本下不出现结论性崩溃
容量 目标资金规模下参与率不超限
泄漏测试 100% 通过

11. Reflection

11.1 Reflection Loop

#mermaid-svg-drZGuLtKnVEKjzMA{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-drZGuLtKnVEKjzMA .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-drZGuLtKnVEKjzMA .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-drZGuLtKnVEKjzMA .error-icon{fill:#552222;}#mermaid-svg-drZGuLtKnVEKjzMA .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-drZGuLtKnVEKjzMA .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-drZGuLtKnVEKjzMA .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-drZGuLtKnVEKjzMA .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-drZGuLtKnVEKjzMA .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-drZGuLtKnVEKjzMA .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-drZGuLtKnVEKjzMA .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-drZGuLtKnVEKjzMA .marker{fill:#333333;stroke:#333333;}#mermaid-svg-drZGuLtKnVEKjzMA .marker.cross{stroke:#333333;}#mermaid-svg-drZGuLtKnVEKjzMA svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-drZGuLtKnVEKjzMA p{margin:0;}#mermaid-svg-drZGuLtKnVEKjzMA .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-drZGuLtKnVEKjzMA .cluster-label text{fill:#333;}#mermaid-svg-drZGuLtKnVEKjzMA .cluster-label span{color:#333;}#mermaid-svg-drZGuLtKnVEKjzMA .cluster-label span p{background-color:transparent;}#mermaid-svg-drZGuLtKnVEKjzMA .label text,#mermaid-svg-drZGuLtKnVEKjzMA span{fill:#333;color:#333;}#mermaid-svg-drZGuLtKnVEKjzMA .node rect,#mermaid-svg-drZGuLtKnVEKjzMA .node circle,#mermaid-svg-drZGuLtKnVEKjzMA .node ellipse,#mermaid-svg-drZGuLtKnVEKjzMA .node polygon,#mermaid-svg-drZGuLtKnVEKjzMA .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-drZGuLtKnVEKjzMA .rough-node .label text,#mermaid-svg-drZGuLtKnVEKjzMA .node .label text,#mermaid-svg-drZGuLtKnVEKjzMA .image-shape .label,#mermaid-svg-drZGuLtKnVEKjzMA .icon-shape .label{text-anchor:middle;}#mermaid-svg-drZGuLtKnVEKjzMA .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-drZGuLtKnVEKjzMA .rough-node .label,#mermaid-svg-drZGuLtKnVEKjzMA .node .label,#mermaid-svg-drZGuLtKnVEKjzMA .image-shape .label,#mermaid-svg-drZGuLtKnVEKjzMA .icon-shape .label{text-align:center;}#mermaid-svg-drZGuLtKnVEKjzMA .node.clickable{cursor:pointer;}#mermaid-svg-drZGuLtKnVEKjzMA .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-drZGuLtKnVEKjzMA .arrowheadPath{fill:#333333;}#mermaid-svg-drZGuLtKnVEKjzMA .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-drZGuLtKnVEKjzMA .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-drZGuLtKnVEKjzMA .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-drZGuLtKnVEKjzMA .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-drZGuLtKnVEKjzMA .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-drZGuLtKnVEKjzMA .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-drZGuLtKnVEKjzMA .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-drZGuLtKnVEKjzMA .cluster text{fill:#333;}#mermaid-svg-drZGuLtKnVEKjzMA .cluster span{color:#333;}#mermaid-svg-drZGuLtKnVEKjzMA div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-drZGuLtKnVEKjzMA .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-drZGuLtKnVEKjzMA rect.text{fill:none;stroke-width:0;}#mermaid-svg-drZGuLtKnVEKjzMA .icon-shape,#mermaid-svg-drZGuLtKnVEKjzMA .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-drZGuLtKnVEKjzMA .icon-shape p,#mermaid-svg-drZGuLtKnVEKjzMA .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-drZGuLtKnVEKjzMA .icon-shape .label rect,#mermaid-svg-drZGuLtKnVEKjzMA .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-drZGuLtKnVEKjzMA .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-drZGuLtKnVEKjzMA .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-drZGuLtKnVEKjzMA :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} Revise Data
Revise Alpha
Revise Model
Reject
Promote
Evidence Bundle
Critic: 检查证据完整性
Diagnoser: 定位失败类型
Judge
数据修订
假设修订
训练修订
归档失败知识
生成审批包

11.2 反思输入

  • 计划与所有 revision。
  • 数据质量和可得时间报告。
  • 候选全集、试验次数和多重检验统计。
  • 训练、验证、测试、回测、归因和压力测试结果。
  • 工具错误、重试、资源消耗和策略违规。
  • 与历史相似实验及失败记忆的对比。

11.3 决策分类

决策 条件 后续动作
RETRY 临时性工具/资源故障 使用同一幂等键重试
REVISE_DATA 缺失、漂移、PIT 或质量问题 回到数据阶段,增加 plan revision
REVISE_ALPHA 逻辑弱、冗余、衰减、成本过高 修改候选族,不得读取锁箱后继续微调
REVISE_MODEL 过拟合、不稳定、解释异常 缩小复杂度或改变训练方案
REJECT 硬门槛失败或预算耗尽 归档证据和可复用失败结论
PROMOTE 全部门槛通过且证据完整 生成报告和审批包

11.4 防止无限循环

  • 每个阶段设最大 revision 次数和总预算。
  • 同类失败连续两次后必须改变假设或终止,不能只换随机种子。
  • Reflection 不能自行修改硬门槛或扩大预算。
  • 所有晋级结论必须引用机器可验证的 Gate Result。

12. Tool Calling

12.1 调用链

Audit Store Worker MCP Server Policy Engine Tool Gateway Agent Audit Store Worker MCP Server Policy Engine Tool Gateway Agent #mermaid-svg-Yx2gQ9SWa1iGY2CI{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-Yx2gQ9SWa1iGY2CI .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-Yx2gQ9SWa1iGY2CI .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-Yx2gQ9SWa1iGY2CI .error-icon{fill:#552222;}#mermaid-svg-Yx2gQ9SWa1iGY2CI .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-Yx2gQ9SWa1iGY2CI .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-Yx2gQ9SWa1iGY2CI .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-Yx2gQ9SWa1iGY2CI .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-Yx2gQ9SWa1iGY2CI .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-Yx2gQ9SWa1iGY2CI .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-Yx2gQ9SWa1iGY2CI .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-Yx2gQ9SWa1iGY2CI .marker{fill:#333333;stroke:#333333;}#mermaid-svg-Yx2gQ9SWa1iGY2CI .marker.cross{stroke:#333333;}#mermaid-svg-Yx2gQ9SWa1iGY2CI svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-Yx2gQ9SWa1iGY2CI p{margin:0;}#mermaid-svg-Yx2gQ9SWa1iGY2CI .actor{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-Yx2gQ9SWa1iGY2CI text.actor>tspan{fill:black;stroke:none;}#mermaid-svg-Yx2gQ9SWa1iGY2CI .actor-line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);}#mermaid-svg-Yx2gQ9SWa1iGY2CI .innerArc{stroke-width:1.5;stroke-dasharray:none;}#mermaid-svg-Yx2gQ9SWa1iGY2CI .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:#333;}#mermaid-svg-Yx2gQ9SWa1iGY2CI .messageLine1{stroke-width:1.5;stroke-dasharray:2,2;stroke:#333;}#mermaid-svg-Yx2gQ9SWa1iGY2CI #arrowhead path{fill:#333;stroke:#333;}#mermaid-svg-Yx2gQ9SWa1iGY2CI .sequenceNumber{fill:white;}#mermaid-svg-Yx2gQ9SWa1iGY2CI #sequencenumber{fill:#333;}#mermaid-svg-Yx2gQ9SWa1iGY2CI #crosshead path{fill:#333;stroke:#333;}#mermaid-svg-Yx2gQ9SWa1iGY2CI .messageText{fill:#333;stroke:none;}#mermaid-svg-Yx2gQ9SWa1iGY2CI .labelBox{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-Yx2gQ9SWa1iGY2CI .labelText,#mermaid-svg-Yx2gQ9SWa1iGY2CI .labelText>tspan{fill:black;stroke:none;}#mermaid-svg-Yx2gQ9SWa1iGY2CI .loopText,#mermaid-svg-Yx2gQ9SWa1iGY2CI .loopText>tspan{fill:black;stroke:none;}#mermaid-svg-Yx2gQ9SWa1iGY2CI .loopLine{stroke-width:2px;stroke-dasharray:2,2;stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);}#mermaid-svg-Yx2gQ9SWa1iGY2CI .note{stroke:#aaaa33;fill:#fff5ad;}#mermaid-svg-Yx2gQ9SWa1iGY2CI .noteText,#mermaid-svg-Yx2gQ9SWa1iGY2CI .noteText>tspan{fill:black;stroke:none;}#mermaid-svg-Yx2gQ9SWa1iGY2CI .activation0{fill:#f4f4f4;stroke:#666;}#mermaid-svg-Yx2gQ9SWa1iGY2CI .activation1{fill:#f4f4f4;stroke:#666;}#mermaid-svg-Yx2gQ9SWa1iGY2CI .activation2{fill:#f4f4f4;stroke:#666;}#mermaid-svg-Yx2gQ9SWa1iGY2CI .actorPopupMenu{position:absolute;}#mermaid-svg-Yx2gQ9SWa1iGY2CI .actorPopupMenuPanel{position:absolute;fill:#ECECFF;box-shadow:0px 8px 16px 0px rgba(0,0,0,0.2);filter:drop-shadow(3px 5px 2px rgb(0 0 0 / 0.4));}#mermaid-svg-Yx2gQ9SWa1iGY2CI .actor-man line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-Yx2gQ9SWa1iGY2CI .actor-man circle,#mermaid-svg-Yx2gQ9SWa1iGY2CI line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;stroke-width:2px;}#mermaid-svg-Yx2gQ9SWa1iGY2CI :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} tool_call(name, args, context) Schema 校验 + 幂等键 authorize(subject, action, resource) allow / deny / approval_required MCP tools/call 隔离任务 result + artifact refs structured result append audit event verified result / typed error

12.2 工具规范

每个工具必须声明:

  • 名称、版本、描述和 JSON Schema。
  • readcomputewriteexternal_side_effect 风险级别。
  • 所需 scope、资源上限、超时和最大返回大小。
  • 是否幂等、幂等键组成、重试策略和补偿动作。
  • 输入/输出中的敏感字段和日志脱敏策略。
  • 可验证器,例如 checksum、行数、指标范围或签名。

12.3 通用调用信封

json 复制代码
{
  "request_id": "req_01J...",
  "run_id": "run_01J...",
  "plan_id": "plan_01J...",
  "agent": "data-agent@1.0",
  "tool": "market_data.fetch_daily@1.0",
  "arguments": {},
  "idempotency_key": "sha256(...) ",
  "deadline": "2026-07-10T10:30:00Z",
  "scopes": ["data:read", "artifact:write"],
  "trace_id": "00-..."
}

12.4 错误模型

json 复制代码
{
  "ok": false,
  "error": {
    "code": "DATA_RATE_LIMITED",
    "category": "transient",
    "message": "Provider quota exceeded",
    "retry_after_seconds": 60,
    "details_ref": "artifact://logs/..."
  }
}

错误分类为 validationpolicytransientpermanentdata_qualityinternal。仅 transient 可自动指数退避重试;具有外部副作用的工具在重试前必须查询幂等状态。

12.5 沙箱

  • 代码执行使用无生产凭证的临时容器,默认禁网、只读基础镜像和非 root 用户。
  • 数据访问通过受控工具或短期签名 URL,不挂载完整密钥。
  • 限制 CPU、内存、磁盘、进程数、执行时间和输出大小。
  • 依赖只能来自锁定仓库和 allowlist;生成 SBOM 并扫描漏洞。

13. MCP 接口

13.1 MCP 拓扑

Agent 只连接内部 MCP Gateway。Gateway 根据工具命名空间路由到独立 Server,并统一执行认证、授权、限流、Schema 校验、审计和结果截断。

text 复制代码
mcp-gateway
├── market-data-mcp
├── feature-store-mcp
├── experiment-mcp
├── backtest-mcp
├── artifact-mcp
├── git-mcp
├── deploy-mcp
└── observability-mcp

13.2 Resources

URI 模板 含义
dataset://catalog/{dataset} 数据集 Schema、覆盖、许可和新鲜度
dataset://snapshot/{snapshot_id} 不可变数据快照元数据
feature://definition/{feature_id} 因子表达式、依赖和版本
experiment://run/{run_id} 实验参数、指标和谱系
model://version/{model_id} 模型卡、签名和阶段
backtest://run/{backtest_id} 回测配置、指标和交易产物
artifact://sha256/{digest} 内容寻址产物元数据
policy://gate/{gate_name} 当前门槛和策略版本
git://repo/{repo}/pr/{number} PR 状态和检查结果
deploy://environment/{env} 环境版本与健康状态

13.3 Prompts

Prompt 用途
plan_quant_research 将研究目标转换为 ResearchPlan 草案
generate_alpha_hypotheses 基于字段、约束和失败知识生成候选假设
critique_experiment 对证据包执行结构化批评,不计算指标
summarize_approval_package 为 Reviewer 生成带证据引用的摘要

Prompt 只是版本化模板,不授予额外工具权限。

13.4 核心 Tools

market-data-mcp
text 复制代码
market_data.catalog(query) -> DatasetDescriptor[]
market_data.fetch_daily(symbols, start, end, fields, as_of) -> JobRef
market_data.fetch_fundamentals(table, periods, as_of) -> JobRef
market_data.validate(snapshot_id, ruleset) -> DataQualityReport
market_data.create_snapshot(job_refs, schema_version) -> DatasetSnapshot

fetch_daily 输入 Schema 示例:

json 复制代码
{
  "type": "object",
  "required": ["symbols", "start", "end", "fields", "as_of"],
  "properties": {
    "symbols": {"type": "array", "items": {"type": "string"}, "maxItems": 5000},
    "start": {"type": "string", "format": "date"},
    "end": {"type": "string", "format": "date"},
    "fields": {"type": "array", "items": {"enum": ["open", "high", "low", "close", "volume", "amount", "adj_factor"]}},
    "as_of": {"type": "string", "format": "date-time"},
    "adjustment": {"enum": ["none", "forward", "backward"], "default": "none"}
  },
  "additionalProperties": false
}
feature-store-mcp
text 复制代码
feature.validate_expression(ast, availability_policy) -> ValidationReport
feature.compute(snapshot_id, expressions, date_range) -> FeatureJob
feature.profile(feature_set_id) -> FeatureProfile
feature.register(definitions, evidence_refs) -> FeatureSetVersion
experiment-mcp
text 复制代码
experiment.create(plan_id, lineage) -> ExperimentRun
experiment.train(feature_set_id, label_id, split, model_spec) -> TrainingJob
experiment.get_metrics(job_id) -> MetricBundle
model.register(training_job_id, stage="candidate") -> ModelVersion
model.compare(model_ids, gates) -> ComparisonResult
backtest-mcp
text 复制代码
backtest.validate_config(config) -> ValidationReport
backtest.run(model_id, snapshot_id, portfolio_spec, execution_spec) -> BacktestJob
backtest.stress(backtest_id, scenarios) -> StressTestBundle
backtest.get_gate_results(backtest_id, policy_version) -> GateResult[]

backtest.run 必须要求显式传入:信号可得时间、成交价格、费用版本、涨跌停规则、停牌规则、T+1、基准、组合约束和随机种子(如适用)。

artifact-mcp
text 复制代码
artifact.put(content_type, checksum, payload_or_upload_ref) -> ArtifactRef
artifact.get_metadata(uri) -> ArtifactMetadata
artifact.sign_manifest(artifact_refs, lineage) -> SignedManifest
report.render(template_version, evidence_bundle) -> ReportBundle
git-mcp
text 复制代码
git.create_branch(repo, base_sha, branch_name) -> BranchRef
git.apply_patch(repo, branch, patch, expected_tree_sha) -> ChangeSet
git.run_checks(repo, branch, check_suite) -> CheckRun
git.commit(repo, branch, message, signed_manifest) -> CommitRef
git.push(repo, branch) -> PushResult
git.create_pull_request(repo, branch, base, title, body) -> PullRequest
git.get_pull_request(repo, number) -> PullRequest

V1 不向 Agent 暴露 merge_pull_requestforce_push、删除分支、修改保护规则等工具。

deploy-mcp
text 复制代码
deploy.build(commit_sha, target, sbom=true) -> BuildArtifact
deploy.plan(artifact_id, environment) -> DeploymentPlan
deploy.request_approval(plan_id) -> ApprovalRequest
deploy.execute(plan_id, approval_token) -> Deployment
deploy.health(deployment_id) -> HealthReport
deploy.rollback(deployment_id, approval_token) -> Deployment

deploy.execute 必须验证短期、单次、绑定 plan_id + artifact_digest + environment 的审批令牌。Agent 不能签发审批令牌。

observability-mcp
text 复制代码
audit.append(event) -> EventRef
trace.get(trace_id) -> Trace
workflow.get_status(run_id) -> WorkflowStatus
workflow.cancel(run_id, reason) -> WorkflowStatus
cost.get(run_id) -> CostReport

13.5 MCP 安全要求

  • 使用 OAuth 2.1 或工作负载身份,短期 token 和细粒度 scope。
  • Server 端执行授权,不能信任 Agent 声称的权限。
  • 对外部内容做 prompt injection 隔离;资源内容不能成为系统指令。
  • 工具输入输出全量审计,但密钥、token、个人信息必须脱敏。
  • MCP Server 版本、工具 Schema 和策略版本进入每次运行清单。

14. Git 自动化

14.1 分支与提交

  • 分支名:agent/{run_id}/{slug}
  • 仅允许修改策略白名单目录,例如 research/configs/reports/ 和生成的测试。
  • 禁止修改 CI 权限、分支保护、密钥、审批规则和生产基础设施所有权文件。
  • commit 必须签名,并包含 run_id、实验 ID、数据快照 ID 和报告链接。
  • 所有自动生成文件经过格式化、静态检查、单元测试、泄漏测试和依赖扫描。

14.2 PR 模板

markdown 复制代码
## Research objective
## Economic hypothesis
## Data and point-in-time assumptions
## Experiment lineage
## Out-of-sample results
## Costs, capacity and stress tests
## Known limitations
## Reproduction command
## Approval checklist

14.3 审批门

  • Reviewer 必须是 Agent 之外的人类身份。
  • CODEOWNERS 至少要求 Quant Reviewer;涉及部署配置时额外要求 Risk/Platform Reviewer。
  • PR 检查未通过、提交 SHA 变化或报告清单不匹配会使已有批准失效。

15. 部署

15.1 环境

text 复制代码
research -> simulation -> paper -> production

V1 可自动部署到隔离 research/simulation 环境;paper/production 必须人工批准。实盘交易接口不在 V1 工具集合中。

15.2 发布流程

  1. 基于已合并 commit 构建不可变镜像。
  2. 生成 SBOM、漏洞扫描、镜像签名和 provenance。
  3. 验证模型、特征、配置与报告清单的一致性。
  4. 在 simulation 执行 smoke test 和历史重放。
  5. 创建部署计划和差异摘要。
  6. 人工审批生产计划。
  7. 灰度发布、健康检查和数据新鲜度检查。
  8. 异常时自动停止并回滚到已批准版本。

15.3 运行时监控

  • 数据新鲜度、Schema 漂移、缺失率和异常值。
  • 特征分布 PSI、模型分数漂移、预测覆盖率。
  • 模拟收益、换手、成本、暴露和约束违规。
  • 服务延迟、错误率、资源和费用。
  • 漂移触发重新研究请求,但不能自动越过审批上线新模型。

16. 安全、权限与治理

16.1 权限矩阵

动作 Agent 自动 人工批准后 禁止
读取已授权研究数据
下载并缓存合规数据
运行沙箱代码/训练/回测
写研究产物和候选模型
创建分支、commit、push、PR
合并受保护分支
部署 research/simulation 是(策略可配置)
部署 paper/production
发出实盘订单 V1 禁止
修改审批/分支保护/密钥策略 Agent 禁止

16.2 威胁控制

  • Prompt injection:外部数据标记为 untrusted,工具输出不能修改系统策略。
  • 数据投毒:来源白名单、checksum、跨源校验、异常检测和数据快照签名。
  • 供应链:依赖锁定、SBOM、签名镜像、禁止运行未知 pickle。
  • 凭证泄漏:Vault 动态凭证、最小权限、日志脱敏、禁止凭证进入上下文。
  • 越权:策略引擎在工具网关和 MCP Server 双重执行。
  • 审计篡改:append-only 审计存储、哈希链、定期归档。

17. 可观测性与审计

每次运行必须关联统一的 trace_id,并记录:

  • 输入目标、计划版本、Agent/Prompt/模型版本。
  • 每次工具调用的参数摘要、授权结果、耗时、费用和结果引用。
  • 数据、特征、模型、回测、报告、代码和部署的完整谱系。
  • Reflection 决策、Gate Result、人工批准者和批准对象摘要。
  • token、API、计算、存储和数据源费用。

关键 SLO:

  • 控制平面月可用性 >= 99.5%。
  • 工作流状态事件不丢失,恢复点目标 RPO 近零。
  • 95% 可重试失败在策略时限内自动恢复。
  • 100% 生产部署可追溯到人工批准和不可变制品摘要。

18. 核心数据模型

#mermaid-svg-btJAe7SsOHIf6I1a{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-btJAe7SsOHIf6I1a .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-btJAe7SsOHIf6I1a .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-btJAe7SsOHIf6I1a .error-icon{fill:#552222;}#mermaid-svg-btJAe7SsOHIf6I1a .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-btJAe7SsOHIf6I1a .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-btJAe7SsOHIf6I1a .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-btJAe7SsOHIf6I1a .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-btJAe7SsOHIf6I1a .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-btJAe7SsOHIf6I1a .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-btJAe7SsOHIf6I1a .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-btJAe7SsOHIf6I1a .marker{fill:#333333;stroke:#333333;}#mermaid-svg-btJAe7SsOHIf6I1a .marker.cross{stroke:#333333;}#mermaid-svg-btJAe7SsOHIf6I1a svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-btJAe7SsOHIf6I1a p{margin:0;}#mermaid-svg-btJAe7SsOHIf6I1a .entityBox{fill:#ECECFF;stroke:#9370DB;}#mermaid-svg-btJAe7SsOHIf6I1a .relationshipLabelBox{fill:hsl(80, 100%, 96.2745098039%);opacity:0.7;background-color:hsl(80, 100%, 96.2745098039%);}#mermaid-svg-btJAe7SsOHIf6I1a .relationshipLabelBox rect{opacity:0.5;}#mermaid-svg-btJAe7SsOHIf6I1a .labelBkg{background-color:rgba(248.6666666666, 255, 235.9999999999, 0.5);}#mermaid-svg-btJAe7SsOHIf6I1a .edgeLabel .label{fill:#9370DB;font-size:14px;}#mermaid-svg-btJAe7SsOHIf6I1a .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-btJAe7SsOHIf6I1a .edge-pattern-dashed{stroke-dasharray:8,8;}#mermaid-svg-btJAe7SsOHIf6I1a .node rect,#mermaid-svg-btJAe7SsOHIf6I1a .node circle,#mermaid-svg-btJAe7SsOHIf6I1a .node ellipse,#mermaid-svg-btJAe7SsOHIf6I1a .node polygon{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-btJAe7SsOHIf6I1a .relationshipLine{stroke:#333333;stroke-width:1;fill:none;}#mermaid-svg-btJAe7SsOHIf6I1a .marker{fill:none!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-btJAe7SsOHIf6I1a .edgeLabel{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-btJAe7SsOHIf6I1a .edgeLabel .label rect{fill:rgba(232,232,232, 0.8);}#mermaid-svg-btJAe7SsOHIf6I1a .edgeLabel .label text{fill:#333;}#mermaid-svg-btJAe7SsOHIf6I1a :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} has
executes
contains
feeds
trains
produces
evaluated_by
yields
records
produces
supports
releases
RESEARCH_RUN
PLAN_REVISION
TOOL_CALL
EXPERIMENT_RUN
DATASET_SNAPSHOT
FEATURE_SET
MODEL_VERSION
BACKTEST_RUN
GATE_RESULT
REFLECTION
REPORT_BUNDLE
PULL_REQUEST
DEPLOYMENT

所有实体采用不可变 ID;修订通过新版本和父引用表达,不在原记录上静默覆盖。


19. API 草案

text 复制代码
POST   /v1/research-runs                 创建研究运行
GET    /v1/research-runs/{run_id}        查询状态与当前计划
POST   /v1/research-runs/{run_id}/pause  暂停
POST   /v1/research-runs/{run_id}/resume 恢复
POST   /v1/research-runs/{run_id}/cancel 取消
GET    /v1/research-runs/{run_id}/lineage 获取谱系
GET    /v1/research-runs/{run_id}/report 获取报告
POST   /v1/approvals                     提交人类审批决定
GET    /v1/approvals/{approval_id}       查询审批
GET    /v1/artifacts/{artifact_id}       查询产物元数据

所有写请求支持幂等键;API 返回操作引用,长任务异步执行。


20. 测试与验收

20.1 测试层级

  • 单元测试:因子算子、时间对齐、费用、撮合、指标、策略规则。
  • 属性测试:未来数据变化不得影响过去信号;现金和持仓守恒。
  • Golden Test:固定小数据集上的信号、交易和净值结果固定。
  • 集成测试:各 MCP Server 的 Schema、权限、幂等和错误模型。
  • 端到端测试:从研究目标到 PR,以及审批后的 simulation 部署。
  • 安全测试:越权、prompt injection、恶意数据、依赖和密钥泄漏。
  • 故障测试:数据源限流、Worker 中断、消息重复、部署健康失败。

20.2 关键验收场景

  1. 修改 T+5 的数据不会改变 T 日信号或 T+1 订单。
  2. 当股票 T+1 涨停时,买单不产生不现实成交。
  3. 当数据源返回重复或缺失交易日时,流水线被质量门阻断。
  4. 同一幂等键重复下载、提交或部署不会产生重复副作用。
  5. Agent 调用 Git merge 或 production deploy(无审批令牌)必须被拒绝并审计。
  6. 报告中的任一数字能定位到回测产物、配置、代码和数据快照。
  7. Worker 中断后恢复不会改变实验 ID 或重复登记模型。
  8. Prompt injection 文本无法改变工具白名单或审批策略。
  9. PR 的 commit SHA 变化后原审批失效。
  10. 部署健康检查失败时回滚到明确的上一批准版本。

20.3 Definition of Done

  • 所有验收场景自动化并通过。
  • 完成端到端数据与实验谱系演示。
  • 完成威胁模型、权限审计和恢复演练。
  • 在固定基准任务上成功生成可复现报告和 PR。
  • 未经人工审批的生产部署通过技术手段不可达。

21. 交付阶段

Phase 0:基础治理

定义数据许可、研究模板、回测假设、门槛、权限、审批和审计格式。

Phase 1:可复现研究底座

完成数据快照、特征表达式、训练、A 股回测、实验注册和报告,不引入 Agent 自主规划。

Phase 2:单 Agent 编排

引入 Planner、工具网关、Memory 和 Reflection,自动完成一次受限研究任务。

Phase 3:专业 Agent 与 MCP

拆分 Data/Alpha/Training/Backtest/Report Agent,部署 MCP Gateway 和专业 Server。

Phase 4:Git 与部署自动化

自动创建 commit/PR,接入人工审批,支持 simulation 自动部署和 production 审批发布。

Phase 5:规模化与治理

增加并行搜索、成本控制、漂移监控、多团队隔离和审计报表。


22. 待组织确认的配置项

以下内容不阻塞架构,但在实施前必须由业务和合规共同确认:

  • 合规数据供应商、许可范围、历史深度和预算。
  • 目标股票池、基准、资金规模和换手/容量约束。
  • 费用和滑点模型的组织标准。
  • 研究晋级门槛及例外审批流程。
  • Git Provider、CI/CD、云环境和身份系统。
  • 报告保留期限、审计保留期限和模型风险分级。

23. 设计决策摘要

  1. 采用分层 Agent + 确定性工作流,而不是自由多 Agent 对话。
  2. 采用受控自治:研究自动化,合并、生产部署和实盘必须人审。
  3. V1 聚焦 A 股日频横截面,避免同时支持多市场和高频。
  4. Alpha 使用可解释因子搜索与树模型组合,不引入深度模型。
  5. 所有结论由版本化证据支撑,LLM 不作为指标计算器或审批者。
  6. MCP 是受策略保护的工具边界,不是绕过权限的通道。
  7. 数据时点、失败实验和多重检验被视为一等公民。
相关推荐
三川6981 小时前
Tkinter库的学习记录10-Message与Messagebox
python
吃饱了得干活1 小时前
别只会传 temperature!一文挖透 LangChain 模型配置:Profile、全参数与运行时动态覆盖
python·langchain
shuoyuanAI1 小时前
张家口专业的aigeo优化品牌找哪家
大数据·人工智能·python
卷无止境2 小时前
《Deep Analysis with Polars》进阶分析技巧——深入解读
后端·python
大博士.J2 小时前
视频号主体违规与认证上限?正确的解决方式
运维·python·自动化
Mr.朱鹏2 小时前
【FastAPI 全栈实战 | 第2篇】Pydantic 数据校验与响应模型 —— 让 Bug 死在请求进来的那一刻
人工智能·python·fastapi
Xiangchu_2 小时前
安徽硅胶厂的转型困局:从家电到汽车,卡在哪
经验分享·python·阿里云·eclipse·汽车·制造
CTA终结者2 小时前
近期AI量化工具推荐,围绕最难推进的环节选择
人工智能·python
谙忆2 小时前
Python 常用图像处理库速查:Pillow、OpenCV、rembg、pillow-simd 各擅长什么、怎么选
图像处理·python·pillow