見出し画像

RustでのAzure OpenAI ServiceのAPIの使い方

こんにちは。PharmaXエンジニアリング責任者の上野(@ueeeeniki)です。
PharmaXでは、最近Rustの採用を一部のプロダクトから始めています。

また、別の記事(『[LLM PoC]Whisper + GPT-4で服薬指導の音声から薬歴内容を自動生成させることに成功しました』や『[LLM PoC]LLMによる疑義照会の半自動化PoC』)でも公開しましたが、LLMも実践投入に向けて動いています。

そこで、GPT-3.5やGPT-4のモデルを使おうとするわけですが、調査をしてもPythonの記事がほとんどであり、Rustやその他言語の記事はなかなか見つかりません。

さらに、PharmaXではGPTを使う際にAzure OpenAI Serviceの利用を前提に進めています。
しかし、Azure OpenAI Serviceの情報は、OpenAIの提供してるAPIよりもさらに情報が少ないのが現状です。

そこで今回は、RustでAzure OpenAI Serviceを使ってみるというかなりニッチな記事を書いていこうと思います。

Azure OpenAI Serviceとは?

Azure OpenAI Serviceとは、簡単に言えば、MicrosoftのAzure上で、GPT-3.5やGPT-4などのOpenAIが提供するAIモデルを使えるというサービスです。

このようなクラウドサービス上でOpenAIのモデルが利用できるようになって
いるのはAzureのみであり、MicrosoftとOpenAIの密な関係性があるからこそ成立していると言えるでしょう。

概念としては、クラウドネイティブさんの記事にある下記の図が非常にわかりやすかったので、引用します。

GPT搭載の「Azure OpenAI Service」セキュリティから見る』から引用

Azure OpenAI Serviceは、Azureだからこそのセキュリティ基準を満たしていたり、SLAの設定もあったり、認証方法もAzure認証に対応していたり、セキュリティや品質を保証するための機能が網羅されています。

そして、弊社のような主要アプリケーションにAzure以外を(弊社ではGCPを)使っているような場合でも、閉域ネットワーク網を構築することまで可能です。

このようなエンタープライズの要件を満たせる点がAzure OpenAI Serviceを使う利点と言えるでしょう。

詳しくは、下記のような記事も参考にしていただきたいと思います。


Azure OpenAI Serviceのセットアップ

Azure OpenAI Serviceにモデルをデプロイして使い始めるまでは、下記のような記事を参考にしてください。

下記公式ドキュメントにも記載のあるようにAzure OpenAI Serviceを使い始めるには申請が必要で、少し時間がかかるので注意してください。

また、GPT-4を使う場合には、さらに追加で申請が必要なので、下記公式ドキュメントなどを参考に申請を行ってください。

ここでは、GPT-3.5が使い始められるようになった前提で、話を進めていきたいと思います。

Azure OpenAI Serviceの提供するAPIについて

結論から言えば、Azure OpenAI Serviceは、RESTful APIを提供しており、API自体の使用感はOpenAIのAPIとほとんど変わりません。

マルチクラウド環境でAzure OpenAI Serviceとの閉域ネットワークを構築する方法などは別の記事で扱うとして、ここでは、単純なRESTful APIの使用を前提に使い方を説明したいと思います。

添付の写真のようにChatGPT プレイグラウンドから、「コードの表示」を押すと、サンプルコードが表示されます。
(エンドポイントのURLなどは作成者によって異なるので、一応マスクしています。)
Pythonでは、openai-pythonというライブラリの使用を前提としたサンプルコードが記載されています。
curlやjsonでのサンプルまで取得することができます。

プライグラインドの画面から「コードの表示」をクリック
Python(openai-python)でのサンプルコード
curlでの呼び出し方も教えてくれる

こういう利用者への配慮がさすがと言ったところでしょうか。
ご覧いただければ分かるようにOpenAIのAPIと大きな違いはありません。

一方で、当然ながら、Rustでのサンプルコードなどはないので、ここからは本題であるRustでのAPIの呼び出し方を説明していきたいと思います。


(APIの公式リファレンスは下記です。細かいパラメーターの説明などはこちらをご覧ください。)


RustのHTTP ClientおよびOpenAI用のライブラリを使ったAPIの呼び出し

ここでは、HTTP ClientとOpneAI用のライブラリの両方のAPIの書き方の両方を紹介してみたいと思います。

HTTP Clientとしては、デファクトスタンダードと言っても過言ではない、reqwest を利用することとします。

Rustのライブラリは、下記のaync_openaiが更新頻度も高く、人気もありそうだったので、使うことにしました。
openaiという名前ではありますが、Azure OpenAI Serviceにも対応しています。

では、早速それぞれを説明していきましょう!

① reqwestによるAzure OpenAI ServiceのAPIの呼び出し

まずはイメージをつけるために、reqwestによるAPIの呼び出しのコードを説明していきたいと思います。

手順は、
① requestのためのURLを作成する
② requestのbodyを作成する
③ requestをする
という順番です。

本家OpenAIとの違いは、api_baseやdeployment_idを与えなければいけないところでしょうか。
api_base(エンドポイントのbase URL)は、赤枠で囲んだリソース名ごとに異なります。

リソース名によってbaseのURLが異なる

デプロイはプレイグラウンドからも確認可能です。

デプロイ欄を見る


② aync_openaiによるAzure OpenAI ServiceのAPIの呼び出し

まずは、公式ドキュメントを参考にclientを作成しましょう。

Clientを作成するために設定を与えていく

手順は、
① Clientを作成するためにconfigに設定を与えていく(urlの作成に当たる)
② requestを作成する
③ requestをする
という順番です。

PythonであろうとRustであろうと、構造そのものは同じです。
api_baseやdeployment_idについては上述したので省略します。

公式ドキュメントでは、ChatCompletion APIの使い方については、詳しい例は載っていなかったので解説しました。
Requestの中でも特にmessageは、下記のようにChatCompletion APIならではなので気をつけてください。

CreateChatCompletionRequestのmessage FieldはChatCompletionRequestMessageのベクタを取る
ChatCompletionRequestMessage

最後に

今回は、RustでのAzure OpenAI Serviceの使い方について説明しました。

Rust × Azure OpenAI Serviceで解説したものの、Python以外の言語でAzure OpenAI Serviceを使う方の参考にもなったのではないでしょうか。

ただし、GPT関連の仕様はアップデートも激しいので、OpenAIやMicrosoftの公式のドキュメントなどを合わせてご確認ください。

Azure OpenAI Serviceの本番運用については別途記事化できればと思っています。



PharmaXの採用情報について、こちらで随時更新しております。
少しでもご興味をお持ちいただけましたら、ぜひカジュアルにお話ししましょう!

この記事が気に入ったらサポートをしてみませんか?