mizcausevic-dev/otel-genai-validator
GitHub: mizcausevic-dev/otel-genai-validator
基于官方语义约定校验 OpenTelemetry GenAI spans 的合规性,以库和 CLI 两种形式提供十项规则检查。
Stars: 0 | Forks: 0
# otel-genai-validator
根据官方的[语义约定](https://opentelemetry.io/docs/specs/semconv/gen-ai/)验证 OpenTelemetry GenAI spans。提供库 + CLI。
## 检查内容
| 规则 | 严重性 | 描述 |
|---|---|---|
| `missing-provider-name` | error | `gen_ai.provider.name` 是必填项 |
| `missing-operation-name` | error | `gen_ai.operation.name` 是必填项 |
| `unknown-operation-name` | warning | 不在已知集合内 (`chat`, `generate_content`, `text_completion`, `embeddings`, `retrieval`, `execute_tool`, `create_agent`, `invoke_agent`, `invoke_workflow`) |
| `missing-request-model` | warning | 已知情况下推荐使用 `gen_ai.request.model` |
| `missing-usage-input-tokens` | warning | 对于计费的 LLM 调用,推荐使用 `gen_ai.usage.input_tokens` |
| `missing-usage-output-tokens` | warning | 对于计费的 LLM 调用,推荐使用 `gen_ai.usage.output_tokens` |
| `negative-token-count` | error | token 数量 < 0 |
| `legacy-token-attribute` | warning | 遗留的 `gen_ai.usage.prompt_tokens` / `completion_tokens` (已重命名为 `input_tokens` / `output_tokens`) |
| `unexpected-span-kind` | warning | GenAI spans 通常为 CLIENT (3) 或 INTERNAL (1) |
| `span-name-mismatch` | info | `span.name` 未遵循 `{operation.name} {request.model}` |
## CLI
```
npx otel-genai-validate [--summary] [--strict] [--skip rule,rule] [--out report.json]
```
读取 OTLP/JSON 信封 —— `{ "resourceSpans": [ { "scopeSpans": [ { "spans": [...] } ] } ] }` —— 即 OTel Collector 文件导出器生成的结构。当产生任何 error 严重级别的结果时,将以非零状态退出;`--strict` 模式下,遇到 warning/info 也会失败。
## 库
```
import { validate, validateSpans } from "otel-genai-validator";
const payload = JSON.parse(/* OTLP/JSON */);
const report = validate(payload);
// { spans, findings, counts: { errors, warnings, infos }, ok }
if (!report.ok) {
for (const f of report.findings) {
if (f.severity === "error") console.error(f.ruleId, f.message);
}
}
```
如果你直接从 collector receiver 或内存中导出器消费 spans,`validateSpans(spans)` 可以接收已经扁平化处理的数组。
## 组合使用
- **与 [`llm-cost-span-exporter`](https://github.com/mizcausevic-dev/llm-cost-span-exporter) 搭配** —— 根据相同的约定验证它生成的 spans。
- **与 [`a2a-mcp-bridge`](https://github.com/mizcausevic-dev/a2a-mcp-bridge) 搭配** —— 当 agent 调用工具时,在进行关联之前验证底层的 GenAI span。
## 开发
```
npm install
npm run lint && npm run typecheck && npm run coverage && npm run build
npm run demo
```
## 许可证
[AGPL-3.0-or-later](LICENSE)
标签:API集成, GET参数, MITM代理, OpenTelemetry, 代码规范校验, 可观测性, 暗色界面, 生成式AI, 用户代理, 索引, 自动化攻击