ChatGPTに独自データを組み込む【プロンプトの工夫編】

Featured image of the post

概要

ChatGPTのAPIを使う場合、Web上のデータだけでなく独自の情報を回答してもらうことができる。

こんなことができる。
✅社内の情報を学習させ、社内用チャットボットを作る。
✅Q&Aデータを学習させ、Q&Aチャットボットを作る。
✅メールの件名と本文を学習させ、自動分類システムを作る。など

2つの方法

独自の情報を回答してもらうには2つの方法がある。

プロンプトに独自の情報を含める(今回説明する方法)

質問文の中に「前提知識を与えて質問する」という方法。

⭕️質問文を工夫するだけなので簡単
⭕️準備もほとんどいらず初期投資も不要
⭕️多くのモデルに対応している。
❌毎回の質問が少し長くなるため、API利用料も少し増える
 →ただしLangChainを使えば質問に全データ入れる必要はなくなる!
❌プロンプトが長くなると毎回の処理に少し負担がかかる

💡
シンプルに見えるがLangChainなどのライブラリと組み合わせると実用的。
様々なモデルを使えることが強み。

ファインチューニング

Open AIのモデルをトレーニングして独自のモデルを作る方法。

⭕️一度トレーニングすれば次回以降は質問が短く済みAPI利用料金も抑えられる。
⭕️学習データが多くてもプロンプトが長くならない。
❌学習させる手間がかかる。
❌トレーニングで大量のデータを読み込ませるため、最初にお金がかかる。
❌使用できるモデルが限られている。

💡
理想のモデルを作る方法。
トレーニングに料金がかかるが、長期的に運用する場合は十分実用的。
ただしモデルが限られているので今はまだ使いづらいかも…

(2023/11/7現在)
比較的新しいモデル「gpt-3.5-turbo-1006」が利用可能になっている。
かなり使いやすくなってきている!

詳細は以下を参照

📄 ChatGPTに独自データを組み込む【ファインチューニング編】

使い方

【基本】質問に独自の情報をすべて含める

基本的な使い方は通常のAPI利用時と変わらない✅

APIの使用方法は 📄 Arrow icon of a page link ChatGPTのAPIを使うための知識まとめ【全プログラミング言語共通】 を参照。

リクエストするときプロンプトに独自の情報を含めるだけでOK!

ユーザーから「製品Aの価格を教えて。」という質問があった場合

curl https://api.openai.com/v1/chat/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer APIキーを入れる" \
  -d '{
    "model": "gpt-3.5-turbo",
    "messages": [
			{
				"role": "user",
				👇「独自情報」 + 「質問」
				"content": "製品Aの価格は1500円です。製品Bの価格は3000円です。製品Aの価格を教えて。"
			}
		]
  }

ポイント

ユーザーの質問の前に独自情報を付け足している✅

💡
(独自情報)製品Aの価格は1500円です。製品Bの価格は3000円です。
(質問)製品Aの価格を教えて。

このように質問に独自の情報を含めることで、もともと答えられれない質問も回答させることができる。

⚠️
ただしこの方法だと情報が増えると質問が長くなってしまう…

【応用】質問に独自の情報を一部だけ含める

上記の方法では独自情報が増えるにつれて質問が長くなってしまう🥲

→API利用料金が高くなる❌

→そもそも質問の長さには制限がある❌

解決策

ライブラリ「LlamaIndex」や「LangChain」を使うと解決できる!

【補足】対応しているプログラミング言語
ライブラリ 対応言語
LlamaIndex Python
LangChain Python, TypeScript

PHPなどで使いたい場合は、PHPからPythonを呼び出そう!

これらを使うと…

外部のドキュメントを読み込める。

✅読み込んだドキュメントから「質問に関連する部分のみ」抜き出せる。

「質問に関連する部分のみ」を質問に組み込める。

💡
独自情報から必要最低限の部分だけを質問に含めることができる!

簡単に実装できる「LlamaIndex」がおすすめ!

「LlamaIndex」を使った方法で解説する✅

以下で解説している。

📄 初心者によるLlamaIndexの基本知識まとめ