ChatGPT

ChatGPT (OpenAI) API入門シリーズ② テキスト生成

ChatGPT (OpenAI) API入門シリーズ② テキスト生成

こんにちは!KCompanyの八木です。

OpenAI APIのリファレンス入門シリーズ第二弾です!

前回と同様に、基本的に本家のドキュメント本家のAPIリファレンスの内容にそってやってみた(内容をまとめてみた)、という内容になります。開発環境や設定などについては、第一回目を参照ください!

二回目の今日はテキスト生成(Text generation)、要するにチャットをやっていきます!

それではっそくいってみましょう!

テキスト生成モデル

テキスト生成モデルの概要

テキスト生成モデルは、いわゆる大規模言語モデルといわれるものです。OpenAIのテキスト生成モデルは自然言語やコード、画像などを理解できるようにトレーニングされています。このモデルは、何か入力を与えてあげることで、出力結果を得ることができます。入力の部分がいわゆる「プロンプト」です。プロンプトを「プログラミング」し適切な指示を与えることで、難しいタスクをこなしてくれるようになるわけです。

このブログを読んでいる方であれば既に想像が及んでいたり実際にご利用されたことがあるとは思いますが、テキスト生成モデルを使うことで、ドキュメント草稿の作成や、コードの作成、ナレッジに裏打ちされた回答の作成、テキストの分析、ソフトウェアへの自然言語インタフェースの提供、様々なトピックでのチュータリング、言語翻訳、ゲーム用のキャラクターシミュレーションといったことができるようになります。Visionを用いることで、テキストと画像を一緒に使って対話をすることも可能です。

テキスト生成モデルを使うには

テキスト生成モデルをAPIとして利用するには、Chat Completions API にリクエストを送信すればOKです。Chat Completions API にリクエストを送信する際には、第1回でもお伝えしたAPI Keyとインプット(プロンプト)をリクエストに含めれば大丈夫です。その結果、出力をレスポンスとして受け取るという流れになります。

テキスト生成モデルには、最近発表されたgpt-4oからクラッシクなgpt-3.5-turboまで様々なモデルがあります。APIに実装する前にOpenAIの管理画面のPlayGroundで現在提供されている様々なモデルを試すことができます。

Chat Completions API

以下がChat Completions APIにリクエストを送るNode.jsのサンプルコードです。チャットにすると、当然のことながら、ユーザーとシステム(AI)で複数回のやりとりが発生しますが、このやりとりをいい感じにとりまとめしてくれるように設計されています。

import OpenAI from "openai";

const openai = new OpenAI();

async function main() {
  const completion = await openai.chat.completions.create({
    messages: [{"role": "system", "content": "あなたは優秀なアシスタントです"},
        {"role": "user", "content": "FIFAワールドカップ2022の日本代表の成績を教えて"},
        {"role": "assistant", "content": "ベスト8入りを目指したラウンド16でクロアチアに延長とPK戦の末に惜しくも敗れました。"},
        {"role": "user", "content": "どこで開催されましたか?"}],
    model: "gpt-3.5-turbo",
  });

  console.log(completion.choices[0]);
}
main();

重要なポイントとしては、messeagesパラメーターの理解になります。メッセージは、コード内にあるように以下の2つを持つオブジェクトの配列である必要があります。

  • role(“system”、”user”、”assistant”のいずれか)
    • sysytem: アシスタントの振る舞いを設定します。例えば、アシスタントの性格を変更したり、会話全体を通して従うべき具体的な指示を与えたりできます。ただし、systemは省略可能で、”あなたは優秀なアシスタントです”などの一般的なメッセージを使用した場合と、モデルの振る舞いはおおむね同じになる可能性があることに注意してください。
    • user: ユーザーが作成したメッセージ(とみなされます)。アシスタントに対する要求やコメントが含まれます。
    • assistant:
ChatGPT (OpenAI) API入門シリーズ① はじめに

ChatGPT (OpenAI) API入門シリーズ① はじめに

こんにちは!KCompanyの八木です。 本日からOpenAI APIのリファレンス入門シリーズをやっていこうと思います。 基本的に本家のAPIリファレンスの内容にそってやってみた(内容をまとめてみた)、という内容になります。 一回目の今日はGETTING STARTEDの内容をやってみようと思います。 それではっそくいってみましょう!

開発環境

実際の内容に入る前に、私の開発環境についてお伝えしておきます。

  • OS: MacOS
  • Node.js: 22.1.0

ですので、原則としてNode.jsを使って説明していきます。ただし、説明の進行上、Curlを使ったものも含まれます。(APIリファレンスには他にもCurlやPythonを使ったバージョンもあります。Curlバージョンは別途またまとめるかもしれません。Pythonについては、筆者が今のところ利用するシーンが少ないため、劣後になっています。) 本投稿では、Node.jsなどの開発環境自体の構築については割愛しています。

イントロダクション

OpenAI APIは、HTTPリクエストを通じてAPI通信が可能です。基本的にどのようなプログラミング言語にも対応しているようですが、代表的なものとしてNode.js, Pythonなどがあります。開発者コミュニティによって、コミュニティライブラリも作られています。

例えばNode.jsであれば、以下でインストールが可能です。

npm install --save openai
# or
npm install openai@^4.0.0

認証

APIキー

OpenAI APIを使うには、APIキーが必要です。APIキーを使って、API利用の認証を得ることができます。APIキーは外部に漏らさないよう慎重に管理しましょう。

APIキーは、ユーザーアカウントやサービスアカウントごとに作成できます。サービスアカウントは主に本番環境へのアクセスを提供するために使用されます。

各APIキーは1.プロジェクトキー、2.ユーザーキーがあります。

  1. プロジェクトキー
    1. 特定のプロジェクト向け
    2. ユーザーキーよりセキュリティ上、優れている
  2. ユーザーキー
    1. 従来のAPIキー。ユーザーにひも付き全組織・全プロジェクトにアクセスできる
    2. 広範なアクセス権限の反面、セキュリティ上のベストプラクティスとしては非推奨

APIリクエスト時は常に以下のHTTPヘッダーを含める必要があります。

Authorization: Bearer OPENAI_API_KEY

組織とプロジェクト(オプション)

ユーザーキーを利用している場合、APIリクエストに特定の組織やプロジェクトを指定するためのヘッダーを追加する必要があります。

APIキーの取得

APIキーの取得には、OpenAIアカウントを作成・ログインし、APIキーのページに遷移してください。

Create new secret keyボタンを押下し、適切な名前等を設定してください。

APIキーはご自身で適切な場所に秘匿し保存してください。

APIキーの設定(Node.js/MacOS)

以下、Quickstartのドキュメントを参考にしています。

全てのプロジェクトでAPIキーを設定することで、SDKが自動的にAPIキーを検出してくれるため、コードを書く必要がなくなります。以下、詳細の設定手順です。

  1. ターミナルを開く
    1. アプリケーションフォルダ内にあるターミナルを開くか、Spotlight(Command + Space)を使って検索します。
  2. bashプロファイルを編集
    1. 以下のコマンドを使用して、プロファイルファイルをテキストエディタで開きます。新しいバージョンのMacOSでは~/.zshrcを使用します。
    nano ~/.bash_profile
    # or
    nano ~/.zshrc
  3. 環境変数を追加:
    1. エディタで、以下のようにAPIキーを設定します。your-api-key-hereの部分を実際のAPIキーに置き換えてください。
    export OPENAI_API_KEY='your-api-key-here'
  4. 保存して終了:
    1. 変更を保存するためにCtrl + Oを押し、その後Ctrl + Xを押してエディタを閉じます。
  5. プロファイルを読み込む:
    1. 以下のコマンドを使用して、更新されたプロファイルを読み込みます。
    source ~/.bash_profile
    # or
    source ~/.zshrc
  6. 設定の確認: