2
1

Azure OpenAI ServiceをREST API + JavaScriptでミニマムに使ってみた

Posted at

はじめに

Azure OpenAI Serviceを利用することで、SDKやREST APIを通し生成AIの機能を利用するWebサイトを作成することができます。
様々な言語に対応していますが、今回はJavaScriptを利用する例をやってみたのでご紹介します。
雑に試したい人向けです。

前提

  • Azure OpenAI Serviceの利用申請が済んでいるアカウントがある
  • 今回のモデルにはgpt-35-turboを利用する
    • たぶん他のモデルでもできますが、今回の記事でチョイスしたのはこれです。

使ってみた

リソースグループの作成

はじめにリソースグループを作成します。
AOAIの検証用なので、 try-aoai-solution という名称にしました。

AOAIリソースの作成

Azure OpenAIリソースを try-aoai-solution へ作成します。
リージョンはJapan Eastで、名前は try-aoai-solution-katoaki としました。
他の設定はデフォルトで作成します。
image.png

モデルのデプロイ

作成したリソースを選択すると、モデルをデプロイするための選択肢が表示されます。
「探索」から辿ってデプロイ画面へ遷移し、モデルを選択した上でデプロイ名を決めてデプロイを行います。
ここで決めた「デプロイ名」は後で利用するので控えておきます。
image.png

APIキーの取得

Azure OpenAIの画面で「キーとエンドポイント」を選択し、表示されるAPIキーを取得し、控えておきます。
二つ払い出されますが、とりあえずキー1だけで十分です。
image.png

REST API仕様の確認

さて、REST APIをコールするためには次の情報が必要になります

  • リソース名
  • デプロイID
  • APIバージョン

具体的なAPIバージョンの値や、その他入力値を決めるために、公式ドキュメントを参照します

Azure OpenAI Service REST API reference - Azure OpenAI | Microsoft Learn https://learn.microsoft.com/en-us/azure/ai-services/openai/reference#completions

コーディング

リクエストするURLと入力値が決まったら、コードを書いていきます。
本記事では、なるべくシンプルなHTML・CSS・JavaScriptでコードを作成してみます。
domain, deployId, apyKeyには控えておいた情報を入れます。
入れた情報を元にPOSTでCompletions APIをコールするためのコードと、コールするために必要な入力情報を取得するコードを書きます。

こちらのような感じです。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>sample</title>
</head>
<body>
    <div class="container">
        <p>AOAIに尋ねたいことを書いてSendボタンを押してください</p>
        <input type="text" name="txt" id="txt" value="こんにちは">
        <button>Send</button>
        <p id="result">(ここに回答が入ります)</p>
    </div>
</body>

<script>
    const setResult = (_text) => {
        document.querySelector('#result').innerHTML = _text;
    }

    const main = async () => {
        let userMessage = document.querySelector('#txt').value;
        let systemsettings = {
            "role": "system",
            "content": `元気よく受け答えします`
        }
        let message = [];
        message.push(systemsettings);
        message.push({ 'role': 'user', 'content': userMessage });

        const domain = 'xxx'; // リソース名
        const deployId = 'xxx'; // デプロイID
        const apiKey = 'xxx'; // APIキー
        const url = `https://${domain}.openai.azure.com/openai/deployments/${deployId}/chat/completions?api-version=2023-08-01-preview`;

        await fetch(url, {
            method: 'POST',
            headers: {
                'Content-Type': 'application/json',
                'api-key': `${apiKey}`,
            },
            body: JSON.stringify({
                'model': 'gpt-3.5-turbo',
                'stream': false,
                "max_tokens": 400,
                "temperature": 0.7,
                "frequency_penalty": 0,
                "presence_penalty": 0,
                "top_p": 0.95,
                "stop": null,
                'messages': message,
            }),
        })
        .then((response) => {
            return response.json();
        })
        .then((data) => {
            setResult(data.choices[0].message.content);
        });

    }
    document.querySelector('button').addEventListener('click', () => {
        main();
    })
</script>

</html>

実行結果

実行結果は次のようになります。

image.png

参考

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1