Menu Docs
Página inicial do Docs
/
MongoDB Atlas
/ /

Comece com a integração com o haystack

Nesta página

  • Plano de fundo
  • Pré-requisitos
  • Configurar o ambiente
  • Criar o índice Atlas Vector Search Index
  • Armazenar dados personalizados no Atlas
  • Responda a perguntas sobre seus dados
  • Próximos passos

Você pode integrar o Atlas Vector Search com haystack para criar aplicativos personalizados com LLMs e implementar a geração aumentada de recuperação (RAG). Este tutorial demonstra como começar a usar o Atlas Vector Search com oHaystack para executar pesquisas semânticas em seus dados e criar uma implementação de RAG . Especificamente, você executa as seguintes ações:

  1. Configure o ambiente.

  2. Crie um índice Atlas Vector Search.

  3. Armazene dados personalizados no Atlas.

  4. Implemente o RAG usando o Atlas Vector Search para responder a perguntas sobre seus dados.

OHaystack é uma estrutura para criar aplicativos personalizados com LLMs, modelos de incorporação e pesquisa vetorial. Ao integrar o Atlas Vector Search com oHaystack, você pode usar o Atlas como um banco de dados vetorial e usar o Atlas Vector Search para implementar o RAG recuperando documentos semanticamente semelhantes de seus dados. Para saber mais sobre o RAG, consulte Geração de Recuperação Aumentada (RAG) com Atlas Vector Search .

Para concluir este tutorial, você deve ter o seguinte:

  • Um Atlas cluster executando o MongoDB versão 6.0.11, 7.0.2 ou posterior (incluindo RCs). Garanta que seu endereço IP esteja incluído na lista de acessodo seu projeto Atlas.

  • Uma chave de API OpenAI. Você deve ter uma conta OpenAI paga com créditos disponíveis para solicitações de API.

  • Um bloco de anotações para executar seu projeto Python, como o CoLab.

Você deve primeiro configurar o ambiente para este tutorial. Crie um bloco de anotações Python interativo salvando um arquivo com a extensão .ipynb e, em seguida, execute os seguintes trechos de código no bloco de anotações:

1
  1. Execute o seguinte comando:

    pip --quiet install mongodb-atlas-haystack pymongo
  2. Execute o seguinte código para importar os pacotes necessários:

    import getpass, os
    from haystack import Pipeline, Document
    from haystack.document_stores.types import DuplicatePolicy
    from haystack.components.writers import DocumentWriter
    from haystack.components.generators import OpenAIGenerator
    from haystack.components.builders.prompt_builder import PromptBuilder
    from haystack.components.embedders import OpenAITextEmbedder, OpenAIDocumentEmbedder
    from haystack_integrations.document_stores.mongodb_atlas import MongoDBAtlasDocumentStore
    from haystack_integrations.components.retrievers.mongodb_atlas import MongoDBAtlasEmbeddingRetriever
    from pymongo import MongoClient
    from pymongo.operations import SearchIndexModel
2

Execute o código a seguir e forneça o seguinte quando solicitado:

os.environ["OPENAI_API_KEY"] = getpass.getpass("OpenAI API Key:")
os.environ["MONGO_CONNECTION_STRING"]=getpass.getpass("MongoDB Atlas Connection String:")

Observação

Sua string de conexão deve usar o seguinte formato:

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

Observação

Para criar um Atlas Vector Search índice de pesquisa, você deve ter acesso Project Data Access Admin ou superior ao Atlas projeto.

Nesta seção, você cria o banco de dados do haystack_db e a coleção do test para armazenar seus dados personalizados. Em seguida, para habilitar consultas de pesquisa vetorial em seus dados, crie um índice do Atlas Vector Search .

1
client = MongoClient(os.environ.get("MONGO_CONNECTION_STRING"))
2

Execute o seguinte código para criar seu banco de dados do haystack_db e coleção do test .

# Create your database and collection
db_name = "haystack_db"
collection_name = "test"
database = client[db_name]
database.create_collection(collection_name)
# Define collection
collection = client[db_name][collection_name]
3

Execute o seguinte código para criar um índice do tipo vectorSearch . O campo embedding contém as incorporações que você criará usando o modelo de incorporação text-embedding-ada-002 do OpenAI. A definição de índice especifica 1536 dimensões vetoriais e mede a similaridade usando cosine.

# Create your index model, then create the search index
search_index_model = SearchIndexModel(
definition={
"fields": [
{
"type": "vector",
"path": "embedding",
"numDimensions": 1536,
"similarity": "cosine"
}
]
},
name="vector_index",
type="vectorSearch"
)
collection.create_search_index(model=search_index_model)

O índice deve levar cerca de um minuto para ser criado. Enquanto constrói, o índice está em um estado de sincronização inicial . Quando terminar de ser criado, você poderá começar a armazenar e consultar os dados em sua coleção.

Nesta seção, você instancia o Atlas como um banco de dados vetorial, também chamado de armazenamento de documentos . Em seguida, crie incorporações vetoriais a partir de dados personalizados e armazene esses documentos em uma coleção no Atlas. Cole e execute os seguintes trechos de código em seu bloco de anotações.

1

Execute o seguinte código para instanciar o Atlas como um repositório de documentos. Este código estabelece uma conexão com seu cluster Atlas e especifica o seguinte:

  • haystack_db e test como o banco de dados e coleção do Atlas usado para armazenar os documentos.

  • vector_index como o índice usado para executar queries semânticas Atlas Search .

document_store = MongoDBAtlasDocumentStore(
database_name="haystack_db",
collection_name="test",
vector_search_index="vector_index",
)
2

Este código define alguns documentos de amostra e executa um pipeline com os seguintes componentes:

  • Um incorporador do OpenAI para converter seu documento em incorporações vetoriais.

  • Escritor de documentos para preencher seu armazenamento de documentos com os documentos de amostra e suas incorporações.

# Create some example documents
documents = [
Document(content="My name is Jean and I live in Paris."),
Document(content="My name is Mark and I live in Berlin."),
Document(content="My name is Giorgio and I live in Rome."),
]
# Initializing a document embedder to convert text content into vectorized form.
doc_embedder = OpenAIDocumentEmbedder()
# Setting up a document writer to handle the insertion of documents into the MongoDB collection.
doc_writer = DocumentWriter(document_store=document_store, policy=DuplicatePolicy.SKIP)
# Creating a pipeline for indexing documents. The pipeline includes embedding and writing documents.
indexing_pipe = Pipeline()
indexing_pipe.add_component(instance=doc_embedder, name="doc_embedder")
indexing_pipe.add_component(instance=doc_writer, name="doc_writer")
# Connecting the components of the pipeline for document flow.
indexing_pipe.connect("doc_embedder.documents", "doc_writer.documents")
# Running the pipeline with the list of documents to index them in MongoDB.
indexing_pipe.run({"doc_embedder": {"documents": documents}})
Calculating embeddings: 100%|██████████| 1/1 [00:00<00:00, 4.16it/s]
{'doc_embedder': {'meta': {'model': 'text-embedding-ada-002',
'usage': {'prompt_tokens': 32, 'total_tokens': 32}}},
'doc_writer': {'documents_written': 3}}

Dica

Depois de executar o código de amostra, você pode visualizar suas incorporações vetoriais na Atlas navegando até a collection haystack_db.test no seu cluster.

Esta seção demonstra como implementar o RAG em seu aplicativo com o Atlas Vector Search e o Haste do hash.

O seguinte código define e executa um pipeline com os seguintes componentes:

Neste exemplo, você solicita ao LLM a consulta de amostra Where does Mark live?. O LLM gera uma resposta precisa e sensível ao contexto a partir dos dados personalizados armazenados no Atlas.

# Template for generating prompts for a movie recommendation engine.
prompt_template = """
You are an assistant allowed to use the following context documents.\nDocuments:
{% for doc in documents %}
{{ doc.content }}
{% endfor %}
\nQuery: {{query}}
\nAnswer:
"""
# Setting up a retrieval-augmented generation (RAG) pipeline for generating responses.
rag_pipeline = Pipeline()
rag_pipeline.add_component("text_embedder", OpenAITextEmbedder())
# Adding a component for retrieving related documents from MongoDB based on the query embedding.
rag_pipeline.add_component(instance=MongoDBAtlasEmbeddingRetriever(document_store=document_store,top_k=15), name="retriever")
# Building prompts based on retrieved documents to be used for generating responses.
rag_pipeline.add_component(instance=PromptBuilder(template=prompt_template), name="prompt_builder")
# Adding a language model generator to produce the final text output.
rag_pipeline.add_component(instance=OpenAIGenerator(), name="llm")
# Connecting the components of the RAG pipeline to ensure proper data flow.
rag_pipeline.connect("text_embedder.embedding", "retriever.query_embedding")
rag_pipeline.connect("retriever", "prompt_builder.documents")
rag_pipeline.connect("prompt_builder", "llm")
# Run the pipeline
query = "Where does Mark live?"
result = rag_pipeline.run(
{
"text_embedder": {"text": query},
"prompt_builder": {"query": query},
});
print(result['llm']['replies'][0])
Mark lives in Berlin.

O MongoDB também fornece os seguintes recursos para desenvolvedores:

Dica

Veja também:

Voltar

Kernel semântico

Próximo

IA de primavera