Upgrade to Pro — share decks privately, control downloads, hide ads and more …

OlaGPT を踏襲した Agent 構築ことはじめ - AI Agent Meetup To...

OlaGPT を踏襲した Agent 構築ことはじめ - AI Agent Meetup Tokyo #0

Shumpei Miyawaki

July 21, 2023
Tweet

More Decks by Shumpei Miyawaki

Other Decks in Technology

Transcript

  1. OlaGPT を踏襲した Agent 構築 Shumpei Miyawaki keywalker,inc. / Tohoku Univ.

    @catshun_ • OlaGPT [Xie+ʼ23] の6つの認知モジュールを紹介する • 現在やっていることの共有
  2. どうやって有効だと検証した︖ • ヒトの認知機能を模した6つのモジュールを構築 • ⾼い柔軟性を持つ推論⽅法を提案 Xie+’23 - OlaGPT: Empowering LLMs

    with Human-like Problem-Solving Abilities Yuanzhen Xie, Tao Xie, Mingxiong Lin, WenTao Wei, Chenglin Li, Beibei Kong, Lei Chen, Chengxiang Zhuo, Bo Hu, Zang Li どんなもの︖ 先⾏研究と⽐べてどこがすごい︖ 技術や⼿法のキモはどこ︖ 議論はある︖ 次に読むべき論⽂は︖ • Kotseruba and Tsotsos+’20 - 40 years of cognitive architectures: core cognitive abilities and practical applications • ヒトの選好性を学習する RLHF、思考の連鎖、現 在の状況から⾏動を選択する ReAct などは、ヒ トの体系的な認知能⼒を考慮していない 表1.先⾏研究に対する⽴ち位置 • 誤答の記録、推論時に参照することで誤りを防ぐ • 思考テンプレの設計、柔軟な推論を可能にする 提案⼿法 記録した誤答を参照する ことで正解率が向上 • 🙆 差し込み可能なモジュールを利⽤している • 🙅 ほとんどのモジュールが LLM 依存(ブラックボックス問題,etc) ベースラインに対し 正解率が改善
  3. P.2 認知能⼒ 概要 perception - attention (intention enhance) ユーザの顕在ニーズを明確にする。 memory

    ⻑期記憶として、事実型知識・ツール・ノート・思考 のベクトル DB を作成。 learning (active learning) 予測誤りとフィードバック結果をノートに記録して 失敗から学ぶ枠組み を確⽴。 reasoning ⽔平思考・直線的思考・批判思考・統合思考の 思考テンプレート を利⽤。 action selection (controller) モジュールやメモリ選択等の 内部計画 を企てる。 voting 複数エージェントの推論結果に対して 投票 を⽤いたアンサンブルを⾏う。 ヒトの認知能⼒に基づく6つの機能 [Xie+’23] Kotseruba and Tsotsos+’20 OlaGPT では、ヒトの認知能⼒に基づいて6つの機能を設計
  4. P.3 OlaGPT の概要図 [Xie+’23] 質問タイプを取得して 質問の仕⽅を再構築する 4つのメモリを定義︓ ①事実型知識 ②道具 ③ノート

    ④思考 頻発する予測誤りに対して LLM or 専⾨家がノートを作成 推論モデル LLM / 専⾨家 複数の推論結果に対して 投票を⾏う 検索情報からプロンプトを作成 複数の思考テンプレを プロンプトとして設計
  5. P.5 (課題)ユーザによる曖昧な⼊⼒を解消したい □ LLM による⽣成拡張 (GenRead, RECITE, CAMEL, etc...) □

    +検索拡張 (HyDE, FLARE, etc...) □ Few-shot + スロットフィリング Intention Enhance (1/2) 中略 ① few-shot の検索 ② LLM による条件スロット⽣成 ③ 複数ターン対話によるスロットフィリング ✔ ユーザ意図を知るのが⽬的なので ユーザから直接ヒアリングする
  6. P.7 global_state = dict() for subtask in task: plan_name =

    subtask[“plan_name”] input_vars = subtask[“input_variables”] output_var = subtask[“output_variables”] func_string = generate_program(subtask) state = exec(func_string) output = state[plan_name](**input_vars) global_state.update(input_vars) global_state[output_var] = output (課題)複雑なタスクを簡単なタスクに分解したい(Decomposition) (課題)各サブタスクに対して関数を作成したい □ LLM で⼀連のサブタスクを JSONL として表現 🙆 後続タスクで関数作成する際に引数を指定可能 🙆 出⼒変数を次のサブタスクで指定できる Reasoning (1/3) [ … … ] 中略 中略 ✔ サブタスク サブタスク 変数として保持 # 関数名 # 引数 # 戻り値 # ユーザ FB の介⼊ # タスクタイプ(I/O) 実⾏イメージ
  7. P.8 Reasoning (2/3) 熱海のランチ候補を検索 熱海のレストランを⼀つ選択 (課題)具体的なタスクを実⾏可能なプログラムを⽣成 or 再利⽤したい □ タスク⼀覧に対して改良を⾏う(PET,

    etc...) □ サブタスクに対して順次プログラム⽣成(LATM, PEARL, etc...) □ サブタスクの実⾏結果に対して内省・修正(OlaGPT, Reflexion, CodeClarQA, DTG, etc...) □ ロールプレイによるプログラム⽣成(CAMEL, etc...) ✔ API 等の呼び出し関数は 事前に定義しておく {“inquire_to_user”: “True”} の場合は以下のコードを実⾏してユーザに判断を委ねる 未実装 だが必須
  8. P.10 Reasoning (課題)思考⽅法を柔軟に切り替える □ ⽔平思考・直線思考・批判思考・統合思考を柔軟に切り替える(OlaGPT, SwiftSage, etc...) □ 複数エージェントを使⽤して多様な推論を実施する (OlaGPT,

    MAD, Socratic AI, etc...) 今後の展望 Memory & Action Selection (課題)ユーザ意図に応じて柔軟な意思決定を⾏う □ 検索対象となる外部知識のドメインを絞り込む(FARM, etc...) □ 柔軟な⾏動選択 (ToT, RAP, etc...)