Chat GPTの秘められた力を引き出す~API編~
はじめに
前回のブログの続きです📕
みなさま、ChatGPTのAPIを使っていますか????
APIは少しハードル上がりますが、それ以上に面白い機能がたくさんあります。
興味があればぜひ使ってみてほしいです。
※以下では「文章を生成するAI」=「生成AI」と呼びます
※最近アップデートがあった「Structured Outputs(構造化された返答。function-callingの強化版?)」や「Realtime API(音声会話可能なAPI)」などはカバーできていません。
想定読者
- ChatGPTをなんとなく使っている人
- OpenAIのAPIに興味がある人
API編💻
ChatGPTのAPIを使うことで、生成AIを自分のアプリケーションやサービスに組み込むことができます。さらに、APIの機能を深く理解し活用することで、より高度な応用が可能になります。
前提知識
前提として、GPTはAPIで呼び出せます。chat GPTでやっている会話をAPIとして実施するイメージです。
APIを使う際の言語として、メジャーどころはTypeScriptとPythonです。
以下ではそんなAPI周りに付随する機能についてご紹介します。
それでは、具体的な機能について見ていきましょう。
① Fine-tuningで回答精度を向上させる
**Fine-tuning(ファインチューニング)**とは、既存のモデルに自分の用意した教師データを学習させることで、特定のタスクやドメインに最適化する手法です。
なぜFine-tuningが重要なのか?
一般的なChatGPTモデルは汎用的な知識を持っていますが、特定の業界用語や企業固有の情報には対応しきれない場合があります。また、最新の情報や企業内部のドキュメント情報は対応できません。
Fine-tuningを行うことで、モデルが特定の知識や文体を習得し、回答の精度が向上します。
Fine-tuningの仕組み
-
データ準備:モデルに学習させたい質問と回答のペア(教師データ)を用意します。
-
データ形式:教師データはJSON Lines形式で、以下のような構造にします。このようなデータは少なくとも10件以上必要とされています。
{"prompt": "LangChainとは何ですか?", "completion": "LangChain は、大規模言語モデルを使用してアプリケーションの作成を簡素化するように設計されたフレームワークです。"}
-
モデルの学習:OpenAIのAPIを使って、用意したデータでモデルを学習させます。
活用例
- カスタマーサポート:製品やサービスに特化した回答を提供
- 医療分野:専門的な医療用語やプロトコルに対応
- 教育分野:特定のカリキュラムや教材に合わせた回答
注意点!
Fine-tuningは最強の機能に思えますが、実はそうでもありません。。。
実際、Fine-tuningで特定の知識を与えすぎると「汎用的な回答の精度」は落ちていきます。この辺のバランスを見極めながら学習させることが重要です。
② RAGで特定ドメインの知識を活用する
**RAG(Retrieval-Augmented Generation)**は、モデルが外部の知識データベースから情報を取得し、それをもとに回答を生成する手法です。
RAGの仕組み
- ユーザーからの質問:モデルに入力が与えられます。
- 情報検索(Retrieval):質問に関連するドキュメントをデータベースから検索します。
- 回答生成(Generation):検索結果をもとに、モデルが回答を生成します。
情報検索(Retrival)の理解が難しいですが、ざっくり言ってしまえば、「テキストドキュメントから関係ありそうな情報をいい感じに探してくる」くらいのイメージです。
かなりざっくりです。
RAGは、社内ドキュメントの検索用途に使われることが多いでしょう。
「ラク助」もRAG使えそうですね!
③ JSONモードでレスポンスをJSON形式に
あまり使わない機能なので少しだけ。
プロンプトでフォーマットを指定して、JSON形式を返してもらう方法を紹介しました。
実はAPIにも「JSON mode」という機能があり、これを使えばJSONで返却されます。
ただし、返却されるJSONのスキーマが固定できません。つまり{ key :value }
のkeyが何になるかわからないです。そのためアプリケーションに組み込みづらい機能となっています。
後述のFunction Callingが代替をしてくれます。
④ Function Callingで自動的に適切な関数を実行
Function Calling機能を使うと、ユーザーの質問に対してAPIが自動的に適切な関数を呼び出してくれます。
Function Callingの仕組み
- 関数の定義:事前に関数とその仕様を定義します。(関数は複数定義できます)
- ユーザーからの質問:例:「明日の東京の天気は?」
- モデルが関数を選択:質問に対して実行すべき適切な関数を自動的に選択
- 関数を実行:バックエンドで関数を実行し、結果を取得します。
- 最終的な回答生成:モデルが関数の結果をもとにユーザーへの回答を生成します。
Function Callingの関数例
関数と呼ばれていますが、実はJSON形式となっています。
関数の定義とは、スキーマの定義と言い換えられます。
functions = [
{
"name": "get_current_weather",
"description": "指定した場所の現在の天気を取得します。",
"parameters": {
"type": "object",
"properties": {
"location": {
"type": "string",
"description": "都市名、例: 東京、ニューヨーク"
},
"unit": {
"type": "string",
"enum": ["摂氏", "華氏"],
"description": "温度の単位"
}
},
"required": ["location"]
}
},
{
"name": "calculate_sum",
"description": "二つの数値の合計を計算します。",
"parameters": {
"type": "object",
"properties": {
"a": { "type": "number" },
"b": { "type": "number" }
},
"required": ["a", "b"]
}
}
]
なぜFunction Callingが有効なのか?
ここで最も嬉しいのは、「返却値がスキーマの決まったJSONで返却される」ことです。
スキーマが決まっているため、断然アプリケーションに組み込みやすいです。
正直、function callingの用途はほぼこれなんじゃないかと思っています。
おわりに
APIの機能を広く浅く紹介いたしました。
Chat GPTの開発元である、Open AI社は数か月に一回のスピードでアップデートを繰り返しています。まだまだ新しいAPI機能が追加されそうで楽しみですね。
ちなみに、他の生成AIもAPIは提供しているはずです。
ClaudeやGeminniについても気になったら調べてみるのも良さそうです^_^
Discussion