18trees Character Distillation
从合法持有的小说或剧本中提炼可追溯、可更新的人物行为与认知模型:五层证据契约加一套离线校验,让每条结论都指回原文。
文章目录[4]
项目是什么
18trees-Character-Distillation 是一套从原作文本中提炼人物模型的流程。把合法持有的小说或剧本路径和人物名称交给助手,系统完成分析后直接输出一份人物包,默认落在 workspace/<人物标识>/character-os/。
它要解决的问题是:多数角色工作的产出是一段提示词、一张卡或一段对话,好不好只能靠读起来像不像。这个项目把人物结论接回原文——他看到了什么、掌握哪些信息、如何权衡、采取什么行动,以及哪些原文支持或反驳这一解释,每一条引文都可以逐字核对。
它面向创作者和开发者:读者从 character-report.md 认识人物,后续 Agent 按 agent-guide.md 选择快照和回查依据。项目不提供聊天界面、陪伴、语音或微调;网页版聊天机器人用不了它,因为读不到本地原文、跑不了校验,也无法把结果落盘成人物包。
具体结构
项目分两条线:左列是从材料到人物包的工作流,右列是约束并检查这条工作流的契约与工具。
输入。 真实材料、任务状态和结果收在同一个私有人物目录里:workspace/<人物标识>/ 下分 inputs/、work/ 和 character-os/,外部材料可以原地只读;workspace/ 与 .local/ 都不进入 Git。
契约层。 schemas/ 里的 15 个 JSON Schema 把证据分成五层——来源、证据、经历与行为、主张、快照;prompts/ 保存版本化提示词,每条在 registry.json 里登记自己的版本和哈希。docs/ 与 research/ 存放方法论、SOP、编排约定和研究对照。
工作流。 Host 先按模板一次写清 TASK.md,再按作品或叙事边界启动 1–3 个粗粒度主任务;主任务产出候选后,两个顺序复核直接合并修正,最后由终稿复核 Agent 独占写入 character-os/。Host 不读原文。
检查层。 scripts/character_os.py 提供 validate、report、check-delivery、check-public 四个命令,全部离线运行,把结构、引用和时间规则变成机械判据。
人物包。 包内既有给人读的 README.md、character-report.md 和 agent-guide.md(可选 audit-report.md),也有按层组织的数据文件;CLI 生成的 schema-report.md 是机器数据视图,不是人物报告。
优秀设计
引文必须逐字对上原文。 validate 重新计算源文件 SHA-256、检查引用区间,并把引文与原文切片逐字比对;凭印象写出的台词、记错的引文不是瑕疵,而是机械错误。
时间与可知范围写进契约。 claim 不得引用它之后才出现的证据,known_from 不得早于支持它的证据,快照只能使用截止点之前的知识——把训练数据里的后见之明冒充原作信息会被拦下。
反证、“不知道”和复核都有固定位置。 支持证据与反证分开存放,high/strong 推断需要两个独立场景,accepted 的主张必须留下复核记录,没有原文依据的心理留作 unknown。
检查不依赖模型。 validate、report、check-delivery 和 check-public 全部离线,不需要模型 API key;改动 Prompt 要求升版本并更新 registry 哈希,运行记录里保存输入与 Prompt 的哈希。
公开边界可执行。 check-public 用允许清单机械检查哪些文件可以公开,真实材料、人物包和 .local/ 缓存一律不得进入公开候选,并有对应的负向测试。
解决了什么问题
- 引文与原文不一致、引用越界、源文件被改动,都会在校验阶段直接报错,而不是留给人去发现。
- 拿后见之明冒充原作信息、只挑支持自己的例子、单点归纳当结论,都被契约拦住。
- 真实材料、人物包和缓存有机械的公开边界,配套测试保证它们不会进入公开候选。
- 整条检查链不需要模型 API key,可以在 CI 里对每次推送和 PR 重跑。
- 交付物有稳定入口:人从人物报告认识人物,后续 Agent 从
agent-guide.md拿到读取顺序和回查规则。