本体:给"小境"装上数据库地图

从去年的大屏版,到今天会自己查数的小境 Neo
开场 · 报告思路

主要报告思路

① 我们做了两种小境,一种只做Agent升级,另一种还带有本体模块

② 演示两种方案的运行表现,并报告对本体的原理和特性研究成果

③ 补充汇报:为了实现工程落地,我们总结了一套对 AI 系统进行评价的方法

开场 · 我们做了什么

去年的大屏版"小境",今年多了一个会自己探索的版本

去年 · AI 大屏版"小境"

  • 一套固定的程序和规则,给大屏做实时展示查询
  • 问题范围和答案形态相对固定,回答要求快
  • 过程对用户不可见,答错了只能事后发现

今年 · "小境"升级为智能体

  • 不限制问题类型,只规定做事方法
  • 会自主探索:多轮自我检查、逐步靠近答案
  • 思考路线可解释:能看到它每一轮是如何分析问题的
  • 执行过程可追溯:执行了哪些 SQL/Cypher、参数和结果,界面上全程展开
  • 分析过程可干预:用户可以持续给提示,调整它的分析方向
  • 升级的代价:回答变慢,不再适合大屏实时场景;时不时会犯错,需要持续调优。最需要治的是"猜":不知道数据在哪、口径是什么,就只能靠猜

名词 智能体(Agent):让 LLM 按"计划 → 执行 → 检查"的循环自己把任务做完的程序 · LLM(大语言模型):底层模型,负责理解问题和生成文字,如 DeepSeek

机制 · 自我修正

Agent机制让"小境"可以自我修正

Plan Do Check Act PDCA 循环(通用理论),Plan 承担最重的思考

只有两处调用 LLM

Plan 分析问题、写好第一批 SQL;Check 对执行结果做反思,判断还缺什么、整理出新的 SQL。Do 不调用 LLM,只负责执行 SQL、返回结果,执行这一步确定、不产生幻觉。

两个出口,不会无限空转

Check 判断数据已经足够,交 Answer 组织结论返回用户;轮次用完(系统设有最大轮次上限)也强制收口,把已查到的如实报告出来。

Plan Do(Act) Check(Plan) Answer 小境的落地:四步圈压成三步链,Do 兼任 Act(执行),Check 兼任下一轮的 Plan(重新规划),自我修正的循环发生在 Do 与 Check 之间
对比案例 · 无本体

小境的运行过程

用户提问:平台上有多少个场景?

Plan Do(Act) Check(Plan) Answer 本次运行:Check 发现缺口,新 SQL 交回 Do 再查,循环多轮

Plan · 意图识别和规划

只知道有两个数据库:PgSQL 是知识库,MySQL 是业务库,决定去 MySQL 查业务表的结构。

返回:SHOW TABLES;

Do · 执行

在 MySQL 和 PgSQL 上各自执行 SQL,把结果返回。

Check · 反思

缺失:字典表。整理新 SQL 交回 Do 再查;如果超过 4 轮,就强制收口。

── Answer (13.9s)──

根据平台现有的介绍信息,可以明确的一个应用场景是“出口应收账款融资场景”,该场景于2019年3月上线,已累计服务大量企业和银行网点。另外,平台资料中提到总共上线了15个应用场景,但未列出其他场景的具体名称,因此暂时无法提供完整的场景列表。

对比案例 · 有本体

小境 Neo 的运行过程

用户提问:平台上有多少个场景?

Plan Do(Act) Check(Plan) Answer 本次运行:没有用到回环 一次检查通过

Plan · 想

Neo4j 增强(场景 → 术语 → 数据映射),场景清单的答案在本体里。

返回:MATCH (s:Scenario) RETURN s.number, s.name, s.description, s.aliases ORDER BY s.number;

Do · 执行

在 Neo4j 上执行查询,返回 15 行。

Check · 反思

数据充足 ✓,无需第二轮。

── Answer (10.1s)──

小境为您梳理了平台上已定义的所有业务场景,共15个,具体如下:出口应收账款融资、出口信保保单融资、企业跨境信用信息授权查证、保税核注清单融资结算、中欧班列“长安号”融资、中欧班列“齐鲁号”融资、山东“港云仓”仓单融资、广西北部湾“港航融”、西部陆海新通道物流融资结算...

从实现看 · Plan 阶段

Plan 阶段做了哪些检查

关注的方面做什么
时间基准把当前时间注入提示词,禁止 LLM 用它训练时的年份作答
意图路由闲聊直接回答;数据查询才进入探索流程
查询策略有本体:沿"场景 → 术语 → 数据映射"的 8 步链探索;无本体:SHOW TABLES → DESCRIBE → 推断
数据源选库明细数据走 MySQL,趋势数据走 PgSQL,维度信息查 DataMapping
参数化规范SQL 一律用 %s 占位符,配正反示例,参数数量严格对齐,禁止用 ?
上下文复用已经探明的表结构不再重复 DESCRIBE,前面的查询结果约束后面的查询
防御性规则禁止跨库 JOIN;查询结果为空先排查原因再重试;探索查询加 LIMIT;禁止猜测表名
从实现看 · Check 阶段

Check 阶段做了哪些检查

关注的方面做什么
数据充足性判断现有结果是否足以回答用户的问题
日期一致性把查询里的日期值和当前时间基准对比,发现年份偏移
故障分类按根因把失败分成三类:语法或参数错、表不存在、结果为空
修正策略按故障类型决定方向:改写法、回头补元数据、还是重审查询条件
意图保持修正时保留用户原来的意图,只改技术实现
收敛保护同一原因连续失败两轮,自动降级为元数据探索,不重复同一个错误
从实现看 · 防御规则

额外写死的防御规则

规则做什么
本体前置校验有本体模式下,即使已有缓存结果,也必须先经 Neo4j 确认再查库
Scenario 入口保护禁止绕过 Scenario 节点直接查 DataMapping,保证每次查询有业务归属
大表保护数据量不确定时,先 COUNT 查大小,再决定查询方式
参数不匹配回退执行层捕获参数错误后,自动去掉参数重试一次
最大 PDCA 轮次MAX_PDCA_ROUNDS=5,超过自动收口,防止死循环
DataMapping 归属隔离同一张物理表被多个场景引用时,必须按 dm.scenario 区分归属
两种小境 · 结构

小境的初始结构:编排层 + 模型层

小境(无本体)

直接面对 MySQL、PgSQL 两张库的表,遇到问题从 SHOW TABLES 开始,靠表名和字段名猜。

应用入口层
Open WebUI 聊天界面 · OpenAI 兼容 API · 双开关选择两种模式
Agent 推理层(编排)
PDCA 循环:Plan → Do → Check → Answer
模型层
OpenAI 兼容 LLM(DeepSeek / LM Studio 环境变量即切)
数据层
MySQL 业务主库 · PgSQL 知识库
两种小境 · 升级

小境 Neo:多了一张"本体"地图

小境 Neo(有本体)

同一个 Agent,中间多一层基于 Neo4j 的本体(领域知识模型 / 概念关系网络),查数前先"看图"。

应用入口层
Open WebUI 聊天界面 · OpenAI 兼容 API · 双开关选择两种模式
Agent 推理层(编排)
PDCA 循环:Plan → Do → Check → Answer
模型层
OpenAI 兼容 LLM(DeepSeek / LM Studio 环境变量即切)
本体层(本次新增)
Neo4j 业务本体:只存地图,不存业务数据
数据层
MySQL 业务主库 · PgSQL 知识库
同一 Agent、同一 LLM,差的就是这一层:查数前先看图
概念 · 先把词说清

本体是什么

本体(Ontology)

本体中不会存冗余的业务数据,而是解释业务概念、描述业务概念间的联系、记录实际业务习惯(习惯用语、缩略语)、业务规则(示例、要求、禁止)等。

顺带说清三个词

  • Neo4j:图数据库,本体就存在这里(节点 + 关系的形式)
  • 口径:一个数字"怎么算"的规则
  • 编排:控制 Agent 每一步干什么的固定程序
一个例子 · 差别一眼可见

同一个问题:"平台上有多少个场景?"

小境(无本体)

思路:只知道 MySQL 是业务库、PgSQL 是知识库,先从表结构里找"场景"。

做法SHOW TABLES 逐个看表名,再在资料里翻"场景"介绍。

回答:只说得出"出口应收账款融资"一个场景,其余含糊带过:"资料里提到共 15 个场景,但列不全。"

小境 Neo(有本体)

思路:问的是业务场景,先查本体里的 Scenario 节点,那里是场景清单的唯一出处。

做法MATCH (s:Scenario) RETURN s.name,一条查询命中。

回答:把 15 个场景连同编号、简介、别名一次列全。

例子在说什么 · 本体角度

Agent 缺的不是推理,是一张"知识地图"

为什么小境答不全

"平台上有哪些业务场景"是业务概念,它不在任何一张业务表里,也没有文档告诉 Agent 去哪找。没有地图,再聪明的 Agent 也只能猜。

本体把这类知识写成了图

把"场景、业务对象、字段语义、库表归属、口径"建模成图中的节点和关系。刚才例子走的就是第一级:场景消歧,落到 Scenario 节点。

查数时本体逐级引导

  • ① 场景消歧:"出口"先落进应收账款场景
  • ② 术语转字段:"融资金额"对应哪一列
  • ③ 库表定位:数据在 asset_info,归属唯一
  • ④ 口径与陷阱:已放款必须 asset_state='PAY'
演示版 · 边界说明

为了让查询线路看得清楚,演示版精简了部分功能

精简掉的功能

  • 没有使用 FC 和 MCP(名词见右侧)
  • 不绘制图表、不进行页面跳转
  • 未开启语音输入、语音输出
  • 上下文管理只用最简单的版本,另外把当前时间注入进去

名词

FC(Function Calling):让 LLM 按标准接口直接调用外部工具的能力。

MCP(Model Context Protocol):LLM 与外部数据源、工具对接的一种通用协议。

不用这两样,查询线路就完整地留在我们自己的代码和提示词里,界面上每一步都看得见。

这套地图怎么建 · 凭什么信

构建方法:AI 起草 + 人工审核 + 真实库验证

方法(可复制)

  • AI 负责广度:AI搭建基础结构,完成概念识别、关系定义、Cypher 编码。基本代码由 LLM 起草,人工确认,按反馈迭代(v1→v3,36 次 git 提交)
  • 人负责正确性:人工审核 + 对照真实库逐字段核实 + 最终裁决
  • 自动校验兜底:validate.py 5 项一致性检查
  • 范围策略:1 个主场景(出口应收账款融资)做深,15 个场景先建概念骨架,验证后再复制

规模(可复核)

17 类节点 / 161 个概念节点 / 15 类关系 / 约 185 条边;字段语义 ColumnSemantics ×14、库表映射 DataMapping ×17,全部钉到真实库。

自动校验案例:asset_state 大小写

本体早期把状态写成小写 'pay',真实库是大写 'PAY',导致查询不到数据,但执行时的AI并不会质疑本体模型的合理性。这个缺陷被核实环节抓出来并修复了,同批修正 3 处不一致。讲测评时它会再次出现。

人工才能保证信息合理、符合实际 专家评审

三道保障(自动校验 / 真实库核实 / 领域专家评审)里,专家评审目前缺位:数据能验证"对不对",验证不了"业务上该不该"。这是下一页请求的核心。

外部材料 · 一个通俗类比

认知三件套:本体给 Agent 的,就像高德地图给出行者的

认知三件套:本体语义、业务规则、动态决策,类比高德地图的地图、交通规则、路径规划
外部材料 · 业界案例

Palantir 情报分析案例:和本方案同构的"对象 + 逻辑 + 动作"

Palantir TITAN 案例:本体层的对象图谱、逻辑规则与动作库
下一步 · 请业务专家确认口径

把后续工作做好,最需要业务专家深度参与

希望得到的支持:请业务条线指定一位口径确认人

目前本体和题库里的术语、列语义、口径对不对,主要由工程侧根据资料和数据库推断,还没有经过业务方面的确认。希望业务条线指定一位口径确认人,参与两件事:本体评审(术语、列语义、口径定义)和题库口径核对(标准答案采用的统计口径)。以评审会或口径答疑的形式支持即可,不需要全职。后续修正本体、向其他场景复制时,都以业务确认的口径为准。

数据与访问

更多场景业务库的只读访问 + 口径清单,支撑"主场景方法向其余场景复制"。

算力(量小)

测评运行的 LLM 推理配额:一轮约 40–50 万 token,下一轮对照同量级。

测评方案 · 名词与组件

设计测评方案的基础,是先分析好测评对象

用"员工、地图、翻译"打比方,把三个组件讲明白。

编排(Harness)

指挥流程的"员工"。接到问题后按固定节奏推进:先规划、再执行、再检查、再收尾。

本体(Ontology)

那张"地图"。业务术语和数据库字段的对照关系,帮助系统减少探索弯路。

执行(LLM)

那位"翻译兼执行者"。把问题翻译成查询语句,再把结果组织成通俗的答案。

测评方案 · 名词与组件

测评相关的术语

名词通俗解释
题库 / 测试用例一组预先设计、附有标准答案的问题
标准答案出题人预设的正确结果,用于对照
指标衡量表现的标准,例如探索轮次、响应时长
收敛 / 收敛性系统经过若干轮探索后,能否在合理轮次内找到答案并停止。反复探索无法停止、该停时未停、过早停止导致遗漏答案,都属于收敛不佳
基线用于对比的"上一版本"或"基准版本"
快照每场实验的条件记录(题目、数据、组件版本、时间),供复现与核对
Token大模型处理文本的计量单位,大致对应算力与成本
归因判断表现变化的原因,明确归属到哪个组件(编排 / 本体 / 执行)
测评方案 · 为什么要测

为什么不能只看"答案是否正确"

仅看最终答案,会忽略三类重要信息:

过程

答案正确,但探索轮次过多、资源消耗过大。

可信度

答案正确,但过程中曾"编造"数据,可靠性存疑。

定位

答案错误,却难以判断是流程、本体还是执行环节的问题。

测评方案 · 为什么要测

评测要回答的两个问题

① 这次改动,评分是提高还是降低?

② 评分提高或降低的原因,主要归因于哪个组件(编排 / 本体 / 执行)?

测评方案 · 评估维度

评估分两层:底层"指标",上层"分数"

七个过程指标

原始数据:过程质量、效率与成本

按权重归因

把指标分配到三个组件

三张组件分数卡

编排 / 本体 / 执行,各一个 0–1 分

指标是什么

从每次执行记录(日志)里统计出的原始数值,例如平均探索轮次、正确率、Token 消耗、耗时,相当于评估的"底账"。

分数是什么

把指标按归因权重折算成 0–1 的展示分,例如编排分、本体分、执行分,相当于评估的"结论"。

测评方案 · 评估维度

七个过程指标(上):正确性与探索效率

指标说明对应问题
① 探索轮次从提问到答完,循环执行的轮数探索了几轮才得到答案?
② 结果正确性最终答案与标准答案的符合程度答案是否正确?
③ 查询质量中间生成的查询语句质量(语法 / 选库 / 冗余)查询方式是否正确?
④ 事实一致性过程中是否存在前后矛盾或编造字段的情况前后是否自相矛盾?
测评方案 · 评估维度

七个过程指标(下):完整性与资源效率

指标说明对应问题
⑤ 回答完整性一个问题的多个子需求是否全部覆盖是否遗漏了子问题?
⑥ Token 消耗消耗的算力和成本资源消耗是否过高?
⑦ 结论生成时间从提问到生成答案的等待时长等待时间是否过长?
测评方案 · 评估维度

三个组件各自考察什么

编排

  • 探索轮次是否合理、能否及时停止
  • 是否存在重复探索
  • 前后口径是否一致
  • 回答是否完整

考察目标:探索收敛快、事实不漂移、回答不漏项、无重复劳动

本体

  • 数据库与表的选择是否正确
  • 术语解析是否准确
  • 本体是否提升了探索效率

考察目标:选对库表、术语解析准确、探索更高效

执行(LLM)

  • 查询语句语法是否正确
  • 语义是否贴合问题
  • 数值是否准确

考察目标:语法正确、语义贴题、数值准确

测评方案 · 评估维度

归因:指标如何归属到组件

每个指标对三个组件的责任权重不同:●● 主导● 参与○ 边缘

指标编排本体执行
平均探索轮次●●●●
结果正确性●●●●
查询质量
事实一致性●●●●
回答完整性●●
Token 消耗●●●●
结论生成时间●●
测评方案 · 评估流程

一条流水线:出题 → 执行 → 评分 → 报告

① 出题

准备题库

② 执行

自动向系统提问

③ 评分

自动 + 人工

④ 报告

生成报告

测评方案 · 评估流程

第一步 · 出题(题库)

一套标准题目以 15–20 道为宜:题太少缺乏统计意义,太多则单次评测耗时较长。

难度

  • 简单:单表
  • 中等:多表
  • 困难:模糊表达 + 跨库

类型

  • 精确查询
  • 聚合统计
  • 排序筛选
  • 跨库联合

边界

  • 无结果
  • 歧义表达
  • 超出本体覆盖

每道题附带三样东西:标准答案、预期轮次、子问题数量,后两样供评分和完整性检查使用。题目的口径以业务方意见为准,工程侧负责把题出规范、整理成格式。

测评方案 · 评估流程

第二步 · 执行:自动向系统提问

评测工具自动把每道题发送给被测系统,通过接口交互,不接触系统代码

完整记录全过程:每一轮的"计划 / 执行 / 检查"、每条查询语句、最终答案、耗时、Token,全部留档。

结果按日期归档,避免多次评测相互覆盖。

测评方案 · 评估流程

第三步 · 评分

评分分三层:规则引擎自动判,人工标注补语义判断,最后综合成结论。

规则引擎(自动)

可自动计算的指标自动完成:探索轮次、结果正确性、Token 消耗、耗时。

人工标注

语义是否贴题、查询是否冗余这类项目由人工判断。这一步目前靠人工做,每轮结果都有复核留档。

综合评分

三层各自独立演进,最后统一输出"三组件分数 + 证据"。

分数必须附带证据,不能只给数值。每个分数都能回翻到具体的轮次记录、查询语句和统计口径。

测评方案 · 评估流程

第四步 · 生成报告:两类报告

单模型报告

单个方案的总结,包含三模块水平、七维指标和逐题证据。

对比报告

两个方案的对比,比较各维度差异、差距大小与原因。

共同特点

  • 纯网页格式,无需服务器,离线可查看;顶部两个标签互相跳转
  • 全部展开、滚动阅读,无需点击展开
  • 使用业务语言(编排 / 本体 / 执行),不出现内部代号
测评方案 · 原则与短板

四条关键原则

1 一次只更换一个组件

控制变量,才能归因。

2 统一契约

任何评测最终都输出同一套三组件分数。

3 分数必带证据

每个数值都能追溯来源。

4 使用业务语言表达

采用编排 / 本体 / 执行等说法,不用内部代号。

测评方案 · 原则与短板

一个已知短板:收敛性尚未完整评测

该系统依靠多轮推理后给出答案,最需要考察的是能否做到"探索适量、及时收敛"。目前的评测尚未完整覆盖这一点。

目前可观测的指标

  • 探索轮次是否合理
  • 是否存在重复查询
  • 是否存在前后矛盾(事实漂移)

三个盲区

  • 仅看平均值会掩盖个别题目严重发散的情况,长尾问题无法体现
  • 只惩罚轮次过多,轮次过少但答案错误反而被判定为良好
  • 缺少明确的"收敛率"指标:有多少题目在合理轮次内给出正确答案
方案的有效性 · 一组真实留档

一次真实修复:测评把"没变好"也解释清楚了

变更:asset_state 大小写统一(本体 v0.0→v0.1,git b08eb26)。这是"本体质量修复前后",不是"有/无本体",后者看下一页的测试报告。

修复前后对比

指标修复前修复后
连续下钻 · 编排分0.27780.6528 ▲
重复探索命中41 ▲
跨轮复用率50%62.5% ▲
单题平均耗时103.75 s80.0 s ▲
单题正确率25%25%(未变)
下钻事实命中率16.7%0% ↓

样本量小:单题 n=5(旧题库)+ 1 个会话,没有统计显著性,只能说明机制有效。自动判分是字符串近似规则(107 判得偏宽、102/103 漏匹配),已人工复核覆盖。

正确率没涨,三条归因都找到了 负结果主动讲

  • 历史表干扰选表:clean_export 与 asset_info 并存
  • 标准答案口径错配:题目的参考口径本身有问题
  • 会话记忆未跨请求接线:测的是"无记忆 Agent"

这说明了什么

过程变好被度量到了,结果没变也被解释清楚了。口径差异会伪装成能力差异,这正是受控测评的价值。

测试报告 · 有/无本体对照(E1,2026-09-08 已留档)

本体对提高准确性有帮助

同一个 LLM(deepseek-v4-flash)、同一个 Agent(b08eb26),8 道题同一天、同一库,唯一变量是有无本体。16/16 次请求全部成功。

25%→50%完全正确率(人工判定)
2/8→5/8答对题数
0.875本体分(首次出现变化)
≈持平平均耗时 149.8s→148.4s
题(难度 · 类型)无本体有本体看点
101 放款额合计(M · 本体敏感) 用错场景表有本体精确 422,694,000 元 / 59 笔
004 金额同比(H · 对照) 数值十倍级错乱591,493,262 / 773,866,465 / −23.6% 全对
103 笔数(M · 本体敏感) 75 与 59 摇摆干净答"59 笔"
107 审核中笔数(E · 本体敏感) 未答出 6 笔精确答"审核中 6 笔 / AUDITING"
102 币种枚举(E · 本体敏感)两组都对(自动判级因顺序漏配)
105 法规依据(M · 本体敏感)有本体更快:1 轮 vs 2 轮
003 融资金额(M · 对照)两组错在同一个口径 → 本体缺金额口径规则
108 机构层级(M · 本体敏感) 找不到机构 上级答错本体缺机构层级关系,下一步补上
收尾 · 请领导指正

这条链,本次 POC 完整跑通了一遍

知识显性化(本体)+ 语言泛化(LLM)+ 流程可控(编排)+ 度量可信(评测体系)。
本体把"对"的查法交给系统,LLM 把"懂"的语言交给用户;后面每一步改进,都用同一套带证据的测评来验证。业务专家补上口径这一环后,这条路可以复制到更多场景。

数字出处均可复核

调研笔记与评测留档(results/,含逐题证据与归档路径)。