RAGで使うプロンプトを色々変えて実験しました

背景や目的


1.生成AIの活用方法として注目されているRAG(検索拡張生成)の実験を、今まで何回かしています。(最近の関連記事→本番データでのRAGシステム構築例紹介)。

2.その時に得た「プロンプトで対策したら良さそうな課題」を整理し直して、今回試してみました。

3.技術っぽくない(?)ので、何となく後回しにしていましたが、純粋に日本語と向き合ってみました。

今回の課題


以前の実験で得た課題を再度整理しました。対策を試したいケースが4つあります。

1.前提情報の明確化
操作方法のQA情報が検索で抽出され、それをコンテクストとして回答生成する時に、質問入力内容にシステム名が書いて無いような場合の事
例:「ログインできない。どうしたら良い?」
  →「それはね。〇〇だよ」 ✕ 使うシステムによって違うのに答えてしまう
  →「システムは何?先にそれを教えて!」 〇 こうさせたい

2.1文字違いの問題
特定の人やものについて尋ねる時に、1文字位の違いが無視されてしまう問題
例:「徳河家康は江戸幕府を開いた人?」
  →「はいそうです。1603年にね。」 ✕ 徳河さんでは無い。
  →「徳川家康だったらそうだよ。」 〇 これが良い

3.入力者の立場を理解した表現
操作方法のQA情報をもとに回答生成される時に、質問者が利用者では無い場合、おかしな表現になる問題。
例:「インストールできない。どうしたら良い?」(と、サポート担当者が入力)
  →「一般的には〇〇だよ。詳しくは、サポートに聞いてね。」 ✕ 私がサポートなのに。
  →「情報無いね。開発部門に問い合わせしてみては?」 〇 これが良い

4.指示用の言葉(“コンテクスト”)がそのまま使われる問題
プロンプト内の指示内容の言葉をそのまま使ってしまう問題。
例:「システムをmacで使う方法は?」
  →「コンテクストに情報がありません。」 ✕ コンテクストって何だ?
  →「検索結果に情報がありません。」 〇 これが良い

確認環境を用意


今回はGoogle colaboで確認します。
(colaboの使い方は、ここでは割愛させて頂きます。)

1.適当なノートブックを開いて、まずopenaiをインストールします。

Google Colab
### open ai install
!pip install --upgrade openai

2.あとで試験用のコンテクストをファイル参照させたいので、driveへの接続もしておきます。

Google Colab
###ドライブ接続
from google.colab import drive
drive.mount('/content/drive')

3.試験用のコードです。以下、補足説明です。
 ・回答生成ではOpenAIを使います。sk-***のところは、別途APIキーを取得し
  ご自身の値を設定して下さい。
 ・試験では、9行目と10行目を変えながら実行します。
 ・同様に試験時には、システムプロンプトの基本部分も変えていくつか試します
  (15行目の下や17行目の下への追記にて)。

Google Colab
### プロンプトを変えてテキスト生成させる処理
import textwrap
from openai import OpenAI

OPENAI_API_KEY = "sk-***"
openai_client = OpenAI(api_key = OPENAI_API_KEY)

##質問とコンテクスト(検索結果例)をセット
question = 'ログインできない。どうしたら良い?'
with open('/content/drive/MyDrive/llm_tmp/devais_vol8_context_1.txt') as f:
  llm_context = f.read()

##システムプロンプトをセット
system_prompt = textwrap.dedent("""\
  あなたは質問に回答するチャットbotです。
  以下のコンテクストを参考にして質問に回答して下さい。
  コンテクストの中に質問に対する答えがない場合や、わからない場合、不確かな情報で回答しないでください。
  ## コンテクスト(開始) ##
  {}
  ## コンテクスト(終了) ##
  """).format(llm_context)

##回答生成を実行
response_gpt = openai_client.chat.completions.create(
  model="gpt-4o-2024-08-06",
  messages=[
    {"role": "system", "content": system_prompt},
    {"role": "user", "content": question}
  ],
  temperature=1
)
answer = response_gpt.choices[0].message.content
print(answer)

試験仕様


冒頭で記載した4つの課題を対策してみます。

1.「前提情報の明確化」:先に前提情報を聞いてくるように、させてみます。
2.「1文字違いの問題」:細部の違いに必ず言及するよう指示してみます。
3.「入力者の立場を理解した表現」:入力者の事を教えて、変化するか試します。
4.「指示用の”コンテクスト”が分かりにくい問題」:代替案を与えてみます。

試験1:前提情報の明確化


1.手順
 質問文、使うコンテクストを上のコードセル該当部分へセットします。
 コンテクストは、RAGでの検索結果出力を模した内容にして、そのテキストを参照ファイル
 に貼り付けました。

質問文
ログインできない。どうしたら良い?
コンテクスト
以下の文章は、積算システムのパスワードについてについてサポート対応をした時の記録です。
<問合せ内容>
ログインできない。
パスワード変更もできない。
<対応内容>
パスワードの初期化方法をお伝えし、解消した。
—————–
以下の文章は、積算システムの起動時エラーについてサポート対応をした時の記録です。
<問合せ内容>
積算システムが起動できない。
スタートメニューから積算システムを起動しようとすると、「データのアクセスに失敗しました。」と表示される。
OKボタン押下しても、ログイン画面も表示されない。
<対応内容>
ログファイルを送ってもらい、調査を実施した。
⇒プロキシ認証エラーのメッセージが出力されていた。
現地確認が必要と判断し、9/22に確認するが、現象再現せず、正常に接続できた。
本件は一旦クローズし、再発時に再度検討する。
—————–
以下の文章は、株価設定システムのアカウントロックについてサポート対応をした時の記録です。
<問合せ内容>
アカウントロックがまれに発生する。社内クラウド経由でしかログインしていないとのこと。
サーバーログを見て、状況を調査してほしい。
<対応内容>
現地でログを確認したところ、
ログイン画面を使ってパスワード不一致が繰り返されて、アカウントロックされていた。
***様とはセッションタイムアウトされるとログイン画面に自動遷移されるが、ここでIDとPASSを入力できてしまうから本件が起きてしまうのではという話になり、次の改修対応で検討することとなった。
—————–
以下の文章は、見積システムのサポート対応をした時の記録です。
<問合せ内容>
見積システムのログイン時にエラーメッセージが表示され、ログインできない状況。
<対応内容>
エラー画面を確認したところ、PCの.NETの構成が不足しているようなメッセージであった。
システム管理部門に確認いただくようお願いした。
他のPCにインストールしたところ問題なかったため、そちらを使用していただくことで了承いただいた。
—————–
以下の文章は、株価設定システムのエラーについてサポート対応をした時の記録です。
<問合せ内容>
社内クラウドのリンクから株価設定システムにログインしようとすると、ログインエラーになり、ログイン画面が表示される
<対応内容>
リモートで確認できる範囲でログを確認したが、原因が分からず。
明日現地調査することに決定。
11/10 現地でログを確認。IDおよびPASSが空でアクセスしているログあり。社内クラウド側の不具合の可能性があることを報告。
***社へ連絡し、確認することに決定。
ログインエラー時はログイン画面ではなく、社内クラウドから再ログインする旨の画面を表示するように変更。
11/22 ***社から発生時にF5キー更新を試してみてくれと依頼されているが、最近本件の問合せがなく、試す機会がない状況。
11/30 状況確認した。以降、問合せなし。***様とは本件は一旦クローズする旨で合意。

2.問題現象の再確認
 プロンプトを初期の内容にして、問題の現象を再現しておきます。
 プロンプトの箇所を確認後、colabo上該当セルをShift+Enterで実行します。

プロンプト(初期)
あなたは質問に回答するチャットbotです。
以下のコンテクストを参考にして質問に回答して下さい。
コンテクストの中に質問に対する答えがない場合や、わからない場合、不確かな情報で回答しないでください。
実行結果(初期)
どのシステムにログインできないのかを教えていただけると、具体的な対応策をご案内できるかと思います。たとえば、積算システムの場合は、パスワードの初期化を試みることができます。その他のシステムについては、具体的な情報をもとに適切な方法をお伝えできる場合がございますので、お知らせください。

あれれ。システム名に言及して、意外と素敵な内容が出ました。2024年4月頃にgpt-4-turboで試した時よりとても進化してますね(今回は4oの8月版)。とにかく、試したかった事を続けます。

3.改善策の実行結果
 プロンプトに追加指示をして、実行してみます。

プロンプト(対策用)
あなたは質問に回答するチャットbotです。
以下のコンテクストを参考にして質問に回答して下さい。
コンテクストの中に質問に対する答えがない場合や、わからない場合、不確かな情報で回答しないでください。
入力文に、システム名が記載されていない場合は「システム名が記載されていないようです。正確に回答できるように、質問文にシステム名を含めて頂けますか?」と返答して下さい。
実行結果(対策後)
システム名が記載されていないようです。正確に回答できるように、質問文にシステム名を含めて頂けますか?

期待通りの結果が得られました。

試験2:1文字違いの問題


1.手順
 試験1と同様に準備します。質問内のファイル名が違う(t->s)場合の挙動を確認してみます。

質問文
積算システムで.misumoriファイルを開く方法を知りたいです。
コンテクスト
以下の文章は、積算システムのシステム全般についてサポート対応をした時の記録です。
<問合せ内容>
.mitumoriファイルを積算システムで開く方法を知りたい
<対応内容>
工事選択画面にある「データ読込」ボタン押下、「見積」ボタン押下で.mitumoriファイルを選択すれば開けるようになることをご説明し、開けるようになったことを確認した。
—————–
以下の文章は、商談管理システムの送付データの読込についてサポート対応をした時の記録です。
<問合せ内容>
***社側より「.mitumori」のファイルを貰った。
**社の情報をベースにこれから見積を作成したいのだが、どうすればよいか? <対応内容> 商談件名選択画面から送付データの読込方法をご説明した。 ⇒2019.12.17**さん確認、完了
—————–
以下の文章は、商談管理システムの送付データの読込についてサポート対応をした時の記録です。
<問合せ内容>
***社様から見積データ(.mitumori)をもらったが、システムを開いても、商談件名選択画面に
該当のデータが表示されない
<対応内容>
.mitumoriのデータを利用するためには、送付データの読込を行っていただく必要があることをご説明しました。
—————–
以下の文章は、商談管理システムのその他についてサポート対応をした時の記録です。
<問合せ内容>
査定システムで.mitumoriのデータを読み込もうとすると、
「予期せぬエラーが発生しました」と表示される
<対応内容>
該当のデータをいただいて、確認したところ、商談管理システムの送付データ作成機能から
つくられたデータではないことが分かった (おそらく、mdbファイルの拡張子を直接変更している)。
送付データ作成機能から作られたデータをいただくようにお願いした。
2023.9.15 追加
見積データを作成する会社の方がシステムに不慣れな方で、
.mitumoriのデータの作成方法が分からないとのこと。
9/19 に画面を共有しつつ操作方法をお伝えすることになった。
2023.9.19
打合せを実施。.mitumoriデータの作成方法についてお伝えした。
そのデータを利用した際は問題なく取込ができることも確認した。

2.問題現象の再確認
 プロンプトを初期の内容にして、問題の現象を再確認しておきます。

プロンプト(初期)
あなたは質問に回答するチャットbotです。
以下のコンテクストを参考にして質問に回答して下さい。
コンテクストの中に質問に対する答えがない場合や、わからない場合、不確かな情報で回答しないでください。
実行結果(初期)
積算システムで.mitumoriファイルを開くには、まず工事選択画面に移動します。そこで「データ読込」ボタンを押し、「見積」ボタンを選択してから.mitumoriファイルを選ぶことで開くことができます。

はい。想定とおりの問題が再現できました。入力者の意図かどうかは別として、ファイル名が違っている事への言及がありません。misumori <-> mitumori

3.改善策の実行結果
 プロンプトに追加指示をして、実行してみます。

プロンプト(対策用)
あなたは質問に回答するチャットbotです。
以下のコンテクストを参考にして質問に回答して下さい。
コンテクストの中に質問に対する答えがない場合や、わからない場合、不確かな情報で回答しないでください。
あなたが作成した文について、最後に以下を実施してください。
 ・あなたが作成した文の中の名詞を全て抽出して下さい。→名詞リストA、とします。
 ・入力文の中から、名詞リストAの名詞と似た名詞を抽出して下さい。→名詞リストB、とします。
 ・名詞リストBのそれぞれの名詞を、名詞リストA内の似た名詞と再度比較し、全ての文字が一致しているか再チェックし、1文字以上の違いがある名詞を抽出して下さい。→名詞リストC、とします。
 ・名詞リストCに1つ以上の名詞がある場合、あなたが作成した文の最後に「【注意】入力された***が回答文で示した内容と少し違っております。再確認をして頂き、必要があれば訂正文にて質問をし直して下さい。」を追記して下さい。***は、名詞リストCの中の名詞を示します。
実行結果(対策後)
積算システムで.mitumoriファイルを開く方法については、工事選択画面にある「データ読込」ボタンを押し、「見積」ボタンを押して.mitumoriファイルを選択することで開けるようになることが確認されています。
名詞リストA: 積算システム、工事選択画面、データ読込、ボタン、見積、ファイル
名詞リストB: .misumoriファイル
名詞リストC: .misumoriファイル
【注意】入力された.misumoriファイルが回答文で示した内容と少し違っております。再確認をして頂き、必要があれば訂正文にて質問をし直して下さい。

期待通り注記がされました。ただ、名詞リスト・・・が表示されてますね。
表示しないよう指示追加してみます。

プロンプト(対策2)
あなたは質問に回答するチャットbotです。
・・途中省略・・名詞リストCの中の名詞を示します。
名詞リストは回答文で表示させる必要はありません。
実行結果(対策2)
積算システムで.mitumoriファイルを開く方法については、工事選択画面にある「データ読込」ボタンを押し、「見積」ボタンを押して.mitumoriファイルを選択することで開くことができます。
【注意】入力されたmisumoriが回答文で示した内容と少し違っております。再確認をして頂き、必要があれば訂正文にて質問をし直して下さい。

素晴らしい。完璧です。
念のため、この状態で質問を正しいファイル名に変えて、注記が出ないか確かめておきます。

質問文(確認用)
積算システムで.mitumoriファイルを開く方法を知りたいです。
実行結果(確認用)
積算システムで.mitumoriファイルを開くには、工事選択画面で「データ読込」ボタンを押し、「見積」ボタンを押して.mitumoriファイルを選択すれば開けるようになります。

大丈夫でした。注記は出ません。
試験2で最後にもう一つ確認します。指示がややこしいので、ざっくり表現に変えてみます。

質問文(元に戻します)
積算システムで.misumoriファイルを開く方法を知りたいです。
プロンプト(対策3)
あなたは質問に回答するチャットbotです。
以下のコンテクストを参考にして質問に回答して下さい。
コンテクストの中に質問に対する答えがない場合や、わからない場合、不確かな情報で回答しないでください。
回答文の中で、入力された言葉と似ているけど1文字でも違っている言葉があれば、回答文の最後に以下を追記して下さい(***は、その違った言葉を示しています)。
「【注意】入力された***が回答文で示した内容と少し違っております。再確認をして頂き、必要があれば訂正文にて質問をし直して下さい。」
実行結果(対策3)
積算システムで.mitumoriファイルを開く方法については、工事選択画面にある「データ読込」ボタンを押し、「見積」ボタンを押して.mitumoriファイルを選択することで開くことができます。
【注意】入力されたmisumoriが回答文で示した内容と少し違っております。再確認をして頂き、必要があれば訂正文にて質問をし直して下さい。

あぁ、それでも良いのですね。期待通りの回答でした。以上、2通りの方法で対策ができました。

試験3:入力者の立場を理解した表現


1.手順
 試験3用の質問文とコンテクストを用意します。

質問文
各システムをmacで使う場合の注意点を質問された。どう回答すれば良い?
コンテクスト
以下の文章は、商談管理システムのシステム全般についてサポート対応をした時の記録です。
<問合せ内容>
操作方法を教えてほしい。
<対応内容>
***様のパソコンにインストールされた商談管理システムが古かったので、今年1月時点のものをインストールした。
その後、操作方法をお伝えした。
—————–
以下の文章は、プロジェクト管理システムのサポート対応をした時の記録です。
<問合せ内容>
以下の内容のお問い合わせをいただいた。
——————————————————
プロジェクト管理システムの使用可能者の設定は
東京システムハウスさんにお願いするんでしたでしょうか?
北関東グループの利用者の確認と追加をお願いしたいです。
——————————————————
<対応内容>
プロジェクト管理システムは、各社に配布しているプロジェクト管理・確定システム用の
CDを使うと利用できるようになることをお伝えした。
また、そのCDを利用した方は全員利用できるようになる(別途、対応が必要なものはない)
ことをお伝えした。
<メモ>
(プロジェクト管理システムは、上記CDを使った人は全員利用できるようになることが
分からなかったようでした。)
—————–
以下の文章は、積算システムの新版CDについてサポート対応をした時の記録です。
<問合せ内容>
新しいPCに査定システムをインストールする際には、コピーバッチCDを利用すればよいのか。
また、Windows10でもシステムは起動するのか。
<対応内容>
新しいPCにシステムをインストールする際には、全てのシステムいずれも
コピーバッチCDを利用する必要があることを説明した。
また、Windows10でも動作することをお伝えした。
—————–
以下の文章は、積算システムのインストールについてサポート対応をした時の記録です。
<問合せ内容>
①現行のデスクトップPCから新ノートPCへシステムを移動したいが、
 ノートPCにはCDドライブがない。
 このような場合、どのようにシステムをPCにインストールすれば良いか?
②システムをインストールし、起動したが、
 「バージョンアップに失敗しました。ファイルが保存できません」と出る。
  どうしたら良いか
<対応内容>
①現行のデスクトップPCへ一旦インストールCDを入れ、中身のフォルダ類を
 コピーした後、新ノートPCへフォルダをコピーしていただく方法を提案した。
②フォルダの読取専用プロパティが設定されていたので、
 そちらを解除したところ動作したとのことでした。
—————–
以下の文章は、株価設定システムのインストールについてサポート対応をした時の記録です。
<問合せ内容>
【株価設定システム】
***社に計画数値の入力を委託するにあたり、***社のパソコンに株価設定システムを設定したい。
どうすれば良いか?
<対応内容>
リリース時にお渡ししたバッチファイルCDからセットアップいただくようお願いした。

2.問題現象の再確認
 プロンプトを初期の内容にして、問題の現象を再確認しておきます。

プロンプト(初期)
あなたは質問に回答するチャットbotです。
以下のコンテクストを参考にして質問に回答して下さい。
コンテクストの中に質問に対する答えがない場合や、わからない場合、不確かな情報で回答しないでください。
実行結果(初期)
申し訳ありませんが、コンテクスト内に各システムをMacで使用する場合の情報は含まれていません。そのため、具体的な注意点については回答できません。システムの提供元やサポート担当者に直接お問い合わせいただくことをお勧めします

赤字の部分がBadポイント、と認識します。このbotを使っているのがサポート担当者本人の場合に、良くないメッセージになりますので。

3.改善策の実行結果
 プロンプトに追加指示をして、実行してみます。Colabo内セルを変更後にShift+Enterします。

プロンプト(対策用)
あなたは質問に回答するチャットbotです。
以下のコンテクストを参考にして質問に回答して下さい。
コンテクストの中に質問に対する答えがない場合や、わからない場合、不確かな情報で回答しないでください。
なお、あなたに質問している人は質問内で言及されるシステムのメーカーの社員で、システム利用者からの質問対応をするサポート担当者です。回答時には、彼の立場を理解した適切な表現で回答をしてください。
実行結果(対策後)
申し訳ありませんが、提供されたコンテクストには、商談管理システムやその他のシステムをMacで使用する場合の注意点に関する情報はありません。そのため、正確な回答を提供することができません。メーカーのサポートチームに確認して、Macでの使用に関する正しい情報を入手することをお勧めします。

良さそうですね。青字のあたりが、立場を理解した表現になっていそうです。

試験4:指示用の”コンテクスト”が分かりにくい問題


1.手順
 試験4の質問文とコンテクストは、試験3と同じものを使います。

質問文
各システムをmacで使う場合の注意点を質問された。どう回答すれば良い?
コンテクスト
(試験3と同じ)

2.問題現象の再確認
 プロンプトを初期の内容にして、問題の現象を再確認しておきます。

プロンプト(初期)
あなたは質問に回答するチャットbotです。
以下のコンテクストを参考にして質問に回答して下さい。
コンテクストの中に質問に対する答えがない場合や、わからない場合、不確かな情報で回答しないでください。
実行結果(初期)
申し訳ありませんが、提供されたコンテクストの中には各システムをmacで使用する際の注意点に関する情報が含まれていないため、具体的な回答をすることができません。システムの公式サポートやマニュアルを参照することをお勧めします。

やはり「コンテクストの中」は、日本語としてわかりにくいですね。対策してみます。

3.改善策の実行結果
 プロンプトに追加指示をして、実行してみます。

プロンプト(対策用)
あなたは質問に回答するチャットbotです。
以下のコンテクストを参考にして質問に回答して下さい。
コンテクストの中に質問に対する答えがない場合や、わからない場合、不確かな情報で回答しないでください。
なお、回答文で”コンテクスト”という表現は使わずに、別の言い方に変えて下さい。”検索結果”が良いと思います。
実行結果(対策後)
申し訳ありませんが、検索結果には各システムをMacで使用する際の具体的な注意点や対応方法についての情報は含まれていません。必要な場合は、システムの提供元から直接サポートを受けるか、システムの公式ドキュメントを確認することをお勧めします。

指示とおりに検索結果と言い換えた内容になりました。

試験結果サマリー


4つの試験は、どれも解決できたようです。

試験課題結果対策内容
前提情報の明確化システム名有無を確認&無ければ記入要求する指示を追加
1文字違いの問題1文字差異の確認&該当あればその注記をする指示を追加
入力者の立場を理解入力者情報を与え、その立場にあう表現をする指示を追加
指示用の言葉が難解問題ワードを与え、それを変換して表現をする指示を追加

まとめ


1.基本的に、日本語の追加指示に即した変化が起こっていました。なので、今後問題をみつけるたびに指示を追加してゆけば良さそうですが、どんどん複雑になって組み合わせによる弊害が発生しないか少し気になります。引き続き注目します。

2.試験で言及していませんが、同じ質問への回答が度々変化するのが気になりました。このランダム性を排除しようとclient.chat.completions.create()のパラメータtemperatureを変えてみましたが、これでは出来ないですね。このあたり詳しい方いらっしゃれば、情報頂けますと幸いです。

3.LLMの進化が顕著だなぁ、と思いました。最新のgpt-4o-2024-08-06を使ってみて、数か月前の4-turboからの進化をひしひしと感じました。プロンプトの内容に頼らないLLMまで進化するか、また色々確認したいと思います。どうもありがとうございました。

ご連絡フォーム


フィードバックを是非お願いします。
本記事の方法での問題点や、よりよい方法のアイデアを頂けると大変助かります。

この記事に関して

その他のご連絡

DevAIsをもっと見る

今すぐ購読し、続きを読んで、すべてのアーカイブにアクセスしましょう。

続きを読む