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: