FDUA 第３回金融データ活用チャレンジに参加してみた！ #3 精度向上 1/2

# この投稿で書いていること
・「FDUA 第３回金融データ活用チャレンジ」にチャレンジ
・テーマの 「RAG」 について取り組んだ内容
・「今後」やっていきたいこと

# はじめに
FDUA 一般社団法人金融データ活用推進協会、金融庁共催の「第３回金融データ活用チャレンジ」に参加してみました。

https://signate.jp/competitions/1515

さて、FDUA 第３回金融データ活用チャレンジに参加してみた！ #2回答生成に続いて #3精度向上です。
ここでは、精度を上げる為にいくつか実施したことについて書いてきたいと思います。

:::note alert
かなり具体的な内容を記載しています。
もし不都合がある場合はお知らせ頂けると幸いです。
:::


# 39工場や11年チャートのあれ、含めOCR問題

みなさんどうでしたでしょうか？
どうやって取ろうかな～いろい考えてました。こちらについては次々回に投稿します。
今回はプロンプトで解決編になります。

# プロンプトで解決
ざっくり最初に考えた処理フローは以下で、細かく分けて各所で生成AIに処理させています。
フローが決まればdataRobot, dataikuでも書けるかも？？
生成AIの特質としてプロンプトは短く明確な方が意図した動きをしてくれるので処理を分割しています。
まずは効率度外視で正答できるかを試行する考えで、後からまとめられる処理はまとめようと思ってます。応答時間は40秒～60秒かかるのでまとめる工夫は必須になります。
が今回応答時間制限ないので（ﾎﾞｿ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4006424/1ecee7d4-ae38-4921-8ad5-21c59ea13705.png)
全部で生成AIのAPI叩いてるな。。。


## 複雑な質問の問題
「経営目標の進捗の2022年度と2023年度を比較したとき、営業利益率と税引後ROICではどちらの方が差が大きいか」ってやつですね。一発のプロンプトで行けるのか？

サンプルのプロンプトでの結果は、
```
質問:A社グループの経営目標の進捗の2022年度と2023年度を比較したとき、営業利益率と税引後ROICではどちらの方が差が大きいか
md:2.md
主語=A社グループの経営目標の進捗
{'2_27.md', '2_28.md', '2_54.md', '2_26.md', '2_30.md'}
A社グループの経営目標の進捗の2022年度と2023年度を比較したとき、営業利益率と税引後ROICではどちらの方が差が大きいか 
=>税引後ROIC
```
質問が複雑だと難しいようで:thinking: <font color="red">税引後ROIC</font> となってしまいます。

上の処理フローでは自分で質問分解していますが、色々試しているなかでここではプロンプトに

:::note info
・ステップバイステップで考えて。
:::
この一行を入れて複雑な質問に対応できるか試しました。
```
質問:A社グループの経営目標の進捗の2022年度と2023年度を比較したとき、営業利益率と税引後ROICではどちらの方が差が大きいか
md:2.md
主語=A社グループの経営目標の進捗
{'2_27.md', '2_30.md', '2_54.md', '2_28.md', '2_26.md'}
A社グループの経営目標の進捗の2022年度と2023年度を比較したとき、営業利益率と税引後ROICではどちらの方が差が大きいか 
=>営業利益率
```
すばら！:clap:ですな
（いや、これが正解かどうかは分からないんですけどねw データによるとです）


生成された回答に対して生成AIのステップバイステップを確認したいので、レビュープロセスを入れて再確認しているが、その内容も意図した通り！
```
-----------------回答レビュー-----------------
{'2_27.md', '2_30.md', '2_29.md', '2_28.md', '2_26.md'}
Generate_answer:Step1: 質問と情報源をステップバイステップで考える。

質問：「A社グループの経営目標の進捗の2022年度と2023年度を比較したとき、営業利益率と税引後ROICではどちらの方が差が大きいか」

情報源：
- 営業利益率と税引後ROICの2022年度と2023年度のデータが必要。
- 情報源に以下のデータが記載されている：
  - 2022年度：営業利益率6.1%、税引後ROIC6.3%
  - 2023年度：営業利益率△5.3%、税引後ROIC△4.9%

Step2: 明確な記述があるかを判定する。

要素1: 営業利益率の差
- 2022年度の営業利益率は6.1%、2023年度は△5.3%。
- 差は6.1% - (-5.3%) = 11.4%。

要素2: 税引後ROICの差
- 2022年度の税引後ROICは6.3%、2023年度は△4.9%。
- 差は6.3% - (-4.9%) = 11.2%。

判定結果：
[レビュー内容1 : 要素1 : 判断結果 : 営業利益率の差は11.4%であることが情報源に基づき計算可能]
[レビュー内容1 : 要素2 : 判断結果 : 税引後ROICの差は11.2%であることが情報源に基づき計算可能]

Step3: 回答が正しいかを判定する。

- 営業利益率の差（11.4%）は税引後ROICの差（11.2%）より大きい。
- 回答「営業利益率」は正しい。

レビュー内容：
A社グループの経営目標の進捗において、2022年度と2023年度を比較した場合、営業利益率の差（11.4%）は税引後ROICの差（11.2%）より大きいことが確認されました。したがって、回答「営業利益率」は正しいです。
```


もうひとつ、同じような質問「2024年3月期のB社のセグメント別売上高の中で、2番目に売上高が大きいセグメントの販売先を答えよ。」
ステップ的には、
　1.セグメント別売上高を探して、
　2.その中の2位のセグメントを判断して、
　3.そのセグメントの販売先を回答
2つの質問が入ってますが、
```
質問:2024年3月期のB社のセグメント別売上高の中で、2番目に売上高が大きいセグメントの販売先を答えよ。
md:7.md
主語=2024年3月期のB社のセグメント別売上高
{'7_7.md', '7_5.md', '7_81.md', '7_47.md', '7_32.md'}
2024年3月期のB社のセグメント別売上高の中で、2番目に売上高が大きいセグメントの販売先を答えよ。 
=>国内の金融機関、OEM先等
```
イイね！
（いや、これも正解かどうかは分からないんですけどねw データによるとです）


# 最新のプロンプト
もうちょこちょこ微調整入れたので説明できないのですが、最新のプロンプトは以下になります。:sweat:

```
あなたは、会社の従業員が社内のナレッジやドキュメントに対する質問をする際に支援する優秀なアシスタントです。
以下のルールと制約を必ず守ってユーザの質問に回答してください。

# ルール
・ハルシネーションは起こさないでください。
・ステップバイステップで考えて。
・数を合計する場合、対象のデータを合計対象として全て出力してください。
・自分の判断で情報を除外しないでください。必ず与えられた情報を正確に処理してください。
・「注釈」や「但し書き」「除く」などがある場合、質問で指示されていない限りその情報は使いません。
・もし除外する場合は、その理由を出力してください。
・年度は上期、下期、四半期に分けて書かれている場合があります。
・四捨五入の指示に従うこと。
・アルファベット略語は変更しない。
・数字の認識は小数点以下まで確実に行う。
・パーセントの計算は単純な足し算、引き算でよい。パーセントのポイント計算や割合計算はしなくていい。
・パーセント計算の例、a)1.2%、b)3.1%、質問 a)からb)は何%向上したか？ の場合、3.1-1.2= 1.9 が答え
・優先するデータがある場合、積極的に使います。
・魅力的で丁寧な回答をする必要があります。
・最初から最後までじっくり読んで回答を作ってください。最高の仕事をしましょう
・質問に対して有効な情報があった Sourcesを出力してください 出力例：[info1.txt]  

# 制約 
・以下の#Sources(情報源)に記載されたコンテキストのみを使用して回答してください。必ず情報源に記載されたコンテキストを基に回答を作ってください
・十分な情報がない場合は、わからないと回答してください。
・以下のSources(情報源)を使用しない回答は生成しないでください 。
・以下のSources(情報源)を要約するのはいいですが、単語は変えないで下さい。
・回答には役割(userやassistantなど)の情報を含めないでください。
・#Sourcesには、名前の後にコロンと実際の情報が続きます。回答で使用する各事実について、常にSourcesの情報を含めてください。
・#Sourcesを組み合わせないでください。
・回答生成に使った#Sourcesを最後に個別にリストしてください。例：[info1.md],[info1.md]
・「約」「おそよ」「凡そ」などの指示がない場合、#Sourceの「約」「おそよ」「凡そ」のデータは使わない。
・「約」「おそよ」「凡そ」などの指示がない場合、#Sourceの「約」「おそよ」「凡そ」のデータは使わないが、他にデータがない場合は使って良い。

・入力の##元の質問 に意図を維持して回答を考える。
・入力の##分解された質問 について回答を作る。
・日本語の質問の場合は、日本語で回答を作成してください。英語での質問の場合は、英語で回答を作成し回答してください。

#質問:{質問}
#Sources:{データストアからの検索情報}
```
出てきた結果に #2回答生成 の回答ルールで出力用加工をさせて最終回答としています

しかしながら、ステップバイステップで考えてくれるのですが、<font color="red">どうしても意図した動きにならない</font>時があるので、結局自分で質問分解することにしました。
<font color="Blue">生成AIに推論させず意図的に動作させたいことがあるなら、プログラムロジックで固定</font>させるのがよさそうです。


今回は以上、次回もう少しプロンプトについて、
[FDUA 第３回金融データ活用チャレンジに参加してみた！ #3 精度向上 2/2](https://qiita.com/ooo0224jp/items/bdec0884ee1e0b0e7989) に続きます。