| name | cta-principal-research-loop |
| description | Use whenever the user wants to advance CTA research in AuraQuant, asks what the next step is, wants the agent to take over the overall research loop, or needs a cross-stage decision spanning data, specs, runtime modules, experiments, evaluation, and archive governance. |
CTA Principal Research Loop
顶层编排 skill。负责状态恢复、缺口识别、选择一个下一步,不直接处理执行细节。
职责边界
你做:
- 恢复持久化状态
- 识别当前最前置的缺口
- 选择一个最有价值的下一步
- 加载对应 operator,消费其结构化摘要
你不做:
- 直接枚举 parquet/csv/zip 文件
- 对
.、data/、.archive/、.aura/ 做宽泛 glob
- 亲自处理
cta_runtime/ 文件编辑或 CLI 参数拼装
状态恢复优先级
Spec / Run / Report / ArchiveRecord / Approval / DataVersion / DataSlice / FeatureSlice
- CTA tools 与 CLI JSON 输出
- 已加载 operator 的结构化摘要
路由策略
识别当前最前置的缺口,路由到对应 operator:
| 优先级 | 缺口类型 | 路由 | 前置要求 |
|---|
| 1(最高) | 数据不存在或有缺口 | cta-data-operator | 无 |
| 2 | 运行时模块或 spec 缺失/不匹配 | cta-strategy-operator | 数据就绪 |
| 3 | 数据+spec 就绪,需要实验或评测 | cta-experiment-operator | 1+2 就绪 |
| 4 | 有 EvalReport,需要归档/审批 | cta-governance-operator | 1+2+3 就绪 |
多个缺口并存时,按上表优先级从低编号开始解决——这是硬前置依赖,不是建议。
实验路由前,由 cta-experiment-operator 执行 spec_fitness 检查。
自主研究模式
本 skill 是自主研究循环的执行主体。收到 <AUTO_CONTINUE /> 或用户触发自主模式时,按以下规则运行。
研究预算
- 默认最大轮数:200 轮(用户可指定)
- 每轮消耗 1 个预算单位
- 预算耗尽时输出终止报告
五维探索框架
研究不是单维参数调优。每轮行动前先判断当前应在哪个维度工作:
| 维度 | 工作内容 | 升维条件 |
|---|
| 参数层 | 在当前信号结构内搜索最优参数 | 连续 3 轮 Sharpe delta < 0.05 |
| 结构层 | 改变 filter / execution / risk 的组合方式 | 参数层收敛,信号有效但执行差 |
| 假设层 | 替换 alpha 假设(换信号逻辑) | 结构层穷尽,信号本身无效 |
| 归纳层 | 停下来问:失败的共同原因是什么? | 每 10 轮强制触发 |
| 调研层 | 引入外部 CTA 策略思路,产生新假设 | 假设层换了 3 个方向都无起色 |
归纳层是防止空转的核心。 每 10 轮必须输出:
- 哪些假设已被证伪?
- 失败的共同特征是什么?
- 下一个值得测试的假设及理由
归纳结果必须影响下一轮的维度选择。不得在没有新假设的情况下继续消耗预算。
不能做的事
- 不重复运行与上一轮完全相同的 spec + 参数组合
- 不在没有新假设的情况下消耗预算
- 不在参数层收敛后继续停留在参数层
Operator 协作
加载 operator 完成子任务后立即返回研究循环。研究阶段遇到好结果时自动归档 candidate 并继续,不暂停等待。只有收到 frozen → production 推进指令时才暂停等待人工审批。
能力缺口报告
implementation_gap:
missing: <模块名或工具名>
needed_for: <当前任务哪一步依赖它>
next_implementation_point: <建议先实现哪个文件/函数>
输出格式
## state_summary
<当前阶段 + 最重要状态事实>
## evidence
- strategy_id / experiment_id / run_id / report_id / archive_id / approval_id
- data_version / slice_id / feature_version
## next_action
<具体下一步:调用哪个 operator / 产出哪个对象>
<或 implementation_gap 结构>
## blocked_by
<None> 或 <阻塞项>