Googleのエージェントに関するホワイトペーパー(中国語版)
人間は複雑なパターン認識タスクの処理に優れています。しかし、人間はしばしばツールに頼ります。AIモデルは、結論を導き出す前に、書籍、Google検索、電卓などのツールで既存の知識を補完することができます。ちょうど…
査読者および寄稿者
Evan Huang
Emily Xue
Olcan Sercinoglu
Sebastian Riedel
Satinder Baveja
Antonio Gulli
Anant Nawalgaria
キュレーターと編集者
アントニオ・グッリ
Anant Nawalgaria
Grace Mollison
テクニカルライター
ジョーイ・ヘイモク
デザイナー
マイケル・ラングニング
得るグーグル知的体AgentホワイトペーパーのオリジナルPDFファイルQRコードをスキャンしてフォローし、返信には「20250108」と入力してください。
導入
人間は複雑なパターン認識タスクの処理に優れている。しかし、結論を出す前に、しばしばツールに頼る。人工的な知的モデルは、書籍、Google検索、電卓などのツールを使って既存の知識を補完することができます。人間と同じように、生成モデルも…人工的な知的モデルは、リアルタイム情報を取得したり、現実世界での行動を提案したりするためのツールを使用するように訓練することもできます。たとえば、モデルはデータベース検索ツールを活用して、顧客の購入履歴などの特定の情報にアクセスし、パーソナライズされたショッピングのおすすめを生成できます。また、ユーザーのクエリに基づいて、モデルはさまざまなAPI呼び出しを行い、同僚にメール返信を送信したり、ユーザーに代わって金融取引を完了したりすることもできます。これを行うには、モデルはさまざまな外部ツールにアクセスできるだけでなく、あらゆるタスクを自律的に計画および実行する能力も必要です。推論、論理、および外部情報へのアクセスというこれらの要素の組み合わせはすべて、生成プログラミングに関連しています。人工的な知的モデル間の相関関係は、代理モデルという概念、あるいはむしろ生成モデルを超越する概念を生み出す。人工的な知的モデル独立性プログラム。本ホワイトペーパーでは、これらの側面および関連分野について、より詳細な概要を説明します。
何がAgent
最も基本的な形では、生成式は人工的な知的エージェントとは、世界を観察し、利用可能なツールを使って目標を達成しようとするアプリケーションと定義できます。エージェントは自律的であり、特に適切な目標や目的を持っている場合は、人間の介入なしに独立して行動できます。エージェントは、目標を積極的に達成することもできます。人間からの明示的な指示がなくても、エージェントは最終目標を達成するために次に何をすべきかを推論できます。人工的な知的プロキシの概念は非常に一般的で、機能的です。強力しかし、このホワイトペーパーは発行当時、主にジェネレーティブプログラミングに焦点を当てていた。人工的な知的このモデルは、特定のタイプのエージェントを構築できる。
エージェントの内部動作を理解するために、まずその動作、行動、意思決定を左右する基本的な構成要素を紹介します。これらの構成要素の組み合わせは認知アーキテクチャと呼ばれ、これらの構成要素を組み合わせることで様々なアーキテクチャを実装できます。図1に示すように、コア機能に焦点を当てると、エージェントの認知アーキテクチャは3つの基本的な構成要素から成ります。
図1. プロキシの一般的なアーキテクチャと構成要素
エージェントの範囲内では、モデルは言語モデル(LM)を指し、エージェントのプロセスにおける中央集権的な意思決定者として使用されます。エージェントは、ReAct、Chain-of-Thought、Tree-of-Thoughtsなどの指示ベースの推論および論理フレームワークに従うことができる、任意のサイズ(小規模/大規模)の1つまたは複数のLMを使用できます。モデルは汎用的である可能性があります...マルチモーダルモデルは、特定のエージェントアーキテクチャに合わせて微調整できます。最適な運用パフォーマンスを実現するには、目的の最終アプリケーションに最適なモデルを使用する必要があります。理想的には、認知アーキテクチャで使用する予定のツールに関連付けられたデータ特性に基づいてトレーニングされたモデルを使用してください。モデルは通常、エージェントの特定の構成設定(ツールの選択、調整/推論設定など)に基づいてトレーニングされるわけではないことに注意してください。ただし、エージェントがさまざまなコンテキストで特定のツールや推論ステップを使用する例など、エージェントの機能を示す例を提供することで、モデルをさらに洗練させることができます。
基盤となるモデルは印象的なテキストや画像を生成できますが、外部世界とのインタラクションができないという制約があります。ツールはこの制約を克服し、エージェントが外部データやサービスとインタラクションできるようにすることで、基盤となるモデルの限界を超えたアクションを可能にします。ツールにはさまざまな形態があり、機能も異なります。複雑さは様々ですが、一般的にはGET、POST、PATCH、DELETEといった一般的なWeb APIメソッドに対応しています。例えば、ツールはデータベース内の顧客情報を更新したり、天気データを取得してエージェントがユーザーに提供する旅行のおすすめ情報に影響を与えたりすることができます。ツールを通して、エージェントは現実世界の情報にアクセスし、操作することができます。これにより、Retrieval Augmented Generation(RAG)などのより高度なシステムをサポートできるようになり、基盤となるモデル自体が達成できる範囲を超えてエージェントの機能を大幅に拡張できます。ツールについては後ほど詳しく説明しますが、最も重要なのは、ツールがエージェントの内部機能と外部世界との橋渡し役であり、より幅広い可能性を切り開くものであることを理解することです。
調整層は、エージェントが情報を受け取り、内部推論を実行し、その推論に基づいて次の行動や決定を下す方法を制御する循環的なプロセスを記述します。一般的に、このサイクルはエージェントが目標または停止点に到達するまで続きます。調整層の複雑さは、エージェントとそのタスクによって大きく異なります。サイクルによっては、決定ルールが含まれる場合もあります。単純計算、および一部のループには、追加のロジックを含む連鎖的なロジックが含まれる場合があります。機械学習アルゴリズム、あるいはその他の確率的推論手法の実装。エージェント協調層の実装については、認知アーキテクチャのセクションで詳しく説明します。
エージェントとモデルの違いをよりよく理解するには、以下のChafiを参照してください。
認知アーキテクチャ:エージェントの仕組み
忙しい厨房で働くシェフを想像してみてください。彼らの目標は、レストランのお客様においしい料理を提供することであり、そのためには計画、実行、調整という一連のプロセスが必要です。
- 彼らは、顧客の注文内容や、食品庫や冷蔵庫にある食材などの情報を収集する。
- 彼らは、先ほど収集した情報に基づいて内部的な推論を行い、どの料理や味付けが可能かを判断するだろう。
- 彼らは自分たちで料理の準備を始めた。野菜を刻み、味付けをし、肉を焼いたのだ。
このプロセスの各段階において、シェフは必要に応じて調整を行い、食材が不足したり顧客からのフィードバックがあったりすると計画を練り直し、過去の結果を基に次の行動を決定します。この情報収集、計画、実行、調整のサイクルは、シェフが目標を達成するために用いる独自の認知構造を表しています。シェフと同様に、エージェントも認知アーキテクチャを用いて、情報を反復的に処理し、情報に基づいた意思決定を行い、過去の出力に基づいて次の行動を練り直すことで、最終目標を達成することができます。エージェントの認知アーキテクチャの中核を成すのは、記憶、状態、推論、計画の維持を担う調整層です。この層は…速いキューエンジニアリングとその関連フレームワークの分野は、推論と計画を導き、エージェントが環境とより効果的に相互作用し、タスクを達成できるようにするために進化を続けています。キューエンジニアリングフレームワークと言語モデルのためのタスクプランニングに関する研究は急速に発展しており、さまざまな有望なアプローチが生まれています。これは網羅的なリストではありませんが、本レポートの発行時点で最も人気のあるフレームワークと推論手法の一部を以下に示します。
- ReActは、言語モデルがユーザーのクエリを推論し、それに基づいて行動するための思考プロセス戦略を提供するプロンプトエンジニアリングフレームワークです。文脈的な例の有無に関わらず、この戦略は有効です。ReActのプロンプトは、いくつかの最先端(SOTA)ベースラインを凌駕し、さらに性能を向上させることが実証されています。 LLM 人間同士の相互運用性と信頼性。
- 思考連鎖(CoT)は、中間段階を通じた推論を可能にするヒント生成エンジニアリングフレームワークです。CoTには、自己整合型、プロアクティブ型、マルチモーダル型など、いくつかのサブテクノロジーがあり、それぞれ特定のアプリケーションに応じて独自の利点と欠点があります。
- マインドツリー(ToT)は、探索的または戦略的に将来を見据えたタスクに適した、思考を促すエンジニアリングフレームワークです。思考連鎖を促す要素を一般化することで、モデルが言語モデルを用いて一般的な問題を解決する際の中間ステップとして、さまざまな思考連鎖を探索することを可能にします。
エージェントは、前述の推論手法の1つ以上を利用して、特定のユーザー要求に対して最適な次のアクションを選択できます。たとえば、ReActフレームワークを使用してユーザーからの問い合わせに対して適切なアクションとツールを選択するようにプログラムされたエージェントを考えてみましょう。イベントのシーケンスは次のようになります。
- ユーザーがエージェントにクエリを送信する
- エージェントがReActシーケンスを開始する
- エージェントは、モデルに次のReActステップとその対応する出力を生成するように促します。
- a. 問題点:クエリにおけるユーザー入力の問題に対するヒントの提供。
- b. 反省:モデルが次の行動を検討する。
- c. アクション:モデルは次に取るべきアクションを決定します。
- i. ここでツールを選択します。
- ii. 例えば、操作は[飛行、検索、コード、なし]のいずれかになります。最初の3つはモデルが選択できる既知のツールを表し、最後の1つは「ツールの選択なし」を表します。
- d. アクション入力: モデルは、ツールに提供する入力(もしあれば)を決定します。
- e. 観察結果:アクション/アクション入力シーケンスの結果
- i. この思考/行動/行動入力/観察は、必要に応じてN回繰り返すことができます。
図2. 調整層でReAct推論を使用するエージェントの例。
図2に示すように、モデル、ツール、およびエージェント構成は連携して、ユーザーの元のクエリに基づいて、根拠に基づいた簡潔な応答をユーザーに提供します。モデルは、事前知識(イリュージョン)に基づいて回答を推測できますが、ツール(フライング)を使用してリアルタイムの外部情報を検索します。モデルに提供されるこの追加情報により、モデルは現実世界のデータに基づいてより情報に基づいた意思決定を行うことができ、その情報を要約してユーザーにフィードバックします。
要約すると、エージェントの応答の質は、適切なツールを選択する能力やツール定義の完全性など、さまざまなタスクに対するモデルの推論能力と行動能力に直接的に結びついています。シェフが新鮮な食材を使って料理を作り、顧客のフィードバックに注意を払うように、エージェントも最適な結果を出すために、確かな推論と信頼できる情報に頼っています。次のセクションでは、エージェントが新しいデータと連携するさまざまな方法について探っていきます。
ツール:外の世界への鍵
言語モデルは情報処理に優れている一方で、現実世界を直接認識したり影響を与えたりする能力に欠けています。そのため、外部システムやデータとのやり取りが必要な状況では、その有効性が制限されます。ある意味で、言語モデルの品質は、学習データから何を学習するかに依存します。しかし、モデルにどれだけ多くのデータを与えても、外部世界とやり取りする基本的な能力は依然として欠けています。では、モデルがリアルタイムかつコンテキストを考慮した方法で外部システムとやり取りできるようにするにはどうすればよいでしょうか?関数、拡張機能、データストレージ、プラグインはすべて、モデルにこの重要な機能を提供する方法です。
ツールには様々な呼び方がありますが、それらは私たちの基盤となるモデルと外部世界をつなぐ役割を果たします。外部システムやデータとのこの接続により、エージェントはより多様なタスクを、より高い精度と信頼性で実行できるようになります。例えば、ツールを使うことで、エージェントはSMAFのホームページ設定を調整したり、カレンダーを更新したり、データベースからユーザー情報を取得したり、特定の指示に基づいてメールを送信したりすることができます。
本書の公開時点において、Google Modelsは拡張機能、関数、データストアという3種類の主要なツールと連携できます。エージェントにこれらのツールを提供することで、エージェントの持つ計り知れない可能性が解き放たれ、エージェントは世界を理解するだけでなく、世界に対して行動を起こすことも可能になり、無数の新たなアプリケーションと可能性への扉が開かれました。
拡張機能を理解する単純このアプローチは、APIとエージェント間の標準化された橋渡しとして捉え、エージェントが基盤となる実装に関係なく、APIをシームレスに実行できるようにすることです。たとえば、ユーザーがフライトを予約するのを支援するエージェントを作成するとします。フライト情報を取得するにはGoogle Flights APIを使用する必要があることはわかっていますが、エージェントにそのAPIエンドポイントを呼び出す方法がわかりません。
図3.プロキシは外部APIとどのように連携するのか?
一つのアプローチは、受信したユーザークエリを受け取り、関連情報を解析してからAPI呼び出しを行うカスタムコードを実行することです。例えば、航空券予約のユースケースでは、ユーザーが「オースティンからチューリッヒへの航空券を予約したい」と言うかもしれません。この場合、カスタムコードによる解決策では、API呼び出しを試みる前に、ユーザークエリから「オースティン」と「チューリッヒ」を関連エンティティとして抽出する必要があります。しかし、ユーザーが目的地都市を指定せずに「チューリッヒへの航空券を予約したい」と言った場合はどうなるでしょうか?必要なデータがないため、API呼び出しは失敗し、このような特殊なケースに対応するためにさらに多くのコードを実行する必要が生じます。このアプローチは拡張性に欠け、カスタムコードの実装範囲を超える状況ではエラーが発生しやすくなります。
より柔軟なアプローチとしては、拡張機能を使用する方法があります。拡張機能は、エージェントとアプリケーションインターフェース間のギャップを、以下の方法で埋めます。
- エージェントにAPIエンドポイントの使い方を教えるために、例を用いる。
- エージェントに、APIエンドポイント呼び出しを成功させるために必要なパラメータを伝えてください。
図4.拡張機能はエージェントを外部アプリケーションインターフェースに接続します。
拡張機能はエージェントとは独立して設計できますが、エージェントの設定の一部として提供する必要があります。実行時には、エージェントはモデルとインスタンスを使用して、ユーザーのクエリを解決するのに最適な拡張機能(存在する場合)を判断します。これは拡張機能の重要な利点を示しています。組み込みのインスタンス型により、エージェントはタスクに最適な拡張機能を動的に選択できます。
図5.プロキシ、拡張機能、およびアプリケーションプログラミングインターフェース(API)間の1対多の関係
ソフトウェア開発者がユーザーの問題を解決する際に使用するAPIエンドポイントを決定するのと同様に、ユーザーがフライトを予約したい場合、開発者はGoogle Flights APIを使用するかもしれません。ユーザーが最寄りのコーヒーショップの場所を知りたい場合、開発者はGoogle Maps APIを使用するかもしれません。同様に、エージェント/モデルスタックは、既知の拡張機能セットを使用して、ユーザーのクエリに最適な拡張機能を決定します。拡張機能のパフォーマンスを確認するには、Geminiアプリの[設定] > [拡張機能]に移動し、テストしたい拡張機能を有効にします。たとえば、Google Flights拡張機能を有効にして、Geminiに「来週の金曜日にオースティンからチューリッヒへのフライトを表示して」と尋ねることができます。
拡張機能の利用を簡素化するために、Googleは最小限の設定で利用できる既製の拡張機能をいくつか提供しています。速いプロジェクトに組み込んで活用してください。スニペット1のコードインタープリタ拡張機能を使用すると、自然言語による記述に基づいてPythonコードを生成して実行できます。
Python 导入 vertexai 导入 pprint project_id= "your_project_id" REGION = "us-central1" vertexai.init(project=PROJECT_ID, location=REGION) from vertexai.preview.extensions import Extension extension_code_interpreter= Extension.from_hub("code_interpreter") CODE_QUERY= """Write a python method to invert a binary tree in O(n) time.""" response= extension_code_interpreter.execute( operation_id = "generate_and_execute", operation_params = {"query":CODE_QUERY} ) print("Generated Code:") pprint.pprint({response['generated_code']}) #上述代码段将生成以下代码。生成代码: 类 TreeNode: def init(self,val=0,left=None,right=None): self.val = val self.left = left self.right= right def invert_binary_tree(root): """ 反转二叉树参数 根:二叉树的根 返回: 倒置二叉树的根。 """ 如果不是 root: 返回 None # 递归交换左右子代 root.left、root.right = invert_binary_tree(root.right), invert_binary_tree(root.left) 返回根 # 示例用法: # 构建二叉树样本 root = TreeNode(4) root.left = TreeNode(2) root.right = TreeNode(7) root.left.left = TreeNode(1) root.left.right = TreeNode(3) root.right.left = TreeNode(6) root.right.right= TreeNode(9) # 反转二叉树 inverted_root= invert_binary_tree(root) ```コードスニペット1. コードインタープリタ拡張機能は、Pythonコードを生成して実行できます。
要約すると、拡張機能はエージェントが外部世界を認識し、相互作用し、影響を与えるための手段を提供する。これらの拡張機能の選択と呼び出しはインスタンスによって制御され、インスタンスはすべて拡張機能構成のPAFIとして定義される。
ソフトウェアエンジニアリングにおいて、関数とは、特定のタスクを実行し、必要に応じて再利用できる独立したコードモジュールとして定義されます。ソフトウェア開発者は、プログラムを作成する際に、さまざまなタスクを実行するために多くの関数を作成します。また、関数aと関数bを呼び出すタイミング、および期待される入力と出力についても定義します。
プロキシの世界でも関数は同様に機能しますが、ソフトウェア開発者の代わりにモデルを使用できます。モデルは既知の関数セットを受け取り、その仕様に基づいて、各関数をいつ使用するか、そしてどのようなパラメータが必要かを決定します。関数は拡張機能とはいくつかの点で異なりますが、最も明白な違いは…
1. このモデルは関数とそのパラメータを出力しますが、リアルタイムAPIは呼び出しません。
2. 機能はクライアント側で実行され、拡張機能はプロキシ側で実行されます。
Google Flightsを別の例として挙げると、単純機能設定は図7の例と同様である可能性があります。
図7.関数は外部APIとどのように連携するのか?
ここで重要な違いは、機能もエージェントもGoogle Flights APIと直接やり取りしないという点です。では、API呼び出しは具体的にどのように行われるのでしょうか?
図8および図9に示すように、関数を使用することで、実際のアプリケーションインターフェイスエンドポイントへの呼び出しのロジックと実行がプロキシからクライアントアプリケーションにオフロードされます。これにより、開発者はアプリケーションのデータフローをよりきめ細かく制御できるようになります。開発者が拡張機能ではなく関数を使用することを選択する理由は数多くありますが、一般的な使用例としては次のものが挙げられます。
- アプリケーションプログラミングインターフェース(API)呼び出しは、直接プロキシアーキテクチャプロセスとは別のアプリケーションスタックのレイヤー(ミドルウェアシステム、フロントエンドフレームワークなど)で行う必要があります。
- セキュリティまたは認証上の制限により、プロキシがアプリケーションインターフェースを直接呼び出すことができない(例えば、アプリケーションインターフェースがインターネットに公開されていない、またはプロキシインフラストラクチャがそれにアクセスできない)。
- プロキシがリアルタイムのAPI呼び出しを行うことを妨げる時間または操作順序の制約(バッチ操作、手動によるループ内レビューなど)。
- アプリケーションプロキシでは実行できないAPIレスポンスには、追加のデータ変換ロジックが必要です。例えば、APIエンドポイントには返される結果の数を制限するフィルタリングメカニズムが用意されていない場合を考えてみましょう。クライアント側の関数を使用することで、開発者はこれらの変換を実行するためのより多くの機会を得ることができます。
- 開発者は、アプリケーションインターフェースのエンドポイント(例えば、関数呼び出しはアプリケーションインターフェースの「スタブ」のようなもの)に追加のインフラストラクチャを導入することなく、プロキシ開発を繰り返したいと考えています。
図8に示すように、内部アーキテクチャの観点から見ると、2つの方法の違いは微妙ですが、追加の制御と外部インフラストラクチャからの分離により、関数呼び出しは開発者にとって魅力的な選択肢となります。
図8. 拡張機能と関数呼び出しにおけるクライアント側とプロキシ側の制御区分。
モデルは、エンドユーザー向けの複雑なクライアント側実行フローを処理する関数を呼び出すために使用できます。この場合、エージェント開発者は、API実行を管理するために言語モデルを使いたくないかもしれません(これは拡張機能の場合に当てはまります)。次の例を見てみましょう。エージェントは、休暇を予約したいユーザーとやり取りする旅行コンシェルジュとしてトレーニングされています。私たちの目標は、エージェントが都市のリストを生成し、それをミドルウェアアプリケーションで使用して、ユーザーの旅行計画に必要な画像やデータなどをダウンロードできるようにすることです。ユーザーは次のように言うかもしれません...
家族とスキーに行きたいのですが、どこに行けばいいのかわかりません。このモデルへの典型的なヒントは、次のような出力につながる可能性があります。もちろん、家族でのスキー旅行に検討できる都市のリストは次のとおりです。
- アメリカ合衆国コロラド州クレストバット
- カナダ、ブリティッシュコロンビア州、ウィスラー
- スイス、ツェルマット
上記の出力には必要なデータ(都市名)が含まれていますが、その形式は解析に適していません。関数呼び出しによって、モデルに構造化された形式(JSONなど)で出力をフォーマットするように学習させることで、他のシステムが解析しやすくなります。同じユーザー入力に対して、この関数が出力するJSONの例は次のようになります。
コードスニペット5。都市のリストとユーザーの好みを表示するための関数呼び出しペイロードの例。
このJSONペイロードはモデルによって生成され、クライアントサーバーに送信されて、必要な処理を実行します。この例では、Google Places APIを呼び出してモデルから提供された都市を取得し、画像を検索した後、フォーマットされたリッチコンテンツとしてユーザーにフィードバックします。図9のシーケンス図は、上記のインタラクションプロセスを詳細に示しています。
図9.関数呼び出しのライフサイクルを示すシーケンス図。
図9の例では、モデルを使用して、クライアント側のユーザーインターフェースがGoogle Places APIを呼び出すために必要なパラメータを「入力」する方法を示しています。クライアント側のユーザーインターフェースは、返された関数でモデルから提供されるパラメータを使用して、実際のAPI呼び出しを管理します。これは関数呼び出しのユースケースの1つにすぎませんが、他にも検討する価値のあるシナリオが多数あります。例えば、...
- 言語モデルにコードで使用する関数を提案させたいが、コードに認証情報を含めたくない。関数呼び出しは関数を実行するわけではないので、コードに証明書や関数情報を含める必要はありません。
- 非同期処理が実行されているため、数秒以上かかる場合があります。関数呼び出しは非同期処理であるため、このような状況は適切に処理されます。
- 関数呼び出しとその引数を生成したシステムとは異なるデバイス上で、その関数を実行したい場合。
関数に関して覚えておくべき重要な点は、関数によって開発者はAPI呼び出しの実行だけでなく、アプリケーション全体のデータフローもより詳細に制御できるようになるということです。図9の例では、開発者はAPI情報をエージェントに返さないことを選択しました。これは、この情報がエージェントの今後の動作にとって重要ではないためです。しかし、アプリケーションのアーキテクチャによっては、外部API呼び出しデータをエージェントに返して、今後の推論、ロジック、および運用上の選択に影響を与えることが理にかなっている場合もあります。最終的には、アプリケーション開発者は、特定のアプリケーションに基づいて適切なアプローチを選択する必要があります。
機能サンプルコード
スキーリゾートのシナリオで上記の出力を実現するために、gemini-1.5-flash-001 モデルを使用して、この目標を可能にするコンポーネントを構築しましょう。
まず、display_cities 関数を次のように定義します。単純Pythonのメソッド。
コードスニペット6。都市のリストを表示するPythonメソッドの例。
次に、モデルをインスタンス化し、ツールを構築した後、ユーザーのクエリとツールをモデルに渡します。以下のコードを実行すると、コードスニペットの下部に示されている出力が得られます。
コードスニペット7. ユーザークエリをモデルに送信し、関数呼び出しを可能にするツールを作成します。
つまり、関数は単純この明確なフレームワークにより、アプリケーション開発者はデータフローとシステム実行をきめ細かく制御できると同時に、エージェント/モデルを効果的に活用して重要な入力を生成できます。開発者は、特定のアプリケーションアーキテクチャ要件に応じて、エージェントを外部データを返すことで「ループに参加させる」か、エージェントを完全に省略するかを選択できます。
言語モデルを、トレーニングデータが豊富に揃った図書館だと想像してみてください。しかし、図書館が常に新しい本を収集するのとは異なり、このモデルは静的であり、初期トレーニングで得られた知識のみを保存します。現実世界の知識は常に進化しているため、これは課題となります。データストレージは、より動的で…最新のこの情報は、この制約に対処し、モデルの応答が常に事実と関連性に基づいていることを保証します。開発者がモデルに少量の追加データ(スプレッドシート形式やPDF形式など)を提供する必要がある一般的なシナリオを考えてみましょう。
図10.エージェントは構造化データと非構造化データとどのように相互作用するのか?
データストレージを使用することで、開発者は追加データを元の形式でエージェントに提供できるため、時間のかかるデータ変換、モデルの再学習、微調整が不要になります。データストレージは、受信したドキュメントをベクトルデータベース埋め込みのセットに変換します。エージェントはこの埋め込みを使用して、次のステップやユーザーへの応答に必要な情報を抽出できます。
図11.データストレージは、エージェントをさまざまな種類の新しいリアルタイムデータソースに接続します。
生成式において人工的な知的プロキシのコンテキストでは、データストレージは通常、ベクトルデータベースの形で実装され、開発者はプロキシが実行時にそれにアクセスすることを想定しています。ここではベクトルデータベースの詳細には触れませんが、重要な点は、ベクトルデータベースはデータをベクトル埋め込みとして格納するということです。ベクトル埋め込みとは、高次元のベクトル、つまり数学的な埋め込みのことです。
提供されたデータの表現。データストレージと言語モデルを組み合わせた最新の例の1つは、検索拡張型言語モデルの実装です。
生成アルゴリズム(RAG)は、これらのアプリケーションの基盤となっています。これらのアプリケーションは、モデルがさまざまな形式のデータにアクセスできるようにすることで、基本的なトレーニングデータを超えてモデルの知識の幅と深さを拡大することを目的としています。
- ウェブサイトコンテンツ
- PDF、Word文書、CSV、スプレッドシートなどの構造化データ形式。
- HTML、PDF、TXTなどの形式の非構造化データ。
図12.エージェントとデータストア間の1対多の関係。データストアは、さまざまな種類の事前インデックス付きデータを表現できる。
各ユーザー要求とプロキシ応答ループの基本的なプロセスモデリングは、一般的に図13に示されています。
- ユーザーからのクエリは、クエリ埋め込み情報を生成するために埋め込みモデルに送信されます。
- 次に、SCaNNなどのマッチングアルゴリズムを使用して、クエリ埋め込みとベクトルデータベースの内容を照合します。
- 一致したコンテンツは、ベクトルデータベースからテキスト形式で取得され、エージェントに送り返されます。
- エージェントはユーザーからのクエリと取得したコンテンツを受け取り、それに基づいて応答またはアクションを策定する。
- ユーザーに最終返信を送信する
図13. RAGベースのアプリケーションにおけるユーザー要求とプロキシ応答のライフサイクル
最終的なアプリケーション結果として、エージェントはベクトル検索を用いてユーザーのクエリを既知のデータストアと照合し、生データを取得して、さらなる処理のために調整層とモデルに提供します。次のステップとしては、ユーザーに最終的な回答を提供するか、あるいは追加のベクトル検索を実行して結果をさらに絞り込むことが考えられます。
図14は、ReActの推論/計画機能を使用してRAGを実装するエージェントとの対話の例を示しています。
要約すると、拡張機能、関数、データストアは、エージェントが実行時に使用できる複数の異なるツールタイプを構成します。各ツールにはそれぞれ独自の目的があり、エージェント開発者の裁量で、組み合わせて使用することも、個別に使用することもできます。
ターゲット学習によってモデルのパフォーマンスを向上させる
モデルを効果的に活用する上で重要な側面は、出力生成時に適切なツールを選択できる能力です。特に、ツールを大規模に運用する場合、この能力は不可欠です。一般的なトレーニングはモデルがこの能力を身につけるのに役立ちますが、実際のシナリオでは、トレーニングデータ以上の知識が必要となることがよくあります。これは、基本的な料理スキルと特定の料理を極めることの違いに例えることができます。どちらも基本的な料理の知識が必要ですが、後者はより繊細な結果を得るために、的を絞った学習が必要となります。
モデルがこの種の知識を獲得するのを支援するために、いくつかの方法が利用可能です。
- 文脈学習このアプローチでは、推論中に汎用モデルにヒント、ツール、およびいくつかの例を提供することで、特定のタスクにおいてこれらのツールをどのように、いつ使用するかを「その場で」学習できるようにします。ReActフレームワークは、このアプローチを自然言語処理に適用した例です。
- 検索に基づく文脈学習この技術は、外部ストレージから最も関連性の高い情報、ツール、および関連する例を取得することで、モデルのヒントを動的に生成します。たとえば、Vefiex... 人工的な知的拡張機能内の「サンプルストレージ」、または前述のRAGベースのデータストレージ。
- 微調整に基づく学習このアプローチでは、推論を行う前に、具体的な事例の大規模なデータセットを使用してモデルをトレーニングします。これにより、モデルはユーザーからの問い合わせを受ける前に、いつ、どのようにcefiainツールを適用すべきかを理解できるようになります。
それぞれの学習方法をより深く理解するために、料理のたとえ話をもう一度考えてみましょう。
- シェフが顧客から特定のレシピ(ヒント)、主要な材料(関連する道具)、そしていくつかの試食料理を受け取ったと想像してみてください。限られた情報とシェフの一般的な料理知識に基づいて、レシピと顧客の好みに最も合う料理を作る方法を考え出す必要があります。これが文脈学習です。
- さて、食材や料理本(例や道具)が豊富に揃ったパントリー(外部データストレージ)を備えたキッチンで料理人が腕を振るう場面を想像してみましょう。料理人はパントリーから食材や料理本を動的に選択し、顧客のレシピや好みに合わせてより適切に調整することができます。このようにして、料理人は既存の知識と新たな知識を活用し、より洗練された、より高度な料理を生み出すことができるのです。これは、情報検索に基づくコンテキストベースの学習です。
- 最後に、シェフを学校に戻して新しい料理、あるいは一連の料理(特定の例の大規模なデータセットで事前学習済み)を学ばせることを想像してみましょう。これにより、シェフは将来の顧客からのレシピをより深く理解した上で対応できるようになります。このアプローチは、シェフに特定の料理(知識領域)において卓越した腕前を身につけさせたい場合に理想的です。これこそが、ファインチューニング型学習の本質です。
これらの手法はそれぞれ、速度、コスト、遅延の面で長所と短所があります。しかし、これらの技術を単一のプロキシフレームワークに統合することで、それぞれの長所を最大限に活用し、短所を最小限に抑え、より大きなメリットを実現できます。強力より適応性の高いソリューション。
LangChainのプロキシを使用する速い stafi
実際の実行可能なプロキシ操作の例を示すために、LangChainライブラリとLangGraphライブラリを使用してプロキシを構築します。速いプロトタイプ。これらは人気のあるものです。オープンソースこのライブラリを使用すると、論理、推論、ツール呼び出しのシーケンスを「連鎖」させることで、ユーザーのクエリに応答するクライアントエージェントを構築できます。gemini-1.5-flash-001 モデルといくつかの...単純図8に示すように、ツールはユーザーの多段階のクエリに回答するために使用されます。
使用したツールは、SerpAPI(Google検索用)とGoogle Places APIです。コードスニペット8のプログラムを実行すると、コードスニペット9に例の出力が表示されます。
コードスニペット8. LangChainとLangGraphに基づくプロキシの例とツール
コードセグメント9。図8のプログラムの出力。
これはかなり単純この例は、モデル、連携、ツールといった基本的な構成要素がどのように連携して特定の目標を達成するかを示しています。最後のセクションでは、これらの構成要素がGoogle規模のホスティング製品(Vefiexなど)にどのように統合されているかを探ります。 人工的な知的これは、プロキシゲームとジェネレーティブゲームの要素を組み合わせたものです。
Vefiexを使用する 人工的な知的エージェントの生産アプリケーション
このホワイトペーパーではエージェントのコアコンポーネントについて解説していますが、実運用可能なアプリケーションを構築するには、エージェントをユーザーインターフェース、評価フレームワーク、継続的改善メカニズムなどの他のツールと統合する必要があります。GoogleのVekex... 人工的な知的このプラットフォームは、上記で述べたすべての重要な要素を網羅した、完全に管理可能な環境を提供し、プロセスを簡素化します。開発者は自然言語インターフェースを利用できます。速いユーザーは、エージェントの主要要素(目標、タスク指示、ツール、タスク委任サブエージェント、例など)を定義することで、目的のシステム動作を容易に構築できます。さらに、このプラットフォームには、テスト、評価、エージェントのパフォーマンス測定、デバッグ、および開発されたエージェントの全体的な品質向上に役立つ開発ツール一式が付属しています。これにより、開発者はエージェントの構築と改良に集中でき、プラットフォーム自体が複雑なインフラストラクチャ、デプロイ、およびメンテナンスを管理します。
図15に、Vefiexの概略図を示します。 人工的な知的Vefiexを使用したプラットフォーム上に構築されたプロキシアーキテクチャの例。 Agent Builder、Vefiex Extensions、Vefiex AI Agent ビルダー、関数呼び出し、Vefiexサンプルストレージなど、さまざまな機能が含まれています。このアーキテクチャは、多くの実用アプリケーションに必要な幅広いコンポーネントを網羅しています。
図15. Vefiexに基づく 人工的な知的プラットフォーム上に構築されたエンドツーエンドのプロキシアーキテクチャの例
弊社の公式ドキュメントから、この既成プロキシアーキテクチャのサンプルをお試しいただけます。
本ホワイトペーパーでは、生成式について解説します。人工的な知的エージェントの基本的な構成要素、その構成、そして認知アーキテクチャの形でそれらを実装するための効果的な方法。このホワイトペーパーの主な内容は以下のとおりです。
- エージェントは、1つまたは複数の言語モデルを活用して、状態遷移を実行するタイミングと方法を決定したり、外部ツールを使用して、モデルが単独では実行が困難または不可能な多数の複雑なタスクを実行したりすることができる。
- エージェントの動作の中核を成すのは、推論、計画、意思決定を構築し、エージェントの行動を導くための認知アーキテクチャである調整層です。ReAct、Chain-of-Thought、Tree-of-Thoughtsなどの様々な推論手法は、調整層に情報を受け取り、内部推論を実行し、情報に基づいた意思決定や応答を生成するためのフレームワークを提供します。
- 拡張機能、関数、データストアなどのツールは、エージェントが外部世界にアクセスするための鍵であり、外部システムとの連携や、トレーニングデータを超えた知識の獲得を可能にします。拡張機能は、エージェントと外部アプリケーションプログラミングインターフェース(API)間のギャップを埋め、API呼び出しの実行やリアルタイム情報の取得を可能にします。また、クライアント側で実行可能な関数パラメータを生成します。データストアは、エージェントが構造化データまたは非構造化データにアクセスできるようにし、データ駆動型アプリケーションを実現します。
エージェント技術の未来は、刺激的な進歩を約束しており、私たちはその可能性のほんの一端に触れたに過ぎません。ツールがより高度化し、推論能力が強化されるにつれて、エージェントはますます複雑な問題を解決できるようになるでしょう。さらに、「エージェントチェーン」という戦略的なアプローチは今後も活用され続けるでしょう。特定の分野やタスクに特化したエージェントを組み合わせることで、さまざまな業界や問題領域で優れた成果を上げることができる「ハイブリッドエージェント体験」のアプローチを構築できます。
複雑なエージェントアーキテクチャを構築するには、反復的なアプローチが必要であることを覚えておくことが重要です。実験と改良は、特定のビジネスケースや組織のニーズに対するソリューションを見つけるための鍵となります。エージェントアーキテクチャの基盤となるモデルは生成型であるため、同じエージェントは二つと存在しません。しかし、各基本コンポーネントの強みを活用することで、言語モデルの機能を拡張し、現実世界で価値を生み出す、影響力のあるアプリケーションを作成できます。
- Shafran, I.、Cao, Y. 他、2022、「ReAct: 言語モデルにおける推論と行動のコラボレーション」。入手先:hflps://arxiv.org/abs/2210.03629
- Wei, J.、Wang, X. 他、2023、「思考の連鎖」 Prompting は大規模言語モデルにおける推論を引き出す。参照 hflps://arxiv.org/pdf/2201.11903.pdf。
- Wang, X. et al., 2022、「自己一貫性により言語モデルにおける思考連鎖推論が改善される」を参照。 hflps://arxiv.org/abs/2203.11171。
- Diao, S. et al., 2023, "Active Prompt「大規模言語モデルのための思考連鎖を用いた研究」を参照。 hflps://arxiv.org/pdf/2302.12246.pdf.
- Zhang, H. et al., 2023、「言語モデルにおけるマルチモーダル思考連鎖推論」を参照。 hflps://arxiv.org/abs/2302.00923.
- Yao, S. 他、2023、「思考の樹:大規模言語モデルを用いた問題の慎重な解決」。入手先:hflps://arxiv.org/abs/2305.10601.
- Long, X., 2023、「大規模言語モデル誘導型思考ツリー」を参照。 hflps://arxiv.org/abs/2305.08291.
- Google。Google Geminiアプリ。URL:hflp://gemini.google.com。
- Swagger。OpenAPI仕様。URL:hflps://swagger.io/specification/。
- Xie, M., 2022、「状況学習はどのように機能するのか?従来の指導付き学習との違いを理解するためのフレームワーク」。[記事/参考文献へのリンク]を参照。 hflps://ai.stanford.edu/blog/understanding-incontext/。
- Google Research。「ScaNN(スケーラブルな最近傍探索)」。詳しくは[Google Researchへのリンク]をご覧ください。 hflps://github.com/google-research/google-research/tree/master/scann.
- LangChain.LangChain.(詳細については、以下を参照してください。)hflps://python.langchain.com/v0.2/docs/introduction/。
得るグーグル知的体AgentホワイトペーパーのオリジナルPDFファイルQRコードをスキャンしてフォローし、返信には「20250108」と入力してください。