MongoDB をVercel AI SDK と統合して、セッション全体に永続するエージェントのメモリを構成できます。このチュートリアルでは、 MongoDBメモリ プロバイダーを作成し、メモリを保存して呼び出すエージェントを構築し、エージェントを2 回実行して、以前の実行から情報を取得したことを示します。
このチュートリアルでは、次のタスクを実行します。
環境を設定します。
永続的なメモリを持つエージェントをビルドします。
エージェントを実行し、出力を確認します。
バックグラウンド
Vercel AI SDK は、 AIアプリケーションとエージェントを構築するための TypeScriptフレームワークです。 @mongodb-developer/Vercel-AI-memoryパッケージは、SDK で構築されたエージェント用のMongoDBベースの永続メモリを提供します。パッケージにはメモリが 5 階層に保存されています。メモリ階層の詳細については、 「 MongoDBと Vercel AI SDK の統合 」を参照してください。
このチュートリアルでは、パッケージがエージェントに公開するメモリ ツール コマンドを使用します。このモデルでは、各実行の開始時に交換履歴を復元するために session_recent コマンドを呼び出し、新しい情報を保存するには session_append コマンドと semantic_save コマンドを呼び出します。
前提条件
このチュートリアルを完了するには、次のリソースが必要です。
次のいずれかのMongoDBクラスター タイプ
MongoDB バージョン 6.0.11 を実行している Atlas クラスター、7.0.2以降。IP アドレスが Atlas プロジェクトのアクセスリストに含まれていることを確認します。
Python と Docker を使用して作成されたローカル Atlas 配置。
atlas-local-lib-py(pip install atlas-local-lib-py) をインストールして、ローカル配置をプログラムで作成および管理します。詳細については、atlas-local-lib-py リポジトリを参照してください。検索とベクトル検索がインストールされた MongoDB Community クラスター。
OpenAI APIキー。APIリクエストに使用できるクレジットを持つ OpenAI アカウントが必要です。OpenAI アカウントの登録の詳細については、OpenAI APIウェブサイト を参照してください。
Voyage AI API キー。API キーを作成するには、Voyage AI モデル API キーの管理を参照してください。
このチュートリアルでは、埋め込みリクエストを MongoDB の Vyage AIエンドポイントにルーティングするベースURLを構成します。投票AIからAPIキーを直接生成した場合は、メモリ
baseURLプロバイダー ステップで指定された オプションを削除します。Node.jsとnpm.
環境を設定する
このセクションでは、必要な依存関係のインストール、環境変数の設定、プロジェクトファイルの作成によって環境を準備します。
依存関係をインストールします。
ターミナルで次のコマンドを実行して、vercel-ai-mongodb-project という名前の新しいディレクトリを作成し、必要な依存関係をインストールします。
mkdir vercel-ai-mongodb-projectcd vercel-ai-mongodb-projectnpm init -ynpm install @mongodb-developer/vercel-ai-memory ai mongodb zod @ai-sdk/openai voyage-ai-provider dotenvnpm install --save-dev tsx @types/node環境変数を設定します。
お使いの vercel-ai-mongodb-project ディレクトリ内で、.env ファイルを作成し、次のコードを追加します。
OPENAI_API_KEY="<openai-api-key>"VOYAGE_API_KEY="<voyage-api-key>"MONGODB_URI="<connection-string>"<connection-string> を Atlas クラスターまたはローカル Atlas 配置の接続文字列に置き換えます。
接続stringには、次の形式を使用する必要があります。
mongodb+srv://<db_username>:<db_password>@<clusterName>.<hostname>.mongodb.net重要:接続文字列にデータベースユーザーの認証情報が含まれていることを確認します。接続文字列の検索方法の詳細については、クライアント ライブラリ経由でクラスターに接続する を参照してください。
接続stringには、次の形式を使用する必要があります。
mongodb://localhost:<port-number>/?directConnection=true詳細については、「接続文字列 」を参照してください。
プロジェクト ファイルを作成する。
vercel-ai-mongodb-projectディレクトリに、main.ts という名前のファイルを作成します。このファイルに次のコードを追加して、環境変数をロード、必要なモジュールをインポートします。
import 'dotenv/config'import { createMongoDBMemory } from '@mongodb-developer/vercel-ai-memory'import { createVoyage } from 'voyage-ai-provider'import { openai } from '@ai-sdk/openai'import { ToolLoopAgent } from 'ai'後の手順では、このファイルにコードを追加して、メモリプロバイダーを作成し、エージェントを構築します 。
エージェントを構築する
このセクションでは、 MongoDBメモリプロバイダーを作成し、プロバイダーを使用してメモリを保存および検索するエージェントを構築し、エージェントを実行するコードを追加します 。
メモリ プロバイダーを作成します。
次のコードを main.tsファイルに追加して、Voyage AIクライアントと、Voyage AI埋め込みモデルを使用するメモリプロバイダーを作成します。
const voyage = createVoyage({ apiKey: process.env.VOYAGE_API_KEY, baseURL: 'https://ai.mongodb.com/v1',})
const mongodbMemory = createMongoDBMemory({ uri: process.env.MONGODB_URI!, embedder: voyage.embeddingModel('voyage-4'),})重要
Atlas で作成する投票AI APIキーには、 baseURL オプションで指定されているMongoDB の投票AIエンドポイントが必要です。投票AIからAPIキーを直接生成した場合は、baseURL オプションを削除します。
プロバイダーは最初の使用時にMongoDBに接続し、agent_memory データベースを作成します。次に、各メモリ階層に対して 1 つのコレクションをデータベースに追加します。プロバイダーは、セマンティック呼び出しが必要なMongoDB ベクトル検索インデックスも作成します。プロバイダーが作成するコレクションとインデックスの詳細については、 Vercel AI SDK参照の「 コレクションとインデックス 」を参照してください。
エージェントを作成します。
次のコードを main.tsファイルに追加して、メモリ ツールの範囲が 1 人のユーザーとセッションに限定されるエージェントを作成します。
const agent = new ToolLoopAgent({ model: openai('gpt-4.1'), tools: mongodbMemory({ userId: 'alice', sessionId: 'sess-001' }), instructions: `You are an assistant with persistent memory. At the start of every conversation, call session_recent to restore context and semantic_search to recall facts about the user. Save each conversation turn with session_append. Save important facts about the user with semantic_save.`,})指示は、呼び出すメモリ コマンドをモデルに指示します。 userId と sessionId の値は、エージェントが保存および検索するメモリを範囲指定します。
エージェントを実行するコードを追加します。
次のコードを main.tsファイルに追加して、コマンドラインからエージェントにプロンプトを渡し、応答を出力して、 MongoDB接続を閉じます。
async function main() { const prompt = process.argv[2]
if (!prompt) { console.error('Usage: npx tsx main.ts "<your message>"') process.exit(1) }
const result = await agent.generate({ prompt }) console.log('[agent]:', result.text)
await mongodbMemory.close()}
main().catch((error) => { console.error(error) process.exit(1)})エージェントの実行
このセクションでは、main.tsファイルを実行し、エージェントに情報を提供します。次に、エージェントを再度実行し、この情報を呼び出すようにプロンプトを再度実行します。
エージェントに情報を呼び出すように要求します。
エージェントを再度実行し、エージェントに以前の情報を呼び出すよう要求する次のプロンプトを渡します。
npx tsx main.ts "What do I study, and where?"出力は次のようになります。
[agent]: You are a marine biologist who studies emperor penguins inAntarctica.エージェントはメモリを使用してプロンプトに応答します。どちらの実行でも同じ userId と sessionId 値が渡されるため、モデルは 2 回目の実行の開始時に session_recent コマンドと semantic_search コマンドを呼び出します。これらの コマンドは、 MongoDBに保存された最初の実行が保存した通信とメモリを復元します。
注意
MongoDB ベクトル検索インデックスは、最初の実行後に非同期にビルドされます。エージェントが情報を呼び出さない場合は、数秒待ってからコマンドを再度実行します。
次のステップ
完全なパラメーター参照、保持およびトポロジーオプション、およびすべてのメモリ ツール コマンドなど、メモリ プロバイダーの詳細については、 「 MongoDBと Vercel AI SDK の統合 」を参照してください。
Vercel AI SDK の詳細については、 Vercel AI SDK のドキュメントを参照してください。