一、Agent用于医疗领域脑电图分析

来看一个故事,讲的是脑电波信号非平稳、个体差异大、人工分析耗时主观,所以搞个“AI脑电波分析师”,专门帮医生或研究人员解读脑电图(EEG),使用Agent来做。

EEGAgent: A Unified Framework for Automated EEG Analysis Using Large Language Models》,https://arxiv.org/pdf/2511.09947,开源地址在:https://github.com/rebootingLine/EEGAgent

核心思路是核心控制器Qwen3-235B(负责任务规划、工具选择、结果推理)、语义嵌入Qwen3-Embedding-8B(将任务描述转为高维向量,从EEG知识库检索相关信息)、9个核心工具以及4个功能

图片

细分来看。

1、9个核心工具

包括:normalAbnormal进行全局EEG正常/异常二分类、seizNormal进行单通道1s癫痫波检测、slowSeizBckg进行10s窗口背景/慢波/癫痫波三分类、eyemMuscle进行单通道1s眼动/肌电伪影分类、seizArtiBckg进行背景/伪影/癫痫波三分类;

图片

baseInfo工具获取结构化元数据(患者信息、电极配置等)、compute_amplitude工具计算(均值绝对值、均方根、最大/最小值)、compute_psd计算功率谱密度,得到各频段功率、compute_symmetry计算左右对称电极对的皮尔逊相关系数,衡量信号对称性;

2)脑电基础信息感知功能Perception

解析EEG元数据、构建分析上下文。

图片

步骤为:

step1.加载EEG数据时自动触发baseInfo工具,提取元数据和电极配置

->step2.结合知识库生成年龄适配的EEG预期特征(如55岁患者预期枕叶α波低振幅)【编码层用Qwen3-Embedding-8B模型,将知识条目与用户任务描述(如“分析55岁患者5-6分钟EEG”)均编码为8192维向量,检索Top-5最相关知识条目】;

->step3.输出初始感知结果,包含患者信息、记录参数、脑区-电极映射、年龄相关参考标准【如{年龄区间:20-60岁,α波特征:枕叶8-13Hz,低振幅;θ波:不明显}、电极映射知识:{FP1-F3:左前额叶;F4-C4:右额中央区}】;

3、多视角EEG片段分析能力Exploration

图片 输入用户指定时间区间[T_start,T_end](如300-360s,即5-6分钟)如【分析[300-360s];患者年龄:55岁;已知信息:无异常史】,LLM结合年龄特征(老年患者慢波增多),输出结论“弥漫性慢波活动(GRDA模式);

4、脑电事件检测功能Find out Event

定位癫痫波等事件的时间区间+脑区。

图片

步骤为:step1.粗粒度筛选(10s窗口)【调用slowSeizBckg工具扫描目标区间(如0-60s),输出每个10s窗口的癫痫波概率,若某窗口seiz_prob>0.4,标记为可疑区间】;

->step2.细粒度定位(1s窗口)【对可疑区间按1s分割,调用seizNormal工具(单通道)分析每个1s子段;

->step3.提取seiz_prob最高的通道(如F4-C4通道0-1sseiz_prob=0.68),对应脑区(右额中央区)】;

->step4.计算与临床标注的IoU(IntersectionoverUnion),取IoU>0.7的检测结果;

5、报告生成功能EEG Report

与用户交互以及脑电报告生成。

图片

整体思路如下:

图片

step1.【初始化ACNS标准模版】包含患者信息、背景活动、异常发现、结论4个模块;

->step2.【全EEG患者信息粗分析】 将EEG按10s分段,调用normalAbnormal(全局异常检测)和slowSeizBckg(慢波/癫痫波筛查),对每个分段,决策是否需要细分析(如粗分析发现slow_prob>0.8,触发1s细分析);

->step3.【信息填充】 从compute_psd提取频段特征(如“枕叶α波10Hz,低振幅”)获得背景活动;从检测结果提取事件(时间+脑区+概率,如“500s左额中央区癫痫波,概率72%”,作为异常发现);

->step4.【文本生成】 调用Qwen3-235B,输入模板+填充信息,生成结论(如提示词为“基于以下EEG分析结果,生成符合ACNS标准的临床报告,语言简洁、专业”)。

二、知识图谱动态本体扩展思路

来看一个知识图谱本体动态变化的故事,很有趣。

图片

构建动态知识图谱的问题,核心是突破预定义出来的本体,自动做扩展,如扩展本体以覆盖初始未定义的领域知识(如通信技术中的“OptiTran光传输协议”关系),并且实时纳入新出现的知识(如产品新功能、技术新标准),避免本体过时

因此,看一个工作《Agentic-KGR: Co-evolutionary Knowledge Graph Construction through Multi-Agent Reinforcement Learning》,https://arxiv.org/pdf/2510.09156,我们重点看其中重点看动态本体扩展的实现,核心思路是多轮RL交互实现本体的渐进式扩展。

但是,这种本体扩展(Ontology Expansion),Agentic-KGR中每轮迭代的“提取→暂存→更新→奖励计算→晋升”流程,本质是动态schema构建与验证的闭环,各环节通过结构化操作实现“潜在本体候选发现-暂存验证-协同优化-质量评估-正式入库”的本体进化。

其核心依赖两个能力项:

一个是LLM的知识提取能力【通过LLM的NER/RE能力发现未预定义的实体/关系,为本体扩展提供“原材料”(如Agentic-KGR用Qwen2.5系列模型提取通信领域新关系)】;

一个是反馈闭环机制【通过RL奖励、多智能体交互、时序约束(时态KG)确保扩展后的本体“有效且一致”,避免无意义的结构膨胀】;

来看下具体实现细节,很值得看看

图片

1、step1-提取阶段

从“固定本体”到“发现潜在新类型”,找本体扩展的“候选素材”,进行多源数据实体与关系抽取

输入包含三部分:①非结构化/结构化数据(如领域文档、标准规范);②历史本体schema(含已扩展类型及约束);③领域知识图谱(KG)快照(含实体/关系分布特征)。

也就是说,给LLM的不只是预定义的本体结构,还包括历史本体扩展记录(比如之前加过“快充功率”)、文本里的领域术语(如“IP68”“毫米波”),让模型知道“可以往哪些方向找新类型”

处理上由LLMAgent执行实体识别(NER)和关系抽取(RE)

其中,有个点叫可学习多尺度提示压缩机制(LearnableMulti-ScalePromptCompression),对输入数据进行语义蒸馏:

一个是通过交叉注意力(Cross-Attention)聚焦“本体相关语义单元”(如领域术语、实体-关系表述),过滤冗余文本;

一个是利用LLMAgent的类型预测能力,对未匹配预定义本体的语义单元(如“5GRAN频段”“IP68防护等级”),预测其潜在类型(如EntityType:BandRelationType:Supports

最后,输出候选实体-关系三元组,附带置信度评分(0-1区间)和数据来源标注(如文档ID)

2、step2.暂存阶段

避免未验证类型直接写入正式本体导致schema污染,同时通过多轮迭代积累候选的验证证据。

新建三元组不直接写入正式知识图谱,而是在Neo4j数据库中创建独立的暂存层PENDING_REL标签),为每个本体候选绑定结构化元数据,包含核心字段源实体ID/名称、目标实体ID/名称、关系类型、初始置信度、投票数(初始为1)、来源列表(记录文档ID)

具体的:

候选实体IDsrc_id/dst_id,如Device_001/Band_N41

潜在关系类型rel_typeSupports

候选置信度confidence,如0.78

候选被重复挖掘的次数votes,如2(两轮迭代均挖掘到该候选);

候选数据来源(文档ID列表)sources,如[Standard_3GPP,Doc_Wireless] ; 所属迭代轮次标识episode_tag,如Ep_137

基于这个,做更新。

如果后续迭代抽取到相同三元组,若后续迭代挖掘到相同类型的候选(通过src_id/dst_id/rel_type匹配),触发暂存层更新。

更新操作有:如置信度更新,取当前候选与历史候选的置信度最大值;

证据补充:投票数+1,并追加数据来源,做多源证据积累”,也就是将更新置信度(取最大值)、累计投票数并追加来源,避免重复存储。

3、step3.更新阶段

基于暂存候选的证据状态,同步优化两部分:

一个是本体结构(为潜在类型预留扩展接口,调整现有类型约束)

图谱更新上,基于KG更新算子,对正式本体schema进行“软调整”

对暂存中投票数≥2的潜在类型(如Band),在本体中新增“待验证类型节点”(如PendingEntityType:Band),并定义其与现有类型的临时关联(如DevicePendingHasAttributeBand),避免破坏现有本体一致性;

对冲突候选(如同一实体被预测为两种类型),基于图距离计算类型相似度,保留与现有本体兼容性更高的候选。

一个是LLMAgent参数(提升后续本体候选挖掘的准确性),形成“本体指导模型-模型优化本体”闭环。

具体的,基于策略梯度算法优化LLMAgent参数,利用GraphRAG的检索结果计算优势函数,让模型学习更有效的抽取模式。

以“本体候选挖掘质量”为目标,通过多轮强化学习(RL)更新LLMAgent参数:

优势函数融合GraphRAG检索结果(如候选与现有本体的匹配度);若模型挖掘的候选在暂存层获得高投票数,给予正向梯度更新,强化其对该类类型的挖掘能力;反之,若候选被判定为无效(如语义模糊),则通过负向梯度抑制同类预测。

此外,还需要做关系老化处理:本体冗余控制,对正式本体中长时间未关联新候选的类型**(如超过几天无更新),通过老化函数**降低其权重,为新类型扩展释放空间,避免本体结构僵化。

4、step4.奖励计算阶段

通过双维度奖励机制,量化评估“本体扩展的有效性”,为候选晋升提供决策依据,同时引导模型与本体向“高覆盖、低冗余”方向进化。

双维度反馈引导,这个主要是靠强化,要更新模型自身的能力,因此,**要设计奖励函数,奖励由环境奖励(R_env)和任务奖励(R_task)**加权组成。

其中:

环境奖励,评估本体结构优化,聚焦本体扩展的“结构价值”,包含两项核心指标:

一个是覆盖增益:通过子模函数计算新增候选对本体覆盖范围的提升(如Band类型覆盖的5G设备占比);

一个是冯·诺依曼熵增益:衡量本体结构多样性(如新增Supports关系后,实体关联的关系类型分布熵变化),同时,通过约束惩罚项抑制无效扩展(如重复类型、语义冲突类型)

任务奖励进行本体候选实用性评估,聚焦本体候选的“任务适配性”,包含几个。

一个是工具调用奖励:若候选能成功支撑下游工具(如KG检索、QA推理),给予+0.05奖励;失败则-0.1;

一个是格式合规奖励:候选类型定义符合本体约束(如属性类型匹配),给予+1.0奖励;

一个是准确性奖励:候选三元组与人工标注/权威数据匹配,完全匹配+1.5,部分匹配按F1score计算。

当然,这两个是双刃剑,需要调和,所以,进行动态权重调整

调整通过镜像下降(MirrorDescent)动态调整加权权重。

例如:若当前本体覆盖不足,提升alpha以优先优化覆盖增益;若本体冗余过高,降低alpha以强化任务实用性约束

5、step5.晋升阶段

这是最后一步,本体候选的正式入库,将经多轮验证的高置信度候选,正式写入本体schema,完成一次本体扩展,同时清理暂存层无效候选,保障本体整洁性

也就是,对暂存层的三元组进行筛选,且的候选关系,晋升为正式关系(:REL)

具体的,几个核心点:

一个是晋升阈值判定,对暂存层候选,满足以下条件则触发晋升:

置信度阈值:置信度≥阈值(如0.72);证据阈值:投票数≥阈值(如3);奖励阈值:该候选关联的环境奖励+任务奖励之和≥1.2;

然后,达到要求后,进行正式本体更新,通过Neo4j事务执行本体写入:

1)类型定义:将PendingEntityType:Band升级为正式EntityType:Band,写入本体schema,并补充约束(如Band的属性Frequency:Float);

2)三元组迁移:将暂存层关联三元组(如(Device_001)-[Supports]->(Band_N41))从PENDING_REL迁移至正式REL标签,同时保留证据(sources字段);

3)索引同步:为新类型创建索引(如CREATEINDEXentity_type_bandIFNOTEXISTSFOR(n:Band)ON(n.name)),保障后续检索效率。

一个是暂存层进行清理,对未满足晋升条件的候选,执行两类操作:

对于低置信候选,即置信度<0.3,直接删除,释放存储资源;

对于中等置信候选,置信度>0.3但小于阈值的,保留但降低权重,如乘以0.8,若下一轮仍未达标则删除,避免暂存层堆积。

最后,进行本体快照与版本控制,晋升完成后,生成新的本体schema快照(GraphSnapshot),记录:本次扩展的类型列表;晋升阈值与证据;本体结构变化(如类型数、关系数),为后续迭代的本体追溯与回滚提供支持。

然后重复如上5个步骤,迭代到下一轮,总共10轮。

其实,本质就是:抽取、打分、更新、逐步拟合。

参考文献

1、https://arxiv.org/pdf/2511.09947

2、https://arxiv.org/pdf/2510.09156

关于我们

老刘,NLP开源爱好者与践行者,主页:https://liuhuanyong.github.io

对大模型&知识图谱&RAG&文档理解感兴趣,并对每日早报、老刘说NLP历史线上分享、心得交流等感兴趣的,欢迎加入社区,社区持续纳新。

加入社区方式:关注公众号,在后台菜单栏中点击会员社区加入。