让 AI 调用 Ability
使用 using_abilities() 和 WP_AI_Client_Ability_Function_Resolver 让 AI 安全读取站点上下文。
什么时候需要
有些任务需要 AI 先读取站点数据,再生成结果。例如用户问:
请根据文章 123 的内容,给我 3 个更适合搜索引擎的标题。
模型本身不知道文章 123 的内容,所以你可以允许它调用 zibll-ai-ext/read-post-context 读取上下文,然后再让模型基于读取结果生成标题。
这里的重点不是“让 AI 能调用所有功能”,而是“只让 AI 调用你明确允许的少数安全能力”。
Ability 名称如何变成函数名
WP_AI_Client_Prompt_Builder::using_abilities() 会把 WordPress Ability 转成模型可见的 function declaration。
| Ability 名称 | 模型看到的函数名 |
|---|---|
zibll-ai-ext/read-post-context | wpab__zibll-ai-ext__read-post-context |
core/get-site-info | wpab__core__get-site-info |
开发者通常不需要手写这个函数名。你只需要把允许的 Ability 名称传给 using_abilities()。
基本流程
use WordPress\AiClient\Messages\DTO\MessagePart;
use WordPress\AiClient\Messages\DTO\UserMessage;
$question = '请根据文章 123 的内容,给我 3 个更适合搜索引擎的标题。';
$allowed = array( 'zibll-ai-ext/read-post-context' );
$first_result = wp_ai_client_prompt( $question )
->using_system_instruction( '你可以调用工具读取文章上下文。需要文章内容时先调用工具。' )
->using_abilities( ...$allowed )
->generate_text_result();
if ( is_wp_error( $first_result ) ) {
return $first_result;
}
$model_message = $first_result->toMessage();
$resolver = new WP_AI_Client_Ability_Function_Resolver( ...$allowed );
if ( ! $resolver->has_ability_calls( $model_message ) ) {
return $first_result->toText();
}
$tool_response_message = $resolver->execute_abilities( $model_message );
$original_user_message = new UserMessage( array( new MessagePart( $question ) ) );
$final_text = wp_ai_client_prompt( '请根据工具结果回答用户原始问题,只输出 3 个标题。' )
->with_history( $original_user_message, $model_message, $tool_response_message )
->using_abilities( ...$allowed )
->generate_text();
return $final_text;关键点
| 点 | 说明 |
|---|---|
using_abilities() | 只是把允许调用的能力说明给模型 |
| Resolver | 才是真正执行 Ability 的地方 |
| allowed list | 只执行构造函数里声明的能力 |
| 未允许能力 | 模型请求未允许的 Ability 时返回错误 |
| 历史消息 | function call 和 function response 要放回对话历史,再让模型生成最终答案 |
不要把保存、删除、发布、扣费这类能力放进 allowed list。它们应该由用户点击确认后执行。
适合自动调用的能力
适合自动调用的能力通常有这些特征:
- 只读取当前用户本来就能看到的数据。
- 不写数据库。
- 不发通知。
- 不创建订单。
- 不修改余额、积分、会员、权限。
- 返回结构稳定。
例如:
| Ability | 适合用途 |
|---|---|
zibll-ai-ext/read-post-context | 读取文章内容供生成摘要或标题 |
zibll-ai-ext/read-post-taxonomies | 读取分类、标签、专题 |
zibll-ai-ext/check-post-missing-fields | 检查文章缺少摘要、封面、关键词 |
不适合自动调用的能力
这些能力应该由用户确认后执行:
zibll-ai-ext/save-seo-descriptionzibll-ai-ext/publish-postzibll-ai-ext/delete-commentzibll-ai-ext/update-user-pointszibll-ai-ext/send-user-message
它们不是不能写,而是不应该交给模型在没有用户确认的情况下调用。
用户体验建议
后台最好做成这样的流程:
- 用户点击“生成建议”。
- AI 自动读取必要上下文。
- 页面展示结果和来源。
- 用户可以编辑结果。
- 用户点击“保存”。
- 保存能力再次检查权限和 nonce。
这样用户能理解 AI 做了什么,也能决定是否采用。
このドキュメントは役に立ちましたか?