記事公開日
最終更新日
【Azure OpenAI】Power Automate クラウド フローで実装するOpenAI 外部API連携 ①(OpenAI toolsパラメータとは)

Azure OpenAI(AOAI)を用いる時、GPTで柔軟に外部APIと連携して情報を得たり操作を行いたいケースがあります。
この時、AOAIの関数呼び出し(toolsパラメータ)を用いて実装する事が考えられます。
本記事ではこれをPower Automate フローで実装する方法について全6回に分けて掲載します。
本ブログは1回目です。長い記事になりましたがお付き合いいただければ幸いです。
【掲載内容一覧】
No |
内容 |
1 |
|
2 |
|
3 |
|
4 |
|
5 |
|
6 |
本記事の目標
- Azure OpenAI(GPT)が外部APIと連携するためのfunction実装(toolsパラメータ)についてまとめる
- function実装(toolsパラメータ)をPower Automateで実装する基本的なフローをまとめる
- 質問内容を元にGPTがWeb検索キーワードを生成し、そのBing Search検索結果を元にGPTが回答するPower Automateデモを作成する。
OpenAIの関数呼び出し(toolsパラメータ)とは
OpenAIの関数呼び出しはGPTが予め定義した関数と引数を指定し実行する事により外部情報を得るための仕組みです。
※以前はFunction Callingを使用していましたが、現在はtoolsの使用が推奨されています。
参照:https://learn.microsoft.com/ja-jp/azure/ai-services/openai/reference#function
toolsパラメータ:
モデルで呼び出すことができるツールの一覧。 現在のところ、関数のみがツールとしてサポートされています。 これを使用して、モデルで JSON 入力を生成できる関数の一覧を提供します。このパラメーターには API バージョン 2023-12-01-preview が必要です
「現在のところ」関数のみという事で今後の拡張が期待されます。
今回はシンプルにGPTがWeb検索キーワードを生成し、その検索結果を元にGPTが回答する機能を検討します。
GPT自体にはWeb検索の機能が無いため、toolsでWeb検索を行うFunctionを定義します。
イメージは以下の様な感じです。
APIリクエスト/レスポンスのイメージ
実際のデータは以下の様なイメージです。
① ユーザーからOpenAIへの問合せ
tools部分に利用可能な関数(function)の定義がされます。
今回は関数としてsearchWeb、その引数としてsearch_textが定義されています。
OpenAIはdescription等の内容を参照し、必要に応じて関数と引数を回答します。
{
"messages": [
{
"role": "system",
"content": "'''- あなたはユーザーからの質問に回答する「QUICK E-Solutionsデモ」です。(略)'''"
},
{
"role": "user",
"content": "最新のAzure OpenAIのAPIバージョンについて教えて下さい。"
}
],
"tools": [
{
"type": "function",
"function": {
"name": "searchWeb",
"description": "Get the latest information by searching the internet",
"parameters": {
"type": "object",
"properties": {
"search_text": {
"type": "string",
"description": "All requirements (separated by spaces) that you determine the user needs to search for in order to answer them."
}
},
"required": [
"search_text"
]
}
}
}
],
"tool_choice": "auto",
"temperature": 0.1,
"frequency_penalty": 0,
"presence_penalty": 0
}
② Azure OpenAIからの回答(1回目)
finish_reasonに「tool_calls」があるため、function実行を実施します。
tool_calls内にfunction「searchWeb」とその引数が回答されています。
この指定を元に予め用意されたsearchWeb用の関数を実行します。
{ "choices": [ { "content_filter_results": {}, "finish_reason": "tool_calls", "index": 0, "logprobs": null, "message": { "content": null, "role": "assistant", "tool_calls": [ { "function": { "arguments": "{\n \"search_text\": \"最新の Azure OpenAI API バージョン\"\n}", "name": "searchWeb" }, "id": "call_xxxx", "type": "function" } ] } } ], "created": 1712045671, "id": "chatcmpl-xxxxx", "model": "gpt-4-yourModel", "object": "chat.completion", "prompt_filter_results": [ { "prompt_index": 0, "content_filter_results": { "hate": {"filtered": false, "severity": "safe" }, "self_harm": { "filtered": false, "severity": "safe" }, "sexual": { "filtered": false, "severity": "safe" }, "violence": { "filtered": false, "severity": "safe" } } } ], "system_fingerprint": null, "usage": { "completion_tokens": 27, "prompt_tokens": 452, "total_tokens": 479 } }
③ Function実行結果を追加したAzure OpenAIへの問合せ
searchWeb用の関数を実行した結果を付与して再度OpenAIに問い合わせます。
OpenAIからのfunction指定にある「id」と実行結果の「tool_call_id」を合わせる必要があります。
toolsの本題から逸れますが、今回の記事ではWeb検索結果としてBing Searchからのsnipetやurlの情報を元に回答を作成します。
{ "messages": [ { "role": "system", "content": "'''- あなたはユーザーからの質問に回答する「QUICK E-Solutionsデモ」です。(略)'''" }, { "role": "user", "content": "最新のAzure OpenAIのAPIバージョンについて教えて下さい。" }, { "content": null, "role": "assistant", "tool_calls": [ { "function": { "arguments": "{\n \"search_text\": \"最新の Azure OpenAI API バージョン\"\n}", "name": "searchWeb" }, "id": "call_xxxx", "type": "function" } ] }, { "tool_call_id": "call_xxxx", "role": "tool", "name": "searchWeb", "content": "[ { \"id\":\"https://api.bing.microsoft.com/api/v7/#WebPages.0\", \"name\":\"Azure OpenAI Service の REST API リファレンス - Azure OpenAI\", \"url\":\"https://learn.microsoft.com/ja-jp/azure/ai-services/openai/reference\", \"isFamilyFriendly\":true, \"displayUrl\":\"https://learn.microsoft.com/ja-jp/azure/ai-services/...\", \"snippet\":\"次の情報は、API のバージョン 2023-12-01-preview に関する情報です。 これは、最新の API バージョンではありません。 最新のリファレンス ドキュメントについては、「Azure OpenAI On Your Data リファレンス」を参照してください。\", \"dateLastCrawled\":\"2024-04-01T11:24:00.0000000Z\", \"cachedPageUrl\":\"http://cc.bingj.com/cache.aspx?q=%E6%9C%80%E6%96%B0%E3%81%AE+Azure+OpenAI+API+%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B3&d=4722364173595070&mkt=ja-JP&setlang=ja-JP&w=vX-1y31tDipje5GzHSSWBmvuVvq78KuX\", \"language\":\"ja\", \"isNavigational\":true, \"noCache\":false },{(略)} ]" } ], "tools": [ { "type": "function", "function": { "name": "searchWeb", "description": "Get the latest information by searching the internet", "parameters": { "type": "object", "properties": { "search_text": { "type": "string", "description": "All requirements (separated by spaces) that you determine the user needs to search for in order to answer them." } }, "required": [ "search_text" ] } } } ], "tool_choice": "auto", "temperature": 0.1, "frequency_penalty": 0, "presence_penalty": 0 }
④ Azure OpenAIからの回答(2回目)
finish_reasonに「stop」があるのでユーザーにcontentの内容を回答します。
{ "choices": [ { "content_filter_results": { "hate": { "filtered": false, "severity": "safe" }, "self_harm": { "filtered": false, "severity": "safe" }, "sexual": { "filtered": false, "severity": "safe" }, "violence": { "filtered": false, "severity": "safe" } }, "finish_reason": "stop", "index": 0, "logprobs": null, "message": { "content": "最新のAzure OpenAIのAPIバージョンについての詳細は、公式のリファレンスドキュメントや各種情報サイトで確認することができます。ただし、特定のバージョン番号が明示されている情報は見つかりませんでした。\n\n参考リンク:\n1. [Azure OpenAI Service の REST API リファレンス - Azure OpenAI](https://learn.microsoft.com/ja-jp/azure/ai-services/openai/reference)\n2. [Azure OpenAIの最新APIスキーマを確認する方法](https://zenn.dev/microsoft/articles/azure-openai-latest-api-schema)\n3. [Azure OpenAI Service の新機能 - Azure AI services](https://learn.microsoft.com/ja-jp/azure/ai-services/openai/whats-new)\n4. [Azure OpenAI のモデルのバージョンの選び方 (2023年12月版)](https://blog.beachside.dev/entry/2023/12/26/130000)\n5. [Azure OpenAI利用の方必見!最新OpenAI Python API](https://qiita.com/hiromitsu_iwasaki/items/5e70ad81dcd7c9a7261f)", "role": "assistant" } } ], "created": 1712045679, "id": "chatcmpl-xxxxxxxxxx", "model": "gpt-4-yourModel", "object": "chat.completion", "prompt_filter_results": [ { "prompt_index": 0, "content_filter_results": { "hate": { "filtered": false, "severity": "safe" }, "self_harm": { "filtered": false, "severity": "safe" }, "sexual": { "filtered": false, "severity": "safe" }, "violence": { "filtered": false, "severity": "safe" } } } ], "system_fingerprint": null, "usage": { "completion_tokens": 314, "prompt_tokens": 4543, "total_tokens": 4857 } }
今回のまとめ
AOAIのtools定義で外部APIを実行しその結果を元に回答するイメージについてまとめてみました。
次回からこれをPower Automateで実装する方法について説明します。
ややこしくなるお話もありますが、少しでもお役立ていただければ幸いです。
システム開発・構築でお困りの問題や弊社が提供するサービス・ソリューションにご興味を抱かれましたら、是非一度 お問い合わせ ください。
※このブログで参照されている、Microsoft、Microsoft 365、Microsoft Copilot for Microsoft 365、Microsoft Teams、Azure OpenAI、その他のマイクロソフト製品およびサービスは、米国およびその他の国におけるマイクロソフトの商標または登録商標です。
※その他の会社名、製品名は各社の登録商標または商標です。