# 工具调用前必读清单（就近激活）

> 每次准备调用以下工具前，先在心里勾选对应小节。任一项答不上来 → 暂停，重新设计这一步。
> 这是「最小充分原则」在工具层面的具体落地，与 SKILL.md 顶层原则配套使用。

---

## confirmDataMulti 调用前必勾选

- [ ] 我要查的字段，是不是公式算子能直接算的？
  - 均线 → `平均(序列, N)`、涨跌幅 → `涨跌幅(序列, N)`、波动率 → `标准差(序列, N)`、比值 → 直接除
  - **能算的必须现算**，不查现成数据集（现成数据集更新时点不可控，可能滞后数周）
- [ ] 这个字段名是从哪里来的？
  - ✅ 来自 workflow 内联模板 / 上一次 confirmDataMulti 成功返回 → **原样复制引号内全部字符**，不得增删任何后缀
  - ❌ 来自联想/推测/拼接（如自己加"〔报告期利润表〕"后缀）→ 禁止
- [ ] 上一次同类调用失败过吗？
  - 是 → 这次的目的必须是"对失败字段重新确认正确字段名"，**不允许**改用 `searchSimilarCases` 兜底（会拿到口径不一致的字段）

## readData 调用前必勾选

- [ ] 我要 read 的变量，在公式里是"输出"还是"输入/中间量"？
  - ✅ 输出（如 `Top10`、`最终结果`、`末值`）→ 可读
  - ❌ 中间量（如 `排序值`、`综合条件`、`因子矩阵`、全市场未截断的序列）→ **禁止读**，它只是上游原料，回填进 prompt 只会爆炸
- [ ] 公式有没有提供更窄的下游输出？
  - 如果公式里有 `取前(..., 10)`、`取出(..., 资产名)`、`末值(...)` 这类收敛算子 → **必须读这些算子的输出变量**，不读它的输入
  - 如果没有 → 先回去改公式，加一个收敛算子，再 readData
- [ ] 这次 read 后，预估回填进 prompt 的 token 量？
  - 标量/小表（≤20 行）→ 直接读
  - 大表/全市场序列（>100 行 或 >5000 token） → **不读**，回去给公式加截断

## runMultiFormula 调用后必勾选

- [ ] 工具返回的 description / 完整序列 / 中间变量值，会被回填进下一轮 prompt 吗？
  - 只回填**当前问题需要的最终值**（如末值、Top10 列表）
  - 不回填中间过程（如全市场每日因子值）
- [ ] 公式失败时（500 / PARTIAL_SUCCESS），下一步是什么？
  - ✅ 定位失败的具体字段/算子 → 针对性修复（重新 confirmDataMulti 该字段，或换算子）
  - ❌ 整体重写 / 改用 searchSimilarCases / 换数据集兜底 → 禁止

## 加载额外文档前必勾选（cases_index.yaml / recipes/ / 知识卡片等）

- [ ] 不加载这个文档，我能不能写出可执行的公式？
  - 能 → **不加载**
  - 不能 → 说明具体卡在哪一步，再决定加载哪个文档（不是全量加载）
- [ ] 加载条件是否真的满足？
  - `cases_index.yaml`：用户明确要求参考案例 / 任务含 ≥3 维度复合因子且无现成思路
  - `recipes/<具体名>.md`：当前任务匹配该 recipe 的标题场景
  - 不满足 → **不加载**

---

## 通用原则（贯穿所有工具）

> 在动手前问自己：**"我现在要做的这一步，是因为上一步明确告诉我缺什么，还是因为我担心可能会缺什么？"**
>
> 前者 → 做。后者 → 停。
