jiku log

データサイエンスの核心を掴む : 学びと発見の記録

「RAG・AIエージェント[実践]入門」を読む ~第2章 OpenAIのチャットAPIの基礎①Chat Completions API~

はじめに

業務でLLMを活用していくためには,検索拡張生成(RAG)やAIエージェントといった技術が必要になってくると考えられる。これらの技術の基礎知識と実践経験を積むために,西見公宏・吉田真吾・大嶋勇樹 著「LangChainとLangGraphによるRAG・AIエージェント[実践]入門」を読むことにした。

本記事は,第2章 「OpenAIのチャットAPIの基礎」のChat Completions APIに関する読書メモである。

  • 本書の紹介ページ

gihyo.jp

第2章 OpenAIのチャットAPIの基礎

本章では,LLMを活用したシステム開発に必要な,OpenAIのチャットAPIについて,基礎から説明している。

2.4 Chat Completions APIを試す環境の準備

本節では,OpenAIのチャットAPIである,Chat Completions APIの準備方法について説明している。

本節では,開発環境としてGoogle Colaboratory(Google Colab)を用いる。

OpenAIのAPIを利用するためには,事前にOpenAIのアカウントを作成しておく必要がある。このアカウントは,https://chatgpt.com/でChatGPTを使うときにも必要になる。

本書のP20以降にAPIキーの準備方法について説明があるのだが,いきなり画面の見え方が異なっていた。


2024年現在におけるhttps://openai.com/にアクセスしたときのトップ画面

そのため,以下のサイトも参考にしてAPI KEYの取得と課金設定を行なった。
qiita.com

2.5 Chat Completions APIのハンズオン

サンプルコードを動かしながら,挙動を確認した。
github.com

OpenAIのパッケージ

本書で用いるopenaiパッケージのバージョンは,1.40.6だが,2024年12月現在のバージョンは1.57.4である。本書が発売されたのが2024年11月なので,開発スピードの速さが窺える。

httpxパッケージのダウングレード

本書P26のコードを動かしていた際に,

client = OpenAI()

の部分でいきなりエラーが出た。

原因は,Google Colabにもともと入っているhttpxパッケージが新しすぎたため,他のパッケージとの連動が取れなくなったためであった。

そのため,以下のようにコードを修正する必要があった。

!pip install openai==1.40.6
!pip install openai==1.40.6 httpx==0.27.2

会話履歴を踏まえた応答を得る

Chat Completions APIには,過去のリクエストの会話履歴を踏まえて応答する機能はない。そのため,会話履歴を踏まえて応答してほしい場合は,

"role" : "assistant", "content" : "(APIからの応答情報)"

のように,roleを設定したうえで過去の応答情報を設定し,リクエストを送る必要がある。

ストリーミングで応答を得る

ChatGPTのように,応答を徐々に表示させるようにするためには,リクエストにstream=Trueのようにパラメータを追加する必要がある。
もしstream=Falseのようにすると,レスポンスがまとめて表示されるようになる。また,stream=Falseという設定にするのであれば,for文を使わずにまとめて回答を取ってくる必要がある。

response = client.chat.completions.create(
    model="gpt-4o-mini",
    messages=[
        {"role": "system", "content": "You are a helpful assistant."},
        {"role": "user", "content": "こんにちは!私はジョンと言います!"},
    ],
    stream=False,
)

# Access the content directly from the response object
content = response.choices[0].message.content
print(content, end="", flush=True)

JSONモード

LLMをアプリケーションに組込んで使う場合,出力形式をJSONにしたいことがある。その場合は出力形式を,{"type" : "json_object"}の用に指定すればよい。

Vision(画像入力)

GPT-4oやGPT-4o miniでは,画像の入力にも対応している。

  • 入力画像

https://raw.githubusercontent.com/yoshidashingo/langchain-book/main/assets/cover.jpg

  • サンプルコード
from openai import OpenAI

client = OpenAI()

image_url = "https://raw.githubusercontent.com/yoshidashingo/langchain-book/main/assets/cover.jpg"

response = client.chat.completions.create(
    model="gpt-4o-mini",
    messages=[
        {
            "role": "user",
            "content": [
                {"type": "text", "text": "画像を説明してください。"},
                {"type": "image_url", "image_url": {"url": image_url}},
            ],
        }
    ],
)

print(response.choices[0].message.content)
  • 出力
この画像は、書籍の表紙を示しています。書籍のタイトルは「ChatGPT/LangChainによるチャットシステム構築【実践】入門」で、著者は吉田真吾と大嶋勇樹です。表紙にはカラフルな鳥のイラストがあり、背景は青色で「ChatGPT」という文字が prominently 表示されています。また、書籍の内容についての説明として、「大規模言語モデルを本番システムで活用するための基礎知識と実践のハンズオン」と記載されています。

出力を見ると,「背景は青色で「ChatGPT」という文字が prominently 表示されています」と表示されている。
※註 : "prominently"とは「目立つように」という意味だが,英語での回答を翻訳して表示している可能性がある。

(参考)課金状況の確認

今回APIをたたいたので,課金状況をhttps://platform.openai.com/settings/organization/usageから確認した。その結果が下図の通りである。

今回は数回のやり取りしかしていないため,利用金額は$0.01未満とのことだった。

まとめと感想

今更ながら,OpenAIのAPIを試してみた。プログラム上で,ChatGPTでのやり取りのようなことができたときは結構感動した。
課金状況も心配していたが,現状の使い方程度ではさほど課金されないことも確認できて安心した。

途中で,ソースコードが動かないところがあった。原因としては,Google Colaboratoryでインストールされているパッケージと,本書のサンプルコードのパッケージのバージョンの相性が悪かったためであった。
使用しているバージョンを記録しているrequirements.txtも同梱されているので,そちらも参考にしていきつつ,Google ColaboratoryではGeminiによってコード修正の提案もしてくれるので,こちらも活用していきたい。


本記事を最後まで読んでくださり,どうもありがとうございました。