Para agentes de IA: hay un índice de documentación disponible en https://www.mongodb.com/es/docs/llms.txt — versiones en markdown de todas las páginas están disponibles agregando .md a cualquier ruta URL.

Comience a utilizar la integración de MongoDB Fireworks AI.

Puedes integrar MongoDB con Fireworks AI para crear aplicaciones de generación aumentada por recuperación(RAG) basadas en modelos de código abierto. Este tutorial utiliza Voyage AI para incrustar y reordenar datos de muestra, y luego emplea un modelo de chat de Fireworks para generar una recomendación fundamentada.

En este tutorial, realizarás las siguientes tareas:

  1. Configura tu entorno.

  2. Utilice un modelo de incrustación de Voyage AI para incrustar datos de películas y almacenar las incrustaciones en MongoDB.

  3. Utilice MongoDB Vector Search y un modelo de reordenamiento de Voyage AI para recuperar y reordenar documentos de películas.

  4. Instruye a un modelo de chat de Fireworks para que genere una recomendación de película basada en los resultados reordenados.

Fireworks AI proporciona una plataforma para entrenar y ejecutar modelos de IA de código abierto. Puedes usar MongoDB para almacenar datos operativos y de memoria, y para reentrenar modelos para casos de uso específicos.

Una aplicación RAG recupera datos relevantes y los pasa a un modelo de chat como contexto, de modo que el modelo responde a partir de tus datos en lugar de basarse únicamente en lo aprendido durante el entrenamiento. En este tutorial, MongoDB almacena y recupera tus datos. Voyage AI proporciona el modelo de incrustación que integra los datos y el modelo de reordenamiento que reordena los resultados recuperados, y Fireworks AI proporciona el modelo de chat que genera la respuesta final.

Para completar este tutorial, debes tener los siguientes recursos:

En esta sección, preparará su entorno creando un entorno virtual, instalando las dependencias necesarias, configurando sus variables de entorno y creando un archivo de proyecto.

1

Desde tu terminal, ejecuta los siguientes comandos para crear un nuevo directorio llamado fireworks-mongodb-project e iniciar un entorno virtual:

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

Desde tu directorio fireworks-mongodb-project, ejecuta el siguiente comando para instalar las dependencias necesarias:

uv pip install pymongo openai voyageai python-dotenv
3

En tu directorio fireworks-mongodb-project, crea un archivo .env y añade el siguiente código:

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

Reemplace <fireworks-api-key> con su clave API de Fireworks y reemplace <voyage-api-key> con su clave API de Voyage AI.

Se debe sustituir <connection-string> por la cadena de conexión del clúster Atlas o de la implementación local de Atlas.

Su cadena de conexión debe usar el siguiente formato:

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

IMPORTANTE: Asegúrate de que tu cadena de conexión incluya las credenciales de tu usuario de base de datos. Para obtener más información sobre cómo encontrar tu cadena de conexión, consulta Conectar a un clúster a través de Librerías de clientes.

4

En tu directorio fireworks-mongodb-project, crea un archivo llamado main.py. Agrega el siguiente código a este archivo para cargar tus variables de entorno y definir dos argumentos de línea de comandos, que especifican la consulta de búsqueda y el número de resultados:

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()

En los siguientes pasos, deberá agregar código a este archivo para incrustar, recuperar y generar respuestas a partir de los datos de su película.

En esta sección, configurará sus clientes, insertará el campo plot de los documentos de películas 50 y almacenará cada vector en un nuevo campo embedding. A continuación, creará un índice de búsqueda vectorial de MongoDB en ese campo.

1

Agregue el siguiente código a su archivo main.py para crear un cliente Fireworks, un cliente Voyage AI y un cliente MongoDB, y para seleccionar sus modelos:

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

Este ejemplo selecciona los siguientes modelos:

  • voyage-4: Un modelo de incrustación de Voyage AI, utilizado para incrustar tramas de películas y consultas de búsqueda.

  • rerank-3: Un modelo de reclasificación de Voyage AI, utilizado para repuntuar los candidatos de MongoDB Vector Search en función de su relevancia.

  • accounts/fireworks/models/gpt-oss-120b: Un modelo de chat de Fireworks, utilizado para generar recomendaciones de películas basadas en datos de MongoDB.

Nota

Este tutorial solicita vectores de dimensión 1024 al modelo de incrustación de Voyage AI para reducir el espacio de almacenamiento. Puede utilizar cualquier modelo de incrustación de Voyage AI, siempre que el valor DIMENSIONS coincida con el tamaño de los vectores que devuelve el modelo.

2

Agregue el siguiente código a su archivo main.py para insertar la trama de cada película en el campo 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

Agregue el siguiente código para crear un índice de búsqueda vectorial de MongoDB en el campo embedding y espere hasta que finalice la creación del índice:

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.")

En esta sección, se ejecuta una consulta de búsqueda vectorial de MongoDB en el campo plot de los documentos y se reordenan los resultados. A continuación, se pasan las películas reordenadas a un modelo de chat de Fireworks como contexto para generar una recomendación.

1

Agregue el siguiente código a su archivo main.py para insertar una consulta de campo plot y recuperar películas cuyas tramas sean similares a la consulta:

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

Para mejorar la precisión de la búsqueda vectorial en MongoDB, recupere un conjunto de candidatos más grande y vuelva a ordenarlo utilizando un modelo de reordenamiento de Voyage AI antes de pasar los resultados a un modelo de chat. Agregue el siguiente código a su archivo 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

Agregue el siguiente código a su archivo main.py para pasar las películas reclasificadas a un modelo de chat de Fireworks como contexto, e indíquele al modelo que responda solo a partir de ese contexto:

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."))

Para ejecutar el archivo main.py, ejecute el siguiente comando desde su directorio fireworks-mongodb-project. Utilice las banderas --query y --count para especificar la consulta de búsqueda y el número de resultados que devuelve el archivo:

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

Si el comando se ejecuta correctamente, el resultado se parecerá al siguiente:

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.

Para obtener más información sobre las opciones de configuración de Fireworks y Voyage AI y los métodos utilizados en este tutorial, consulte Integrar MongoDB con Fireworks AI.

Para crear un agente que llame a herramientas y que recuerde su historial de conversaciones en MongoDB, consulte Especificar herramientas del agente y Conservar la memoria del agente.

Para obtener más información sobre Fireworks AI, consulte la documentación de Fireworks AI.

Para obtener más información sobre Voyage AI, consulte la sección "Incrustaciones de texto"y "Reclasificadores".