Skip to content

AI 工具参考

本文档整理 ai-service/src/tools/*.ts 中实际注册的 18 个工具,覆盖配置修改、代理操作、统计查询和运行诊断。

阅读约定

  • 工具来源仅包括 config.tools.tsproxy.tools.tsstats.tools.tsdiagnosis.tools.ts
  • index.ts 仅负责合并 allToolsrust-rpc.ts 仅提供 requestFromRust(...)pendingConfirmation(...) 等通用辅助,不单独算作工具。
  • 参数表严格按 inputSchema 的 Zod 定义记录:类型、可选性、枚举值、默认值、范围约束和 .describe(...)
  • 返回值按 execute 的真实路径记录:要么是 callback JSON,要么是 pending_confirmation,要么是 validation_error
  • 下文示例默认已从 ai-service/src/tools/*.ts 所在上下文导入 toolzrequestFromRust 等符号。

模块总览

模块源文件工具数说明
配置工具ai-service/src/tools/config.tools.ts9获取当前配置、生成待确认的配置修改动作
代理工具ai-service/src/tools/proxy.tools.ts3列出代理、切换代理、测试节点延迟
统计工具ai-service/src/tools/stats.tools.ts3获取流量摘要、域名排行、趋势数据
诊断工具ai-service/src/tools/diagnosis.tools.ts3健康检查、近期问题摘要、规则命中统计

通用返回结构

PendingConfirmationResult

pendingConfirmation(action, params) 生成,结构固定如下:

字段类型说明
actionstring当前待确认动作名,例如 add_proxy
paramsRecord<string, unknown>原始输入参数;字段与当前工具输入 schema 一致
status"pending_confirmation"固定字面量

ValidationErrorResult

createValidationErrorResult(validation) 生成,结构固定如下:

字段类型说明
action"validation_error"固定字面量
errorsValidationError[]校验错误列表
warningsValidationWarning[]校验警告列表

ValidationErrorValidationWarning 的字段相同:

字段类型说明
pathstring出错字段路径
messagestring说明消息

SanitizedConfigResponse

get_current_config 返回的结构如下:

字段类型说明
source"mihomo_runtime" | "config_file"实际读取来源
sanitizedboolean当前实现始终为 true
configRecord<string, unknown>已脱敏配置对象

DelayTestResult

test_delay 返回的结构如下:

字段类型说明
namestring测试节点名称
urlstring实际测试 URL,当前固定为 http://www.gstatic.com/generate_204
timeoutnumber实际超时毫秒数,当前固定为 5000
delaynumber延迟测试结果,单位毫秒

TrafficSummaryResult

get_traffic_summary 返回:

字段类型说明
daysnumber实际统计天数
summaryStatsOverview结构见 Tauri IPC 文档

TopDomainsResult

get_top_domains 返回:

字段类型说明
daysnumber实际统计天数
limitnumber实际返回数量
domainsDomainStat[]结构见 Tauri IPC 文档

TrafficTrendResult

get_traffic_trend 返回:

字段类型说明
granularity"hourly" | "daily"实际粒度
daysnumber实际统计天数
startstring查询窗口起始时间
endstring查询窗口结束时间
pointsTrafficPoint[]结构见 Tauri IPC 文档

ConnectivitySummary

check_connectivity 返回:

字段类型说明
reachablebooleanversionproxies 两个 API 是否都可用
apiAddressstring当前 Mihomo API 地址
collectorRunningboolean采集器是否运行中
activeConnectionsnumber当前活动连接数
proxyCountnumber代理项数量
selectedGroupsSelectedProxyGroup[]当前有选中节点的代理组
versionunknown | nullMihomo 版本 JSON;失败时为 null
issuesstring[]诊断问题列表

SelectedProxyGroup 字段如下:

字段类型说明
groupstring代理组名称
currentstring当前选中的节点名

RecentErrorsSummary

get_recent_errors 返回:

字段类型说明
windowMinutesnumber实际查询窗口分钟数
issuesRuntimeIssue[]当前运行时健康问题摘要
notestring附加说明

RuntimeIssue 字段如下:

字段类型说明
sourcestring问题来源,例如 mihomo_apicollectorruntime
severitystring严重级别,例如 errorwarninginfo
messagestring诊断消息

RuleMatchStatsSummary

get_rule_match_stats 返回:

字段类型说明
daysnumber实际统计天数
totalHitsnumber总规则命中数
matchHitsnumberMATCH 规则命中数
matchRatenumbermatchHits / totalHits,范围 0..=1
rulesRuleStat[]结构见 Tauri IPC 文档

配置工具

源文件:ai-service/src/tools/config.tools.ts

get_current_config

名称 get_current_config

参数

无。inputSchemaz.object({}).strict()

返回值

返回 SanitizedConfigResponse

说明

通过 requestFromRust("get_config") 获取当前 Mihomo 配置快照。Rust 会优先读取运行时配置,失败时回退到活动配置文件,并对敏感字段做脱敏。

调用示例

ts
get_current_config: tool({
  description: "获取当前 Mihomo 运行时配置快照",
  inputSchema: z.object({}).strict(),
  execute: async () => requestFromRust("get_config"),
})
ts
const input = {};
// execute -> requestFromRust("get_config")

:::

add_proxy

名称 add_proxy

参数

参数类型必填约束 / 默认值说明
namestringmin(1)节点名称
type"ss" | "vmess" | "vless" | "trojan" | "hysteria2" | "tuic"枚举代理协议类型
serverstringmin(1)服务器地址
portnumberint1..=65535端口
settingsRecord<string, unknown>无默认值协议特定配置

返回值

校验成功时返回 PendingConfirmationResult

ts
{
  action: "add_proxy",
  params: AddProxyParameters,
  status: "pending_confirmation"
}

校验失败时返回 ValidationErrorResult

说明

先把输入拼成代理片段,再调用 validateProxyFragment(...) 做 schema 校验;通过后只返回“待确认操作”,不会直接修改配置。

调用示例

ts
add_proxy: tool({
  description: "添加代理节点到 Mihomo 配置,返回待确认操作",
  inputSchema: addProxyParameters,
  execute: async (params) =>
    finalizeValidatedChange(
      "add_proxy",
      params,
      validateProxyFragment(buildProxyFragment(params)),
    ),
})
ts
const input = {
  name: "HK-01",
  type: "ss",
  server: "hk.example.com",
  port: 443,
};
// 典型返回:{ action: "add_proxy", params: input, status: "pending_confirmation" }

:::

remove_proxy

名称 remove_proxy

参数

参数类型必填约束 / 默认值说明
namestringmin(1)要删除的节点名称

返回值

返回 PendingConfirmationResult

ts
{
  action: "remove_proxy",
  params: RemoveProxyParameters,
  status: "pending_confirmation"
}

说明

不做额外 schema 校验,直接返回待确认动作;真正删除动作由后续 diff 预览和 Rust 端确认链路完成。

调用示例

ts
remove_proxy: tool({
  description: "删除指定代理节点,返回待确认操作",
  inputSchema: removeProxyParameters,
  execute: async (params) => pendingConfirmation("remove_proxy", params),
})
ts
const input = { name: "HK-01" };
// 返回:{ action: "remove_proxy", params: input, status: "pending_confirmation" }

:::

add_proxy_group

名称 add_proxy_group

参数

参数类型必填约束 / 默认值说明
namestringmin(1)代理组名称
type"select" | "url-test" | "fallback" | "load-balance"枚举代理组类型
proxiesstring[]元素 min(1)节点名称列表
filterstringmin(1)正则过滤节点名称
urlstring默认 "http://www.gstatic.com/generate_204"健康检查 URL
intervalnumberint> 0、默认 300检查间隔秒数

返回值

校验成功时返回 PendingConfirmationResult

ts
{
  action: "add_proxy_group",
  params: AddProxyGroupParameters,
  status: "pending_confirmation"
}

校验失败时返回 ValidationErrorResult

说明

内部调用 validateProxyGroupFragment(params)。虽然 proxiesfilter 都是可选字段,但如果两者都不传,校验阶段会返回错误。

调用示例

ts
add_proxy_group: tool({
  description: "添加代理组到 Mihomo 配置,返回待确认操作",
  inputSchema: addProxyGroupParameters,
  execute: async (params) =>
    finalizeValidatedChange(
      "add_proxy_group",
      params,
      validateProxyGroupFragment(params),
    ),
})
ts
const input = {
  name: "Auto",
  type: "url-test",
  proxies: ["HK-01", "JP-01"],
  url: "http://www.gstatic.com/generate_204",
  interval: 300,
};

:::

update_proxy_group

名称 update_proxy_group

参数

参数类型必填约束 / 默认值说明
namestringmin(1)代理组名称
updatesRecord<string, unknown>无默认值需要更新的代理组字段

返回值

校验成功时返回 PendingConfirmationResult,失败时返回 ValidationErrorResult

说明

内部调用 validateProxyGroupUpdateFragment(params.updates) 校验更新片段。

调用示例

ts
update_proxy_group: tool({
  description: "更新代理组配置,返回待确认操作",
  inputSchema: updateProxyGroupParameters,
  execute: async (params) =>
    finalizeValidatedChange(
      "update_proxy_group",
      params,
      validateProxyGroupUpdateFragment(params.updates),
    ),
})
ts
const input = {
  name: "Auto",
  updates: {
    interval: 600,
  },
};

:::

add_rule

名称 add_rule

参数

参数类型必填约束 / 默认值说明
type"DOMAIN" | "DOMAIN-SUFFIX" | "DOMAIN-KEYWORD" | "IP-CIDR" | "GEOIP" | "PROCESS-NAME" | "MATCH"枚举路由规则类型
valuestringmin(1)规则值,MATCH 类型可省略
policystringmin(1)目标策略或代理组
position"prepend" | "append"默认 "prepend"插入位置

返回值

校验成功时返回 PendingConfirmationResult,失败时返回 ValidationErrorResult

说明

内部会先做一层规则参数校验:当 type !== "MATCH" 时,value 不能为空;随后再把规则字符串交给 validateRuleFragment(...)

调用示例

ts
add_rule: tool({
  description: "添加路由规则,返回待确认操作",
  inputSchema: addRuleParameters,
  execute: async (params) =>
    finalizeValidatedChange("add_rule", params, validateRuleParameters(params)),
})
ts
const input = {
  type: "DOMAIN-SUFFIX",
  value: "example.com",
  policy: "Proxy",
  position: "prepend",
};

:::

remove_rule

名称 remove_rule

参数

参数类型必填约束 / 默认值说明
patternstringmin(1)规则匹配模式

返回值

返回 PendingConfirmationResult

ts
{
  action: "remove_rule",
  params: RemoveRuleParameters,
  status: "pending_confirmation"
}

说明

只生成“删除规则”的待确认动作,真正按模式查找并删除规则发生在 diff 生成阶段。

调用示例

ts
remove_rule: tool({
  description: "删除路由规则,返回待确认操作",
  inputSchema: removeRuleParameters,
  execute: async (params) => pendingConfirmation("remove_rule", params),
})
ts
const input = { pattern: "example.com" };

:::

update_dns

名称 update_dns

参数

参数类型必填约束 / 默认值说明
nameserverstring[]元素 min(1)DNS 服务器列表
fallbackstring[]元素 min(1)备用 DNS 服务器
fakeIpFilterstring[]元素 min(1)Fake-IP 过滤域名
enhancedMode"fake-ip" | "redir-host"枚举增强 DNS 模式

返回值

校验成功时返回 PendingConfirmationResult,失败时返回 ValidationErrorResult

说明

先把 camelCase 输入字段转换成 Mihomo 配置片段中的 fake-ip-filter / enhanced-mode 键,再交给 validateDnsFragment(...) 校验。

调用示例

ts
update_dns: tool({
  description: "更新 DNS 配置,返回待确认操作",
  inputSchema: updateDnsParameters,
  execute: async (params) =>
    finalizeValidatedChange(
      "update_dns",
      params,
      validateDnsFragment(buildDnsFragment(params)),
    ),
})
ts
const input = {
  nameserver: ["1.1.1.1", "8.8.8.8"],
  enhancedMode: "fake-ip",
};

:::

set_mode

名称 set_mode

参数

参数类型必填约束 / 默认值说明
mode"rule" | "global" | "direct"枚举运行模式

返回值

校验成功时返回 PendingConfirmationResult,失败时返回 ValidationErrorResult

说明

通过 validateModeFragment(params.mode) 校验模式值是否有效。

调用示例

ts
set_mode: tool({
  description: "切换 Mihomo 运行模式,返回待确认操作",
  inputSchema: setModeParameters,
  execute: async (params) =>
    finalizeValidatedChange("set_mode", params, validateModeFragment(params.mode)),
})
ts
const input = { mode: "rule" };

:::

代理工具

源文件:ai-service/src/tools/proxy.tools.ts

list_proxies

名称 list_proxies

参数

无。inputSchemaz.object({}).strict()

返回值

返回 requestFromRust("get_proxies") 的原始 JSON 结果,即 Mihomo /proxies 响应;当前工具层没有额外包裹返回结构。

说明

列出当前所有代理组与节点。

调用示例

ts
list_proxies: tool({
  description: "列出当前所有代理组与节点",
  inputSchema: z.object({}).strict(),
  execute: async () => requestFromRust("get_proxies"),
})
ts
const input = {};
// execute -> requestFromRust("get_proxies")

:::

switch_proxy

名称 switch_proxy

参数

参数类型必填约束 / 默认值说明
groupstringmin(1)代理组名称
namestringmin(1)目标节点名称

返回值

返回 PendingConfirmationResult

ts
{
  action: "switch_proxy",
  params: SwitchProxyParameters,
  status: "pending_confirmation"
}

说明

和配置工具不同,这里不直接调用 Rust 切换节点,而是先要求用户确认。

调用示例

ts
switch_proxy: tool({
  description: "切换代理组的当前节点,返回待确认操作",
  inputSchema: switchProxyParameters,
  execute: async (params) => pendingConfirmation("switch_proxy", params),
})
ts
const input = {
  group: "Proxy",
  name: "HK-01",
};

:::

test_delay

名称 test_delay

参数

参数类型必填约束 / 默认值说明
namestringmin(1)节点名称

返回值

返回 DelayTestResult

说明

工具输入只有节点名;真正的 URL 与 timeout 由 Rust callback 固定为 http://www.gstatic.com/generate_2045000ms

调用示例

ts
test_delay: tool({
  description: "测试指定节点延迟",
  inputSchema: testDelayParameters,
  execute: async (params) => requestFromRust("test_delay", params),
})
ts
const input = { name: "HK-01" };
// execute -> requestFromRust("test_delay", input)

:::

统计工具

源文件:ai-service/src/tools/stats.tools.ts

get_traffic_summary

名称 get_traffic_summary

参数

参数类型必填约束 / 默认值说明
daysnumberint1..=365、默认 7统计天数

返回值

返回 TrafficSummaryResult

说明

内部调用 requestFromRust("get_stats_overview", params)。Rust callback 会再次对 days 做边界裁剪校验。

调用示例

ts
get_traffic_summary: tool({
  description: "获取指定时间窗口的流量摘要",
  inputSchema: trafficSummaryParameters,
  execute: async (params) => requestFromRust("get_stats_overview", params),
})
ts
const input = { days: 7 };
// execute -> requestFromRust("get_stats_overview", input)

:::

get_top_domains

名称 get_top_domains

参数

参数类型必填约束 / 默认值说明
daysnumberint1..=365、默认 7统计天数
limitnumberint1..=100、默认 20返回数量

返回值

返回 TopDomainsResult

说明

内部调用 requestFromRust("get_domain_stats", params),Rust callback 会把最终 dayslimit 原样回显到结果中。

调用示例

ts
get_top_domains: tool({
  description: "获取流量排名靠前的域名列表",
  inputSchema: topDomainsParameters,
  execute: async (params) => requestFromRust("get_domain_stats", params),
})
ts
const input = {
  days: 7,
  limit: 20,
};

:::

get_traffic_trend

名称 get_traffic_trend

参数

参数类型必填约束 / 默认值说明
granularity"hourly" | "daily"枚举时间粒度
daysnumberint1..=365、默认 7统计天数

返回值

返回 TrafficTrendResult

说明

内部调用 requestFromRust("get_traffic_trend", params)。Rust callback 会根据粒度自动构造 start / end 时间窗口,并返回对应粒度的 points

调用示例

ts
get_traffic_trend: tool({
  description: "获取流量趋势数据",
  inputSchema: trafficTrendParameters,
  execute: async (params) => requestFromRust("get_traffic_trend", params),
})
ts
const input = {
  granularity: "daily",
  days: 7,
};

:::

诊断工具

源文件:ai-service/src/tools/diagnosis.tools.ts

check_connectivity

名称 check_connectivity

参数

无。inputSchemaz.object({}).strict()

返回值

返回 ConnectivitySummary

说明

检查 Mihomo version / proxies API 是否可用、采集器是否运行、当前活动连接数,以及各代理组的当前选中节点。

调用示例

ts
check_connectivity: tool({
  description: "检查当前 Mihomo API、代理和采集器的连通性摘要",
  inputSchema: z.object({}).strict(),
  execute: async () => requestFromRust("check_connectivity"),
})
ts
const input = {};
// execute -> requestFromRust("check_connectivity")

:::

get_recent_errors

名称 get_recent_errors

参数

参数类型必填约束 / 默认值说明
minutesnumberint1..=1440、默认 30最近 N 分钟

返回值

返回 RecentErrorsSummary

说明

当前版本没有独立的持久化错误日志;返回值基于即时运行时健康检查生成,因此更接近“近期健康问题摘要”而不是严格的错误日志查询。

调用示例

ts
get_recent_errors: tool({
  description: "获取最近的运行时错误或健康问题摘要",
  inputSchema: recentErrorsParameters,
  execute: async (params) => requestFromRust("get_recent_errors", params),
})
ts
const input = { minutes: 30 };

:::

get_rule_match_stats

名称 get_rule_match_stats

参数

参数类型必填约束 / 默认值说明
daysnumberint1..=30、默认 1统计天数

返回值

返回 RuleMatchStatsSummary

说明

工具名为 get_rule_match_stats,但底层实际调用 requestFromRust("get_rule_stats", params)。Rust callback 会固定使用 DEFAULT_RULE_STATS_LIMIT = 20,并额外计算 totalHitsmatchHitsmatchRate

调用示例

ts
get_rule_match_stats: tool({
  description: "获取规则匹配统计,便于判断 MATCH 兜底比例",
  inputSchema: ruleMatchStatsParameters,
  execute: async (params) => requestFromRust("get_rule_stats", params),
})
ts
const input = { days: 1 };

:::

MIT License