AIにチャレンジ！ OpenAI APIでAIを動かしてみよう♪

こんにちは、みなさん！
前回の記事「[はじめてのOpenAI API入門](https://qiita.com/kofumi/items/16a9a501ffc8dd49da50)」でOpenAI APIを動かせる準備は整いましたね！今回は実際にAPIを動かしてみましょう♪

#### APIの種類

APIには2つの種類があります：Chat Completions APIとAssistants APIです。

この2つの違いは、会話が単発か継続かという点です。Chat Completions APIは1回きりの回答ですが、Assistants APIでは作成したスレッド上で会話を続けることができます。

今回はChat Completions APIの動かし方を解説します。

#### Chat Completions APIの構成

Chat Completions APIの構成は以下の通りです。
- **model**: 使用するモデルを指定します
- **messages**
  - **role**: contentの役割で、以下のいずれかの値を持ちます
    - **system**: ChatGPTのCustom instructionsに相当
    - **user**: ChatGPTを使うユーザーに相当
    - **assistant**: ChatGPTの回答に相当
    - **tool**: 関数呼び出しの結果、toolsパラメーター使用時に使います
  - **content**: プロンプトや回答

messagesの配列にはChatGPTとのやり取りを時系列で入力し、最後のmessageに対する回答が返ってきます。

#### APIを動かす方法

APIを動かす方法にはPlaygroundと自作のプログラムの2つがあります。

##### Playgroundで動かす方法

1. メニューからPlaygroundのChatを選択します。

![PlaygroundでChatを選択](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3809123/0d7d18fe-b9b9-53ff-37a3-df99bf049a7a.png)

2. 下部の入力欄でuserを選択してプロンプトを入力します。

![userを選択してプロンプトを入力](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3809123/fd2d31ee-ccf7-b5f4-b76b-4785a6614475.png)

3. 今度はassistantを選択して回答を入力します。

![assistantを選択して回答を入力](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3809123/d9a2ced9-c413-523d-7061-3737227e99fb.png)

4. 続いてuserを選択してプロンプトの入力が終わったらrunボタンをクリックします。

![runボタンをクリック](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3809123/c5529822-3809-bce1-e690-7d1853780bdb.png)

5. プロンプトに対する回答が生成されました。

![回答が生成されました](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3809123/1edab4fb-23d6-4f99-377b-6ffc4adba086.png)

6. 右上の `</>` をクリックすると実行されたコードを確認できます。

![実行されたコードを確認](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3809123/0d26eaa0-0a53-9e16-1060-6ac6b4f70fff.png)

##### 自作のプログラムで動かす方法

Playgroundで動かした際のコードをPythonで実行してみましょう。

```Python
from openai import OpenAI
client = OpenAI()

response = client.chat.completions.create(
  model="gpt-4o",
  messages=[
    {
      "role": "user",
      "content": [
        {
          "type": "text",
          "text": "2007年に日本一になった球団は？"
        }
      ]
    },
    {
      "role": "assistant",
      "content": [
        {
          "type": "text",
          "text": "中日ドラゴンズです。"
        }
      ]
    },
    {
      "role": "user",
      "content": [
        {
          "type": "text",
          "text": "どの球場で決まりましたか？"
        }
      ]
    }
  ],
  temperature=1,
  max_tokens=256,
  top_p=1,
  frequency_penalty=0,
  presence_penalty=0
)
```

実行結果は以下の通りです。

```JSON
{
  "id": "chatcmpl-9YuSbE65my4yR3nYl2OPSNKxmTR91",
  "choices": [
    {
      "finish_reason": "stop",
      "index": 0,
      "logprobs": null,
      "message": {
        "content": "2007年の日本シリーズで中日ドラゴンズが日本一を決めた試合は、ナゴヤドーム（現在のバンテリンドーム ナゴヤ）で行われました。",
        "role": "assistant",
        "function_call": null,
        "tool_calls": null
      }
    }
  ],
  "created": 1718107213,
  "model": "gpt-4o-2024-05-13",
  "object": "chat.completion",
  "system_fingerprint": "fp_319be4768e",
  "usage": {
    "completion_tokens": 46,
    "prompt_tokens": 44,
    "total_tokens": 90
  }
}
```

messageのcontentに回答が含まれていることが確認できます。usageをみるとトークン数も確認できます。

#### まとめ

Chat Completions APIの基本構造を理解していただけましたか？　PlaygroundとPythonから簡単に動かすことができましたね。Chat Completions APIにはパラメータがたくさんあります。次回以降でパラメータについて解説していきます。

何か質問があれば、コメントで教えてくださいね。それでは、次回の記事もお楽しみに！