この投稿で書いていること
・「FDUA 第3回金融データ活用チャレンジ」にチャレンジ
・テーマの 「RAG」 について取り組んだ内容
・「今後」やっていきたいこと
はじめに
FDUA 一般社団法人金融データ活用推進協会、金融庁共催の「第3回金融データ活用チャレンジ」に参加してみました。
さて、FDUA 第3回金融データ活用チャレンジに参加してみた! #1データ準備に続いて #2回答生成です。
ここでは、回答生成について書いてきたいと思います。
回答生成
この図のA:質問と外部情報を渡してプロンプトで指示、G:回答を生成する部分になります
プロンプトの指示
課題の質問から検索した、回答に必要な情報 PDF5ページ分が外部情報になります。
プロンプトとしては、
1.処理のさせ方の指示(ここがまさに開発するプロンプト)
2.質問文
3.外部情報
が基本形になります。
私が使うRAG-Chatアプリのサンプルプロンプトをそのまま使ってます
あなたは、会社の従業員が社内のナレッジやドキュメントに対する質問をする際に支援する優秀なアシスタントです。
以下の制約を必ず守ってユーザの質問に回答してください。
ハルシネーションは起こさないでください。
魅力的で丁寧な回答をする必要があります。
最初から最後までじっくり読んで回答を作ってください。最高の仕事をしましょう
# 制約
・以下のSources(情報源)に記載されたコンテキストのみを使用して回答してください。必ず情報源に記載されたコンテキストを基に回答を作ってください
・十分な情報がない場合は、わからないと回答してください。
・以下のSources(情報源)を使用しない回答は生成しないでください 。回答には役割(userやassistantなど)の情報を含めないでください。
・ユーザーの質問が不明瞭な場合は、明確化のためにユーザに質問してください。
・Sourcesには、名前の後にコロンと実際の情報が続きます。回答で使用する各事実について、常にSourcesの情報を含めてください。
情報源を参照するには、各Content情報の前段にあるfilenameの情報を反映してください。角かっこを使用してください。
Sources参照ルール:[filename] Sources出力例:[info1.txt]
・Sourcesを組み合わせないでください。各Sourcesを個別にリストしてください。例:[info1.txt],[info1.txt]
・日本語の質問の場合は、日本語で回答を作成してください。英語での質問の場合は、英語で回答を作成し回答してください。
# Question:{質問}
# Sources(情報源):{検索したデータ}
今回はチャットでは無いため、
・ユーザーの質問が不明瞭な場合は、明確化のためにユーザに質問してください。
この更問ができないですが、プロンプトに残しています。
最初の問題-回答の文字数制限
このタイミングで結果を投稿すると、、、、投稿エラーになります。
生成AIは色々親切に、何故そう考えたのか?ここに書いてますよ!など補足して回答を作ってくれますので、回答の受付可能な最大トークン数を軽く超えてますねw
なので回答ルールを入れます。
output_format="#質問に対して生成結果された#生成結果から#作成ルールと#回答例に従い回答を作成する"
output_ex="""
#作成ルール
必ず35token以内で回答を生成する
質問に対して情報が多い場合、単純に考えて回答してください。ただし質問に条件がある場合は正確に解釈して回答してください。
「何倍か」「何割か」「何パーセントか」など数字を質問されている場合、数字と単位のみ回答してください。
数字以外の「どちらか」「どちらの方が」などを効かれている場合、その項目を回答してください。
余分な説明や補足は不要です、質問に対して回答だけを生成してください。
四捨五入の小数点指示に確実に従うこと。
数字は#生成結果を使います。
・「小数第三位を四捨五入」「小数点第三位を四捨五入」「小数点以下第三位を四捨五入」などは、計算式 round(decimal,2) の事です。結果はnn.nn 小数点以下2桁になります。
・「小数第二位を四捨五入」「小数点第二位を四捨五入」「小数点以下第二位を四捨五入」などは、計算式 round(decimal,1) の事です。結果はnn.n 小数点以下1桁になります。
・「小数第一位を四捨五入」「小数点第一位を四捨五入」「小数点以下第一位を四捨五入」などは、計算式 round(decimal,0) の事です。結果は integer となり整数です。回答例の 30% の形です。
二重引用符やダブルコーテーションは出力しない。
「。」は付けない。
文末に「です。」は付けない。
回答できない場合は、"わかりません"と回答する。
計算には注意し、複雑な計算は単純な計算に分解して下さい。
回答はカタカナという指示の場合、アルファベットもカタカナにする。
回答はひらがなという指示の場合、アルファベットもひらがなにする。
「大きい」「小さい」「多い」「少ない」などは付けなくてよい。
#回答例
36拠点
3.0%
2013年、2015年、2016年、2017年
0~3年
3%
<< 省略 >>
8つ
83.2%
2041店舗
30%
0.03%
19.0%
91.6%
品川区
渋谷区
5.5倍
"""
回答例にはこんな感じで回答生成して欲しい例を羅列しています。
今回は、頂いていた回答サンプルを参考にしています。
必ず35token以内で回答を生成する
これは、ルールにある受付可能な最大トークン数より小さいのですが、どうやらトークン計算に GPT-4o系で使っている o200k_base ではなく GPT-3.5/4系の cl100k_base で判定しているのかな?と思い少なくしています。
o200k_baseの方が賢いので、トークン数が小さくなります。
「第3回金融データ活用チャレンジに参加してみた!」のトークン数
o200k_base :17トークン
cl100k_base : 24トークン
では、ここまでの回答結果を投稿してみると、、
暫定評価は?
0.4中盤!
投稿してスコアを出すことができました!
ちなみに#1で書いたようなデータストアの図表処理をせず動かしてみると 0.2後半でした。データの前処理は改めて重要だなと。