子比主题开发文档
使用指南Codestar Framework主题扩展WP AI开发工具社区协作赞助打赏

让 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-contextwpab__zibll-ai-ext__read-post-context
core/get-site-infowpab__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-description
  • zibll-ai-ext/publish-post
  • zibll-ai-ext/delete-comment
  • zibll-ai-ext/update-user-points
  • zibll-ai-ext/send-user-message

它们不是不能写,而是不应该交给模型在没有用户确认的情况下调用。

用户体验建议

后台最好做成这样的流程:

  1. 用户点击“生成建议”。
  2. AI 自动读取必要上下文。
  3. 页面展示结果和来源。
  4. 用户可以编辑结果。
  5. 用户点击“保存”。
  6. 保存能力再次检查权限和 nonce。

这样用户能理解 AI 做了什么,也能决定是否采用。

这篇文档对您有帮助吗?

本页目录