種別[gsm] 2025-09-19T13:17:33Z
セクショングローバル共有メモ
日時2025-09-19T13:17:33Z
元URL(URLなし)

「MemoryBanditWorkflow を使った RAG…

jrf> 「MemoryBanditWorkflow を使った RAG の試験実装」を作った。書かせた論文は、「日本の失われたウン十年、何をすれば良かったか」。

《experimental_rag_0.0.1.ipynb - GitHub Gist》  
https://gist.github.com/JRF-2018/6d7dda3eaf7743b91bca32037574bfc1

先に MemoryBanditWorkflow というフレームワークを作った。それは迷路問題の一部として作り始めたが、汎用なものになるようこころがけた。それが実際汎用に使えることを示すために、RAG エージェントを作ってみようというのが今回の試みである。

基本的にはメモリ機能とバンディット機能とワークフロー機能を持っているのが MemoryBanditWorkflow で、今回の物はそれをそのまま使って、RagAgent という子クラスを定義している。

なお、MemoryBanditWorkflow はセマンティックサーチとかを用意するのは、めんどくさかったので、そういうバックエンドはこれまた AI さんに「データベース偽装」をしてもらっている。

ところで、RAG エージェントといえばマルチエージェントを使うのが流行りのようだが、今回の物はリニアに順次、シングルスレッドで実行されていくだけである。マルチエージェントを敷衍するなら asyncio を使ったり、メモリにデータベースを使ったりすべきなのだが、そういうことはできる展望すらない。あくまで MemoryBanditWorkflow で RAG も実装できることを示そうとしたものなので、RAG としての新規性はない。

……。

結論。

Gemini 2.5 Pro さんというコストのかかる遅いモデルを使った。やはり頭がいい者にやらせたかったから。ただ、そのため、最初からやり直す気はなかなか起きず、修正しては load してやり直し…といった感じで最後までやらせた。書かせた論文は、「日本の失われたウン十年、何をすれば良かったか」。

すんなり最後までいくかは運の要素があるようだ。途中かなり長いループが続いたところでやり直したりした。完成した草稿のメモリを見失ってしまうことなどがあったようである。あいかわらず、summarize_messages まわりのエラーもあるようで、そこが悪さしてるのかな?…とも思う。

メモリを読んだりするのをバンディットで強制する部分は、いまいち機能してない感じだった。それ以外のツール利用がとても多く、その途中に本来ならバンディットで強制したい感じだった。

完全にうまくいったとはいいがたいが、MemoryBanditWorkflow の実証実験としてはそこそこうまくいったと思う。

なお、再現性がないため、最初からの再実行はやっていないのはご容赦願いたい。コストもかかるしね (^^;。