🌅

バグ修正|Copilot Studio:AIModelActionBadRequest

に公開

知識は武器とかけまして、レゴブロックと解く、その心は――
今日もKnowledge Oasisへようこそ
案内人はkoふみです
本日のテーマは『Copilot StudioのAIModelActionBadRequest対応』

はじめに

「predictionOutputをバインドしたら、意味不明なエラーが出てしまった…」とついつぶやいてしまいました。
エラーメッセージは『タイプ 'RecordDataType' と評価され、必要なタイプは 'RecordDataType' です』って、'RecordDataType' が必要で 'RecordDataType' なら合ってるじゃん!
何度メッセージを読んでも意味が分かりませんでした。
Copilot StudioでAIワークフローを組んでいると、思わぬ型エラーに戸惑うことがありますよね。本記事では、まさにこの混乱を乗り越えた方法をご紹介します。

対象読者

  • Copilot StudioでカスタムAIワークフローを作成している方
  • プロンプトノードの出力バインド時に型エラーで行き詰まっている方

発生したエラー

エラー メッセージ: プロンプト '[プロンプト名]' ('3d505d4e-7903-4468-87b1-482bc7ecde92') の 'predictionOutput' という名前のパラメーターはタイプ 'RecordDataType' と評価され、必要なタイプは 'RecordDataType' です
エラー コード: AIModelActionBadRequest 会話 ID: 886e3890-c7dc-48de-8850-481eee05f8c8 時間 (UTC): 2025-07-04T06:08:05.620Z

一見すると同じ型同士で矛盾しているかのようですが、本質は別の場所にありました。

状況整理

エラーが発生したのは次のようなフローです。

エラーは でモデルの生成した値をバインドする際に発生していました。

原因特定のために立てた仮説

エラーメッセージに predictionOutput とあったので、プロンプトノードの出力に問題があるのではと考えました。
で同じレコード型の変数である AiResult に結果をバインドしているのに、何故、 ではなく でエラーが発生するのか?

その仮説から原因を考えていきました。

原因

の違いを探したところ、モデルが生成する JSON に違いがあることが分かりました。

のプロンプトノードではモデル応答のカスタム形式に以下のようなJSONを指定していました。モデルの生成結果により動的に "InputItems" が変わるようにしていたのです。

{
    "InputItems":
    {
        "Key": "Value"
    }
}

のプロンプトノードではこちらの意図通りに動的なJSONオブジェクトが作られていなかったのです。

対応方法

意図通りのJSONを出力するため、のプロンプトノード内でFewShotテンプレートを用い、出力形式を明示的に指定しました。
具体的には、プロンプトに以下を追加し、FewShotも与え、「必ずこの形で返す」ようにプロンプトを書き直すことで、の出力が完全に一致。
その結果、Record型バインド時のエラーは解消され、正常に動作するようになりました。

## 出力形式
{
    "InputItems":
    {
        "Key1": "Value1",
        "Key2": "Value2",
    }    
}

まとめ

Copilot Studioのようなローコードツールはスタックトレースが無く、エラーメッセージだけでは原因を特定しにくいことがあります。でも、エラーメッセージを良く読み解決のヒントが無いかを探し、仮説を立てて検証することで原因を特定することができます。
同じような事象に遭遇したら、ぜひ試してみてください。


知識のひとつひとつは小さなレゴブロック
でも、組み合わせれば世界を変えるアイディアをカタチにする武器になる!

またKnowledge Oasisでお会いしましょう
案内人はkoふみでした

Discussion