Wiki 知识引擎 — 有架构约束的档案、wikilink 与综合摘要
Wiki 引擎给每个档案一个三层指令模型:由代码强制执行的硬规则、每个档案各一份的架构 prompt(advisory 性质的编辑准则)以及结构化字段(persona、purpose、scope)。心智模型:schemaPrompt 之于 wiki,如同 CLAUDE.md 之于一个代码仓库。
Wiki 引擎给每个档案一个三层指令模型:由代码强制执行的硬规则、每个档案各一份的架构 prompt(advisory 性质的编辑准则)以及结构化字段(persona、purpose、scope)。心智模型:schemaPrompt 之于 wiki,如同 CLAUDE.md 之于一个代码仓库。
Community 功能。Wiki Schema Layer 的运维参考(Phase 187,在 v0.25 屏障时已审计 — WIKS-01/02,已对运行中代码验证)。来源:docs/WIKI_SCHEMA_LAYER.md(v0.28.1)。来源行:FACT-CENSUS.mdF-WIKI-1。
三层模型
| 层 | 性质 | 执行方式 | 范围 |
|---|---|---|---|
| 硬规则 | 代码强制、无条件 | validateWritablePath + 始终注入的 prompt 块 | 每条与档案绑定的写入路径 |
| schemaPrompt | 每档案的编辑准则 | 仅数据 + prompt(绝不是一道屏障) | 按档案,opt-in(留空 = 关闭) |
| 结构化字段 | 按配置注入的 persona/purpose/scope | 既有的 synthesis/orchestrator 行为 | 按档案,不变 |
硬规则(code-enforced)
两个无条件机制,不依赖任何配置:
- 文件系统守卫。
validateWritablePath(packages/server/src/utils/archivePath.ts:39-54)拒绝任何位于<archiveBase>/wiki/之外的写入目标:先做反 traversal 检查(validateArchivePath),再做wiki/前缀检查 — 位于wiki/之外的目标会抛出Write target outside wiki/ directory: <path>. raw_sources/ is immutable.createPage与updatePage都会在任何fs.writeFile之前调用它。没有任何 API endpoint 会写入raw_sources/之下 — 它按设计不可变。 - prompt 层之上的镜像。
HARD_RULE_RAW_SOURCES(archiveConfigService.ts:52-53)是一个始终开启的块,附加到每段与档案绑定的 prompt:其措辞镜像守卫(raw_sources/ is immutable),使模型连尝试钻出wiki/的念头都不会有 — 即便有,代码也保证什么都不会落地。
schemaPrompt(advisory)
一个自由文本字段,持久化在档案的配置 JSON 中:
- 架构:
archiveConfigSchema上的schemaPrompt: z.string().max(10000).optional()— 一个增量键,零迁移。10000 字符 ≈ 约 2500 tokens。 - 验证: 每次写入都做 Zod 验证(
PUT /api/archives/:id/config);超出上限的 payload →400 { error: "Invalid config", details.schemaPrompt }。 - 读取契约: 对没有存储行的档案执行
GET /api/archives/:id/config→200返回架构默认配置({ rawSourcesImmutable: true }):这就是首次保存的加载路径;有行的档案原样返回保存的 blob。 - 注入时的上限: 超过 10000 字符的旧版 blob 在注入时以
(truncated at 10000 characters)标注截断 — 旧行在读取时绝不再校验。 - 按设计是 advisory: 该块以数据身份进入,带明确的 advisory 标注,绝不是 system prompt 的权限授予。除长度上限外无任何过滤;自相矛盾的指令 = 一个被接受的品质风险,由 UI 的提示文字与模板缓解。
优先序
硬规则(代码) > schemaPrompt(advisory) > 结构化字段- schemaPrompt 永远不能压过硬规则(prompt 声明了这一点;代码强制执行)。
- 与结构化字段冲突时,schemaPrompt 胜出(
On conflict with the structured fields (persona, purpose, scope), these guidelines take precedence over them.)。 - 没有 schemaPrompt 的档案按基线 + 硬规则运行 — 零增强、零退化(prompt 中不会出现空白占位段)。
块在 prompt 中的落点
| 衔接点 | 位置 | 说明 |
|---|---|---|
| Chat orchestrator(非流式) | orchestrator.ts:295-302(runAgent) | 硬规则始终在 + advisory 块存在时追加 |
| Chat orchestrator(流式) | orchestrator.ts:805-812(runAgentStreaming) | 流式孪生,顺序相同 |
| Synthesis Pass 4(决策) | synthesisStages.ts:784-788 | advisory 块挂在 SYSTEM 角色上;Pass 1/2 与矛盾判定保持 undefined |
在 system prompt 内部:位于 MANDATORY SEARCH RULE 块之后、systemPrompt 三元式之前。
wiki_query 与 wiki_write
内置的 wiki_query 和 wiki_write 是其 execute() 路径完全不调用 LLM 的 skill:写入路径生成确定性的预览(wikiWriteService.ts 内没有 LLM 调用)— 按 skill 注入到不了任何模型;面向 LLM 的唯一表面是 orchestrator 的 system prompt。
rawSourcesImmutable
archiveConfigSchema 上的 rawSourcesImmutable: boolean(默认 true)是一个文档性标志,绝不是执行开关:不可变规则无论该标志为何都成立(validateWritablePath 守卫 + 始终开启的块作保证)。
本指南介绍Wiki 引擎的操作面;工程深潜见孪生博文:
Provenance
| 章节 | 来源 |
|---|---|
| 三层模型 / 硬规则 | docs/WIKI_SCHEMA_LAYER.md(§ The 3-layer model, § Layer 1)— F-WIKI-1 |
| schemaPrompt / 优先序 / 衔接点 | docs/WIKI_SCHEMA_LAYER.md(§ Layer 2, § Precedence chain, § Injection seams) |
| 审计 | Phase 187 commits;在 v0.25 屏障定稿(WIKS-01/02, Phase 194) |
---
运维参考 — Simmetric Chat v0.28.1(文档更新于 2026-10-02,普查 SHA `aca5b8ff`)。