shinka-convert について
shinka-convert は、既存のコードベースを 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 の動作を維持します。
shinka-runが検出できるよう、進化候補のエントリーファイルをinitial.<ext>という名前にします。- 範囲を絞った
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 のみの場合は、インポートが不安定すぎる場合を除き、
subprocessを使った評価器を無理に作るのではなく、スナップショットに薄いラッパーを追加します - コピーしたタスクスナップショット内で、インポートが安定して解決されるようにします
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を使用します
注意事項
- 進化領域は狭く保ち、プロジェクト全体をデフォルトで変更可能にしないでください
- 可能な限り、進化領域の外で正確性チェックを維持してください
- 決定論的な評価と安定したシードを優先してください
- 変換したタスクの準備ができたら、
shinka-runで続行することを提案してください