关于 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 的自然语言入口。用户有两个表层概念:
- 训练 (train) — 提供一个
.txt,让系统学习世界(角色 / 地点 / 事件)和风格。每次训练都会在core/data/corpora/{original,user}/<id>/下生成一个 bundle。Original 层 = 源小说。 User 层 = 用户创作(或生成)并要求你训练的续作。 - 续写 (continue writing) — 两种模式:
- 记忆模式(
write.py):了解所有语料库中的正典(角色 / 世界 / 近期事件)。这是所有续写请求的默认模式。 - 纯风格模式(
infer.py):仅使用风格,不包含记忆。用户明确要求“纯风格 / 无记忆”续写时使用。
- 记忆模式(
回滚 = 将 bundle 移入 archive/ 的文件系统操作。可逆。
用户不了解内部机制(双塔、DPO、bge-m3、ROUGE-L)。 他们会说“训练这部小说”或“续写一段”。将其转换为脚本操作。不要讲课。
高于一切的唯一规则
任何 echo-quill 请求都必须先运行 python scripts/doctor.py。其 JSON
输出是事实依据。不要猜测。不要相信之前轮次中的状态。
意图 → 操作映射
| 用户说(意译) | 你要做什么 |
|---|---|
"train on <novel.txt>" / "用这本书炼金" | doctor → 确保依赖项、模型和凭据齐全 → start_services → open_dashboard → train.py --path <...>(默认使用 --layer original) |
| "训练这一篇" / "train on this continuation" / "把刚才那篇收进来" | train.py --path <last_draft_or_user_text> --layer user |
| "续写一段" / "continue this" / "write more" | doctor → 如果服务未运行,则 start_services → write.py --context "..."(记忆模式) |
| "纯风格续写" / "无记忆续写" / "just the style, no canon" | infer.py --context "..."(旧版无记忆模式) |
| "重写 / 把 X 改成 Y / redo this"(紧接一次写作之后) | write.py --context "..." --redo "用户的修改要求" |
| "回滚 / 只保留原著 / 删掉我训练的那些续写" | rollback.py --to original |
| "删掉刚训练的那篇 / 撤销那次 user 训练" | rollback.py --remove user/<id>(先运行 rollback.py --list 查找 id) |
| "把档案里的那篇恢复回来 / 撤销刚才的 rollback" | rollback.py --restore <archive_id> |
| "列一下训练过哪些 / show corpora" | rollback.py --list 或 curl /corpora |
| "show me the dashboard" | doctor → start_services(如果服务未运行)→ open_dashboard |
| "how's training going?" / "status?" | doctor + 汇总后端 healthz 的状态 |
| "stop / shut it down" | stop_services |
| "explain how this works" | 阅读 references/architecture.md 并总结 |
| "something broke / errors" | 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)。 |
行为准则
- 大型安装前先征求同意。 首次训练前必须确认两个独立的成本门槛;此后它们都是幂等空操作,可以静默跳过。
- 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之前执行,这样服务启动和第一个生成规范内容的分块都会命中热缓存,不会因下载而阻塞面向用户的流程。 - 前端 npm 安装(约 30 秒)——由
doctor.frontend_deps.ok = false控制。 使用 AskUserQuestion。绝不要静默启动。
- pip 依赖(约 2 GB,主要是 torch 和 sentence-transformers)——由
- 消耗 API 令牌前先征求同意。 一次训练大约会为每个分块调用 8 次 LLM(Best-of-N=4 + hard-neg + rule + canon + plot ≈ 8)。一本 100 个分块的小说大约需要 800 次调用。记忆模式下,
write.py每个请求调用 1 次 LLM。进行任何大型训练前,确认提供商、模型和范围。查看doctor.py的env块以获取提供商信息——注意标记自托管中继。 - 后端只在启动时读取凭据。 如果
.env发生变化,或用户切换 CC Switch 配置,请运行stop_services.py --backend,然后运行start_services.py --backend。 - 后台服务会在不同轮次之间持续运行。 仓库根目录中的
.echo-quill.state.json保存 PID。启动任何进程前,务必先检查doctor.py。 - 一次只能运行一个训练任务。 当
healthz.queued > 0或有任务正在运行时,不要启动第二个train.py。请让用户等待或取消任务。 - 翻译技术错误。 呈现面向用户的原因(“API 密钥无效”“未找到小说”“端口 8000 忙”“bge-m3 下载卡住”)。除非用户明确要求,否则不要输出 traceback。
- 续写默认使用记忆模式。 只有用户明确表示“no memory”/“纯风格”/“ignore what was learned about characters”时,才回退到
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— 用户询问其工作原理时,或需要推断不明显的行为(双塔结构、语料分层、检索)时。references/workflow-train.md— 开始正式训练前。references/workflow-infer.md— 用于续写流程(记忆 + 纯风格)。references/troubleshooting.md—doctor.py显示问题时。
评论
支持 Markdown