AI エージェント向け: ドキュメントインデックスは https://www.mongodb.com/ja-jp/docs/llms.txt で利用できます。すべてのページの markdown バージョンは、いずれかの URL パスに .md を追加することで利用できます。

MongoDBと Fireworks AI の統合

MongoDB は、オープンソース モデルの推論および訓練プラットフォームである Fireworks AIと統合できます。このガイドでは、 MongoDBと並行して Fireworks チャット モデルを使用する方法を説明します。これにより、エージェントの応答のコンテキストを提供し、エージェントのデータ ストアを構成できます。

Fireworks AI用のMongoDB統合は、次の機能を提供します。

  • チャットモデルデータ: MongoDBデータをコンテキストとしてチャットモデルに渡すか、モデルが呼び出すツールに公開します。

  • エージェントメモリ:エージェントの通信履歴とセッション状態をドキュメントとして永続化します。

  • 訓練用データソース: MongoDBデータを使用して、WiredTiger モデルを微調整し、ユースケースに合わせてその動作をカスタマイズします。

OpenAI APIなどの Fireworks SDK または互換性のある API を使用して、 Fireworks チャット モデルを呼び出すことができます。 LgChuin、LlangGraph、LlamaIndex などの OpenAI 互換プロバイダーをサポートするフレームワークも Fireworks で動作します。

MongoDB ベクトル検索で Fireworks モデルを使用して RGアプリケーション を構築するチュートリアルを完了するには、「 MongoDB Fireworks AI統合を使い始める 」を参照してください。

必要なパッケージをインストールするには、次のコマンドを実行します。

pip install --quiet --upgrade pymongo openai

このコマンドは、次のパッケージをインストールします。

  • pymongo: MongoDB Pythonドライバー

  • openai: このページの例では、ファイアウォール チャット モデルを呼び出すために使用する OpenAIクライアント を導入します。

LgChuin で構築する場合、langchain-fireworks パッケージの ChatFireworksクラスを使用して Fireworks チャット モデルを呼び出します。このパッケージをインストールするには、次のコマンドを実行します。

pip install --quiet --upgrade langchain-fireworks

MongoDBで Fireworks チャット モデルを使用するには、次のクライアントを作成します。

  • Fireworks エンドポイントを使用するように構成された OpenAIクライアントなどのクライアント

  • 配置用のMongoDBクライアント

次の例では、これらのクライアントの両方を作成し、 Fireworks チャットモデルを選択します。

FIREWORKS_BASE_URL = "https://api.fireworks.ai/inference/v1"fireworks = OpenAI( base_url=FIREWORKS_BASE_URL, api_key=os.environ["FIREWORKS_API_KEY"],) mongo_client = MongoClient(os.environ["MONGODB_URI"])collection = mongo_client["<database-name>"]["<collection-name>"] CHAT_MODEL = "accounts/fireworks/models/gpt-oss-120b"

この の例を使用するには、次の環境変数を設定します。

Fireworks モデルにやり取りを送信し、応答を受信するには、 Fireworksクライアントで chat.completions.create() メソッドを呼び出します。このセクションでは、チャットモデルのインタラクションを次の方法でカスタマイズする方法を説明します。

提供したコンテキストに基づいて応答を生成するには、messages パラメータを次のメッセージを含むリストに設定します。

  • system 提供されたコンテキストからのみ応答するようにモデルに指示するメッセージ

  • user コンテキストと質問を含むメッセージ

user メッセージでコンテキストとして任意のMongoDBクエリ結果を渡し、 MongoDBデータから応答を生成できます。

次の例では、 MongoDBコレクションを対象に少数の候補ドキュメントのセットをクエリします。次に、コードは映画の推奨事項を生成するためのコンテキストとして、タイトルとプロットを提供します。

question = "Recommend a movie about a heist that goes wrong."movies = collection.find( {"plot": {"$regex": r"\bheist\b", "$options": "i"}}, {"_id": 0, "title": 1, "plot": 1}).limit(5)context = "\n".join(f'{m["title"]}: {m["plot"]}' for m in movies) response = fireworks.chat.completions.create( model=CHAT_MODEL, messages=[ { "role": "system", "content": "Answer using only the movies in the context. " "If the context doesn't contain the answer, say so.", }, { "role": "user", "content": f"Context:\n{context}\n\nQuestion: {question}", }, ],) print(response.choices[0].message.content)

モデルが呼び出すことができる Fireworks チャット モデルをサポートするツールのリストを指定するには、tools パラメーターを使用します。このパラメータを、関数の名前、説明、パラメータをそれぞれ含む関数定義のリストに設定します。

モデルが関数を呼び出すと決定すると、テキスト応答ではなく応答メッセージで tool_calls リストが返されます。コードは という名前の関数を実行し、その結果を tool メッセージとして返し、対話を続行します。このパターンを使用して、 MongoDBコレクションをクエリする関数など、ツールを呼び出すタイミングを決定するエージェントをビルドします。

この例では、次のアクションを実行します。

  • MongoDBをクエリする search_movies ツールを定義します

  • ツールを呼び出すかどうかをモデルが決定できるようにします

  • モデルがリクエストする場合は、search_movies ツールを実行し、結果をモデルに返します

  • 最終推奨を生成します

AGENT_MODEL = "accounts/fireworks/models/kimi-k3" TOOLS = [ { "type": "function", "function": { "name": "search_movies", "description": "Keyword search over movie plots in the MongoDB movie catalog.", "parameters": { "type": "object", "properties": { "keyword": { "type": "string", "description": "A single keyword to search for in movie plots.", } }, "required": ["keyword"], }, }, }] def search_movies(keyword): results = collection.find( {"plot": {"$regex": rf"\b{keyword}\b", "$options": "i"}}, {"_id": 0, "title": 1, "plot": 1} ).limit(5) return [f'{m["title"]}: {m["plot"]}' for m in results] messages = [ { "role": "system", "content": "Call search_movies before you recommend a movie.", }, { "role": "user", "content": "Recommend a movie about a heist that goes wrong.", },] response = fireworks.chat.completions.create( model=AGENT_MODEL, messages=messages, tools=TOOLS,)message = response.choices[0].messagemessages.append(message.model_dump(exclude_none=True)) for call in message.tool_calls: args = json.loads(call.function.arguments) results = search_movies(**args) messages.append( { "role": "tool", "tool_call_id": call.id, "content": json.dumps(results), } ) response = fireworks.chat.completions.create(model=AGENT_MODEL, messages=messages)print(response.choices[0].message.content)

以前のやり取りを記憶するエージェントを構成するには、各メッセージをMongoDBコレクションに保存します。その後は、chat.completions.create() メソッドを呼び出すたびに、メッセージ履歴を messages リストに読み込みます。各メッセージドキュメントに session_id 値を保存して、保存された履歴を 1 つのセッションに割り当てます。

この例では、次のアクションを実行します。

  • chat_historyコレクションからセッションの既存のメッセージ履歴を読み込みます

  • 新しいユーザー メッセージを追加し、結合された履歴を使用して chat.completions.create() を呼び出します

  • 新しいユーザー メッセージとモデルの応答を chat_historyコレクションに保存します

history = mongo_client["<database-name>"]["chat_history"] def load_history(session_id): return [ doc["message"] for doc in history.find({"session_id": session_id}).sort("seq", 1) ] def save_messages(session_id, messages, start_seq): history.insert_many( {"session_id": session_id, "seq": start_seq + i, "message": message} for i, message in enumerate(messages) ) session_id = "demo-session"past_messages = load_history(session_id)new_messages = [{"role": "user", "content": "Recommend a movie about a heist that goes wrong."}] response = fireworks.chat.completions.create( model=AGENT_MODEL, messages=past_messages + new_messages,)new_messages.append(response.choices[0].message.model_dump(exclude_none=True)) save_messages(session_id, new_messages, start_seq=len(past_messages))print(response.choices[0].message.content)

エージェントは呼び出しごとに chat_historyコレクションから過去のメッセージを読み込むため、同じ session_id 値を使用する将来の呼び出しはこのセッションを参照できます。

MongoDBに保存されているデータに対して既存のオープンソース チャットモデルを訓練して、特定のユースケースに合わせて動作をカスタマイズし、精度を向上させることができます。

モデル訓練にMongoDBデータを使用するには、ドキュメントに Fireworks に期待されるチャット形式で messages 配列を保存する必要があります。コレクションからこれらのドキュメントを JSONファイルにエクスポートします。各行は 1 つのドキュメントの messages 配列です。次に、データセットをアップロードし、WiredTiger CLI である firectl を使用して監視付き微調整を開始します。

次のコマンドを実行して、データセットをアップロードし、モデルを再学習します。

firectl dataset create <dataset-name> <path-to-jsonl-file>firectl sftj create \ --base-model <base-model-id> \ --dataset <dataset-name> \ --output-model <output-model-name>

訓練が終了したら、調整されたモデルを配置し、チャット呼び出しで 基本モデルIDの代わりにそのモデルIDを使用します。サポートされている基本モデル、訓練方法、配置オプションの詳細については、ファイアワーク ドキュメントの「 監視付き微調整 」を参照してください。