LlamaIndexを使った議事録作成

# 1. はじめに
ChatGPTでやりたいことはいろいろありますが、なかなか時間が取れないのが最近の悩みです。
今回は業務でも使う場面が多そうな「議事録作成」について試しています。
短い会議であれば通常のChatGPT利用であまり問題はないのですが、1時間を超えるような会議では、文字起こしするとかなりのトークン数になります。
いくつかのサイト(以下)を見てみると、1時間の会議では最大 **20,000**文字程度になるということであり、1文字を1.5トークンとざっくり仮定すると最大 **30,000** トークン程度になる可能性があります。
参照) [1時間のテープ起こしにどれだけかかる？【文字数／作業時間／相場】｜文字起こしさん](https://mojiokoshi3.com/ja/post/how-many-characters-in-one-hour/)
参照) [1時間の音声をテープ起こしするとどれくらいの作業時間が掛かりますか。また、何文字になりますか。 | 【東京反訳】](https://8089.co.jp/faq/whole4)

ChatGPTのプロンプトには以下のようにトークン数に制限があり、いいモデルほど料金も上がるため、割安なモデルでテキストを分割して複数回プロンプトを発行して議事録を作成するのが良さそうです。
| GPT | Model | Input | Output |
|:-:|:-:|:-:|:-:|
| GPT-3.5 Turbo | 4K context | $0.0015/1K tokens | $0.002/1K tokens |
| GPT-3.5 Turbo | 16K context | $0.003/1K tokens | $0.004/1K tokens |
| GPT-4 | 8K context | $0.03/1K tokens | $0.06/1K tokens |
| GPT-4 | 32K context | $0.06/1K tokens | $0.12/1K tokens |

参照) [Pricing](https://openai.com/pricing)

[前回](https://qiita.com/iematam_intellilink/items/0c8eff2cac6e14d75ebf)に引き続きChatGPT＋LlamaIndexでやってみました。
同じテーマの議事録作成を、パラメータをいくつか変更して精度が良いものを探し出してみました。

# 2. 議事録作成に使用したテキスト
[前回](https://qiita.com/iematam_intellilink/items/0c8eff2cac6e14d75ebf)に引き続き、青空文庫から吉川英治の三国志をチョイスしています。(「02 桃園の巻」)
ココだけでもかなりのボリュームがあるため、さらに「義盟」という大見出しの章だけを抽出しています。
劉備、関羽、張飛が義兄弟の契りを結ぶシーンが描かれています。
<details><summary>前処理済の全文はこちらをクリックすると参照できます。</summary>

```
02_09_義盟
02_09_01_一
　桃園へ行ってみると、関羽と張飛のふたりは、近所の男を雇ってきて、園内の中央に、もう祭壇を作っていた。
　壇の四方には、笹竹を建て、清縄をめぐらして金紙銀箋の華をつらね、土製の白馬を贄にして天を祭り、烏牛を屠ったことにして、地神を祠った。
「やあ、おはよう」
　劉備が声をかけると、
「おお、お目ざめか」
　張飛、関羽は、振向いた。
「見事に祭壇ができましたなあ。寝る間はなかったでしょう」
「いや、張飛が、興奮して、寝てから話しかけるので、ちっとも眠る間はありませんでしたよ」
　と、関羽は笑った。
　張飛は劉備のそばへきて、
「祭壇だけは立派にできたが、酒はあるだろうか」
　心配して訊ねた。
「いや、母が何とかしてくれるそうです。今日は、一生一度の祝いだといっていますから」
「そうか、それで安心した。しかし劉兄、いいおっ母さんだな。ゆうべからそばで見ていても、羨しくてならない」
「そうです。自分で自分の母を褒めるのもへんですが、子に優しく世に強い母です」
「気品がある、どこか」
「失礼だが、劉兄には、まだ夫人はないようだな」
「ありません」
「はやくひとり娶らないと、母上がなんでもやっている様子だが、あのお年で、お気の毒ではないか」
「…………」
　劉備は、そんなことを訊かれたので、またふと、忘れていた鴻芙蓉の佳麗なすがたを思い出してしまった。
　で、つい答えを忘れて、何となく眼をあげると、眼の前へ、白桃の花びらが、霏々と情あるもののように散ってきた。
「劉備や。皆さんも、もうお支度はよろしいのですか」
　厨に見えなかった母が、いつの間にか、三名の後ろにきて告げた。
　三名が、いつでもと答えると、母はまた、いそいそと厨房のほうへ去った。
　近隣の人手を借りてきたのであろう。きのう張飛の姿を見て、きゃっと魂消て逃げた娘も、その娘の恋人の隣家の息子も、ほかの家族も、大勢して手伝いにきた。
　やがて、まず一人では持てないような酒瓶が祭壇の莚へ運ばれてきた。
　それから豚の仔を丸ごと油で煮たのや、山羊の吸物の鍋や、干菜を牛酪で煮つけた物だの、年数のかかった漬物だの――運ばれてくるごとに、三名は、その豪華な珍味の鉢や大皿に眼を奪われた。
　劉備さえ、心のうちで、
「これは一体、どうしたことだろう」と、母の算段を心配していた。
　そのうちにまた、村長の家から、花梨の立派な卓と椅子がかつがれてきた。
「大饗宴だな」
　張飛は、子どものように、歓喜した。
　準備ができると、手伝いの者は皆、母屋へ退がってしまった。
　三名は、
「では」
　と、眼を見合せて、祭壇の前の蓆へ坐った。そして天地の神へ、
「われらの大望を成就させ給え」
　と、祈念しかけると、関羽が、
「ご両所。少し待ってくれ」
　と、なにか改まっていった。

02_09_02_二
「ここの祭壇の前に坐ると同時に、自分はふと、こんな考えを呼び起されたが、両公の所存はどんなものだろうか」
　関羽は、そう云いだして、劉備と張飛へ、こう相談した。
　すべて物事は、体を基とする。体形を整えていないことに成功はあり得ない。
　偶然、自分たち三人は、その精神において、合致を見、きょうを出発として大事をなそうとするものであるが、三つの者が寄り合っただけでは、体をなしていない。
　今は、小なる三人ではあるが、理想は遠大である。三体一心の体を整えおくべきではあるまいか。
　事の中途で、仲間割れなど、よくある例である。そういう結果へ到達させてはならない。神のみ祷り、神のみ祀っても、人事を尽さずして、大望の成就はあり得べくもあるまい。
　関羽の説くところは、道理であったが、さてどういう体を備えるかとなると、張飛にも劉備にもさし当ってなんの考えもなかった。
　関羽は、語をつづけて、
「まだ兵はおろか、兵器も金も一頭の馬すら持たないが、三名でも、ここで義盟を結べば、即座に一つの軍である。軍には将がなければならず、武士には主君がなければならぬ。行動の中心に正義と報国を奉じ、個々の中心に、主君を持たないでは、それは徒党の乱に終り、烏合の衆と化してしまう。――張飛もこの関羽も、今日まで、草田に隠れて時を待っていたのは、実に、その中心たるお人が容易にないためだった。折ふし劉備玄徳という、しかも血統の正しいお方に会ったのが、急速に、今日の義盟の会となったのであるから、今日ただいま、ここで劉備玄徳どのを、自分らの主君と仰ぎたいと思うが、張飛、おまえの考えはどうだ」
　訊くと、張飛も、手を打って、
「いや、それは拙者も考えていたところだ。いかにも、兄のいう通り、きめるならば、今ここで、神に祷るまえに、神へ誓ったほうがよい」
「玄徳様、ふたりの熱望です。ご承知くださるまいか」
　左右から詰めよられて、劉備玄徳は、黙然と考えていたが、
「待って下さい」
　と、二人の意気ごみを抑え、なおややしばらく沈思してから、身を正していった。
「なるほど、自分は漢の宗室のゆかりの者で、そうした系図からいえば、主たる位置に坐るべきでしょうが、生来鈍愚、久しく田舎の裡にひそみ、まだなにも各〻の上に立って主君たるの修養も徳も積んでおりませぬ。どうか今しばらく待って下さい」
「待ってくれと仰っしゃるのは」
「実際に当って、徳を積み、身を修め、果たして主君となるの資才がありや否や、それを自身もあなたたちも見届けてから約束しても、遅くないと思われますから」
「いや。それはもう、われわれが見届けてあるところです」
「左はいえ、私はなお、憚られます。――ではこうしましょう。君臣の誓いは、われわれが一国一城を持った上として、ここでは、三人義兄弟の約束を結んでおくことにして下さい。君臣となって後も、なお三人は、末永く義兄弟であるという約束をむしろ私はしておきたいのですが」
「うむ」
　関羽は、長い髯を持って、自分の顔を引っぱるように大きくうなずいた。
「結構だ。張飛、おぬしは」
「異論はない」
　改めて三名は、祭壇へ向って牛血と酒をそそぎ、ぬかずいて、天地の神祇に黙祷をささげた。

02_09_03_三
　年齢からいえば、関羽がいちばん年上であり、次が劉備、その次が張飛という順になるのであるが、義約のうえの義兄弟だから年順をふむ必要はないとあって、「長兄には、どうか、あなたがなって下さい。それでないと、張飛の我ままにも、おさえが利きませんから」と、関羽がいった。
　張飛も、ともども、
「それは是非、そうありたい。いやだといっても、二人して、長兄長兄と崇めてしまうからいい」
　劉備は強いて拒まなかった。そこで三名は、鼎座して、将来の理想をのべ、刎頸の誓いをかため、やがて壇をさがって桃下の卓を囲んだ。
「では、永く」
「変るまいぞ」
「変らじ」
　と、兄弟の杯を交わし、そして、三人一体、協力して国家に報じ、下万民の塗炭の苦を救うをもって、大丈夫の生涯とせんと申し合った。
　張飛は、すこし酔うてきたとみえて、声を大にし、杯を高く挙げて、
「ああ、こんな吉日はない。実に愉快だ。再び天にいう。われらここにあるの三名。同年同月同日に生まるるを希わず、願わくば同年同月同日に死なん」
　と、呶鳴った。そして、
「飲もう。大いに、きょうは飲もう――ではありませんか」
　などと、劉備の杯へも、やたらに酒をついだ。そうかと思うと、自分の頭を、ひとりで叩きながら、「愉快だ。実に愉快だ」と、子供みたいにさけんだ。
　あまり彼の酒が、上機嫌に発しすぎる傾きが見えたので、関羽は、
「おいおい、張飛。今日のことを、そんなに歓喜してしまっては、先の歓びは、どうするのだ。今日は、われら三名の義盟ができただけで、大事の成功不成功は、これから後のことじゃないか。少し有頂天になるのが早すぎるぞ」と、たしなめた。
　だが、一たん上機嫌に昇ってしまうと、張飛の機嫌は、なかなか水をかけても醒めない。関羽の生真面目を、手を打って笑いながら、
「わはははは、今日かぎり、もう村夫子は廃業したはずじゃないか。お互いに軍人だ。これからは天空海闊に、豪放磊落に、武人らしく交際おうぜ。なあ長兄」
　と、劉備へも、すぐ馴々といって、肩を抱いたりした。
「そうだ。そうだ」と、劉備玄徳は、にこにこ笑って、張飛のなすがままになっていた。
　張飛は、牛の如く飲み、馬のごとく喰ってから、
「そうそう。ここの席に、劉母公がいないという法はない。われわれ三人、兄弟の杯をしたからには、俺にとっても、尊敬すべきおっ母さんだ。――ひとつおっ母さんをこれへ連れてきて、乾杯しなおそう」
　急に、そんなことを云いだすと、張飛はふらふら母屋のほうへ馳けて行った。そしてやがて、劉母公を、無理に、自分の背中へ負って、ひょろひょろ戻ってきた。
「さあ、おっ母さんを、連れてきたぞ。どうだ、俺は親孝行だろう――さあおっ母さん、大いに祝って下さい。われわれ孝行息子が三人も揃いましたからね――いやこれは、独りおっ母さんにとって祝すべき孝行息子であるのみではない。支那の――国家にとってもだ、われわれこう三名は得がたい忠良息子ではあるまいか――そうだ、おっ母さんの孝行息子万歳、国家の忠良息子万歳っ」
　そしてやがて、こう三人の中では、酒に対しても一番の誠実息子たるその張飛が、まっ先に酔いつぶれて、桃花の下に大いびきで寝てしまい、夜露の降りるころまで、眼を醒まさなかった。

02_09_04_四
　大丈夫の誓いは結ばれた。しかし徒手空拳とはまったくこの三人のことだった。しかも志は天下にある。
「さて、どうしたものか」
　翌日はもう酒を飲んでただ快哉をいっている日ではない。理想から実行へ、第一歩を踏みだす日である。
　朝飯を食べると、すぐその卓の上で、いかに実行へかかるかの問題がでた。
「どうかなるよ。男児が、しかも三人一体で、やろうとすれば」
　張飛は、理論家でない。また計画家でもない。遮二無二、実行力に燃える猪突邁進家なのである。
「どうかなるって、ただ貴公のように、力んでばかりいたってどうもならん。まず、一郡の士を持たんとするには、一旗の兵がいる。一旗の兵を持つには、すくなくとも相当の軍費と、兵器と、馬とが必要だな」
　が、関羽は、常識家であった。二人のことばを飽和すると、そこにちょうどよい情熱と常理との推進力が醸されてくる。
　劉備は、そのいずれへも、うなずきを与えて、
「そうです。こう三人の一念をもってすれば、必ず大事を成しうることは目に見えていますが、さし当って、兵隊です。――これをひとつ募りましょう」
「馬も、兵器も、金もなく、募りに応じてくれる者がありましょうか」
　関羽の憂いを、劉備はかろく微笑をもって打消し、
「いささか、自信があります。――というのは、実はこの楼桑村の内にも、平常からそれとなく、私が目にかけた、同憂の志を持っている青年たちが少々あります。――また近郷にわたって、檄を飛ばせば、おそらく今の時勢に、鬱念を感じている者もすくなくはありませんから、きっと、三十人や四十人の兵はすぐできるかと思います」
「なるほど」
「ですから、恐れいるが、関羽どのの筆で、ひとつ檄文を起草して下さい。それを配るのは、私の知っている村の青年にやらせますから」
「いや、手前は、生来悪文の質ですから、ひとつそれは、劉長兄に起草していただこう」
「いいや、あなたは多年塾を持って、子弟を教育していたから、そういう子弟の気持を打つことは、よくお心得のはずだ。どうか書いて下さい」
　すると張飛がそばからいった。
「こら関羽、怪しからんぞ」
「なにが怪しからん」
「長兄劉玄徳のことば、主命の如く反くまいぞ、昨日、約束したばかりじゃないか」
「やあ、これは一本、張飛にやられたな、よし早速書こう」
　飛檄はでき上がった。
　なかなか名文である。荘重なる慷慨の気と、憂国の文字は、読む者を打たずにおかなかった。
　それが近郷へ飛ばされると、やがてのこと、劉玄徳の破れ家の門前には、毎日、七名十名ずつとわれこそ天下の豪傑たらんとする熱血の壮士が集まってきた。
　張飛は、門前へ出て、
「お前達は、われわれの檄を見て、兵隊になろうと望んできたのか」
　と、採用係の試験官になって、いちいち姓名や生国や、また、その志を質問した。
「そうです、大人がたのお名前と、義挙の趣旨に賛同して、旗下に馳せ参じてきた者どもです」
　壮士らは異口同音にいった。
「そうか、どれを見ても、たのもしい面魂、早速、われわれの旗挙げに、加盟をゆるすが、しかしわれらの志は、黄巾賊の輩の如く、野盗掠奪を旨とするのとは違うぞ。天下の塗炭を救い、害賊を討ち、国土に即した公権を確立し、やがては永遠の平和と民福を計るにある。分っておるかそこのところは！」
　張飛は、一場の訓示を垂れて、それからまた、次のように誓わせた。

02_09_05_五
「われわれの旗下に加盟するからには、即ち、われわれの奉じる軍律に服さねばならん。今、それを読み聞かすゆえ、謹んで承れ」
　張飛は、志願してきた壮士たちへいって、うやうやしく、懐中から一通を取出して、声高く読んだ。

　　一　卒たる者は、将たる者に、絶大の服従と礼節を守る。
　　一　目前の利に惑わず、大志を遠大に備う。
　　一　一身を浅く思い、一世を深く思う。
　　一　掠奪断首。
　　一　虐民極刑。
　　一　軍紀を紊る行為一切死罪。

「わかったかっ」
　あまり厳粛なので、壮士たちも、しばらく黙っていたが、やがて、
「分りました」と、異口同音にいった。
「よし、しからば、今よりそれがしの部下として用いてやる。ただし、当分の間は給料もつかわさんぞ。また、食物その他も、お互いにある物を分けて喰い、いっさい不平を申すことならん」
　それでも、募りに応じてきた若者輩は、元気に兵隊となって、劉備、関羽らの命に服した。
　四、五日のうちに、約七、八十人も集まった。望外な成功だと、関羽はいった。
　けれど、すぐ困りだしたのは食糧であった。ゆえに、一刻もはやく、戦争をしなければならない。
　黄匪の害に泣いている地方はたくさんある。まずその地方へ行って、黄巾賊を追っぱらうことだ。その後には、正しい税と食物とが収穫される。それは掠奪でない。天禄だ。
　するとある日。
「張将軍、張将軍。馬がたくさん通りますぞ、馬が」
　と、一人の部下が、ここの本陣へ馳せてきて注進した。
　何者か知らないが、何十頭という馬を数珠つなぎにひいて、この先の峠を越えてくる者があるという報告なのだ。
　馬と聞くと、張飛は、「そいつは何とか欲しいものだなあ」と正直にうなった。
　実際いま、喉から手の出るほど欲しい物は馬と金と兵器だった。だが、義挙の軍律というものを立てて部下にも示してあるので、「掠奪して来い」とは、命じられなかった。
　張飛は、奥へ行って、
「関羽、こういう報告があるが、なんとか、手に入れる工夫はあるまいか。実に天の与えだと思うのだが」と、相談した。
　関羽は聞くと、
「よし、それでは、自分が行って、掛合ってみよう」と、部下数名をつれて、峠へ急いで行った。麓の近くで、その一行とぶつかった。物見の兵の注進に過りなく、成程、四、五十頭もの馬匹をひいて、一隊の者がこっちへ下ってくる。近づいて見ると皆、商人ていの男なので、これならなんとか、話合いがつくと、関羽は得意の雄弁をふるうつもりで待ち構えていた。
　ここへきた馬商人の一隊の頭は、中山の豪商でひとりは蘇双、ひとりは張世平という者だった。
　関羽は、それに着くと、自分ら三人が義軍を興すに至った、愛国の衷情をもって、切々訴えた。今にして、誰か、この覇業を建て、人天の正明をたださなければ、この世は永遠の闇黒であろうといった。支那大陸は、ついに、胡北の武民に征服され終るであろうと嘆いた。
　張世平と蘇双の両人は、なにか小声で相談していたが、やがて、
「よく分りました。この五十頭の馬が、そういうことでお役に立てば満足です。差上げますからどうぞ曳いて行って下さい」と、意外にも、いさぎよく云った。

02_09_06_六
　いずれ易々とは承知しまい。最悪な場合までを関羽は考えていたのである。それが案外な返辞に、
「ほ。……いや忝けない。早速の快諾に、申しては失礼だが、利に敏い商人たるお身らが、どうしてそう一言のもとに、多くの馬匹を無料でそれがしへ引渡すといわれたか」
　掛合いにきた目的は達しているのに、こう先方へ要らざる念を押すのも妙なはなしだと思ったが、あまり不審なので、関羽はこう訊ねてみた。
　すると、張世平はいった。
「はははは。あまりさっぱりお渡しするといったので、かえってお疑いとみえますな。いやごもっともです。けれど手前は、第一にまず大人が悪人でないことを認めました。第二に、ご計画の義兵を挙げることは、すこぶる時宜をえておると存じます。第三は、あなた方のお力をもって、自分らの恨みをはらしていただきたいと思ったからです」
「恨みとは」
「黄巾賊の大将張角一門の暴政に対する恨みでございます。手前も以前は中山で一といって二と下らない豪商といわれた者ですが、かの地方もご承知の通り黄匪の蹂躙にあって秩序は破壊され、財産は掠奪され、町に少女の影を見ず、家苑の小禽すら啼かなくなってしまいました。――手前の店なども一物もなく没収され、あげくの果てに、妻も娘も、暴兵にさらわれてしまったのです」
「むむ。なるほど」
「で、甥の蘇双と二人して、馬商人に身を落し、市から馬匹を購入して、北国へ売りに行こうとしたのですが、途中まで参ると、北辺の山岳にも、黄賊が道をふさいで、旅人の持物を奪い、虐殺をほしいままにしておるとのことに、むなしくまた、この群馬をひいて立ち帰ってきたわけです。南へ行くも賊国、北へおもむくも賊国、こうして馬とともに漂泊しているうちには、ついに賊に生命まで共に奪われてしまうのは知れきっています。恨みのある賊の手に武力となる馬匹を与えるよりも、貴下の如きお志を抱く人に、進上申したほうが、はるかに意味のあることなんです。よろこんで手前がお渡しする気持というのは、そんなわけでございます」
「やあ、そうか」
　関羽の疑問も氷解して、
「では、楼桑村まで、馬をひいて一緒に来てくれないか。われわれの盟主と仰ぐ劉玄徳と仰っしゃる人にひきあわせよう」
「おねがい致します。手前も根からの商人ですから、以上申上げたような理由でもって、無料で馬匹を進上しましても、やはりそこはまだ正直、利益のことを考えておりますからな」
「いや、玄徳様へお目にかかっても、ただ今のところ、代金はお下げになるわけにはゆかぬぞ」
「そんな目先のことではありません。遠い将来でよろしいので。……はい。もしあなたがたが大事を成しとげて、一国を取り、十州二十州を平らげ、あわよくば天下に号令なさろうという筋書きのとおりに行ったらば、私へも充分に、利をつけて、今日の馬代金を払っていただきたいのでございます。私は、あなたの計画を聞いて、これがあなたがたの夢ではなく、わたしども民衆が待っていたものであるという点から、きっと成功するものと信じております。ですから、今日この処分に困っている馬を使っていただくのは、商人として、手前にも遠大な利殖の方法を見つけたわけで、まったくこんなよろこばしいことはありません」
　張世平は、そういって、甥の蘇双と共に、関羽に案内されてついて行ったが、その途中でも、関羽へ対して、こう意見を述べた。
「事を計るうえは、人物はお揃いでございましょうし、馬もこれで整いました。これで一体、あなた方のご計画の内輪には、よく経済を切りまわして糧食兵費の内助の役目をする算数の達識が控えているのでございますか。算盤というものも、充分お考えのうえでこのお仕事にかかっておいででございますか？」

02_09_07_七
　張世平に、そう指摘されてみると、関羽は、自分らの仲間に、大きな欠陥のあるのを見いだした。
　経営ということであった。
　自分はもとより、張飛にも、劉玄徳にも、経済的な観念は至ってない。武人銭を愛さずといったような思想がはなはだ古くから頭の隅にある。経済といえばむしろ卑しみ、銭といえば横を向くをもって清廉の士とする風が高い。一個の人格にはそれも高風と仰ぎうるが、国家の大計となればそれでは不具を意味する。
　一軍を持てばすでに経営を思わねばならぬ。武力ばかりでふくらもうとする軍は暴軍に化しやすい。古来、理想はあっても、そのため、暴軍と堕し、乱賊と終った者、史上決してすくなくない。
「いや、いいことを聞かしてくれた。劉玄徳様にも、大いにそのへんのことをはなして貰いたいものだ」
　関羽は、正直、教えられた気がしたのである。一商人のことばといえども、これは将来の大切な問題だと考えついた。
　やがて、楼桑村に着く。
　関羽はすぐ張世平と蘇双のふたりを、劉玄徳の前につれて来た。もちろん、玄徳も張飛も、張の好意を聞いて非常によろこんだ。
　張は五十頭の馬匹を、無償で提供するばかりでなく、玄徳に会ってから玄徳の人物をさらに見込んで、それに加うるに、駿馬に積んでいた鉄一千斤と、百反の獣皮織物と、金銀五百両を挙げてみな、「どうか、軍用の費に」と、献上した。
　その際も、張はいった。
「最前も、みちみち、申しました通り、手前はどこまでも、利を道とする商人です。武人に武道あり、聖賢に文道あるごとく、商人にも利道があります。ご献納申しても、手前はこれをもって、義心とは誇りません。その代り、今日さし上げた馬匹金銀が、十年後、三十年後には、莫大な利を生むことを望みます。――ただその利は、自分一個で飽慾しようとは致しません。困苦の底にいる万民にお頒ちください。それが私の希望であり、また私の商魂と申すものでございます」
　玄徳や関羽は、彼の言を聞いて大いに感じ、どうかしてこの人物を自分らの仲間へ留めおきたいと考えたが、張は、
「いやどうも私は臆病者で、とても戦争なさるあなた方の中にいる勇気はございません。なにかまた、お役に立つ時には出てきますから」といって、倉皇、何処ともなく立ち去ってしまった。
　千斤の鉄、百反の織皮、五百両の金銀、思いがけない軍費を獲て、玄徳以下三人は、
「これぞ天のご援助」
　と、いやが上にも、心は奮い立った。
　早速、近郷の鍛冶工をよんできて、張飛は、一丈何尺という蛇矛を鍛ってくれと注文し、関羽は重さ何十斤という偃月刀を鍛えさせた。
　雑兵の鉄甲、盔、槍、刀などもあわせて誂え、それも日ならずしてできてきた。

　　日月の旗幟。
　　飛龍の幡。
　　鞍、鏃。

　軍装はまず整った。
　その頃ようやく人数も二百人ばかりになった。
　もとより天下に臨むには足りない急仕立ての一小軍でしかなかったが、張飛の教練と、関羽の軍律と、劉玄徳の徳望とは、一卒にまでよく行きわたって、あたかも一箇の体のように、二百の兵は挙手踏足、一音に動いた。
「では。――おっ母さん。行って参ります」
　劉玄徳は、ある日、武装して母にこう暇を告げた。
　兵馬は、粛々、彼の郷土から立って行った。劉玄徳の母は、それを桑の木の下からいつまでも見送っていた。泣くまいとしている眼が湯の泉のようになっていた。

```
</details>

トークン数は **13,645** 、文字数は **9,625** でした。

# 3. LlamaIndexを使った議事録作成の実装
いよいよここからが本題です。

## 3.1. 実行環境
ローカルPC(Windows11 & Miniconda & Jupyter Notebook)上で実行しています。
主要ライブラリのバージョンは以下の通りです。
| Name        | Version |
|:------------|:--------|
| python      | 3.11.4  |
| openai      | 0.27.8  |
| llama_index | 0.7.9   |

## 3.2. 実行したコード
### (1) ライブラリのインポート
```python
import openai
import os
import logging
import sys
from dotenv import load_dotenv
from llama_index import GPTListIndex, SimpleDirectoryReader, LLMPredictor, ServiceContext
from langchain.chat_models import ChatOpenAI
```
- os, dotenvはOpenAIのAPIキーを環境変数として.envに設定し、そこから読み込むために使用
- sys, loggingはLlamaIndexのデバッグログをJupyter Notebook上で確認するために使用

### (2) OpenAIのAPIキー読込
```python
load_dotenv()
openai.api_key = os.environ.get('OPENAI_API_KEY')
```

### (3) ログ出力設定
```python
logging.basicConfig(stream=sys.stdout, level=logging.DEBUG)
logging.getLogger().addHandler(logging.StreamHandler(stream=sys.stdout))
```

### (4) ServiceContextの設定
```python
llm_predictor = LLMPredictor(
    llm=ChatOpenAI(
        temperature=0,
        model_name='gpt-4',
        streaming=True,
        max_tokens=4096
    )
)
service_context = ServiceContext.from_defaults(
    llm_predictor=llm_predictor,
    chunk_size_limit=4096
)
```
-  **ServiceContext** はLlamaIndexの動作環境や設定を管理するためのクラス
- 今回は言語モデルやチャンクサイズなど、解説に必要な部分のみ設定
-  **temperature(温度)** は、一貫性があり予測可能な結果になりやすい **0** に設定
-  **model_name** は、 **gpt-3.5-turbo-16k** 、 **gpt-4** と変えて実施
-  **max_tokens(最大トークン数)** は、 **1024** 、 **2048** 、**4096** と変えて実施
-  **chunk_size_limit(チャンクサイズ上限)** は、 **1024** 、 **2048** 、**4096** と変えて実施

### (5) インデックス作成(メモリ上)
```python
documents = SimpleDirectoryReader('input_data').load_data()
index = GPTListIndex.from_documents(documents, service_context=service_context)
```
- input_dataフォルダ配下にあるテキストを全て読込(事前に議事録作成に使用するテキストを格納)
-  **index** は全文を順に要約するのに適した **GPTListIndex(リストインデックス)** を使用

### (6) クエリ実行(議事録作成)
```python
query_engine = index.as_query_engine(
    response_mode='tree_summarize'
)
response = query_engine.query(
    'あなたは議事録作成のスペシャリストです。\n' \
    'この文書を壮大な会議とみなして、以下のテンプレートで議事録を作成し、必ず日本語で回答してください。\n' \
    '□場所　：\n' \
    '□出席者：\n' \
    '□議題　：\n' \
    '□決定事項：\n' \
    '※いずれの項目も漏れなく記載してください。\n' \
    '※議題と決定事項は箇条書きにしてください。\n'
)
```
-  **response_mode** は、 **tree_summarize** 、 **simple_summarize** と変えて実施

本来は「日時」という項目もあった方がよいのですが、文書中に年代や日時に関する記載がなかったため省略しています。
今回はプロンプトをいろいろ工夫してみましたが、結果的にこの内容が最も良かったです。

### (7) レスポンス内容出力(議事録の出力)
```python
print(response)
```
各パラメータを変えた出力結果は後程紹介します。

# 4. 議事録作成結果の評価
## 4.1. 評価基準
### (1) 定量評価
事前に自分が作成した議事録(以下)の内容がどれだけ盛り込まれているか、という基準で評価をしました。
```
□場所　：桃園、劉備の家、楼桑村、楼桑村の近くの峠
□出席者：劉備、関羽、張飛、劉備の母、志願兵、張世平、蘇双
□議題　：
・義盟の結成
・義兄弟の誓い
・兵隊の募集
・軍律の徹底
・食料、馬、金、兵器の入手
・馬商人との交渉
・軍の運営
□決定事項：
・劉備を主君とした君臣の誓いを立てるのは一国一城を持った後とし、この場では三人が義兄弟の契りを結ぶこととする
・劉備を義兄弟の長兄とする
・三人一体で協力して国家に報じ、万民の塗炭の苦を救うことを生涯の目標とする
・関羽が檄文を起草し、劉備と同様の志を持つ楼桑村の青年に配らせることで、兵隊を募る
・志願兵は軍律に服すことを了承し、当分の間は給料や食事の配給はなくても不平は言ってはならないこととする
・五十頭の馬をひきいる一隊に対して、劉備の隊に馬を譲り受けてもらえるよう関羽が交渉する
・張世平、蘇双がひいてきたきた五十頭の馬、千斤の鉄、百反の織皮、金銀五百両を劉備の軍に無償で提供する
・張世平は仲間には加わらないが、必要がある時に支援する役割とする
・劉備が兵馬を率い、母に別れを告げて出発する
```

自分が作成した議事録の各項目の要素数をまとめると以下の通りです。
| 項目 | 要素数 |
|:--|:--:|
| 場所 | 4 |
| 出席者 | 7 |
| 議題 | 7 |
| 決定事項 | 9 |

定量評価としては以下のように評価します。
例）場所が3つ、出席者が4つ、議題が5つ、決定事項が5つ正解している場合
※重複があったりハルシネーションがあったりしても減点などはしません。
| 場所 | 出席者 | 議題 | 決定事項 | 総合評価 |
|:--:|:--:|:--:|:--:|:--:|
| 75点 (=3/4) | 57点 (=4/7) | 71点 (=5/7) | 56点 (=5/9) | 65点 (=(75+57+71+56)/4) |

### (2) 定性評価
定性評価としては以下の観点で評価します。
- フォーマット : プロンプトで指定した通りのフォーマットになっているか
- 粒度 : 細かすぎたり粗すぎたりしないか
- 網羅性 : 文章全体を網羅できているか、偏りがないか
- 表現力 : 簡潔にまとめられているか
- ハルネーション : 事実と異なる記載がないか
- その他所感 : 上記以外で気になる箇所がないか

## 4.2. 評価結果
### (1) max_tokens = chunk_size_limit で、3パターン実施
固定したパラメータは以下の通り
| model | response_mode |
|:--|:--|
| gpt-4 | tree_summarize |

#### ① max_tokens = chunk_size_limit = 1024 の実施結果
- 議事録の出力結果
```
□場所　：桃園、楼桑村、不明
□出席者：劉備、関羽、張飛、張世平、蘇双、劉玄徳の母
□議題　：
1. 義盟の結成
2. 君臣の誓い
3. 義兄弟の約束
4. 兵隊の募集
5. 関羽が檄文を起草すること
6. 張飛が新兵の採用試験を行うこと
7. 張世平と蘇双からの馬と資源の提供
8. 鍛冶工による武器の製造
9. 張飛の蛇矛の鍛造
10. 関羽の偃月刀の鍛造
11. 雑兵の鉄甲、盔、槍、刀などの誂え
12. 軍装の整備
13. 兵士の教練と軍律の実施
14. 劉玄徳の出征
□決定事項：
1. 劉備、関羽、張飛の三人で義盟を結成する。
2. 君臣の誓いは一国一城を持った上で行うことに決定。
3. 三人は末永く義兄弟であるという約束を結ぶ。
4. 兵隊の募集については、劉備が知っている村の青年に配布する檄文を関羽が起草することに決定。
5. 関羽が檄文を起草し、それを村の青年に配布する
6. 張飛が新兵の採用試験を行い、志願者を部下として採用する
7. 張世平と蘇双から提供された馬と資源を軍事費として使用する
8. 鍛冶工により、張飛の蛇矛と関羽の偃月刀、雑兵の鉄甲、盔、槍、刀などの武器が製造される
9. 張飛の蛇矛を鍛造する
10. 関羽の偃月刀を鍛造する
11. 雑兵の鉄甲、盔、槍、刀などを誂える
12. 軍装を整える
13. 張飛の教練と関羽の軍律を実施する
14. 劉玄徳が出征する
```

- 議事録の定量評価

| 場所 | 出席者 | 議題 | 決定事項 | 総合評価 |
|:--:|:--:|:--:|:--:|:--:|
| 50点 (=2/4) | 86点 (=6/7) | 43点 (=3/7) | 44点 (=4/9) | 56点 (=(50+86+43+44)/4) |

- 議事録の定性評価
  - フォーマット : ほぼ完璧　議題と決定事項は番号付きの箇条書きになっている
  - 粒度 : まずまず　議題と決定事項がやや細かすぎる
  - 網羅性 : まずまず　各章からある程度抽出できているが、最後の章の比重が高く重複も多い
  - 表現力 : 高い　うまく要約したり、本分にない表現で簡潔に表せている
  - ハルネーション : 一部あり　張飛が採用試験をする部分は、実際には軍律を徹底させているだけ
  - その他所感 : 議題と決定事項の捉え方が事実を羅列した印象 (会話部分以外の客観的な文章もそれなりにあり、そこから抽出している部分もある)

#### ② max_tokens = chunk_size_limit = 2048 の実施結果
- 議事録の出力結果
```
□場所　：桃園、楼桑村
□出席者：劉備、関羽、張飛、張世平、蘇双、劉玄徳
□議題　：
1. 義盟の結成
2. 君臣の誓い
3. 義兄弟の約束
4. 将来の理想と大望の成就
5. 義軍の結成とその目的
6. 兵隊の募集と軍律の確立
7. 食糧問題の解決策
8. 黄巾賊との対策
9. 馬匹の確保
10. 張世平からの馬匹、鉄、獣皮織物、金銀の提供
11. 経済的な観念の必要性
12. 軍の経営とその問題
13. 張世平の商魂とその希望
14. 張世平の参加の可能性
15. 軍費の確保と軍装の整備
16. 兵士の教練と軍律
□決定事項：
1. 劉備、関羽、張飛の三人で義盟を結成する。
2. 君臣の誓いは一国一城を持った上で行うことに決定。
3. 三人は義兄弟の約束を結び、末永く義兄弟であるという約束をする。
4. 三人一体で協力し、国家に報じ、下万民の塗炭の苦を救うことを大丈夫の生涯とすることを申し合う。
5. 劉備、関羽、張飛の三人で義軍を結成し、天下の塗炭を救い、害賊を討ち、国土に即した公権を確立し、永遠の平和と民福を計ることを目指す。
6. 募りに応じてきた若者たちを兵隊とし、軍律を遵守させる。
7. 戦争を早急に行い、黄巾賊を追い払い、正しい税と食物を収穫することで食糧問題を解決する。
8. 黄巾賊の大将張角一門の暴政に対抗するため、黄巾賊を討つことを決定。
9. 張世平と蘇双から馬匹を譲り受け、義軍の戦力とする。将来的に大事を成し遂げた際には、馬代金を払うことを約束する。
10. 張世平からの馬匹、鉄、獣皮織物、金銀の提供を受け入れ、軍用の費に充てる
11. 経済的な観念を持つことの重要性を認識し、それを将来の大切な問題とする
12. 張世平の商魂とその希望を尊重し、その利益を困苦の底にいる万民に分け与える
13. 張世平の参加は見送り、彼が役に立つ時に再度参加することを許可する
14. 鍛冶工を呼び、蛇矛と偃月刀を鍛えさせ、雑兵の鉄甲、盔、槍、刀なども誂える
15. 二百人の兵士を教練し、軍律を教え、一卒にまで行き渡らせる
16. 劉玄徳が母に暇を告げ、兵馬を立てて行くことを決定する
```

- 議事録の定量評価

| 場所 | 出席者 | 議題 | 決定事項 | 総合評価 |
|:--:|:--:|:--:|:--:|:--:|
| 50点 (=2/4) | 71点 (=5/7) | 100点 (=7/7) | 66点 (=6/9) | 72点 (=(50+71+100+76)/4) |

- 議事録の定性評価
  - フォーマット : ほぼ完璧　議題と決定事項は番号付きの箇条書きになっている
  - 粒度 : まずまず　議題と決定事項がやや細かすぎる
  - 網羅性 : 高い　各章からうまく程度抽出できていて、偏りも少ない
  - 表現力 : 高い　うまく要約したり、本分にない表現で簡潔に表せている
  - ハルネーション : 一部あり　将来的に大事を成し遂げた際には、馬代金を払うことを約束する、とあるが、約束されたかどうかは本文には記載なし
  - その他所感 : 議題と決定事項の捉え方が事実を羅列した印象 (会話部分以外の客観的な文章もそれなりにあり、そこから抽出している部分もある)

#### ③ max_tokens = chunk_size_limit = 4096 の実施結果
- 議事録の出力結果
```
□場所　：桃園、祭壇、桃下の卓、劉備の家、不明、楼桑村
□出席者：劉備、関羽、張飛、志願してきた壮士たち、張世平、蘇双、劉玄徳
□議題　：
1. 祭壇の完成と祝いの準備
2. 劉備の結婚についての懸念
3. 義盟の結成とその目的
4. 君臣関係の確立と主君の選定
5. 義兄弟の約束の結成
6. 三人の義兄弟の順位決定
7. 将来の理想と誓いの確認
8. 兵隊の募集方法
9. 張飛が志願してきた壮士たちに軍律を説明し、その承諾を得る
10. 馬と金と兵器の確保方法についての相談
11. 張世平と蘇双から馬を譲り受ける交渉
12. 張世平からの馬匹、鉄、獣皮織物、金銀の提供について
13. 張世平の利益追求の理念とその将来的な期待について
14. 経済的な観念の重要性とその欠如について
15. 張世平の参加の可能性について
16. 軍費の確保と軍装の整備について
17. 劉玄徳の出発について
□決定事項：
1. 祭壇の完成と祝いの準備が進行中であることを確認
2. 劉備の結婚については、現時点では未定
3. 劉備、関羽、張飛の三人で義盟を結成し、大望の成就を祈願
4. 主君として劉備を選定することを提案、しかし劉備は自身がまだ主君たる資質を持っていないとしてこれを保留
5. 三人で義兄弟の約束を結ぶことを決定、劉備を長兄とする
6. 関羽が最年長であるが、義約の上の義兄弟として年順は無視し、劉備が長兄となる
7. 三人は協力して国家に報じ、下万民の塗炭の苦を救うことを誓う
8. 劉備が兵隊を募るための檄文を関羽が起草することに決定
9. 志願してきた壮士たちは張飛の軍律を承諾し、部下となる
10. 馬と金と兵器の確保は掠奪ではなく、正当な手段で行うことが決定
11. 張世平と蘇双から五十頭の馬を譲り受けることが決定
12. 張世平からの馬匹、鉄、獣皮織物、金銀の提供を受け入れ、これを軍用の費に充てることを決定
13. 張世平の利益追求の理念を理解し、将来的に彼からの利益を期待することを決定
14. 経済的な観念の重要性を認識し、これを将来の大切な問題として考えることを決定
15. 張世平の参加は見送り、彼が役に立つ時に再度参加することを決定
16. 鍛冶工を呼び、蛇矛や偃月刀などの武器や鉄甲、盔などの防具を誂えることを決定
17. 劉玄徳が母に暇を告げ、兵馬を率いて出発することを決定
```

- 議事録の定量評価

| 場所 | 出席者 | 議題 | 決定事項 | 総合評価 |
|:--:|:--:|:--:|:--:|:--:|
| 75点 (=3/4) | 86点 (=6/7) | 100点 (=7/7) | 89点 (=8/9) | 88点 (=(75+86+100+89)/4) |

- 議事録の定性評価
  - フォーマット : ほぼ完璧　議題と決定事項は番号付きの箇条書きになっている
  - 粒度 : まずまず　議題と決定事項がやや細かすぎる
  - 網羅性 : 高い　各章からうまく程度抽出できていて、偏りも少ない
  - 表現力 : 非常に高い　うまく要約したり、本分にない表現で簡潔に表せている (②よりもうまい印象)
  - ハルネーション : なし
  - その他所感 : 議題と決定事項の捉え方が事実を羅列した印象 (会話部分以外の客観的な文章もそれなりにあり、そこから抽出している部分もある)

#### (1)のまとめ
-  **gpt-4** , **tree_summarize** , **max_tokens = chunk_size_limit** で、3パターン実施
- トークン数が大きいほど良い結果となった
- 人間が多くの情報を知っていたり全体感を知っていたりする方が物事をより的確に把握できるのと同じように、ChatGPTにおける議事録作成(要約やエンティティ抽出)のタスクも一度に扱える情報量に比例してうまくできるのではないかと推測

### (2) chunk_size_limit を変えて3パターン実施
固定したパラメータは以下の通り
| model | response_mode | max_tokens |
|:--|:--|:--|
| gpt-4 | tree_summarize | 4096 |

#### ① chunk_size_limit = 4096 の実施結果
(1) ①で実施済のため、記載は省略

#### ② chunk_size_limit = 2048 の実施結果
- 議事録の出力結果
```
□場所　：桃園、祭壇、桃下の卓、劉備の家、劉玄徳の破れ家の門前、峠、楼桑村
□出席者：劉備、関羽、張飛、志願してきた壮士たち、張世平、蘇双
□議題　：
1. 義盟の結成
2. 主君の選定
3. 義兄弟の約束
4. 三人の義兄弟の誓いとその順序
5. 将来の理想と誓いの確認
6. 兵隊の募集とその方法
7. 張飛が志願してきた壮士たちに対して軍律を説明し、その理解を確認する
8. 食糧の問題と戦争の必要性について関羽が述べる
9. 馬商人の一隊の頭である張世平と蘇双との交渉
10. 張世平からの馬匹、鉄、獣皮織物、金銀の提供について
11. 経済的な観念と経営についての意見交換
12. 張世平の商人としての立場と利益追求について
13. 軍装の整備と兵士の訓練について
□決定事項：
1. 三人で義盟を結ぶことを決定
2. 主君の選定は一国一城を持った上で行うことを決定
3. 三人は義兄弟の約束を結び、末永く義兄弟であることを誓うことを決定
4. 関羽が最年長、次に劉備、最後に張飛という順序で義兄弟となる
5. 三人一体となり、国家に報じ、下万民の塗炭の苦を救うことを誓う
6. 劉備が兵隊を募ることを決定。関羽が檄文を起草し、劉備がそれを配布する
7. 志願してきた壮士たちは張飛の部下として採用され、軍律に従うことを誓う
8. 食糧問題を解決するために、一刻も早く戦争を開始する
9. 張世平と蘇双は五十頭の馬を関羽に寄付することを決定する
10. 張世平からの馬匹、鉄、獣皮織物、金銀の提供を受け入れ、軍用の費に充てることを決定
11. 張世平の商人としての立場と利益追求を理解し、将来的な利益の返済を約束
12. 鍛冶工を呼び、蛇矛と偃月刀を鍛えさせることを決定
13. 雑兵の鉄甲、盔、槍、刀なども誂えることを決定
14. 劉玄徳が母に暇を告げ、兵馬を立てて行くことを決定
```

- 議事録の定量評価

| 場所 | 出席者 | 議題 | 決定事項 | 総合評価 |
|:--:|:--:|:--:|:--:|:--:|
| 100点 (=4/4) | 86点 (=6/7) | 86点 (=6/7) | 66点 (=6/9) | 85点 (=(100+86+86+66)/4) |

- 議事録の定性評価
  - フォーマット : ほぼ完璧　議題と決定事項は番号付きの箇条書きになっている
  - 粒度 : まずまず　議題と決定事項がやや細かすぎる
  - 網羅性 : 高い　各章からうまく程度抽出できていて、偏りも少ない
  - 表現力 : 高い　うまく要約したり、本分にない表現で簡潔に表せている
  - ハルネーション : 一部あり　食糧の問題と戦争の必要性について関羽が述べる、とあるが関羽ではなく著者が第三者的に述べている　また、義兄弟の順序が年齢順となっているが、実際には最年長ではない劉備が長兄となっている
  - その他所感 : 議題と決定事項の捉え方が事実を羅列した印象 (会話部分以外の客観的な文章もそれなりにあり、そこから抽出している部分もある)

#### ③ chunk_size_limit = 1024 の実施結果
- 議事録の出力結果
```
□場所　：桃園、祭壇、桃下の卓、劉備の家、劉玄徳の破れ家の門前、峠、楼桑村
□出席者：劉備、関羽、張飛、志願してきた壮士たち、馬商人の張世平と蘇双
□議題　：
1. 祭壇の完成と祝いの準備
2. 三人の結束と未来の計画について
3. 君臣の関係と義兄弟の約束について
4. 三人の義兄弟の誓いとその順序
5. 三人一体で国家に報じ、下万民の塗炭の苦を救うこと
6. 同年同月同日に死ぬことの願い
7. 劉母公を祝いの席に招くこと
8. 兵隊の募集とその方法
9. 張飛による志願者への軍律の説明と誓約
10. 食糧問題と戦争の必要性についての議論
11. 馬商人からの馬の提供についての話し合い
12. 張世平からの馬匹、鉄、獣皮織物、金銀の提供
13. 経済的な観念の必要性
14. 張世平の商魂とその希望
15. 張世平の参加の可能性
16. 軍費の確保と軍装の整備
17. 劉玄徳の出陣
□決定事項：
1. 劉備、関羽、張飛の三人は義兄弟となることを決定。
2. 君臣の誓いは一国一城を持った上で行うことを決定。
3. 劉備が長兄となることを決定。
4. 関羽が最年長、次が劉備、その次が張飛という順序で義兄弟となる
5. 三人一体で国家に報じ、下万民の塗炭の苦を救うことを誓う
6. 同年同月同日に死ぬことを願う
7. 劉母公を祝いの席に招く
8. 関羽が檄文を起草し、劉備が知っている村の青年に配布することで兵隊を募る
9. 志願者たちは張飛の軍律に従うことを誓った
10. 食糧問題を解決するために、一刻も早く戦争を開始することが決定された
11. 馬商人の張世平と蘇双は、義軍のために馬を提供することを決定した
12. 張世平からの馬匹、鉄、獣皮織物、金銀を受け入れ、軍用の費に充てる
13. 経済的な観念を持つことの重要性を認識し、今後の計画に反映する
14. 張世平の商魂とその希望を尊重し、その利益を困苦の底にいる万民に分け与えることを約束する
15. 張世平が戦争に参加しないことを受け入れ、彼が役に立つ時には再度参加することを期待する
16. 鍛冶工を呼び、蛇矛や偃月刀などの武器を作成し、軍装を整える
17. 劉玄徳が出陣することを決定する
```

- 議事録の定量評価

| 場所 | 出席者 | 議題 | 決定事項 | 総合評価 |
|:--:|:--:|:--:|:--:|:--:|
| 100点 (=4/4) | 86点 (=6/7) | 71点 (=5/7) | 89点 (=8/9) | 87点 (=(100+86+71+89)/4) |

- 議事録の定性評価
  - フォーマット : ほぼ完璧　議題と決定事項は番号付きの箇条書きになっている
  - 粒度 : まずまず　議題と決定事項がやや細かすぎる
  - 網羅性 : 高い　各章からうまく程度抽出できていて、偏りも少ない
  - 表現力 : 高い　うまく要約したり、本分にない表現で簡潔に表せている
  - ハルネーション : 一部あり　義兄弟の順序が年齢順となっているが、実際には最年長ではない劉備が長兄となっている
  - その他所感 : 議題と決定事項の捉え方が事実を羅列した印象 (会話部分以外の客観的な文章もそれなりにあり、そこから抽出している部分もある)

#### (2)のまとめ
-  **gpt-4** , **tree_summarize** , **max_tokens = 4096** で、3パターン実施
- チャンクサイズの大きさの違いによる明確な精度の違いは見られなかった
- ゆらぎの可能性もあるが、チャンクサイズが細かい方がハルシネーションが見られた
- **response_mode = 'tree_summarize'** の性質上、細かく区切ってもその上位で集約して要約をするため、チャンクサイズによってそれほど違いが発生しなかったものと推測

### (3) response_mode を変えて2パターン実施
固定したパラメータは以下の通り
| model | max_tokens | chunk_size_limit |
|:--|:--|:--|
| gpt-4 | 4096 | 4096 |

#### ① response_mode = 'tree_summarize' の実施結果
(1) ①で実施済のため、記載は省略

#### ② response_mode = 'simple_summarize' の実施結果
- 議事録の出力結果
```
□場所　：桃園
□出席者：劉備、関羽、張飛
□議題　：
1. 祭壇の作成と祭りの進行
2. 酒の供給について
3. 劉備の結婚について
4. 黄匪の害に泣いている地方への行動
5. 馬と金と兵器の獲得方法
6. 張世平からの馬匹、金銀、鉄、織皮の提供
7. 鍛冶工による武器の作成
□決定事項：
1. 祭壇は張飛と関羽が作成し、祭りは進行する。
2. 酒の供給は劉備の母が担当する。
3. 劉備は結婚を考えるべきである。
4. 黄匪の害に泣いている地方へ行き、黄巾賊を追い払う。
5. 馬と金と兵器は掠奪せず、正当な手段で獲得する。
6. 張世平からの馬匹、金銀、鉄、織皮の提供を受け入れ、軍用の費にする。
7. 鍛冶工により、張飛の蛇矛と関羽の偃月刀を作成する。
```

- 議事録の定量評価

| 場所 | 出席者 | 議題 | 決定事項 | 総合評価 |
|:--:|:--:|:--:|:--:|:--:|
| 25点 (=1/4) | 43点 (=3/7) | 14点 (=1/7) | 11点 (=1/9) | 23点 (=(25+43+14+11)/4) |

- 議事録の定性評価
  - フォーマット : ほぼ完璧　議題と決定事項は番号付きの箇条書きになっている
  - 粒度 : ほどよい　自分が作成した議事録の粒度に近い
  - 網羅性 : 低い　最初の章と最後の章に偏っている
  - 表現力 : 普通　簡潔にまとまっているが、tree_summarizeと比較するとややレベルが低い
  - ハルネーション : 一部あり　劉備は結婚を考えるべきである、とあるが、張飛個人の感想であり決定事項ではない
  - その他所感 : 重要な部分や全体的な文脈を捉えられておらず、議事録としては使えない印象

#### (3)のまとめ
-  **gpt-4** , **max_tokens = chunk_size_limit = 4096** で、2パターン実施
- これまで **tree_summarize** モードで実施してきたが、 **simple_summarize** モードでは **gpt-4** とは思えない程の悪い出来となった
-  **simple_summarize** モードは個別のチャンク毎に簡潔な要約をするというモードであるため、今回のように詳細な要約や全体を俯瞰したような要約が必要とされる議事録作成には不向きであった

### (4) model を変えて2パターン実施
固定したパラメータは以下の通り
| response_mode | max_tokens | chunk_size_limit |
|:--|:--|:--|
| tree_summarize | 4096 | 4096 |

#### ① model = 'gpt-4' の実施結果
(1) ①で実施済のため、記載は省略

#### ② model = 'gpt-3.5-turbo-16k' の実施結果
- 議事録の出力結果
```
□場所　：楼桑村
□出席者：劉備、関羽、張飛、張世平、蘇双、その他の壮士たち
□議題　：義盟の結成と軍の編成について
□決定事項：
- 義盟の結成を決定する。
- 劉備を盟主とし、関羽と張飛を副将とする。
- 軍の編成について、楼桑村の壮士たちを中心に兵士を募り、馬や兵器の調達を行う。
- 軍律を定め、絶大な服従と礼節を求める。
- 黄巾賊の討伐を最初の任務とし、その後は国家の安定と民福のために活動する。
- 張世平と蘇双から提供された馬を使用し、楼桑村まで連れて行くことを決定する。
- 経済的な観念の不足について、劉備に相談し、経営に関する知識を得ることを決定する。
```

- 議事録の定量評価

| 場所 | 出席者 | 議題 | 決定事項 | 総合評価 |
|:--:|:--:|:--:|:--:|:--:|
| 25点 (=1/4) | 86点 (=6/7) | 29点 (=2/7) | 22点 (=2/9) | 41点 (=(25+86+29+22)/4) |

- 議事録の定性評価
  - フォーマット : まずまず　議題が箇条書きになっていない
  - 粒度 : まずまず　自分が作成した議事録の粒度に近い
  - 網羅性 : 高い　各章からうまく程度抽出できていて、偏りも少ない
  - 表現力 : 高い　うまく要約したり、本分にない表現で簡潔に表せている　
  - ハルネーション : 一部あり　おおむね意味としては合っているものの事実ではない表現が多い (関羽と張飛を副将とする、絶大な服従と礼節を求める、黄巾賊の討伐を最初の任務とする、等)
  - その他所感 : 重要な部分や全体的な文脈の捉え方がやや弱い印象

#### (4)のまとめ
-  **tree_summarize** , **max_tokens = chunk_size_limit = 4096** で、2パターン実施
- これまで **gpt-4** で実施してきたが、 **gpt-3.5** ではかなり劣る結果となった (ただし、 **gpt-4** の **simple_summarize** モードよりはマシ)
- [前回](https://qiita.com/iematam_intellilink/items/0c8eff2cac6e14d75ebf) の要約では、 **gpt-3.5** でも良かったと感じていたが、今回議事録作成で両方のモデルで比較するとその差は歴然としていた

### (5) 評価結果まとめ
これまでの定量評価をまとめました。

| model | response_mode | max_tokens | chunk_size_limit | 場所 | 出席者 | 議題 | 決定事項 | 総合評価 |
|:--:|:--:|:--:|:--:|:--:|:--:|:--:|:--:|:--:|
| gpt-4 | tree_summarize | 1024 | 1024 | 50点 | 86点 | 43点 | 44点 | 56点 |
| gpt-4 | tree_summarize | 2048 | 2048 | 50点 | 71点 | 100点 | 66点 | 72点 |
| gpt-4 | tree_summarize | 4096 | 4096 | 75点 | 86点 | 100点 | 89点 | 88点 |
| gpt-4 | tree_summarize | 4096 | 2048 | 100点 | 86点 | 86点 | 66点 | 85点 |
| gpt-4 | tree_summarize | 4096 | 1024 | 100点 | 86点 | 71点 | 89点 | 87点 |
| gpt-4 | simple_summarize | 4096 | 4096 | 25点 | 43点 | 14点 | 11点 | 23点 |
| gpt-3.5 | tree_summarize | 4096 | 4096 | 25点 | 86点 | 29点 | 22点 | 41点 |

結論としては、価格は一桁異なるものの **gpt-3.5** よりも **gpt-4** を用いるのが断然オススメです。
あとは **tree_summaraize** モードにして、 **max_tokens** を **大きめ** にするのがポイントです。

# 5. おわりに
今回はChatGPT＋LlamaIndexを使って長文テキストからの議事録作成を試してみました。
当初はパラメータの違いでそれほど大きな差は出ないのではないかと考えていましたが、かなり異なる結果となることがわかり、実用化の際にもパラメータのチューニングが重要であるという知見が得られました。
また、プロンプトの指示内容については試行錯誤した経緯は割愛しましたが、求める回答が得られるまでに多少苦労したため、こちらも同様にチューニングは重要だと感じました。
次はLangChainを使って実務に活かせそうなことを試してみたいと考えています。