OpenAI公式のサンプルコード集「openai-cookbook」のコードを試してみた

openai-cookbookのサンプルコードを実行してみました。openai-cookbookはOpenAI の公式リポジトリの一つで OpenAI API で一般的なタスクを実行するためのガイド+サンプル コード集です!
2023.03.16

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

お疲れさまです。とーちです。

連日、ChatGPT 関連のニュースで盛り上がってますね。
私も OpenAI の API を使ってなにか作ってみたいと思っていたところ、社内からの情報で、
openai-cookbookという git リポジトリがあることを知ったので試してみました。

上記のリポジトリは OpenAI の公式リポジトリの一つで OpenAI API で一般的なタスクを実行するためのガイド+サンプル コード集となっています。

Guides & examples を読んでみる

リポジトリのトップページのGuides & examplesから読み進めていくことにします。

Guides & examples は 2023/3/16 時点では以下の構成になっています。
各項目についてサマリを書いてみます。

  • API usage:
    • OpenAI API のレート制限の回避方法や、GPT モデルによる処理量や課金の単位となるトークンのカウント方法、OpenAI API からの回答をストリーミングする方法等が載っています
  • ChatGPT:
    • ChatGPT で使用されている gpt-3.5-turbo モデルを API 呼び出しで活用することで、対話型アプリケーションを構築する方法が記載されています。Python を使用した実装例なども紹介されています。
  • GPT-3:
    • GPT-3 のような大規模言語モデルの扱い方、例えば入力(プロンプトと呼んだりするそうです)としてどういったものを与えるべきか、誤った回答を出したときにプロンプトをどう改善するか、複雑なタスクの場合マルチステッププロンプト(複数回に分けた質問)が役立つことなどが記載されています
  • Embeddings:
    • Embeddings を使った実装例が記載されています。Embeddings とはテキスト等のデータを数値のリストに変換することを指しており、変換することによって例えば似たような意味の言葉や文章を検索したり分類したりといったことが可能になるそうです。
  • Fine-tuning GPT-3:
    • GPT-3 モデルをカスタマイズするためのガイドです。カスタマイズするためのベストプラクティスが記載されています。
  • DALL-E:
    • DALL-E という画像 API エンドポイントの使用方法についての記載です。DALL-E ではテキスト入力に基づき画像を生成したり、既存の画像を編集したりといったことができるようです。
  • Azure OpenAI (alternative API from Microsoft Azure):
  • Apps:
    • 2つのサンプルアプリケーションが公開されています。
    • File Q&A:
      • OpenAI API を使用して事前にアップロードしたファイルのデータから回答を生成する Next.js アプリとなっています。
    • web-crawl-q-and-a:
      • 指定されたドメインのウェブサイトをクロールし、各ページのテキストを抽出、Embeddings を作成することで回答のためのデータを準備し、質問に答える python アプリとなっています。

試してみる

web-crawl-q-and-a 実行準備

上記の中で気になった、「web-crawl-q-and-a」を実際に動かしてみます。
OpenAI API を使用するために API キーが必要となりますので、下記の記事等を参考に事前に API キーを入手しておきましょう。

さっそく clone してみます。

> python --version
Python 3.10.7
> git clone git@github.com:openai/openai-cookbook.git
> cd openai-cookbook/apps/web-crawl-q-and-a/
> pip install -r requirements.txt -t .

pip install を実行したところ以下のようなエラーが出ました。

  × python setup.py egg_info did not run successfully.
  │ exit code: 1
  ╰─> [1 lines of output]
      ERROR: Can not execute `setup.py` since setuptools is not available in the build environment.

ChatGPT に聞いたところ、setuptools がインストールされてないか最新ではないのが原因じゃないかと言われたので、upgrade します

> pip install --upgrade setuptools

再度 pip install を実行したところちゃんと動いてくれました。

web-qa.py のコードを修正して API キーを環境変数から読み込むようにします。

# Define root domain to crawl
domain = "openai.com"
full_url = "https://openai.com/"
openai.api_key = os.environ["OPENAI_API_KEY"] # ←追加

なお、質問文については web-qa.py の最終行付近にハードコーディングされており、以下の2つの質問を聞く形になっています。

  • What day is it?
  • What is our newest embeddings model?

続いて web-qa.py を動かしてみます。

> export OPENAI_API_KEY="sk-xxxx"
> python web-qa.py
Traceback (most recent call last):
  File "/python/openai-cookbook/apps/web-crawl-q-and-a/web-qa.py", line 8, in <module>
    from bs4 import BeautifulSoup
  File "/python/openai-cookbook/apps/web-crawl-q-and-a/bs4/__init__.py", line 37, in <module>
    from .builder import (
  File "/python/openai-cookbook/apps/web-crawl-q-and-a/bs4/builder/__init__.py", line 9, in <module>
    from bs4.element import (
  File "/python/openai-cookbook/apps/web-crawl-q-and-a/bs4/element.py", line 19, in <module>
    from bs4.formatter import (
  File "/python/openai-cookbook/apps/web-crawl-q-and-a/bs4/formatter.py", line 1, in <module>
    from bs4.dammit import EntitySubstitution
  File "/python/openai-cookbook/apps/web-crawl-q-and-a/bs4/dammit.py", line 12, in <module>
    from html.entities import codepoint2name
ModuleNotFoundError: No module named 'html.entities'; 'html' is not a package

html.entities というモジュールがないとのエラーがでました。こちらも ChatGPT に聞いてみたところ html という名前の別パッケージがインストールされておりそれが標準 html モジュールと競合しているのではないかとのことでした。
requirements.txt により html モジュールがインストールされていたので削除してみます。

rm html.py

これで動く状態になりました。

web-crawl-q-and-a の回答

web-crawl-q-and-a はどういう回答をするか見てみます。実行直後はクロールした URL が表示され、最後に回答が表示されます。

> python web-qa.py
https://openai.com/
https://openai.com/careers
https://openai.com/blog/discovering-the-minutiae-of-backend-systems
https://openai.com/blog/discovering-the-minutiae-of-backend-systems#content
https://openai.com/blog/discovering-the-minutiae-of-backend-systems#OpenAI
https://openai.com/blog?topics=culture-and-careers
<中略>
I don't know.
text-embedding-ada-002

今度はちゃんと動いてくれました。
「I don't know.」が「What day is it?」に対する回答、
「text-embedding-ada-002」が「What is our newest embeddings model?」に対する回答になっています。
正直、ひとつめの「I don't know.」は期待してた回答ではなかったのですが、ふたつめの回答については明確に ChatGPT の回答と違いが出ています。

ここで ChatGPT に同じ質問をしてみましょう。

ChatGPT(GPT-3.5)の回答

ふたつめの回答について、日本語訳すると以下の通りです。

AI 言語モデルである私は、機械学習モデルの最新動向を常に把握しているわけではありません。しかし、2021 年 9 月の私の知識の切り口では、最新かつ最先端のエンベデッドモデルとして、2020 年に OpenAI が公開した GPT-3 があります。ただし、その後、より新しいモデルが開発されている可能性もあります。

ChatGPT(GPT-4)の回答

こちらも日本語訳します。

AI 言語モデルとしては、2021 年 9 月までの知識しかなく、それ以降に開発されたかもしれない最新の埋め込みモデルについては、情報を提供することができません。しかし、前回の更新の時点で、人気のある単語埋め込みモデルには、Word2Vec、GloVe、FastText などがありました。研究者は、常に新しいモデルの開発や既存のモデルの改良に取り組んでいますので、自然言語処理の分野では、もっと新しいものが開発されている可能性があります。最新情報を得るには、自然言語処理と単語埋め込みに関連する研究論文、ブログ記事、会議録などをチェックすることをお勧めします。

「text-embedding-ada-002」は2022/12/15に発表されているようなので、openai.com をクロールした結果、最新の情報を回答できていることがわかります。

まとめ

軽い気持ちでやってみたのですが、Guides & examples の内容はなかなかボリュームがあるので読み解くのにまだまだ時間がかかりそうです。
しかし、少し読んだだけでもかなり勉強になりました。もっと読み込んで OpenAI API に関する知識を増やしていきたいと思います。
また、今回 Guides & examples を読むのにもコードを直すのにも ChatGPT(GPT-4)をフル活用しました。正直 ChatGPT がなければもっと記事作成に時間がかかっていたと思います。 既に AI(ChatGPT)ナシでは生きられない体になっていることを改めて実感しました。

この記事が誰かのお役に立てばなによりです。
以上、とーちでした。

参考

openai/openai-cookbook: Examples and guides for using the OpenAI API
Fine-tuning - OpenAI API
Azure OpenAI Service の ChatGPT モデルを有効化して REST API として使ってみた | DevelopersIO
OpenAI Platform ことはじめ 〜Organization メンバーに招待されたら | DevelopersIO