Skip to content

技能与功能调用配置 ​

智能体(agent)有三块能力可以在 WebUI 里按需开关:功能插件(Function Plugin)、功能调用(Function Calling) 和 技能(Skills),都在 智能体 页面的标签页里操作。

前置条件

这里的所有操作都需要登录 WebUI(主人身份),入口是 WebUI 的 智能体 页面:

  • 功能插件 标签页
  • 功能调用 标签页
  • 技能 标签页

开关状态保存在 data/config/plugins/agent_config.json,重启后依然生效。

功能插件 ​

功能插件把若干技能与功能调用打包成一个整体,用一个开关统一控制,适合按玩法成组管理。

三个标签页怎么分工 ​

标签页管什么
功能插件插件整体开关,以及插件内技能与功能调用的启用开关
功能调用不属于任何插件的独立功能调用
技能不属于任何插件的独立技能(可新建、编辑、删除)

插件内的技能与功能调用不会出现在后两个页面——同一个开关只在一个地方出现,避免两边状态打架。

插件开关的效果 ​

关掉一个功能插件后:

  • 它名下的技能既不进提示词、也不能被 list_skills / get_skill_content 查到,即使该技能自己的「启用」是开的;
  • 它名下的功能调用一律不可用,模型调用时会收到 功能 xxx 当前不可用:...;
  • 技能与功能自己的开关状态不会被清掉,插件重新打开后按原状态恢复。

也就是说插件开关优先于成员的开关:插件开着,成员各自生效;插件关着,成员全部停下。

成员各自也有开关 ​

插件内的技能和功能调用都有自己的「启用」开关:

成员开关效果
技能关掉后不进提示词、也不能被查询
功能调用关掉后模型不能调用它(不常用功能也会从 call 的清单里消失)

插件整体关闭时,成员的开关会置灰(提示"插件已关闭,成员开关不生效"),但状态保留;插件重新打开后按原状态恢复。核心功能(stop_thinking / send_message)即使被插件声明,开关也是灰的。

插件内的技能只能开关 ​

插件内技能只提供「启用」一个开关:不能新建、不能编辑、不能删除,也不能设置内嵌。这些内容由插件随代码分发,改了会让插件声明与实际内容脱节。

想改插件内技能的内容

先用 /agent.reload 之外的方式不行——插件声明是代码里的常量。需要改动请联系插件作者,或把该技能从插件声明里移出。

不常用功能调用 ​

插件可以把功能调用声明为不常用:这类功能不进智能体的功能提示词(省 Token),只在 call 后面列出来,由模型按需调用。

  • 模型看到的是 call(function="功能名", args={"参数": 值});
  • 具体用法通常写在技能正文里,所以插件应当把「说明 + 不常用功能」配对给出;
  • 没有可用的不常用功能时,call 本身不会出现在提示词里。

功能调用 ​

功能调用是智能体可以主动触发的动作,例如发消息、联网搜索、查目录、读文件、查技能等。

三列状态怎么读 ​

列表有五个关键列:

列含义
功能名功能的持久化标识,开关就记在这个名字上
说明这个功能做什么
参数摘要该功能接受的参数(仅供参考,不可在此编辑)
手动开关你是否允许它工作
环境可用性当前环境是否具备使用条件

只有 手动开关 = 开 且 环境可用性 = 可用 时,该功能才真正生效,生效状态 才成立。

核心功能不能关 ​

stop_thinking(结束本次思考)和 send_message(发送消息)是智能体跑完一轮对话所必需的两个动作,在列表里带一个「核心」标签:

  • 它们的开关恒为开且置灰,点不动;
  • 即使手改 data/config/plugins/agent_config.json 把它们写进 function_calling_disable,重载后也会被自动剔除;
  • 其余功能(包括 send_md_message、send_face 等)都可以正常关闭。

环境不可用是什么意思 ​

"环境可用性"灰显时,把鼠标移到灰色的 不可用 标签上,可以看到具体原因,例如:

  • 未配置 TOOL 类型模型:需要在 data/config/system/provider.yml 里配置一个 tool 类型的模型
  • 未启用联网搜索 / 未配置搜索 API 密钥:需要在设置里打开联网搜索并填写密钥
  • 未配置 EMBEDDING 类型模型:记忆相关功能需要配置 embedding 类型的模型

这类不可用不是开关没打开,而是缺少依赖。补齐依赖后刷新页面即可,无需在这里操作。

特殊情况:send_face ​

send_face(发送表情)只在 OneBot 适配器下可用。如果机器人运行在其他适配器上,这个功能会一直灰显——这是正常的,不是配置错误。

关掉功能调用的效果 ​

关闭「功能调用」页里的某个开关后:

  • 该功能不再出现在智能体的功能列表(提示词)里;
  • 如果模型仍然"幻想"去调用它,会被拦下并回复:功能 xxx 当前不可用:原因;
  • 直接调用也会被拒绝。

也就是说,关闭是干净的:既不给模型看到,也不给它钻空子。

关于 list_skills

list_skills 负责让智能体发现有哪些技能。如果把它关掉,智能体将无法得知任何非内嵌技能(内嵌技能仍会出现在提示词里)。此时页面顶部会出现一条提醒。除非你有意如此,否则建议保持开启。

技能 ​

技能是给智能体看的玩法/操作说明文档(Markdown)。它解决的是"用户问某个功能怎么用"这类问题:与其把一大段说明塞进每轮提示词,不如让智能体需要时自己去查。

技能页只展示不属于任何功能插件的技能;插件内的技能在 功能插件 页开关。

内置与用户技能 ​

技能列表里每一项都有一个类型标签:

标签含义能做什么
内置随机器人分发的技能只能查看、编辑,不能删除
用户你新建的技能查看、编辑、删除
内置(已修改)内置技能被你改过查看、编辑、恢复内置

插件提供 的技能不会出现在技能页,它们在「功能插件」页跟随所属插件一起管理,正文由插件自己提供、只存在内存里,data/plugins/agent/skills/ 下不会有对应文件。

内置技能存放在 res/data/agent/skills/,是只读的,升级机器人时会随之更新。所以在列表里点内置技能的「编辑」时,会先提示:

编辑将创建同名用户配置覆盖内置

确认后,机器人会在 data/plugins/agent/skills/ 下创建一个同名用户文件,以它覆盖内置内容,该行类型随即变成 内置(已修改)。此时按钮会多出一个「恢复内置」:

将恢复内置内容,用户修改会丢失

点它即删除用户文件,内置正文重新生效。注意:这会丢掉你的修改,请先「查看」确认不需要了再操作。

用户技能的「删除」则会同时清理它的启用/内嵌开关记录(因为它已经不存在了)。

两个开关 ​

每行还有两个开关,它们的含义是互相独立的:

开关默认打开后关闭后
启用开启技能可以被智能体发现和查询既不进提示词,也不能被查询
内嵌开关关闭正文直接嵌入每轮提示词,且不可被智能体查询不占提示词,由智能体按需查询

组合效果:

  • 启用 + 不内嵌(默认):省 Token。智能体平时看不到这个技能,用户问到相关玩法时它通过 list_skills 找到名字、再 get_skill_content 读正文。
  • 启用 + 内嵌:每轮提示词里都带着正文,强制生效;代价是每轮都花 Token,而且智能体无法再主动查询它(因为已经给它了)。
  • 不启用:完全不参与,内嵌开关也会随之失效。

内嵌只适合短小内容

内嵌意味着这段正文会每轮进入提示词。列表里有「正文字数」一列供参考——几十字的强制规范(例如"回复格式要求")适合内嵌;几百字以上的玩法说明请保持不内嵌,让智能体自己按需查。

新建与编辑 ​

点右上角「新建」即可创建用户技能,填写三项:

  • 名称:技能标识,也就是文件名。不能为空、不能含 \ / : * ? " < > |、不能以 . 开头、首尾不能有空格。
  • 描述:一句话说明,会显示在列表和智能体拿到的技能清单里。留空时会从正文首行自动截断回退。
  • 正文:Markdown 正文。

编辑已有技能时,名称会被锁定:

  • 用户 / 内置(已修改) 技能的名称不可改(改名等价于"新建一个 + 删掉旧的",需要改名请新建后删除原技能);
  • 内置 技能在确认覆盖后名称自然也是内置名,同样锁定。

智能体实际看到的内容 ​

  • 内嵌技能:正文出现在思考提示词里,不出现在 list_skills 结果里,也不能被 get_skill_content 读取。
  • 启用且不内嵌的技能:出现在 list_skills 结果的清单里(名字: [类型] 描述),可被 get_skill_content 读取。
  • 未启用的技能:两边都不出现。

相关文件 ​

路径说明
data/config/plugins/agent_config.json四个开关列表(禁用的功能插件、禁用的功能、禁用的技能、内嵌的技能)
res/data/agent/skills/内置技能,只读,随版本更新
data/plugins/agent/skills/用户技能与覆盖内置的同名文件
data/config/system/provider.yml模型配置(决定"环境可用性")

排障 ​

现象原因 / 处理
功能调用灰显 不可用鼠标悬停看原因,通常是缺 tool / embedding 模型或搜索密钥
核心功能的开关点不动正常现象,stop_thinking / send_message 不允许关闭
技能在 技能 页找不到它被功能插件收编了,去 功能插件 页看
技能开着但智能体查不到检查它所属的功能插件是否被关掉;插件关掉时成员一律失效
插件内技能不能编辑/删除设计如此:插件内技能只能开关
看不到 call 功能当前没有可用的不常用功能,call 会自动隐藏
智能体不知道有哪些技能检查 list_skills 是否被关掉;检查目标技能的「启用」是否为开
某技能怎么都不生效若已内嵌,正文只会出现在提示词里;若只改了描述,描述是给智能体看的索引,不改变行为
改了内置技能想还原在该行点「恢复内置」,用户文件会被删除,内置正文重新生效
开关关了但重启后又开了检查 data/config/plugins/agent_config.json 是否可写(权限 / 只读挂载)

Released under the CC-BY-SA-4.0 License.