1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【0から目指すAIエンジニア】Day2:チャットAPIの基礎

Last updated at Posted at 2025-04-09

はじめに

こんにちは、慶應義塾大学理工学部機械工学科3年の金賢佑です!
私は東大発AIベンチャーの株式会社2WINSの元でインターンをしています!

これからの記事では自分がインターンを通して最強のAIエンジニアを目指していきます!
第二回はチャットAPIの基礎を記録しました!

APIとは?

ここではAPIKEYが取得していることを前提で進めます。また、今回はGoogle Colabを使用しています。

調べるとAPIについてたくさんの情報が出てきます。アプリとプログラムを繋ぐものだとか、APIリクエストだとかAPIレスポンスだとか、何だとか....

例えで考えてみましょう。

あなたがハンバーガー🍔屋さんに行ったとします。
そうするとメニューがありますね。これがAPIです。

メニューを見たあなたは「チーズバーガー🍔を一つください!」と注文します。
これがAPIリクエストになります。

そうすると店員さんが「はい、どうぞ、チーズバーガー🍔です!」と商品をくれます。
これがAPIレスポンスです。

APIの例として
OpenAI API:ChatGPTに質問して返事をもらう
Google Maps API:地図を表示したり、住所検索をしたり
Twitter API:ツイートを取得したり投稿できる

いろんなメニュー🍔がありますね。

しかしこのお店、誰でも利用できるわけではありません。
「会員制ハンバーガーショップ」なのです。
そこで必要になるのがAPIキーです。

APIキーはなぜ必要なの?

・誰が使っているのかわかる。
・不正利用、スパムを避ける。
・課金の紐付け。

などなど。
なのでAPIキーは大切に保管しなくてはいけません。

APIキーをシークレットに

そんなわけで取得したAPIキーはGoogle Colabのシークレットに保存しましょう。
OPENAI_API_KEYという名称で保存してください!

スクリーンショット 2025-04-02 18.40.28.png

あとは以下のコマンドでGoogle Colabのシークレットに保存したAPIキーをOPENAI_API_KEYという名前の環境変数に設定します。

import os
from google.colab import userdata

os.environ['OPENAI_API_KEY'] = userdata.get('OPENAI_API_KEY')

これでいつでも自分のAPIが使えるようになりましたね。

先程説明した通り、APIキーがあると色んなAPIが使えるんでしたよね。
そこで今回はOpenAI APIを使ってみたいと思います!

実際にGPTを使ってみよう

下のコマンドを実行することでOpenAIのライブラリを使用できます。

!pip install openai==1.40.6

では試しにgpt-4o-miniを使ってみます。以下のコマンドを打ってみてください!

import os
from google.colab import userdata

os.environ['OPENAI_API_KEY'] = userdata.get('OPENAI_API_KEY')

from openai import OpenAI
client = OpenAI()



response = client.chat.completions.create(
    model='gpt-4o-mini',
    messages=[
        {'role':'system', 'content':'You are an assistant.'},
        {'role':'user', 'content':'私はコーヒーが好きです。'},
        {'role':'assistant', 'content': 'コーヒーは美味しいですよね。'},
        {'role':'user', 'content':'私が好きな飲み物は何ですか?'}

    ],

)

print(response.to_json(indent=2))

しかし、このコマンドを実行してもエラーが起きてしまいます。

エラーの対処

スクリーンショット 2025-04-04 15.35.49.png

長々とエラー文が書かれていますね。
エラー分についてですが、枠の一番下、赤枠の部分に問題点がまとまっています。

今回だと、
TypeError: Client.__init__() got an unexpected keyword argument 'proxies'
と書かれています。
頑張って読むと、OpenAI()を使ってクライアントを作るときに、proxiesという引数を渡したけれど、そもそもproxiesという名前の引数は__init__()では受け付けていません、という意味です。

こういったエラーの時、初心者の方(自分を含む)はChatGPTに放り投げがちですが、自分はQiitaで検索してみることをお勧めします。

QiitaでTypeError: Client.__init__() got an unexpected keyword argument 'proxies'と検索すると、早速同じエラーに遭遇した人が解決した記事を投稿していますね。
今回は@hatman621221さんの記事を参考にしてみました。
https://qiita.com/hatman621221/items/fafaf4ac0e906616e8bd

httpxのバージョンを指定するとうまくいくみたいですね。

!pip install httpx==0.27.2 

話を戻します。
先ほどのコマンド、

import os
from google.colab import userdata

os.environ['OPENAI_API_KEY'] = userdata.get('OPENAI_API_KEY')

from openai import OpenAI
client = OpenAI()



response = client.chat.completions.create(
    model='gpt-4o-mini',
    messages=[
        {'role':'system', 'content':'You are an assistant.'},
        {'role':'user', 'content':'私はコーヒーが好きです。'},
        {'role':'assistant', 'content': 'コーヒーは美味しいですよね。'},
        {'role':'user', 'content':'私が好きな飲み物は何ですか?'}

    ],

)

print(response.to_json(indent=2))

を初心者の方でもわかりやすく少しずつ解説していきます。

from openai import OpenAI
client = OpenAI()

from openai import OpenAIopenaiというOpenAI社が提供する公式のPythonライブラリからOpenAIというクラスを取り出したいという意味です。
openai!pip install openai==1.40.6で最初にインストールしましたね。
クラスはよくインスタンスと一緒に勉強することが多いと思います。
ここではライブラリは箱📦、クラスは道具🛠️だと思っていてください。

client = OpenAI()についてですが、()は「関数やらクラスを使う」ことだと思っていてください。(ちなみにクラスで作られたものをインスタンスと言います。)
なので、これは先ほどインポートしたOpenAIを使うということにclientという名前をつけているのです。

response = client.chat.completions.create(

clientはさっき作ったAIとの窓口。
chatチャット機能を使いますという指定。
completionsAIの続きを考えてもらう機能。
create作ってもらう機能。
.は「〜の中にある機能を使う」という意味。だから今回だと、「client の中の chat の中の completions の中の create 関数を実行してね!」っていう意味になる。

    model='gpt-4o-mini',
    messages=[
        {'role':'system', 'content':'You are an assistant.'},
        {'role':'user', 'content':'私はコーヒーが好きです。'},
        {'role':'assistant', 'content': 'コーヒーは美味しいですよね。'},
        {'role':'user', 'content':'私が好きな飲み物は何ですか?'}
    ]
)

model='gpt-4o-miniはモデルの指定。
messages=[からが会話の履歴。

役割roleには
system:AIにどういうキャラで話すのかを伝えている。
user:ユーザーの最初の発言。
assistant:AIがそれに対して返事した内容。(今回は履歴として入力済み)
user:2回目のユーザーの発言。
が含まれている。

これらを実行するとGPTからは以下の回答が。

{
  "id": "chatcmpl-BIXoEcPdf4Aj2ptnF9nU0s5ET6DtC",
  "choices": [
    {
      "finish_reason": "stop",
      "index": 0,
      "logprobs": null,
      "message": {
        "content": "あなたが好きな飲み物はコーヒーです。もし他にも好きな飲み物があれば教えてください!",
        "refusal": null,
        "role": "assistant",
        "annotations": []
      }
    }
  ],
  "created": 1743759566,
  "model": "gpt-4o-mini-2024-07-18",
  "object": "chat.completion",
  "service_tier": "default",
  "system_fingerprint": "fp_b376dfbbd5",
  "usage": {
    "completion_tokens": 30,
    "prompt_tokens": 56,
    "total_tokens": 86,
    "prompt_tokens_details": {
      "cached_tokens": 0,
      "audio_tokens": 0
    },
    "completion_tokens_details": {
      "reasoning_tokens": 0,
      "audio_tokens": 0,
      "accepted_prediction_tokens": 0,
      "rejected_prediction_tokens": 0
    }
  }
}

大事なところのみ解説していきます。

{
  "id": "chatcmpl-BIXoEcPdf4Aj2ptnF9nU0s5ET6DtC",

これはただの識別番号。

  "choices": [
    {
      "finish_reason": "stop",
      "index": 0,

GPTは複数の返事(候補)を出せますが、今回は一個だけ返ってきていますね。これは"index": 0から読み取ってください。

      "message": {
        "content": "あなたが好きな飲み物はコーヒーです。もし他にも好きな飲み物があれば教えてください!",
        "role": "assistant",
      }

contentは返事の内容です。
roleはAIの役割です。assistantとして返事をしてくれたのですね。

  "usage": {
    "completion_tokens": 30,
    "prompt_tokens": 56,
    "total_tokens": 86,
    },

ここではGPTが使用したトークン数(単語数みたいなもの)の数を示しています。
OpenAIでは使ったトークン数で料金が決まりますからね。

completion_tokensは返事にかかったトークン数
prompt_tokensは入力に使ったメッセージのトークン数
total_tokensは合計トークン数

まとめ

このようにAPIキーがあればOpenAIの機能も使えちゃえたりするわけですね。
次回は2023年にChat Completions APIに実装されたFunction callingという機能を触ってみたいと思います!

お疲れ様でした!

1
0
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
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?