Azure AI Foundry で作った gpt-4o モデルを API として Node-RED とやり取りするメモ
この記事は Microsoft Azure Advent Calendar 2024 の記事です。
Azure AI Foundry で作った gpt-4o モデルを API として Node-RED とやり取りするメモです。
背景
2024/12/20 時点の情報で進めます。

Azure AI Foundry から gpt-4o モデルを使えた ので、これを発展させてAPI として Node-RED とやり取りしてみます。
Azure AI Foundry のプロジェクトを確認

プロジェクトを確認すると、概要のところに、すぐ API キーがあります。
ちょうど API ドキュメントのリンクもあるので見てみます。

Azure OpenAI Service REST API reference - Azure OpenAI | Microsoft Learn
こちらです。

Completions を使ってみます。
POST https://{endpoint}/openai/deployments/{deployment-id}/completions?api-version=2024-10-21
こんなアクセスの仕方のようです。

{endpoint} はプロジェクトにある Azure OpenAI エンドポイントを使います。
{deployment-id} は、Deployment IDです。これをを確認するには、Azure AI Foundry ポータルにサインインし、モデルカタログから必要なモデルを選択します。モデルの詳細ページに Deployment ID が表示されます。

といいつつ、このあたり、私には分かりにくかったので最終的には、プロジェクトの マイ アセット > モデル + エンドポイント を確認すると endpoint も deployment-id も設定されたエンドポイントが取得できます。
結果 、Deployment ID は gpt-4o でした。あくまで私の場合です。

また、 HTTP Header には api-key が必要で、こちらから使います。
送るデータの話
ほんとここは 2024/12/20 の情報です。今後整いそうです。
さて、送るデータなんですが、リンクにあった
Azure OpenAI Service REST API reference - Azure OpenAI | Microsoft Learn
のほうで、
{
"prompt": [
"tell me a joke about mango"
],
"max_tokens": 32,
"temperature": 1.0,
"n": 1
}
で、素直にやっていたところ、Unsupported data type が来てしまってうまくいきませんでした。
いろいろ調べてみたところ、Azure OpenAI Service supported programming languages - Azure AI services | Microsoft Learn の JapaScript のほうでは
const result = await client.chat.completions.create({ messages, model: '', max_tokens: 100 });
みたいに解説されていて、これはもしや本家の API Reference - OpenAI API のデータ形式である、
{
"messages": [
{
"role": "user",
"content": "Hello!"
}
]
}
みたいな形式がよさそうと推測しました。
結果当たっていたので、一旦はオッケー。
Node-RED で組んでみる

出来上がったフローはこちらです。 http request ノードで POST 送信をしつつ、その前の API 設定と書かれている change ノードで http request で送る設定をします。

API 設定と書かれている change ノードの設定です。

まず、
- msg.url
- 今回の Deployment ID や API バージョンを設定した自分のプロジェクト用のエンドポイント
- msg.headers.api-key
- 今回のプロジェクトの API キー
- msg.payload
- {} で、以降にオブジェクトを設定するために初期化してます

- msg.payload.messages
- メッセージをぶら下げるために
[]で空の配列を準備
- メッセージをぶら下げるために
- msg.payload.messages.0.role
- user を設定します
- msg.payload.messages.0.content
- 「こんにちは!」とこちらからのプロンプトを入れます

http request ノードの中身です。

- メソッド
- POST
- 出力形式
- JSON オブジェクト
で指定します。
動かしてみる

inject ノードのボタンを押して動かします。

無事 API から返答が帰ってきて msg.payload.choices[0].message.content に返答が帰ってきました!