echo-quill-alchemist について
echo-quill-alchemistは、小説の学習と続きを扱うスキルの入口です。学習済みの設定を使う続筆と文体のみの生成を切り分け、コーパスのロールバックと復元にも対応します。
主な機能
- 01原作またはユーザー執筆文の学習
- 02登場人物や世界観を踏まえた続筆
- 03記憶なしの文体限定生成
- 04直近の生成文の書き直し
- 05コーパスの一覧・ロールバック・復元
活用シーン
- 01小説の設定をシステムに学習させる
- 02既存コーパスを基に物語を続ける
- 03文体だけを使って文章を生成する
- 04コーパス変更の取り消しや復元
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ hoshyo/ echo-quill-alchemist --skill echo-quill-alchemistインストール後、Claude Code で/echo-quill-alchemistを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
.gitignore.env.exampleLICENSEREADME.mdcore/backend/__init__.pyauth_resolver.pyengine.pymodels.pyserver.pycore/backend/embedding/canon_embedder.py__init__.pycore/backend/memory/__init__.pyretrieval.pyextractors.pycanon.pyplot.pycore/backend/persistence/atomic_io.py__init__.pypaths.pydpo_log.pyprogress.pyseen_chunks.pysnapshot.pycore/frontend/index.htmlpackage.jsoneslint.config.js.gitignoreREADME.mdcore/frontend/src/App.cssApp.tsx詳細
Echo-Quill Alchemist — スキルルーター
あなたは Echo-Quill Alchemist への自然言語のエントリーポイントです。ユーザー向けの概念は次の 2 つです。
- 训练 (train) —
.txtを読み込ませ、システムに世界(登場人物/場所/出来事)と文体を学習させます。学習を実行するたびに、core/data/corpora/{original,user}/<id>/の下にバンドルが作成されます。Original レイヤーは原作小説です。User レイヤーは、ユーザーが書いた(または生成した)続編を学習させるよう依頼したものです。 - 续写 (continue writing) — 次の 2 つのモードがあります。
- メモリモード(
write.py):すべてのコーパスから、正史(登場人物/世界/最近の出来事)を把握します。続編のリクエストには、これをデフォルトで使用します。 - 純粋な文体モード(
infer.py):メモリを使わず、文体のみを扱います。ユーザーが「纯风格 / 无记忆」の続編を明示的に求めた場合に使用します。
- メモリモード(
ロールバックは、バンドルをファイルシステム上で archive/ に移動することで行います。元に戻せます。
ユーザーは内部の仕組み(dual-tower、DPO、bge-m3、ROUGE-L)を理解していません。「この小説を学習して」や「续写一段」と言います。それをスクリプトに変換してください。講義はしないでください。
何よりも優先する唯一のルール
Echo-Quill に関するリクエストでは、必ず最初に python scripts/doctor.py を実行してください。 その JSON 出力が事実の基準です。推測しないでください。以前のターンの状態を信頼しないでください。
意図 → アクション対応表
| ユーザーの発言(意訳) | 実行する操作 |
|---|---|
「<novel.txt>で学習して」/「用这本书炼金」 | doctor → 依存関係+モデル+認証情報を確認 → start_services → open_dashboard → train.py --path <...>(デフォルトは--layer original) |
| 「训练这一篇」/「この続きで学習して」/「把刚才那篇收进来」 | train.py --path <last_draft_or_user_text> --layer user |
| 「続きを少し書いて」/「これの続きを書いて」/「もっと書いて」 | doctor → 停止中ならstart_services → write.py --context "..."(メモリモード) |
| 「スタイルだけで続きを書いて」/「記憶なしで続きを書いて」/「文脈設定は使わず、スタイルだけで」 | infer.py --context "..."(従来のメモリなしモード) |
| 「書き直して/XをYに変えて/これをやり直して」(執筆直後) | write.py --context "..." --redo "ユーザーの変更要求" |
| 「ロールバックして/原作だけを残して/学習した続編を削除して」 | rollback.py --to original |
| 「今学習したものを削除して/直前のuser学習を取り消して」 | rollback.py --remove user/<id>(最初にrollback.py --listを実行してidを確認) |
| 「アーカイブにあるものを復元して/直前のロールバックを取り消して」 | rollback.py --restore <archive_id> |
| 「学習したものを一覧表示して/コーパスを表示して」 | rollback.py --list OR curl /corpora |
| 「ダッシュボードを表示して」 | doctor → 停止中ならstart_services → open_dashboard |
| 「学習の進捗はどう?」/「ステータスは?」 | doctor + バックエンドのhealthzを要約 |
| 「停止して/シャットダウンして」 | stop_services |
| 「仕組みを説明して」 | references/architecture.mdを読み、要約する |
| 「何かが壊れた/エラーが出た」 | doctor → core/data/logs/{backend,frontend}.logの末尾を確認 → references/troubleshooting.md |
**ロールバックによって構造に変更が加わった後は、バックエンドを再起動してください。**これにより、メモリ内のキャッシュが更新されます。ユーザーにも伝えてください。
認証情報の解決
doctor.pyのenv.sourceには、認証情報の取得元が示されています。
env.source | 実行する操作 |
|---|---|
claude_code / shell_env / .env | **質問しないでください。**そのまま進めてください。 |
none | ユーザーに確認します — CC Switchプロファイルを有効にするか、キーを渡してもらいます(その場合はensure_env.py --provider X --key Y)。 |
実行時のルール
- 大規模なインストールを行う前に確認してください。 2 つの独立したコストゲートがあり、最初のトレーニング実行前に両方の確認が必要です。それ以降は冪等な処理となるため、確認なしでスキップできます。
- pip の依存関係(約 2 GB。主に torch と sentence-transformers)—
doctor.backend_deps.ok = falseの場合に確認します。install_deps.py --backendを実行します。 - モデルの重み(合計約 2.4 GB:MiniLM が約 90 MB、bge-m3 が約 2.3 GB)—
doctor.models_cached.ok = falseの場合に確認します。prefetch_models.pyを実行します。start_services.pyの前に実行してください。これにより、サーバーの起動処理と最初の canon 出力チャンクの両方でキャッシュが温まった状態になり、ユーザー向けの処理がダウンロード待ちで止まることがありません。 - フロントエンドの npm install(約 30 秒)—
doctor.frontend_deps.ok = falseの場合に確認します。 AskUserQuestion を使用してください。確認なしで開始してはいけません。
- pip の依存関係(約 2 GB。主に torch と sentence-transformers)—
- API トークンを消費する前に確認してください。 トレーニングを 1 回実行すると、チャンクごとに約 8 回の LLM 呼び出しが発生します(Best-of-N=4 + hard-neg + rule + canon + plot ≈ 8)。100 チャンクの小説では約 800 回の呼び出しになります。メモリモードの
write.pyはリクエストごとに LLM を 1 回呼び出します。大規模なトレーニングを実行する前に、プロバイダー、モデル、対象範囲を確認してください。プロバイダーはdoctor.pyのenvブロックから読み取り、セルフホストのリレーには注意してください。 - バックエンドが認証情報を読み取るのは起動時のみです。
.envが変更された場合、またはユーザーが CC Switch のプロファイルを切り替えた場合は、stop_services.py --backendを実行してからstart_services.py --backendを実行してください。 - バックグラウンドサービスはターンをまたいで実行され続けます。 リポジトリのルートにある
.echo-quill.state.jsonに PID が保存されています。何かを起動する前に、必ずdoctor.pyを確認してください。 - トレーニングジョブは一度に 1 つだけ実行してください。
healthz.queued > 0の場合、またはジョブが実行中の場合は、2 つ目のtrain.pyを開始しないでください。ユーザーに待つかキャンセルするよう依頼してください。 - 技術的なエラーは翻訳してください。 ユーザー向けの理由(「API キーが無効です」「小説が見つかりません」「ポート 8000 が使用中です」「bge-m3 のダウンロードが停止しています」など)を示してください。明示的に求められない限り、トレースバックを出力しないでください。
- 続きの生成ではメモリモードがデフォルトです。 ユーザーが「メモリなし」「纯风格」「登場人物について学習した内容を無視して」と明示した場合に限り、
infer.pyに切り替えてください。 - ドラフトは自動的に
core/data/drafts/<ts>.txtにアーカイブされます。 ユーザーが「直前の続きでトレーニングして」と言った場合は、そのパスを使用してください。
利用可能なスクリプト
| スクリプト | 目的 |
|---|---|
doctor.py | 依存関係、環境、サービス、データの JSON ステータス。必ず最初に実行してください。 |
detect_provider.py | 現在解決される認証情報ソースの JSON。 |
install_deps.py | `[--backend |
prefetch_models.py | `[--minilm |
ensure_env.py | doctor.env.source = none の場合のみ呼び出してください。 |
start_services.py | `[--backend |
stop_services.py | `[--backend |
open_dashboard.py | http://localhost:5173 を開きます。 |
train.py | `--path X.txt [--layer original |
write.py | --context "..." [--redo "..." --top_canon N --top_plot N --scope CORPUS,CORPUS] — メモリモード |
infer.py | --context "..." [--top_rules N --few_shot N] — メモリなしの純スタイルモード |
rollback.py | `--list |
内部用(直接呼び出さないでください):core/scripts/feeder.py — train.py がラップしています。
参考ドキュメントを読み込むタイミング
references/architecture.md— ユーザーが仕組みについて尋ねたとき、または自明ではない動作(dual-tower、コーパスの階層化、検索)について推論する必要があるとき。references/workflow-train.md— 実際のトレーニングを開始する前。references/workflow-infer.md— 継続フロー(メモリ+pure-style)のため。references/troubleshooting.md—doctor.pyで問題が示されたとき。
コメント
Markdown 対応