「[[.NET 開発基盤部会 Wiki>http://dotnetdevelopmentinfrastructure.osscons.jp]]」は、「[[Open棟梁Project>https://github.com/OpenTouryoProject/]]」,「[[OSSコンソーシアム .NET開発基盤部会>https://www.osscons.jp/dotNetDevelopmentInfrastructure/]]」によって運営されています。 -[[戻る>テキスト生成系(Transformer系)#j2f01d54]] > チューニング、拡張系 -[[戻る>テキスト生成系(Transformer系)#j2f01d54]] > [[チューニング、拡張系>テキスト生成系(Transformer系)#j2f01d54]] --[[LLMのPE]] --[[LLMのRAG]] --[[LLMのFT]] --LLMエージェント *目次 [#w1ac513b] #contents *概要 [#l87448a9] -情報の収集・解析・意思決定・アクション実行を行うシステム -あるサーベイ論文では、AIエージェントを~ 「脳」「知覚」「アクション」という3つの要素で整理。 -最近の、AIエージェントとは、LLMベースのAIエージェントを指している。 --AI エージェントの中核はLLMで、LLMエージェントとも呼ばれる。 --環境を「知覚」する仕組みと「アクション」を繋ぐ「脳」としてLLMを使う。 --単なる対話でなく、環境を「知覚」し、マルチステップの思考・計画を伴うタスクを遂行する。 *詳細 [#yae5a2c7] **構成要素 [#y67475f4] LLMエージェントは通常、以下のような構成要素を持ちます: ***LLM本体 [#x977ce4c] 自然言語の理解・生成を担当する中核部分。タスクの実行や推論を行う。 ***メモリ [#o650a86f] 会話履歴やタスクの進行状況などを保持。長期的な記憶も可能。 ***ツール / プラグイン [#rd3d937a] Web検索、計算、コード実行、API呼び出しなど、外部リソースと連携して作業を遂行。 ***コントローラー [#i48dd486] プランナーとLLMのやりとりを制御。ループを回す。 ***プランナー [#z829d8b0] ゴールに向けタスクを分割し、順序立てて実行計画を作る。 ***アクション実行器 [#l4d14f53] LLMの計画した出力に従って具体的なアクションを実行するモジュール。 **思考ループ(Reasoning Loop) [#nc24bf4e] 多くのLLMエージェントは以下のようなエージェント・ループで動作 ***タスクの理解(Goal Recognition) [#p5d5592a] ユーザーから与えられた指示や問いを分析し、何を達成すべきかを明確にする。 -自然言語で書かれた曖昧な指示から「最終的な目的」を推測する能力が求められる。 -LLMエージェントは、文脈や過去の対話履歴も考慮して目的を解釈する。 ***プランの生成(Plan) [#yf54d847] 目的を達成するための一連の手順や方針(プラン)を考案する。 -Web検索が必要 → 検索 → 情報要約 → 回答生成、のようなステップ分割。 -単純なプランではタスク分割、複雑なプランには外部ツール(計算機、検索エンジン等)との連携も含まれる。 ***次のアクションの選択(Reason) [#f32ac08b] -プランに基づき、今の状況において最も適切な次のアクションを選ぶ。 -「今なにをするべきか?」という意思決定プロセスであり、状況に応じた柔軟な判断が求められる。 -ここでは推論(Reasoning)能力が重要となる。 ***アクションの実行(Act) [#qfdf51a5] -選択したアクションを実行する。 -実行対象は、ツールの呼び出し、情報取得、外部APIへのアクセス、またはユーザーへの返答など。 -実行結果は次のステップに活かされる。 ***観測と反省(Reflect) [#e17f59ae] -アクションの結果を観察し、目的に近づいたか、想定とずれがないかを評価する。 -不十分な結果が出た場合は原因を考え、改善点を洗い出す。 -エージェントが「何がうまくいかなかったか」を自己評価する重要な段階。 ***再計画(Replan) [#o23b2ef2] -反省の結果に基づき、プランの修正・更新を行う。 -新たな情報や環境の変化に応じて、アクションの優先順位や順序を再構築する。 -その後、再び次のアクションの選択へとループが戻る。 --上記のステップを繰り返しながら、最終的な目標達成を目指す。 --このループは、ユーザーが満足する結果を得るまで、あるいは明示的な停止条件が満たされるまで続く。 --このような思考ループは、自律エージェントにおいて特に重要な「目的志向の行動」が可能となる基盤。 **実装方法/手法 [#sc15bff4] -LLMベースのAIエージェントの5つの実装方法 -「ReAct」が有名だが他にも多くの手法がある。 ***WebGPT [#u7df3f53] -概要:OpenAIが開発した、ウェブ検索を活用する強化学習ベースの対話型モデル。 -特徴:実世界のウェブを検索して情報を取得し、それを元に回答を生成。また、人間のフィードバックで強化学習(RLHF)。 -目的:より信頼性の高い・根拠のある回答を生成する。 ***MRKL [#qd594567] MRKL(Modular Reasoning, Knowledge and Language) -概要:AIエージェントが複数のツールを統合的に使うためのモジュラー・アーキテクチャ。 -特徴:モデルが入力を解析し、適切なツールにタスクを振り分けて実行。LLMは「どのツールを使うべきか」を推論する役割。 -MRKLは、OpenAIの論文「ReAct: Synergizing Reasoning and Acting in Language Models」などでも言及されている。 ***[[ReAct>LLMのPE#pc31e54c]] [#r03947ad] ReAct(Reasoning + Acting) -概要:思考(Reasoning)と行動(Acting)を交互に繰り返すことで、LLMがより柔軟かつ強力な問題解決を行うフレームワーク。 -特徴:推論と行動を逐次的に交互に行う。例:検索 → 仮説立て → 電卓使用 → 結論。 -論文:Yao et al., 2022(例:「Let's think step by step」のようなプロンプト技法を拡張) -エージェントはActだけでも実装できるが、Reason(思考過程を言語化)してからAct(実行内容を言語化)させる「ReAct」の精度がよかったという論文 --Reasonなし・Actなし --Reasonあり・Actなし (CoT) --Reasonなし・Actあり (WebGPTのようなもの) --Reasonあり・Actあり (ReAct) ***Plan-and-Solve [#p087498c] -概要:問題を解く前に、まず全体の計画(Plan)を立て、それに従ってステップごとに解決するプロンプト設計手法。 -特徴:「まず計画を立ててから解く」→ 思考の整理ができ、正確な回答率が上がる。[[CoT>LLMのPE#mc4f37b5]]の[[ような技法>LLMのPE#ffa8b1bb]]と組み合わせて使用される。 ***LLMCompiler [#x6b8eb95] -概要:タスクの自然言語仕様をプログラム的な実行計画やコードに「コンパイル」するLLMベースの手法。 -特徴:LLMが自然言語からタスクグラフや関数構成などを生成。プログラムのような表現を通じて複雑なタスクを実行可能にする。 -応用:マルチステップの意思決定やエージェントプランニングなど。 ※ LlamalndexやLangGraphでも利用可能とのこと。 **開発サービス/ツール [#w3fbea20] AIエージェント開発のためのサービス/ツール -自律的にタスクをこなすエージェントとして機能させるための重要な基盤。 -それぞれのツールは目的や使い勝手が異なるため、以下に概要と特徴を解説。 ***AutoGPT・BabyAGI AgentGPT [#f70ba83a] (Function calling以前) -これらは自律型エージェントのオープンソース実験プロジェクトで、~ 複数のステップでタスクを実行する「思考→行動→観察」ループに拡張したものです。 --目標を与えると自律的にサブタスクを生成・実行 --外部ツール(検索、ファイル操作、Webブラウザなど)との連携を備える --開発・研究目的で作られたもので、安定性やセキュリティ面に注意が必要 -AutoGPT:目標を与えると、サブタスクを生成し、外部ツールを使って自律的に作業を進める。 -BabyAGI:LLMによるタスクの生成、優先順位付け、実行を繰り返す。 ***Function calling (OpenAl) [#m3aa0a0b] GPT-4やGPT-3.5に特定のAPIや関数を呼び出させ外部タスクを実行する仕組み。 -LLMが何をどう呼び出すかを自動的に決定 -LLMが自然言語から適切な関数名と引数を構造化出力(JSON)。 -関数をLLMに「使わせる」ことで、外部のツール・APIと接続可 -高精度なツール選択と使い分けが可能 ***Assistants API、GPTS (OpenAl) [#s80ead78] -OpenAIが提供するエージェント構築APIおよびGPTsプラットフォーム。 -ツール使用、ファイル読み込み、メモリなどの機能が組み込まれている。 --「アシスタント」に対しツールやコード実行、関数呼び出しを組み込める。 -- Memory(長期記憶)、code interpreter、retrieval(検索)、function callingを統合 -- GUIベースの「GPTs」はカスタムGPTを作れる(ノーコード寄り) ***Amazon Bedrock for Agents (AWS) [#k3b1785b] AWSが提供するLLMエージェント実行環境。複数のLLMと連携可能なマネージド型AIサービス。 -複数のLLMから選択できる -RAGやツール連携が可能 -企業向けでスケーラブル&セキュアな構成に適する ***LangGraph(LangChain) [#b3ad3746] -LangChainの上に構築された状態遷移ベースのLLMエージェント実装ライブラリ。 -[[構成要素>#y67475f4]]の機能を提供しグラフ構造でエージェントを構成する。 -- LLMのフロー(思考 → 行動 → 観察)を有向グラフ(DAGや状態マシン)として記述 -- ステップ実行やループ、エラー処理、分岐などが明示的に制御可能 --分散実行やログ管理も可能で、堅牢な設計が可能 **例と工夫 [#w5c1dc8d] 以下の5つの分野の有名なAIエージェントとその工夫 ***リサーチ(GPT Researcher) [#n67454cf] -核となるアイデアは「プランナー」と「実行」のエージェント -https://github.com/assafelovic/gpt-researcher ***シミュレーション(Generative Agents) [#x1afcf67] -25人のAIエージェントを仮想的な街で生活させるシミュレーション -Memoryの工夫が有名、最新性・重要性・関係性のあるものを検索して使用 -https://github.com/joonspk-research/generative_agents ***ゲーム [#t32a359f] -Voyager --できるだけ多様な発見をすることを最終目標として行動するMinecraftを自動プレイするAIエージェント --Minecraftのクライアントライブラリ (JavaScript)を使った「スキル」を生成して使用 -PokéLLMon --過去のターンのフィードバックやポケモンの技などの外部知識をプロンプトに含めることで、不利な選択をしないように制御 --相手が強力なポケモンだとパニック状態になってポケモンの入れ替えを繰り返すのを防ぐよう、Self-Consistency (自己整合性) プロンプティングを使用 ***ソフトウェア開発 [#w081ec72] -GPT-Engineer --自動でプログラムを実装するという分野で話題になったエージェント --「こういう機能を開発して」と記述しておくと、自動でプログラムを実装してくれる --https://github.com/gpt-engineer-org/gpt-engineer --https://apt-engineer.readthedocs.io/en/latest/index.html -ChatDev --プログラマー・テスター・デザイナーなど、様々な役割のAIエージェントに共同作業させて、自動でソフトウェアを開発させる ***汎用のコンピュータ操作 [#c74d6746] -Open Interpreter --自然言語の指示でコンピュータを操作するツール --https://github.com/KillianLucas/open-interpreter/ -OS-Copilot --OSの操作を提供するエージェント --https://github.com/OS-Copilot/FRIDAY **標準化・プロトコル [#ua28b97f] ***対象 [#g9407347] -Function calling API~ ツール/関数をLLMに呼ばせる標準仕様(OpenAIやAnthropicなどが実装) -Tool Registry / Metadata~ ツールや機能の定義情報(引数、用途など)を共有するためのスキーマ -Agent-to-Agent Protocols~ 複数エージェントがやり取りする際の通信仕様(メッセージ構造や状態管理) -Observability~ エージェントの動作トレース、ログ記録の標準フォーマット(OpenTelemetryなどと連携) ***団体 [#lf10a971] -OpenAI~ Open Agents、function calling APIの提案 -LangChain~ LangGraph、LangServeで標準的な構成提供 -Anthropic, Google, Meta~ 独自API提供+相互運用性の議論に参加(例: AI Alliance) -W3C / ISOなど~ 将来的な正式標準化の議論も一部で始動 -Agent Protocol Community~ 自主的なコミュニティ駆動の標準仕様作成 ***MCP(Model Context Protocol) [#ycd944bc] -AIモデルと外部システムのやりとりを標準化するオープンプロトコル -ホストがクライアントとサーバーを使用して実装 --ホスト:アプリケーション、クライアントを通じて外部データやツールにアクセス。 --クライアント:サーバとの接続を確立し、リソース、ツール、プロンプトなどの機能を利用するためのリクエストを送信 --サーバー:クライアントからのリクエストを処理し、必要なデータ(データソース)や機能(ツール)を提供へのアクセスを提供 -MCPをサポートするプロダクト --[[LangFlow>LangFlowの4thステップ]]は、ホスト/クライアント/サーバーをサポートする。 --MCPクライアントの機能を持つCursorは、[[LangflowのMCPサーバ機能>LangFlowの4thステップ#x6a44d50]]と連携する項の説明で取り上げられている。 ***ACP(Agent Communication Protocol) [#j73e527d] [[マルチエージェント>#w3c0edeb]]で、エージェント同士(またはエージェント⇔人間⇔ツール)の通信インタフェースや意味論を標準化するプロトコル。 -RESTベースの通信:シンプルで明確なRESTエンドポイントを使用し、標準的なHTTPパターンに沿った通信を実現。 -非同期通信の優先:長時間のタスク処理に適した非同期通信を主にサポートし、同期通信も可能。 -セキュリティ:能力ベースのセキュリティモデルを採用、リソース、操作、期限をエンコードしたトークンを使用。 **マルチエージェント [#w3c0edeb] LLMマルチエージェントは、LLMを用いた複数のエージェントが連携・協調・競合しながらタスクを遂行するシステムや枠組みのことを指す。 ***利用例 [#t1bb2c84] -ソフトウェア開発支援:プロジェクトの要件を受けて、複数のエージェントが設計、実装、レビュー、テストを分担。 -複雑な意思決定支援:複数の視点から情報を収集・分析し、意見を統合して提案を生成。 -教育やチュータリング:異なる学習スタイルや領域に対応した複数のエージェントが、個別に支援。 ***役割分担 [#d60991a4] 各エージェントは専門性を持たせ、以下のような役割に分かれることが多い -プランナー(Planner):全体の戦略やステップを立案 -リサーチャー(Researcher):外部情報を収集・分析 -エンジニア(Coder):コードを生成・検証 -レビュワー(Reviewer):他エージェントの出力を評価・改善提案 -メタ・エージェント:全体を制御する「指揮官」的エージェント(オーケストレーター、マネージャーなど) ***PE技法 [#v38841de] [[Self-Consistency, GKP, Self-Ask, ToT, AoTといったPE>LLMのPE#ffa8b1bb]]の推論促進技法の構造やアイデアを、明示的または暗黙的にシミュレーションしている。 -Self-Consistency(自己整合性) --関係性:マルチエージェントが独立に推論を行い、それらの出力から最も整合的なものを選ぶという点で一致。 --シミュレーション性:高い。各エージェントを一つの「自己実行のバリエーション」と見なすことで、Self-Consistencyの仕組みと同様の効果が得られる。 -GKP(Generated Knowledge Prompting) --関係性:あるエージェントが生成した知識を別のエージェントが利用するという点で、GKP的。 --シミュレーション性:中〜高。知識共有や知識ベースのプロンプティングが実装されていれば、かなり近い。 -Self-Ask --関係性:タスク分解や質問の生成→他エージェントに解決させるプロセスが、Self-Askの「質問して自分で答える」構造に似る。 --シミュレーション性:高。特に質問応答・サブタスク分担型のマルチエージェントシステムでは、Self-Askに近い設計になる。 -ToT(Tree of Thoughts) --関係性:各エージェントが「思考の分岐」や「候補生成」に相当する役割を担うことで、ToTの木構造探索を模倣。 --シミュレーション性:中〜高。特に評価・選択メカニズムを持つマルチエージェント構成では、ToT的な探索が可能。 -AoT(Algorithm of Thoughts) --関係性:タスク解決を「アルゴリズム」として明示的に分解し、各部分をエージェントに割り当てることで、AoTに似た形になる。 --シミュレーション性:高。構造化された役割分担とステップ的な思考展開はAoTそのものに近い。 ***実装例 [#abe27875] -Generative Agents --架空の町(例: Smallville)に複数のエージェントが暮らし、日常生活を送る。 --各エージェントは「観察」「記憶」「計画」「行動」などのモジュールを持つ。 --GPT-4などのLLMで内面の思考・対話・行動を生成。 -ChatDev: --開発プロセスを企業のようにモデル化(例: CEO、CTO、プログラマー、テスターなどの役割)。 --各役職に対応するLLMエージェントが協調してコードを設計・実装・レビュー。 --各フェーズでチャットを通じて議論・意思決定。 ***繋がり方 [#u969328f] -同期的チャット:エージェント同士がリアルタイムで交互に発言。 -非同期メッセージパッシング:あるエージェントがメッセージを送信し、他のエージェントが後から反応。 -ブラックボードアーキテクチャ:共通の「知識ベース」や「ワークスペース」を全エージェントが読み書き。 -メモリ共有と再利用:各エージェントが記憶や知識を共有する仕組み。 -オーケストレーション(制御):マスターエージェントやタスクマネージャが全体の進行を制御。 *参考 [#c6364fe2] https://speakerdeck.com/os1ma/imakosoxue-bullmbesunoaiezientoru-men-ji-ben-de-nasikumi-slash-kai-fa-turu-slash-you-ming-naossyalun-wen-noshao-jie