Embeddings e reclassificadores da Voyage AI para pesquisa e RAG
Introdução
No passado, a IA era usada principalmente para analisar e sugerir informações; no entanto, com o advento da IA generativa, agora podemos gerar conteúdo novo e único. Parece legal, mas às vezes o conteúdo pode ser enganoso.
Entra o RAG (Retrieval Augmented Generation), otimizando a saída de um grande modelo de linguagem dado o contexto da consulta. A Zilliz e a Voyage AI fizeram uma parceria para facilitar a criação de um pipeline RAG, como veremos mais adiante no artigo. A Voyage AI fornece modelos de embedding personalizados específicos de domínio e rerankers para busca. Discutiremos alguns deles neste artigo.
Crafting RAG with Zilliz Cloud Pipelines and Voyage Ai.png
Modelos de Embedding e Voyage AI
Computadores não conseguem entender informações de dados como texto ou imagens. Usamos modelos de embedding para tornar os computadores capazes de entender a semântica por trás de dados não estruturados. Esta seção abordará os fundamentos dos modelos de embedding, sua utilidade na IA generativa e por que o RAG é a abordagem predominante para IA generativa empresarial.
Um resumo sobre modelos de embedding
Modelos de embedding são modelos de aprendizado profundo que criam embeddings vetoriais para determinados dados. Esses modelos convertem o texto, a imagem, a voz fornecidos, ou qualquer forma de dados não numéricos ou até mesmo numéricos, em uma representação vetorial compacta. Essa representação, também conhecida como embedding vetorial, mapeia as informações para um espaço vetorial numérico.
Encoding unstructured data into vector embeddings
Limitações da IA generativa
O uso da IA generativa em nível empresarial está disparando devido à sua capacidade fascinante de automatizar tarefas trabalhosas e produzir resultados com esforço mínimo. Embora a Gen AI seja louvável ao nos auxiliar em vários cenários, ela também tem limitações. Modelos de GenAI, como o ChatGPT, são modelos genéricos treinados com milhões ou trilhões de entradas de dados de múltiplos domínios. Esse fato pode ser problemático às vezes. Modelos são probabilísticos e geram a próxima palavra com base no contexto fornecido. Quando o contexto é limitado ou mais novo para o modelo, eles começam a alucinar. É aí que o RAG se destaca.
RAG e como ele reduz alucinações
A técnica RAG requer o uso de modelos de embedding específicos de domínio para incorporar a consulta fornecida. Essa consulta é então levada para um banco de dados vetorial, onde a busca semântica é aplicada para buscar embeddings vetoriais contextuais semelhantes. Todos os documentos relevantes do banco de dados vetorial e a consulta fornecida são então passados para o modelo. O modelo usa as informações adicionais e o contexto da consulta para formular resultados relevantes, atualizados e precisos. Dessa forma, a arquitetura RAG reduz quaisquer alucinações do modelo e permite um LLM mais robusto e confiável.
The RAG architecture
Agora que discutimos modelos de embedding e seu papel no RAG, vamos discutir alguns modelos de embedding da Voyage AI. A Voyage AI fornece vários modelos de embedding personalizados em muitos domínios para executar técnicas RAG eficazes e eficientes. Esses modelos são conectados a bancos de dados vetoriais, como o Milvus da Zilliz, para armazenar e recuperar embeddings vetoriais relacionados à consulta gerada.
Modelos de Embedding da Voyage AI
A Voyage AI fornece muitos modelos de embedding eficientes e eficazes, específicos de domínio e de uso geral. Esses modelos contribuem significativamente para a busca e o RAG. Eles oferecem qualidade de recuperação superior à da maioria dos modelos de embedding.
Entre vários modelos de embedding, os melhores incluem voyage-code-2, voyage-law-2 e voyage-large-2-instruct. A Voyage AI desenvolveu esses modelos para domínios específicos de código, direito, finanças e multilíngue. Além disso, podemos personalizar esses modelos de acordo com nossos casos de uso específicos. Vamos dar uma olhada em seus modelos mais recentes:
- voyage-code-2: Um modelo bem versado em fornecer códigos relacionados à consulta com precisão pontual. A figura a seguir mostra o desempenho do voyage-code-2 para a tarefa de recuperação de código:
voyage-code-2 performance analysis.png
- voyage-law-2: Um modelo treinado para obter contexto e embedding para documentos jurídicos. Este modelo fornece o melhor resultado em relação a documentos jurídicos de contexto longo em diversos domínios e tem melhor desempenho em corpora de uso geral em diversos domínios. Figuras a seguir destacando o desempenho do voyage-law-2:
voyage-law-2 performance analysis
A figura acima mostra as capacidades de desempenho dos modelos de embedding da Voyage AI, que são classificados no topo pelo Massive Text Embedding Benchmark (MTEB).
Rerankers e Voyage AI
Discutimos como o RAG melhora a qualidade da saída da GenAI ao reduzir as alucinações desses modelos. No entanto, um pequeno problema ainda está relacionado à janela de contexto dos modelos GenAI. A janela de contexto refere-se à quantidade máxima de informações que o modelo de IA pode receber em um determinado momento para processamento. Uma janela menor significa que o modelo recebe menos informações; uma maior significa maior custo e tempo de processamento.
Um reranker classifica os documentos obtidos de bancos de dados vetoriais para resultados ideais calculando sua pontuação de relevância com a consulta fornecida. A classificação ajuda a filtrar os documentos mais relevantes (informativos) para caber na janela de contexto e gerar os resultados mais precisos.
Enquanto as técnicas de RAG buscam embeddings vetoriais para fornecer informações contextuais e auxiliar nas buscas, esses modelos reclassificam todos esses embeddings buscados usando uma pontuação de relevância para fornecer os dados mais relevantes aos LLMs.
Simple Reranker Architecture
Rerankers da Voyage AI
A Voyage AI desenvolveu um modelo de reranker conhecido como rerank-lite-1. Este modelo da Voyage é um reranker generalista otimizado para latência e qualidade. Ele tem uma janela de contexto de 4000 tokens. A figura a seguir mostra o desempenho deste modelo.
voyage:ranke-lite-1 performance analysis
Use Embeddings da Voyage em Pipelines do Zilliz Cloud
A Zilliz e a Voyage AI fizeram uma parceria para simplificar a conversão de dados não estruturados em embeddings vetoriais pesquisáveis no Zilliz Cloud.
Esta seção mostrará como integrar o Zilliz Cloud e os modelos de embedding da Voyage AI para geração e recuperação simplificadas de embeddings. Também mostraremos como usar essa integração e a Cohere (o LLM) para criar uma aplicação RAG. Vamos começar.
Configure o Zilliz Cloud
O primeiro passo é configurar o Zilliz Cloud. Se você ainda não tem uma conta do Zilliz Cloud, cadastre-se gratuitamente.
Ao fazer login pela primeira vez, o seguinte console será exibido na tela.
Zilliz cloud console for creating a cluster
- Vamos criar um cluster conforme necessário. A Zilliz oferece um plano gratuito para aprendizado, experimentação e prototipagem, que posteriormente pode ser migrado para diferentes planos de produção.
Creating a new Cluster in Zilliz.png
- Depois de criar o novo cluster, todas as informações necessárias para conexão serão exibidas.
Connection to the cluster
O ID do projeto pode ser recuperado em Projects na barra de menu superior. Localize o projeto de destino e copie seu ID para a coluna Project ID.
Projects Dashboard for Project ID
- Agora, temos todos os ingredientes necessários para nossa conexão com o cluster. É hora de construir nossos pipelines. Usaremos Cohere como o LLM para a aplicação RAG. Para isso, instalaremos
cohere.
%pip install cohere
Aqui estão as importações de que precisamos para este notebook.
import os
import requests
No código abaixo, configuramos nosso CLOUD_REGION, CLUSTER_ID, API_KEY e PROJECT_ID:
CLOUD_REGION = 'gcp-us-west1'
CLUSTER_ID = 'your CLUSTER_ID'
API_KEY = 'your API_KEY'
PROJECT_ID = 'your PROJECT_ID'
Pipelines do Zilliz Cloud
Os Pipelines do Zilliz Cloud convertem dados não estruturados em uma coleção vetorial pesquisável, lidando com processos de embedding, ingestão, busca e exclusão. O Zilliz Cloud oferece três tipos de pipelines:
- Pipeline de Ingestão: Converte dados não estruturados em embeddings vetoriais pesquisáveis e os armazena em Bancos de Dados Vetoriais do Zilliz Cloud. Ele inclui várias funções para transformar campos de entrada e preservar informações adicionais para recuperação.
Pipeline de Busca: Este pipeline permite busca semântica ao converter uma string de consulta em um embedding vetorial e recuperar os Top-K vetores semelhantes junto com seus textos e metadados correspondentes. Ele permite apenas um tipo de função.
Pipeline de Exclusão: Remove entidades especificadas de uma coleção, permitindo apenas um tipo de função.
Pipeline de Ingestão
No pipeline de Ingestão, você pode especificar funções para personalizar seu comportamento com base nos dados de entrada. Atualmente, ele suporta quatro funções:
INDEX_DOC: Recebe um documento como entrada, divide-o em blocos e gera um embedding vetorial para cada bloco. Ele mapeia um campo de entrada para quatro campos de saída (doc_name, chunk_id, chunk_text e embedding) na coleção.PRESERVE: Armazena a entrada definida pelo usuário como um campo escalar adicional na coleção, normalmente usado para metainformações, como informações do editor e tags.INDEX_TEXT: Processa textos convertendo cada texto em embedding vetorial e mapeando um campo de entrada (text_list) para dois campos de saída (text e embedding).INDEX_IMAGE: Processa imagens gerando um embedding de imagem, mapeando dois campos de entrada (image_url e image_id) para dois campos de saída (image_id e embedding).
No trecho de código abaixo, usaremos a biblioteca requests para enviar a solicitação para o Zilliz Cloud. Uma solicitação post compreende URL, cabeçalhos e dados a serem enviados. Vamos criar nosso cabeçalho:
headers = {
"Content-Type": "application/json",
"Accept": "application/json",
"Authorization": f"Bearer {API_KEY}"
}
Definiremos nosso collection_name e embedding_service no código abaixo. O serviço de embedding utilizará modelos da Voyage AI, especificamente voyage-2, que demonstraram desempenho excepcional em tarefas de recuperação, documentação técnica e aplicações gerais.
create_pipeline_url = f"https://controller.api.{CLOUD_REGION}.zillizcloud.com/v1/pipelines"
collection_name = 'Documents'
embedding_service = "voyageai/voyage-large-2"
No trecho de código abaixo, definiremos a função de índice para nosso ingestion_pipeline:
data = {
"name": "ingestion_pipeline",
"description": "Um pipeline que gera embeddings de texto e armazena informações de título.",
"type": "INGESTION",
"projectId": PROJECT_ID,
"clusterId": CLUSTER_ID,
"collectionName": collection_name,
"functions": [
{
"name": "index_doc",
"action": "INDEX_DOC",
"language": "ENGLISH",
"embedding": embedding_service
}
]
}
response = requests.post(create_pipeline_url, headers=headers, json=data)
print(response.json())
O pipelineId será usado posteriormente para ingerir os dados no banco de dados. Após esta etapa, podemos ver nossa coleção criada no cluster, bem como nosso pipeline de ingestão:
ingestion_pipe_id = response.json()["data"]["pipelineId"]
print(ingestion_pipe_id)
>> pipe-cf…
Aqui está a coleção criada na nuvem:
Coleção criada na nuvem
E nosso pipeline de ingestão se parece com isto:
Pipeline de Ingestão no Zilliz Cloud
Pipeline de Busca
Pipelines de busca facilitam a busca semântica convertendo uma string de consulta em um embedding vetorial e recuperando os vetores dos Top-K vizinhos mais próximos. O pipeline de Busca apresenta a função SEARCH_DOC_CHUNK, que exige a especificação do cluster e da coleção a partir da qual pesquisar.
A Zilliz oferece suporte a muitas funções. Aqui, usaremos SEARCH_DOC_CHUNK, que recebe uma consulta do usuário e retorna chunks de documentos relevantes da base de conhecimento.
data = {
"projectId": PROJECT_ID,
"name": "search_pipeline",
"description": "Um pipeline que recebe texto e busca chunks de documentos semanticamente semelhantes",
"type": "SEARCH",
"functions": [
{
"name": "search_chunk_text",
"action": "SEARCH_DOC_CHUNK",
"inputField": "query_text",
"clusterId": f"{CLUSTER_ID}",
"collectionName": f"{collection_name}",
"embedding": embedding_service
}
]
}
response = requests.post(create_pipeline_url, headers=headers, json=data)
search_pipe_id = response.json()["data"]["pipelineId"]
Criamos nossos pipelines de ingestão e busca. É hora de inserir este artigo em nosso pipeline de ingestão e executar nosso pipeline de busca.
Executar o Pipeline de Ingestão
O pipeline de Ingestão pode receber arquivos de Serviços de Armazenamento de Objetos como AWS S3 ou Google Cloud Storage (GCS). Os formatos de arquivo aceitos incluem .txt, .pdf, .md, .html, etc. Podemos executar o pipeline de ingestão a partir do console da Zilliz. Vamos fazer isso passo a passo.
1. Vá para Pipelines à esquerda e navegue até ingestion_pipeline conforme mostrado abaixo:
Pipeline de Ingestão criado na nuvem
2. Após clicar em Run, seremos direcionados à seguinte página:
Anexar arquivo no pipeline de ingestão
Anexe o arquivo de texto e execute o pipeline. Após o sucesso, o arquivo de texto será carregado na coleção. Aqui está a prévia dos dados:
Prévia dos dados da coleção
Executar o Pipeline de Busca
RAG (geração aumentada por recuperação) tem dois componentes principais: o recuperador e o LLM. Criar um recuperador é tão simples quanto executar o pipeline de busca. O pipeline de busca recebe a consulta e recupera o chunk mais relevante do banco de dados. No código abaixo, a função retriever recebe a query e topk (o número de documentos a selecionar ) e executa o pipeline de busca.
def retriver(question, topk):
run_pipeline_url = f"https://controller.api.{CLOUD_REGION}.zillizcloud.com/v1/pipelines/{search_pipe_id}/run"
data = {
"data": {
"query_text": question
},
"params": {
"limit": topk,
"offset": 0,
"outputFields": [
"chunk_text",
"id",
"doc_name"
],
}
}
response = requests.post(run_pipeline_url, headers=headers, json=data)
return [result['chunk_text'] for result in response.json()['data']['result']]
## Aplicação RAG Usando Cohere como o LLM
Depois de recuperar os documentos, usaremos o Cohere como nosso LLM. Forneceremos os documentos recuperados à API de chat do Cohere envolvidos em um prompt e faremos perguntas sobre eles.
import cohere
co = cohere.Client(api_key="your_api_key")
def chatbot(query, topk):
chunks = retriver(query, topk)
response = co.chat(
model="command-r-plus",
message= f"Given this information: '{[chunk for chunk in chunks]}', generate a response for the following {query}"
)
return response.text
question = "I'm looking for a good model for legal retrieving tasks?" print(chatbot(question, 2))
Aqui está a resposta do chatbot:
Com base nas informações fornecidas, parece que você está especificamente interessado em um modelo proficiente em tarefas de recuperação jurídica. Nesse caso, o modelo que melhor atende às suas necessidades é "voyage-law-2."
## Conclusão
A Voyage AI fornece modelos de embedding e rerankers personalizados específicos por domínio para busca avançada. O Zilliz Cloud Pipelines integra perfeitamente os modelos da Voyage AI ao Zilliz Cloud, tornando o desenvolvimento de [RAG](https://zilliz.com/learn/Retrieval-Augmented-Generation) muito mais simplificado.
Este artigo discutiu os modelos de embedding e rerankers populares da voyage AI e sua integração com o Zilliz Cloud. Também demonstramos como criar um RAG com Voyage AI, Zilliz Cloud Pipeline e Cohere.
Para mais detalhes, assista ao replay da palestra de Tengyu Ma no [**Unstructured Data Meetup by Zilliz**](https://www.youtube.com/watch?v=EmoWfP-78l0\&ab_channel=Zilliz)**.**
Continue lendo

8 Latest RAG Advancements Every Developer Should Know
Explore eight advanced RAG variants that can solve real problems you might be facing: slow retrieval, poor context understanding, multimodal data handling, and resource optimization.

What is the K-Nearest Neighbors (KNN) Algorithm in Machine Learning?
KNN is a supervised machine learning technique and algorithm for classification and regression. This post is the ultimate guide to KNN.

Vector Databases vs. Graph Databases
Use a vector database for AI-powered similarity search; use a graph database for complex relationship-based queries and network analysis.



