被同事否掉的本体方案,我用一张CSV表格找了回来
起因:会议室里,我被围攻了
前段时间我们给一个客户搭知识库。项目启动会上,我提了一个概念:用本体(Ontology)来组织知识。
会议室安静了两秒,然后反对声起来了——“这什么东西?太学术了吧""搞这么复杂干嘛,把文档传上去不就行了""谁听得懂啊这是”。
总结起来就一句:没人知道本体是什么,但所有人都觉得它很复杂。
散会后我咽不下这口气。这个方案我觉得是对的,但当时没讲清楚。于是晚上我拉着豆包,把这个概念从头到尾捋了一遍。这一辩,辩出了一个比”讲赢同事”更重要的东西——一套真能落地的做法。
先把结论放前面:
本体不是玄学,就是”知识库的地基”。文档全量上传的知识库是”能用”,加了本体的知识库才是”好用”。而落地的第一步,土得掉渣——一张四列的CSV表格。
一、本体到底是什么:IT老兵的一秒翻译
豆包先给我讲哲学:本体最早是亚里士多德那套”存在论”,追问世界上到底有什么、本质是什么。后来被计算机借用,变成”知识本体”——把一个领域的概念、概念间的关系、推理规则明确定义出来。
听着确实学术。但我反应过来的时候,差点笑出声:
这不就是面向对象编程吗?
| OOP | 本体 |
|---|---|
| 类 | 概念(如:采购方式) |
| 继承 | 子类(如:公开招标 is-a 采购方式) |
| 成员变量 | 属性(如:金额阈值、适用品目) |
| 方法调用 | 关系(如:触发、依据、违反) |
写了十几年代码的人,理解本体根本不需要过渡。“采购方式”是父类,“公开招标”是子类,限额和品目是成员变量——程序员搭本体,比纯业务的人上手还快,因为整条思维路径都是现成的。
所以后来再有人问我本体是什么,我不再念定义,我说:知识库是个带地图的书架,本体就是那张地图——标清楚哪本书放哪、书和书什么关系。没有地图的书架也能塞书,但你找书靠缘分。
二、整场辩论最有价值的一次纠偏:最小单元是流程,不是文档
聊到”从哪开始建本体”时,豆包先给了我一个方案:把”采购管理办法”当主体建模——“管理办法”是父类,“采购管理办法”是子类,挂属性、连关系。
我当场觉得不对:最小单元怎么能是管理办法呢?
你去翻任何一个客户的《采购管理办法》,它的核心内容是什么?无非三件事:
- 达到什么限额(100万以上?200万以上?)
- 什么品目(货物?服务?工程?)
- 执行什么采购方式、走什么评分标准(公开招标?竞争性磋商?综合评分法还是最低评标价法?)
真正被天天使用、天天检索的,是这些业务规则,不是那份红头文件的全文。用户问的是”120万买服务器走什么方式”,不是”采购管理办法第三章说了什么”。
所以最小本体单元应该是业务流程级别的规则,比如”公开招标流程”:主体=公开招标,关系=依据,客体=采购管理办法——流程是执行本体,办法是规则本体,上下用”依据”关系连。
豆包也认了:这取决于你知识库的核心颗粒度,以业务流程为起点完全成立。
这一步是我整场辩论里最得意的判断。回头看,它其实是被 OOP 直觉推出来的:先建模对象的行为(流程),再让静态结构(文档)挂在行为上——跟先设计接口再写实现类是同一个手感。
三、知识库里的东西分三类,处理策略完全不同
顺着往下捋,一个采购知识库里装的东西,其实就三大类:
| 类别 | 例子 | 处理策略 |
|---|---|---|
| 内部管理办法 | 采购管理办法、合同管理办法 | 抽规则建本体:限额→方式→评分,核心逻辑结构化 |
| 系统业务知识 | 什么是采购申请、采购项目、打包分包 | 概念建模:把术语和关系讲清楚,AI 回答不串概念 |
| 国家法规政策 | 招标法、政府采购法、各种案例 | 只抽关联点,不全文拆解 |
第三类是争议最大的:招标法也要拆成本体吗?答案是不用,别重复造轮子。
比如《招标法》里”公开招标公告不得少于20日”这条,只需要建一条本体三元组:
主体:公开招标公告时长规则
关系:依据
客体:招标法第24条
属性:法定时长=20日 | 内部执行标准=≥20日 | 文档链接=招标法全文PDF
法条原文直接上传当普通文档,本体只挂个链接当”规则依据”。用的时候内部规则自动关联法条,点链接看原文——法规是背景板,本体是索引卡。
案例还能多补一层关系,这是意外收获:
主体:某货物采购废标案例
关系:违反
客体:竞争性磋商供应商不足3家规则
属性:关联=政府采购法第36条
一条”违反”关系,让案例、内部规则、法律依据串成一条线。搜案例的时候能顺藤摸瓜找到规则和法条,这比单独存一堆案例文档值钱多了。
四、落地形态:土得掉渣的一张CSV
所有关系理清楚后,问题来了:这些三元组写在什么地方?
答案土得我都不好意思说:CSV表格,或者Markdown表格。四列:
主体,关系,客体,属性
100万以上货物采购,触发,公开招标,"依据:采购管理办法CG-001 | 法条:招标法第24条 | 系统节点:招标申请→采购委审核→公告发布"
公开招标公告时长规则,依据,招标法第24条,"法定时长:20日 | 执行标准:≥20日 | 链接:招标法全文"
某废标案例,违反,供应商不足3家规则,"关联:政府采购法第36条"
为什么不用专业本体工具(Protégé、OWL)?因为团队里不懂技术的人也得能看懂、能一起补。表格是这个世界上接受度最高的数据格式,产品经理能改,业务专家能改,实习生也能改。等逻辑跑通了、要对接系统了,再转成更规范的格式不迟。
至于三元组怎么来——不全靠人工。把管理办法、流程文档、相关法规打包喂给大模型,提示词里限定输出格式(主体-关系-客体+属性),让它打草稿,人工再筛掉不符合业务实际的连边(模型确实会把”部门”和”审批”乱连)。LLM 出活,人把业务关——这个分工我现在越用越顺。
一个容易被忽略的坑:制度流程和系统流程对不上
真实项目里还有个脏活:管理办法里写”采购委审批”,但系统开发时实际的操作流程跟管理办法的描述不完全一致——大方向对,细节有出入。
本体里加一个映射关系就能说清:
主体:采购委审批(管理办法)
关系:系统映射为
客体:系统角色ID + 审批节点路径
属性:差异说明=系统默认线上流转,办法含线下特批场景
既保留制度的规则本体,又对应系统实际操作,差异不改结构、写在属性里。这张”差异清单”本身还是宝贝——它是后续优化系统或修订制度的依据。
五、导入Dify时的一个致命细节:三元组会被切断
表格做好了要进知识库。我的知识库跑在Dify上,这里有个细节不留意就前功尽弃:
向量库默认按长度硬切分块,你精心整理的一行三元组,可能被拦腰斩成两个chunk。
“主体-关系-客体”要是被切成两半,检索的时候只匹配到一半——搜到”100万以上货物采购”,没带上”触发公开招标”,回答就缺了核心逻辑。等于地图画好了,印刷的时候裁掉了一半。
解法是导入时用自定义处理:
- chunk_size 设成比你最长的一行本体还大(比如10000,反正一行撑不死它)
- chunk_overlap 设成0(每行都是独立完整的知识单元,不需要重叠)
- 分隔符只留换行,让每一行本体作为独立文档进向量库
这样每条规则都会被完整地向量化,检索时元数据还能当过滤条件——只拿采购规则类的内容,不混进普通文档的碎渣。
之前我在《Dify采购知识库实战:四库切片法》里讲过”切片是检索的原子单位”,这次算是从另一个方向又撞见它:切分逻辑尊重内容的天然结构,是所有知识库的铁律——法规按条款切,案例按事件切,本体按行切。
六、现实的妥协:先能用,再对
写到这,可能有读者替我憋屈:方案这么清楚,当初会议室里那些反对的声音呢?
说句公道话,同事的方案也没错——把管理办法的Word、PDF全部上传到向量库,确实能快速凑出一个”能用”的知识库。短期看,这是投入产出比最高的路线。
问题出在长期:搜”100万采购方式”,纯文档向量会返回一堆重复、零散的段落,模型自己拼逻辑,容易出幻觉;而抽了本体的,直接命中结构化规则,再关联原文,准度和效率都高一截。
所以最终的落地策略是个妥协,但我觉得是策略性妥协:
- 现在:按大家的主张,全量文档先上传,跑通”能用”的版本——不否定任何人
- 同时:自己悄悄把核心规则抽成那10条CSV(限额→方式→评分),当种子弹药
- 等翻车:等大家搜东西总找不到、答不准的时候,拿一条抽好的本体做对比演示——同一个问题,两种答案摆在一起
讲十遍概念,不如演示一次翻车。这不是我认怂,是用效果说话的推进节奏——有了小范围的效果,再带着大家一起补本体,就没那么难了。
收口
这一晚上的辩论,我沉淀下来三句话:
本体是知识库的地基,不是装饰——它决定了你的知识是被”存储”还是被”组织”。
落地的最小代价是一张表格——四列CSV,业务和技术都看得懂,谁都不用先学OWL。
推动新概念的最好方式不是说服,是等一个翻车现场——把弹药备好,时机来了再开枪。
对了,如果你也是写代码出身,恭喜你——你理解本体只需要一秒:它就是你知识库里的接口定义。管理办法是需求文档,系统流程是实现类,三元组表格是你写的第一版接口草约。
剩下的,就是往里填方法了。
(这篇的观点成型于我和豆包的一场深夜辩论,观点是我的,论证过程AI出了不少力——这种”人提业务判断、AI补技术细节”的协作方式,最近成了我的常态。)
微信扫一扫 · 转发本文
本文首发于 荣哥AI实战手记,原创内容,转载请注明出处:https://blog.cyuan.work/blog/%E8%A2%AB%E5%90%8C%E4%BA%8B%E5%90%A6%E6%8E%89%E7%9A%84%E6%9C%AC%E4%BD%93%E6%96%B9%E6%A1%88-%E6%88%91%E7%94%A8%E4%B8%80%E5%BC%A0csv%E8%A1%A8%E6%A0%BC%E6%89%BE%E4%BA%86%E5%9B%9E%E6%9D%A5/