🧠

How to Build Your Own AI Agent(ステートフルなエージェント)

に公開

はじめに

https://www.linkedin.com/feed/update/urn:li:activity:7284473486956212224/
この記事を読んで、メモを残したいと思います。

記憶(memory)を持つエージェントによって、個人の過去、嗜好を反映したり、より複雑なワークフローに対応できるという話です。

前提として、ZepというAgentのメモリー部分を担当するサービスがあります。
https://www.getzep.com/

====原文の翻訳====
AIエージェントは通常、次の2つのカテゴリに分類されます。

メモリを持たないエージェント — Stateless Agent
毎回白紙の状態で、即時の入力にのみ反応します。

メモリを持つエージェント - Statefull Agent
過去のインタラクションを活用して、コンテキストを認識し、よりスマートで、高度にパーソナライズされたレスポンスを提供することで、指数関数的に強力になり、非常に複雑なワークフローに対応できます。

"𝗠𝗲𝗺𝗼𝗿𝘆 𝗶𝘀 𝘄𝗵𝗲𝗿𝗲 𝘁𝗵𝗲 𝗺𝗮𝗴𝗶𝗰 𝗵𝗮𝗽𝗽𝗲𝗻𝘀."
記憶は魔法が起こる場所です。

ここでは、メモリー→ https://lnkd.in/gejyFrF5 に関する素晴らしい読み物をご紹介します

上記の Ken Collins と Zep AI (YC W24) による記事では、次の点について素晴らしい説明を提供しています。

🔹 メモリのしくみ
🔹 メモリをAIエージェントに統合する方法

=====

メモリを使用してAIエージェントを構築する手順

  1. AIエージェントの目的を定義する
    まず、パーソナルアシスタントやカスタマーサービスボットなど、その役割を明確にし、処理する必要のあるデータ(ユーザープロファイルやタスク履歴など)を決定します。

  1. LLMモデルを選択する
    要件に沿ってLLM を選択します (例:OpenAI、Hugging Face)。

  1. メモリ要件を計画する
    短期記憶 (会話コンテキスト) と長期記憶 (永続的なユーザー知識) の両方を考慮して設計します。

  1. Zep をメモリ管理に統合
    Zep のフレームワークを使用して、メモリ、セッション、ナレッジグラフを管理します。

  1. ユーザープロファイルとセッションの構築
    ユーザー ID を作成し、セッションの継続性を維持して、シームレスな対話を実現します。

  1. ワークフローの設計
    メモリ管理のプロセスを確立します。情報に基づいた応答のためにメモリを取得、更新、および使用するワークフローを定義します。

  1. ナレッジグラフを組み込む
    Zepのナレッジグラフを使用して、関係を保存およびクエリし、応答を充実させます。

  1. コンテキストプロンプトの開発とテスト
    メモリとナレッジグラフを動的に使用するプロンプトを作成して、関連性のある安全な応答を実現します。

  1. データの保護
    堅牢なセキュリティ対策を実装し、データアクセスを制限します。

  1. 監視、改善、スケーリング
    分析とフィードバックを使用して、メモリ システムを改良し、機能をスケーリングします。

これらの手順は、ステートフルな AI エージェントを構築するための高レベルのガイドを提供します。

Zep Agentic Memory(共有メモリ)

エージェントの大きな動きと記憶領域をZepが担当するよという絵です。

引用:
https://www.unremarkable.ai/llama-chat-history-with-zeps-ai-memory-knowledge-graph/?utm_source=linkedin&utm_medium=nsiapno&utm_campaign=zep_pilot&utm_term=social&utm_content=zep-ai-memory-blog

Plan(計画) – プランニング専門モデル: ユーザーの目標や質問を解析し、解決のための方針や手順を立案します。このモデルの出した計画は共有メモリに記録され、他のモジュールと共有されます。

Act(実行) – 実行/検索専門モデル: 計画に基づき、必要な情報の検索やツールの使用などアクションを行います。例えば外部のデータベース問い合わせや計算などを担当するモジュールです。実行結果(取得した情報や中間データ)は共有メモリに書き込まれます。

Reflection(内省) – 検証・内省専門モジュール: 現在の計画、実行結果、過去の対話履歴など共有メモリ上の情報を総合的に読み込み、内容の矛盾がないかチェックしたり、追加すべき質問やプラン修正点がないか検討します。必要に応じて分析結果や修正指示をメモリに追記します。

Outputs(出力生成) – 回答生成専門モデル: 最終的な回答やアウトプットを組み立てるモジュールです。共有メモリに蓄積されたすべての関連情報(ユーザーの要望、計画、実行結果、内省の結論など)を参照し、ユーザーへの回答文や所定のフォーマットの結果を生成します。完成した出力は結果としてユーザーに返されます(Results)。

上記のように各ステップが進行し、その都度共通のメモリ(ナレッジグラフ)が更新・参照される形になります。例えばPlanモジュールが立てたプランはメモリ上に保存されるため、Actモジュールはそれを読み取って動作できます。さらにActモジュールが得た結果も同じメモリに蓄積されるので、Reflectionモジュールはプランと結果の両方を踏まえて検証・分析できます。そして最終的にOutputsモジュールがメモリ上のあらゆる情報を踏まえて回答を作ります。

各モジュールは共通メモリを介して連携しています。
Agenticな仕組みを作るとなると、役割ごとにモジュール化(≒Agent化)されることが多いと思います。
仮に将来、新たな「専門家」ステップ(例えば結果を二重チェックするモデルなど)を追加したくなっても、共有メモリにアクセスするインターフェースさえ整えておけば既存の流れを大きく崩さずに組み込むことができます。つまり拡張性や保守性の面でも有利です。

共有メモリを使うことはチームのメンバー全員が見ることのできるホワイトボードや共有ノートにそれぞれが情報を書き込み、それを見ながら各自の作業を進めるイメージです。

僕は全くZepとは関係ないのですが、今後のエージェント開発には共有メモリが必要だろうということでご紹介でした。

ヘッドウォータース

Discussion