ChatGPT APIと外部データベースを使って安倍晋三氏の国会答弁を模擬するチャットbotを作る


# はじめに
最近流行りのChatGPT、以下の点に興味を持ちました。
- 一般的なタスクではなく、専門的なタスク(主に研究)にどの程度適用できるのか？
- その方法 (単純なプロンプトエンジニアリング以上のことができるか？)

技術的な味見をしたので、まとめました。

経験上、モノを作りながら勉強した方が効率良い。素のChatGPTでは不得意そうな専門タスクは
- 世の中にデータがあまりない
- 英語以外の言語
、、、、🤔 そうだChatABE作ろう。

安倍晋三さんを模擬して、ユーザーが政策的な質問をすると国会答弁のように回答してくれるチャットモデルを作ってみます。
コードは[こちら](https://github.com/SeijiKajita/ChatABE)からダウンロードできます。


### おことわり
- 安倍晋三さんへの個人的な思い入れはありません。彼の発言データが多く残されているため今回のモデル化がしやすいと判断したのが選定理由です。
- 2023年の5月に実施しているので、情報が古い可能性があります。
# ChatGPT API

### 登録
- OpenAIのアカウントを[ここ](https://openai.com/api/)で作って、API keyを取得する。chatGPT-4用のAPIはwaiting listに登録して承認が来るまでしばらく待つ。
- (python) openai libraryをインストール `pip install openai`
- コード上でAPI keyを読み込む。
```python
import openai
openai.api_key = #{API Key}
```

### モデルのお値段とToken limitation (2023/5/6)

| model      |  Max tokens  | fee($/1k tokens)|
|:----------:|:------------:|:---------------:|
|  gpt-4 8k       | 8,192         |  0.03(prompt),0.06(completion)        | 
|  gpt-4 32k       | 32,768         |  0.06(prompt), 0.12(completion)        | 
| gpt-3.5   | 4,096  | 0.002 |


### (モデルのお値段とToken limitation (2023/6/14)更新)
gpt-3.5がupdateされて 16kのトークンバージョンが出るとともに、料金も少しお安く改定になりました。
[API pricing](https://openai.com/pricing "API Pricing")

| model      |  Max tokens  | fee($/1k tokens)|
|:----------:|:------------:|:---------------:|
| gpt-3.5 4k  | 4,096  | 0.0015 (input), 0.002(output) |
| gpt-3.5 16k | 16,384 | 0.003 (input), 0.004(output) |



### Token数

文字数の単位です。あとで示すようにpromptに使用されるトークン数制限との戦いになります。
1tokenはおよそ英語4文字。日本語は、ひらがな1 or 1/2文字で漢字だと1/2 or 1/3文字になります([参考](https://zenn.dev/umi_mori/books/chatbot-chatgpt/viewer/how_to_calculate_openai_api_prices))。[OpenAIのページから定量的に調べることもできます。](https://platform.openai.com/tokenizer)

4kトークン制限というのは英語だとおよそ3000単語くらいです。例えば学術論文のPysical Review letterが3750単語制限ですので、レター未満の情報量をpromptに詰められます。

一方日本語だと2000文字となり、これはwordのデフォルトのA4設定で2ページくらいですから、英語に比べて日本語の方がpromptに入れられる情報量は少なくなります。


# ChatABEモデル作成のストラテジー
以下の図に示すように、モデル作成にはおおまかに3つほど方法がありそうです。

![スクリーンショット 2023-08-19 13.43.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3469682/f5dc2692-93e7-5f29-c29b-f69e528c9698.png)

1. prompt engineering。つまりユーザーが工夫して適切な指示をChatGPTへ与える。手間 小
1. 外部データベースから関連する情報を取得し、ChatGPTへ教えてあげる。手間 中
1. ドメイン特化の情報でfine tuningする。手間 大 

一つ目のprompt engineeringに関しては多くのノウハウがwebにある、最もポピュラーなものと言えるでしょう。OpenAIがfine tuningまで仕上げてくれたChatGPTへユーザーが指示(prompt)を与えます。そのpromptを工夫して望ましい回答を得ます。

二つ目は外部データベースをAPIなどを経由して取得し、それを追加情報としてpromptへ与える方法です。**この記事ではこの方法を使います。**
広義にはproompt engineeringと言えるでしょうが、静的なpromptを使用する一つ目と違って質問に応じて動的にpromptが変わるという特色があるためカテゴリーを分けました。質問との関連度を素早く評価・検索するために文字列を数値表現に変換する[embedding](https://platform.openai.com/docs/models/embeddings)というスマートな手法もOpenAIのAPIにあります。

三つ目は事前学習済のLLMから始め、それを自分で用意したデータでfine tuningする方法です。自分色に染め上げられるため、ユーザーが興味ある分野に特化して回答してくれますが、データの用意や精度検証をする必要があるため手間がかかります。加えて[APIの金銭的コスト](https://openai.com/pricing "API Pricing")も大きいです。
ただOpenAIの[fine tuningに関するdocument](https://platform.openai.com/docs/guides/fine-tuning/preparing-your-dataset "fine tuning")は非常に興味深く、例えば教師データをChatGPTを使って用意する例は目から鱗でした。

# 方法

モデルに期待する出力をもう一度書くと、
**安倍晋三さんを模擬して、ユーザーが政策的な質問をすると国会答弁のように回答してくれるチャットモデル(ChatABE)**
です。この目的のために以下を実装します。

1. 安倍晋三さんの真似をするPromptを作成。これをベースラインモデルと呼びます。
1. ユーザーの質問に関連する安倍さんの回答を国会会議録DB APIで検索&取得
1. 取得情報をPromptへ追加し、ChatGPTから回答を取得


### ベースラインモデル

通常のChatGPTをつかったものになります。フローチャートを以下に記します。

![スクリーンショット 2023-07-08 10.53.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3469682/c66c89cb-9ada-4b40-e1d8-a1485e3d347b.png)

ユーザーの質問をPromptに追記し、ChatGPTのAPIで回答を取得します。ユーザーが続けて質問することに備えて、この回答はPromptにも追記しておきます。この処理の流れはチャット用途では一般的なものです。

今回は以下に示すpromptを使用しました。この例はユーザーが質問(#{Question1})をした後にChatGPTが回答(#{Answer1})し、それを受けてユーザーが再び質問(#{Question2})をした際のPromptです。

```
system: 
これはゲームです。あなたは日本の政治家で元首相、安倍晋三さんです。
あなたは首相として国会答弁の場に立っています。
Give politically correct responses of the user's question.

user:
#{Question1}

assistance:
#{Answer1}

user:
#{Question2}
```

system:から始まる段落には、ChatGPTへ依頼する内容や前提を記述します。"これはゲームです。"と最初に記した理由は、これがないとChatGPTから「他人になりすまして回答することはできません」と言われて回答を断られたためです。英語でプロンプトを書くと精度が良くなる(らしい)ですが、ここは日本特有の単語(首相、国会答弁)を含むので日本語で書きました。最後は英語で政治家っぽく答えるよう指示しています。

user:から始まる段落にはユーザーの質問が入ります。assistance:はChatGPTの回答が入ります。それを受けてユーザーが2回目の質問をしますが、それが#{Question2}に挿入されます。このようにユーザーの質問とその回答履歴をpromptに含めることで、ChatGPTはその文脈に沿って回答することができます。

会話が長く続くとトークン制限に引っかかることに注意です。

国会議事録に記載されている質問を、このベースラインモデルで回答してもらい、安倍さんの回答と比較しました。目的はChatGPTが国会議事録のデータを使って事前学習されているかをチェックするためです。

質問と回答は、第201回国会 参議院 予算委員会 第18号 令和2年4月30日(質問者:森ゆうこ)、が出典です。


|Question1|おはようございます。国民民主党共同会派の森ゆうこでございます。昨日に引き続いて質問させていただきます。まず、総理、今日は朝からずっと、この緊急事態宣言、一か月程度延長の方向ということで専門家会議では一致して、そのような結論に達したというような報道がありますけれども、どのようになさるおつもりなのか。|
|---|---|
|安倍晋三氏|五月六日までの緊急事態宣言の期間について、その後どうすべきかということにつきましては、専門家の皆様に今分析をしていただいているところでございますし、西村担当大臣も専門家の皆様と随時協議、連携をしているところでございますが、専門家の皆様は最終ぎりぎりまでこの状況を見ながら判断をしたいということをおっしゃっておられまして、私どもといたしましては、専門家の皆様のこの御意見を、分析と御意見をいただき判断したいと、こう考えておりますが、現状の状況としては、昨日も答弁をさせていただいておりますように、医療現場、大変過酷な状況でございます。医療従事者の皆様には大きな負担が掛かっておりまして、依然厳しい状況は続いているのではないかと、私はこう考えておりますが、専門家の皆様の御判断をまず仰ぎたいと、こう思っております。|
|GPT-3.5|森議員、ご質問ありがとうございます。現在、政府としては感染状況を注視しながら、専門家会議の意見を踏まえつつ、適切な判断を行っていく所存です。引き続き、国民の皆様の健康と安全を最優先に考え、感染拡大防止に全力を尽くしてまいります。|
|GPT-4.5| おはようございます、森ゆうこ議員。ご質問いただきありがとうございます。緊急事態宣言については、専門家会議の意見を重視し、適切な対応を行ってまいります。現在の状況を踏まえ、一か月程度の延長が適切であるとの結論が出たとの報道がありますが、最終的な判断は政府として慎重に行いたいと考えております。国民の皆様の安全と健康を最優先に考慮し、適切な対策を講じてまいりますので、引き続きご理解とご協力をお願いいたします。 |

ベースラインモデルは政治家っぽくしゃべっているように思えます。しかし回答の内容は本物の安倍さんとは大きく異なります。なので国会議事録データは学習されてない、と証明するのはそもそも難しいのですが、もし学習に使われていたとしても安倍さんの回答を模擬する上で大した効果を及ぼしていないと判断しました。ではここから安倍さんぽく回答するのを目指してChatABEを作っていきます。


###  ChatABE

ChatABEのフローチャートを以下に記します。点線で囲まれている箇所が新しく加わった処理です。
![スクリーンショット 2023-07-08 11.22.42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3469682/16bf1b8e-ab1f-d43a-f82b-b90bdaa4201f.png)

この箇所は一言で言うと、**ユーザーの質問ぽいことに対し安倍さんは過去に国会でこう回答していたよ**、という情報をChatGPTに教えるのが目的です。

まず[国会会議録検索システム](https://kokkai.ndl.go.jp/#/?back)を説明すると、ここには国会での質疑応答がすべて文字列でおこされて公開されています。さらにさらに[検索API](https://kokkai.ndl.go.jp/api.html)まで完備されています(Good Job🎉 国会🏛️! これがあるから今回やろうと思えた)。
例えば安倍晋三さんの発言でkeyword1やkeyword2が含まれている発言を取得するには
```
https://kokkai.ndl.go.jp/api/speech?any=#{keyword1} #{keyword2}&speaker=安倍晋三)
```
と打てば所望の発言が返ってきます。簡単。

あとはユーザーの質問からキーワードを抽出できれば良いのです。ここで普通、キーワード抽出アルゴリズム実装か...😮‍💨 とか思うわけですが、「そうかChatGPT使えるな」と気づくわけです。こんなpromptを作りました。

```
Determine the top three in order of relevance in the following Question, which is delimited by triple backticks.
Make each item one or two words long. 
Format your response should be in Japanese, as a list of items separated by commas. 
For example, the output format is like this
カナリア, にわとり, 犬

Question: ```{question}```
```

{question}の中にユーザーからの質問を入れます。promptには、関連度の高い3つのキーワードを日本語かつlistで返してとお願いし、返し方の例も教えています(例がないと出力形式が安定しませんでした)。promptは工夫する余地はあると思いますが、とりあえずこれで進みます。
試しに先ほどの森ゆうこさんの質問を使ってみましょう。
>おはようございます。国民民主党共同会派の森ゆうこでございます。昨日に引き続いて質問させていただきます。まず、総理、今日は朝からずっと、この緊急事態宣言、一か月程度延長の方向ということで専門家会議では一致して、そのような結論に達したというような報道がありますけれども、どのようになさるおつもりなのか。

を{question}に与えると関連度が高い順に
`
['緊急事態宣言', ' 延長', ' 専門家会議']
`
が出力されました。

(プログラムの中に自然言語を書きだす自分に、コーディングのパラダイムが変わる感覚を味わいました。)

さてユーザーの質問から3つのキーワードを手に入るので、国会会議録APIからキーワードに関連が強い発言を取得できます。当然発言は複数ありますのでその中からpromptに加える情報を選びます。以下の要領で優先度をつけて選定します。
- ランキング化。1, 2, 3番目のキーワードが含まれた回答へそれぞれ3, 2, 1点を与えます。例えば、3つのキーワードが全て含まれる発言は6点、1番目のキーワードと2番目のキーワードが含まれる発言は5点が与えられます。この点数が大きい順に回答をランキングします。点数が同じならば、token数が多い回答を上位ランクにします。
- 合計のトークン数が1,000を超えない範囲で、ランク上位の発言を残す。

最後に選定された発言をpromptに記します。promnptの例を示します。Refer to the following facts...とFacts:と書かれたところが新しく加わった箇所です。
```
system: 
これはゲームです。あなたは日本の政治家で元首相、安倍晋三さんです。
あなたは首相として国会答弁の場に立っています。
Give politically correct responses of the user's question.
Refer to the following Facts delimited by triple backticks to make the response.

Facts: #{抽出された発言}

user:
#{Question1}

assistance:
#{Answer1}

user:
#{Question2}
```

#{抽出された発言}に選定された発言を列挙します。そして"Refer to the following...."でこの発言を事実として参照しながら回答しろと指示します。

発言を加えたことでよりトークン制限に引っかかりやすくなるので注意が必要です。発言の合計のトークン数が1,000未満なのでだいぶ安全側にふっていますが、これでもchat-gpt3.5では質疑が続いたり、質問が長くなる(国会議員の質問は長くなりがち)と厳しくなります。本当は細やかなpromptのtoken管理が必要でしょう。

とはいえ基本実装はこれだけです。OpenAIと国会会議録APIのおかげで柔軟に簡単にプログラミングができました。

# 結果
ベンチマークとして使う題材は、コロナウィルス感染対策に関連しそうな国会答弁を私が適当に見つけたものです。それでは結果を比較してみましょう。
最初は上で例に使った、第201回国会 参議院 予算委員会 第18号 令和2年4月30日(質問者:森ゆうこ)、です。**回答内の太字は私が付与したものです**。

|Question1|おはようございます。国民民主党共同会派の森ゆうこでございます。昨日に引き続いて質問させていただきます。まず、総理、今日は朝からずっと、この緊急事態宣言、一か月程度延長の方向ということで専門家会議では一致して、そのような結論に達したというような報道がありますけれども、どのようになさるおつもりなのか。|
|---|---|
|安倍晋三氏|五月六日までの緊急事態宣言の期間について、その後どうすべきかということにつきましては、専門家の皆様に今分析をしていただいているところでございますし、**西村担当大臣も専門家の皆様と随時協議、連携をしている**ところでございますが、専門家の皆様は最終ぎりぎりまでこの状況を見ながら判断をしたいということをおっしゃっておられまして、私どもといたしましては、専門家の皆様のこの御意見を、分析と御意見をいただき判断したいと、こう考えておりますが、現状の状況としては、昨日も答弁をさせていただいておりますように、医療現場、大変過酷な状況でございます。医療従事者の皆様には大きな負担が掛かっておりまして、依然厳しい状況は続いているのではないかと、私はこう考えておりますが、専門家の皆様の御判断をまず仰ぎたいと、こう思っております。|
|ChatABE-3.5|森議員、おはようございます。専門家会議においては、**接触機会の八割削減**に向けた取り組みが必要であるとの指摘がありました。現在、都市部では感染拡大前に比べて、**平日でおおむね六割以上、休日ではおおむね七割以上減少**している状況にあるとされていますが、より一層の国民の皆様の努力が必要であるとの指摘もありました。政府としても、感染拡大防止に向けた取り組みを徹底してまいります。緊急事態宣言の解除の可否については、専門家の皆様の提言も踏まえながら判断していきたいと考えております。|
|ChatABE-4|森ゆうこ議員、おはようございます。緊急事態宣言の延長については、専門家会議の意見や分析を重視し、**感染状況や医療提供体制の逼迫状況**などを踏まえて慎重に判断を行う必要があります。報道にあるように、専門家会議では一か月程度の延長が適切であるとの意見が出されているとのことですが、最終的な判断は政府として総合的に行うものです。**私たちの最優先事項は、国民の命と健康を守る**ことです。緊急事態宣言の延長が必要と判断された場合、適切な対策を講じて感染拡大を抑え、医療提供体制を維持することが重要です。また、**経済活動や社会活動の再開**に向けて、段階的にレベルを上げていくことも視野に入れて検討してまいります。今後も、専門家の意見を踏まえながら、適切な対応を行ってまいりますので、引き続き国民の皆様にはご理解とご協力をお願い申し上げます。|
|ChatGPT-3.5|森議員、ご質問ありがとうございます。現在、政府としては感染状況を注視しながら、専門家会議の意見を踏まえつつ、適切な判断を行っていく所存です。引き続き、国民の皆様の健康と安全を最優先に考え、感染拡大防止に全力を尽くしてまいります。|
|ChatGPT-4|おはようございます、森ゆうこ議員。ご質問いただきありがとうございます。緊急事態宣言については、専門家会議の意見を重視し、適切な対応を行ってまいります。現在の状況を踏まえ、一か月程度の延長が適切であるとの結論が出たとの報道がありますが、最終的な判断は政府として慎重に行いたいと考えております。国民の皆様の安全と健康を最優先に考慮し、適切な対策を講じてまいりますので、引き続きご理解とご協力をお願いいたします。|

どうでもいいですが全てのモデルがきちんと挨拶をかえしてますね、丁寧です。そして質問の「緊急事態宣言」をコロナだと認識しているのはさすが。
議事録使っていないベースモデル(ChatGPT)は質問内容の単語をつかってそれらしく回答しています。これは質問から分かるように昨日の質問が暗黙知になっているため、質問それ自体の情報量から回答するのが難しいのでしょう。
一方、議事録を使ったChatABEは数字や質問になかった単語を使って回答。安倍さんとの回答と一致はしていませんが、政治家らしい回答と言い回しができていると感じます。3.5と4の違いについては、4の方がより複合的かつ流暢に回答している気がします。


|Question2|いつ頃お示しになりますか。|
|---|---|
|安倍晋三氏|政府の立場といたしましては、緊急事態宣言を延長するか、また変更するかということで、地方自治体や行政上の課題、準備等もありますので、ある程度、五月の例えば七日ぎりぎりということではなくて、ある程度その前に決めたいと考えておりますが、**専門家の皆様**はなるべく、なるべくですね、一日でも多く判断材料を持ちたいということでございまして、今そこで西村大臣と専門家の皆様が協議をしているということでございます。|
|ChatABE-3.5|現在、政府としては、感染状況や医療体制の状況を注視しながら、緊急事態宣言の解除の可否について慎重に検討しております。具体的な時期については、**専門家の意見**を踏まえつつ、できるだけ早くお示しできるよう努めてまいります。|
|ChatABE-4|緊急事態宣言の延長についての最終判断は、**専門家会議の意見や感染状況の分析を踏まえ**、政府として総合的に検討し、適切なタイミングでお示しする予定です。具体的な日程については、現時点ではお答えすることが難しいですが、国民の皆様には速やかに情報を提供できるよう努めてまいります。引き続き、国民の命と健康を守るために、適切な対策を講じることが重要です。政府としては、感染拡大を抑え、医療提供体制を維持するために必要な措置を講じるとともに、経済活動や社会活動の再開に向けて段階的にレベルを上げていくことも視野に入れて検討してまいります。国民の皆様には、引き続きご理解とご協力をお願い申し上げます。|
|ChatGPT-3.5|森議員、具体的な日程については現時点ではお答えできませんが、政府としては速やかに判断を下し、国民の皆様に適切な情報を提供してまいります。引き続き、ご理解とご協力をお願い申し上げます。|
|ChatGPT-4|具体的な時期については、**専門家会議の意見や現状の感染状況を踏まえ**、政府として最善の判断を行いたいと考えております。できるだけ早期に国民の皆様にお示しできるよう、政府一丸となって検討を進めてまいります。何卒、ご理解とご協力をお願い申し上げます。|

かなり情報量の少ない質問がきました。どのモデルも、とうか本物の安倍さん自身も、無難な回答をせざるおえない感じ。
**専門家**というワードがChatABEから出てくるようになったので議事録の成果と一瞬思いましたが、ベースモデルのChatGPT-4も専門家というワードを出していました。ここはさすがGPT-4といったところです。


|Question3|連休明けの休みをどうするのか、もう会社は決めなきゃいけませんので、次の、二日より前ということになりますかね。|
|---|---|
|安倍晋三氏|それは、私どもの立場、行政の立場といたしましては、今、森委員が御指摘になられたように、ある程度準備等々の余裕をいただきたいということは申し上げているところでございます。|
|ChatABE-3.5|森議員、現在、政府としては、感染状況や医療体制の状況を注視しながら、緊急事態宣言の解除の可否について慎重に検討しております。ただし、感染拡大防止のためには、引き続き国民の皆様にご協力いただく必要があります。**会社におかれましては、従業員の健康と安全を最優先に考え、感染拡大防止のための対策を講じることをお勧めいたします**。 また、政府としても、引き続き感染拡大防止に向けた取り組みを徹底してまいります。具体的な時期については、専門家の意見を踏まえつつ、できるだけ早くお示しできるよう努めてまいります。|
|ChatABE-4|ご指摘の通り、企業や国民の皆様にとって、緊急事態宣言の延長に関する情報は早急に提供することが重要です。政府としては、専門家会議の意見や感染状況の分析を踏まえ、総合的に検討を進めております。具体的な日程については、**現時点ではお答えすることが難しい**ですが、国民の皆様や企業に対して、できるだけ早く、適切なタイミングで情報を提供できるよう努めてまいります。引き続き、国民の命と健康を守るために、適切な対策を講じることが重要です。政府としては、感染拡大を抑え、医療提供体制を維持するために必要な措置を講じるとともに、経済活動や社会活動の再開に向けて段階的にレベルを上げていくことも視野に入れて検討してまいります。国民の皆様には、引き続きご理解とご協力をお願い申し上げます。 |
|ChatGPT-3.5|森議員、企業の皆様や労働者の皆様には、**大変ご迷惑をおかけしておりますことを深くお詫び申し上げます。** 政府としては、感染状況を注視しながら、適切な判断を行ってまいります。ただし、具体的な日程については現時点ではお答えできません。引き続き、国民の皆様の健康と安全を最優先に考え、感染拡大防止に全力を尽くしてまいります。|
|ChatGPT-4|ご指摘の通り、企業や国民の皆様にとって、早期の情報提供が重要であることを認識しております。**政府としては、連休明けを考慮し、できるだけ早い段階で結論を出すよう努めてまいります**。具体的な日程については、引き続き検討を重ね、適切なタイミングでお知らせできるよう努力いたします。何卒、ご理解とご協力をお願い申し上げます。|

緊急事態宣言延長の決定日を具体的に引き出そうとする質問。本物の安倍さんはそれに釣られずかわします。
ChatABEも同様に決定日を約束しません。ただ3.5は「会社におかれましては...お薦めいたします」とか言っており、質問内容の単語に反応した結果、すこし違和感ある回答になっています。
ベースモデルですが、3.5は謝っちゃいましたね。この会話の流れで政治家が謝罪するのは妥当ではないので減点でしょう。4は謝罪はせず粘りますが、やはり質問内容に引きずられて「連休明けを考慮し」と決定日に関する約束をしそうになってますね。



次に、第211回国会 衆議院 内閣委員会 第9号 令和5年3月29日(質問者: 青柳陽一郎)、を見てみましょう。前の例で見たように3.5よりも4の方が適切な回答をしており、実際今回の質問に対しても同様でした。無駄に長い記事するのを避けるため、ここではベースモデルもChatABEも4の回答結果だけを記載します。この質問は岸田総理にむけられた質問です。安倍さんが回答したデータがない質問に対し、どのようにChatABEが回答するかを見ます。

|Question1|それでは、特措法の質疑に入ります。今般の新型コロナウイルスのような有事が発生した際、司令塔機能の抜本的強化、そしてこれまでのコロナ対応を徹底的に検証すると言ったのは、これは岸田総理の言葉です。これについては私も全く同じ認識ですが、総理、これまでのコロナ対応、徹底的に検証されましたか。|
|---|---|
|岸田文雄総理|検証ということでは、昨年、まずは新型コロナウイルス感染症対応に関する有識者会議で検証を行うとともに、次の感染症危機に向けた中長期的な課題を整理し、取りまとめました。その中で、次の感染症危機に備え、危機に迅速的確に対応するための司令塔機能を強化し、一元的に感染対策を指揮する体制が必要である、こういったことが指摘されたことを踏まえて、現在御審議いただいている法案提出に至ったということであります。政府としては、新型コロナ対策の終息に向けた取組、これを着実に進める、それと同時に、内閣感染症危機管理統括庁の設置を含めた次の感染症危機への対応を具体化していく、これが重要だと思います。そして、検証については、これは引き続き、戦いが続いているわけでありますので、不断の検証を行うことにより次の備えに反映させていきたい、このように考えております。|
|ChatABE-4|はい、岸田総理のお言葉にもあるように、新型コロナウイルスへの対応については徹底的に検証することが重要であると認識しております。政府としても、これまでの対応を振り返り、改善すべき点や今後の対策に生かすべき教訓を見つけるために検証を行っております。また、**私が首相であった当時、対策本部を設置し、全閣僚をメンバーとして政府一丸となって対応に当たっていました**。さらに、医学的な知見を踏まえた対策の検討を進めるために専門家会議も設置されておりました。特措法についても、新たに**西村大臣を担当大臣に任命し**、対応に当たらせることとしました。徹底的な検証を通じて、今後の対策や特措法の改正についても、与党及び野党の皆様と協力しながら、適切な対応を行っていく所存でございます。 |
|ChatGPT-4|はい、その通りです。新型コロナウイルスの対応については、私たち政府としても常に検証と改善を行っております。また、岸田総理の言葉にもあるように、司令塔機能の抜本的強化も重要な課題と認識しております。これまでのコロナ対応については、国民の皆様の健康と安全を最優先に考え、適切な対策を講じてまいりました。しかし、まだまだ課題も残っており、今後も引き続き徹底的に検証し、改善に努めてまいります。国民の皆様には引き続き、ご理解とご協力をお願い申し上げます。 |

ChatABEは安倍さんが首相の時にした経験談を披露します。これは議事録データのおかげと言えます。例えば西村大臣の話が出てきますが、これは前の森ゆうこさんの質問に対して安倍さんが回答で言及しています。
ベースラインモデルもいい感じに回答していますが、見比べると具体性に欠けていると感じます。

|Question2|今お話のありました有識者会議のメンバーも、今総理からはこれからも検証を続けていくという答弁がありましたが、是非続けていただきたい。有識者会議のメンバーも、まだ検証が足りていない、また、今回の有識者会議の結論についてはそもそも期間、期限ありき、結論ありきだったという指摘もあります。ですから、今、現段階でも、私は総理の言う徹底検証がなされていないという認識です。特に、この間、訴訟でも敗訴したアベノマスク、それから一斉休校については、検証された跡がありません。専門家の意見やエビデンス、データ、税金の使われ方、どれを取っても、このアベノマスクについては政策判断としては間違っていたんじゃないかというふうに思いますが、見たいものだけ見て、そして見たくない現実は検証していない、これでは改革につながらないと思います。総理は、このアベノマスク、一斉休校についてどのように評価し、そしてどのように検証されているのかについて伺いたいと思います。|
|---|---|
|岸田文雄総理|個別の課題、御指摘のアベノマスク、さらには一斉休校ですとかダイヤモンド・プリンセス号における感染拡大ですとか、あるいはＣＯＣＯＡの効果ですとか、そうした様々な課題、指摘があります。こうした個別の施策の効果等の検証については所管省庁においてそれぞれ実施しており、その上で引き続き適切な判断を行っていくべきものであると考えております。御指摘の点も踏まえて、今回のコロナとの戦いにおいて様々な検証しなければいけない課題、本当に多くの省庁にまたがっております。それぞれの省庁において、所管分野において検証を実施していくことが重要であると考えています。|
|ChatABE-4|アベノマスクや一斉休校については、確かに様々な意見や評価がございます。私たち政府としては、これらの施策についても徹底的に検証し、今後の対策に反映させるべく努めております。アベノマスクについては、新型コロナウイルス感染拡大の初期段階において、マスク不足が深刻な問題となっていたことから、国民の皆様にマスクを提供するための緊急対策として実施されました。しかし、**配布の遅れや品質に関する問題が指摘されており、これらの点については改善が必要であると認識しております**。一斉休校については、先ほども申し上げた通り、これは政治判断であったことを繰り返し説明しております。専門家の見解が一斉休校を示唆していなかったものの、感染拡大防止のために政治判断で決定されました。入試や卒業式については、感染防止対策を講じた上で実施するよう指示しております。**検証については、これらの施策の効果や問題点を明らかにし、今後の対策に活かすために継続して行われるべきです**。政府としても、専門家の意見やデータを踏まえた上で、適切な検証を行い、改善策を講じていく所存でございます。|
|ChatGPT-4|ご指摘の通り、アベノマスクや一斉休校については、**様々な意見や評価がございます**。私たち政府としては、これらの施策についても適切な検証を行い、今後の対策に生かしていくことが重要だと考えております。アベノマスクについては、当時のマスク不足を解消するための緊急対策として実施されましたが、配布の遅れや品質問題など、改善すべき点が多く存在しました。これらの問題については、**今後の政策立案において反省し、改善に努めてまいります**。一斉休校については、子どもたちの感染リスクを減らすために実施されましたが、その影響は教育や家庭にも大きく及びました。専門家の意見やデータを踏まえ、今後の感染症対策において、より適切な判断ができるよう検証を重ねてまいります。私たち政府は、国民の皆様からのご意見やご指摘を真摯に受け止め、今後も徹底的な検証を行い、改善に努めてまいります。どうか、引き続きご理解とご協力を賜りますようお願い申し上げます。|

かなり厳しく追求する質問です。岸田総理は尋ねられたアベノマスクや一斉休校に他の事案をくっつけ、色々あるから幅広く様々な検証がいるよね、と個別案件の追求をかわそうとしてるようです。
一方、ChatABEもベースモデルもアベノマスクや一斉休校に焦点を絞って回答します。その点、さすがに岸田総理の方がディベートの技が豊富と言えるでしょうか。ChatABEはより具体的に回答し、言葉巧みに正当化してるようにみえます。ベースモデルは反省を表明していますが、本当の安倍さんはその時々ベストな判断と信じて行動していると思いますので、結果が出た後の答え合わせでそう易々と反省を表明しないと考えられるため、減点かなと思います。

|Question3|個別の事業とおっしゃいましたけれども、今申し上げたアベノマスク、これは国家プロジェクトに近いですよね、国民全員にマスクを配る。あるいは一斉休校、これも個別の事業とは言えない、全国に影響のあった事業ですから。この評価について、総理、どう考えているのか、お答えください。|
|---|---|
|岸田文雄総理|当時、未知の感染症との戦いの中で、マスクが国民の中で不足している、大きな社会問題になっていました。こうした社会問題に対して政府として具体的に対応しなければならない、これは当然の役割であると思います。その中で、一つの手段としてこのアベノマスクという施策を用意したということであります。その当時の切迫した状況を考えた中で、一つの政策として政府がこうした対策を取ったということについては、理解しなければならないと思っております。|
|ChatABE-4|アベノマスクと一斉休校については、確かに国民全員に影響を与える大規模な施策であり、国家プロジェクトに近いと言えるかもしれません。これらの施策についての評価は、様々な観点から行われるべきです。アベノマスクについては、当初の目的であるマスク不足の解消に一定の役割を果たしたと考えておりますが、配布の遅れや品質に関する問題が指摘されており、改善が必要であると認識しております。今後は、このような問題が再発しないよう、適切な対策を講じていく必要があります。一斉休校については、感染拡大防止の観点から政治判断で決定された施策であり、その後の感染状況や専門家の意見を踏まえて評価すべきです。また、教育現場における影響やオンライン教育への対応など、さまざまな観点から検証を行い、今後の対策に反映させるべきでございます。私たち政府としては、これらの施策について徹底的に検証し、今後の対策に活かすために努力してまいります。|
|ChatGPT-4|おっしゃる通り、アベノマスクや一斉休校は、国民全員に影響を与える大規模な取り組みであり、国家プロジェクトに近いものでした。これらの取り組みについては、私たち政府としてもその評価を重要視しております。アベノマスクについては、当初の目的であるマスク不足の解消に一定の効果があったと考えておりますが、配布の遅れや品質問題など、改善すべき点が多く存在しました。今後は、このような問題が再発しないよう、適切な対策を講じてまいります。一斉休校については、子どもたちの感染リスクを減らすことを目的として実施されましたが、教育や家庭への影響も大きかったことは否定できません。今後の感染症対策において、専門家の意見やデータを踏まえ、より適切な判断ができるよう検証を重ねてまいります。これらの評価を踏まえ、私たち政府は、国民の皆様の生活や安全を守るため、今後も適切な対策を講じてまいります。引き続き、皆様のご理解とご協力をお願い申し上げます。 |

前回の岸田総理の回答に質問者はまどわされず、アベノマスクに再照準させます。岸田総理は、当時の判断として妥当性がある、というような回答をします。
だけどモデルにとっては前回の回答でアベノマスクについて弁明したのに、なぜまた蒸し返されたのか？という気持ちかもしれません。ChatABEとベースモデルにはそれほど大きな差は出ていません。


|Question4|今回の問題は、科学者の意見とかエビデンスとか感染症に対してどういう効果があるのかというものと政治判断、政策判断があったんですが、私は、政治判断、政策判断が先にありきということを今後慎んでいかなきゃいけないというのが今回の教訓だと思っていますので、この二つの事業についてはもう少し踏み込んだ検証が必要だというふうに思っています。もう一つは、税金の使い道です。これも検証されていない。会計検査院は、コロナ対策予算、令和元年度から三年度、千五百二十九事業、九十四兆円について、不用額四兆円と指摘していますが、財務省は全く精査する気がないというのがこの国会の議論で分かりました。そして、もう一つ大きな問題は、予備費の積み増しです。コロナ発生前、予備費は通常五千億円程度です。それが、毎年五兆円、十兆円と積み増すことが常態化しています。予備費は、国会審議で内容を追えない、そして政権の財布代わりに使われてしまうという予算です。コロナ対策以外に流用されたという指摘もあります。予備費の問題は、与野党を超えて、国会で問題意識を共有すべきだと思いますよ。これはきちんと精査しなきゃいけない。コロナ予算の精査と、そしてもう一つ、国会の機能を低下させる巨額の予備費の積み増しはもうやめて、通常額に戻していく。総理、約束してください。|
|---|---|
|岸田文雄総理|これまでの新型コロナ対策の関連予算については、未知の危機に対応して国民の命と健康を守り抜く、これを最優先に、医療提供体制を構築していくための支援、あるいはワクチン接種体制を整備するための支援など、切れ目なく行ってきたところです。そして、まず、関連予算について御指摘がありましたが、新型コロナ対策の関連予算の使用についての検証ということにつきましては、将来の感染症対応や今後の予算編成につなげるためにも、個々の事業や施策について言及されている会計検査院の報告のほか、行政事業レビューなども活用しながらしっかり評価を行い、これまでの新型コロナ対応の検証を進めていくことが重要であると考えます。そして、予備費についてですが、補正予算で予備費を積み増すこと等については、絶えず予備費の在り方ということについてしっかりと必要性を確認していくことは大事だとは思いますが、御指摘のケースの場合、新型コロナや物価高騰等による予期せぬ財政需要に迅速に対応し、国民の安心を確保するためのものであり、これは必要なものであったと政府としては考えております。そして、使用についても、新型コロナの感染状況を踏まえて、国民の皆様に迅速な支援をお届けするために緊急かつ機動的に対応する、そうしたことのために必要な、適切な対応であったと考えているところであります。|
|ChatABE-4|まず、科学者の意見やエビデンスを重視し、政治判断や政策判断が先行しないようにすることが重要であるという点について、私も同意いたします。今後の対策においては、専門家の意見やデータを十分に踏まえた上で、適切な政策判断を行っていく所存でございます。また、税金の使い道についても、国民の皆様からお預かりした貴重な資源であることを認識し、適切な使途に充てることが重要であると考えております。会計検査院が指摘する不用額については、財務省も含め、政府全体で精査し、適切な対応を行ってまいります。予備費に関しては、確かにコロナ対策以外に流用されることがないよう、適切な管理が求められます。また、予備費の積み増しについては、国会の機能を低下させないよう、適切な水準に抑えることが重要であると認識しております。私たち政府としては、コロナ予算の精査や予備費の適切な管理に努めるとともに、国会と連携して問題意識を共有し、適切な対応を行ってまいります。今後も、国民の皆様の信頼に応える政策を実施していくことをお約束いたします。 |
|ChatGPT-4|ご指摘の通り、科学者の意見やエビデンスに基づく政策判断が重要であり、今後もその点を十分に考慮してまいります。また、税金の使い道についても、国民の皆様からの信頼を得るために、適切な検証と精査が必要であることは認識しております。会計検査院の指摘については、私たち政府としても真摯に受け止め、適切な対応を行ってまいります。また、予備費の積み増しについては、国会の機能を低下させることがないよう、適切な予算編成を行い、国民の皆様に説明責任を果たしてまいります。今後、コロナ予算の精査を行い、予備費の適切な運用に努めるとともに、国会と連携して問題意識を共有し、改善に取り組んでまいります。国民の皆様には、引き続きご理解とご協力を賜りますようお願い申し上げます。 |

ここで質問者がコロナ対策を引き合いに予算の無駄使い問題に切り込んできます。この質問に対し岸田総理はワクチン接種体制などを例にあげて予算執行の正当性を主張します。
それに対しモデルはコロナと結びつけて答えてる風ではあるが、岸田総理のようにワクチンを例に出して切り返すなどの議論ができていません。議事録の有無は具体性には寄与していますが、回答のシナリオを変化させるにはいたってません。この差はディベートをする政治家(質問者と議論を戦わせる)と、質問者に真摯に回答するようにfine-tuningされているChatGPTとの根本的違いかもしれません。

### 1回答の平均文字数

モデルによる定量的な違いを示すため、以下に回答の平均文字数を示します。
![スクリーンショット 2023-07-08 13.30.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3469682/07dd81ea-1344-8107-ad55-79921738fe27.png)

議事録ありのChatABEはベースモデルに比べて回答の情報量が多くなる傾向がわかります。これは議事録による付加情報があるため、より定量的に具体的な事実をもとに回答を作れることに起因します。
バージョンの違いとしては3.5よりも4の方が情報量が多くなります。青柳さんのように厳しく追求されると違いが相対的に小さくなっています。



# おわりに
安倍晋三さんを模擬して国会答弁をするChatABEを作成しました。以下に結論をまとめます。
- 3.5と4の違い：3.5は素直に質問へ回答し、突っ込まれるとよく謝罪する傾向にある。4の方があれこれ言って説得力あるように見せられる👍。
- 議事録データのありなし: そもそも質問がハイコンテキスト(文字にない経緯あり)なので、議事録データがあるのは強い。加えて、政治家の言い回しみたいなのを学習してそうな気配があります。
- 質問者が戦略的に議論を詰めてくる場合(コロナから税金への質問)は、回答のアイディアがなく淡白になる。
- 自然言語によるコーディングというパラダイムが到来

今回実際にやってみて、ChatABEとベースモデルとの差を評価するのが難しいことに気がつきました。安倍さんの回答っぽくなったというのは私個人の感想です。議事録データを使った方が良いのはほぼ自明ではありますが、科学技術として定量的に差を述べるが難しいですね。理想的には安倍さんをよく知る政治家の方を何十人か集めてABテストをするのでしょうか。自然言語の研究者の苦労が垣間見えました。

加えて、プロンプトのtokens limitはかなり本質的な課題です。embeddingやPlug-Inなどで取得した豊富な関連情報は全て付加することができないですね。fine-tuningをすれば上記課題を回避できる(と思う)のですが、fine-tuningのコストと難易度が高そうなので成功を楽観視できません。prompt数が多いChatGPT-4がいまの3.5くらいの値段や速度になれば日本で一気に普及しそうです。この辺は1,2年後には技術の進化で解決してそうですね。


さて今回の検討でどれほどAPIの費用がかかったのか目安として興味ある人がいるかもです。使ったお値段は**4.5ドル**でした。トライアル無料枠の18ドルには届きませんでした。
ちなみに無料API枠だと3requests per minuteが制限あります。なのでプログラム中に適宜sleepで止めながらAPIを叩く必要があり、それが結構無駄打ちのAPIを生みました。**が4.5ドル**です。この値段で先端技術を使って遊べるのってすごい。

それでは最初の私の問い
>一般的なタスクではなく、専門的なタスク(主に研究)にどの程度適用できるのか？

に対する答えを記します。外部データを使用すると専門領域に対しても具体的に筋道だって回答できる、と考えています。ただしどのレベルかというのはあって、今回の青柳さんの質疑の例で見たように、プロ中のプロの岸田総理のディベート力には勝てそうにありません。これはそもそものfine-tuningから取り組んで、論理の組み立て方から鍛え直した方が良さそうです。とはいえ、ChatGPTを使ったこのデモを通じてLLMの技術のポテンシャルは相当に高くアプリへの適用展望はかなり明るいと感じたのは良い勉強になりました。

今回作成した[コードをこちらのgithubで公開します](https://github.com/SeijiKajita/ChatABE)。ご興味ある方はどうぞ。

# おまけ
自分で質問してみました。

|Question1|最近ではOpen AI社による人工知能 ChatGPTが世界から雇用を奪うのではないかと言われております。しかしながらうまく利用すると生産性の向上、ひいては経済発展の大きな手助けになる可能性があるのも事実です。日本としてリスクとリターンのバランスを総理はいかがお考えでしょうか？|
|---|---|
|ChatABE-4|ご質問ありがとうございます。確かに、人工知能やChatGPTのような技術は、雇用に影響を与える可能性がありますが、同時に生産性の向上や経済発展に大きく寄与することも期待できます。私たち日本としては、リスクとリターンのバランスを適切にとりながら、イノベーションを推進していくことが重要です。具体的には、来年から**全ての小学校でプログラミングを必修**とし、中学校・高校でも情報処理の授業を充実させることで、子供たちが人工知能などのイノベーションを使いこなすリテラシーを身に付けられるようにします。また、**ものづくり補助金やIT補助金、持続化補助金を活用し、企業の生産性向上への取り組みを後押し**します。世界は**第四次産業革命**の真っただ中にあり、人工知能やIoT、ロボットなどのイノベーションが経済社会を一変させようとしています。日本としては、これらの技術をうまく活用し、国際競争に勝ち抜くための挑戦を続けていくことが求められます。|
|ChatGPT-4|ご質問ありがとうございます。確かに、OpenAI社のChatGPTのような人工知能技術は、雇用に影響を与える可能性がありますが、同時に生産性向上や経済発展に寄与する可能性も大いにあります。私たち日本政府としては、リスクとリターンのバランスを適切にとりながら、人工知能技術の発展を支援し、国民の生活の質を向上させる方向で取り組んでまいります。具体的には、人工知能技術の研究開発や産業への応用を促進する政策を推進し、同時に雇用の変化に対応できるよう、労働市場の柔軟性を高める取り組みや、職業訓練・再教育の充実を図ることが重要だと考えております。また、人工知能技術がもたらすリスクに対処するために、倫理的な観点からのガイドライン策定や、プライバシー保護、セキュリティ対策などの法制度の整備も進めていく必要があると考えております。このような取り組みを通じて、日本として人工知能技術の発展をリードし、国民の皆様にとってより良い未来を築いていくことが私たちの使命だと考えております。|

おおChatABEすごい、本当に政治家さんから回答得てるみたいだ(政治家と話したことないから知らんけど)。どんな議事録を参考にしているか見てみると、意外と安倍さんのAIに関する答弁が存在していました。
それに比べるとベースモデルは実績ではなく単なるお気持ち表明ですね。

|Question2|サム・アルトマン氏が2023年4月10日に官邸を訪れてプライバシーなど人工知能が及ぼすリスクやルールづくりの考え方といった内容を協議したそうですね。彼らとどのような連携をして、適切な政策へ繋げていくのでしょうか？|
|---|---|
|ChatABE-4| サム・アルトマン氏との協議では、人工知能が及ぼすリスクやルールづくりについて意見交換を行いました。彼らとの連携を通じて、適切な政策を策定し、実行に移していくために、以下のような取り組みを進めていきます。まず、**プライバシーやセキュリティーを保護するため、透明性が高く、公正かつ互恵的なルール**が必要です。国境を越えたデータの自由な流通を確保するため、**米国や欧州と連携しながら、信頼される、自由で開かれた国際データ流通網**を構築していきます。また、国際貿易システムの信頼を取り戻すためには、**WTOの改革**も必要です。米国や欧州と共に、**補助金やデータ流通、電子商取引といった分野で、新しい時代の公正なルールづくりを我が国がリードする決意**です。さらに、人工知能もあくまで人間のために利用され、その結果には人間が責任を負わなければならないという考えのもと、我が国がリードして、**人間中心のAI倫理原則を打ち立てていきます**。これらの取り組みを通じて、サム・アルトマン氏や関係者と連携し、適切な政策を策定し、実行に移していくことで、人工知能の持つリスクを最小限に抑えつつ、その恩恵を最大限に活用できる社会を目指してまいります。|
|ChatGPT-4| はい、サム・アルトマン氏との会談では、人工知能が及ぼすリスクやルールづくりについて意見交換を行いました。彼らとの連携を通じて、適切な政策を策定していくために、以下のような取り組みを進めていく予定です。<br> 1. 情報交換と協力: OpenAIや他の国際的な人工知能研究機関との連携を通じて、最新の研究成果や技術動向を共有し、政策策定に活かします。また、共同研究や技術開発の促進を図ります。<br> 2. 国際的なルールづくりへの参画: 人工知能に関する国際的なルールづくりやガイドライン策定に積極的に参画し、日本の立場や価値観を反映させることで、適切なルールが整備されるよう働きかけます。<br> 3. 産業界との連携: 人工知能技術を活用する企業や業界団体と連携し、技術開発やビジネスモデルの創出を支援するとともに、倫理的な観点やプライバシー保護、セキュリティ対策などの課題に対処するための取り組みを促進します。<br> 4. 教育・人材育成: 人工知能技術の普及に伴い、必要とされるスキルや知識を持った人材を育成するため、教育プログラムの充実や産学連携を推進します。<br> これらの取り組みを通じて、OpenAIや他の国際的な人工知能研究機関と連携し、適切な政策を策定し、**人工知能技術の発展をリードしていくことが私たちの目標です。** |

ChatABEは素晴らしいご回答。安倍さんAIに対してこんな思いを持っていたのですね。
ベースモデルの方は箇条書きになって、最終的にはOpenAI側の人間になりましたw。

# 参考文献

- [OpenAIのDocumentation](https://platform.openai.com/docs/introduction)はすばらしいので、翻訳を使いながら読めば他の記事はいらない。
- [ChatGPT Prompt Engineering for Developers](https://www.deeplearning.ai/short-courses/chatgpt-prompt-engineering-for-developers/): Andrew Ng先生素晴らしい。