はつねの日記

Kinect, Windows 10 UWP, Windows Azure, IoT, 電子工作

富士通のAIをThunkableから使ってみた(番外編)

はじめに

3回にわたって投稿してきた「富士通のAIをThunkableから使ってみた」ですが、今回は番外編として、「Azure API Management (APIM) 」を併用した使い方についてお伝えします。

なぜ、APIM を併用するのでしょうか

前回の投稿でもお伝えしましたが、CORS制限 の関係で Thunkable の「Web Preview」では実行できず「Thunkable Live」を使った実機確認が必要です。
hatsune.hatenablog.jp
この CORS 制限を回避する方法の1つが APIM を併用する方法となります。

Thunkable の [OpenAI Service] コンポーネントとの使い勝手の差を埋めたい

Thunkable には、[OpenAI Service] コンポーネントがあり、キーを取得すれば、単一ブロックで利用が可能です。

こちらは手軽に使えますし、また、画像や音声などの生成も可能です。
一方で今回のように事務局でキーを発行して、多人数の参加者に一律で使っていただくような使い方の場合は、OpenAI が従量課金なので必要な費用が読めない(予期せぬ高額請求もありえる)というコスト面での使い勝手があります。
もし、APIM を使うことで同じような使い勝手で使えるように出来たらということが今回の投稿の調査主眼となります。

APIM 設定

前回、バイブセッティングを行った APIM の投稿を参考にして /fujitsu/chat というエンドポイントを APIM で定義します。
hatsune.hatenablog.jp
呼びだす富士通 AI 側のエンドポイントとしては、チャットルーム不要の下記のエンドポイントとします。

/api/v1/action/defined/text:simple_chat/call

この API エンドポイントに使い方は、GitHub にサンプルコードがありましたので、次の PowerShell サンプルコードを参照して APIM に定義しました。
github.com
Inbound Processingとして次のような定義でOKでした。
gist.github.com

Thunkable 設定

DESIGN 設定

プロンプト入力の [Text Input] コンポーネント、プロンプト送信用の [Button] コンポーネント、回答表示用の [Label] コンポーネントを配置します。

なお、 [Label] コンポーネントは、長文が返却されたときにスクロールして表示できるように [Layout] コンポーネントの中にいれて、スクロールバーを表示できるようにしておきます。

BLOCKS 設定

定数設定

APIM との接続情報である「$Key」と「$Url」を初期化しておきます。

APIM へのリクエストを組み立てる

APIM へのリクエストは、 [WebAPI] コンポーネントを使って実施します。

  • ヘッダ:APIMで定義した「Ocp-Apim-Subscription-Key」と「Content-Type」を指定
  • URL:APIMで定義したURLを指定
  • ボディ:下記のJSONを指定

{
question = "質問",
model = "cohere.command-r-plus-fujitsu",
max_tokens = 1024,
temperature = 0.5,
top_p = 1,
messages = []
}

APIMからの回答を取得する

[WebAPI] コンポーネントで POST リクエストを行い、Status が 200 の時は、AI からの回答を画面に表示します。

Status=200 (正常完了) のときは次のようなJSON文字列として回答を取得できるので answer 項目を取り出して画面に表示します。

{
answer = "回答".
messages = [].
}

ガードレールでガードされた時の対応

富士通 AI (Fujitsu クラウドサービス Generative AI Platform) にはガードレール機能が標準装備されているので、コンプライアンス違反のプロンプト入力などについては、ガード機能が働いて AI に回答させないようにガードが働きます。
その場合は、 400 エラーで返却されるので status = 400 の場合( APIM 経由なので 500 の場合も考慮し)は、ガードされた旨の表示がでるようにしています。

実行


おわりに

今回の取り組みは、Technical Mentor としてメンター参加している「 Technovation Girls 2026 の日本リージョン」参加者に提供している取り組みです。
前回の APIM を使っていない Thunkable サンプルに比べるとかなりシンプルなブロックで実現できることが分かりました。
このくらいであれば、 Thunkable に組み込まれている OpenAI ブロックと比較しても極端に面倒ということはなくなりました。
参加者の中高生が、Fujitsu クラウドサービス Generative AI Platform を活用し、様々な社会課題を解決するアプリ作成の一助になったら幸いです。