博客
技术深度解析

Wiki knowledge engine:规则、指南与综合

Simmetric Chat 的 wiki engine 如何以三层指令模型治理归档写入 —— 由代码强制的 hard rules、顾问性质的每个归档 schema prompt、结构化字段 —— 以及优先级链在实践中意味着什么。

Simmetric Team7 分钟阅读11/10/2026
Wiki knowledge engine:规则、指南与综合

在写好的轨道上自组织知识

当对话被归档进共享知识库,问题就不再是"能不能存页面",而是"谁可以在哪、以谁的声音写什么"。Simmetric Chat 的 wiki engine 用一个三层指令模型回答每个归档:由代码强制的规则、作为数据携带的每个归档编辑性 prompt、以及描述期待行为的结构化字段。那个停下来的心智模型:每个归档的 schema prompt 之于 wiki,如同 CLAUDE.md 之于代码仓库 —— 天性是顾问性的,实践中很有力,但从来不是法律。

本文是设计的走读:三层结构、每一层能做什么不能做什么、它们分歧时的优先级链,以及让承诺的机器可读一半为真的两个 builtin skill(wiki_query、wiki_write)。

第 1 层:hard rules,由代码强制

第一层无条件、与配置无关 —— 它看守一切:

  1. 文件系统守卫。 validateWritablePath 拒绝任何在 <archiveBase>/wiki/ 之外的写入目标:反穿越检查先行,然后是 wiki/ 前缀检查。wiki/ 外的目标抛出命名的错误,createPage 与 updatePage 都在任何文件 write 之前调用守卫。raw_sources/ 按设计不可变 —— 没有任何 API endpoint 会在那之下写入。
  2. 提示层镜像。 一个始终激活的块附加到每个归档相关提示的末尾,措辞镜像文件系统守卫(raw_sources/ is immutable)。模型根本不会尝试离开 wiki/ 的出路 —— 即便尝试,代码保证什么都落不了地。

成对的设计是有意的:提示让模型诚实,代码让系统安全。信任住在第二个属性里,而不是第一个。

第 2 层:每个归档的 schema prompt

schema prompt(schemaPrompt)是持久化在归档 config JSON 里的自由文本顾问字段:

  • 形状: 至多 10000 字符(≈2500 tokens),位于归档的 config schema 内 —— 一个增量键,零迁移。
  • 验证: 每次 write 经 PUT /api/archives/:id/config 做 Zod 校验;超限 payload 会被一个点名该字段的 400 拒绝。
  • 读合约: 没有已存行的归档读 schema 默认 config(首次写入路径);有行的归档按字面返回已存 blob。超过限度的 legacy blob 在注入时以显式注记截断,从不是静默剪裁或重新验证。
  • 天性顾问: 该块以数据身份带着显式的顾问标签进入提示 —— 从不是 system prompt 层级的特权授权。除长度限度外没有其他净化;矛盾指令是已被接受的质量风险,由界面里的帮助文本与模板缓解。

第 2 层是组织编辑嗓音住的地方:命名约定、页面结构、对来源的期待。它是指导 —— 引擎也恰好如此对待它。

第 3 层:结构化字段

Persona、purpose、scope —— 归档的结构化描述 —— 由既有配置注入提示路径。它们描述默认值;两者并存时,第 2 层覆盖它们。

优先级链

text
hard rules(代码) > schema prompt(顾问) > 结构化字段
  1. schema prompt 永远无法胜过 hard rules —— 提示宣告,代码强制。
  2. 与结构化字段冲突时,schema prompt 胜出。
  3. 没有 schema prompt 的归档表现为 baseline 加 hard rule —— 零增强,零退化。

第三行对操作者的心智账本有意义:一个空的顾问字段是已完成的配置,不是缺失。不存在围着提示打转的空白占位节。

顾问块落在哪里

注入有明确的 seams,各自的块进入请求的 system prompt,位置在检索规则块之后、workspace 自身的 system prompt之前:

  • 聊天 orchestrator(流式与非流式两条路径)—— hard rule 永远在;归档有顾问块时随之同行。
  • 综合管线的决策 pass —— 顾问块携带 SYSTEM 角色出现在那里,而更早的 passes(检索、草稿、矛盾判定)按设计不带它运行。

wiki_query 与 wiki_write:两个 builtin

builtin wiki_query 与 wiki_write 是执行路径不做任何 LLM 调用的 skill —— 写路径完全以代码生成确定性的预览。架构后果很锐利:per-skill 注入不会到达任何模型,所以 wiki 唯一的 LLM-facing 表面是 orchestrator 的 system prompt。wiki 的写行为 = 上面三层;wiki 的读写功能 = 平实、可审计的代码。

为什么这个结构站得住

三个属性,组合起来:

  • 底部的不变性 —— raw_sources/ 任何人都改不了,包括模型(守卫 + 始终激活的块)。
  • 顾问纪律 —— 编辑指导以打标的条目进入,可在配置编辑层面审计,从不是特权。
  • 确定性的 builtin —— 归档自己的读写表面无需模型即可运行,因此保证不依赖模型的判断。

引擎的承诺 modest 却承重:知识在写好的轨道上自组织,恰好到轨道决定的地方为止。Simmetric Chat 的操作者仍为轨道的作者 —— 这才是整个设计安静的核心。

继续阅读

操作指南带着字段级表格与 endpoint 合约,在 /zh/docs/wiki-knowledge-engine:

Provenance:Simmetric Chat 的 docs/WIKI_SCHEMA_LAYER.md(v0.28.1,Phase 187/194)、packages/server/src/utils/archivePath.ts 中的 validateWritablePath、orchestrator 的注入 seams、CHANGELOG.md v0.28.1 —— 处于 census 固定的文档状态(SHA aca5b8ff)。

相关文章