跳转至

Domain Topology:组织私域拓扑契约

核心结论

domain/ 不是一个单一的 demo 数据桶。未来 Framework 交付给一个公司后,这个公司下面会有部门、课题组、项目、员工和具体任务。每一类对象都可能形成自己的私域知识和上下文库。

因此当前 MVP 从一开始就把 domain/<domain-id>/ 建成组织私域拓扑:

text domain/<domain-id>/ organization/ departments/ people/ projects/ tasks/ context-libraries/ routing/ permission-views/ domain-topology.json

当前样例在 domain/orgreorg-demo/domain-topology.json。它不是产品默认数据,而是 dogfood 域:用来验证同一套 Framework 能否同时服务个人、部门和项目三类私域。

这份拓扑的产品意义是上下文管理:系统要根据当前员工、当前部门事项或当前项目任务,找到足够完成任务的最小上下文集合,并且只披露权限允许的部分。

在新的架构表述中,Domain Topology 是当前 P0 的轻量本体入口。它不是完整知识图谱,但必须承载本体层的最小语义:组织对象、上下文库、权限视图、可执行动作、writeback、知识制品和 Skill 的关系。原始资料仍保存在 Evidence;Topology 负责声明这些资料如何被解释、路由、授权和写回。

为什么要现在做

如果只按“当前项目知识”组织 domain/,后续会遇到三个问题:

  • 个人入职、报销、绩效这类任务和项目研发知识混在一起,权限边界不清。
  • 部门事项和跨部门项目无法判断应该查哪个上下文库。
  • Framework 产品化时不知道哪些目录是通用底座,哪些是某个组织自己的私域资产。

所以现在先把拓扑契约定下来,再逐步接真实数据源。

契约字段

domain-topology.json 当前要求声明:

字段 作用
organization 组织级身份和 root scope
scope_taxonomy 允许的私域类型:organization、department、personal、project
departments 部门、负责人、权限 scope 和路径
people 员工、所属部门、角色和个人 scope
projects 项目、所属部门、owner 和项目 scope
tasks 具体事项,绑定个人/部门/项目与上下文库
context_libraries 可路由的上下文库,含 scope_owner、permission_scopes、source_paths、projection_role、runtime_paths、index_strategy
ontology_contract 最小组织本体 contract:architecture layer、layer relationship、object、relationship、metadata、artifact、skill、provenance、rule、action、writeback event type
ask_router_bindings 主动询问绑定:scope、ask action、对象状态、throttle 对象,以及 task/context-library 匹配规则
routing_rules 每个 demo/task 的候选上下文库、最大调用数和所需 permission view
permission_views 某个用户视角下可见的上下文库和 allowed_scopes
demo_cases 架构验收用例:个人、部门、项目三类都必须覆盖
isolation_requirements 不同私域之间不能互相泄漏的规则

机器校验:

bash python scripts/domain_topology_lint.py

校验会检查 ID、路径、部门/人员/项目引用、上下文库引用、permission view 引用、ontology contract 引用、重复 JSON key、上下文库运行时披露路径,以及是否同时覆盖 personal、department、project 三类 demo。

三段结构在 Topology 里的表示

本轮重构后,domain-topology.json 不再只是一张“上下文库路由表”。它必须显式声明三段主抽象:

架构层 在 Topology 中的字段 作用
Evidence ontology_contract.architecture_layers[id=evidence] 原始资料、外部来源、代码包、会议、企微记录和业务系统对象的保真与追溯边界
Ontology ontology_contract.architecture_layers[id=ontology] 对象、关系、元数据、规则、制品、Skill、Action、Writeback 和权限视图的统一语义模型
Runtime Projection ontology_contract.architecture_layers[id=runtime_projection] 根据用户、任务、权限和当前目标投影最小充分上下文包的运行时机制

三段之间的转换关系进入 ontology_contract.layer_relationships

关系 含义 必需元数据
evidence-to-ontology 原始证据被清洗、review、沉淀成可维护本体制品 source-uripermission-scopereview-status
ontology-to-runtime-projection 本体规则、制品、Skill 和 Action 约束运行时披露与工具调用 source-uripermission-scopereview-status
runtime-projection-to-evidence-readback 运行时检索、Connector 和主动询问需要能回查原始 Evidence source-uripermission-scopeprovenance-hash

context_libraries 是 Runtime Projection 的入口对象,因此每个库还必须声明:

  • projection_role:当前是 search projection、source connector 还是 owner directory。
  • runtime_paths:该库会被 D0-D5 渐进披露路径中的哪些步骤调用。
  • index_strategy:具体索引或适配策略;命名不能再使用旧的 L3/L4 作为主模型。

Owner Registry Fallback

主动询问需要知道“应该问谁”。在企业微信通讯录 adapter 尚未接入前,当前 Framework 使用两层 owner registry:

  1. 优先读取显式组织目录:vault/90-system/org-directory.json
  2. 如果显式目录不存在,则从 domain-topology.jsonpeopledepartmentstaskscontext_libraries 派生本地 owner profiles。

对应实现是 framework/connectors/org_directory.pyload_owner_registry()owner_profiles_from_topology()。这让本地 Demo 不依赖企微,也能让 route_ask_request_guarded() 在省略 people 参数时从 topology 生成候选 owner。

这个 fallback 不是最终通讯录实现。真实部署时,企微 adapter 应作为显式 owner registry 的来源,继续输出同一类 owner profile;Ask Router 只消费 registry,不直接绑定企微 SDK。

当前三类 Demo

类型 Demo 预期上下文库 禁止泄漏
个人域 员工入职与首次报销材料缺口 personal_employee_opsorg_directory 财务部门库、OrgReOrg 项目库
部门域 财务部门报销政策更新 department_finance_opsorg_directory 员工个人库、OrgReOrg 项目库
项目域 当前 OrgReOrg Framework MVP 开发 project_orgreorg_knowledgeorg_directory 员工个人库、财务部门库

这三类不是最终业务功能,而是架构验收 fixture。它们回答的问题是:同一套 Framework 能不能服务公司内不同粒度的协同工作,并且不会互相污染。

最小充分上下文

每个任务最终都要生成一个上下文组合:

text 需求 -> 任务类型 -> 用户/部门/项目关系 -> permission view -> route_domain_context feature-based 候选评分和过滤 -> 最终上下文集合

目标不是让 Agent 看到最多材料,而是在以下约束下选最小集合:

  • 足够回答或推进当前任务。
  • 不包含无关部门、项目或个人材料。
  • 不超过用户和任务当前权限。
  • 缺口不足时能生成 knowledge gap,并主动询问正确的人或系统。

这个 trade off 决定了后续 Agentic Search、主动询问、Tool Gateway 和权限视图的设计。

和 Framework 的关系

Framework 层提供通用能力:

  • topology lint
  • workspace scaffold
  • SearchConnector
  • Tool Gateway
  • Context Router:当前本地 MVP 入口是 framework/context/domain_router.pyroute_domain_context,评分器为 domain_router_feature_v1
  • Ask Router
  • eval harness
  • dashboard generator

Domain 层提供组织自己的事实:

  • 谁属于哪个部门。
  • 谁负责哪个项目。
  • 某个任务要用哪些上下文库。
  • 某个用户视角能看哪些 scope。
  • 某个上下文库的数据源和生命周期规则。

未来打包产品时,Framework 保留;domain/orgreorg-demo/ 替换成客户组织自己的 domain。

最小 ontology contract

外部 Palantir 本体论材料提醒我们:domain-topology.json 不能只停留在“哪些上下文库能被路由”。本轮已经加入最小组织本体 contract,用来表达 Agent 面对的是哪些业务对象、哪些规则、哪些动作和哪些写回边界。

进一步校准后,本体层不应被理解为一组并列分层中的“某一层”。它是统一语义模型,至少包含:

```text Object 组织内可被识别和操作的业务对象

Relationship 对象之间的归属、负责、依赖、审批和证据关系

Metadata 来源、作者、时间、权限、版本、hash、review 状态和生命周期

Rule 什么时候允许查询、询问、执行、拒绝、脱敏、升级或重建索引

Artifact Markdown、ADR、实验报告、项目页、知识卡片和发布文档

Skill 任务技能包、workflow、playbook、gotcha、验证脚本和使用日志

Action 可执行动作,例如发送企微询问、创建 knowledge card、调用 Connector、reindex、更新看板

Writeback 动作结果、证据、review、失败、成本和权限决策写回审计或业务系统 ```

当前 P0 contract 已先把 object、relationship、rule、action、writeback event type 机器化,并新增 metadata、artifact、skill 和 provenance 的轻量扩展字段。artifact 和 skill 的完整运行态仍通过 docs、vault、task skill manifest、experiment registry 和 project status 表达;下一步再把这些制品的生命周期显式纳入 ontology registry。

当前 contract 规模:

  • Architecture layer:3 个,覆盖 Evidence、Ontology、Runtime Projection。
  • Layer relationship:3 个,覆盖 Evidence -> Ontology、Ontology -> Runtime Projection、Runtime Projection -> Evidence readback。
  • Object:8 个,覆盖员工、任务、部门、政策、项目、knowledge card、reindex queue 和 connector callback ledger。
  • Relationship:5 个,覆盖 owns、produces、queued_for 和 callback ledger audit。
  • Rule:5 个,覆盖个人 consent、部门隔离、项目隔离、project knowledge card review 和 reviewed card reindex 生命周期。
  • Action:7 个,覆盖 personal/department/project ask、finance policy review、project knowledge card review、promote、reindex。
  • Writeback event type:4 个,覆盖 ask feedback、knowledge card review、reindex queue status 和 connector callback ledger。
  • Metadata field:4 个,覆盖 source uri、permission scope、review status 和 provenance hash。
  • Artifact type:4 个,覆盖 Markdown wiki、decision record、experiment report 和 knowledge card。
  • Skill type:1 个,覆盖 task skill package。
  • Provenance requirement:2 个,覆盖 Evidence -> Ontology 与 Ontology -> Runtime Projection。
  • Ask Router binding:3 个,覆盖 personal、department、project 三类主动询问 route。

P0 不做大而全知识图谱,也不强行上图数据库。当前目标是让最小 contract 先进入 lint、eval 与工具治理:domain_topology_lint 会检查三段架构层、层间关系、metadata requirement、上下文库 runtime path、对象、关系、规则、动作和写回之间的引用,Domain Scope Eval 会要求 personal、department、project 三类基础 demo 都声明 ontology expectation,Ontology Tool Gateway Conformance 会检查 action、rule、object lifecycle 和 audited writeback 是否能约束工具调用。

当前 ontology action -> ToolPolicy 的最小 conformance 已完成,并且 OntologyToolGateway 已接入 personal、department、project 三类 Ask Router route、Knowledge Card review、promote 和 reindex queue 的本地执行路径。Ask Router binding 已进入 domain-topology.jsonroute_ask_request_guarded 会按 task/context-library 映射选择 ask action、对象状态和 throttle 对象。Ask Router 的对应对象状态、review/promote 与 queue worker 前后态已经写入 ontology-object-registry.json;External Connector Action writeback events 和 Connector Callback Ledger ontology event 已投影到 project status event timeline;owner registry 已支持显式组织目录优先、topology fallback。下一步是把企微通讯录、真实消息投递和回调事件接到同一 registry / delivery contract 后面,并把 worker retry 和 semantic review 接入同一 timeline。

相关背景见:Agentic Engineering 与本体论参考

当前暴露的设计坑

这次实现暴露了一个重要问题:旧的 Tool Gateway 只支持 public/team/restricted 这类粗 scope,无法直接支持 person:*dept:*project:*。现在 SearchConnector Tool Gateway 已改为接受已认证用户的 namespaced scopes,但仍强制请求中的 allowed_scopes 必须是用户 scope 子集。

后续真实权限系统必须把 permission view 做成可审计策略,而不是只写在 JSON 文件里。

相关页面