Skip to content

工具组配置

工具组(Tool Groups)将内置工具按用途分组,供工具调度器按需选取,避免一次性把全部工具塞给模型。由 src/services/tools/ToolGroupManager.js 管理。

加载来源与优先级

ToolGroupManager.init() 按以下顺序加载工具组:

  1. data/skills.yamlskills.groups(优先):存在且有启用组时使用,来源标记 skills-config
  2. 内置工具类别 toolCategories(回退):当 skills.yaml 无可用分组时启用,来源标记 builtin
  3. 外部 MCP 服务器工具组(追加):已连接的外部 MCP 服务器工具自动成组,索引从内置组之后继续编号,来源标记 mcp

关于 config.yaml 的 toolGroups 段

config/config.yaml 中可能存在 toolGroups 段,它是通过管理接口新增/修改/删除工具组时由 saveGroups()config.set('toolGroups', ...)写入的持久化产物ToolGroupManager.init() 不会把该段作为加载来源——运行时工具组以 skills.yaml 为准。因此如需长期调整分组,应编辑 data/skills.yaml

skills.yaml 工具组定义

工具组定义位于 data/skills.yamlskills.groups 数组,每个组的字段如下:

yaml
skills:
  groups:
    - index: 0                  # 工具组索引(调度时引用)
      name: 'basic'             # 组标识名
      description: '基础工具:获取时间、日期、农历、节日、系统环境信息等'
      tools:                    # 该组包含的工具名列表
        - get_current_time
        - get_lunar_date
        # ...
      enabled: true             # 是否启用该组
    - index: 6
      name: 'admin'
      description: '群管理:禁言、踢人、设置群名片/头衔、发送公告等(需要管理员权限)'
      tools: ['mute_member', 'kick_member', '...']
      enabled: true
      requiredPermission: 'admin'  # 使用该组所需权限

字段说明

字段类型必填说明
indexnumber工具组索引,调度器通过索引选取工具组
namestring组标识名
descriptionstring组描述,冒号()前的部分会作为 displayName 展示
toolsstring[]该组包含的工具名列表
enabledboolean是否启用,默认 true;仅 false 时禁用
requiredPermissionstring使用该组所需权限(如 adminmaster),无则任意用户可用

说明:displayNamedescription.split(':')[0] 派生(无冒号时回退为 name);权限校验依赖调用上下文,仅当请求带权限信息时才对 requiredPermission 组生效。

内置工具组一览

以下为 data/skills.yaml 默认定义的工具组(共 28 组,索引 0–27):

索引name说明特殊标记
0basic基础工具:时间、日期、农历、节日、系统环境等
1user用户信息:QQ 资料、好友列表、发送者信息、点赞等
2botBot 信息:机器人自身信息、状态、好友列表等
3group群组信息:群资料、成员列表、管理员、群公告等
4group-stats群统计:星级、龙王、发言榜、幸运字符、群荣誉等
5message消息操作:发消息、@用户、聊天记录、撤回、转发解析等
6admin群管理:禁言、踢人、群名片/头衔、群公告等requiredPermission: admin
7media媒体处理:发图片/视频/表情、二维码、图片解析等
8voice语音:AI 语音对话、TTS、语音识别、发送语音等
9search搜索:Bing/DuckDuckGo、网页获取、维基、翻译、天气、热搜等
10web网页访问:访问 URL 获取内容
11memory记忆管理:保存、检索、删除用户记忆
12context上下文管理:当前/群聊上下文、清空对话、引用消息等
13file文件操作:群文件上传下载、本地读写、目录管理、URL 下载等
14utils实用工具:计算、随机、编码、时间戳、正则、文本处理等
15extra扩展工具:天气、一言、骰子、倒计时、短链、IP 查询、插画等
16schedule定时任务:创建自然语言定时任务、查看和取消
17shell系统命令:执行 Shell、系统/进程信息、环境变量等enabled: falserequiredPermission: master
18bltools-music音乐搜索:QQ 音乐搜索并发送音乐卡片
19bltools-emoji表情包工具:表情包搜索、消息表情回应
20bltools-image图片工具:Bing 图片、壁纸搜索、AI 图片编辑
21bltools-bilibiliB 站工具:视频搜索、视频 AI 总结
22bltools-video视频分析:使用智谱 AI 分析视频内容
23bltools-githubGitHub 工具:获取仓库详细信息
24bltools-mindmapAI 思维导图:根据描述生成思维导图图片
25reminder定时提醒:相对/绝对时间、每天/每周重复
26imageGenAI 绘图:文生图、图生图、文生/图生视频、预设关键词生图
27qzoneQQ 空间说说:发布/删除说说、点赞、签名、戳一戳、收藏等

危险工具组默认关闭

shell(索引 17)默认 enabled: false 且需 master 权限,包含 execute_command 等高危工具。启用前请确保仅主人可触发。

工具组与调度

工具调度器(buildDispatchPrompt)会将启用的工具组以 [索引] 显示名: 描述 的形式列出,交给调度模型选取。模型返回选中的工具组索引后,getToolsByGroupIndexes() 汇总这些组的工具(并应用权限过滤与 skills.yaml 的安全检查)供本轮对话使用。

外部 MCP 服务器组会以 mcp_<服务器名> 命名、MCP: <服务器名> 作为显示名,自动参与调度。

下一步

基于 MIT 许可发布