链载Ai

标题: 如何在生产环境基于本体Ontology的记忆系统 [打印本页]

作者: 链载Ai    时间: 4 小时前
标题: 如何在生产环境基于本体Ontology的记忆系统
前言

ingFang SC", Cambria, Cochin, Georgia, serif;font-size: medium;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;orphans: 2;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;">很久没写公众号了, 最近在做企业级别智能体协作系统,以便行业专家能够在AI的加持下协作高效完成价值创造,过程中天天和本体/Ontology这个概念打交道,以下这篇就和本体/Ontology强相关,供大家参考

ingFang SC", Cambria, Cochin, Georgia, serif;font-size: medium;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;orphans: 2;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;">基于大模型的记忆,一直是影响大模型Agent效果的重点环节之一, 在对信息准确度要求较高的生产环境中, 这个问题更加明显。

ingFang SC", Cambria, Cochin, Georgia, serif;font-size: medium;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;orphans: 2;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;">本文介绍了一种基于本体Ontology的记忆实现及评估系统, 以便在医疗, 法律, 金融等准确度要求较高的应用环境中, 保证领域相关的精准行业记忆的有效使用。

ingFang SC", Cambria, Cochin, Georgia, serif;font-size: medium;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;orphans: 2;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;">P.S. 本文以医疗行业为例, 会出现较多医疗行业相关名词; 另外最近的一个感悟, 就是传统行业中有太多能够使用AI提效的地方, 所以做AI的一定要深入行业, 行业领域知识及业务, 才是真正有价值的地方。

ingFang SC", Cambria, Cochin, Georgia, serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;">本体记忆的生产架构(Neo4j + LangGraph)

ingFang SC", Cambria, Cochin, Georgia, serif;font-size: medium;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;orphans: 2;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;">

ingFang SC", Cambria, Cochin, Georgia, serif;font-size: medium;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;orphans: 2;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;">在生产环境, 大型语言模型在推理、总结和生成文本方面表现很好,但当涉及记忆结构化知识时,它们会以非常微妙,且危险的方式出问题。

ingFang SC", Cambria, Cochin, Georgia, serif;font-size: medium;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;orphans: 2;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;">如果你向一个LLM询问一个本体(或者叫Ontology)驱动的领域的问题,我们经常会看到矛盾、定义漂移,或者那些看似大模型很自信却悄悄违反底层逻辑或者事实的答案。

ingFang SC", Cambria, Cochin, Georgia, serif;font-size: medium;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;orphans: 2;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;">模型知道这些词,但它并不能可靠地记住赋予这些词意义的结构。

ingFang SC", Cambria, Cochin, Georgia, serif;font-size: medium;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;orphans: 2;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;">大多数现代系统试通过检索来解决这个问题:用本体片段提示LLM,注入Graph上下文,或在查询时重新加载模式。这种模式一般能产生短暂的正向效果,但很快就会出错。

检索是无状态的,Prompt是脆弱不稳定的,两者都无法让系统持久地感知它已经学习、验证或认定为真正的内容。因此,本体变成了被动的参考,而不是主动的记忆,一致性在交互中逐渐瓦解。

本文探讨了一种不同的方法:本体记忆系统,一个专用的记忆层,使AI系统能够随时间保留、验证和重用结构化知识。

我们不是将Ontology视为静态工件或一次性上下文注入,而是将它们视为可以强化、检查冲突并在推理周期中重用的演化记忆对象。

结果不仅是更好的答案,而且是行为更像可靠知识工作者而非随机文本生成器的AI系统。

设想下,你是一家大型医院的医疗编码员。你的工作是将医生的诊断——比如“患者因未控制的2型糖尿病出现高血糖”——翻译成精确的医疗代码,如E11.65。这些代码是ICD-10-CM的一部分,这是一个拥有超过70,000个诊断代码的庞大系统。一个数字就能完全改变含义,错误可能导致保险索赔被拒、收入损失或合规问题。

随着大模型的兴起,一个关键问题出现了:AI能否准确记忆和回忆这些专业代码?这个被称为本体记忆的挑战,对价值4.5万亿美元的医疗保健行业具有重大影响。


什么是本体Ontology记忆?

本体是一种结构化的知识表示,它映射概念、关系和规则------就像按类型、颜色和品牌整理你的衣柜一样。在医学领域,像 ICD-10-CM 这样的本体不仅编码疾病,还编码严重程度、解剖位置和因果关系。

对于 AI 来说,记忆意味着

这与缓存、将数据保存到磁盘或在数据库中查找信息不同。

问题是:AI 是否已经充分学习了这些代码,以至于无需外部帮助就能回忆起它们?


与人类类比

即使是经验丰富的编码员也不会记住全部 7 万个 ICD-10 编码。他们:

即使是专家,准确率也只有 80-95%,这凸显了为什么 AI 在处理罕见或细微的代码时会遇到很大的挑战


医疗行业挑战

医院每天要处理数百份理赔单。每份理赔都需要多个准确编码——出错代价高昂。目前合格的编码员稀缺,错误可能导致理赔延迟或被拒。AI辅助编码(注意此处不是程序员的编程)有望提升速度和一致性:AI建议编码,人工审核,系统随时间不断改进。

不过只有在AI能可靠记忆编码时, 才能正常工作。否则,它会产生更多错误和额外工作量。

从医疗扩大至其他领域

凡是存在大规模、结构化、高价值知识的地缝,本体记忆都至关重要:

当人工智能能够可靠地记住这类知识时,它是一个巨大的优势。当它做不到时,就是一种风险。

在常见代码上实现90%以上的准确率是具有变革性的;而40%的准确率则意味着根本没有什么作用。正是这一挑战促使我们构建了一个本体记忆评估系统,用以严格测试AI的性能——我们接下来将对此进行探讨。


构建评估系统:设计与架构

评估指标

在构建任何AI编码助手之前,我们需要严谨的数据。具体来说,我们提出了三个研究问题:

RQ1:记忆准确性- 当给定一个概念标签时,大语言模型(LLM)能多准确地回忆起确切的医疗编码?例如,如果我们给LLM输入"2型糖尿病伴高血糖",它能准确输出E11.65吗?我们通过以下指标来衡量:

RQ2:流行度相关性- AI在常见编码上的表现是否比罕见编码更好?这一点很重要,因为医院遇到常见病情的频率远高于罕见病情。如果AI只对常见编码有效,它可能仍然对80%的病例有价值,而人类编码员可以处理罕见的20%。我们衡量:

RQ3:预测不变性- AI的输出是否一致且稳定?如果我们问同一个问题三次,是否会得到相同的答案?如果我们稍微调整问题的表述,答案会改变吗?这对生产系统很重要——用户期望确定性的行为。我们测试:

这些问题让我们全面了解:不仅仅是"它是否有效?",而是"它在何时有效,效果如何,以及我们能否依赖它?"

DataPipeline:从真实医疗编码到 Neo4j

第一步是获取真实的医疗数据,这需要反映现实世界医疗编码的复杂性。我们获取了:

ICD-10-CM 诊断编码(来自 CDC/CMS 官方来源的 51 个概念):

每个编码都包含:

数据摄取脚本(ingest_real_data.py)执行几个关键步骤:


步骤 1:流行度分桶- 我们不能只是随机抽取概念进行测试。如果那样做,我们很可能会得到大部分常见编码(因为它们在数据中出现得更多)。我们需要【分层抽样】:在不同流行度级别上实现均衡的代表性。

我们使用对数分布将概念划分为 50 个流行度桶:

这确保了当我们为评估抽取 30 个概念时,我们从每个桶级别获得 1-2 个概念,代表了从极其常见到极其罕见状况的完整谱系。

步骤 2:图结构创建- 每个概念在 Neo4j 中成为一个节点,具有以下属性:

(:Concept {
concept_id:"E11.65",
label:"Type 2 diabetes mellitus with hyperglycemia",
category:"Endocrine",
popularity_score:850,
popularity_bucket:43,
ontology:"ICD-10-CM"
})

概念链接到其本体:

(:Concept)-[ART_OF]->(:Ontology{name:"ICD-10-CM",version:"2024"})

步骤 3:验证- 摄取脚本验证:

运行python scripts/ingest_real_data.py后,我们在 Neo4j Aura 中拥有了 101 个真实的医疗概念,准备进行评估。

评估引擎:对大型语言模型进行测试

数据加载完成后,我们构建了评估流程(run_full_evaluation.py

分层抽样:比如,当评估30个概念时,系统不会只是从数据库中选取前30个。相反,它会:

  1. 将所有概念按流行度分组
  2. 计算从每个组中抽取多少样本(大致与组的大小成比例)
  3. 从每个组中随机选择

这确保了平衡的代表性。如果糖尿病代码都在高流行度组,而罕见遗传病都在低流行度组,我们的样本会同时包含两者。

LLM 查询生成:对于每个概念,我们生成一个精心设计的提示。以 ICD-10-CM 为例:

You are a medical coding expert. Your taskistoprovide the exact ICD-10-CM code
forthe following diagnosis.Diagnosis: Type2diabetes mellituswithhyperglycemia
RespondwithONLY the ICD-10-CM code,nothingelse. Format: X00.00
Your response:

为什么采用这种特定格式?

异步评估:系统使用 Python 的asyncio并发发送所有查询:

asyncdefevaluate_all_concepts(self, concepts):
tasks = [self.evaluate_concept(c)forcinconcepts]
results =awaitasyncio.gather(*tasks)
returnresults

响应解析:LLM 的响应并不总是干净的。以下是各种可能的例子:

响应解析器使用特定于本体的正则表达式模式:

它从响应中提取第一个有效代码,并根据已知模式进行验证。

指标计算:对于每个概念,我们计算:

  1. 精确匹配
    预测值 == 真实值吗?布尔值:正确或不正确。
  2. 莱文斯坦编辑距离
    :需要多少次单字符编辑(插入、删除、替换)来修正?





欢迎光临 链载Ai (http://www.lianzai.com/) Powered by Discuz! X3.5