「6人のAI」がチームでデータ分析するアプリを作りました【CoW:Chain of Work】
はじめに
こんにちは、ペンギンズラボの@Doryと申します!
昨年12月にChatGPTが登場して以来、毎日のように技術革新が起きていて、本当に日々ワクワクしています。
タイトルにあるとおり「6人のAI」がチーム一丸となってデータ分析をするアプリケーションを開発しておりまして、その仕組みなどを説明できればと思います!
どんなアプリケーション?
動画
デモ環境(アルファテスト実施中です)
アプリケーションの仕組み
デモ動画を見ただけでは「いったいどこに"6人のAI"が出てくるの?」といった疑問を持たれるかと思います。6人のAIが登場するのはこのアプリケーションの裏側です。
コーダーやレビュアーをはじめとした「6人の専門家」に扮したAI(ChatGPTのAPIと連携したモジュール)が、分業しながら1つのデータ分析レポートをつくるような仕組みになっています。現実の会社さながら、さまざまな職種の人が連携しながら、一つのアウトプットをつくる処理フローのイメージです。
具体的には、以下の6人のAIが分業しながら、データ内容の把握からレポート執筆までを全自動で行う実装になっています。
1.状況把握AI
・前処理(データの整形など)や集計(平均値算出など)を施したデータを受け取り、データの傾向を把握します。
2.プランナーAI
・データの傾向をもとに、データごとの特性にあわせて「どんな分析を行えば良いか?」「どんな順番で分析を行えばよいか?」を考えます。
・デモ版では、サーバーの負荷に配慮して簡単なデータ集計やグラフ作成、相関、仮説検定に絞っているのですが、本来は指示を与えることで高度な分析(予測やモデリング)も可能になっています。
3.コーダーAI
・プランナーAIの司令をうけて「データ分析を行うためのプログラム(スクリプト)」を作成しています。
・後述するのですが、ここが一番むずかしく、現在も研究を重ねている部分です。
4.コード修正AI
・コーダーAIの書いたプログラムに誤りがあったとき、誤りを修正します。
・コードを数回修正しても正常に動作しない場合は諦めるという潔い仕様になっています。
5.報告AI
・データ分析結果をもとに、グラフを解釈したり、データからインサイトを導いたりします。
6.レビューAI
・報告AIのいわば上司として、報告AIが誤った解釈をしていないか?変な記載をしていないか?を最終チェックします。
なお、当初はこの他にもコードレビューを行うレビュアーAIも存在していたのですが、私の実装が悪かったためレビューでさらにコードを悪化させる現象が多発していたため、泣く泣く退場してもらいました…すまんな….
ということで、現在はこの6人チームに落ち着いています。
CoW:Chain of Work(AIによる仕事の連鎖)
このようなかたちで、様々な役割(専門性)をもたせたAIに分業させるようなアプリケーションのデザインパターンを、CoT(Chain of Thougt:思考の連鎖。LLMに段階的に推論させることで精度を上げる手法)という手法になぞらえ、CoW(Chain of Work:分業による仕事の連鎖)と私は勝手に呼んでいます。
現在は、OpenAIのGPTをはじめとしたLLM(大規模言語モデル)を、対話や検索に用いるユースケースが主流かなと思っています。
しかしながら、私はどちらかというとLLMの持つ論理的な推論能力に強い興味があります。
高い推論能力を持つLLM同士をつなげることで
いままで人間が多人数・多部門で行っていたような業務を
多数のAIが協業しながらこなす
ようなソフトウェアができればと思っており、他にも様々なアプリケーションの開発を試みています。
システム構成
以下のような感じでシンプルです。
Streamlitを使うと、プロトタイプも素早く開発できるので本当にオススメです。
開発の経緯
ChatGPTがデータの解釈をしてくれることに気づいた
一番最初のきっかけは、ChatGPTにデータを直接与えたところ、かなり複雑なデータであっても正確に解釈をしてくれると気づいたことでした。
ならば、データの概要把握だけでなく、他の工程にもチャレンジしてみよう!ということで現在の6人チームに至りました。
トータルで実装にかけた時間は1週間程度です。こういったアプリがシュッと作れてしまうことに、時代と技術の進歩を感じてなりません。現代に生まれて本当によかった…
チャット形式でデータ分析するのは、意外にハードルが高い
当初は、以下のような形で「分析方法を日本語や英語で指示すると自動でAIが分析してくれるアプリ」を開発していました。
ところが、何人かのテストユーザさんに声を聞いてみたところ「そもそも、どういった分析をすればいいか判断するところが一番難しい」「ヒストグラム、相関、t検定、ロジスティック回帰といったいわゆる統計用語をしらないと、そもそも指示が出しづらい」といった課題がありました。
こういった経緯から、AIへの指示出しをふくめた分析業務をまるっとAIに行ってもらうというコンセプトを着想しています。
6人チーム(CoW:Chain of Work方式)のメリット
1.コンテキストウィンドウが限定されていても、そこそこしっかり動く
残念なことにGPT-4のAPIがまだ使えない(待てど暮らせどいつまでたっても招待されない…)ため、このアプリはChatGPTのAPI(GPT-3.5)で実装しています。
ChatGPTのAPIはコンテキストウィンドウが約4000トークンに限定されているため、GPT-4と比べて、長い命令文や長文の結果出力を必要とするタスクには不向きです。
しかし、役割ごとに処理を明確に分割してあげることで、コンテキストウィンドウが限定されている場合でも、そこそこ複雑な処理を実行することができます。
今後は「軽量なぶんトークン数が限られたLLM」が増加すると個人的に予測をしていますが、そのようなLLMにこそ「分業方式」のアプリケーションは有効かなと思います。
2.テストしやすい
AI(Chain)ごとに入力と出力の形式を定義することで、不具合が起きたときにも、どのAI(Chain)が原因か、なぜ不具合が発生したかを分析しやすく、デバッグもしやすいです(とはいえ、想定外の出力が発生することは多く、研究とデバッグがまだまだ不足しています)。
最近はGuardrails.aiやKorというライブラリも登場しており、型チェックやテストはますます進めやすくなるな〜と期待大です。
3.コンポーネントの再利用性が高い
LangChainのCustom Chainとして各部品を実装しているため、他のアプリを作ろうと思ったときにも再利用がしやすいです。
手元にChainをたくさん持っておくと、レゴブロックのようにChainをつなげることでアプリケーションを作れるので、開発も非常に捗って楽になります。
4.楽しい
開発を進めていると謎のチーム感が芽生えます。
バグが発生しまくっているときも「プランナーがやらかしたか〜ドンマイ〜」みたいな感じで、寛大な心で開発をすすめることができました。
改善が必要なこと
1.コーディング工程でのエラー発生率
ChatGPTに分析用スクリプトを書かせる場合、どんなに指示を工夫したとしてもエラーはゼロにはできません。現状、5回に1回程度の確率で実行エラーが発生しているようです。
エラーが発生した際には、エラー文を読んでコード修正・再実行を行う処理(コード修正AI)も存在しているものの、修正が完全でないケースも多々あります。
そこで現在は、AIが書いたスクリプトを修正するルールベースの処理を挟むことで問題に対処しています。
また、現在はChatGPTのAPIを利用していますが、GPT-4のAPIを利用することでコードの品質が高まる可能性はあります。
最近では、Wolverineなどコードの自動修正を行うことができるライブラリも登場してきているので、こういったものを取り入れることでエラー発生率を低下させることは可能かなと思います。
2. 処理時間・API利用コスト
これまで説明してきたように、データの状況把握〜レビューまでの間にOpenAIのAPIと多数のやりとりを行うため、処理にはそれなりに時間がかかります。デモを利用した方は体感されたかなと思いますが、数分待たされてしまいます(待機時間が長く申し訳ないです…)。
待ち時間問題を解決すべく、処理を並列実行することで高速化したバージョンも開発したのですが、その場合はAPIを短時間で何度も何度も叩きまくることになり、音速でお金が溶けるため、デモでは並列処理を実行しないようにしています。
3.アプリが落ちる
これは本質的には課題ではなく私が出費をケチっているだけなのですが、StreamlitのCommunity Cloud(無料版)を利用させていだだいており、使用可能なメモリが1GBまでとなっています。。。
ありがたいことに多くの皆さんにご利用頂いているので、混雑している際はアプリが落ちたり勝手に再起動してしまっているようです。ご迷惑おかけしています…🙇
さいごに
LLMやAIを使って毎日の仕事がもっと楽しくなるプロダクトを作ることが当面の目標です。この記事を読んで、LLMアプリの開発に興味を持つ方が一人でも増えれば、この上なく嬉しいなと思います。
この記事が気に入ったらサポートをしてみませんか?