1
0

feat: 新增 LLM checker 支持大模型服务应用层拨测

基于 AI SDK v6 实现 openai/openai-responses/anthropic 三类 provider 的 http/stream 模式调用
支持 output/finishReason/usage/stream 等完整 expect 断言链路
新增 9 个源文件和 5 个测试文件共 78 个测试
更新 README/DEVELOPMENT/probes.example.yaml 和 probe-config.schema.json
This commit is contained in:
2026-05-19 00:06:53 +08:00
parent 52262a31f6
commit 349896bd02
24 changed files with 3511 additions and 8 deletions

View File

@@ -10,11 +10,11 @@
---
DiAL 是一个自托管的拨测监控工具,支持 **HTTP**、**命令行**、**数据库**、**TCP**、**UDP****Ping** 多种拨测类型。通过 YAML 配置文件定义拨测目标,后端定时并发执行拨测并将结果持久化到本地 SQLite前端 Dashboard 展示各目标的实时状态、可用率和耗时趋势。
DiAL 是一个自托管的拨测监控工具,支持 **HTTP**、**命令行**、**数据库**、**TCP**、**UDP****Ping** 和 **LLM** 多种拨测类型。通过 YAML 配置文件定义拨测目标,后端定时并发执行拨测并将结果持久化到本地 SQLite前端 Dashboard 展示各目标的实时状态、可用率和耗时趋势。
**功能亮点:**
- 多种拨测类型HTTPGET/POST/PUT 等、Cmd命令行执行、DBPostgreSQL/MySQL/SQLite、TCP端口可达性 + Banner 探测、UDP自定义 payload 请求-响应、PingICMP 存活、延迟、丢包率)
- 多种拨测类型HTTPGET/POST/PUT 等、Cmd命令行执行、DBPostgreSQL/MySQL/SQLite、TCP端口可达性 + Banner 探测、UDP自定义 payload 请求-响应、PingICMP 存活、延迟、丢包率)、LLM大模型服务应用层健康检查
- 丰富的校验规则状态码、响应头、JSONPath、CSS 选择器、XPath、正则匹配、数值比较等
- 响应式 Dashboard实时状态、可用率统计、耗时趋势图、手动/自动刷新
- 多主题支持:系统、明亮、黑暗三种主题模式
@@ -218,7 +218,7 @@ targets:
| `id` | 目标唯一标识,最长 30 字符,支持字母数字、下划线、连字符,不参与变量替换 | 是 |
| `name` | 展示名称,最长 30 字符,支持变量替换,可省略或显式 null前端展示时 null 回退到 `id` | 否 |
| `description` | 目标描述,最长 500 字符,支持变量替换,可省略或显式 null允许空字符串 | 否 |
| `type` | 目标类型:`http``cmd``db``tcp``ping` | 是 |
| `type` | 目标类型:`http``cmd``db``tcp``udp``ping``llm` | 是 |
| `group` | 分组名称 | 否,默认 `"default"` |
| `interval` | 覆盖全局拨测间隔 | 否 |
| `timeout` | 覆盖全局超时时间 | 否 |
@@ -270,6 +270,26 @@ targets:
Ping checker 通过系统 `ping` 命令执行 ICMP 探测,支持 Linux、macOS 和 Windows 输出解析。
**LLM 类型** (`type: llm`)
| 字段 | 说明 |
| --------------------- | ----------------------------------------------------------- |
| `llm.provider` | 模型提供方:`openai``openai-responses``anthropic` |
| `llm.url` | API base URL |
| `llm.model` | 模型名称 |
| `llm.prompt` | 单轮 prompt |
| `llm.mode` | 调用模式:`http`(默认,非流式)或 `stream`(流式) |
| `llm.key` | API key默认空字符串支持 `${VAR}` 变量替换) |
| `llm.authToken` | Bearer token`anthropic` provider`key` 互斥) |
| `llm.headers` | 附加请求头(与 `defaults.llm.headers` 合并) |
| `llm.ignoreSSL` | 忽略 HTTPS 证书校验,默认 `false` |
| `llm.options` | 生成选项(与 `defaults.llm.options` 合并) |
| `llm.providerOptions` | Provider 专属选项(与 `defaults.llm.providerOptions` 合并) |
`llm.options` 支持 `maxOutputTokens`(默认 `16`)、`temperature`(默认 `0`)、`topP``topK``presencePenalty``frequencyPenalty``stopSequences``seed`
`defaults.llm` 支持 `mode``headers``ignoreSSL``options``providerOptions`,不支持 `provider``url``model``key``authToken``prompt`
#### expect — 期望校验
| 字段 | 适用类型 | 说明 |
@@ -278,6 +298,11 @@ Ping checker 通过系统 `ping` 命令执行 ICMP 探测,支持 Linux、macOS
| `exitCode` | Cmd | 可接受的退出码列表;未指定时不校验 |
| `headers` | HTTP | 响应头校验 |
| `maxDurationMs` | 全部 | 最大耗时阈值(毫秒) |
| `output` | LLM | 模型输出校验(数组:`equals`/`contains`/`regex`/`json` |
| `finishReason` | LLM | 期望的 finish reason 字符串 |
| `rawFinishReason` | LLM | 期望的原始 finish reason 字符串 |
| `usage` | LLM | Token usage 校验(`inputTokens`/`outputTokens`/`totalTokens` |
| `stream` | LLM | 流式断言(`completed``firstTokenMs`,仅 `mode: stream` |
| `body` | HTTP | 响应体校验(数组,可组合使用,见下方) |
| `stdout` / `stderr` | Cmd | 输出校验(数组,每项一个操作符对象) |
| `rowCount` | DB | 查询返回行数校验(操作符对象) |