RAG interativo com MongoDB Atlas + API de chamada de função
Fabian Valle16 min read • Published Sep 18, 2024 • Updated Sep 18, 2024
Avalie esse Tutorial
Imagine-se como um detetive investigando um caso complexo. A geração aumentada de recuperação (RAG) tradicional atua como seu assistente estático, examinando meticulosamente montanhas de evidências com base em uma estratégia predefinida. Embora útil, essa abordagem não tem a flexibilidade necessária para o atual cenário digital em constante mudança.
Insira o RAG interativo - a próxima geração de acesso à informação. Ele habilita os usuários a se tornarem observadores ativos do conhecimento por meio de:
- Ajustar dinamicamente as estratégias de recuperação: adapte a pesquisa às suas necessidades específicas, ajustando parâmetros como o número de fontes, o tamanho do chunk e os algoritmos de recuperação.
- Ficar à frente da curva: À medida que novas informações surgem, incorpore-as prontamente à sua estratégia de recuperação para se manter atualizado e relevante.
- Melhoria no desempenho do LLM: otimize o volume de trabalho do LLM ajustando dinamicamente o fluxo de informações, levando a análises mais rápidas e precisas.
Antes de continuar, certifique-se de entender os fundamentos de:
Escolher entre abordagens de geração aumentada de recuperação estáticas e interativas é crucial para otimizar a estratégia de recuperação do seu aplicativo. Cada abordagem oferece vantagens e desvantagens exclusivas, personalizadas para casos de uso específicos:
RAG estático: uma abordagem RAG estática é pré-treinada em uma base de conhecimento fixa, o que significa que as informações que ela pode acessar e utilizar são predeterminadas e imutáveis. Isso permite tempos de inferência mais rápidos e custos computacionais mais baixos, tornando-a ideal para aplicativos que exigem respostas em tempo real, como chatbots e assistentes virtuais.
Prós:
- Resposta mais rápida: bases de conhecimento pré-carregadas permitem inferência rápida, ideal para aplicativos em tempo real, como chatbots e assistentes virtuais.
- Custo mais baixo:o RAG estático exige menos recursos para treinamento e manutenção, o que o torna adequado para ambientes com recursos limitados.
- Conteúdo controlado: os desenvolvedores têm controle total sobre a base de conhecimento do modelo, garantindo respostas direcionadas e selecionadas em aplicativos confidenciais.
- Resultados consistentes: o Static RAG fornece saídas estáveis mesmo quando os dados subjacentes são alterados, garantindo a confiabilidade em cenários com uso intensivo de dados.
Contras:
- Conhecimento limitado:o Static RAG está confinado ao seu conhecimento pré-carregado, limitando sua versatilidade em comparação com o RAG interativo que acessadados externos.
- Informações desatualizadas: As bases de conhecimento estáticas podem ficar desatualizadas, levando a respostas imprecisas ou irrelevantes se não forem atualizadas com frequência.
- Menos adaptável:o Static RAG pode ter dificuldade em se adaptar às mudanças nas necessidades e preferências do usuário, limitando sua capacidade de fornecer respostas personalizadas ou sensíveis aocontexto.
RAG interativo: Uma abordagem RAG interativa é treinada em uma base de conhecimento dinâmica, permitindo acessar e processar informações em tempo real de fontes externas, como bancos de dados online e APIs. Isso permite que ele forneça respostas atualizadas e relevantes, tornando-o adequado para aplicativos que exigem acesso a dados em constante mudança.
Prós:
- Informações atualizadas: O RAG interativo pode acessar e processar informações externas em tempo real, garantindo respostas atuais e relevantes, o que é particularmente valioso para aplicativos que exigem acesso a dados que mudam com frequência.
- Maior flexibilidade: o RAG interativo pode se adaptar às necessidades e preferências do usuário, incorporando feedback e interações em suas respostas, permitindo experiências personalizadas e sensíveis ao contexto.
- Vasta base de conhecimento: O acesso a informações externas fornece um conjunto de conhecimento quase ilimitado, permitindo que o RAG interativo atenda a uma gama mais ampla de consultas e forneça respostas abrangentes e informativas.
Contras:
- Resposta mais lenta: o processamento de informações externas aumenta o tempo de inferência, potencialmente impedindo aplicativos em tempo real.
- Custo mais alto: o RAG interativo requer mais recursos computacionais, tornando-o potencialmente inadequado para ambientes com restrição de recursos.
- Risco de viés: as fontes de informações externas podem conter preconceitos ou imprecisões, levando a respostas tendenciosas ou enganosas senão forem cuidadosamente mitigadas.
- Preocupações de segurança: O acesso a fontes externas introduz possíveis riscos de segurança de dados, exigindo medidas de segurança robustas para proteger informações confidenciais.
Embora este tutorial se concentre especificamente no RAG interativo, a abordagem ideal depende das necessidades e restrições específicas do seu aplicativo. Considere:
- Tamanho dos dados e frequência de atualização: os modelos estáticos são adequados para dados estáticos ou que mudam com pouca frequência, enquanto o RAG interativo é necessário para dados que mudam com frequência.
- Requisitos em tempo real: escolha o RAG estático para aplicativos que exigem tempos de resposta rápidos. Para aplicativos menos críticos, o RAG interativo pode ser preferido.
- Recursos computacionais: Avalie seus recursos disponíveis ao escolher entre abordagens estáticas e interativas.
- Privacidade e segurança de dados: certifique-se de que a abordagem escolhida esteja em conformidade com todos os regulamentos relevantes de privacidade e segurança de dados.
Agora, vamos colocar de volta o nosso capacete de Detective. Se você tiver uma pilha de provas disponível para um caso específico, não tentará analisar todas as provas de uma só vez, não é mesmo? Você o dividiria em pedaços menores e mais gerenciáveis – documentos, declarações de réplicas, objetos físicos – e examinaria cada um deles cuidadosamente. No mundo dos grandes modelos de linguagem, esse processo de quebra de informações é chamado dechunkinge joga um papel crucial para liberar todo o potencial da geração aumentada de recuperação.
Assim como um detetive, um LLM não consegue processar uma montanha de informações de uma só vez. O chunking ajuda a dividir o texto em pedaços menores e mais digeríveis, chamados chunks. Pense nesses pedaços como pequenos pedaços de conhecimento que o LLM pode facilmente analisar e compreender. Isso permite que o LLM se concentre em seções específicas do texto, extraia informações relevantes e gere respostas mais precisas e esclarecedoras.
No entanto, o tamanho de cada pedaço não é apenas uma questão de conveniência para o LLM; ele também afeta significativamente a pontuação de relevância do vetor de recuperação, uma métrica fundamental para avaliar a eficácia das estratégias de chunking. O processo envolve a conversão de texto em vetores, a medição da distância entre eles, a utilização de algoritmos ANN/KNN e o cálculo de uma pontuação para os vetores gerados.
Aqui está um exemplo: Imagine que você pergunte a "O que é uma manga?" e o LLM mergulhe em sua base de conhecimento, encontrando esses blocos:
Pontuações altas:
- Chunk: "A mango é uma frutas de caroço Trophyllum com uma carnuda suave e suculenta e um único caroço." (Pontuação: 0.98)
- Chunk: " Na Índia, as mangas são reverenciadas como o “Rei das Frutas” e têm importância cultural. " (Pontuação: 0.92)
- Pedaço: "A época das mangoas traz júbilo e iguarias como o lassi de mango e o sorvete de mango." (Pontuação: 0.85)
Esses pedaços abordam diretamente a questão, fornecendo informações relevantes sobre as características da fruta, importância cultural e usos culinários. As pontuações mais altas refletem a contribuição direta delas para responder à sua query.
Pontuações baixas:
- Chunk: "Vulcões expelem liga e cinzas derretidas, causando destruição e remodelando cenários." (Pontuação: 0.21)
- Chunk: "O mercado de ações flutua intensamente, impulsionado por fatores econômicos e pelo comportamento do investidor." (Pontuação: 0.42)
- Chunk: " As mitocôndrias, as “usinas de força da célula”, geram energia para os processos celulares. " (Pontuação: 0.55)
Esses pedaços, apesar de conterem informações interessantes, não têm nenhuma relação com as mangas. Eles abordam tópicos totalmente diferentes, obtendo pontuações baixas devido à falta de relevância para a query.
Confira ChunkViz v0.1 para ter uma noção de como o tamanho do chunk (comprimento de caracteres) divide o texto.
Balanceando detalhes e contexto:
O tamanho de cada chunk influencia a pontuação de relevância do vetor de recuperação de maneiras distintas:
Tamanho menor da parte:
- Prós:
- Foco preciso em detalhes e nuances específicos
- Pontuações de relevância potencialmente mais altas devido à extração precisa de informações
- Maior sensibilidade a mudanças sutis no significado
- Contras:
- Pode sacrificar um contexto mais amplo e a compreensão da mensagem geral
- Exige mais recursos computacionais para processar vários chunks
- Aumento do risco de perda de informações relevantes devido ao contexto limitado
Tamanho maior da parte:
- Prós:
- Fornece um contexto mais rico para compreender a mensagem geral
- Processamento mais eficiente com menos chunks para gerenciar
- Pontuações de relevância potencialmente mais altas para blocos relacionados devido ao contexto mais amplo
- Contras:
- Pode ignorar detalhes específicos e mudanças sutis no significado
- Aumento do risco de incluir informações irrelevantes em um bloco, potencialmente diminuindo a pontuação de relevância
Exemplos em ação:
Tamanho menor da parte:
- Exemplo: Analisando cláusulas específicas em um documento legal para identificar possíveis inconsistências
- Benefício: maior precisão na detecção de mudanças sutis no significado e na garantia da recuperação precisade informações relevantes
Tamanho maior da parte:
- Exemplo: resumindo um documento longo extraindo ideias-chave e informações em várias seções
- Benefício: Contexto aprimorado para compreender a mensagem geral e as relações entre as diferentes partes do texto
Considerações para o chunking ideal:
Encontrar o tamanho ideal do chunk é um equilíbrio delicado entre focar em detalhes específicos e capturar o contexto mais amplo. Vários fatores influenciam isso:
- Tarefa em questão: para tarefas como responder a perguntas, pedaços menores podem ser preferidos para maior precisão. Por outro lado, as tarefas de resumo se beneficiam de blocos maiores para melhor contexto.
- Tipo de dados: diferentes tipos de dados podem exigir diferentes abordagens de agrupamento. Por exemplo, o código pode ser dividido de forma diferente de um artigo de notícias.
- Precisão desejada: partes menores podem levar a uma maior precisão, enquanto partes maiores podem oferecer melhor compreensão geral.
Desbloqueando o futuro:
O chunking eficaz maximiza a pontuação de relevância do vetor de recuperação, permitindo que os LLMs gerem as respostas mais precisas e criterativas possíveis. Ao entender o impacto do tamanho do chunk e outros fatores relevantes, podemos liberar todo o potencial dos LLMs e destravar grandes oportunidades para o futuro. Neste tutorial, o tamanho do bloco que controlaremos interativamente é o bloco de recuperação.
Neste tutorial, mostraremos um agente RAG interativo. Um agente é um programa ou sistema de computador projetado para perceber seu ambiente, tomar decisões e atingir objetivos específicos. O agente RAG interativo que mostraremos oferece suporte às seguintes ações:
- respondendo perguntas
- Pesquisando na Web
- lendo conteúdo da web (URLs)
- listando todas as fontes
- removendo fontes
- Redefinindo mensagens
- modificando estratégia de pedaços (num_sources, chunk_size, etc.)
Embora um tamanho de chunk otimizado seja crucial, o RAG interativo vai um passo além. Ele permite que os usuários ajustem dinamicamente sua estratégia de RAG em tempo real, usando a função de chamada de API de grandes modelos de linguagem. Isso abre uma nova era de acesso personalizado a informações e gerenciamento de conhecimento.
Este tutorial interativo de RAG utiliza:
- Ajuste dinâmico da estratégia: ao contrário das abordagens RAG tradicionais, os usuários podem ajustar o tamanho do bloco, o número de fontes e outros parâmetros em tempo real, adaptando a resposta do LLMàs suas necessidades específicas.
- Integração da API de chamada de função: a API de chamada de função integra perfeitamente ferramentas e serviços externos aos LLMs. Isso permite que os usuários incorporem perfeitamente suas fontes de dados e ferramentas ao fluxo de trabalho do RAG.
Benefícios:
- Recuperação aprimorada de informações e gerenciamento de conhecimento
- Melhor precisão e relevância das respostas de LLM
- Estrutura flexível e versátil para criar aplicativos de IA
Embora os bancos de dados vetoriais ofereçam vantagens significativas para aplicativos GenAI, o processo de ingestão de conteúdo pode parecer complicado. Felizmente, podemos aproveitar o poder da API de chamada de função para adicionar novo conteúdo ao banco de dados, simplificando o fluxo de trabalho e garantindo atualizações contínuas.
Embora vários bancos de dados possam armazenar embeddings de vetores, cada um com pontos fortes exclusivos, o MongoDB Atlas se destaca para aplicativos de GenAI. Imagine o MongoDB como um delicioso bolo que você pode assar e comer. Ele não só oferece os recursos familiares do MongoDB, mas também permite armazenar e executar operações matemáticas em suas incorporações vetoriais diretamente na plataforma. Isso elimina a necessidade de ferramentas separadas e simplifica todo o processo.
Ao aproveitar o poder combinado da API de chamada de funções e do MongoDB Atlas, você pode otimizar seu processo de ingestão de conteúdo e liberar todo o potencial das incorporações vetoriais para seus aplicativos GenAI.
- Incorporações vetoriais: o MongoDB Atlas fornece a funcionalidade para armazenar incorporações vetoriais no centro do seu documento. Essas incorporações são geradas convertendo texto, vídeo ou áudio em vetores utilizando modelos como GPT4All, OpenAI ou Abraçando Face.
1 # Chunk Ingest Strategy 2 self.text_splitter = RecursiveCharacterTextSplitter( 3 # Set a really small chunk size, just to show. 4 chunk_size=4000, # THIS CHUNK SIZE IS FIXED - INGEST CHUNK SIZE DOES NOT CHANGE 5 chunk_overlap=200, # CHUNK OVERLAP IS FIXED 6 length_function=len, 7 add_start_index=True, 8 ) 9 # load data from webpages using Playwright. One document will be created for each webpage 10 # split the documents using a text splitter to create "chunks" 11 loader = PlaywrightURLLoader(urls=urls, remove_selectors=["header", "footer"]) 12 documents = loader.load_and_split(self.text_splitter) 13 self.index.add_documents( 14 documents 15 ) - Índice vetorial: Ao empregar a pesquisa vetorial, é necessário criar um índice de pesquisa. Este processo envolve configurar o caminho do vetor, alinhar as dimensões com o modelo escolhido e selecionar uma função vetorial para pesquisar os K vizinhos mais próximos.
1 { 2 "name": "<index-name>", 3 "type": "vectorSearch", 4 "fields":[ 5 { 6 "type": "vector", 7 "path": <field-to-index>, 8 "numDimensions": <number-of-dimensions>, 9 "similarity": "euclidean | cosine | dotProduct" 10 }, 11 ... 12 ] 13 } - Recuperação de fragmentos : depois que as incorporações vetoriais são indexadas, um pipeline de agregação pode ser criado em seus dados vetoriais incorporados para executar consultas e recuperar resultados. Isso é feito usando o operador$vectorSearch , um novo estágio de agregação no Atlas.
1 def recall(self, text, n_docs=2, min_rel_score=0.25, chunk_max_length=800,unique=True): 2 #$vectorSearch 3 print("recall=>"+str(text)) 4 response = self.collection.aggregate([ 5 { 6 "$vectorSearch": { 7 "index": "default", 8 "queryVector": self.gpt4all_embd.embed_query(text), #GPT4AllEmbeddings() 9 "path": "embedding", 10 #"filter": {}, 11 "limit": 15, #Number (of type int only) of documents to return in the results. Value can't exceed the value of numCandidates. 12 "numCandidates": 50 #Number of nearest neighbors to use during the search. You can't specify a number less than the number of documents to return (limit). 13 } 14 }, 15 { 16 "$addFields": 17 { 18 "score": { 19 "$meta": "vectorSearchScore" 20 } 21 } 22 }, 23 { 24 "$match": { 25 "score": { 26 "$gte": min_rel_score 27 } 28 } 29 },{"$project":{"score":1,"_id":0, "source":1, "text":1}}]) 30 tmp_docs = [] 31 str_response = [] 32 for d in response: 33 if len(tmp_docs) == n_docs: 34 break 35 if unique and d["source"] in tmp_docs: 36 continue 37 tmp_docs.append(d["source"]) 38 str_response.append({"URL":d["source"],"content":d["text"][:chunk_max_length],"score":d["score"]}) 39 kb_output = f"Knowledgebase Results[{len(tmp_docs)}]:\n```{str(str_response)}```\n## \n```SOURCES: "+str(tmp_docs)+"```\n\n" 40 self.st.write(kb_output) 41 return str(kb_output)
Neste tutorial, vamos nos concentrar principalmente na estratégiaCUNK RETRIEVAL usando a função de chamada API de LLMs e MongoDB Atlas como nossa plataforma de dados.
O MongoDB Atlas oferece uma plataforma robusta de pesquisa vetorial com vários recursos principais, incluindo:
- Operador $vectorSearch: Este poderoso operador de pipeline de agregação permite pesquisar documentos com base em suas incorporações vetoriais. Você pode especificar o índice a ser pesquisado, o vetor de consulta e a métrica de similaridade a ser usada. $vectorSearch fornece recursos de pesquisa eficientes e escaláveis para dados vetoriais.
- Filtragem flexível: você pode combinar $vectorSearch com outros operadores de pipeline de agregação como $match, $sorte $limit para filtrar e refinar seus resultados do Atlas Search. Isso permite que você encontre os documentos mais relevantes com base em suas incorporações vetoriais e outros critérios.
- Suporte para várias métricas de similaridade: O MongoDB Atlas suporta diferentes métricas de similaridade, como similaridade de cosseno e distância euclideana, permitindo que você escolha a melhor medida para seus dados e tarefas específicas.
- Alto desempenho: o mecanismo de pesquisa vetorial no MongoDB Atlas é otimizado para grandes conjuntos de dados e altos volumes de query, garantindo experiências de pesquisa eficientes e responsivas.
- Escalabilidade:o MongoDB Atlas se expande perfeitamente para atender às suas necessidades crescentes, permitindo que você gerencie volumes de dados crescentes e consultecargas de trabalho de forma eficaz.
Além disso, o MongoDB Atlas oferece vários recursos relevantes para os recursos de sua plataforma:
- Disponibilidade global: seus dados são armazenados em vários data centers em todo o mundo, garantindo alta disponibilidade e recuperação de desastres.
- Segurança: O MongoDB Atlas oferece recursos robustos de segurança, incluindo criptografia em repouso e em trânsito, controle de acesso e registro de auditoria de dados.
- Monitoramento e alerta: o MongoDB Atlas oferece recursos abrangentes de monitoramento e alerta para ajudá-lo a acompanhar o desempenho do cluster e identificar possíveis problemas.
- Ferramentas para desenvolvedores: O MongoDB Atlas oferece várias ferramentas para desenvolvedores e APIs para simplificar o desenvolvimento e a integração com seus aplicativos.
A chamada de função da OpenAI é um recurso poderoso que permite aos usuários interagir perfeitamente com modelos OpenAI, como GPT-3.5, através de comandos programáveis. Essa funcionalidade permite que desenvolvedores e entusiastas aproveitem o vasto conhecimento e a compreensão da linguagem natural do modelo de linguagem, incorporando-o diretamente em seus aplicativos ou scripts. Por meio da chamada de função, os usuários podem fazer solicitações específicas ao modelo, fornecendo parâmetros de entrada e recebendo respostas personalizadas. Isso não apenas facilita interações mais precisas e direcionadas, mas também abre um mundo de possibilidades para a criação de aplicativos dinâmicos e sensíveis ao contexto que aproveitam os amplos recursos linguísticos dos modelos da OpenAI. Seja para geração de conteúdo, tradução de idiomas ou resolução de problemas, a chamada de função OpenAI oferece uma maneira flexível e eficiente de integrar o processamento de linguagem de ponta em vários domínios.
- A chamada de função permite conectar modelos de linguagem grandes a ferramentas externas.
- Os modelos mais recentes foram formados para detectar quando uma função deve ser chamada e responder com JSON que adere à assinatura da função.
- É recomendável criar fluxos de confirmação de usuários antes de tomar ações que impactem o mundo em nome dos usuários.
- A chamada de função pode ser usada para criar assistentes que respondem perguntas chamando APIs externas, convertendo linguagem natural em chamadas de API e extraindo dados estruturados do texto.
- A sequência básica de etapas para a chamada de funções envolve chamar o modelo, analisar a resposta JSON, chamar a função com os argumentos fornecidos e resumir os resultados de volta ao usuário.
- A chamada de função paralela permite que várias chamadas de função sejam executadas juntas, reduzindo as viagens de ida e volta com a API.
- Os tokens são usados para injetar funções na mensagem do sistema e contam com o limite de contexto e a cobrança do modelo.
Ações são funções que um agente pode invocar. Há duas considerações de design importantes em torno das ações:
1 * Giving the agent access to the right actions 2 * Describing the actions in a way that is most helpful to the agent
As ações são a força vital da tomada de decisão de um agente. Eles definem as opções disponíveis para o agente e moldam suas interações com o ambiente. Consequentemente, projetar ações eficazes é crucial para a construção de agentes de sucesso.
Duas considerações principais orientam este processo de design:
- Acesso a ações relevantes: Certifique-se de que o agente tenha acesso às ações necessárias para atingir seus objetivos. Omitir ações críticas limita as capacidades do agente e dificulta seu desempenho.
- Clareza na descrição da ação: Descreva as ações de uma forma informativa e inequívoca para o agente. Descrições vagas ou incompletas podem levar a interpretações erradas e decisões abaixo do ideal.
Ao projetar cuidadosamente ações acessíveis e bem definidas, você fornece ao seu agente as ferramentas e o conhecimento necessários para navegar em seu ambiente e atingir seus objetivos.
Considerações adicionais:
- Granularidade das ações: as ações devem ser de alto ou baixo nível? As ações de alto nível oferecem maior flexibilidade, mas exigem mais tomada de decisão, enquanto as ações de baixo nível oferecem mais controle, mas limitam a adaptabilidade.
- Pré-condições e efeitos da ação: Defina claramente as condições sob as quais uma ação pode ser tomada e suas possíveis consequências. Isso ajuda o agente a entender as implicações de suas escolhas.
Se você não der ao agente as ações corretas e descrevê-las de maneira eficaz, não poderá criar um agente funcional.
(Crédito para postagem do blog: Faça o agente Langchain realmente funcionar com LLMs locais (Vicuna, WizardLM))
Um LLM é então chamado, resultando em uma resposta ao usuário ou ações a serem executadas. Se for determinado que uma resposta é necessária, ela será passada para o usuário e o ciclo será encerrado. Se for determinado que uma ação é necessária, essa ação será executada e uma observação (resultado da ação) será feita. Essa ação e a observação correspondente são adicionadas de volta ao prompt (chamamos isso de "agent scratchpad "), e o loop é redefinido — ou seja, o LLM é chamado novamente (com o bloco de rascunho do agente atualizado).
Clone o repositório demo do Github.
1 git clone git@github.com:ranfysvalle02/Interactive-RAG.git
Criar um novo ambiente Python.
1 python3 -m venv env
Ative o novo ambiente Python.
1 source env/bin/activate
Instale os requisitos.
1 pip3 install -r requirements.txt
1 # MongoDB 2 MONGODB_URI = "" 3 DATABASE_NAME = "genai" 4 COLLECTION_NAME = "rag" 5 6 # If using OpenAI 7 OPENAI_API_KEY = "" 8 9 # If using Azure OpenAI 10 #OPENAI_TYPE = "azure" 11 #OPENAI_API_VERSION = "2023-10-01-preview" 12 #OPENAI_AZURE_ENDPOINT = "https://.openai.azure.com/" 13 #OPENAI_AZURE_DEPLOYMENT = ""
Crie um índice de pesquisa com a seguinte definição:
1 { 2 "type": "vectorSearch", 3 "fields": [ 4 { 5 "numDimensions": 384, 6 "path": "embedding", 7 "similarity": "cosine", 8 "type": "vector" 9 } 10 ] 11 }
Defina o ambiente.
1 export OPENAI_API_KEY=
Para executar o aplicativo RAG:
1 env/bin/streamlit run rag/app.py
As informações de registro geradas pelo aplicativo serão anexadas a app.log.
Esse bot oferece suporte às seguintes ações: responder a perguntas, pesquisar na web, ler URLs, remover fontes, listar todas as fontes, visualizar mensagens e redefinir mensagens.
Ele também oferece suporte a uma ação chamada iRAG que permite controlar dinamicamente a estratégia RAG do seu agente.
Ex: "definir configuração RAG para 3 fontes e tamanho de bloco 1250" => Nova configuração RAG:{'num_sources': 3, 'source_chunk_size': 1250, 'min_rel_score': 0, 'exclusivo': verdadeiro}.
Se o bot não conseguir fornecer uma resposta para a pergunta a partir dos dados armazenados no Atlas Search e de sua RAG (número de fontes, tamanho do bloco, min_rel_score etc.), ele iniciará uma pesquisa na Web para encontrar informações relevantes. Você pode então instruir o bot a ler e aprender com esses resultados.
Vamos começar fazendo uma pergunta ao nosso agente - neste caso, "O que é uma manga?" A primeira coisa que acontecerá é que ele tentará "recall" qualquer informação relevante usando a similaridade de incorporação de vetor. Em seguida, ele formulará uma resposta com o conteúdo que "recuperou" ou realizará uma pesquisa na web. Como nossa base de conhecimento está vazia no momento, precisamos adicionar algumas fontes antes que ela possa formular uma resposta.
Como o bot não consegue fornecer uma resposta usando o conteúdo no banco de dados vetorial, ele iniciou uma pesquisa no Google para encontrar informações relevantes. Agora podemos dizer a ele quais fontes ele deve "aprender." Nesse caso, diremos a ele para aprender as duas primeiras fontes a partir dos resultados da pesquisa.
Em seguida, vamos modificar a estratégia RAG! Vamos fazer com que ele use apenas uma fonte e usar um pequeno tamanho de 500 caracteres.
Observe que, embora tenha sido capaz de recuperar uma parte com uma pontuação de relevância bastante alta, não foi capaz de gerar uma resposta porque o tamanho da parte era muito pequeno e o conteúdo da parte não era relevante o suficiente para formular uma resposta. Como não foi possível gerar uma resposta com o pequeno bloco, foi realizada uma pesquisa na Web em nome do usuário.
Vamos ver o que acontece se aumentarmos o tamanho do chunk para 3,000 caracteres em vez de 500.
Agora, com um tamanho de bloco maior, ele foi capaz de formular com precisão a resposta usando o conhecimento do banco de dados vetorial!
Vamos ver o que está disponível na base de conhecimento do agente perguntando: "What sources do you have in your knowledge base? "
Se quiser remover um recurso específico, você pode fazer algo como:
1 USER: remove source 'https://www.oracle.com' from the knowledge base
Para remover todas as fontes da collection, podemos fazer algo como:
Esta demonstração forneceu um visão geral do funcionamento interno de nosso agente de AI , mostrando sua capacidade de aprender e responder às consultas dos usuários de forma interativa. Observamos como ele combina perfeitamente sua base de conhecimento interna com o Atlas Search em tempo real para fornecer informações abrangentes e precisas. O potencial dessa tecnologia é amplo, vai muito além da simples resposta a perguntas. Nada disso seria possível sem a varíola da função que chama a API.
Este post explorou o incrível potencial da geração aumentada de recuperação interativa (RAG) com a poderosa combinação do MongoDB Atlas e da API de chamada de funções. Investigamos o papel crucial de fragmentar, incorporar e recuperar a pontuação de relevância vetorial na otimização do desempenho do RAG, revelando seu verdadeiro potencial para recuperação de informações e gerenciamento de conhecimento.
O RAG interativo, alimentado pelas forças combinadas do MongoDB Atlas e da API de chamada de função, representa um avanço significativo no campo da recuperação de informações e do gerenciamento de conhecimento. Ao permitir o ajuste dinâmico da estratégia RAG e a integração perfeita com ferramentas externas, ele habilita os usuários a aproveitar todo o potencial dos LLMs para uma experiência verdadeiramente interativa e personalizada.
Intrigado com as possibilidades? Explore o código-fonte completo do aplicativo RAG interativo e libere o poder do RAG com o MongoDB Atlas e a API de chamada de função em seus próprios projetos!
Juntos, vamos liberar o potencial transformativo dessa poderosa combinação e forjar um futuro em que a informação seja acessível sem esforço e o conhecimento esteja facilmente disponível para todos.
View é o código-fonte completo para o aplicativo RAG interativo usando o MongoDB Atlas e a API de chamada de função.
Principais comentários nos fóruns
Ainda não há comentários sobre este artigo.