提示词套件
把你的书变成 Lokee 世界库的提示词
六个按顺序运行的提示词,适用于 Claude Code、Codex 或其他编程智能体。它们由一位作者把整部小说变成世界库时所用的提示词归纳而来,适用于任何语言的任何书。
先阅读分步指南 →使用方法
先替换花括号中的占位符,再把每个提示词粘贴到在工作文件夹中打开的智能体里。按顺序运行,每个提示词都开一个新会话,让智能体依靠文件而不是记忆工作。提取和撰写描述可以同时在多个会话中运行。
读者能看到的所有内容,智能体都会用你的书的语言来写。文件名、字段名和 JSON 示例在任何语言版本中都保留英文,因为 Lokee 要读取它们。
占位符
- {BOOK_TITLE}
- 你的书名。
- {SOURCE_FOLDER}
- 存放书稿的文件夹。智能体只读取它。
- {WORK_FOLDER}
- 一个新文件夹,智能体在其中存放章节文件和中间结果。
- {VAULT_FOLDER}
- 一个新的空文件夹,用来存放完成的世界库。
- {GROUP_ID}
- chapters.md 中的组编号,例如 g01。
- {CHAPTERS}
- 该组的章节文件,例如 01–06。
- {DOSSIER_NUMBER}
- 档案文件的编号,例如 1。
提示词 1
准备书稿
开始时运行一次。在提取任何内容之前,由你确认章节分组和实体类型。
你要帮我把我的书《{BOOK_TITLE}》变成一个 Lokee 世界库——一个结构化的数据库,收录书中的人物、地点、关系和事件。手稿在 {SOURCE_FOLDER}。只在 {WORK_FOLDER} 中工作;不要改动 {SOURCE_FOLDER} 中的任何内容。
第 1 步——章节文件。把手稿转换为 Markdown,每章一个文件:{WORK_FOLDER}/book/NN-short-title.md,NN 是两位数的阅读顺序(01、02……)。每个文件的第一行是“# ”加上与书中完全一致的章节标题。逐字照抄正文:不要概括、不要修改、不要改写。序章、尾声、附录和术语表各自单独成文件。
第 2 步——分组。写出 {WORK_FOLDER}/chapters.md:列出每个章节文件及其字数,然后把章节分组,每组约 15,000–25,000 个英文单词的篇幅(中文约 30,000–50,000 字),编号 g01、g02……。每一组将由一个单独的智能体提取。
第 3 步——提取规范。快速通读全书,写出 {WORK_FOLDER}/SPEC.md,即每个提取智能体都要遵循的说明。它必须包含:
- 书的语言。所有提取的内容都用这种语言书写,名称与书中完全一致。
- 实体类型,写成确切的字符串。从以下类型出发,用书的语言改写以适合本书:人物、地点、组织、物品、生物或种族、魔法或科技、事件、概念。删去本书用不到的类型;补充它需要的类型(例如预言或飞船)。
- 每种类型的属性名:用书的语言写的简短 snake_case 名称——例如人物:角色、年龄、外貌、性格、能力、状态;地点:类别、区域、外貌。属性只填写文本中明确写出的内容。
- 主要人物以及每个反复出现的地点、团体和物品的规范键:规范名称的小写 ASCII kebab-case 形式,不带变音符号(例如 mira-vale;中文名称用拼音,如 li-xiaoyu)。一个实体只有一个键;其他名称和写法放进 aliases。
- 下列关系类型。使用这些名称,只有在都不合适时才提出新的 snake_case 名称。每行是“类型 ↔ 反向类型”;与自身配对的类型在两个方向上含义相同。每条关系只写一次,从执行该动作的一方写(source 对 target 做这件事),绝不把一对关系的两个方向都写上。家庭关系请保留 parent_of、child_of、sibling_of、spouse_of、ancestor_of 和 descendant_of 这些名称,以便 Lokee 绘制家族树。
parent_of ↔ child_of
grandparent_of ↔ grandchild_of
ancestor_of ↔ descendant_of
sibling_of ↔ sibling_of
spouse_of ↔ spouse_of
kin_of ↔ kin_of
friend_of ↔ friend_of
ally_of ↔ ally_of
enemy_of ↔ enemy_of
rival_of ↔ rival_of
companion_of ↔ companion_of
loves ↔ loved_by
betrayed ↔ betrayed_by
mentor_of ↔ student_of
serves ↔ served_by
leader_of ↔ led_by
member_of ↔ has_member
rules ↔ ruled_by
owns ↔ owned_by
part_of ↔ has_part
created ↔ created_by
located_in ↔ contains
lives_in ↔ home_of
born_in ↔ birthplace_of
imprisoned_in ↔ prison_of
visited ↔ visited_by
hunts ↔ hunted_by
captured ↔ captured_by
attacked ↔ attacked_by
saved ↔ saved_by
killed ↔ killed_by
participated_in ↔ had_participant
belongs_to_race ↔ race_of
uses ↔ used_by
knows ↔ knows
- 输出格式:每组写一个 JSON 文件 {WORK_FOLDER}/extract/<组编号>.json,结构与下面完全一致(其中的值只是示例):
{
"group": "g01",
"chapters": [
"01-the-lamplighter",
"02-the-toll-house"
],
"entities": [
{
"key": "mira-vale",
"name": "Mira Vale",
"type": "Character",
"aliases": [
"the Lamplighter"
],
"attributes": {
"role": "lamplighter",
"appearance": "grey braid, burn scars on both hands"
},
"facts": [
"Has walked the Lantern Road for thirty years (01)."
],
"quotes": [
{
"text": "Mira Vale had walked the Lantern Road for thirty years.",
"category": "appearance",
"chapter": "01-the-lamplighter"
}
],
"states": [
{
"milestone": "Chapter 1",
"note": "takes Tobin as her apprentice"
}
]
}
],
"relationships": [
{
"source": "mira-vale",
"type": "mentor_of",
"target": "tobin",
"evidence": "she told Tobin, her new apprentice",
"chapter": "01-the-lamplighter",
"note": ""
}
],
"events": [
{
"title": "Mira takes Tobin as her apprentice",
"chapter": "01-the-lamplighter",
"order": 1,
"description": "Two to four sentences.",
"participants": [
"mira-vale",
"tobin"
],
"places": [
"lantern-road"
],
"spoiler": false
}
]
}
- 以下规则:quotes[].text 和 relationships[].evidence 必须从章节文件中逐字符复制,因为之后要靠精确搜索找回它们——引文不超过 200 个字符,证据不超过 120 个字符。引文的 category 取以下之一:appearance、personality、relationship、event、worldbuilding、dialogue、clue、custom。每个重要实体给出 1–4 条引文,凡是外貌有描写的人物都要有一条 appearance 引文。事实是以括号内章节号结尾的短句,例如 (07):主要人物要详尽,次要人物 1–3 条。事件是每章按顺序排列的主要情节(order = 在本章中的位置),每章 3–10 个,反转情节标记 spoiler: true。用文字标明不确定性(“可能”“书中未明说”)。只从分配给你的章节中提取。
完成后,把分组和你选定的实体类型给我看,等我确认后再继续。提示词 2
提取一个章节组
每个章节组运行一次——并行运行,每组一个会话或子智能体。
阅读 {WORK_FOLDER}/SPEC.md 并严格遵循。你的组是 {GROUP_ID}:{WORK_FOLDER}/book/ 中的章节 {CHAPTERS}。
完整阅读分配给你的每一章,一行都不要跳过。提取所有有名字的东西——人物(包括只被提及的人,例如祖先或统治者)、地点、组织和团体、物品、生物和种族、魔法或科技、有名称的事件、概念和术语——以及重要的无名人物(“老船夫”)。只要实体在 SPEC.md 中有规范键,就使用该键。如果不确定两个名称是否指同一个实体,就只用一个键,把另一个名称放进 aliases。
只写一个文件:{WORK_FOLDER}/extract/{GROUP_ID}.json——UTF-8、合法 JSON、不带注释——并检查它能否被解析。然后用五行回复总结:实体、关系和事件的数量,以及任何命名上的疑问。提示词 3
合并成档案
所有组都生成文件后运行一次。
合并《{BOOK_TITLE}》的提取文件 {WORK_FOLDER}/extract/*.json。你可以编写并运行一个小脚本;不要手动编辑提取文件。
1. 找出指向同一实体的键——拼写变体、被当作键的绰号、单数与复数——并把它们写入 {WORK_FOLDER}/merge.json,格式为 变体键 → 规范键:
{
"lamp-road": "lantern-road",
"mira": "mira-vale"
}
应用之前先把这份列表给我看。
2. 合并每个规范键:保留一个名称和最具体的类型;合并 aliases(去重,且不含名称本身)、属性(不同的值用“; ”连接)、事实、引文、状态,以及该实体出现的章节。把关系两端和事件参与者改写为规范键。
3. 为撰写描述的步骤写出档案:{WORK_FOLDER}/dossiers/dossier-1.json、dossier-2.json 等,每个约 40–60 个实体,主要人物分散到不同文件中:
{
"mira-vale": {
"name": "Mira Vale",
"type": "Character",
"aliases": [
"the Lamplighter"
],
"attributes": {
"role": "lamplighter"
},
"facts": [
"Has walked the Lantern Road for thirty years (01)."
],
"chapters": [
"01-the-lamplighter"
],
"relationships": [
"mentor_of tobin"
]
}
}
报告每种类型的实体数量、你合并的键,以及指向不存在的键的关系或事件。提示词 4
撰写描述
每个档案运行一次,可以并行。可选:跳过这一步时,描述就是事实列表。
为《{BOOK_TITLE}》的实体撰写百科式描述。你的输入是 {WORK_FOLDER}/dossiers/dossier-{DOSSIER_NUMBER}.json。事实以章节号结尾,例如 (05);章节文件在 {WORK_FOLDER}/book/ 中——遇到不清楚或互相矛盾的地方就打开核对,主要人物尤其如此。
写出 {WORK_FOLDER}/descriptions/desc-{DOSSIER_NUMBER}.json,为档案中的每个键写一段 Markdown 描述:
{
"mira-vale": "Mira Vale is the lamplighter of the Lantern Road (Chapter 1).\n\n## Appearance\n…"
}
风格——用书的语言写成的维基式条目:
- 以一句平实的引导句开头:说明它是谁或是什么。
- 主要实体(8 条及以上事实):2–5 个简短小节,配上合适的 ## 标题(例如 外貌、能力、经历、关系),总长约 150–450 个英文单词的篇幅(中文约 300–900 字)。
- 中等实体(3–7 条事实):一到两段,约 60–150 个英文单词的篇幅(中文约 120–300 字)。
- 次要实体(1–2 条事实):一到三句话。
- 术语表词条:先写定义,再写背景。
- 章节引用放在句末括号里,例如(第 4 章)。
- 只写档案和正文能支持的内容。用文字保留不确定性。揭示重大反转的句子以 **剧透:** 开头。
检查文件能否作为 JSON 解析,然后用一行回复:写出的描述数量。提示词 5
构建世界库
运行一次;输入有变化时再运行。它对世界库格式的描述足够精确,智能体可以据此写出世界库。
用 {WORK_FOLDER} 中的文件为《{BOOK_TITLE}》构建 Lokee 世界库,写入空文件夹 {VAULT_FOLDER}。为此编写并运行一个脚本(Python 或 Node.js);不要手工逐个编写世界库文件。
输入:章节文件 {WORK_FOLDER}/book/*.md、提取文件 {WORK_FOLDER}/extract/*.json、{WORK_FOLDER}/merge.json,以及描述文件 {WORK_FOLDER}/descriptions/*.json。如果某个实体没有描述,就把它的事实写成项目符号列表。
通用规则:
- 每个 id 都是 UUID。让 id 具有确定性——用一个固定命名空间加上稳定名称(例如“entity/mira-vale”或“event/03/2”)生成 uuid v5(Python 中为 uuid.uuid5)——这样重新运行构建会得到相同的 id。
- 时间戳是 UTC 的 ISO-8601 字符串,例如“2026-01-15T12:00:00.000Z”。整个构建使用同一个时间戳。
- 文件为 UTF-8,是不带注释的合法 JSON。字段名、文件名以及这里给出的固定值都必须按原样保留英文。读者能看到的一切——名称、标签、描述、标题——都用书的语言。
文件夹结构(名称与下面完全一致;<…> 表示 id):
.cache/
project.json
entities/<entityId>/<entityId>.json
source-documents/<docId>/<book file>.md
source-documents/<docId>/manifest.json
manuscript/manifest.json
manuscript/containers/<leafId>.md
story-events/<eventId>/<eventId>.json
notes/<noteId>/<noteId>.json
project.json——世界库本身。必填:id、version(始终为 1)、name、createdAt、updatedAt、entityTypes、relationshipTypes。实体类型包含 id、name 和 fieldTemplates(每项:id、name、type "string"、required false),可选 color(十六进制颜色)和 shape(circle、square、diamond 或 triangle)。关系类型包含 id、name(snake_case 键)和 label(展示给读者,用书的语言)。对于 mentor_of 与 student_of 这样的一对,每一方的 reciprocalTypeId 都是另一方的 id;friend_of 这样的对称类型指向自己。只包含实际用到的关系类型及其反向类型。有用的可选字段:language(只能是 "en" 或 "pl"——其他语言请省略)、entityPresentation "wiki"(描述以条目文章形式显示)、catalogueFolders(侧栏中显示的文件夹路径,例如 "人物")。不要添加其他字段。
{
"id": "0b1e7c52-6a0d-5f2e-9c41-2d7a8e3f5b10",
"version": 1,
"name": "The Lantern Road",
"createdAt": "2026-01-15T12:00:00.000Z",
"updatedAt": "2026-01-15T12:00:00.000Z",
"language": "en",
"entityPresentation": "wiki",
"catalogueFolders": [
"Characters",
"Places"
],
"entityTypes": [
{
"id": "1c2d3e4f-5a6b-5c7d-8e9f-0a1b2c3d4e01",
"name": "Character",
"color": "#e0915a",
"shape": "circle",
"fieldTemplates": [
{
"id": "2d3e4f5a-6b7c-5d8e-9f0a-1b2c3d4e5f01",
"name": "role",
"type": "string",
"required": false
},
{
"id": "2d3e4f5a-6b7c-5d8e-9f0a-1b2c3d4e5f02",
"name": "appearance",
"type": "string",
"required": false
}
]
},
{
"id": "1c2d3e4f-5a6b-5c7d-8e9f-0a1b2c3d4e02",
"name": "Place",
"color": "#4f9d8a",
"shape": "square",
"fieldTemplates": [
{
"id": "2d3e4f5a-6b7c-5d8e-9f0a-1b2c3d4e5f03",
"name": "region",
"type": "string",
"required": false
}
]
}
],
"relationshipTypes": [
{
"id": "3e4f5a6b-7c8d-5e9f-8a1b-2c3d4e5f6a01",
"name": "mentor_of",
"label": "Mentor of",
"reciprocalTypeId": "3e4f5a6b-7c8d-5e9f-8a1b-2c3d4e5f6a02"
},
{
"id": "3e4f5a6b-7c8d-5e9f-8a1b-2c3d4e5f6a02",
"name": "student_of",
"label": "Student of",
"reciprocalTypeId": "3e4f5a6b-7c8d-5e9f-8a1b-2c3d4e5f6a01"
},
{
"id": "3e4f5a6b-7c8d-5e9f-8a1b-2c3d4e5f6a03",
"name": "friend_of",
"label": "Friend of",
"reciprocalTypeId": "3e4f5a6b-7c8d-5e9f-8a1b-2c3d4e5f6a03"
}
]
}
实体——entities/<id>/<id>.json,每个实体一个文件。必填:id、version 1、entityTypeId、name、tags([] 即可)、attributes、description(Markdown;为空时写 "")、relationships、citations、aiExtracted true、aiVerified false、deletedAt null、createdAt、updatedAt。可选:aliases、cataloguePath(catalogueFolders 之一)、quotes、states。属性写作 {fieldId, name, value: {type: "string", value}},其中 fieldId 是该实体类型中同名字段模板的 id;如果缺少,就把模板加到类型中。
{
"id": "4f5a6b7c-8d9e-5f0a-9b2c-3d4e5f6a7b01",
"version": 1,
"entityTypeId": "1c2d3e4f-5a6b-5c7d-8e9f-0a1b2c3d4e01",
"name": "Mira Vale",
"tags": [],
"cataloguePath": "Characters",
"aliases": [
"the Lamplighter"
],
"attributes": [
{
"fieldId": "2d3e4f5a-6b7c-5d8e-9f0a-1b2c3d4e5f01",
"name": "role",
"value": {
"type": "string",
"value": "lamplighter; Tobin's mentor"
}
}
],
"description": "Mira Vale is the lamplighter of the Lantern Road, which she has walked for thirty years (Chapter 1).",
"relationships": [
{
"id": "5a6b7c8d-9e0f-5a1b-8c3d-4e5f6a7b8c01",
"relationshipTypeId": "3e4f5a6b-7c8d-5e9f-8a1b-2c3d4e5f6a01",
"targetEntityId": "4f5a6b7c-8d9e-5f0a-9b2c-3d4e5f6a7b02",
"direction": "outgoing",
"createdAt": "2026-01-15T12:00:00.000Z"
}
],
"citations": [
{
"id": "6b7c8d9e-0f1a-5b2c-9d4e-5f6a7b8c9d01",
"sourceDocumentId": "7c8d9e0f-1a2b-5c3d-8e5f-6a7b8c9d0e01",
"passage": "Mira Vale had walked the Lantern Road for thirty years.",
"startOffset": 30,
"endOffset": 85
}
],
"quotes": [
{
"id": "6b7c8d9e-0f1a-5b2c-9d4e-5f6a7b8c9d02",
"text": "The road remembers who lights it.",
"category": "dialogue",
"sourceDocumentTitle": "The Lantern Road",
"sourceChapter": "Chapter 1: The Lamplighter",
"pinned": false,
"createdAt": "2026-01-15T12:00:00.000Z",
"updatedAt": "2026-01-15T12:00:00.000Z"
}
],
"states": [
{
"id": "6b7c8d9e-0f1a-5b2c-9d4e-5f6a7b8c9d03",
"milestone": "Chapter 1",
"note": "takes Tobin as her apprentice",
"createdAt": "2026-01-15T12:00:00.000Z"
}
],
"aiExtracted": true,
"aiVerified": false,
"deletedAt": null,
"createdAt": "2026-01-15T12:00:00.000Z",
"updatedAt": "2026-01-15T12:00:00.000Z"
}
关系同时存储在两个实体上,使用同一个关系 id。源实体写 direction "outgoing"、关系类型的 id,以及 targetEntityId = 目标。目标实体写 direction "incoming"、targetEntityId = 源,以及反向类型的 id(对称类型则是同一个 id)——上例中 Tobin 一侧如下:
[
{
"id": "5a6b7c8d-9e0f-5a1b-8c3d-4e5f6a7b8c01",
"relationshipTypeId": "3e4f5a6b-7c8d-5e9f-8a1b-2c3d4e5f6a02",
"targetEntityId": "4f5a6b7c-8d9e-5f0a-9b2c-3d4e5f6a7b01",
"direction": "incoming",
"createdAt": "2026-01-15T12:00:00.000Z"
}
]
先把从反向一侧写的关系翻转到规范一侧,然后每条关系只保留一次(对称类型的 A–B 与 B–A 视为同一条)。丢弃两端是未知键或同一实体的关系。
引用把实体和书的正文连接起来:{id, sourceDocumentId, passage, startOffset, endOffset},其中 passage 必须恰好等于源文本中从 startOffset 到 endOffset 的部分(即下文源文档中的字符位置)。在源文本中查找每条提取的引文——以及每条关系的证据,作为引用记在源实体上:先找精确匹配,再找容忍空白和破折号差异的匹配,先在引文所在章节中查找,再在全书中查找。找不到的引文跳过并计数。引文同时写入 quotes:{id, text, category, sourceDocumentTitle, sourceChapter, pinned, createdAt, updatedAt};把第一条 appearance 引文置顶。状态写作 {id, milestone, note, createdAt}。
源文档——引用需要它:source-documents/<docId>/ 中放一个包含全书的 Markdown 文件(章节按顺序排列,每章以“# ”加标题开头),以及 manifest.json,包含 id、originalFilename、importedAt、fileSize(字节数,UTF-8)、mimeType "text/markdown" 和 chapterCount。
{
"id": "7c8d9e0f-1a2b-5c3d-8e5f-6a7b8c9d0e01",
"originalFilename": "The Lantern Road.md",
"importedAt": "2026-01-15T12:00:00.000Z",
"fileSize": 192,
"mimeType": "text/markdown",
"chapterCount": 1
}
稿件——即 Lokee 写作器中的书:manuscript/manifest.json 为 {version 1, updatedAt, statusLabels, root}。root 中的节点是容器 {id, kind "container", label, titleCache, children} 或叶节点 {id, kind "leaf", label, titleCache};用容器表示卷或部,每章一个叶节点。每个叶节点有一个文件 manuscript/containers/<leafId>.md,无论在树中多深都直接放在 containers/ 下:YAML 前置元数据包含 id、title、status(statusLabels 之一)、wordCount、linkedEntities [] 和 updatedAt,每个值都写成 JSON 值(字符串加双引号,这样日期保持为文本),随后是不含标题行的章节正文。
{
"version": 1,
"updatedAt": "2026-01-15T12:00:00.000Z",
"statusLabels": [
"draft",
"revised",
"final",
"archived"
],
"root": [
{
"id": "8d9e0f1a-2b3c-5d4e-9f6a-7b8c9d0e1f01",
"kind": "container",
"label": "Book",
"titleCache": "The Lantern Road",
"children": [
{
"id": "8d9e0f1a-2b3c-5d4e-9f6a-7b8c9d0e1f02",
"kind": "leaf",
"label": "Chapter",
"titleCache": "Chapter 1: The Lamplighter"
}
]
}
]
}
---
id: "8d9e0f1a-2b3c-5d4e-9f6a-7b8c9d0e1f02"
title: "Chapter 1: The Lamplighter"
status: "final"
wordCount: 26
linkedEntities: []
updatedAt: "2026-01-15T12:00:00.000Z"
---
Mira Vale had walked the Lantern Road for thirty years.
“Hold the lamp higher,” she told Tobin, her new apprentice. “The road remembers who lights it.”
故事事件——事件大纲:每章一个主事件(parentId null,order = 章节位置,一个链接 {kind "chapter", id: 叶节点的 id}),其下是本章的情节节点(parentId = 主事件的 id,order = 在本章中的位置,链接到本章以及参与的实体和地点)。必填:id、parentId、order、title、description(Markdown)、links(kind 为 "entity"、"chapter" 或 "note")、causalLinks []、aiExtracted true、aiVerified false、deletedAt null、createdAt、updatedAt。在描述开头标注剧透。
[
{
"id": "9e0f1a2b-3c4d-5e5f-8a7b-8c9d0e1f2a01",
"parentId": null,
"order": 0,
"title": "Chapter 1: The Lamplighter",
"description": "",
"links": [
{
"kind": "chapter",
"id": "8d9e0f1a-2b3c-5d4e-9f6a-7b8c9d0e1f02"
}
],
"causalLinks": [],
"aiExtracted": true,
"aiVerified": false,
"deletedAt": null,
"createdAt": "2026-01-15T12:00:00.000Z",
"updatedAt": "2026-01-15T12:00:00.000Z"
},
{
"id": "9e0f1a2b-3c4d-5e5f-8a7b-8c9d0e1f2a02",
"parentId": "9e0f1a2b-3c4d-5e5f-8a7b-8c9d0e1f2a01",
"order": 0,
"title": "Mira takes Tobin as her apprentice",
"description": "On the Lantern Road, Mira teaches Tobin to hold the lamp high.",
"links": [
{
"kind": "chapter",
"id": "8d9e0f1a-2b3c-5d4e-9f6a-7b8c9d0e1f02"
},
{
"kind": "entity",
"id": "4f5a6b7c-8d9e-5f0a-9b2c-3d4e5f6a7b01"
},
{
"kind": "entity",
"id": "4f5a6b7c-8d9e-5f0a-9b2c-3d4e5f6a7b02"
}
],
"causalLinks": [],
"aiExtracted": true,
"aiVerified": false,
"deletedAt": null,
"createdAt": "2026-01-15T12:00:00.000Z",
"updatedAt": "2026-01-15T12:00:00.000Z"
}
]
笔记:notes/<id>/<id>.json 为 {id, title, body (Markdown), tags, links, deletedAt null, createdAt, updatedAt}。写一条笔记,说明这个世界库是由 AI 智能体根据书的正文生成、尚未核实,并列出你在书中注意到的连续性问题(名称、年龄、日期、描写上的矛盾)。
{
"id": "a0f1a2b3-4c5d-5e6f-9a8b-9c0d1e2f3a01",
"title": "About this vault",
"body": "Generated by an AI agent from the text of *The Lantern Road*. Everything extracted is unverified until reviewed.\n\n## Continuity notes\n- None found yet.",
"tags": [
"meta"
],
"links": [],
"deletedAt": null,
"createdAt": "2026-01-15T12:00:00.000Z",
"updatedAt": "2026-01-15T12:00:00.000Z"
}
最后,创建空文件夹 {VAULT_FOLDER}/.cache,并在世界库文件夹旁边再写一个用于导入的 zip:包含 {VAULT_FOLDER} 中的文件,project.json 位于压缩包根目录(不在子文件夹里),parentId 为 null 的事件文件排在其他事件文件之前,且不含 .cache 文件夹。
输出:每种类型的实体数、关系数、引用数、未找到的引文数、故事事件数、稿件章节数,以及文件夹和 zip 的路径。提示词 6
检查世界库
在 Lokee 中打开世界库之前运行一次。
在我打开之前,检查 {VAULT_FOLDER} 中的 Lokee 世界库。编写并运行一个脚本;未经我同意不要做任何修改。
- 每个 JSON 文件都能被解析。project.json 包含 id、version、name、createdAt、updatedAt、entityTypes 和 relationshipTypes,且没有构建提示词所列之外的字段。
- 每个实体的 entityTypeId、每个属性的 fieldId 和每条关系的 relationshipTypeId 都存在于 project.json 中,每个 reciprocalTypeId 都指向一个存在的类型。
- 每个关系 id 恰好出现两次:在源实体上作为 "outgoing" 出现一次,在目标实体上作为 "incoming" 出现一次,且各自指向另一个实体。
- 每条引用的 sourceDocumentId 在 source-documents/ 中都有对应文件夹,其 passage 等于源文本中 startOffset 与 endOffset 之间的内容。
- manuscript/manifest.json 中的每个叶节点都有对应的 .md 文件,每个 .md 文件也都在清单中。前置元数据的值都带引号。
- 每个故事事件的 parentId 要么为 null,要么是某个存在事件的 id;每个实体或章节链接都指向存在的对象。
- 文件夹 {VAULT_FOLDER}/.cache 存在;zip 的根目录有 project.json,且不含 .cache 文件夹。
- 对照原书抽查五个实体:名称、一条引文和一条关系。
列出每个问题及其所在文件,然后提出修正方案——修改构建脚本,而不是修改生成的文件。