https://connpass.com/event/288613/?utm_campaign=event_reminder&utm_source=notifications&utm_medium=email&utm_content=title_link
OlaGPT を踏襲した Agent 構築Shumpei Miyawakikeywalker,inc. / Tohoku Univ.@catshun_• OlaGPT [Xie+ʼ23] の6つの認知モジュールを紹介する• 現在やっていることの共有
View Slide
どうやって有効だと検証した︖• ヒトの認知機能を模した6つのモジュールを構築• ⾼い柔軟性を持つ推論⽅法を提案Xie+’23 - OlaGPT: Empowering LLMs with Human-like Problem-Solving AbilitiesYuanzhen 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: corecognitive abilities and practical applications• ヒトの選好性を学習する RLHF、思考の連鎖、現在の状況から⾏動を選択する ReAct などは、ヒトの体系的な認知能⼒を考慮していない表1.先⾏研究に対する⽴ち位置• 誤答の記録、推論時に参照することで誤りを防ぐ• 思考テンプレの設計、柔軟な推論を可能にする提案⼿法記録した誤答を参照することで正解率が向上• 🙆 差し込み可能なモジュールを利⽤している• 🙅 ほとんどのモジュールが LLM 依存(ブラックボックス問題,etc)ベースラインに対し正解率が改善
P.2認知能⼒ 概要perception -attention(intention enhance)ユーザの顕在ニーズを明確にする。memory ⻑期記憶として、事実型知識・ツール・ノート・思考 のベクトル DB を作成。learning(active learning)予測誤りとフィードバック結果をノートに記録して 失敗から学ぶ枠組み を確⽴。reasoning ⽔平思考・直線的思考・批判思考・統合思考の 思考テンプレート を利⽤。action selection(controller)モジュールやメモリ選択等の 内部計画 を企てる。voting 複数エージェントの推論結果に対して 投票 を⽤いたアンサンブルを⾏う。ヒトの認知能⼒に基づく6つの機能 [Xie+’23]Kotseruba and Tsotsos+’20OlaGPT では、ヒトの認知能⼒に基づいて6つの機能を設計
P.3OlaGPT の概要図 [Xie+’23]質問タイプを取得して質問の仕⽅を再構築する4つのメモリを定義︓①事実型知識②道具③ノート④思考頻発する予測誤りに対して LLM or 専⾨家がノートを作成推論モデル LLM / 専⾨家複数の推論結果に対して投票を⾏う検索情報からプロンプトを作成複数の思考テンプレをプロンプトとして設計
タスク指向型エージェントことはじめ
P.5(課題)ユーザによる曖昧な⼊⼒を解消したい□ LLM による⽣成拡張 (GenRead, RECITE, CAMEL, etc...)□ +検索拡張 (HyDE, FLARE, etc...)□ Few-shot + スロットフィリングIntention Enhance (1/2)中略① few-shot の検索② LLM による条件スロット⽣成③ 複数ターン対話によるスロットフィリング✔ユーザ意図を知るのが⽬的なのでユーザから直接ヒアリングする
P.6Intention Enhance (2/2)(課題)ユーザ意図を対話形式ではなく⽂書として保持したい□ LLM によって意図+要約を⽣成 intention memory に登録few-shot 検索に利⽤✔
P.7global_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)実⾏イメージ
P.8Reasoning (2/3)熱海のランチ候補を検索 熱海のレストランを⼀つ選択(課題)具体的なタスクを実⾏可能なプログラムを⽣成 or 再利⽤したい□ タスク⼀覧に対して改良を⾏う(PET, etc...)□ サブタスクに対して順次プログラム⽣成(LATM, PEARL, etc...)□ サブタスクの実⾏結果に対して内省・修正(OlaGPT, Reflexion, CodeClarQA, DTG, etc...)□ ロールプレイによるプログラム⽣成(CAMEL, etc...)✔API 等の呼び出し関数は事前に定義しておく{“inquire_to_user”: “True”} の場合は以下のコードを実⾏してユーザに判断を委ねる未実装だが必須
ここからは未実装…なので展望を簡単に紹介します
P.10Reasoning(課題)思考⽅法を柔軟に切り替える□ ⽔平思考・直線思考・批判思考・統合思考を柔軟に切り替える(OlaGPT, SwiftSage, etc...)□ 複数エージェントを使⽤して多様な推論を実施する (OlaGPT, MAD, Socratic AI, etc...)今後の展望Memory & Action Selection(課題)ユーザ意図に応じて柔軟な意思決定を⾏う□ 検索対象となる外部知識のドメインを絞り込む(FARM, etc...)□ 柔軟な⾏動選択 (ToT, RAP, etc...)