Aprimorando aplicativos LLM com tecnologias sensíveis ao contexto As aplicações de Grandes Modelos de Linguagem têm sido transformadoras em vários setores, moldando uma nova fronteira no processamento e compreensão da linguagem natural. Os LLMs, conhecidos por gerar textos semelhantes aos humanos, revolucionaram os chatbots, a criação de conteúdo e até mesmo tarefas complexas de resolução de problemas. No entanto, apesar das suas capacidades impressionantes, os LLMs enfrentam desafios notáveis, particularmente na e na manutenção da precisão ao longo de interações prolongadas. Uma armadilha comum é a sua tendência para “ ”, onde o conteúdo gerado, embora fluente, pode tornar-se impreciso ou irrelevante. consciência do contexto alucinações É aqui que tecnologias como e se tornam fundamentais. Ao integrar LLMs com RAG, que recupera dinamicamente informações relevantes de vastos conjuntos de dados, podemos mitigar significativamente essas limitações. A sinergia entre LLMs e bancos de dados vetoriais, capazes de manipular e recuperar com eficiência dados vetoriais estruturados, promete trazer um novo nível de profundidade, contexto e confiabilidade às aplicações LLM. Geração Aumentada de Recuperação (RAG) bancos de dados vetoriais Neste blog, os leitores podem esperar: : Compreender as limitações dos LLMs, como consciência do contexto e problemas de precisão. Insights abrangentes sobre os desafios do LLM : explorando como essas técnicas abordam as desvantagens dos LLMs tradicionais. Introdução aos bancos de dados RAG e vetoriais : exemplos práticos que mostram a integração do RAG com bancos de dados vetoriais para aprimorar aplicações LLM. Demonstrações práticas e tutoriais : explorando como essas integrações podem ser aplicadas de forma eficaz em ambientes empresariais. Aplicações do mundo real : seja você um entusiasta de tecnologia, um profissional de IA ou um profissional de negócios, o blog tem como objetivo fornecer informações valiosas e conhecimento prático. Conhecimento prático para vários públicos Compreendendo a geração aumentada de recuperação (RAG) é um paradigma inovador no campo de IA e processamento de linguagem natural. Ele marca uma mudança significativa em relação aos modelos de linguagem convencionais, integrando a recuperação de informações no processo de geração de linguagem. Esta abordagem híbrida aumenta a capacidade dos modelos de IA de gerar respostas que não são apenas contextualmente precisas, mas também infundidas com conhecimento atualizado de fontes de dados externas. A Geração Aumentada de Recuperação (RAG) O início do RAG remonta à busca por superar as limitações dos modelos de linguagem padrão, como o GPT (Generative Pre-trained Transformer). Os modelos tradicionais, apesar da sua proficiência na geração de texto coerente, muitas vezes têm dificuldade em fornecer respostas precisas e baseadas em factos, especialmente para consultas que requerem conhecimento específico e em tempo real. Aqui está uma descrição de como funciona a Geração Aumentada de Recuperação (RAG), integrando-se a um banco de dados vetorial: : o fluxo de trabalho começa com uma abrangente, que é a base da inteligência do sistema. Esta Base de Conhecimento é normalmente um grande corpus de documentos contendo informações que podem ser consultadas pelos usuários. Esses documentos podem ser qualquer coisa, desde planilhas e artigos de perguntas frequentes até bancos de dados de informações estruturadas. Antes que esses documentos possam ser utilizados, eles passam por um processo de ingestão onde são pré-processados e transformados em embeddings. Um – geralmente um algoritmo sofisticado de aprendizado de máquina – é empregado para converter as informações textuais em incorporações vetoriais. Essas incorporações representam numericamente o conteúdo semântico dos documentos em um espaço multidimensional, o que é ideal para comparações de similaridade. Ingestão e indexação base de conhecimento modelo de incorporação : tudo começa com um cliente interagindo com um aplicativo e fazendo uma consulta. Esta consulta é um pedido de informação ou uma pergunta que o cliente espera que a IA responda. Interação com o cliente : a consulta bruta do cliente é então processada por um modelo de incorporação. Este modelo converte a consulta de texto em um vetor, que é uma representação numérica que captura o significado semântico da consulta em um espaço de alta dimensão. Incorporação de consulta : o vetor de consulta é enviado para um banco de dados vetorial, um banco de dados especializado projetado para lidar com dados vetoriais de alta dimensão. O banco de dados realiza uma pesquisa de similaridade para recuperar os embeddings de documentos mais relevantes. Essas incorporações representam conhecimento pré-processado de uma Base de Conhecimento que foi ingerida no sistema. Pesquisa de banco de dados vetorial : os embeddings de documentos recuperados são combinados com a consulta original para formar um prompt que inclui a consulta e o contexto relevante. Recuperação de contexto : esse prompt enriquecido é então alimentado em um modelo de aprendizagem de linguagem (LLM). O LLM utiliza o contexto dos documentos recuperados para gerar uma resposta precisa, informativa e contextualmente relevante para a consulta do cliente. Geração de resposta do modelo de linguagem : Finalmente, o LLM produz uma resposta generativa, que é devolvida ao cliente por meio do aplicativo. Esta resposta não se baseia apenas no conhecimento pré-treinado do modelo, mas também é aumentada com informações específicas recuperadas da base de conhecimento, tornando-a altamente relevante para a solicitação do usuário. Resposta Generativa Bancos de dados vetoriais Os bancos de dados vetoriais armazenam e gerenciam dados que foram convertidos em formato vetorial numérico, geralmente por meio de processos como a incorporação de modelos em aprendizado de máquina. Incorporações são representações numéricas de dados, geralmente vetores de alta dimensão, que capturam as características semânticas ou contextuais da entrada original. No caso de dados de texto, os embeddings convertem palavras, frases ou documentos inteiros em um formato que um computador pode processar. Modelos de aprendizado de máquina, particularmente redes neurais, são usados para gerar esses embeddings para que significados semelhantes sejam próximos no espaço vetorial. Esses bancos de dados são projetados para realizar pesquisas de similaridade com eficiência, que localizam pontos de dados mais próximos de um determinado vetor de consulta dentro do espaço vetorial. Aqui está uma visão mais aprofundada do processo: : quando os documentos são ingeridos, um modelo de incorporação (como uma rede neural) transforma o texto em um vetor de alta dimensão. Cada vetor representa o significado semântico do documento em forma numérica. Esses vetores são então armazenados no banco de dados de vetores. Armazenamento de dados : Para facilitar a recuperação rápida, o banco de dados constrói um índice sobre esses vetores usando algoritmos adequados para espaços de alta dimensão, como Índice de Arquivo Invertido (IVF) ou Mundo Pequeno Navegável Hierárquico (HNSW). A escolha do tipo de índice equilibra a velocidade e a precisão da pesquisa. Indexação : quando uma consulta é feita, ela também é convertida em um vetor usando o mesmo modelo de incorporação. O banco de dados vetorial usa então o índice para encontrar rapidamente os vetores mais semelhantes ao vetor de consulta. A similaridade é determinada por métricas de distância, como distância euclidiana ou similaridade de cosseno. Pesquisa de similaridade : Vantagens das incorporações : Os embeddings são projetados para que itens semanticamente semelhantes estejam mais próximos no espaço vetorial, permitindo que os sistemas entendam o contexto e o significado. Por exemplo, no campo da genómica, os dados de expressão genética podem ser codificados como incorporações para revelar padrões que indicam relações entre diferentes genes e fenótipos. Isto pode ajudar na identificação de biomarcadores para doenças que podem não ser aparentes através da análise tradicional. Semântica Semântica : Eles podem capturar relacionamentos complexos e nuances nos dados que podem ser perdidas nas representações tradicionais. Uma aplicação prática é vista em sistemas de recomendação, como aqueles usados por serviços de streaming como Netflix ou Spotify. Essas plataformas usam incorporações para entender as preferências do usuário e os recursos de conteúdo, recomendando assim filmes ou músicas que compartilham semelhanças com as escolhas anteriores do usuário. Apesar da diversidade de conteúdo, os embeddings permitem recomendações diferenciadas que vão além do gênero ou artista, considerando padrões mais profundos de consumo do usuário. Relacionamentos Complexos : os embeddings convertem vários tipos de dados em um formato vetorial uniforme, simplificando operações como comparação e recuperação. Uniformidade Introdução ao banco de dados vetorial A criação de um ambiente de desenvolvimento local para RAG e Vector DB ( ) envolve várias etapas importantes. Milvus Aqui está um guia estruturado: : Pré-requisitos Certifique-se de que o Python 3.6+ esteja instalado em seu sistema. Docker é necessário para executar o Milvus. : Ambiente Virtual Crie um novo ambiente virtual e use-o: python3 -m venv rag-milvus-env source rag-milvus-env/bin/activate # Install supporting dependencies pip install transformers datasets faiss-cpu torch sentence-transformers pymilvus : Milvus usando docker Extraia e execute a imagem Milvus Docker: (você também pode usar outros bancos de dados vetoriais) Você pode usar as etapas abaixo ou seguir o guia de primeiros passos fornecido . aqui docker pull milvusdb/milvus:latest docker run -d --name milvus_cpu -p 19530:19530 -p 19121:19121 milvusdb/milvus:latest : Dados de configuração Agora vamos tentar baixar alguns dados de amostra, criar embeddings e inseri-los em uma coleção. import requests import csv url = "http://qim.fs.quoracdn.net/quora_duplicate_questions.tsv" # Download the file response = requests.get(url) response.raise_for_status() # This will raise an error if the download failed # Decode the content and split into lines lines = response.content.decode('utf-8').splitlines() questions = [] # Process the lines reader = csv.reader(lines, delimiter='\t') next(reader) # Skip the header row for row in reader: questions.extend([row[1], row[4]]) # Assuming the questions are in the 2nd and 3rd columns questions = questions[:10000] Criar incorporações from sentence_transformers import SentenceTransformer # transformer to create embeddings model = SentenceTransformer('all-MiniLM-L6-v2') embeddings = model.encode(questions) Insira no vetor DB. # connect to db connections.connect() embedding_size = 384 # Prepare the collection schema fields = [ FieldSchema(name="id", dtype=DataType.INT64, is_primary=True, auto_id=True), FieldSchema(name="embedding", dtype=DataType.FLOAT_VECTOR, dim=embedding_size) ] schema = CollectionSchema(fields, "questions") collection = Collection("questions", schema) # Insert the document embeddings mr = collection.insert([embeddings]) # to get document, in practice this would be some external DB. id_to_question = {str(mr.primary_keys[i]): questions[i] for i in range(len(questions))} # List all collections collections = list_collections() print(collections) Indexe a coleção. from pymilvus import Collection index_params = { "metric_type": "L2", "index_type": "HNSW", # Index of type HNSW, refer to docs for other types. "params": { "M": 16, # Example value, adjust as needed "efConstruction": 200 } } collection = Collection("questions") collection.create_index( field_name="embedding", index_params=index_params ) Consultar documentos query = "What is artificial intelligence?" query_embedding = model.encode(query) collection.load() # Define search parameters search_params = {"metric_type": "L2", "params": {"nprobe": 10}} # Perform the search results = collection.search( data=[query_vector], anns_field="embedding", param=search_params, limit=10, expr=None, consistency_level="Strong" ) # Process results for result in results: milvus_id = str(result.id) # Convert ID to string for dictionary lookup original_question = id_to_question[milvus_id] print(f"Milvus ID: {milvus_id}, Similar Question: {original_question}") Assim que obtivermos documentos semanticamente semelhantes do banco de dados vetorial, poderíamos passar esse contexto + consulta de entrada para LLMs, que terão resultados muito melhores, pois os LLMs têm contexto agora. Conclusão Concluindo, a integração do RAG com bancos de dados vetoriais como Milvus oferece uma solução potente para alguns dos desafios mais urgentes em aplicações LLM – particularmente aquelas que exigem compreensão contextual profunda e recuperação dinâmica de informações. Ao combinar a capacidade generativa dos LLMs com a precisão e eficiência dos bancos de dados vetoriais, as empresas podem melhorar enormemente a relevância e a precisão das respostas orientadas pela IA, proporcionando aos usuários interações valiosas e contextualmente ricas. À medida que a IA continua a avançar, a fusão destas tecnologias representa não apenas um passo, mas um salto em frente, anunciando um futuro onde a IA pode suportar aplicações mais sofisticadas, variadas e diferenciadas em todos os setores. Este blog preparou o terreno para inovadores e profissionais começarem a experimentar essas ferramentas, ampliando os limites do que é possível no domínio dos aplicativos empresariais de IA.