Slide 1

Slide 1 text

OlaGPT を踏襲した Agent 構築 Shumpei Miyawaki keywalker,inc. / Tohoku Univ. @catshun_ • OlaGPT [Xie+ʼ23] の6つの認知モジュールを紹介する • 現在やっていることの共有

Slide 2

Slide 2 text

どうやって有効だと検証した︖ • ヒトの認知機能を模した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) ベースラインに対し 正解率が改善

Slide 3

Slide 3 text

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つの機能を設計

Slide 4

Slide 4 text

P.3 OlaGPT の概要図 [Xie+’23] 質問タイプを取得して 質問の仕⽅を再構築する 4つのメモリを定義︓ ①事実型知識 ②道具 ③ノート ④思考 頻発する予測誤りに対して LLM or 専⾨家がノートを作成 推論モデル LLM / 専⾨家 複数の推論結果に対して 投票を⾏う 検索情報からプロンプトを作成 複数の思考テンプレを プロンプトとして設計

Slide 5

Slide 5 text

タスク指向型エージェント ことはじめ

Slide 6

Slide 6 text

P.5 (課題)ユーザによる曖昧な⼊⼒を解消したい □ LLM による⽣成拡張 (GenRead, RECITE, CAMEL, etc...) □ +検索拡張 (HyDE, FLARE, etc...) □ Few-shot + スロットフィリング Intention Enhance (1/2) 中略 ① few-shot の検索 ② LLM による条件スロット⽣成 ③ 複数ターン対話によるスロットフィリング ✔ ユーザ意図を知るのが⽬的なので ユーザから直接ヒアリングする

Slide 7

Slide 7 text

P.6 Intention Enhance (2/2) (課題)ユーザ意図を対話形式ではなく⽂書として保持したい □ LLM によって意図+要約を⽣成 intention memory に登録 few-shot 検索に利⽤ ✔

Slide 8

Slide 8 text

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) 実⾏イメージ

Slide 9

Slide 9 text

P.8 Reasoning (2/3) 熱海のランチ候補を検索 熱海のレストランを⼀つ選択 (課題)具体的なタスクを実⾏可能なプログラムを⽣成 or 再利⽤したい □ タスク⼀覧に対して改良を⾏う(PET, etc...) □ サブタスクに対して順次プログラム⽣成(LATM, PEARL, etc...) □ サブタスクの実⾏結果に対して内省・修正(OlaGPT, Reflexion, CodeClarQA, DTG, etc...) □ ロールプレイによるプログラム⽣成(CAMEL, etc...) ✔ API 等の呼び出し関数は 事前に定義しておく {“inquire_to_user”: “True”} の場合は以下のコードを実⾏してユーザに判断を委ねる 未実装 だが必須

Slide 10

Slide 10 text

ここからは未実装… なので展望を簡単に紹介します

Slide 11

Slide 11 text

P.10 Reasoning (課題)思考⽅法を柔軟に切り替える □ ⽔平思考・直線思考・批判思考・統合思考を柔軟に切り替える(OlaGPT, SwiftSage, etc...) □ 複数エージェントを使⽤して多様な推論を実施する (OlaGPT, MAD, Socratic AI, etc...) 今後の展望 Memory & Action Selection (課題)ユーザ意図に応じて柔軟な意思決定を⾏う □ 検索対象となる外部知識のドメインを絞り込む(FARM, etc...) □ 柔軟な⾏動選択 (ToT, RAP, etc...)