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. 数据时点、失败实验和多重检验被视为一等公民。
相关推荐
Gu Gu Study27 分钟前
ScoutLoop开放域深度研究引擎(agent的初步设计想法)
人工智能·python
卷无止境1 小时前
写代码这件事,到底该讲究点什么?
后端·python
卷无止境1 小时前
循环复杂度到底在算什么,Python 代码怎么才能写得让人一看就懂
后端·python
lpfasd1231 小时前
MediaCrawler 项目深度分析
chrome·python·chrome devtools
Dxy12393102162 小时前
Python项目打包成EXE完整教程(PyInstaller实战避坑)
开发语言·python
bamb002 小时前
一个项目带你入门AI应用开发01
python
0566463 小时前
Python康复训练——常用标准库
开发语言·python·学习
昆曲之源_娄江河畔3 小时前
Python如何安装flask, pymssql
开发语言·python·flask·pymssql
0566463 小时前
Python康复训练——控制流与函数
开发语言·python·学习
天使day4 小时前
FastAPI快速入门
python·fastapi