交互式引导用户完成 FaMou 进化任务的完整流程:先通过结构化澄清循环产出 `problem.md`,再实现并验证 FaMou 实验的三个输入物料(`init.py`、`evaluator.py`、`prompt.md`)。当用户提到以下任意情形时触发:定义/澄清/创建 FaMou 任务、帮我写 problem...
---
name: famou-artifact-generator
description:
交互式引导用户完成 FaMou 进化任务的完整流程:先通过结构化澄清循环产出 `problem.md`,再实现并验证 FaMou 实验的三个输入物料(`init.py`、`evaluator.py`、`prompt.md`)。当用户提到以下任意情形时触发:定义/澄清/创建 FaMou 任务、帮我写 problem.md、我想建一个进化任务、帮我准备 FaMou 实验物料、生成 init.py 或 evaluator.py、优化/ML/搜索问题需要进化求解。即使用户只说"帮我做个 FaMou 任务"或提供粗略想法,也应触发此技能并从澄清阶段开始。
---
# FaMou 进化任务问题定义
端到端指导:从模糊想法 → 任务说明文档 `problem.md` → 评估器和初始解的实现与验证。
**两阶段流程:**
- **阶段一(澄清)**:通过结构化问答,然后构建产出任务说明文档 `problem.md`
- **阶段二(实现)**:根据 `problem.md` 生成并验证 `init.py`、`evaluator.py`、`prompt.md`
FaMou 进化任务的三个输入:
- `init.py` — 候选解脚本(单文件,可直接运行)
- `evaluator.py` — 评估逻辑(固定接口,见下方)
- `prompt.md` — 进化引导(角色、任务、数据、解法参考;≤100 行)
---
## 阶段一:澄清阶段
### 第一步 — 理解项目现状
- 检查数据文件、代码脚本、README、配置,能从中回答的问题**不再提问**。
- 如果有数据,分析和理解数据,例如数据等格式、问题分布等,**如果数据复杂,调用 famou-data-analysis 技能** 辅助。
---
### 第二步 — 信息缺口分析
识别填写任务模板所需的全部信息,用 Plan 或者 TODO 工具建立 TODO 列表:
**核心指引**
1. 可以从文档/数据中回答的条目直接标记为已解决,不再提问。
2. 如果条目的答案相对明晰,或者非关键问题,直接标记成已解决。
**必填 TODO**(按依赖顺序逐一解决,不得跳过或乱序):
- [ ] 核心问题描述与优化目标
- [ ] 输入/输出规格(命令行参数、数据文件、标准输出/生成文件)
- [ ] 数据来源(路径、结构/模式、字段定义、访问方式)
- [ ] 各类约束及其验证方法
- [ ] 评估器评分逻辑(如何区分不同质量等级)
- [ ] 初始解方案或基线策略
**可选 TODO**(有则填,无则跳过):
- [ ] 补充参考信息
---
### 第三步 — 主动澄清循环
**重复直到所有必填 TODO 解决:**
1. 选取一个未解决的必填 TODO。
2. 构造澄清问题,辅助模型收集必要的上下文信息(使用 `ask_uer` 类型的工具):
- 注明**单选**或**多选**。
- 提供 **至少4个选项**,最后一项始终为**"其他(请说明)"**。
3. 等待用户输入。
4. 验证回答:
- 若无效或无关,提示用户重新选择,返回第 3 步
- 若有效,记录信息,进入第 5 步。
5. 判断当前 TODO 信息是否充分:
- **充分** → 标记该 TODO 为已解决,返回第 1 步。
- **不充分**(尤其是硬约束、软约束等信息量大的条目)→ 针对剩余信息缺口继续构造追问,返回第 2 步,**不得跳到下一个 TODO**。
所有必填 TODO 解决后,或用户明确确认任务已清晰,退出循环。
> **约束类 TODO 澄清指引**:约束澄清通常涉及多个维度,每轮只问一个维度,逐步收集完整后再标记完成。
---
### 第四步 — 综合规格并写入 `problem.md`
按下方**任务模板**填写所有章节,规则:
- 明确澄清的信息覆盖已有 `problem.md` 内容。
- 若 `problem.md` 已存在,合并后完整覆盖写入。
- 保持简洁,不冗余。
---
### 第五步 — 评审确认
> "请查阅 `problem.md`。问题定义现在是否清晰完整?"
- **是** → 提示用户进入**实现阶段**生成评估器和初始解。
- **否** → 返回第二步(仅当有新缺口可识别时)。
---
## 阶段二:实现
基于任务说明文档 `problem.md`,生成并验证 FaMou 进化框架所需要的 `evaluator.py`、`init.py` 和 `prompt.md`。
### 第六步 — 物料实现
**`evaluator.py`**(先实现,因为 init.py 验证依赖它)
- 严格遵守下方接口定义(READONLY)。
- 严格遵守系统级约束(READONLY)。
- 评分必须能区分质量等级:崩溃/违反约束 → 0;低质量 → 低分;高质量 → 高分。
**`init.py`**
- 单文件,直接可运行,满足所有硬约束。
- 实现 `problem.md` 中指定的基线策略或初始解方向。
**`prompt.md`**(≤100 行)
- 包含四个部分:(1) 角色,(2) 任务描述,(3) 数据描述,(4) 可行解参考。
- 前三部分内容来源于 `problem.md`,不得添加新假设。
- **文档内容不能包含任何emoj的表情**
---
### 第七步 — 验证
运行评估器验证 `init.py`:
```bash
python evaluator.py <path_to_init.py>
```
必须同时满足:
- `validity == 1`
- `combined_score` 为数值且 `!= 0`
- `error_info == ""`
**若任一检查失败,分析原因,修改对应产物,重新验证,直至全部通过。**
---
## 任务模板(`problem.md` 结构)
```markdown
## 目标
<!-- READONLY:为 FaMou 进化任务准备 init.py、evaluator.py 和 prompt.md -->
## 1. 任务定义
- 核心问题描述
- 输入:(命令行参数 / 数据文件)
- 输出:(标准输出 / 生成文件)
- 主要优化目标
- 关键指标及计算公式
## 2. 数据描述
- 数据来源(文件/表名、结构/模式、字段定义)
- 访问方式(路径、格式)
## 3. 评估器
### 接口(READONLY)
def evaluate(path_user_py: str, task_name: str = "default", timeout: int = 3600) -> dict:
return {
"validity": float, # 0 或 1;1 表示满足所有硬约束
"combined_score": float, # 为可行解打分,0表示无效解,低分表示低质量解,高分表示高质量解
"cost_time": float, # 评估花费时间
"error_info": str, # 成功时为 ""
}
### 参考执行流程
1. 创建所需中间目录和文件
2. 配置候选解运行参数
3. 执行候选解脚本
4. 捕获执行结果(完成 / 错误 / 异常)
5. 检查硬约束和软约束
6. 计算 combined_score
### 硬约束
<!-- 精确规则、验证方法、违反后果 -->
### 软约束
<!-- 优化目标、度量方法、对分数影响 -->
### 系统级约束(READONLY)
- 无论 init.py 是否与 evaluator.py 同目录,评估器必须能正确执行
- 如果使用 subprocess 调用子进程,必须将 cwd 设置为 evaluator.py 所在目录
- 不得依赖临时目录作为工作目录
## 4. 初始解
<!-- 单文件 init.py;方案、基线策略或求解方向;必须满足所有硬约束 -->
## 5. 进化提示(prompt.md,≤100 行)
<!-- (1) 角色 (2) 任务描述 (3) 数据描述 (4) 可行解参考 -->
## 6. 补充信息(可选)
<!-- 参考资料、备注 -->
```
---
## 注意事项
- 澄清循环每轮只提一个问题,不得并行提问。
- 无效回答必须被拒绝,不得假设未解决的 TODO。
- 实现阶段必须运行验证,不得跳过。
- 若用户希望跳过澄清直接实现,尊重其选择,将已知信息缺口在 `problem.md` 中标注为假设后直接进入阶段二。don't have the plugin yet? install it then click "run inline in claude" again.