JOTO
联系我们
← AI 智库
知识图谱

动态本体的第二次迭代:从“能研判”到“会成长”

2026 年 8 月 14 日

本文介绍东海防空识别区空情研判系统动态本体的第二次迭代,重点提升轨迹预测精度、函数可进化性与智能体成长能力。核心改进包括:采用ENU坐标系与Monte Carlo粒子预测替代启发式规则;将本体函数解耦为可渐进加载的Skills;明确OpenClaw记忆、Skills经验和动态本体模型三条独立成长路径;重构本体可视化为数据层、语义层、动能层、动态层、应用层五层结构。

四步升级:从静态本体到可成长系统

昨天那版东海防空识别区空情研判 MVP,解决的是第一个问题:让OpenClaw 不再直接面对一堆表、报文和地图图层,而是先进入一个动态本体空间。态势数据、航侦报文、技侦报文、开源地理和历史案例,先被映射成 AirTarget、TrackPoint、IntelReport、AirspaceZone、SimilarTrackCase这些对象;对象之间再通过 Link 连接;OpenClaw 通过 MCP 调用本体函数,完成威胁评估、证据链解释和 Cesium 可视化输出。

今天这次迭代,重点不再是“有没有本体”,而是继续往前走一步:本体里的计算能力怎么变得更准?函数怎么随着使用不断进化?智能体系统怎么沉淀经验,而不是每次从零开始?

我们做了四件事。

  • 重写了空中目标轨迹预测和进入 ADIZ 概率模型。原来更接近启发式规则,现在改成 ENU 坐标下的粒子 Monte Carlo 预测,再把运动学命中概率、情报置信度、历史相似航迹、目标语义和保障 Link 先验做融合。
  • 把动态本体中的“函数”拆成了 OpenClaw 可以渐进式加载的 Skills。本体仍然定义函数签名、输入对象、输出对象和治理策略,但具体实现放进 Skill 目录:SKILL.md、scripts/、references/。这样函数不再只是固定脚本,而是可以随着项目使用继续沉淀。
  • 明确了智能体成长的三条线:OpenClaw 记忆系统成长,Skills经验成长,动态本体模型自身成长。三者不是一回事,也不能混在一起。
  • 重新组织了“本体情况”工具栏的可视化。现在它更接近 Palantir 动态本体的分层表达:数据层、语义层、动能层、动态层、应用层。看图时,业务专家能更快理解系统里每个要素处在什么位置。

轨迹预测:先把经纬度问题变成局部坐标问题

空中目标进入防空识别区的概率,不能直接用经纬度差值粗算。经纬度是球面坐标,纬度和经度的距离尺度并不一样,尤其在东海这种区域范围内,直接用 Δlon和 Δlat做速度、转向和外推,会把几何误差带进概率模型。

所以我们先把目标轨迹点从经纬度转换到局部 ENU 坐标。这里的ENU 是 East-North-Up,本项目当前只用水平面的East 和 North 两个分量。

ENU坐标系示意图
ENU坐标系示意图

对最近 6 到 12 个航迹点,按 5 秒采样间隔估计运动状态:

航迹点运动状态估计示意图
航迹点运动状态估计示意图

Monte Carlo:用粒子统计“是否命中 ADIZ 多边形”

东海 ADIZ 在本体里是 AirspaceZone对象,其边界来自六个坐标点构成的多边形。我们把 ADIZ 多边形也转换到 ENU 坐标:

ADIZ多边形在ENU坐标系下的表示
ADIZ多边形在ENU坐标系下的表示

这一步很重要。比如 TGT-017 已经在东海 ADIZ 里,那么它“未来进入 ADIZ 的概率”不能再是 60%、80% 或 95%,而应该是 100%。这是业务事实优先于预测模型。

如果目标尚未进入 ADIZ,则做 20 分钟预测。每条粒子轨迹按 5 秒一步前推,当前实现采样 4000 条粒子。每条粒子会在 CV、CT、Singer 三类模型之间采样:

CV、CT、Singer三类运动模型示意图
CV、CT、Singer三类运动模型示意图

统一的位置推进公式是:

位置推进公式
位置推进公式

平台参数:不同飞机不能按同一种机动假设外推

RC-135、F-16、F-22、E-3、KC-135 不应该共用一套运动噪声。大型 ISR 平台和战斗机的速度、转弯率、机动扰动差别很大。我们在 Skill 的references/platform_params.md里放了一张平台参数表,当前作为 MVP 假设。

平台速度扰动航向扰动最大转弯率参考
RC-135V/W35 km/h1.2°/s
F-16CM70 km/h4.5°/s
F-22A80 km/h10°5.0°/s
E-3G30 km/h1.0°/s
KC-135R25 km/h0.8°/s
P-8A40 km/h1.8°/s
MQ-4C20 km/h0.7°/s
C-130J25 km/h1.0°/s

这张表不是权威性能表,而是工程上的先验参数。它的意义在于:模型知道一个 F-16 可能做出更激烈的航向变化,而 RC-135、E-3、KC-135 这类平台更可能保持稳定航路。后续如果实测数据积累更多,这张表可以被持续校正。

证据融合:概率不是单纯运动学

仅靠运动学会漏掉很多业务语义。

一个目标向 ADIZ 靠近,可能是训练、巡逻、误入,也可能是有组织的抵近试探。如果它有航侦报文支撑、有技侦监听支撑、有历史相似案例,并且与加油机、预警机、护航机存在保障关系,那么它进入 ADIZ 或在边界附近持续行动的先验就不一样。

证据融合示意图
证据融合示意图

Shistory是历史相似案例中的最高相似度。比如当前航迹与历史boundary parallel isr或 fighter patrol near boundary模式接近,就会给模型提供历史先验。

Sevent是当前运动事件得分,比如 boundary approach、boundary parallel pattern、non approach or low attention。

Prior_threat来自当前威胁等级:

威胁等级
high+0.18
medium+0.10
low-0.08

Prior_country来自国别语义:

国别语义
red+0.08
unknown+0.10
neutral-0.12
blue-0.18

Priorsupportlink来自本体Link,而不是简单加分:

支援 Link 类型
support_enabler+0.16
escort_or_counterair+0.12
isr_collection_chain+0.10
none0.00

这里特别强调一点:保障关系不是“看到 KC-135 就直接加 10%”。它是本体 Link 形成的任务持续性先验,在 logit 空间参与融合。这比简单 bonus 更稳定,也更容易解释。

保障关系在logit空间融合示意图
保障关系在logit空间融合示意图

为什么把本体函数改成 Skills

昨天的模型里,本体函数还是本体 runtime 里的固定函数。今天我们改了一个关键设计:本体中仍然声明函数,但具体函数实现绑定到 OpenClaw Skill。

也就是说,本体里现在是这样一种关系:

Ontology Function Declaration

assess_threat@0.1.0

predictadizentry_probability@0.2.0

Skill Binding

assess-threat

adiz-entry-probability

functions.json里增加了 skillBinding:

{"name": "predict_adiz_entry_probability","version": "0.2.0","input": ["AirTarget", "TrackPoint", "IntelReport", "SimilarTrackCase", "SupportRelationship", "AirspaceZone"],"output": ["AdizEntryProbability"],"riskLevel": "medium","skillBinding": {"skill": "adiz-entry-probability","version": "0.2.0","entrypoint": "skills/adiz-entry-probability/scripts/predict.py","progressiveDisclosure": true,"allowedEffect": "decision_support_only"}}

本体还是负责定义:

  • 这个函数叫什么
  • 输入哪些对象
  • 输出什么对象
  • 风险等级是什么
  • 允许产生什么效果
  • 绑定哪个Skill

Skill 负责实现:

  • 什么时候应该使用
  • 如何准备输入
  • 如何运行脚本
  • 参考哪些参数表
  • 踩过哪些坑
  • 如何解释输出

这让本体和函数实现解耦了。

Skill 的渐进式披露

新增的两个 Skill 位于:

  • work/ontology-runtime-mvp/skills/adiz-entry-probability
  • work/ontology-runtime-mvp/skills/assess-threat

每个 Skill 目录都遵循同样结构:

  • SKILL.md
  • scripts/
  • references/
  • assets/ optional

SKILL.md的YAML 前置元数据是第一级披露。它短小,只告诉 OpenClaw 什么时候该用这个 Skill:

---name: adiz-entry-probabilitydescription: Use when OpenClaw needs to estimate the probability that one or more air targets will enter the East China Sea ADIZ...version: 0.2.0ontology_function: predict_adiz_entry_probabilityallowed_effect: decision_support_only---

SKILL.md正文是第二级披露。只有当 OpenClaw 判断当前任务确实需要这个 Skill 时,才加载完整指令,比如输入输出契约、运行方法、约束和解释口径。

references/是第三级披露。它不会默认塞进上下文,只有需要调整平台参数、解释概率融合、复盘错误案例时才读取。

比如 adiz-entry-probability当前有:

  • references/platform_params.md
  • references/probability_fusion.md
  • scripts/predict.py

这正好适合这个项目。概率模型不是一锤子买卖。后续我们发现某类平台参数不合理、某种任务链先验偏高、某类报文权重过强,都可以沉淀到 Skill 的 references 或 scripts 里,而不是每次改 prompt。

MCP Runtime 如何调用 Skill

OpenClaw 仍然不直接执行任意脚本。调用路径是:

OpenClaw

→ MCP run_function

→ ontology runtime 检查 functions.json

→ 找到 skillBinding

→ 准备本体对象 bundle

→ 调用 Skill script

→ 接收结构化 JSON

→ 回写本体决策对象

这样有两个好处。

第一,Skill 不能绕过本体数据契约。它拿到的是 runtime 准备好的bundle,不是自己随意查数据库。

第二,Skill 不能绕过动作权限。predictadizentryprobability的 allowedEffect是 decisionsupportonly。它可以输出AdizEntryProbability,可以触发updateprobability_overlay这种可视化动作,但不能直接执行高风险操作。

当前 runfunction("predictadizentryprobability")返回结果里会包含 Skill provenance:

{"skill": {"name": "adiz-entry-probability","version": "0.2.0","loaded_levels": ["metadata", "SKILL.md", "scripts/predict.py"],"progressive_disclosure": true}

这让研判结果不只知道“哪个本体函数算的”,还知道“哪个 Skill 版本算的”。这对后续审计、回放和模型迭代很关键。

智能体成长:不是一个地方成长,而是三条线同时成长

如果把“成长”只理解为大模型记忆,那系统会很快变得混乱。这个项目里,我们把成长拆成三条线。

第一条线是 OpenClaw 记忆系统成长

OpenClaw 的记忆适合记录使用偏好、任务上下文、常见工作流、专家反馈和历史交互。例如业务专家经常追问“为什么 TGT-017 是 100%”,系统就应该记住:进入概率问题必须先做 ADIZ 内外判定,并优先解释 alreadyinsideadiz。

记忆系统解决的是智能体层面的连续性:下一次再做同类任务,不必完全从零开始。

第二条线是 Skills 成长

Skill 适合记录“怎么做得更好”和“哪些坑不要再踩”。比如:

  • 好的经验:
    • 已进入 ADIZ 的目标直接 P=1.0
    • 平台参数要区分 ISR、战斗机、加油机、预警机
    • 保障关系用 logit prior,不用简单百分比加成
  • 踩过的坑:
    • 不能直接用经纬度差值算运动状态
    • 不能提前显示未来预测航迹
    • 单源情报不能过度抬高置信度
    • 数据源不要直接连对象,要说明字段映射和对象属性

这些内容放在 Skill 的 references/最合适。它们不是本体结构,也不是一次会话记忆,而是某个函数能力的工程经验。

第三条线是动态本体成长

动态本体成长不是改 prompt,也不是改算法,而是业务模型本身变丰富。比如今天我们加入了 SupportRelationship,把保障、护航、支援关系作为 Link 先验。未来还可以继续增加:

  • MissionPackage 任务编组对象
  • AirBaseActivity 机场活动对象
  • SensorEmission 电子辐射对象
  • CommandIntentHypothesis指挥意图假设对象
  • AirRouteCorridor 航路走廊对象
  • ReviewTask 人工复核任务对象

本体成长解决的是业务世界表达能力的问题。它决定系统能理解什么对象、什么关系、什么动作边界。

三条线合在一起,智能体系统才是真的成长:

  • OpenClaw Memory 让智能体记住上下文
  • Skills 让函数能力积累经验
  • Dynamic Ontology 让业务语义空间持续扩展

动态本体可视化:从对象图改成五层图

今天我们也重新组织了“本体情况”工具栏。

之前的图更像对象图:左边是数据源,中间是对象,右边是函数和输出。这个图能说明数据源如何映射对象,但业务专家看起来还不够接近 Palantir 动态本体的分层。

五层本体可视化结构图
五层本体可视化结构图

现在我们改成五层:数据源层、语义层、动能层、动态层、应用层

数据源层

放 5 个数据源:

  • situation_feed
  • recon_report
  • sigint_report
  • opensourcegeo
  • historicalcasedb

这些数据源统一用黄色平行四边形表示。这里刻意统一颜色,是为了强调它们都属于“数据源”,区别不靠颜色,而靠节点名称和说明。后续如果要表达数据质量、在线状态或可信等级,可以再叠加徽标,而不是让颜色承担太多含义。

语义层

放对象和 Link:

  • AirTarget
  • TrackPoint
  • IntelReport
  • AirspaceZone
  • SimilarTrackCase
  • SupportRelationship

SupportRelationship明确作为Link 类型对象出现,表达保障、护航、支援等关系。

动能层

放 Function、Skill 和 Action:

  • assess_threat
  • predictadizentry_probability@0.2.0
  • skill:assess-threat
  • skill:adiz-entry-probability
  • updatecesiumoverlay
  • updateprobabilityoverlay

这层是今天变化最大的地方。Function 不再等同于代码实现,而是本体函数声明。真正的实现由 Skill 承担。Action 负责把本体空间里的结果输出到外部应用。

动态层

放函数输出的决策和事件对象:

  • ThreatAssessment
  • ApproachEvent
  • AdizEntryProbability
  • HumanReviewTask

这些不是原始数据,而是运行时生成的动态对象。它们会随着数据流、函数计算、专家复核持续变化。

应用层

放本体空间之外的业务应用:

  • Cesium Digital Earth
  • OpenClaw Console
  • Report/Audit View

这层说明本体不是最终界面。Cesium 是态势可视化,OpenClaw Console 是对话式研判入口,Report/Audit View 是报告和审计视图。它们消费本体输出,但不应该替代本体本身。

现在这版架构的意义

今天的迭代之后,这个 MVP 的技术路线更清楚了。

  • 动态本体负责定义业务世界:有哪些对象、属性、Link、函数声明、动作和权限边界。
  • MCP Runtime 负责治理:匹配本体、准备 workspace、检查数据契约、调用函数、记录 lineage、拦截高风险动作。
  • OpenClaw Skills 负责能力实现:把函数背后的算法、脚本、参数表、经验文档沉淀下来,并支持渐进式加载。
  • OpenClaw 负责智能体编排:理解自然语言任务,选择本体,调用 MCP,解释结果,继续追问或发起复核。
  • Cesium 负责应用呈现:显示目标、航迹、预测、ADIZ、情报标记、概率卡片和本体图。

这套分工让系统避免两个常见问题。

一个问题是“大模型直连数据库”。这样短期很快,长期会失控:字段含义不稳定,业务规则不可审计,动作边界不清晰。

另一个问题是“本体只当静态图谱”。如果本体不能运行函数,不能输出动作,不能跟智能体交互,它就只是文档,不是 runtime。

现在的方向是中间路线:本体是 runtime 语义层,Skills 是可成长的函数能力层,OpenClaw 是任务编排层。

下一步

这次已经把 predictadizentryprobability@0.2.0和 assessthreat@0.1.0 Skill 化。下一步应该继续做三件事。

  • 第一,把 Skill 的 references 继续补强。尤其是平台参数、历史案例、误判案例、情报权重、复核规则,都应该从代码里逐步迁移到可读、可审计、可迭代的 references。
  • 第二,把 Skill 运行结果回写成更完整的本体对象。目前结果已经能返回 probability、CI、factor、lineage,但还可以进一步实例化为 AdizEntryProbability对象列表,并在对象图里支持查询。
  • 第三,把专家反馈纳入成长闭环。比如专家认为某次概率偏高,系统不应该只改一行代码,而要记录:
    • 这次为什么偏高
    • 是平台参数问题
    • 是历史相似案例问题
    • 是情报权重问题
    • 还是本体 Link先验问题
    然后决定该进入 OpenClaw memory、Skill references,还是动态本体模型。

这才是我们理解的动态本体落地:不是一次性建一个漂亮图,而是让业务语义、函数能力和智能体经验一起成长。

JOTO 企业落地观察

  • 企业部署动态本体系统时,需明确区分“本体定义”与“函数实现”的权责边界。本体应聚焦业务语义稳定性与契约一致性,而函数能力(Skills)则承担算法迭代、参数调优与经验沉淀,二者解耦可降低长期维护成本。
  • 这类系统的取舍在于:是否接受将部分业务逻辑从大模型prompt中剥离,转为结构化Skill管理。其代价是初期工程复杂度上升,收益是审计可追溯、版本可回滚、能力可复用,尤其适用于高合规要求场景。
  • 在RAG知识工程中,Skill的references目录天然适合作为结构化知识库载体。平台参数表、历史案例、误判归因等非文本型知识,比传统chunk更易维护、更易与本体对象关联,也更利于构建可验证的知识推理链。
  • AI安全治理的关键控制点正从“模型层”下沉至“本体层”与“Skill层”。函数声明中的riskLevel、allowedEffect、progressiveDisclosure等字段,构成了细粒度动作权限框架,使高风险操作无法绕过本体契约直接执行。

立即咨询 JOTO

JOTO 提供覆盖企业智能体规划与搭建、AI 平台私有化部署、RAG 知识工程、AI 安全治理、FDE 驻场共创及持续运营优化的全周期 AI 落地服务,帮助企业把验证中的 AI 能力转化为安全、可控、可持续迭代的生产力。 联系 JOTO 获取 AI 落地咨询

想把这些做法用到你的业务里?

留下你的场景和痛点,我们帮你判断从哪一步开始。

联系我们
联系我们

开启企业级 AI 落地

留下你的行业、部门和当前痛点,我们会在 1 个工作日内与你联系,帮你判断适合先做什么、需要准备哪些数据、适合什么平台。

微信咨询
扫码添加,一对一沟通
JOTO 微信咨询二维码
发送邮件
jotoai@jototech.cn

填写需求单

收到你的信息后,我们将在 1 个工作日内与你取得联系。