☰
utopia 本体分层决策实践:为什么“本体是文档陈述之上的视图“成为抽取与知识组织的核心契约
2026/9/25 4:51:13 网站建设 项目流程
  • 后端
  • 前端
  • 人工智能
  • RAG
  • 知识图谱
  • 知识管理
  • 搜索引擎

【免费下载链接】utopia

World's first open-source enterprise world model.

项目地址:https://gitcode.com/gh_mirrors/ont/utopia
点击查看免费下载

导读:本文基于 utopia 项目决策记录 0044-the-ontology-is-a-view-over-what-documents-say.md,系统讲解其核心技术主张——把知识抽取拆成"开放图谱(文档自己的话)→ 本体(人工治理的词汇)→ 类型化图谱(按签名对齐计算)"三个层次,并给出实测数据、落地约束与当前实现状态。读完你能够理解:为什么写时绑定的旧路径会诱发幻觉事实;签名对齐为什么按短语成本增长而不是按文档增长;时间与身份如何沿用同一套"证据优先"哲学;以及这套设计在 utopia 仓库(crates/utopia-extract、crates/utopia-store、docs/design/extraction.md、docs/design/ontology.md)中的真实落点。

背景:写时绑定为什么是错误答案

在旧路径中,抽取模型在写入事实的那一刻就把每个事实绑定到知识库本体的某个属性上:本体(整体或裁剪后)被塞进提示词,找不到属性的陈述退化为未绑定提议。第一版决策记录针对时序语料做的审计给出了三个刺眼数字:

  • 59% 的事实未绑定;
  • 1,093 个不同的谓词;
  • 五分之一的实体靠描述命名(没有名字、只有描述性短语)。

直觉上的补救是围绕"同一个绑定动作"多加几个阶段(分级卡片、分档提及、写时绑定陈述)。但 2026-09-15 的原型直接测试了"绑定动作本身",结论是:错误就住在绑定动作里。原草案(skim card、graded mentions、写时绑定)因此被废弃,取而代之的是本文介绍的三层架构。

关联决策记录:0022(文档日期与 attested_at)、0041(名字即事实、身份靠证据)、0043(每条评审队列都过 governor),以及 #714(发现抽取误用上传时间当文档日期)。

原型测量:八个被数字钉死的结论

原型设置:DeepSeek-V4-Flash(关闭思考)负责抽取与 agent,DeepSeek-V4-Pro 担任裁判(校准集 24 条人工标注事实,命中 21 条);语料为 Re-DocRED 测试集抽样的 100 篇维基引言(3,462 条金标准三元组、95 个 Wikidata 属性)加 scripts/bench/recall.mjs 的 FDA、统计公报、SEC 语料。多个结论需要先划清边界:不报 F1——Re-DocRED 金标准遗漏大量真实事实,精确率被系统性低估且各方案低估程度不同,调和均值无可比性;精确率一律指校准裁判的判定,召回率指金标准事实的恢复率(每一条金标准事实都为真,故召回可靠)。单次运行计数为主;同一配置在 50 篇文档上跑三次,裁判精确率波动约 4 个点、金标准召回波动 1 个点。

1. 用文档自己的话写陈述是忠实的

两套抽取提示词产出的 333 条开放陈述中,裁判认定0 条文档未陈述、2% 措辞错误。对照写时绑定:

10 篇 Re-DocRED 文档陈述数已陈述已陈述但措辞错未陈述
开放陈述,完整抽取提示词19297.9%2.1%0
开放陈述,紧凑单调用提示词14198.6%1.4%0
写时绑定,仅属性名7874.4%16.7%9.0%
写时绑定,带定义11479.8%15.8%4.4%

写时绑定里那些"文档根本没说过"的事实,正是被属性清单诱导出来的:一个奖项被写成了流派(genre)、一个县被给了 notable work、一位十七世纪国王被安上了现代国籍。忠实性差距的机制在 crates/utopia-extract/src/open.rs 有源码级印证:系统消息的规则 8 明确写 "State nothing the passage does not state",提示词中不含文档日期、类型清单、关系清单、属性清单,测试the_prompt_carries_no_ontology_and_no_document_date逐一断言这些都不会泄漏进提示词。

2. 事后绑定丢的比留的多

把开放陈述对齐到已有本体:在 FDA/统计公报/SEC 三个语料上,4/113 条陈述绑到了 567 个短语组对应的 schema.org 属性;对 Re-DocRED 自己的 95 个属性只恢复 5.6% 的金标准事实,而提示词内带属性抽取可恢复 15.3%。损失来自隐含事实——"a 1952 British film"暗含国家属性——这类事实开放陈述并未以陈述形式说出。

3. 金标准重叠低估了精确率

Re-DocRED 仍遗漏大量真实事实:切片抽取的严格精确率为 37.8%,而校准裁判接受 76.1%。人工复核 30 条不匹配事实:9 条正确、5 条属性近义、6 条有争议、10 条错误。顺序结论(哪种方案更优)在严格与裁判精确率下都成立,下文引用的都是裁判判定值。

4. 结构完整时,大本体可逐文档切片

95 个基准属性藏在 872 个 schema.org 属性中,每篇文档获得约 133 个属性的切片,覆盖其金标准三元组所用关系的86.6%。切片构成:属性定义域/值域与文档实体类别匹配(单用 34.0%)、与陈述短语最接近的属性(单用 28.9%)、以及所有未声明定义域的属性(最常用的 country、located-in 都没有定义域)。没有类层级与 Wikidata–schema.org 等价关系时,结构部分只能找到 10%。用切片抽取达裁判精确率 71.2%、金标准召回 12.4%;直接用 95 属性为 77.8% / 15.3%;把 Wikidata 声明等价的 49 个 schema.org 属性并入切片后升至 75.3% / 13.8%。

5. 开放与绑定抽取独立运行才互补

开放陈述与绑定事实取并集后,链接了46.8%的金标准实体对(开放单独 38.4%、绑定单独 34.5%),恢复 16.0% 金标准事实。把开放陈述作为上下文喂给绑定通道反而把召回压到 42.9%。

6. 抽取之后,agent 可以纠错

errata agent 用工具(读文档、查属性定义/约束/上位属性/逆属性、撤销/修订/新增)审了 99 篇文档的全部事实:裁判精确率从 76.1% 升到 89.5%,金标准召回从 13.8% 微变到 13.6%;它撤销 278 条、修订 42 条、新增 49 条,而裁判认定正确的事实从 871 降到 814——被它删掉的事实约有四分之一本来是对的。另:从半数文档学来的 agent 用法说明(usage notes)投给另一半文档的抽取,效果不比同长度的泛化告诫更好。

7. 成本

一篇 165 词文档,完整原型约烧23,000 提示词 + 7,200 完成词元。紧凑管线(实体扫描、缓存类型映射、一次抽取调用、仅对标记事实做 errata)为 3,449 + 753;同一批 10 篇文档上达裁判精确率 80.0%、金标准召回 15.1%(完整原型的 errata 后绑定事实为 85.9% / 18.9%)。实体类型词→类映射按库缓存:第二轮跑同样文档只遇到 5 个新词(首轮 54 个),这是"代价随不同说法增长、不随文档增长"的量化证据。

8. 运营型本体平台不从文本归纳本体

其对象类型、链接、动作由构建者按用例设计、以人工策展数据集支撑;语言模型抽取进的是构建者已塑形的表,编辑回放到底层数据。utopia 走的不是这条路。

核心决策:三层架构与"本体"一词的唯一含义

决策 1:三层,且"本体"只指中间那层

  • 开放图谱(open graph):保存文档所说——实体及其名字与种类词、关系为文档短语的陈述(含参与者、限定词、时间提及、引文)。不需要本体,本体变成什么样它都保留。
  • 本体(ontology):对象类型、链接类型、属性,各自带定义、示例、回归用例,另有约束与动作;体量小、由知识库要回答的问题塑形、在记录轴(recorded axis)上版本化。
  • 类型化图谱(typed graph):用本体词汇表达的事实,由开放图谱计算而来,并标记其计算时所依据的本体版本。

本项目中"本体"这个词只指第二层。

决策 2:抽取只写开放图谱,别无其他

每块一次调用、紧凑契约(数组、短键、不重复名字)、提示词里没有本体。抽取器输出:带种类词的实体、用文本原词写的陈述、作为被描述事物属性的数字与标题、照原文写的时间提及、文档给的其他名字。代码校验名字与引文确实出现在该块中——服务端校验在 crates/utopia-server/src/extraction_open.rs 逐个实现为 drop 原因(quote_not_in_chunk、name_not_in_text、time_not_in_quote、unknown_ref、object_undeclared、name_claimed_by_another等),偏移由服务端定位引文计算、绝不信模型报的数字。

紧凑契约的 JSON 形状(来自 open.rs 的系统消息与解析结构):

{"e": [["Harbor Bridge", "bridge", 1], ["farmland", "land", 0]], "s": [["The city council awarded the paving contract to Brightway Builders for $2 million on March 4, 2011.", "city council", "awarded", "paving contract", null, {"to": "Brightway Builders", "amount": "$2 million"}, "March 4, 2011", null]], "n": [["Brightway Builders", "Brightway", "Brightway Builders, known locally as Brightway, is based in Port Ellen."]]}

字段语义要点:

  • e(实体):[名字或描述, 种类词, named]。named=1 是原文点名的专名或固定术语(人、组织、产品、地点、文件、法律、事件,以及在任何文档中含义一致的疾病、药物、行业、品类、指标),名字不带引述语、不带数字("about 40 hectares of farmland" 是实体 "farmland" 加一条area陈述);named=0 是角色或泛指短语("the company"、"patients"、"各部门"),无论在此处多具体。无 id。
  • s(陈述):[引文, 主语名, 短语, 宾语名或 null, 字面值或 null, 限定词对象或 null, 何时或 null, 何时终止或 null]。引文在第一格——先抄原句、再据其写陈述(先引后述,实测这比带编号的版本可靠得多);主语/宾语是e或已知清单里的名字、拼写完全一致;宾语与字面值恰有一个;超过两方参与或链接带数额/头衔/条件/比较时,主对进主宾、其余进限定词(键为原文说明角色的一两个词);when/ended照原文的字抄,从不计算。
  • n(别名):[e 里列的名字, 本段用的另一个名字, 引文],只收原文真写了的名字。

为什么用名字 + 逐条引文而不是编号:编号版在密集财报段落上实测会把 id 串位("NVIDIA has reached AI"、"tokens are tokens",原文是 "AI has reached its inflection point"),同一块两次回复编号不一致;原型"名字 + 逐条引文"版 333 条 0 条编造。多花的 token 买的是不串位——这正是决策 2 "紧凑契约"与"忠实优先于省钱"之间的平衡点。

决策 3:对齐产出类型化图谱——绑定与蕴含规则

对齐是评审工作台(review workbench)对开放图谱的一次操作,按签名(signature)裁决、绝不逐条事实裁决。签名 = 短语 + 主语类别 + 宾语类别(宾语为字面值时记"值")。对齐产出两类东西:

  • 绑定(binding):该签名是这个属性、这个方向,或不是。绑定按库缓存、带置信度与本体版本,签名再现即复用——代价随不同说法增长,而不是随文档增长。候选来自属性声明:定义域与值域同时接纳两端(任一方向均可;未声明的一端接纳一切);模型看到签名下的三条陈述与引文,两次投票(候选顺序相反)必须就属性与方向一致(forward = 陈述主语是属性主语,reverse = 反之)才绑定。投票分歧记为undecided进 #725 的对齐队列;没有可匹配属性的记为none,其陈述留在开放图谱并计入工作台建议。
  • 蕴含规则(implication rule):某形状的陈述蕴含某属性的一个事实,值取自陈述的一侧,或由一条**已声明的读法(reading)**从宾语短语读出(国籍形容词所指的国家、短语给出的年份)。对齐器提议规则、工作台批准、代码执行;读法对每个不同短语应用一次并缓存;规则产出的事实标记为 implied。

对齐读来源:裁决签名与应用读法都能看到陈述所在的块,所以"located in the Piedmont region of the Commonwealth of Virginia"能像读者一样既绑定到属性又绑定到那个事物。对齐是按签名组织的文本类型化解读,开放图谱是指数、文本是证据;它与写时绑定的区别是:没有开放陈述或规则背书的事实绝不写入,本体变化也绝不重抽取文档。

这正是读者不靠文本陈述就能得出的隐含事实(从地区推国家、从 "British film" 推国家)进入类型化图谱的路径——不需要第二遍绑定本体的抽取。首个对齐原型只读陈述:30 篇 Re-DocRED 文档靠绑定恢复 6.5% 金标准事实、靠规则恢复 10–12%(绑定通道为 15.5%),差距恰在"对齐器没读文本"之处。因此文档明确保留了一条过渡条款:在对齐两次干净运行追上绑定通道之前,经批准的本体下仍可保留带本体切片的绑定通道,但其事实必须挂到开放陈述上或标记为 implied。

本体变化时,只有签名或规则发生变化的事实被重算;无属性的签名留在开放图谱、什么都不损失、只向工作台贡献建议。后续决策 0051 继续补完交付语义:人工绑定可能晚于运行中对齐器的最后一次读取而提交,因此提议"每个已接受的人工短语绑定都配一个同事务提交的物化专属任务",杜绝"另一个任务正在跑所以跳过入队"的猜测性交付。

决策 4:本体由工作台从三个来源构建

本体页面变为工作台,元素来自三处:

  1. 开放图谱的建议:最频繁的未绑定签名、使用中的类型词、以及一个本体 agent——它把这些对照**能力问题(competency questions)**阅读,提议对象类型、链接类型、属性与规则(含定义、示例、它们会绑定的签名);
  2. 导入文件:0008 的 pack、schema.org、OWL 或 JSON-LD 文件;
  3. 在线编辑。

人通过动作(actions)批准;每个获批元素都携带从开放图谱取回的回归用例,改定义即重跑。本体的验收标准是:能力问题能否被正确回答。切片与规则所依赖的结构(类层级、等价关系、定义域、值域)是批准的一部分,重复属性作为治理的一部分合并。预置本体来源可参考 utopia-server/packs(schema-org、w3c-org、prov-o、foaf、iof-core 五个内置包,决策 0008)。

决策 5:时间像身份一样靠证据解决

  • 时间提及是一条带引文的事实,挂在它定时的陈述上。
  • 抽取在块间携带文档时间上下文:文档自身日期(取自内容或来源系统,绝不取上传时刻,见 #714)、叙事设下的锚点、以及文档定义的日历(财年、报告期)。
  • 模型返回的是解释而非日期:绝对,或锚点加偏移;一个粒度;点、区间或 as-of。区间由代码计算。
  • 锚点未知的提及保留原词等待;稍后出现的锚点(本文档或另一文档)触发重算。
  • 三个时间始终分开:陈述成立时(valid time)、文档观察到它时(文档自己的日期)、账本得知它时(recorded time)。

落库口径见 docs/design/ledger.md 与 crates/utopia-server/src/extraction_open.rs 的dated_at:attested_at仅当doc_time_source为content或source时才使用,上传时刻与文件修改时间都不是文档说的日期。时间的字面解析与粒度由 crates/utopia-extract/src/time.rs(规则 3 契约格式 YYYY[-MM[-DD]]、带时区时刻、written_date的宽容读法)支撑,关联 决策 0045。

决策 6:跨文档身份靠证据裁决

每篇文档的实体(按名字与已声明别名在文档内合并)以名字、类别、属性、邻居与时间跨度画像;候选来自名字事实与跨脚本的名字向量。确定性证据为每对候选打分并尽可能一锤定音:名字与邻居一致加分,类型/属性/寿命冲突判 cannot-link。只有未决对才进 adjudicator——它看到的是两份画像而不是两份文档。聚类尊重 cannot-link(A≈B 且 B≈C 不会无视证据把 A 与 C 合并);新证据重估旧合并;合并或分裂都是可回滚的动作。改名保留一个实体、名字在不同时间有效;"某公司首席执行官"这类角色不是实体。

决策 7:errata agent 在抽取之后审类型化图谱

审结构标记的事实(主体/客体超出属性声明的种类、文档里找不到的名字、日期属性没有日期),再抽样其余;对分给它的每条事实先核后加;按每文档预算执行 JSON 动作协议;每次撤销/修订作为带文档原词证据的动作记录。其度量是"精确率增益 ÷ 删除的正确事实数"——与原型第 6 条测量的口径一致。

决策 8:词典仍然是受治理的数据

别名表、绑定、cannot-link 列表、地名表(gazetteers)都是带来源(provenance)的数据,像事实一样被评审,绝不成为代码里的列表。对应源码中 crates/utopia-store/src/phrase_bindings.rs、crates/utopia-store/src/type_bindings.rs 的表设计。

明确不做的事

  1. 写时绑定本体——正是它产生了上面测出的抽取错误,并把每篇文档绑死在一个本体版本上;
  2. 把通用本体放进提示词——知识库的本体随使用增长,切片取决于文档,绑定发生在签名上;
  3. 从部分语料学用法说明去重抽其余——实测不比泛化告诫更好;
  4. 模型算日期,或用上传时间当文档日期;
  5. 代码里的词表——名字、后缀、关系形状、时间表达都不许写死在代码里。

"不做"清单与 docs/design/extraction.md 的 Why 一节互相印证:无本体提示词(1,010 类本体单块烧 108k 词元且让模型选得更差)、模型不算日期(模型内部算术无迹可循、"today" 曾按上传日解析)、代码只查结构不查词汇(名字因在文本里而被保留,不是因为某张表说它是名字)。

测量纪律与发布阈值

每刀(cut)至少报三个领域、每配置两跑、并声明裁判校准。各领域指标如下:

对象基准数字
开放图谱Re-DocRED(100 篇)+ FDA/统计公报/SEC 语料未陈述与措辞错误(裁判)、实体对召回、每文档词元数
类型化图谱Re-DocRED 用其 95 属性当已批准本体裁判精确率(附人工标注集的裁判一致性);金标准召回(按两端是否同句拆分);语料增长时每文档成本。严格精确率/召回/F1 仅在对照已发表结果时给出
本体FDA/统计公报语料 + 书面能力问题答对问题数;人对建议的改动占比
时间temporal.mjs、lease bench、SEC 财期、统计公报归一化值与粒度、陈述有效时间、as-of 回答
跨文档身份identity.mjs;共享非位置实体或异类型同名者的 Linked-Re-DocRED 文档(GPL-3.0,保留在仓库外)成对精确率与召回,错误合并与漏并分开计;每千实体 adjudicator 调用数
errata类型化图谱 bench精确率增益、删除的正确事实数、词元数

一刀落地前的门槛:开放图谱未陈述 ≤ 2% 且实体对召回不低于现状;类型化图谱在同样的 Re-DocRED 文档上,裁判精确率 ≥ 完整原型(errata 前 100 篇样本 75.3%)、且"两端同句"金标准事实的召回 ≥ 原型,各报两跑,每文档词元 ≤ 原型的五分之一。跨句事实的召回只报告、等推导规则(derivation rules)来了才转正为门槛。

发布节奏(Cuts)与当前状态

  1. 开放图谱入账本:陈述、时间提及、名字在两个时钟上带来源;紧凑抽取契约藏在 flag 后——已建成(#731;记忆文档同路径 #735;类型化路径删除 #736);
  2. 对齐:signature → 属性/方向/置信度/本体版本的表;蕴含规则与缓存读法;类型化图谱的物化与重算——未建成(原型与 0051 处于契约评审中);
  3. 时间上下文与代码化时间提及解析(关闭 #714)——建设中;
  4. 身份证据:画像、确定性打分、cannot-link、约束聚类;0041 第 2 刀的名字向量——建设中;
  5. 本体 agent 与能力问题;定义上的回归用例——未建成;
  6. 走 gate 的 errata agent——未建成。

今天的抽取器保持原样直到第 2 刀通过门槛。当前状态与细节以 docs/design/extraction.md 和 docs/design/ontology.md 为准。从源码结构可以确认的既有实现包括:开放抽取契约与解析(crates/utopia-extract/src/open.rs)、种类词→类与短语→属性的两个对齐提示词/解析(crates/utopia-extract/src/align.rs、crates/utopia-extract/src/phrase_align.rs)、类型化图谱的集合式物化重算(crates/utopia-store/src/materialize.rs,含pg_advisory_xact_lock串行化与幂等重算)、绑定表(crates/utopia-store/src/phrase_bindings.rs)、开放写入路径(crates/utopia-server/src/extraction_open.rs)。

开放问题

  • 查询如何读取部分物化的类型化图谱,以及何时 eager 物化;
  • 推导规则能否找回写时绑定曾找到的隐含事实(Re-DocRED 的 country 与 located-in 关系占其实体对的五分之一);
  • 尚无能力问题的新知识库如何起步;
  • 确定性证据在需要 adjudicator 之前能解决多少身份问题。

延伸阅读(仓库内)

  • 抽取契约现状:docs/design/extraction.md(输入输出、drop 原因、阈值与基准、被取代的旧契约)
  • 本体现状与表结构:docs/design/ontology.md(entity_types/relation_types/entity_type_parents/relation_type_domains等、包与 OWL 导入、签名绑定实测数字、语言策略)
  • 账本语义:docs/design/ledger.md(open/typed 两层、证据表、invalidated_at唯一出口、导出为 RDF 陈述)
  • 相关决策:本体包冷启动 0008、名字即事实 0041、时间提及按文档解析 0045、人类短语决策携带物化工作 0051
  • 设计总览:docs/design/README.md、docs/decisions/README.md
  • 后端
  • 前端
  • 人工智能
  • RAG
  • 知识图谱
  • 知识管理
  • 搜索引擎

【免费下载链接】utopia

World's first open-source enterprise world model.

项目地址:https://gitcode.com/gh_mirrors/ont/utopia
点击查看免费下载

相关推荐

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询