基于 PM 的 feedback.xlsx,自动分析问题并迭代目标 skill(SKILL.md、代码、子MD等)的工作流。 给定 feedback.xlsx + skill 名称,自动找到该 skill,分析反馈中的 bad case pattern, 持续迭代改进 skill 直到质量收敛。 触发词: "帮我根据反馈迭代 xxx skill"、"PM 给了反馈,帮我改进 my-skill"、 "分析这份反馈然后迭代 skill"、"feedback 回来了,开始迭代"、 "根据评估结果优化 xxx"、"badcase 分析 + 迭代 skill"、 "帮我看看反馈然后改 skill"、"产品给了评估表,迭代一下"
Resources
3Install
npx skillscat add jnnndjjsnxbhhunheng/algo-eval-loop Install via the SkillsCat registry.
algo-eval-loop
核心理念(借鉴 karpathy/autoresearch)
feedback.xlsx(PM质量信号)
↓
分析 bad case patterns → 找到 skill 哪里有问题
↓
改进目标 skill 文件(每次一个方向)
↓
git commit → python scripts/skill_loop.py eval <skill> → 读取 skill_score
↓
改善 → 保留;退化 → git reset --hard HEAD~1
↓
循环,直到收敛Claude 自己就是 loop 的执行者,用 Bash 工具直接操作 git 和调用 eval。skill_loop.py eval 只负责打分并退出,循环控制完全在 Claude 手里。
⚠️ 自主运行指令(最重要)
一旦迭代循环开始,绝对不要停下来询问用户是否继续。
不要问"要继续吗?"、"这轮改得对吗?"、"需要我停下来吗?"
用户可能在睡觉。循环一直跑,直到以下任一条件满足:
- 连续 5 轮 skill_score 无改善(收敛)
- skill_score ≥ 8.5(达标)
- 达到最大轮次(默认 20 轮)
- 用户主动中断(Ctrl+C)
如果某一轮没有好的改进思路,不要停,要想更多:
- 重读 feedback.xlsx 的备注列,找新的 pattern
- 重读目标 skill 的所有文件,找更深层的问题
- 尝试更激进的方向(重写某个章节,而不是小改)
- 尝试把之前"接近有效"的改动组合起来
完整流程
第一步:准备
用户需要提供:
feedback.xlsx— PM 填写的评估表(唯一必须输入)- 目标 skill 名称(或路径)
立即执行:
python scripts/skill_loop.py <skill名称> --feedback <feedback.xlsx路径>第二步:分析 feedback.xlsx(建立基线)
从 feedback.xlsx 提取质量信号:
# Claude 按需写内联代码完成以下分析
import openpyxl
# 1. 识别评估列(_评分、_备注 后缀,或从列名推断)
# 2. 计算各维度均分、低分占比
# 3. 提取 bad case 的备注内容
# 4. 聚类找 pattern(不逐条罗列,找共性)输出分析摘要:
- 综合得分(作为本次迭代基线)
- Top 3 bad case patterns(这是迭代方向的来源)
- 问题归因:哪些 pattern 是 skill 描述/逻辑导致的
示例:
基线综合分:6.2/10
Top patterns:
1. 触发词太窄,用户说"帮我看看"时 skill 没响应(占 34% 低分case)
2. 步骤3描述模糊,Claude 跳过了关键判断(占 28% 低分case)
3. 边界情况未处理,直接报错而非提问(占 18% 低分case)
归因:pattern 1 → SKILL.md description
pattern 2 → SKILL.md 操作步骤第3条
pattern 3 → SKILL.md 关键原则缺失第三步:确定目标 skill,然后立即开始循环,不要等确认
按以下顺序搜索目标 skill:
~/.claude/skills/{name}//mnt/skills/user/{name}/- 当前项目目录递归搜索
迭代对象包括该目录下的所有相关文件:
SKILL.md— 触发词、操作步骤(最常改)*.py/*.ts— 工具代码references/*.md— 参考文档templates/*.md— 模板文件
第四步:迭代循环(Claude 自主执行,不等用户确认)
每一轮的 Bash 操作序列:
# 1. 修改 skill 文件(用 Edit 工具,只改一个方向)
# 2. 提交
git add <skill目录>
git commit -m "skill-iter N: <改动描述>"
# 3. 评估(读取 skill_score 行)
python scripts/skill_loop.py eval <skill名称> --feedback <feedback.xlsx路径>
# 输出示例:skill_score: 7.4
# 4. 决策
# skill_score 提升 → 继续下一轮
# skill_score 持平/下降 → 回滚
git reset --hard HEAD~1
# 5. 不询问,直接进入第 N+1 轮改进方向选择优先级:
pattern 出现频率最高 → 优先改
已改过无效的方向 → 跳过,换下一个 pattern
连续 2 轮同方向无效 → 尝试更激进的改法(重写章节)
所有 pattern 都试过 → 重读 feedback 备注列,找新角度第五步:收敛与交付
停止条件:
- 连续 5 轮无改善
- 代理得分 ≥ 8.5
- 达到最大轮次(默认 20)
输出:
- 改进后的 skill 文件(已在 git 历史中)
results.tsv— 每轮迭代记录- 迭代摘要:基线分 → 最终分,改了哪些方向,哪些有效
下一轮循环:
改进后的 skill 运行产出新结果 → PM 评估 → 新 feedback.xlsx → 再次触发本流程
评估逻辑(语义评估)
核心公式(只看一件事):
skill_score = resolved_bad_cases / total_bad_cases × 10每轮调用 skill_loop.py eval,LLM 逐条判断:
如果算法严格遵循当前 skill 指令处理这条输入,能否避免 PM 指出的问题?
- 能解决 → resolved + 1
- 不能 → 跳过
示例:
Bad cases = 12 条(PM 低分 case)
Round 3 改进后:
✅ 品牌档次权重问题 → resolved
✅ 冷门品牌排除逻辑 → resolved
❌ 热门品牌遗漏问题 → 未解决
...共解决 9/12
skill_score = 9/12 × 10 = 7.5无 ANTHROPIC_API_KEY 时降级为规则评分(效果较差,建议配置)。
工作目录
eval-workspace/
├── versions/
│ └── vN/
│ ├── feedback.xlsx # PM 评估反馈(输入)
│ ├── analysis.md # 自动生成的分析报告
│ └── patterns.json # 提取的 bad case patterns(供迭代循环使用)
└── {skill-name}/
└── results_YYYYMMDD.tsv # 迭代记录关键原则
feedback.xlsx 是唯一必须输入:不需要预配置 eval-criteria.md,从列名直接推断维度。
分析找 pattern 而非罗列:几十条 bad case 逐条列出无意义,聚类找共性。
skill 改动以小步为主:每轮只改一个方向,git 保证可回滚。
Claude 是执行者:分析、归因、改进都由 Claude 完成;skill_loop.py 只管 git 状态。
迭代方向来自 bad case:不是随机优化,每一步都对应具体的反馈问题。