Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
No dinâmico campo da IA generativa, grandes modelos de linguagem (LLMs) como o GPT transformaram o processamento de linguagem natural. No entanto, uma tendência emergente na IA é o uso de repositórios de vetores, que desempenham um papel fundamental no aprimoramento de aplicativos de IA.
Este tutorial explora como usar o Azure DocumentDB, LangChain e OpenAI para implementar o RAG (geração aumentada de recuperação) para um desempenho superior de IA, além de discutir LLMs e suas limitações. Exploramos o paradigma rapidamente adotado do RAG e discutimos brevemente a estrutura LangChain e os modelos do Azure OpenAI. Por fim, integramos esses conceitos em um aplicativo do mundo real. Ao final, os leitores terão uma compreensão sólida desses conceitos.
Entender as LLMs e suas limitações
Os LLMs são modelos avançados de redes neurais profundas treinados em extensos conjuntos de dados textuais, o que lhes permite entender e gerar textos similares aos produzidos por seres humanos. Embora sejam revolucionários no processamento de linguagem natural, os LLMs têm limitações inerentes:
- Alucinações: os LLMs às vezes geram informações factualmente incorretas ou sem fundamentos, conhecidas como "alucinações".
- Dados obsoletos: as LLMs são treinadas em conjuntos de dados estáticos que podem não incluir as informações mais recentes, limitando sua relevância atual.
- Sem acesso aos dados locais do usuário: as LLMs não têm acesso direto a dados pessoais ou localizados, restringindo sua capacidade de fornecer respostas personalizadas.
- Limites de token: as LLMs têm um limite máximo de token por interação, restringindo a quantidade de texto que podem processar ao mesmo tempo. Por exemplo, o gpt-3.5-turbo da OpenAI tem um limite de token de 4.096.
Usar geração aumentada por recuperação
O RAG é uma arquitetura projetada para superar as limitações de LLM. A RAG usa a busca em vetores para recuperar documentos relevantes com base em uma consulta de entrada, fornecendo esses documentos como contexto para o LLM para gerar respostas mais precisas. Em vez de depender apenas de padrões pré-treinados, a RAG aprimora as respostas incorporando informações atualizadas e relevantes. Essa abordagem ajuda a:
- Minimizar alucinações: baseando respostas em informações baseadas em fatos.
- Garanta informações atuais: recuperando os dados mais recentes para garantir respostas atualizadas.
- Utilizar bancos de dados externos: embora não conceda acesso direto a dados pessoais, o RAG permite a integração com bases de dados de conhecimento externas específicas do usuário.
- Otimizar o uso de token: ao se concentrar nos documentos mais relevantes, o RAG torna o uso de token mais eficiente.
Este tutorial demonstra como o RAG pode ser implementado usando o Azure DocumentDB para criar um aplicativo de resposta a perguntas adaptado aos seus dados.
Visão geral da arquitetura do aplicativo
O diagrama de arquitetura a seguir ilustra os principais componentes da implementação do RAG:
Principais componentes e estruturas
Agora discutiremos as várias estruturas, modelos e componentes usados neste tutorial, enfatizando suas funções e nuances.
Azure DocumentDB
O Azure DocumentDB dá suporte a pesquisas de similaridade semântica, essenciais para aplicativos alimentados por IA. Ele permite que dados em vários formatos sejam representados como incorporações de vetor, que podem ser armazenados junto com dados de origem e metadados. Usando um algoritmo aproximado de vizinhos mais próximos, como HNSW (mundo pequeno navegável hierárquico), essas inserções podem ser consultadas para pesquisas rápidas de similaridade semântica.
Estrutura LangChain
O LangChain simplifica a criação de aplicativos de LLM fornecendo uma interface padrão para cadeias, várias integrações de ferramentas e cadeias de ponta a ponta para tarefas comuns. Ele permite que os desenvolvedores de IA criem aplicativos LLM que usam fontes de dados externas.
Principais aspectos do LangChain:
- Cadeias: sequências de componentes que resolvem tarefas específicas.
- Componentes: módulos como wrappers de LLM, wrappers do repositório de vetores, modelos de prompt, carregadores de dados, divisores de texto e recuperadores.
- Modularidade: simplifica o desenvolvimento, a depuração e a manutenção.
- Popularidade: um projeto de código aberto sendo adotado rapidamente e evoluindo para atender às necessidades do usuário.
Interface dos Serviços de Aplicativos do Azure
Os serviços de aplicativos fornecem uma plataforma robusta para a criação de interfaces da Web amigáveis para aplicativos Gen-AI. Este tutorial usa os Serviços de Aplicativos do Azure para criar uma interface da Web interativa para o aplicativo.
Modelos do OpenAI
A OpenAI é líder em pesquisa de IA, fornecendo vários modelos para geração de linguagem, vetorização de texto, criação de imagem e conversão de áudio em texto. Para este tutorial, usaremos os modelos de incorporação e de linguagem da OpenAI, cruciais para entender e gerar aplicativos baseados em linguagem.
Inserindo modelos versus modelos de geração de linguagem
| Categoria | Modelo de inserção de texto | Modelo de linguagem |
|---|---|---|
| Purpose | Converte texto em inserções de vetor. | Entende e gera linguagem natural. |
| Função | Transforma dados textuais em matrizes de números de alta dimensão, capturando o significado semântico do texto. | Compreende e produz texto semelhante ao humano com base na entrada fornecida. |
| Saída | Matriz de números (incorporações de vetor). | Texto, respostas, traduções, código, etc. |
| Saída de exemplo | Cada incorporação representa o significado semântico do texto na forma numérica, com uma dimensionalidade determinada pelo modelo. Por exemplo, text-embedding-ada-002 gera vetores com 1.536 dimensões. |
Texto coerente e contextualmente relevante gerado com base na entrada fornecida. Por exemplo, gpt-3.5-turbo pode gerar respostas para perguntas, traduzir texto, escrever código e muito mais. |
| Casos de uso típicos | – Pesquisa semântica | – Chatbots |
| – Sistemas de recomendação | – Criação de conteúdo automatizada | |
| – Clustering e classificação de dados de texto | – Tradução de idioma | |
| – Recuperação de informações | – Resumo | |
| Representação de dados | Representação numérica (incorporações) | Texto da linguagem natural |
| Dimensionalidade | O comprimento da matriz corresponde ao número de dimensões no espaço de inserção, por exemplo, 1.536 dimensões. | Normalmente representado como uma sequência de tokens, com o contexto determinando o comprimento. |
Principais componentes do aplicativo
- Azure DocumentDB: armazenando e consultando inserções de vetor.
-
LangChain: construindo o fluxo de trabalho de LLM do aplicativo. Utiliza ferramentas como:
- Carregador de documentos: para carregar e processar documentos de um diretório.
- Integração do repositório de vetores: para armazenar e consultar inserções de vetor no Azure DocumentDB.
- AzureDocumentDBVectorSearch: Wrapper para a pesquisa vetorial do Azure DocumentDB
- Serviços de Aplicativos do Azure: criando a interface do usuário para o aplicativo Cosmic Food.
-
Azure OpenAI: para fornecer modelos de incorporação e de LLM, incluindo:
- text-embedding-ada-002: um modelo de inserção de texto que converte texto em inserções de vetor com 1.536 dimensões.
- gpt-3.5-turbo: um modelo de linguagem para entender e gerar linguagem natural.
Configurar o ambiente
Para começar a otimizar o RAG usando o Azure DocumentDB, siga estas etapas:
-
Crie os seguintes recursos no Microsoft Azure:
- Cluster do Azure DocumentDB: para obter mais informações, consulte criar um cluster
-
Recurso OpenAI do Azure com:
-
Implantação do modelo de incorporação (por exemplo,
text-embedding-ada-002). -
Implantação de modelo de chat (por exemplo,
gpt-35-turbo).
-
Implantação do modelo de incorporação (por exemplo,
Documentos de amostra
Neste tutorial, você carrega um único arquivo de texto usando carregadores de documento. O arquivo deve ser salvo em um diretório chamado dados na pasta src . O conteúdo do arquivo é o seguinte:
food_items.json
{
"category": "Cold Dishes",
"name": "Hamachi Fig",
"description": "Hamachi sashimi lightly tossed in a fig sauce with rum raisins, and serrano peppers then topped with fried lotus root.",
"price": "16.0 USD"
},
Carregue os documentos
Defina a cadeia de conexão do Azure DocumentDB, o nome do banco de dados, o nome da coleção e o índice:
mongo_client = MongoClient(mongo_connection_string) database_name = "Contoso" db = mongo_client[database_name] collection_name = "ContosoCollection" index_name = "ContosoIndex" collection = db[collection_name]Inicialize o cliente de inserção.
from langchain_openai import AzureOpenAIEmbeddings openai_embeddings_model = os.getenv("AZURE_OPENAI_EMBEDDINGS_MODEL_NAME", "text-embedding-ada-002") openai_embeddings_deployment = os.getenv("AZURE_OPENAI_EMBEDDINGS_DEPLOYMENT_NAME", "text-embedding") azure_openai_embeddings: AzureOpenAIEmbeddings = AzureOpenAIEmbeddings( model=openai_embeddings_model, azure_deployment=openai_embeddings_deployment, )Crie inserções dos dados, salve no banco de dados e retorne uma conexão ao repositório de vetores, o Azure DocumentDB.
vector_store: AzureDocumentDBVectorSearch = AzureDocumentDBVectorSearch.from_documents( json_data, azure_openai_embeddings, collection=collection, index_name=index_name, )Crie o seguinte índice de vetor HNSW na coleção. (Observe que o nome do índice é o mesmo.)
num_lists = 100 dimensions = 1536 similarity_algorithm = DocumentDBSimilarityType.COS kind = DocumentDBVectorSearchType.VECTOR_HNSW m = 16 ef_construction = 64 vector_store.create_index( num_lists, dimensions, similarity_algorithm, kind, m, ef_construction )
Executar pesquisa de vetor usando o Azure DocumentDB
Conecte-se ao repositório de vetores.
vector_store: AzureDocumentDBVectorSearch = AzureDocumentDBVectorSearch.from_connection_string( connection_string=mongo_connection_string, namespace=f"{database_name}.{collection_name}", embedding=azure_openai_embeddings, )Defina uma função que executa a pesquisa de similaridade semântica usando a Pesquisa de Vetores do Azure DocumentDB em uma consulta. (Observe que este snippet de código é apenas uma função de teste.)
query = "beef dishes" docs = vector_store.similarity_search(query) print(docs[0].page_content)Inicialize o cliente de chat para implementar uma função RAG.
azure_openai_chat: AzureChatOpenAI = AzureChatOpenAI( model=openai_chat_model, azure_deployment=openai_chat_deployment, )Crie uma função RAG.
history_prompt = ChatPromptTemplate.from_messages( [ MessagesPlaceholder(variable_name="chat_history"), ("user", "{input}"), ( "user", """Given the above conversation, generate a search query to look up to get information relevant to the conversation""", ), ] ) context_prompt = ChatPromptTemplate.from_messages( [ ("system", "Answer the user's questions based on the below context:\n\n{context}"), MessagesPlaceholder(variable_name="chat_history"), ("user", "{input}"), ] )Converta o repositório de vetores em um recuperador, que pode pesquisar documentos relevantes com base nos parâmetros especificados.
vector_store_retriever = vector_store.as_retriever( search_type=search_type, search_kwargs={"k": limit, "score_threshold": score_threshold} )Crie uma cadeia de recuperadores que esteja ciente do histórico da conversa, garantindo a recuperação de documentos contextualmente relevantes usando o modelo azure_openai_chat e vector_store_retriever.
retriever_chain = create_history_aware_retriever(azure_openai_chat, vector_store_retriever, history_prompt)Crie uma cadeia que combine documentos recuperados em uma resposta coerente usando o modelo de linguagem (azure_openai_chat) e um prompt especificado (context_prompt).
context_chain = create_stuff_documents_chain(llm=azure_openai_chat, prompt=context_prompt)Crie uma cadeia que manipula todo o processo de recuperação, integrando a cadeia de recuperadores com reconhecimento de histórico e a cadeia de combinação de documentos. Essa cadeia RAG pode ser executada para recuperar e gerar respostas contextualmente precisas.
rag_chain: Runnable = create_retrieval_chain( retriever=retriever_chain, combine_docs_chain=context_chain, )
Exemplos de saída
A captura de tela a seguir ilustra as saídas para várias perguntas. Uma pesquisa de similaridade puramente semântica retorna o texto bruto dos documentos de origem, enquanto o aplicativo de resposta a perguntas usando a arquitetura RAG gera respostas precisas e personalizadas combinando o conteúdo do documento recuperado com o modelo de linguagem.
Conclusion
Neste tutorial, exploramos como criar um aplicativo de resposta a perguntas que interage com seus dados privados usando o Azure DocumentDB como um repositório de vetores. Ao usar a arquitetura RAG com o LangChain e o Azure OpenAI, demonstramos como os repositórios de vetores são essenciais para aplicativos LLM.
A RAG é um avanço significativo na IA, particularmente no processamento de linguagem natural, e a combinação dessas tecnologias permite a criação de aplicativos de IA avançados para vários casos de uso.