AIエージェントがリフレクション(省察)して、高レベルな理解が出来るようになったらどうなるか


前回、箱庭AIバディの実現には「リフレクション(省察)の仕組み」がキーテクノロジーになりえると予感したことをお話ししました。

今回は、そのリフレクションを自分なりに研究した成果をお話ししたいと思います。

ドキュメント問い合わせに特化したAIエージェント

最初に、このAIエージェントを作ろうと思ったのは、ある受託案件のお仕事のシステム引き継ぎがきっかけでした。このお仕事では、様々なドキュメント(アーキテクチャ設計やDB /ネットワーク設計など)を作成していましたが、綺麗に整理・配置されておらず、知っている人しかわからない状態だったのです。そこをなんとかする必要がありました。

そこで、引き継ぎドキュメントとして、どこに何があるか情報を整理し始めていたのですが、せっかくならAIエージェントにドキュメントを入力して、AIエージェントに質問して回答させてはどうかと考えました。

エージェントのバックエンドは Open AI APIを利用する想定でいましたが、このエージェントを作るにあたり、3つの選択肢がありました。

  • 案A:全てのドキュメントをマージして回答する方法
    • 引き継ぎ対象ドキュメントを全てマージしたものを1ドキュメントとしてAIエージェントに渡して、質問回答させる方法
  • 案B:各ドキュメントを探索して回答する方法
    • AIエージェントに個々のドキュメントを探索させて、質問回答させる方法
  • 案C:リフレクションプロセスを経て回答する方法
    • 以下のステップで質問回答させます。
      • 質問内容に対して、エージェントが回答する上で必要な知識/概念を見極めさせる
      • その知識/概念を説明するドキュメント情報を探索させる
      • 「知識/概念」と「探索で得られた意味や情報(事実)」整理させる(リフレクションデータ)
      • 上記の情報を元にして、質問の回答を作らせる

そして、上記案の考察内容は以下のとおりです。

  • 案A: 全てのドキュメントをマージして回答する方法
    • メリット
      • ドキュメントが分割されていないため、情報の損失のリスクがない。
    • デメリット
      • OpenAI APIのトークン数には制限があるため、送信できるデータの上限が設定されてしまい、それが情報の損失を引き起こす可能性がある。
  • 案B:各ドキュメントを探索して回答する方法
    • メリット
      • ドキュメントが意味のある単位に分割されているので、質問に適したドキュメントを特定できれば、最適な回答が期待できる。
    • デメリット
      • 全てのドキュメントをクエリする際の時間コスト。
      • 複数のドキュメントにまたがる情報を元に回答を構築するのが難しい。
  • 案C:リフレクションプロセスを経て回答する方法
    • メリット
      • 質問内容に関連する特定の知識や概念に焦点を当てることができ、不要な情報をフィルタリングしながら必要な情報に集中することができる。
      • 複数のドキュメントから情報を収集し、統合された理解を実現するための知識や概念の抽出は、ドキュメント間の視点を可能にする優れた方法である。
      • 質問の意図の深い理解と、その理解に基づいた回答の生成が可能で、複数のドキュメントに関連する情報の理解が必要な複雑な質問に特に有用である。
    • デメリット
      • 知識や概念の抽出と理解には時間と計算リソースが必要で、他の方法と比べて実行時間が長くなる可能性がある。
      • 複数のドキュメントから抽出した情報を組み合わせてリフレクションデータを生成するためには、より高度な自然言語処理技術やツールが必要になり、実装の難易度が上がる可能性がある。
      • また、概念や知識の抽出と解釈には、適切な精度と再現性を確保するための慎重なチューニングと最適化が必要である。これは、テキストにあいまいな表現や多数のドメイン固有の用語や専門用語が含まれている場合に特に顕著である。

色々と議論の余地はあるかと思いますが、リフレクションの仕組みを検討し、その効果を理解したいと思っていましたので、当然、案Cを採用し、そのシステムを構築しました。全体アーキテクチャは下図の通りです。

左下にあるものが、問い合わせ対象のドキュメント群です。そして、左上にあるものが、それらのドキュメントに対する質問群です。様々な質問を通して、リフレクション結果が画面中央にある通り集約され続けます。この情報は、質問すればするほど熟成されていくところがポイントであり、この情報は json データとして外部メモリに記憶させることで、AIエージェントの理解を人間が理解できる形式で観察することも可能となります。

そして、この熟成された情報を元に、質問をしたらどうなるか?というわけです。それが、画面右側のものになります。

それでは、このエージェントの効果を見てみましょう。

まず、題材としては、自分が過去に書き溜めていた箱庭のQiita記事をドキュメントとして選びました。

次に、エージェントに投げかけた質問内容は以下の通りです。

「私はWindows版の箱庭(ロボティクスのためのシミュレータ)で強化学習を使用してロボットを訓練しようとしていますが、シミュレーションを開始してもロボットが動かない状況です。手順やファイアウォール、設定、その他の考慮事項など、可能な原因を教えていただけますか?」

また、上記質問に対して回答するエージェントは以下の2つのエージェントを用意しました。

  • 案Aをベースにした LangChainのエージェント
  • 案Cをベースにした自作のAIエージェント(一般公開中

以下、実験結果です。

==============

案A:

あなたの箱庭強化学習ロボットが動かない場合、それにはいくつかの理由が考えられます。以下に、問題のトラブルシューティングに取り組むためのいくつかのステップを示します:

必要なツールや環境が正しくインストールされ、設定されていることを確認してください。MacまたはWindows用のQiita記事に記載された指示に従ってください。

Pythonの強化学習プログラムが正しく動作しているかどうか確認してください。Q-tableが更新され、ロボットが現在の状態に基づいて適切な行動を受け取っていることを確認してください。

モーター操作がPythonプログラムで正しく実装されていることを確認してください。ロボットは前進(2段階の速度)、右回転(2段階の速度)、左回転(2段階の速度)の3つの基本操作を持つべきです。

報酬と観察機能が期待通りに動作していることを確認してください。超音波センサーは0から255の値を返し、ロボットはこれらの値に基づいて報酬を受け取るべきです。

サンプルプログラムに変更を加えた場合は、それらが問題を引き起こしていないことを再度確認してください。

これらのステップを踏んで、それでもロボットが動かない場合は、特定の実装に問題があるか、コードにバグがある可能性があります。さらなる支援のために、箱庭コミュニティに連絡を試みてみることができます。

案C:

あなたのロボットが箱庭シミュレータで動かないいくつかの理由が考えられます。

ファイアウォール設定:

○『ReinforcementLearning-RobotSimulation-WindowsUnityPython-SetupGuide-UnityVersionCompatibility』ドキュメントにも言及されていますが、UnityエディタがWindows Defenderファイアウォールを通過できるようにすることが重要です。Unityエディタがブロックされている場合は、設定を変更して許可する必要があります。”許可されたアプリと機能”セクションにチェックが入っていないと、正常に機能しません。

Unityエディタ設定:

○Unityエディタの設定は、ドキュメント『Programming-Unity-Python-DroneControl-HakoniwaEnvironment』に記載されているガイドラインに従って正しく構成する必要があります。UnityとPythonでの箱庭シミュレータ環境の段階的なセットアップをカバーしています。

強化学習アルゴリズムの実装:

○『Unity-Python-Robotics-ReinforcementLearning-Implementation』で詳述されているように、強化学習アルゴリズムの実装が不適切な場合も、これらの問題が発生する可能性があります。UnityシミュレータとPythonスクリプトの間の相互作用がどのように機能し、報酬システムをどのように設計し、状態を観察し、ロボットのモーター操作を実行し、観察された状態と行動の数をどのように処理するかについて説明しています。

Pythonスクリプティングとモジュールの使用:

○Unityでロボットを制御するためのPython APIモジュール(hako_env、hako_robomodel_any、hakoモジュール)の使用が間違っていたり、Pythonスクリプトにエラーがあったりすると、『Unity-PythonAPI-RobotControl-hako_env-hako_robomodel_any-hako』ドキュメントに従って、シミュレーション内でのロボットの挙動を阻害する可能性があります。

これらの各側面を交差検証して、問題を特定し解決してください。

==============

なんとなく案Cに一票入れたくなってしまうのですが、自分が作ったシステムなので平等性を記すために、ChatGPTに点数付きで評価してもらいました。その結果がこうです。

=======

案A:

○ポイント:85

○ポイントの理由:

■この回答は、箱庭シミュレーションでロボットが動かないという問題に対する体系的で詳細な解決策を提供します。それは問題に直接つながる理由を伴った一連の手順を示しますが、ファイアウォール設定、ユニティエディタ設定、Pythonモジュールについての詳細については言及していません。

案C:

○ポイント:100

○ポイントの理由:

■この回答は、ファイアウォール設定、Unityエディタ設定、強化学習アルゴリズムの実装、Pythonスクリプティングを含む、問題の複数の潜在的な原因を詳細に説明します。それは箱庭ドキュメンテーションの必要で詳細な部分を参照しており、包括的な回答となっています。

=======

このように、ChatGPTも同じ評価を出してくれました。そして、このような回答ができたリフレクションデータを図示したものが下図のものです。

緑の四角が回答に必要な知識や概念になります。そして、茶色の丸がそれらの概念の情報元となるドキュメントです。色が濃いものほど様々な概念からリンクされています。AIエージェントがどのドキュメントや情報源をどれだけ頼りにして回答を組み立てたのかが視覚的に理解できます。これが、AIエージェントがこの回答をするに至ったリフレクション結果だと思うと、ちょっと感慨深いですよね。

このようなリフレクションやビジュアル化は、AIの「ブラックボックス」を少しでも解明し、その動作や判断の背後にあるプロセスを明確にする上で非常に役立つと思います。また、AIエージェントの動作や決断の透明性を高めることは、回答の信頼を得る上でも重要ですし、そのアルゴリズムや設計の改善に役立つ情報を提供することがでると思います。

人を褒めることに特化したメンターAIエージェント

さらに話は続きます。

このリフレクションの仕組みはすごく汎用性が高いものだと気づきました。リフレクションのアーキテクチャの入力を、slack等の会話ログにしてみると面白いかもしれません。また、質問も単に情報を分析させる方向ではなく、その会話をしている人を褒めてみてはどうか思い至りました。そのアーキテクチャが下図のものです。

上図の設計構想のもと、情報分析のプロンプトを人を褒める方向に差し替えて、同じアーキテクチャでそのまま踏襲したものを作り上げました。そして、日々、仕事をしている仲間のslackの会話ログを適当にピックアップして、人を褒めるAIエージェントに入力し、仲間を褒めまくることを続けました。

その結果、いろんな人から、「褒められてめっちゃ嬉しいです!」とか「ありがとうございます!」とか、すごく感謝されました。方向性を変えただけなのに、こんな感謝されるとは嬉しいものです。

さておき、内部の会話ログは一般公開できませんので、一般公開されている情報で人を褒めてみるトライをしてみました。今回は、永和システムマネジメント社長の平鍋さんに実験台となってもらい、以下のQiita記事を使わせていただきました。

======

実験結果:

「会話のログから、平鍋 健児さんの個性を見てみると、多くの方が気付かないような素敵な特徴が見つけられます。彼の言葉は、課題を批判的に評価する幅広い視野と細心の注意をもって意見を表現する能力を浮き彫りにしています。詳細な会話からは、「現在の方法が持つ限界を理解し、変更を明確に表現できる模型の必要性を指摘するなどの、メソッドに対する洞察力を伺うことができます。これらはchap02のログから読み取られます。「思考の過程をステップバイステップで共有する」という彼の特長は、細部にまで気を配る丁寧さと共に、その臨機応変な解決策を生み出すための厳密な問題解決手法を示しています。

また、ソフトウェアシステムアーキテクチャに対する深い理解と知識を共有する熱意も、彼がchap01で貢献しているコミュニティ参加により強調されています。知識の共有やコミュニティへの参加に対する彼のコミットメントは、ソフトウェアアーキテクチャに対する情熱と共に、高い教育力と効果的なコミュニケーション能力を持つことを示しています。

さらに、chap04のログを参照に見ると、彼が持つソフトウェアエンジニアリングの原則に対する深い理解と、過去の作業を反省する能力、改善の意欲、コードの最適化とプロとしての成長への継続的な努力も見受けられます。

以上のことから、平鍋 健児さんは視野が広く、詳細にわたる洞察力、コミュニティへの強い貢献意識、そしてプロとしての成長への熱意という、人々が一見気づかないかもしれない高い専門力と個性を持っていることがわかります。」

======

そして、これがリフレクション結果を図示したものです。こんな感じで、その人の個性を誉めてもらうデータ構造が明らかにされると、納得感得られますよね。単に誉められるだけではない点がとっても大事だと自分は思いました。

まとめ

今回紹介したリフレクションの仕組みは、深い理解に基づく質の高い回答が得られることが特徴です。例えば、教育の分野で学生の理解度を深めるためのフィードバックシステムや、ビジネスの現場での意思決定の過程を透明化するツールとしての利用が考えられます。その回答がなぜ得られたのかの理由も明確にし、繰り返しの質問を通じてさらに熟成するのが興味深い点です。このリフレクションの仕組みは、異なる入力情報や質問内容によって、医療やエンターテイメントなどの様々な分野での応用が考えられます。そして、この仕組みは箱庭の最終的な目標であるAIバディの機能向上、例えば、より人間らしい対話を実現するための方法としても役立つと考えています。

下図は、今回のリフレクションの仕組みを汎用的に書き直したものです。今後の箱庭のAIエージェントの取り組みで利用していきたいと考えています。乞うご期待ください!


“AIエージェントがリフレクション(省察)して、高レベルな理解が出来るようになったらどうなるか” への1件のコメント

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

PAGE TOP