mcpField
T
telemetry-terminology-similarity

telemetry-terminology-similarity

github.com/terrylica数据与数据库255 次安装1 天前更新
代码仓库

关于 telemetry-terminology-similarity

Telemetry Terminology Similarity 从句法、分类和语义维度为遥测字段名配对评分,适用于架构审查。另附提示词模板,供 LLM 根据原始结果提出带证据和置信度的重命名建议。

主要功能

  1. 01规范大小写并展开缩写
  2. 02从三个维度为字段对评分
  3. 03分析 JSONL 字段与架构
  4. 04与规范名称进行比对
  5. 05输出结构化 JSON 结果
  6. 06提供重命名建议提示词

适用场景

  1. 01发现遥测架构中的命名冲突
  2. 02比较 JSONL 日志中的字段
  3. 03在遥测变更发布前检查命名一致性

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/terrylica/cc-skills --skill telemetry-terminology-similarity

安装后在 Claude Code 中输入/telemetry-terminology-similarity确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

references/
proposer-prompt.md
term_similarity.py
references/canonical-dictionary/
build.sh
canonical-names.json
README.md

详细介绍

遥测术语相似度

对三个独立层中的遥测字段名称进行两两相似度评分。输出原始分数——不设阈值、不做聚类、不提供意见。使用结果的 AI Agent 会应用自己的领域判断。

自我演进技能:此技能会在使用过程中不断改进。如果说明有误、参数发生偏移,或需要采用变通方法——请立即修复此文件,不要拖延。只针对真实且可复现的问题进行更新。

何时使用此技能

在以下情况下使用此技能:

  • 审查遥测/日志记录架构中的命名冲突
  • 比较两个 JSONL 日志架构的字段重叠情况
  • 检测 trace_id、traceId、request_id、correlation_id 这类风格问题
  • 在发布遥测变更前验证字段命名的一致性

架构

5 层评分流水线——每一层都能捕捉其他层遗漏的问题:

┌─────────────────────────────────────────────────────────┐
│  Layer 1: NORMALIZE                                     │
│  camelCase/snake_case split + abbreviation expansion    │
│  wordninja for concatenated words                       │
│  "traceId" → "trace id", "ts" → "timestamp"            │
├─────────────────────────────────────────────────────────┤
│  Layer 2: SYNTACTIC (RapidFuzz, 0-100)                  │
│  token_set_ratio on normalized forms                    │
│  Catches: trace_id ↔ traceId, level ↔ log_level        │
├─────────────────────────────────────────────────────────┤
│  Layer 3: TAXONOMIC (WordNet Wu-Palmer, 0.0-1.0)        │
│  Head-noun synonym detection via hypernym tree          │
│  Catches: level ↔ severity, error ↔ fault, op ↔ action │
├─────────────────────────────────────────────────────────┤
│  Layer 4: SEMANTIC (sentence-transformers, 0.0-1.0)     │
│  Cosine similarity via all-MiniLM-L6-v2 embeddings     │
│  Catches: error ↔ exception, user_id ↔ account_id      │
├─────────────────────────────────────────────────────────┤
│  Layer 5: CANONICAL (--canonical flag, optional)        │
│  RapidFuzz vs bundled OTel/OCSF/CloudEvents dictionary  │
│  Catches: http_method → http.request.method (OTel)      │
├─────────────────────────────────────────────────────────┤
│  Output: All pairs scored + canonical anchors.          │
│  Agent decides what to act on — tool computes, judges.  │
│  Use proposer-prompt.md for structured rename proposals.│
└─────────────────────────────────────────────────────────┘

两阶段工作流:评分 → 提议

此技能分为两个阶段:

  1. 阶段 1 — 评分(term_similarity.py):计算 5 层的原始相似度分数。工具负责计算,不输出意见。
  2. 阶段 2 — 提议(references/proposer-prompt.md):内置的提示词模板,用于处理评分 JSON,并要求大模型生成结构化的重命名提议,附带置信度级别、证据引用和明确的例外选项。

这两个阶段经过刻意分离。阶段 1 是确定且可复现的;阶段 2 则应用只有掌握对话上下文的大模型才能提供的领域判断。

依赖项

均通过 uv run 安装(PEP 723 内联元数据——无需全局安装):

软件包用途大小
sentence-transformers语义嵌入(MiniLM-L6)~80 MB
rapidfuzz快速模糊字符串匹配(C++)~1.3 MB
wordninja概率式单词拆分~0.5 MB
nltkWordNet Wu-Palmer 同义词检测~30 MB
orjson快速 JSON 序列化~0.3 MB

首次运行时会下载 all-MiniLM-L6-v2 模型(约 80 MB)和 WordNet 数据(约 30 MB)。

脚本位置

分析脚本位于此技能的 references/ 目录中。使用前请解析路径:

# SSoT-OK: marketplace path resolution for cross-repo invocation
SCRIPT_DIR="$(dirname "$(find ~/.claude/plugins -path '*/telemetry-terminology-similarity/references/term_similarity.py' -print -quit 2>/dev/null)")"
SCRIPT="$SCRIPT_DIR/term_similarity.py"

以下示例均假设已设置 $SCRIPT。如果直接在 cc-skills 仓库中调用,请使用相对路径。

用法

直接分析字段名称
# SSoT-OK: uv run handles PEP 723 inline deps
uv run --python 3.14 "$SCRIPT" \
  trace_id traceId request_id correlation_id \
  level severity log_level priority
从 Python 代码库中提取字段

使用 Python 正则表达式提取(macOS 不支持 grep -P):

python3 -c "
import re, glob
fields = set()
for f in glob.glob('**/*.py', recursive=True):
    text = open(f).read()
    for m in re.finditer(r'\"([a-z][a-z0-9_]*?)\":', text):
        fields.add(m.group(1))
for f in sorted(fields):
    print(f)
" | uv run --python 3.14 "$SCRIPT"
从标准输入分析(通过 jq 等命令传入)
head -1 telemetry.jsonl | jq -r 'keys[]' | uv run --python 3.14 "$SCRIPT"
分析 JSONL 文件中的字段
uv run --python 3.14 "$SCRIPT" --jsonl /path/to/telemetry.jsonl
比较两个 JSON 架构
uv run --python 3.14 "$SCRIPT" --schema-a schema_v1.json --schema-b schema_v2.json
控制输出大小
uv run --python 3.14 "$SCRIPT" --top 30 field1 field2 field3   # Top 30 pairs
uv run --python 3.14 "$SCRIPT" --top 0 field1 field2 field3    # All pairs
uv run --python 3.14 "$SCRIPT" --json field1 field2 field3     # JSON output
对照规范标准(OTel/OCSF/CloudEvents)查询
# Anchor each field against 1,453 bundled canonical names from OTel + OCSF + CloudEvents
uv run --python 3.14 "$SCRIPT" --canonical http_method http_status request_id severity

输出会增加一个 === CANONICAL ANCHORS === 部分,显示每个字段最接近的标准名称。适用于“是否应该重命名以符合行业标准”的决策。

生成结构化重命名提议(阶段 2)

使用 --json --canonical 运行后,将输出粘贴到 references/proposer-prompt.md 中。这是一个内置的提示词模板,可生成原子化、便于审查的重命名提议,并附带置信度级别和明确的例外选项。

# Phase 1: Score
uv run --python 3.14 "$SCRIPT" --json --canonical [fields...] > analysis.json

# Phase 2: Apply proposer prompt (paste analysis.json into the template)
# The LLM produces structured proposals.json — review atomically

参数

参数默认值描述
--top50按综合得分显示排名前 N 的配对(0 = 全部)
--canonicalfalse使用捆绑的 OTel/OCSF/CloudEvents 字典查询各字段
--jsonl—从 JSONL 文件提取字段(所有唯一键)
--schema-a/-b—跨架构比较(两个 JSON 架构文件)
--jsonfalse输出结构化 JSON,而不是文本

输出格式

文本输出(默认)
Fields analyzed: 21
Unique after normalization: 19

=== EXACT DUPLICATES (after normalization) ===
  trace_id  ==  traceId
  timestamp  ==  ts

=== SCORED PAIRS (sorted by combined score) ===
    syn    tax    sem   comb  pair
    ---    ---    ---   ----  ----
  100.0  0.000  0.560  1.000  level                     <-> log_level
    0.0  1.000  0.472  1.000  error                     <-> fault
   66.7  0.909  0.457  0.909  operation                 <-> action
   46.2  0.833  0.251  0.833  level                     <-> severity
   28.6  0.667  0.700  0.700  error                     <-> exception

每组配对有三个独立得分——Agent 会读取这三个得分并据此判断:

  • syn(句法):高 = 表面名称变体
  • tax(分类):高 = WordNet 同义词(上位词树)
  • sem(语义):高 = 嵌入相似度(分布式)
  • comb(综合):max(syn/100, tax, sem) — 排序键
JSON 输出(--json)

结构化 JSON,包含 exact_duplicates 和 scored_pairs 数组。

各层的作用

场景syntaxsem哪一层占优
trace_id vs traceId100.00.01.0句法
level vs severity46.20.8330.251分类
error vs fault0.01.0000.472分类
operation vs action66.70.9090.457分类
error vs exception28.60.6670.700语义
user_id vs account_id47.10.00.792语义

缩写词典

规范化器会展开常见的遥测缩写:

缩写展开形式缩写展开形式
tstimestampuiduser id
reqrequestrespresponse
errerrormsgmessage
svcserviceenvenvironment
opoperationlvllevel
evteventctxcontext
acctaccountcfgconfiguration
durdurationlatlatency

通过编辑 term_similarity.py 中的 ABBREVIATIONS 添加特定领域的缩写。

故障排查

问题原因解决方案
ModuleNotFoundError缺少依赖使用 uv run(PEP 723 会自动解析)
模型下载缓慢首次运行首次下载后会缓存(总计约 110 MB)
从其他仓库运行时找不到脚本未解析路径按“脚本位置”一节设置 $SCRIPT
grep: invalid option -- PmacOS 缺少 PCRE改用 python3 -c "import re..." 模式

执行后复盘

此技能完成后,在结束前检查:

  1. 命令是否成功? — 如果没有,请修复导致失败的指令或错误表。
  2. 参数或输出是否发生变化? — 如果底层工具的接口已变化,请更新用法示例和参数表,使其保持一致。
  3. 是否需要变通方案? — 如果你不得不临时变通(使用不同标志、增加额外步骤),请更新此 SKILL.md,避免下次调用时重复采用相同的变通方案。

仅在问题真实且可复现时更新,不要基于推测更新。

评论

支持 Markdown