模板生成与待治理清单

2026-10-11 · 用户已确认(第 10 节六条同日定下)· 同日已实施,kb、平台、meta 都在本地 main、未推送;实施记录、实施时定下的细节和下一步见第 11 节 · 范围:静态模板生成、两层模板号、噪音标记、去掉冲突,以及这一阶段的产出——给治理智能体的待治理清单

本文只用虚构例子;中债告警只写汇总数字,客户数据留在本机 daily_task/rca/中债/。界面示意画的是页面内容区,实际页面左侧还有约 220px 的导航栏。

1. 为什么要改

中债 8 份告警去掉客户模板号、让 kb 自己生成模板号后,在两份以上出现的客户模板共 154 个:91 个每份拿到的模板号都相同,19 个部分沿用,44 个在某一份全换了新号。生成的 520 个模板里有 42 个混进了多个客户模板,覆盖 45% 的告警。

逐个复算后,换号有两类原因。一类是内容本来不同(不同的日志行、不同的巡检项),按静态规则就该分开,靠调参数或治理阶段合并。另一类是代码逻辑的缺陷:

#缺陷后果
1「至少多少个词相同」按模板创建时那条告警的词数定,比较却拿泛化后变短的模板去比模板越泛化越难匹配。实例:创建时 43 个词要求至少 33 个相同,模板泛化后只剩 34 个词
2每并进一条,模板就再泛化一点泛化到几乎全是 <*> 后吸进别的类型的告警
3本批内按文本字母顺序逐条处理、并进第一个满足的模板;模板号是本批泛化后文本的哈希同样的告警换一种分批方式,得到不同的模板和号
4变量剔除先把本条告警自己的主机、IP、对象、对象名、资源换成 <OBJ>同一句话,对象列有没有值,剔除出来的文本就不一样。例:没有对象列的那份文件里作业名留在文本里,有对象列的几份里作业名变成 <OBJ>

2. 已定的决定(2026-10-10、10-11 用户)

#决定
T1静态阶段只用通用规则。去掉「本条告警自己的标识换成 <OBJ>」。静态规则合不到一起的同类模板,交给治理智能体按语义合并。
T2匹配用代表文本:模板的代表文本是创建它的那条告警剔除变量后的文本,之后不变。相似度 = 相同词数 ÷ 两边词数较大者,不小于阈值算相似;同时像多个取最像的,并列取最早创建的。
T3批内、批间都按告警时间顺序处理。模板号由「监控系统 + 代表文本」算哈希,创建时定、之后不变。带 <*> 的泛化文本只用来展示。
T4受保护的错误码、占位符、关键词、相似度阈值在界面上按库可调,放在「告警主题 › 设置」末尾。
T5改这些参数会换一代(第 4 节)。
T6模板号是两层结构:有父节点就用父节点的号。父节点新建、号以 m: 开头,看号就知道是合并来的。所有用到模板的环节(展示、统计、清单、解析规则、分析结果包、给 RCA 智能体的工具出参)都取有效模板号。存储不动,成员照旧各自记账。
T7去掉冲突功能。
T8去掉噪音页签和噪音审批;用户可以把某个模板标记为噪音,之后分析时剔除这些告警。
T9「依赖候选」改名,页签保留,等治理智能体有产出再优化。
T10这一阶段的产出是给治理智能体的待治理清单,改完代码连清单内容一起验证。
T11所有规则都在页面上看得见、改得了,代码里不留隐藏规则:分词、关键词判定(含 Exception/Error 结尾、比较运算符)都做成可配参数。
T12变体骨架同样不再去掉「本条告警自己的标识」。2026-10-11 实施后用户改:变体不再用骨架,改按剔除变量后的文本分(11.2)。
T13人可以在页面上发起模板合并,和治理智能体调同一个接口。
T14噪音告警不出现在结果包里,简报也不写。
T15待治理清单每项附「相似但没过阈值的模板」前 3 个。
T16「依赖候选」改名为「对象关系」。
T17人在页面上合并模板只有「确认合并」一步,没有「提交」;治理智能体提交的合并请求进「待确认 › 模板合并」。
T18待确认的页签为:解析规则(告警字段的提取规则,如对象、主机、应用)、模板合并、对象关系(原依赖候选)、语义约定、谓词。冲突、噪音、列映射都没有。
T19模板怎么生成只由 kb 的静态规则(第 3 节、可配参数)决定;在模板这件事上,治理智能体只做合并,不写模板正则。治理智能体的另一件事是写解析规则,即告警字段的提取规则。

3. 模板生成(算法包 2.0.0)

3.1 变量剔除

  1. 受保护的错误码先藏起来,最后原样放回。库设置里的列表 + 语义约定里的「错误码格式」。
  2. 按占位符表的顺序逐条替换。
  3. 空白合成一个空格。

不再有 <OBJ> 这一步。变体(同一模板下的不同写法)的骨架原来也先去掉本条告警自己的标识,同样去掉(T12):骨架 = 告警内容里的中文短语(按出现顺序)+ 命中的受保护错误码(去重排序)。已改(2026-10-11 用户,算法包 2.1.0):变体 = 同一模板下剔除变量后的文本,文本不同就是不同变体,和告警用什么语言写无关(11.2)。

3.1a 全部规则一览(T11)

静态阶段只有下面这些规则,都在「设置 › 模板生成」卡片里展示、可改,内置值预填,代码里不另有判断:

规则内置值作用
受保护的错误码6 条正则(Oracle、TNS、MQ、IBM 消息号、HTTP 4xx/5xx、errno 名)命中片段原样保留
占位符10 条有序正则(<TS> <DATE> <TIME> <UUID> <IP> <HEX> <HASH> <ID> <PCT> <N>)变量换成占位符;最后空白合成一个空格
分词正则<[A-Z*]+>|[^\W_]+(?:'[^\W_]+)*|[!<>=]+把剔除后的文本切成词;不匹配的字符(标点、下划线、空格)当分隔
关键词:中文(含有即算)超时、拒绝、重置、连接断开、连接中断、不可用、无法连接、连接失败、失败、恢复、不、未、无、满、不足、死锁、阻塞关键词序列不同的告警不归为同一模板(开关)
关键词:英文(整词,不分大小写)timeout、refused、rejected、unavailable、failed、failure、not、no、cannot、full、down、up、error、warning
关键词:正则(整词匹配)\w*(Exception|Error)、[!<>=]+
相似度阈值0.75代表文本匹配(3.2)
关键词序列必须一致开同上

变体的分法也在卡片里写明,本期只展示,不做参数。2.1.0 起变体按剔除变量后的文本分,用的就是卡片上这套规则。

3.2 匹配与模板号

对一批告警:按(告警时间, 行号)排序,同一监控系统内逐条处理
  剔除变量后的文本 t,分词得到 tokens
  候选 = 本监控系统当前代次里不晚于这条告警建的模板
         (库里已有的按创建它的那条告警的(时间, 行号)算 + 本批前面新建的)
  对每个候选 c(代表文本 r,分词 rt):
      关键词序列不同 → 跳过(开关,默认开)
      相似度 = LCS(tokens, rt) ÷ max(len(tokens), len(rt))
  取相似度 ≥ 阈值里最高的;并列取最早创建的 → 这条告警的模板
  一个都没有 → 新建模板:代表文本 = t,模板号 = s: + sha1(监控系统 + t) 前 12 位

候选很多时,先用「共有词数 ÷ 较长一方词数」这个上界和长度比筛掉不可能的,再算 LCS,结果不变。

确定性保证:一条告警分到哪个模板,只取决于它自己和比它早的告警。所以同一批数据按时间任意切分摄入、同一批数据再摄入一次,每条告警的模板号都和一次性摄入相同。这条写成单测。

只比不晚于本条告警建的模板(实施时定,2026-10-11 用户):原稿的候选是「当前代次的全部模板」。实测同一批再摄入时,比这条告警晚建、和它更像的模板也成了候选,中债 28618 条里有 108 条换号,不满足 8.1 的 A1。改为只比不晚于本条告警建的模板之后,两种比较都是 0 条不同。分组表为此加 origin_time、origin_row,记创建模板的那条告警的毫秒时间和它在文件里的行号;时间相同时才比行号,只在同一份文件内有意义。

已知限制:先摄入新数据、再补摄更早的数据时,早期告警只能匹配已有模板,不会回头改代表文本;补摄的结果和按时间顺序摄入可能不同。

展示文本:模板页面显示的泛化文本(不同之处记 <*>)由成员样本算出来,只展示,不参与匹配。分组表的 signature 列存代表文本,template_text 存展示文本。

客户数据带模板号时照旧直接用,不走这一节。

4. 参数设置

放在「告警主题 › 设置」页签末尾,新加一张卡片「模板生成」,每个库一份,内置值预填。

示意 · 设置页签末尾追加的卡片(内容区)

模板生成

没有客户模板号时,kb 先剔除变量、再按相似度把告警归成模板。改动后已有的 kb 生成模板会全部重算,要换一代。

相似度阈值0.75关键词序列必须一致开
受保护的错误码(命中的片段原样保留,不被占位符替换)
正则说明
ORA-\d{4,5}Oracle删除
\b[A-Z][A-Z0-9]{2,4}\d{4}[EWI]\bIBM 消息号删除
… 共 6 条内置 · 添加
占位符(按顺序替换,可拖动调整顺序)
顺序占位符正则
1<TS>\d{4}[-/]\d{1,2}[-/]\d{1,2}[ T]\d{1,2}:\d{2}…上移 下移 删除
5<IP>(?<![\d.])(?:\d{1,3}\.){3}\d{1,3}(?![\d.])上移 下移 删除
10<N>(?<![A-Za-z_])\d+(?:\.\d+)?(?![A-Za-z_])上移 下移 删除
… 共 10 条内置 · 添加
分词
分词正则:<[A-Z*]+>|[^\W_]+(?:'[^\W_]+)*|[!<>=]+
关键词(关键词序列不同的告警不归为同一模板)
中文(含有即算):超时拒绝失败恢复不未… 添加
英文(整词):timeoutrefusedfailednotdownerror… 添加
正则(整词匹配):\w*(Exception|Error)[!<>=]+ 添加

变体:同一模板下,按上面的规则剔除变量后文本不同的记为不同变体(只展示)。占位符没覆盖到的变量会多拆出变体。

预览在保留样本或选一份上传文件上,显示剔除后的文本、会分成多少个模板
保存

参数存在告警主题的设置里(template 一段)。没有保存过的库用内置值;保存后整套存下,页面看到的就是生效的。正则保存前校验能否编译;预览和摄入用同一套代码。

4.1 改参数

改占位符、关键词、阈值,代表文本和相似判定都会变,模板号跟着变,新旧模板之间没有确定的一一对应,所以换一代。流程同全局提取规则的 D3a:

  1. 预览:新参数下会分成多少个模板。
  2. 显示影响:作废多少分组、多少条已确认的解析规则。
  3. 输入库代号,保存后换一代。
  4. 自动用保留的上传文件重新摄入近 7 天,新一代不是空的。
  5. 已确认的解析规则带到新一代,状态为待确认:旧分组的告警在新一代落到哪个模板,就把规则挂成待确认版本,由人重新确认。

用客户模板号的库只有展示文本会变,不换代。

5. 两层模板号与模板合并

5.1 数据结构

位置改动
分组表 tb_sem_alert_group加 origin_time、origin_row(创建模板的那条告警,见 3.2)、parent_id(成员指向父节点)、noise 与标记说明、操作人、时间(第 6 节)。父节点也存成一行:模板号 m: 开头、没有自己的告警,展示文本取成员的汇总。
新表 tb_sem_alert_template_merge合并的审批记录:父节点、成员列表、依据(智能体的语义说明)、证据(正则、样本引用)、状态(待确认 / 已确认 / 已驳回 / 已撤销)、处理人与说明。同一成员同一时间只属于一条有效记录。
算法包库快照多一份「子模板号 → 父模板号」映射。分组时同时算两个键:存储用的(成员自己的)和有效的(父节点的)。

父节点的号在合并确认时生成,m: + 哈希(监控系统 + 合并记录 ID),之后不变。结构固定两层:只在同一监控系统内合并;父节点不能再有父节点;把模板并进已有父节点就是加成员;两个父节点合并时一边的成员挂到另一边,空了的父节点作废。

5.2 作用域:哪里取有效模板号

环节做法
摄入统计、样本、变体照旧记在成员自己名下(存储不动,撤销干净)。
解析规则(告警字段的提取规则)挂在父节点上,对所有成员生效。成员原有的规则在审批合并时处理:选一条保留,或由智能体给出合并后的规则一起审。
分析(结果包、给 RCA 智能体)按有效键分组:信号、模板表、时间线里只有父节点。
解析规则列表父节点一行,展开看成员;统计按成员求和。
分组详情、待治理清单按父节点折叠:样本取成员并集,条数求和。
噪音标记标在有效模板上(第 6 节)。
示意 · 解析规则列表里的父节点(内容区,部分列)
模板模板内容告警规则
m:3f2a91c0d7e4 合并 · 2 个模板作业 <*> 告警 Ended not OK57已确认
s:e1c0a7b2f5d9作业 JOB_A<N> 告警 Ended not OK40随父节点
s:7b44d02c9a13作业 nightly_check 告警 Ended not OK17随父节点
s:90ad3e17c2b8 噪音巡检脚本 ntp-check 退出码 <N>36仅全局

5.3 发起与审批(T13、T17)

合并记录只有一个创建接口:给出同一监控系统下的几个模板号(可以含已有父节点)、合并依据,可附正则和样本引用作证据。请求带「直接确认」时创建即生效,不带时是一条待确认记录。

6. 噪音

7. 冲突、「依赖候选」与待确认页签

待确认的页签(T18):

页签内容谁产生
解析规则告警字段的提取规则:对象、主机、应用等字段怎么从某一类告警里取,按模板(分组)写。不是模板的生成规则治理智能体提交;人在规则抽屉里写的可以直接确认
模板合并把同类的几个模板并到一个 m: 父节点(第 5 节)治理智能体提交;人在列表里合并的直接生效,不进这里
对象关系对象之间的关系,原「依赖候选」治理智能体(第 3 期),现在为空
语义约定IP 规划、系统别名、错误码格式等,作用于全库人手工新建或导入;治理智能体以后提
谓词告警分类用的受控词表;建库时预置 12 个已确认人手工新增

8. 待治理清单(这一阶段的产出)

治理智能体经 worklist 读,kb 读取时现算、不存表。改完后的内容:

部分内容
new有效模板(父节点折叠成员)里没有已确认、也没有待确认规则的;不含标为噪音的。每项带:监控系统、模板号(有父节点的给父节点号和成员号)、代表文本与展示文本、首末次、告警条数、没有对象的条数、要提取的字段、最近一次驳回或撤销的说明,以及「相似但没过阈值的模板」(T15):同一监控系统里相似度最高、但低于阈值的前 3 个,给出模板号、代表文本、相似度,供治理智能体判断要不要合并。先放没有对象的,再按条数从多到少。
drifted已确认规则的字段命中率下降、没有待确认新版本的。
manual连续驳回两次、转人工的。
(去掉)noiseCandidates噪音不再由治理智能体处理。

分组详情另由按分组查询的接口取:样本(每条带全局规则取到的各字段值)、变体、统计。

8.1 功能正确性(有确定的通过条件)

这一节的结果由逻辑决定,每条写明检查方法和通过条件,全部通过才算验收。效果好坏和处理速度现在定不了标准,放在 8.2 只记录。单测只用虚构数据(seed 7 和单测里内联的数据),中债数据只在本机跑,结果写进 daily_task/rca/中债/trial-results.md。

#验什么检查方法通过条件
A1模板号确定:分批方式不影响结果单测:同一份虚构数据(去掉模板号)一次摄入,与按时间切成 2 批、3 批(切点不同)分别摄入,比每条告警的模板号。本机:中债 8 份按时间合成一份离线处理一次,与逐份带已有模板处理,比每条告警的模板号两种做法每条告警的模板号 100% 相同;同一批数据再摄入一次,模板号和分组数不变
A2中债跨批次「换号」都有规则可解释脚本:对库 B 里每一次「某客户模板在后一份没沿用前面的生成号」,取那条告警剔除后的文本,按当时库里同监控系统的全部代表文本重算相似度和关键词序列每一次换号都满足「与所有已有代表文本的相似度都低于阈值,或关键词序列不同」,没有例外。换号的次数、稳定的比例属于效果,见 8.2
A3变量剔除不受字段取值影响单测:同一句告警内容放在有对象列、没有对象列的两份文件里分别摄入两份得到同一个模板号;剔除后的文本里不出现 <OBJ>
A4参数生效且没有隐藏规则单测:分别改占位符(加一条正则)、分词正则、三类关键词、阈值、关键词开关,看剔除后的文本和模板数;保存非法正则每种改动都按参数改变结果:加一条能命中某个变量的占位符后,只差这个变量的两个模板变成一个;去掉一个关键词后,只差这个关键词的两条告警能归为同一模板;关键词开关关掉后不再检查关键词序列。非法正则 422 且不保存;没有保存过参数的库与内置值结果相同
A5改参数换代单测 + 页面:库里有 kb 生成模板时改参数预览给出新模板数;不输库代号 422;输入后代次加 1;保留期内每份上传文件各排一个重新摄入任务;每条已确认的解析规则在新一代对应的模板上各有一个待确认版本。用客户模板号的库改参数不换代
A6两层模板号单测:两组合并后查解析规则列表、分组详情、待治理清单、分析结果包;再撤销父节点号以 m: 开头;以上四处只出现父节点,条数等于成员之和;解析规则挂在父节点上对成员生效;撤销后恢复成两组、统计不丢;跨监控系统合并、父节点再挂父节点都被拒绝
A7合并的两个入口单测 + 页面:人在列表多选两组「确认合并」;同一接口不带「直接确认」提交;治理智能体身份调用人的合并立即生效、待确认里没有;不带确认的进「待确认 › 模板合并」,确认后生效、驳回后不生效;治理智能体身份带「直接确认」被拒绝;成员各有已确认解析规则时不选保留哪条就不能确认
A8噪音标记单测 + 页面:标记一个模板为噪音后分析同一份文件;再取消结果包所有文件(简报、告警明细、信号、模板、时间线等)里都没有这个模板的告警,简报里也没有任何关于噪音的字样;待治理清单不含这个模板;取消后再分析恢复
A9冲突去掉、待确认页签单测 + 页面:摄入中债任意一份标识、关系的状态里没有 conflict;冲突接口不存在;待确认只有解析规则、模板合并、对象关系、语义约定、谓词五个页签,告警主题下没有噪音页签
A10待治理清单内容(本阶段产出)在重建的库 B 上取一次清单,用独立脚本按 kb 的数据重算后逐项对比见下面 A10 明细,全部一致
A11回归kb semantic 单测、PostgreSQL 回归、平台 semantic 单测、端到端用例 semantic-management(按新页签、设置卡片更新后)全部通过

A10 待治理清单的明细(库 B:8 份中债告警去掉模板号、按时间逐份摄入;先人工标 1 个模板为噪音、合并 1 组模板、驳回 1 组的解析规则两次,再取清单):

  1. new 的条目数 = 解析规则列表里「规则状态为仅全局、未标噪音」的有效模板数(父节点折叠成员)。
  2. 被合并的成员不单独出现,父节点作为一项出现,带成员模板号;被标噪音的模板不出现;连续驳回两次的那组在 manual 里,不在 new 里。
  3. 每项都有:监控系统、模板号、代表文本、展示文本、首末次、告警条数、没有对象的条数、要提取的字段、最近一次驳回说明(没有时为空)、相似模板。
  4. 排序:没有对象的条数大于 0 的全部排在前面,各段内按告警条数从多到少;脚本逐项检查相邻两项。
  5. 要提取的字段 = 模板层能写的标准字段 − 本监控系统全局规则已覆盖的字段;脚本按库里的全局规则重算后逐项相同。
  6. 相似模板:每项不超过 3 个,都在同一监控系统、相似度低于阈值、按相似度从高到低;脚本用同一套参数独立重算后相同。
  7. 告警条数、没有对象的条数与该模板在小时统计里的合计相同(注意 35 天保留只算仍在保留期内的天)。

8.2 效果与性能(现在定不了标准,只写内容和方法,结果照实记录)

这些结果取决于参数和数据,现在没有依据定门槛。实施后按下表的方法测,记进本机 trial-results.md,用户看过记录后再定标准或调参数。中债都用重建的库 B(8 份去掉模板号、按时间逐份摄入、内置参数)。

#验收内容方法记录什么
B1生成模板与客户模板的对应沿用 v1/template_compare.py:从结果包 templates.csv 经 template_key 取生成的模板号,按告警 id 和客户模板号对齐,客户模板按(监控系统, 客户模板号)计在两份以上出现的客户模板里:每份号都相同 / 部分沿用 / 全换新号各多少(改前是 91 / 19 / 44);一个生成号混进多个客户模板的个数和告警占比(改前 42 个、45%);一个客户模板在一份里拆成多个生成号的个数;生成模板总数(改前 520,客户模板 491)
B2换号的原因分布A2 的脚本,按原因分类计数相似度低于阈值、关键词序列不同各多少;每类附 3 个例子(模板号、两边的代表文本,留在本机)
B3相似度阈值的影响库 B 的数据离线处理,阈值取 0.6、0.7、0.75、0.8、0.9 各跑一次,其余参数用内置值每个阈值下 B1 的各项数字,供选默认阈值
B4待治理清单的规模A10 那次取的清单new、drifted、manual 的条目数;new 里没有对象的占多少;有相似模板的条目占多少、相似度分布
B5处理耗时本机单进程 kb,库 B 逐份摄入;设置卡片的预览;换代后的重新摄入;确认一条解析规则每份摄入的秒数(改前 3 月那份 9056 条 99 s);预览的秒数;换代到重新摄入完成的总时间;确认解析规则的秒数(改前 65–99 s,会超过平台到 kb 的代理超时)

9. 影响面

位置改动
aimp-kb 算法包text.py 变量剔除可配、去掉 <OBJ>;cluster.py 代表文本匹配;records.py 分组与有效键;aggregate.py 去掉噪音规则、加噪音剔除;ALGO_VERSION 升 2.0.0。
aimp-kb 服务设置校验与换代;合并表与审批;分组表 parent_id、噪音标记列;去掉冲突、噪音表与接口;清单改造。需要一个迁移,旧数据不兼容(库 A、库 B 删除后重建)。
aimp-platform 页面设置页签加卡片;解析规则列表与抽屉显示父节点、噪音标记,多选后「合并」→「确认合并」;待确认整理为五个页签(去掉冲突、噪音,加模板合并,「依赖候选」改名对象关系);去掉告警主题下的噪音页签。
aimp-meta端到端用例;流程稿、数据标准、设计文档同步(接上原任务单的 W1)。
aimp-ops-skills算法包副本第 4 期再同步。

10. 原未决问题的结论(2026-10-11 用户)

#问题结论
1「依赖候选」的新名字「对象关系」
2关键词里的内置规则是否可配可配;所有规则清晰可见,代码里不藏规则(T11)。分词正则一并可配
3变体骨架是否去掉本条告警自己的标识去掉
4人能否手工发起合并要做,和治理智能体调同一个接口
5噪音告警是否留在结果包里不留,结果包里完全不出现
6清单是否附相似但没过阈值的模板附,前 3 个

11. 实施记录与交接(新会话从这里开始)

11.1 已实施(2026-10-11,都在本地 main,未推送)

仓库提交内容
aimp-kb429d009算法包 2.0.0(规则参数化、去掉 <OBJ>、代表文本匹配、有效键、噪音剔除);迁移 0092;噪音改为标记模板
aimp-kbce7ecef模板合并的提交、审批、撤销;列表、详情、清单、概览按父节点折叠
aimp-kb6869c1c去掉冲突
aimp-kb03daa67模板生成规则的保存、预览、换代、规则带到新一代
aimp-kb0bc08da清单附相似模板,各类条目字段一致
aimp-kb65bfb0b、8819a04候选只取不晚于本条告警建的模板(3.2);PostgreSQL 回归按全部语义迁移升降级
aimp-platform7be1d613设置卡片、解析规则的合并与噪音标记、待确认五个页签、去掉噪音页签
aimp-meta00cfdfe端到端用例 semantic-management 按新流程改写
aimp-kb801ef2f实施后用户改(11.2):算法包 2.1.0,变体按剔除变量后的文本分;分组详情只列最近出现的 100 个变体并给总数
aimp-platform6eeb0267、6e138a97解析规则抽屉的变体页签改为表格:剔除变量后的文本、所属成员、可读的首次与最近出现时间、保留样本(可展开)
aimp-platformc244bb0b实施后用户改(11.2):抽屉的「样本」「统计与命中率」合成「相关告警」,上面按天的告警数量,下面保留的样本;字段命中率改为字段表的「取值率」列
aimp-kb5f47506实施后用户改(11.2):算法包 2.2.0,去掉通用调用失败词和从正文抽调用目标,调用失败与目标只按解析规则;去掉 /stopword 动作
aimp-platformca10ee6a静态阶段去掉未解析目标的入口:抽屉页签、解析规则页的筛选与列、告警对象的子页、设置页的引用停用词

本机部署:迁移前快照 .runtime/backups/kb-20261010T231656Z(UTC 时间命名),kb 迁到 0092,清空全部 21 张 tb_sem_* 和旧语义库的存储目录,平台前端重新构建。当前的中债库 B 是 zz-gen-20261011:8 份去掉模板号、按时间逐份摄入、内置参数,只有静态处理的结果,没有任何确认、合并、标记。端到端用例跑三遍留下 6 个虚构库(3 个 sem-ui-*、3 个 sem-ro-*),都已停用,照惯例保留。库 ID 在本机 daily_task/rca/中债/v2/results/state.json。

2026-10-11 收尾(用户纠正):这一阶段只做静态处理,不应有任何确认。8.1 的 A10 前置(标噪音、合并、驳回两次)和 8.2 B5 的「确认一条解析规则的秒数」测的是治理阶段的功能,验收时曾在先建的库 B、计时用的库 C 上做过,两个库已删除,库 B 按纯静态数据重建,A10、B4 在重建后的库上重做。合并、噪音、驳回两次转人工在清单里的表现只在单测(test_sem_merges、test_sem_ui_contract、test_sem_alertalgo_v12)里核过。确认解析规则、确认模板合并现在的流程、耗时拆分和问题见 docs/semantic-confirm-and-merge-flow.md,下一阶段决定怎么改。

验收:8.1 的 A1–A11 全部通过,8.2 的 B1–B5 已测完,数字记在本机 daily_task/rca/中债/trial-results.md 第 5 节。汇总:

测试:kb semantic 单测 159 passed(63 个 PostgreSQL 专用用例在 sqlite 下跳过),PostgreSQL 回归 63 passed,平台 semantic 单测 57 passed,端到端用例 2 passed。

变体改口径(2.1.0,11.2)之后:kb semantic 单测 163 passed(65 个在 sqlite 下跳过),PostgreSQL 回归 64 passed,平台 semantic 单测 58 passed。库 B 先拍快照 .runtime/backups/kb-20261011T055546Z,删掉后按同样做法重建(代号不变):变体 1997 个,和离线算的一致;模板号与离线逐条比 0/28618 不同,A10 清单 539 项独立脚本 0 处问题,和改口径前相同。数字在 trial-results.md 5.3 节。

去掉通用目标抽取(2.2.0,11.2)之后:kb semantic 单测 164 passed(65 个在 sqlite 下跳过),PostgreSQL 回归 64 passed,平台 semantic 单测 62 passed。合成数据里三处调用失败(URL、target=、jdbc:)改由规则的 relations 写明,测试改走规则这条路。库 B 拍快照 .runtime/backups/kb-20261011T064917Z 后删掉重建(代号不变):模板 539、变体 1997、样本 3955、对象 2941,和 2.1.0 相同;未解析目标由 363 个变为 0,调用失败关系 0(2.1.0 也是 0);模板号与离线逐条比 0/28618 不同,B1 仍是 103 / 23 / 28,A10 清单 539 项 0 处问题。

11.2 实施时定下的细节

标「用户」的由用户在实施中决定(2026-10-11),其余是方案没写、按方案意图定的缺省做法。

事项做法定的人
候选模板的范围只比不晚于本条告警建的模板(3.2)用户
换代后几条已确认规则落到同一个新模板取落到这个模板的告警最多的那条,并列取较早确认的;计数跨重新摄入的各份文件累加;一个旧模板的告警散到几个新模板时,每个新模板各挂一个待确认版本用户
治理智能体的身份只在服务层判:合并的创建接口只有用户主体能带「直接确认」,其他主体只能建待确认记录(单测模拟集成主体)。HTTP 路由这一期仍只收用户主体,第 2 期治理工具族接通路时再放开用户
撤销合并后成员的规则恢复成员合并前各自的已确认规则:合并期间成员的规则只是不生效,不作废用户
变体的分法同一模板下剔除变量后的文本不同就是不同变体(和生成模板用同一套剔除规则),不再用中文短语 + 受保护错误码:中文绑定没有道理,英文告警分不出变体,用中文写的机构名反被拆成变体。算法包升到 2.1.0(按 1.2.0 的先例记次版本,库 B 随之重建)。中债库 B 上变体由 824 个变为 1997 个,单个模板最多 66 个;分组详情只列最近出现的 100 个并给总数,界面按表格显示、时间可读用户
规则抽屉的统计「样本」与「统计与命中率」合成「相关告警」:上面是落到这个模板的告警按天的条数(多个对象合计、列出各小时条数,统计只计上传声明的时段、保留最近一次导入日往前 34 天,没有统计时写明最近出现时间),下面是保留的样本。字段命中率挪到「规则与预览」字段表,加「取值率」列,只有已确认的本模板规则写了的字段有值用户
通用调用失败与目标抽取去掉。原来正文里出现「失败」「failed」「超时」这类词就判调用失败,再从正文里抽 IP、主机:端口、URL、jdbc: 串当调用目标,规则在代码里、界面上看不到。中债库 B 上抽出 363 个目标、匹配成功 0 个,其中 167 个是 Java 堆栈的「文件名:行号」(形如 Xxx.java:133),102 个是正文开头的来源主机自己的另一个地址。算法包升到 2.2.0(次版本,库 B 重建);调用失败与目标只按解析规则的 classify.call_fail、relations,synonym 约定和引用停用词现在没有地方用,治理阶段再定用户
成员带噪音标记再合并合并后只看父节点的标记,成员自己的标记不生效,撤销后恢复;合并对话框提示哪些成员标了噪音用户
两个哈希s: = sha1(监控系统 + \x1f + 代表文本) 前 12 位;m: = sha1(监控系统 + \x1f + 合并记录 ID) 前 12 位缺省
两个父节点合并ID 小的父节点留下,另一个的成员挂过来,它自己作废;它的已确认合并记录记为历史版本缺省
合并时只有一条已确认规则自动带到父节点;一条都没有时父节点没有规则(仅全局)缺省
相似但没过阈值的模板候选是同一监控系统的其他有效模板(包括标了噪音的);不列相似度为 0 的;并列取较早创建的;父节点取成员代表文本里最高的一对;客户模板号没有代表文本,用展示文本去掉 <*> 比。转人工的条目也带要提取的字段、最近一次驳回说明和相似模板缺省
展示文本成员文本逐条按 LCS 合并,不同之处记 <*>;两段文本词数乘积超过 25 万的那条跳过(只影响展示)缺省
换代后的重新摄入旧一代里每份做完摄入、仍在保留期的上传文件排一个任务,窗口取这份文件各次摄入窗口的并集,按数据时间先后排队缺省
用客户模板号的库改规则不换代,按保留样本立即重算展示文本,不加规则版本号缺省
分析时剔除噪音简报的「读入行数」也不计这些告警,结果包里看不出剔除过;alerts.csv、signals.csv 去掉 noise_rule 列,简报的段名【范围与噪音】改为【范围】缺省
结果包里的模板号templates.csv、信号、时间线按有效模板(父节点);alerts.csv 的 template_id 列仍是原始的标准字段(客户模板号),有效模板在 monitor_group、template_key缺省
快照noise.csv 换成 noise.json(有效模板号),新增 parents.json;templates.json 每项带 since(创建它的告警)缺省

11.3 已知问题与下一步

约束沿用原任务单第 2 节:提交保持一条线、不推送、不带品牌词和署名行;中债数据只放 daily_task/rca/中债/;不调外部模型;默认不开子 Agent。这一阶段不验证语义相关的结果(谁写解析规则、能不能指向根因)。