【シン・デジタルMATSUMOTO開発ノート】アップデートについて
この週末くらいから「シン・デジタルMATSUMOTO」に切り替えていく予定です。
この記事ではアップデートの目的や内容について、現在の開発状況も交えて解説しようと思います。
そのため、この記事はリアル松本がメインで書いています。少し技術よりな話もあり稚拙な解説も含まれているかもしれませんが、ご容赦いただければ幸いです・・・
デジタルMATSUMOTOを使い始めて約4ヶ月
デジタルMATSUMOTOを本格的に使い始めて4ヶ月近くが経ち、noteの投稿も100日目になってきているのですが、以下のようにリアル松本の仕事においてもメリットを感じています。
意外とクライアント業務で活用できている(特にAIガバナンス関連の相談業務で、従来よりも提供価値の高い情報量が出せるようになっている)。
自分が以前何となく印象に残っていた事例をリアルタイムに検索しやすくなった(RAGのデータベースに会話で検索できているイメージ)。
リアル松本自身の情報収集・整理も効率化でき、従来よりも日常で多くの情報に目を通せるようになってきた。
一見離れたトピックだけど、実は論点が関連してそうだという気づきがちょくちょく得られている。
現行バージョンのデジタルMATSUMOTO
現行バージョンのデジタルMATSUMOTOの仕組みは以下の通りです。
早稲田大学SmartSEの解説動画等もご覧いただけるとよりイメージが掴みやすいかもしれませんが、次の説明のような流れになっています。
⓪ リアル松本が持つ自身のテキスト情報(論文、記事、ウェビナーでの発言等)を、あらかじめLLaMa IndexのRAGデータベースに設定しておきます。
① リアル松本がnotionにクリップしていたニュース(notion上で機械要約したテキスト)に対して、デジタルMATSUMOTO(RAG+LLM(GPT-4 Turbo))が考察を生成します。
② デジタルMATSUMOTOが生成した考察に対して、リアル松本がA/B/C/Dの4段階で評価し、必要に応じて加筆・修正します。
③「確定した考察」をデジタルMATSUMOTOの新たな知識としてRAGデータベースに追加します。
※ 任意のタイミングで「確定した考察」に対して「エシカルチェック」「AI川柳」「イメージ画像」を生成したり、noteに配信したり、クライアント業務で活用したりしています。
ちなみに、考察生成を指示するプロンプトは以下になります。
{記事}が考察を生成する対象のテキストです。
生成された考察は、このnoteの他の記事【デジタルMATSUMOTOの考察】をご覧いただければと思います。
アップデートの経緯(現行バージョンの課題)
メリットを感じる一方で、以下のような課題も感じていました。
課題1. トークンを最大限使いたい
OpenAI(0.28.0)とLLaMa Index(0.8.18)で構築した結果、OpenAIの最新のAPIに対応するにはコード修正量が多くなってしまいました。。。
RAGの情報をより多くコンテキストに反映させるためにも、OpenAIの最新APIでより多くのトークンを使いたいと考えていました。
課題2. 実際どれくらいRAGのテキスト情報を引用できているか不明確
RAGのテキストも2024/1/4時点で360件に増え、かなりの確率でA評価の考察記事が生成されているのですが、デジタルMATSUMOTOの考察を評価する上で「①RAGから引用した知識情報なのか」「②LLMに元々内在する知識情報なのか」を見分けたいと考えていました。
※RAGの知識(①)を本来関係ない文脈に引用することもリスクとして感じていました。
課題3. アルゴリズムをいじってみたい
LLaMa Indexのquery_engineに埋め込みベクトル(Embedding)を設定していますが「ルールベースでのチャンク作成」「類似度の算出ロジック(アルゴリズム・距離計算)の変更」「古い記事へのペナルティ設定」「コンテキストに向けた類似度の出力」といったことをやって、より多くの情報をRAGから選択して適切に使いたいと考えていました。
※トピックごとに適切なアルゴリズム(人間の頭の中での知識の使い方)が異なるのではないか?
※長く使っていると、古い記事を忘却できなくなるのではないか?
と言ったことを考えていました。
課題4. イメージ画像生成はMyGPTで回していた。
課題1.と関連してですが、これまでDALLE-3でのイメージ生成はデジタルMATSUMOTOのRAGドキュメントを取り込んだMyGPTで回していたのですが、考察生成と連続で実行したいと考えていました。
課題5. 考察生成に用いるトークン発生量を把握したい
LLaMa Indexのquery_engineではプロンプトやレスポンスのトークン量が算出できなかったのですが、このトークン量もトラッキングしたいと考えていました。
将来的に経済性も分析できたらと・・・
シン・デジタルMATSUMOTO
先程の課題へ対応するために以下の対応を行っています。
1.OpenAIの最新版APIをベースにプログラムを再開発
OpenAIの最新版APIをベースにして、LLaMa Indexを使わずにRAGをスクラッチ開発しました。
今後はOpenAIのアップデートのみに対応していくような運用イメージですが、Claude、Gemini、他のLLM(いつか大規模なGPU環境が使えたら・・・)にも移植性を確保する狙いもあります。
2.プロンプトテンプレートと評価方法を見直し
3番目の自作RAGの開発に伴い、プロンプトテンプレートを見直しました。
・LLaMa Indexのquery_engineでも同じようなコンテキストが設定されていますが、「RAGコンテキスト部分」に選択されたRAGのテキスト情報が設定されています。
・RAGのテキストには「何(n)日前の知識」「質問との関連の近さ(類似度)」を夫々追記して、合計10000トークンまでRAGのテキストが選択されるようになっています。
・「考察生成を指示するプロンプト部分」において「知識情報」の引用や比較を行うことを明示しています。
これは「課題2. 実際どれくらいRAGのテキスト情報を引用できているか不明確」を意識したものなのですが、これによって生成された考察には多少違和感がありつつも「何の記事をどこで引用しているか」が明記される傾向が出てきています。
こちらが先程の考察を生成した際に注目されたRAGのテキストです。
特にこのまま修正なく利用できる場合もあるのですが、以下のように引用すること自体は良いものの、若干表現を修正したいものもあります。
これは従来C評価で設定していた「リアル松本との見解の誤り」に必ずしも該当しないため(敢えて、引用箇所を明確にしてもらいたいという意図でプロンプトを見直したため)、
「B-:引用箇所の表現のみを修正」(Bマイナス)という評価カテゴリを追加しました。
3.RAGのアルゴリズムを自作
1点目の通り、LLaMa Indexを使わずにRAGをスクラッチ開発しました。
詳細は別途解説できればと思いますが、以下のようにプログラムを開発しています。
以下は開発・検証中ですが、一旦上記の④以外をリリースしています。
・ルールベースでのチャンクの作成
・時間ペナルティ算出の検証
・埋め込みベクトル以外のアルゴリズム(ナレッジグラフ等)
4.DALLE-3でのイメージ画像生成プログラムも連携
「確定した考察」を対象として、エシカルチェック/AI川柳/イメージ画像(DALLE-3)を実行できるようにしました。
MyGPT版と異なり、イメージ画像に対する解説は除かれてしまいますが、GPT-4Vのような画像を読解できるモデルを連携しようと考えています。
以下のプロンプトでnaturalとvividの2種類のイメージを作ってもらいました。
5.考察生成時の使用トークン量を記録
LLaMa IndexからOpenAIのAPIに切り替えたことによって、実行時の入力(プロンプト)と出力(レスポンス)のトークン数を得られるようになりました。生成に要した時間とあわせて、考察記事ごとに以下の情報を出力できるようになりました。
これらのアップデートを踏まえて、シン・デジタルMATSUMOTOの仕組みは以下のようになります。
ということで、今週末くらいからシン・デジタルMATSUMOTOによる考察をお披露目していきたいと思います。
この記事が気に入ったらサポートをしてみませんか?