タグアーカイブ AI Engine

AI EngineとJetpackが衝突してGeminiが使えない時の解決策

AI Engine プラグインをバージョン 3.5.5 以降にアップデートすれば、この問題は即座に解決する。根本原因は Jetpack が REST API に追加する整数型 enum フィールドを、Google Gemini がツール定義で拒否していたことにある。AI Engine の開発者がこのスキーマ生成ロジックを修正し、文字列型以外の enum を自動除去するようになった。

どのようなエラーが発生するのか

どのようなエラーが発生するのか
エラー発生時 AI Engine が Gemini に送るツール定義に Jetpack の整数 enum が混入
修正後 AI Engine が文字列型以外の enum を自動除去してからツールリストを生成
エラー状態  修正後

Desktop Commander で AI Engine を MCP サーバーとして管理モードで接続し、AI モデルに Google Gemini を指定すると、次のようなエラーで通信が失敗する。

「GenerateContentRequest.tools[0].function_declarations[30].parameters.properties[jetpack_publicize_connections].items.properties[status].enum: only allowed for STRING type」という趣旨のエラーが返る。翻訳すると「enum は STRING 型にしか使えない」という厳格な制約に違反した形だ。

管理画面では具体的に「AI Engine が Gemini API からの応答に失敗しました」といった形で表示され、チャットが開始できないか、途中で止まる。管理モードでなければ発生しないエラーだ。

なぜ Jetpack と AI Engine が衝突するのか

なぜ Jetpack と AI Engine が衝突するのか

核心は Google Gemini API の「ツール定義」に対する極めて厳格なバリデーションにある。Gemini は利用可能な関数のパラメータをスキーマで受け取るが、enum(許容値の固定リスト)を使う場合、そのデータ型を必ず文字列にしなければならない。

一方 Jetpack は、WordPress の投稿作成や更新時に使われる REST API エンドポイントへ、ソーシャルメディア連携用のフィールドを動的に追加している。その中の jetpack_publicize_connections フィールドには status というパラメータがあり、Jetpack はこれを整数型の enum([0, 1])として定義している。

AI Engine が WordPress のスキーマ全体を走査して Gemini 向けのツールリストを組み立てる際、この整数型 enum をそのまま継承してしまう。その結果、Gemini API がリクエスト全体を「400 Bad Request」ではねつける流れだ。

読み取り専用モードならば投稿作成系のツールが含まれないため、このエラーは発生しない。管理モードで書き込み権限を付与する場合に限って表面化する。

AI Engine 3.5.5 以降へのアップデートで恒久修正する

AI Engine 3.5.5 以降へのアップデートで恒久修正する

AI Engine の開発者によって、バージョン 3.5.5 で根本的な修正が加えられた。ツールスキーマを作成する際、文字列型以外の enum 定義を自動的に除去する処理が追加されている。

STEP 1 WordPress 管理画面から AI Engine を最新版(3.5.5 以上)に更新する
STEP 2 更新後、新しいチャットを管理モードで開始する
STEP 3 Gemini が正常に応答すれば修正完了

スキーマキャッシュのバージョンも同時に引き上げられているため、更新後に手動でキャッシュをクリアする必要はない。自動的に再生成され、Jetpack の整数型 enum は除去された状態でツールリストが構築される。

どうしてもアップデートできない場合の手動修正

何らかの理由で AI Engine を最新版にできない場合、子テーマの functions.php または Code Snippets プラグインに以下のコードを追加し、Jetpack の整数型 enum フィールドを強制的に文字列型へ変換できる。

<?php
/**
 * Jetpack と AI Engine、Google Gemini の競合を修正する。
 * Jetpack の status enum フィールドを文字列型に変換する。
 */
add_action( 'wp_enqueue_scripts', 'enqueue_parent_styles' );
function enqueue_parent_styles() {
    wp_enqueue_style( 'parent-style', get_template_directory_uri() . '/style.css' );
}

add_action( 'rest_api_init', 'fix_jetpack_enum_for_gemini', 9999 );
function fix_jetpack_enum_for_gemini() {
    global $wp_rest_additional_fields;

    if ( ! empty( $wp_rest_additional_fields ) ) {
        foreach ( $wp_rest_additional_fields as $post_type => $fields ) {
            if ( isset( $wp_rest_additional_fields[$post_type]['jetpack_publicize_connections'] ) ) {
                if ( isset( $wp_rest_additional_fields[$post_type]['jetpack_publicize_connections']['schema']['items']['properties']['status'] ) ) {
                    // 問題を起こす整数 enum を除去
                    unset( $wp_rest_additional_fields[$post_type]['jetpack_publicize_connections']['schema']['items']['properties']['status']['enum'] );
                    // データ型を文字列に明示
                    $wp_rest_additional_fields[$post_type]['jetpack_publicize_connections']['schema']['items']['properties']['status']['type'] = 'string';
                }
            }
        }
    }
}
?>

コード追加だけでは修正されないケースがある。AI Engine はツールリストをデータベースに強力にキャッシュしているため、キャッシュを強制的に再生成させる必要がある。

STEP 1 プラグイン一覧から Jetpack を一時的に無効化する
STEP 2 AI Engine で新しい管理モードチャットを開き、簡単な質問を送信する
STEP 3 Jetpack を再有効化する。以降 PHP フィルタがスキーマを清浄に保つ

Jetpack を無効化した状態でチャットを実行することで、AI Engine は Jetpack 関連フィールドのないスキーマを新規に作成する。Jetpack を再有効化した後は上記のフィルタが働き、問題の enum がスキーマに混入することはなくなる。

よくある質問

Jetpack を使っていなければこの問題は起こらないのか

Jetpack の jetpack_publicize_connections フィールドが原因であるため、Jetpack を導入していなければ発生しない。ただし、他のプラグインも整数型 enum を REST API に追加している場合は似たエラーが出る可能性がある。その場合も AI Engine 3.5.5 以降であれば同様に自動除去される。

読み取り専用モードではなぜ問題ないのか

読み取り専用モードでは、投稿の作成や更新といった書き込み系のツールが Gemini に送信されない。問題の jetpack_publicize_connections フィールドは投稿作成時に登場するため、ツールリストから除外される。管理モードだけが影響を受ける。

AI モデルが Gemini 以外でも同じエラーは出るか

このエラーは Gemini のツール定義バリデーションが特に厳格なために発生する。OpenAI の GPT シリーズなど、他の AI モデルでは整数型 enum を許容するものもあるが、根本原因はスキーマにあるため、どのモデルでも潜在的な問題になりうる。AI Engine 3.5.5 の修正で全モデルに対応できる。

AI Engine 3.5.5 にアップデートした後、スキーマキャッシュは本当に自動クリアされるのか

開発者によれば、スキーマキャッシュのバージョンナンバーが引き上げられているため、更新後の初回リクエスト時に自動的に再生成される。手動でキャッシュを削除する操作は不要。もし不安があれば、AI Engine の設定画面からキャッシュを手動クリアしても問題ない。

この記事のポイント

  • AI Engine 3.5.5 以降のアップデートで根本解決する
  • 原因は Jetpack の整数型 enum を Gemini が拒否するため
  • 読み取り専用モードでは書き込み系ツールが送信されず問題は出ない
  • 手動修正する場合は Jetpack 一時無効化によるキャッシュ再生成が必須
  • 修正後は文字列型以外の enum が自動除去され、あらゆる AI モデルで安定する