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

MongoDB Fireworks AI統合を使い始める

MongoDB をFireworks AIと統合すると、オープンソース モデルで検索拡張生成 (RAG)(RAG )アプリケーションを構築できます。このチュートリアルでは、Vorage AIを使用してサンプルデータを埋め込み、再ランク付けし、WiredTiger チャット モデルを使用して基づいた推奨事項を生成します。

このチュートリアルでは、次のタスクを実行します。

  1. 環境を設定します。

  2. MongoDB AI埋め込みモデルを使用して映画データを埋め込み、その埋め込みをMongoDBに保存します。

  3. MongoDB ベクトル検索と Vloyage AIリランク モデルを使用して、映画ドキュメントを検索し、再ランク付けします。

  4. Fireworks チャットモデルに対して、再ランク付けされた結果に基づいて映画の推奨事項を生成するように指示します。

Fireworks AI は、オープンソースAIモデルを訓練および実行中ためのプラットフォームを提供します。 MongoDB を使用して運用データとメモリ データを保存し、特定のユースケースに合わせてモデルを再構築できます。

RAGアプリケーションは関連データを取得し、それをコンテキストとしてチャットモデルに渡すため、モデルは訓練中に学習した内容のみに依存するのではなく、データから応答します。このチュートリアルでは、 MongoDB はデータを保存と取得します。投票AI は、データを埋め込む埋め込みモデルと、検索された結果を再ランク付けするリランクカー モデルを提供し、ファイアワークAI は最終応答を生成するチャットモデルを提供します。

このチュートリアルを完了するには、次のリソースが必要です。

このセクションでは、仮想環境の作成、必要な依存関係のインストール、環境変数の設定、プロジェクトファイルの作成して環境を準備します。

1

ターミナルから次のコマンドを実行して、fireworks-mongodb-project という名前の新しいディレクトリを作成し、仮想環境を起動します。

mkdir fireworks-mongodb-projectcd fireworks-mongodb-projectuv venvsource .venv/bin/activate
2

fireworks-mongodb-projectディレクトリから、次のコマンドを実行して必要な依存関係をインストールします。

uv pip install pymongo openai voyageai python-dotenv
3

お使いの fireworks-mongodb-project ディレクトリ内で、.env ファイルを作成し、次のコードを追加します。

FIREWORKS_API_KEY="<fireworks-api-key>"VOYAGE_API_KEY="<voyage-api-key>"MONGODB_URI="<connection-string>"

<fireworks-api-key>を Fireworks APIキーに置き換え、 <voyage-api-key>を Vyage AI APIキーに置き換えます。

<connection-string> を Atlas クラスターまたはローカル Atlas 配置の接続文字列に置き換えます。

接続stringには、次の形式を使用する必要があります。

mongodb+srv://<db_username>:<db_password>@<clusterName>.<hostname>.mongodb.net

重要:接続文字列にデータベースユーザーの認証情報が含まれていることを確認します。接続文字列の検索方法の詳細については、クライアント ライブラリ経由でクラスターに接続する を参照してください。

4

fireworks-mongodb-projectディレクトリに、main.py という名前のファイルを作成します。このファイルに次のコードを追加して、環境変数をロードし、検索クエリーと結果の数を指定する 2 つのコマンドライン引数を定義します。

import argparseimport osimport time import voyageaifrom dotenv import load_dotenvfrom openai import OpenAIfrom pymongo import MongoClientfrom pymongo.operations import SearchIndexModel load_dotenv() parser = argparse.ArgumentParser()parser.add_argument("--query", default="something interesting")parser.add_argument("--count", type=int, default=10)args = parser.parse_args()

後の手順では、このファイルにコードを追加して、映画データから応答を埋め込み、検索、生成します。

このセクションでは、クライアントを設定し、50映画ドキュメントの plotフィールドを埋め込み、各ベクトルを新しい embeddingフィールドに保存します。次に、そのフィールドにMongoDB ベクトル検索インデックスを作成します。

1

次のコードを main.pyファイルに追加して、 Fireworksクライアント、 Vyage AIクライアント、 MongoDBクライアントを作成し、モデルを選択します。

fireworks = OpenAI( base_url="https://api.fireworks.ai/inference/v1", api_key=os.environ["FIREWORKS_API_KEY"],)voyage = voyageai.Client() mongo_client = MongoClient(os.environ["MONGODB_URI"])collection = mongo_client["sample_mflix"]["movies"] EMBEDDING_MODEL = "voyage-4"RERANK_MODEL = "rerank-3"CHAT_MODEL = "accounts/fireworks/models/gpt-oss-120b"DIMENSIONS = 1024

この例では、次のモデルを選択しています。

  • voyage-4:映画プロットの埋め込みと検索クエリに使用される、Valage AI埋め込みモデル。

  • rerank-3: MongoDB ベクトル検索 の候補を関連性を再スコア付けするために使用される、Valage AIリランク モデル。

  • accounts/fireworks/models/gpt-oss-120b: MongoDBデータに基づいて映画の推奨事項を生成するために使用される、ファイアワーク チャット モデル。

注意

このチュートリアルでは、ストレージを削減するために、Voyage AI埋め込みモデルから 1024 次元ベクトルをリクエストします。 DIMENSIONS の値がモデルが返すベクトルのサイズと一致する限り、任意の Vyage AI埋め込みモデルを使用できます。

2

次のコードを main.pyファイルに追加して、各映画のプロットを embeddingフィールドに埋め込みます。

def get_embeddings(texts, input_type="document"): response = voyage.embed( texts, model=EMBEDDING_MODEL, input_type=input_type, output_dimension=DIMENSIONS ) return response.embeddings docs = list( collection.find( {"plot": {"$exists": True, "$ne": ""}}, {"_id": 1, "title": 1, "plot": 1} ).limit(50)) vectors = get_embeddings([doc["plot"] for doc in docs]) for doc, vector in zip(docs, vectors): collection.update_one({"_id": doc["_id"]}, {"$set": {"embedding": vector}}) print(f"Embedded {len(docs)} movies.")
3

次のコードを追加して、embeddingフィールドにMongoDB ベクトル検索インデックスを作成し、インデックスの作成が完了するまで待ちます。

index = SearchIndexModel( definition={ "fields": [ { "type": "vector", "path": "embedding", "numDimensions": DIMENSIONS, "similarity": "cosine", } ] }, name="movie_vector_index", type="vectorSearch",)collection.create_search_index(model=index) print("Waiting for the index to build...")while not any( idx.get("queryable") for idx in collection.list_search_indexes("movie_vector_index")): time.sleep(5) print("Index is ready.")

このセクションでは、ドキュメントの plotフィールドに対してMongoDB ベクトル検索クエリを実行し、結果を再ランク付けします。次に、ランク付けされた映画をコンテキストとして Fireworks チャットモデルに渡し、推奨事項を生成します。

1

次のコードを main.pyファイルに追加して、plotフィールドクエリを埋め込み、クエリにプロットが似ている映画を検索します。

def vector_search(query, limit=5): query_vector = get_embeddings([query], input_type="query")[0] pipeline = [ { "$vectorSearch": { "index": "movie_vector_index", "path": "embedding", "queryVector": query_vector, "numCandidates": limit * 20, "limit": limit, } }, { "$project": { "_id": 0, "title": 1, "plot": 1, "score": {"$meta": "vectorSearchScore"}, } }, ] return list(collection.aggregate(pipeline)) print("\nVector search results:")for movie in vector_search(args.query, limit=args.count): print(f'{movie["score"]:.3f} {movie["title"]}')
2

MongoDB ベクトル検索 の精度を向上させるには、結果をチャット モデルに渡す前に、より大きな候補セットを取得し、Voyage AIリランク モデルを使用してそれを再ランク付けします。次のコードを main.pyファイルに追加します。

def rerank(query, movies, top_n=5): candidate_texts = [f'{m["title"]}: {m["plot"]}' for m in movies] reranking = voyage.rerank(query, candidate_texts, model=RERANK_MODEL, top_k=top_n) return [movies[result.index] for result in reranking.results] def retrieve(query, top_n=5): return rerank(query, vector_search(query, limit=top_n * 4), top_n=top_n) print("\nReranked, precise results:")for movie in retrieve(args.query, top_n=args.count): print(movie["title"])
3

次のコードを main.pyファイルに追加して、ランク付けされた映画をコンテキストとして Fireworks チャットモデルに渡し、そのコンテキストからのみ応答するようにモデルに指示します。

def answer(question): context = "\n\n".join(f'{m["title"]}: {m["plot"]}' for m in retrieve(question)) 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}", }, ], ) return response.choices[0].message.content print("\nRecommendation:")print(answer(f"Recommend a movie about {args.query}, and explain why."))

main.pyファイルを実行するには、fireworks-mongodb-projectディレクトリから次のコマンドを実行します。検索クエリーとファイルが返す結果の数を指定するには、 --query と --count フラグを使用します。

uv run main.py --query "a heist that goes wrong" --count 5

コマンドが正常に実行されると、出力は次のようになります。

Embedded 50 movies.Waiting for the index to build...Index is ready. Vector search results:0.724 I Became a Criminal0.664 Hallelujah0.662 Zoo in Budapest0.658 Rear Window0.654 The Long Voyage Home Reranked, precise results:I Became a CriminalHallelujahFoolish WivesZoo in BudapestA Corner in Wheat Recommendation:**I Became a Criminal** -- This gritty film-noir follows cynicalex-RAF flyer Morgan, who joins a break-in gang led by Narcy. Theirfirst job quickly turns disastrous when the getaway car crashesafter the crew accidentally kills a policeman. The movie centers ona heist that goes badly wrong, showcasing the chaos, moral fallout,and gritty consequences of a botched robbery.

Fireworks および Boyage AI の構成オプションとこのチュートリアルで使用されているメソッドの詳細については、 「 MongoDBと Fireworks AIの統合 」を参照してください。

MongoDBでの通信履歴を記憶するツール呼び出しエージェントを構築するには、「 エージェント ツールの指定 」と「 永続的なエージェント メモリ 」を参照してください。

Fireworks AIの詳細については、 Fireworks AIドキュメント を参照してください。

投票AIの詳細については、「 テキスト埋め込みとリランクサー 」を参照してください。