跳转到内容

Skill 系统

Skill 系统 让宿主应用可以将业务能力暴露给 AI。你只需注册函数,AI 就能通过脚本调用它们——无需额外适配,文档自动生成。

声明式(推荐)命令式(高级)
注册方式设置 agentConfig 属性调用 defineRegistry
上手难度零配置,开箱即用需要手动管理
适用场景大多数场景需要动态注册、条件注册

声明式注册示例:

agent.agentConfig = {
name: 'MyApp',
persona: '你是一个...助手',
groups: [{
name: 'editor',
description: '编辑器操作',
functions: [
{
name: 'getCode',
description: '获取编辑器中的当前代码',
handler: () => editor.getCode()
}
]
}]
};

💡 设置 agentConfig 后,系统自动创建 Registry 并完成函数注册——整个过程无需手动干预。

每个函数由以下字段组成:

字段类型说明
namestring函数名称
descriptionstring函数描述,会写入自动生成的文档
parametersParameterDef[]参数定义数组(ParameterDef[] 格式)
returnsobject返回值定义
handlerfunction执行函数(支持异步)
hooksobjectUI 钩子(详见 Hook 系统)

parameters 使用 ParameterDef[] 数组格式描述参数,AI 据此生成正确的调用代码:

{
name: 'createOrder',
description: '创建新订单',
parameters: [
{ name: 'productId', schema: { type: 'string', description: '商品 ID' }, required: true },
{ name: 'quantity', schema: { type: 'number', description: '数量' }, required: false }
],
handler: async ({ productId, quantity }) => {
return await api.createOrder(productId, quantity ?? 1);
}
}

💡 每个参数由 name(参数名)、schema(OpenAPI Schema 格式的参数定义)和 required(是否必填)组成。

除了手动编写 OpenAPI Schema,你还可以使用 Zod schema 定义函数参数——更简洁、类型安全,且自动获得运行时校验。

import { z } from 'zod';
{
name: 'createOrder',
description: '创建新订单',
zodSchema: z.object({
productId: z.string().describe('商品 ID'),
quantity: z.number().int().min(1).default(1).describe('数量'),
}),
handler: async ({ productId, quantity }) => {
return await api.createOrder(productId, quantity);
}
}

💡 zodSchema 和 parameters 二选一。如果同时提供,zodSchema 优先。

Zod 与 OpenAPI Schema 对比:

Zod SchemaOpenAPI Schema (parameters)
定义方式z.object({...}),链式 APIParameterDef[] 数组,手动写 JSON Schema
类型安全TypeScript 自动推断 handler 参数类型需要手动确保类型一致
运行时校验自动校验(类型、范围、格式等)通过内部转换为 Zod 实现校验
文档生成自动转换为 OpenAPI 格式生成文档直接使用
约束表达.min()/.max()/.regex()/.enum() 等minimum/maximum/pattern/enum 等字段
适用场景推荐大多数场景已有 OpenAPI 定义时可直接复用

支持的 Zod 功能:

Zod 功能转换结果
.describe('...')参数描述
.optional()required: false
.default(value)default 值 + required: false
.min() / .max()minimum / maximum
.minLength() / .maxLength()minLength / maxLength
.regex()pattern
.enum([...])enum
z.array()type: 'array' + items
z.number().int()type: 'integer'

添加示例值:使用 withMeta 为 Zod schema 添加 OpenAPI 特有的示例值:

import { z } from 'zod';
import { withMeta } from '@rtc-agent/component';
zodSchema: z.object({
name: withMeta(z.string(), { example: 'John Doe' }),
age: withMeta(z.number().int(), { example: 30 }),
})

FunctionRegistry.execute() 在调用 handler 之前自动进行参数校验:

校验失败时,错误信息会引导 AI 读取 /functions/INDEX.md 获取正确的参数格式,提高自愈能力。

函数通过 分组(group) 组织,分组名 + 函数名 = 完整调用路径:

分组让函数命名空间清晰有序,避免命名冲突。

AI 通过 script 工具在沙箱中执行代码,使用 Proxy 链式语法 调用函数:

// Proxy 链式调用——自然的 API 风格
await rtcAgent.order.create({ productId: '123', quantity: 2 });
// 等价于直接调用
await rtcAgent.execute('order.create', { productId: '123', quantity: 2 });

💡 AI 阅读自动生成的函数文档后,就知道如何调用这些函数——无需额外配置。

Hook 让宿主在函数执行的各阶段插入自定义逻辑:

Hook触发时机说明
onStart执行前可抛出 CancelledError 取消执行
onSuccess成功后异步执行,不阻塞返回
onError失败后异步执行,不阻塞返回
onProgress进度更新handler 调用 onProgress(n) 时触发

onStart 是唯一能拦截执行的 Hook——适合用于确认弹窗、权限检查等场景。

每次注册函数时,系统自动生成完整的文档:

生成内容说明
函数文档包含描述、参数表格、返回值、调用示例
INDEX.md函数索引,AI 据此发现可用函数
AGENT.md更新 Agent 能力描述

📌 AI 通过阅读这些文档了解如何使用函数——文档的质量直接影响 AI 的调用准确性。

场景(Scenario)用于加载业务工作流文档,告诉 AI 如何处理特定业务:

特性说明
场景文档业务工作流说明,Markdown 格式
加载方式通过 <rtc-agent scenarios-url="..."> 属性指定 URL
存储位置/scenarios/{slug}.md
AI 使用AI 阅读场景文档了解业务流程和操作指南

例如,你可以编写”如何处理退款”、“如何创建订单”等场景文档,AI 就能按照你的业务规范执行操作。