关于 shinka-convert
shinka-convert 是一项 Agent 技能,可将现有代码库改造成 Shinka 任务。它默认创建独立的任务副本和评估器,不修改原始源代码。
主要功能
- 01检查项目结构与依赖
- 02创建独立的 Shinka 任务目录
- 03标记精简的可进化代码区域
- 04生成评估器和 Shinka 配置
- 05测试评估流程及输出
适用场景
- 01为 Shinka 优化准备现有脚本
- 02将代码库转换为隔离的进化任务
- 03设置任务时保留原始源代码
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ sakanaai/ shinkaevolve --skill shinka-convert安装后在 Claude Code 中输入/shinka-convert确认已加载。
附带文件scripts/run_evo.pyscripts/shinka.yaml
详细介绍
Shinka 转换技能
使用此技能将现有项目转换为适用于 Shinka 的任务。
这是 shinka-setup 的替代起点:
shinka-setup:根据自然语言任务描述创建新任务shinka-convert:将现有代码库转换为 Shinka 任务
转换完成后,用户仍应能够使用 shinka-run。
适用场景
在用户出现以下情况时调用此技能:
- 想使用 Shinka/ShinkaEvolve 优化现有脚本或仓库
- 提到要让当前代码适配 Shinka 输出签名、
metrics.json、correct.json或EVOLVE-BLOCK标记 - 想根据当前工作目录生成一个独立的 Shinka 任务
以下情况不要使用此技能:
- 用户只根据自然语言描述创建全新的任务框架
evaluate.py和initial.<ext>已存在,且用户只想启动演进;请使用shinka-run
用户输入
先收集自由格式的说明,仅在缺少影响重大的细节时再追问。
收集以下信息:
- 要优化的行为或文件/函数
- 分数方向和主要指标
- 约束:正确性、运行时间、内存、确定性、风格、允许的修改
- 是否必须保持原始源代码不变
- 所需的数据/资源/依赖项
默认输出
除非用户要求其他路径,否则在 ./shinka_task/ 下生成一个独立任务目录。
任务目录应包含:
evaluate.pyrun_evo.pyshinka.yamlinitial.<ext>- 评估所需的最小可运行源代码子树的副本
除非用户明确要求原地转换,否则不要修改原始源代码树。
工作流
- 检查当前工作目录。
- 确认语言、入口点、包/模块布局、依赖项和当前输出。
- 优先依据代码中的具体证据,而非猜测。
- 根据用户说明推断可演进区域。
- 如有歧义,请针对性追问。
- 尽可能缩小可修改区域。
- 选择最小可运行快照范围。
- 只复制能够独立执行任务所需的源代码子树。
- 除非导入/运行时要求,否则避免复制整个仓库。
- 创建独立任务目录。
- 默认:
./shinka_task/ - 未经同意,不要覆盖现有任务目录。
- 默认:
- 将快照改写为稳定的 Shinka 契约。
- 保留可演进区域之外的原有行为。
- 在可行的情况下保持 CLI 行为不变。
- 确保可演进候选入口文件命名为
initial.<ext>,以便shinka-run检测到它。 - 添加范围严格的
EVOLVE-BLOCK-START/EVOLVE-BLOCK-END标记。
- 生成评估器路径。
- Python:优先公开
run_experiment(...),并使用run_shinka_eval。 - 非 Python:使用
subprocess,并写入metrics.json和correct.json。
- Python:优先公开
- 生成
run_evo.py和shinka.yaml。- 确保
init_program_path和language与候选文件匹配。 - 确保输出可直接兼容
shinka-run。
- 确保
- 交付前进行冒烟测试。
- 运行
python evaluate.py --program_path <initial file> --results_dir /tmp/shinka_convert_smoke - 确认评估器运行时没有异常。
- 确认已写入必需的指标/正确性输出。
- 运行
- 询问用户下一步操作。
- 手动运行演进
- 或使用
shinka-run技能
按语言分类的转换策略
Python
- 首选在快照中公开
run_experiment(...),并通过run_shinka_eval进行评估 - 如果现有代码仅支持 CLI,请在快照中添加轻量包装器,而不要强行使用子进程评估器;除非导入过于脆弱
- 保持相对于复制任务快照的导入稳定
非 Python
- 保持候选程序可在其自身运行时中执行
- 使用 Python
evaluate.py作为 Shinka 入口点 - 在
results_dir中写入metrics.json和correct.json
所需的评估器契约
指标必须包括:
combined_scorepublicprivateextra_datatext_feedback
正确性必须包括:
correcterror
除非用户明确指定了反向指标,并在聚合时进行转换,否则 combined_score 值越高,表示性能越好。
Python 转换模板
优先将复制的程序按以下方式组织:
from __future__ import annotations
# EVOLVE-BLOCK-START
def optimize_me(...):
...
# EVOLVE-BLOCK-END
def run_experiment(random_seed: int | None = None, **kwargs):
...
return score, text_feedback
评估器示例如下:
from shinka.core import run_shinka_eval
def main(program_path: str, results_dir: str):
metrics, correct, err = run_shinka_eval(
program_path=program_path,
results_dir=results_dir,
experiment_fn_name="run_experiment",
num_runs=3,
get_experiment_kwargs=get_kwargs,
aggregate_metrics_fn=aggregate_fn,
validate_fn=validate_fn,
)
if not correct:
raise RuntimeError(err or "Evaluation failed")
非 Python 转换模板
使用 evaluate.py 运行候选程序并写入输出:
import json
import os
from pathlib import Path
def main(program_path: str, results_dir: str):
os.makedirs(results_dir, exist_ok=True)
metrics = {
"combined_score": 0.0,
"public": {},
"private": {},
"extra_data": {},
"text_feedback": "",
}
correct = {"correct": False, "error": ""}
(Path(results_dir) / "metrics.json").write_text(json.dumps(metrics, indent=2))
(Path(results_dir) / "correct.json").write_text(json.dumps(correct, indent=2))
附带资源
- 使用
scripts/run_evo.py作为起始运行器模板 - 使用
scripts/shinka.yaml作为起始配置模板
备注
- 保持 evolve 区域精简;默认不要让整个项目都可变
- 尽可能将正确性检查保留在 evolve 区域之外
- 优先采用确定性评估和稳定的随机种子
- 如果转换后的任务已准备就绪,可提出继续使用
shinka-run
评论
支持 Markdown