【Azure OpenAI Serivce】text-davinci-003からgpt-35-turbo-instructへのモデル移行調査

Azure OpenAI ServiceのCompletionsモデルである`text-davinci-003`等のモデルは2024年に廃止され、後継モデルである`gpt-35-turbo-instruct`に移行する必要があります。

https://techcommunity.microsoft.com/t5/azure-ai-services-blog/announcing-updates-to-azure-openai-service-models/ba-p/3866757

そこで、既存のモデルである`text-davinci-003`から新しいモデル`gpt-35-turbo-instruct`に移行した際に、APIの仕様に破壊的変更が無いかを調査してみました。

## 前提（2024/1時点）
旧モデル`text-davinci-003`および新モデル`gpt-35-turbo-instruct`は一部リージョンのみサポートされており、東日本では現在サポートされておりません。本記事ではEast USリージョンを利用しています。

詳細は下記URLをご参照ください。

https://learn.microsoft.com/ja-jp/azure/ai-services/openai/concepts/models

## Request
リクエストは、`text-davinci-003`と`gpt-35-turbo-instruct`いずれも下記の仕様でした。モデルの移行によるURLやプロパティ名等の変更はありません。

詳細は下記URLをご参照ください。

https://learn.microsoft.com/ja-jp/azure/ai-services/openai/reference#completions

* URL
    ```
    {{openai_base_url}}/openai/deployments/{{completion_deployment_id}}/completions?api-version={{version}}
    ```
    * `{{openai_base_url}}`: Azure OpenAI Serviceのエンドポイント
        * `https://<ドメイン>.openai.azure.com`の形式になります
    * `{{completion_deployment_id}}`: モデルのデプロイ名
        * 事前にモデルをデプロイする必要があります
    * `{{version}}`: APIバージョン

* ヘッダー
    * `api-key`: Azure OpenAI ServiceのAPIキー
    * `Content-Type`: `application/json`
* リクエストボディ例
    ```json
    {
        "prompt": "簡単な一次方程式の問題を1問作って\n",
        "max_tokens": 1000,
        "temperature": 0,
        "frequency_penalty": 0,
        "presence_penalty": 0,
        "top_p": 0,
        "stop": null
    }
    ```

## Response
`text-davinci-003`および`gpt-35-turbo-instruct`の2つのモデルで上記リクエストでAPIを実行した結果です。

レスポンスに関しても、モデルの移行によるプロパティ名等の変更はありません。

ただし、AIからの回答の内容が異なっております。

### text-davinci-003
* レスポンス
    ```json
    {
        "id": "cmpl-83z...",
        "object": "text_completion",
        "created": 1695962190,
        "model": "text-davinci-003",
        "choices": [
            {
                "text": "\n2x + 3 = 7\n\nx = 2",
                "index": 0,
                "finish_reason": "stop",
                "logprobs": null
            }
        ],
        "usage": {
            "completion_tokens": 12,
            "prompt_tokens": 31,
            "total_tokens": 43
        }
    }
    ```

* 回答内容
    ```
    2x + 3 = 7

    x = 2
    ```

### gpt-35-turbo-instruct
* レスポンス
    ```json
    {
        "id": "cmpl-83z...",
        "object": "text_completion",
        "created": 1695963014,
        "model": "gpt-35-turbo-instruct",
        "choices": [
            {
                "text": "\n問題：あるクラスの生徒数をx人とすると、男子生徒の数は女子生徒の数の2倍である。男子生徒の数が12人であるとき、女子生徒の数を求めよ。\n\n解答：男子生徒の数を2xとすると、女子生徒の数はx人となる。よって、2x + x = 12となる。これを解くと、x = 4となるので、女子生徒の数は4人である。",
                "index": 0,
                "finish_reason": "stop",
                "logprobs": null
            }
        ],
        "usage": {
            "completion_tokens": 148,
            "prompt_tokens": 21,
            "total_tokens": 169
        }
    }
    ```

* 回答内容
    ```
    問題：あるクラスの生徒数をx人とすると、男子生徒の数は女子生徒の数の2倍である。男子生徒の数が12人であるとき、女子生徒の数を求めよ。

    解答：男子生徒の数を2xとすると、女子生徒の数はx人となる。よって、2x + x = 12となる。これを解くと、x = 4となるので、女子生徒の数は4人である。
    ```

## 結論
文章生成モデルを`text-davinci-003`から`gpt-35-turbo-instruct`に移行する際、APIの移行による破壊的変更は無いためモデル名を変更するだけで完結します。

ただし回答内容に関しては上記2つのモデルで差異が出るようなので、そちらは適宜プロンプトやパラメータを調整していく必要がありそうです。