Num mundo de informação cada vez mais confuso, é cada vez mais importante tornar as suas próprias bases de dados pesquisáveis de forma direcionada - não através de pesquisas clássicas de texto integral, mas através de respostas semanticamente relevantes. É exatamente aqui que entra em jogo o princípio da base de dados RAG - uma solução de pesquisa apoiada por IA que consiste em dois componentes centrais:
- uma base de dados vetorial (como Qdrant) em que qualquer conteúdo é armazenado como vectores numéricos,
- e um modelo linguístico (por exemplo, através do Ollama) que combina de forma inteligente os respectivos pedidos com o conteúdo adequado.
Em vez de deixar o modelo "adivinhar", esta arquitetura utiliza as suas próprias fontes de conhecimento - por exemplo:
- documentários escritos pelo próprio,
- Conteúdo dos sítios Web,
- manuais técnicos,
- Bases de dados de apoio,
- Listas de FAQ,
- ou quaisquer fontes de texto arquivadas (por exemplo, de bases de dados antigas).
O fator decisivo: Todas estas fontes podem ser preparadas antecipadamente e "fragmentadas" (ou seja, divididas em pequenas unidades de texto) para poder fornecer mais tarde os excertos de texto mais relevantes para uma pergunta do utilizador.
Assim, quer pretenda tornar analisável a sua própria base de dados de conhecimentos, documentação interna ou todo um arquivo de produtos - com Ollama + Qdrant pode fazê-lo no seu próprio Mac, sem quaisquer restrições da nuvem e com controlo total sobre os dados.
O que é uma base de dados RAG - e porquê "chunking"?
RAG significa Retrieval-Augmented Generation - por outras palavras: IA geradora de texto com recuperação assistida de informação. Em vez de treinar um modelo linguístico como o GPT, o Mistral ou o LLaMA apenas com base naquilo que já "sabe", pode aceder a informações adicionais através de uma base de dados de conhecimentos conectada (normalmente a chamada base de dados vetorial).
Exemplo:
Se perguntar a um modelo de linguagem: "O que é que está na minha declaração de impostos de 2023?", ele terá de adivinhar sem acesso aos dados originais. No entanto, se tiver acesso a uma representação vetorial deste documento, armazenada localmente, pode recuperar as informações relevantes e incorporá-las na sua resposta.
Por que é que o conteúdo é "dividido em pedaços"?
Os documentos, sítios Web ou livros são normalmente demasiado longos para serem processados ou pesquisados de uma só vez. Os modelos linguísticos modernos também têm limites de tokens - ou seja, um comprimento limitado de texto que podem compreender de uma só vez (frequentemente cerca de 4.000-8.000 tokens, sendo que os modelos mais recentes chegam a ter 32.000 ou mais).
É por isso que o RAG utiliza o seguinte truque:
- O texto original está dividido em pequenas secções (chunks).
- Cada pedaço é convertido num vetor por um modelo de linguagem (incorporação).
- Estes vectores são armazenados numa base de dados como a Qdrant.
- Quando o utilizador faz um pedido, o pedido também é traduzido para um vetor - e os pedaços mais semelhantes são recuperados.
- Este conteúdo é então adicionado ao modelo linguístico - por exemplo, através de uma solicitação do sistema ou de uma injeção de contexto.
Isto cria um sistema que se comporta como uma memória - mas sem palavras-chave clássicas ou pesquisa de texto completo, mas puramente baseado no significado (semântico).
Requisitos e objetivo
Estamos a construir um sistema RAG local que consiste em:
- um LLM local via Ollama
- uma base de dados vetorial denominada Qdrant
- um script Python que divide, vetoriza e insere textos na base de dados
- Opcional: uma interface simples ou API para consulta
Plataforma de destino: macOS (Intel ou Apple Silicon)
Esta é uma condição prévia:
- macOS 12 ou mais recente (Monterey ou superior)
- Conhecimentos básicos dos terminais
- Python 3.10 ou mais recente
- Facultativo: Homebrew installiert
Etapa 1: Ollama 1TP12Animal
O Ollama é uma ferramenta simples que lhe permite executar modelos linguísticos locais como o Mistral, LLaMA, Gemma ou Codellama no seu próprio computador, mesmo sem Internet.
Instalação no Mac:
curl -fsSL https://ollama.com/install.sh | sh
Em alternativa, o Ollama também pode ser atribuído através do Homebrew install:
brew install ollama
Após a instalação:
ollama run mistral
Isto descarrega o modelo Mistral 7B e inicia-o localmente. O Ollama vem com uma API REST, que usaremos mais tarde para vectorização. É claro que também é possível usar outros modelos, como Gemma3 (12B), Mistral Small (24B) ou outros LLMs.
Etapa 2: Animais Qdrant 1TP12 (base de dados vetorial local)
Qdrant é uma base de dados vetorial extremamente rápida baseada em Rust. É gratuita, de código aberto e fácil de iniciar no Mac - de preferência através do Docker. Se ainda não instalou o Docker no seu Mac 1TP12, pode descarregá-lo a partir da página Sítio Web do Docker gratuitamente e executá-lo no seu Mac como uma aplicação de ambiente de trabalho normal installieren. Em alternativa, também pode instalar o Docker através do Homebrew install se já estiver a utilizar o Homebrew:
brew install --cask docker
Em seguida, inicie o Qdrant através do Docker:
docker run -p 6333:6333 -v qdrant_storage:/qdrant/storage qdrant/qdrant
A Qdrant pode ser contactada através do endereço
http://localhost:6333
Para testar:
curl http://localhost:6333/collections
Passo 3: Preparar o ambiente Python
Precisamos de Python para a fragmentação, a incorporação e a comunicação com Qdrant.
Preparação:
python3 -m venv rag-env source rag-env/bin/activate pip install qdrant-client sentence-transformers ollama numpy
Se o ollama não for reconhecido como um pacote Python, utilize a API REST diretamente através de pedidos:
pip install requests
Etapa 4: Chunking e incorporação
Abaixo encontrará um script de exemplo que divide um documento de texto em pedaços, cria embeddings através do Ollama e insere-os no Qdrant:
import requests
from qdrant_client import QdrantClient
from qdrant_client.models import PointStruct
import uuid
# Konfiguration
CHUNK_SIZE = 500 # Zeichen
COLLECTION_NAME = "mein_rag_wissen"
# Text vorbereiten
with open("mein_text.txt", "r") as f:
text = f.read()
chunks = [text[i:i+CHUNK_SIZE] for i in range(0, len(text), CHUNK_SIZE)]
# Qdrant vorbereiten
client = QdrantClient("localhost", port=6333)
# Neue Collection anlegen (falls noch nicht vorhanden)
client.recreate_collection(
collection_name=COLLECTION_NAME,
vectors_config={"size": 4096, "distance": "Cosine"}
)
def get_embedding_ollama(text):
response = requests.post(
"http://localhost:11434/api/embeddings",
json={"model": "mistral", "prompt": text}
)
return response.json()["embedding"]
# Embeddings erzeugen und in Qdrant speichern
points = []
for i, chunk in enumerate(chunks):
vector = get_embedding_ollama(chunk)
points.append(PointStruct(
id=str(uuid.uuid4()),
vector=vector,
payload={"text": chunk}
))
client.upsert(collection_name=COLLECTION_NAME, points=points)
print(f"{len(points)} Chunks erfolgreich eingefügt.")
Etapa 5: Consultas através da pesquisa semântica
Agora é possível enviar consultas como um vetor para o Qdrant e fazer com que este encontre as secções de texto mais relevantes:
query = "Wie funktioniert ein RAG-System?" query_vector = get_embedding_ollama(query) results = client.search( collection_name=COLLECTION_NAME, query_vector=query_vector, limit=3 ) for r in results: print(r.payload["text"])
Pode então passar estes blocos para o Ollama através de um prompt do sistema, por exemplo, e formulá-los como uma resposta relacionada com o contexto.
Exportação Chunking + JSON para FileMaker e outras bases de dados
Em muitos casos, o chunking já pode ser efectuado numa solução de base de dados existente - no FileMaker, por exemplo. É exatamente assim que funciona no meu ambiente de trabalho: os dados de origem - como o conteúdo do sítio Web, entradas de apoio ou artigos técnicos - já estão disponíveis de forma estruturada no FileMaker.
É assim que o processo funciona:
- Os textos são divididos em secções de, por exemplo, 300-500 caracteres no FileMaker, utilizando a sua própria lógica de fragmentação.
- A cada fragmento é atribuído um ID próprio e, se for caso disso, metadados (título, categoria, fonte, língua, etc.).
- Todos os blocos são automaticamente exportados como ficheiros JSON - por exemplo, para um diretório específico numa unidade de rede ou diretamente para o disco rígido do servidor de IA.
- Um script Python no servidor lê estes ficheiros JSON e guarda-os na base de dados Qdrant.
Exemplo de um ficheiro de pedaços exportado (chunk_00017.json)
{
"id": "00017",
"text": "Dies ist ein einzelner Textabschnitt mit ca. 400 Zeichen, der aus einer größeren Quelle stammt. Er wurde in FileMaker vorbereitet und enthält alle relevanten Inhalte, die für eine semantische Suche benötigt werden.",
"metadata": {
"source": "support_center",
"category": "Fehlermeldung",
"language": "de",
"title": "Drucker wird nicht erkannt"
}
}
O script de importação subsequente pode então ser executado automaticamente ou regularmente através do terminal - por exemplo, através de um cron job ou chamada manual:
python3 import_json_chunks.py /Users/markus/Desktop/chunks/
O script lê cada fragmento JSON, gera o vetor correspondente (por exemplo, através de Ollama ou SentenceTransformers) e transfere a entrada para a base de dados Qdrant.
Este método não só é transparente, como também pode ser combinado muito bem com as estruturas de TI existentes - especialmente em empresas que já utilizam o FileMaker ou que gostam de mapear tudo de forma centralizada e controlada visualmente por razões de clareza do processo.
Ligar quaisquer bases de dados à sua IA local
Com o Ollama e o Qdrant, um sistema RAG completo e de alto desempenho pode ser configurado no Mac num curto espaço de tempo:
- Local, sem nuvem ou subscrição
- Expansível, com o seu próprio conteúdo
- Segurança dos dados, pois nada sai do computador
- Eficiente, uma vez que a Qdrant se mantém rápida mesmo com grandes quantidades de dados
Se quiser utilizar a sua IA não apenas para conversar, mas como um verdadeiro sistema de conhecimento e memória, esta combinação é obrigatória. E funciona com pouco esforço - com controlo total sobre os seus próprios dados.
Inquérito atual sobre a utilização de sistemas locais de IA
Perspectivas: O que é possível com RAG, Ollama e Qdrant
A configuração descrita neste artigo constitui a base técnica para uma nova forma de lidar com o conhecimento - local, controlada e flexivelmente expansível. Mas a viagem não termina aqui. Depois de compreender a interação entre a fragmentação, a incorporação, a pesquisa semântica e os modelos linguísticos, rapidamente se aperceberá da versatilidade desta arquitetura na prática.
1. ligação a bases de dados próprias
Quer se trate de FileMaker, MySQL, PostgreSQL ou MongoDB - qualquer conteúdo pode ser regularmente extraído, dividido em pedaços e inserido automaticamente na base de dados vetorial através de consultas específicas. Isto transforma uma base de dados clássica numa fonte de conhecimento semanticamente pesquisável. Especialmente em sistemas de apoio, arquivos de produtos ou bibliotecas digitais, isto abre opções de acesso completamente novas para funcionários ou clientes.
2. importação automática de páginas Web, PDFs ou documentos
Os conteúdos não têm de ser transferidos manualmente. Com ferramentas como BeautifulSoup, readability, pdfplumber ou docx2txt, sítios Web inteiros, manuais em PDF ou documentos Word podem ser automaticamente importados, convertidos em texto e preparados para a fragmentação. Por exemplo, wikis técnicos, portais de clientes ou documentação em linha podem ser regularmente actualizados e introduzidos na base de dados RAG.
3. desenvolvimento de conhecimentos a longo prazo através da estruturação
Ao contrário de uma aplicação clássica de IA, que começa do zero com cada pergunta, uma configuração RAG permite a expansão e a curadoria passo a passo do conhecimento subjacente. A seleção e a preparação de partes específicas criam a sua própria memória semântica, que se torna mais valiosa a cada entrada.
4. ligação com gráficos de conhecimento (Neo4j)
Se quiser dar um passo em frente, pode não só armazenar a informação semanticamente, mas também ligá-la logicamente. Com o Neo4j, uma base de dados de grafos, as relações entre termos, pessoas, tópicos ou categorias podem ser visualizadas e especificamente consultadas. Isto transforma uma coleção de textos num gráfico de conhecimento estruturado que pode ser utilizado tanto por humanos como por IA - por exemplo, para visualizar cadeias causais, sequências temporais ou grupos temáticos.
5. utilizar nas suas próprias ferramentas, aplicações ou chatbots
Uma vez configurada, a lógica RAG pode ser integrada em quase todas as aplicações: como uma função de pesquisa semântica numa aplicação Web interna, como um auxiliar de introdução inteligente num sistema CRM ou como um chatbot com a sua própria experiência no sítio Web da empresa. Ao utilizar APIs locais (por exemplo, Ollama REST e Qdrant gRPC), todos os componentes permanecem flexíveis e expansíveis - mesmo para além das fronteiras tradicionais da empresa.
Aqueles que têm a coragem de se familiarizar com estas ferramentas criam a base para sistemas de IA locais e independentes com um verdadeiro valor de utilidade - num espírito de controlo, soberania e clareza técnica.
Perguntas frequentes sobre o RAG com Ollama + Qdrant
1. o que é uma base de dados RAG - e para que serve?
Uma base de dados RAG (Retrieval Augmented Generation) combina uma base de dados vetorial com um modelo linguístico. Permite tornar o seu próprio conteúdo - por exemplo, documentação ou sítios Web - semanticamente pesquisável, para que os modelos de IA possam aceder especificamente a secções relevantes da sua própria base de dados.
2 O que significa "chunking" neste contexto?
A fragmentação significa dividir textos longos em secções (pedaços) mais pequenas e coerentes - normalmente entre 200 e 500 caracteres. Isto permite que secções de texto individuais sejam guardadas de forma eficiente na base de dados vetorial e recuperadas mais tarde quando surgem questões.
3. Porque é que não se pode simplesmente guardar textos inteiros no Qdrant?
Porque os modelos de IA e as pesquisas vectoriais funcionam com comprimentos de texto limitados. Documentos grandes "esconderiam" conteúdos importantes ou torná-los-iam imprecisos. A fragmentação aumenta a precisão porque são comparadas secções específicas em vez de textos completos.
4. Posso utilizar conteúdos de qualquer fonte?
Sim, desde que tenha os textos num formato editável (por exemplo, texto simples, HTML, Markdown, PDF, entradas FileMaker, etc.), pode prepará-los, dividi-los e integrá-los no Qdrant. Também são possíveis fontes mistas.
5. é necessário saber programar para construir um sistema deste tipo?
Conhecimentos básicos de Terminal e Python são úteis, mas não essenciais. Muitas etapas (por exemplo, a separação em blocos no FileMaker, a exportação JSON) podem ser implementadas visual e automaticamente. O guião de importação Qdrant pode ser facilmente personalizado.
6. Posso também gerir vários documentos ou categorias?
Sim, cada fragmento pode conter metadados - por exemplo, título, fonte, língua ou categoria. Estes podem ser tidos em conta durante a pesquisa para filtrar os resultados de forma mais específica.
7 Quais são os modelos adequados para a geração de incorporação?
Pode utilizar um modelo local através do Ollama (por exemplo, mistral, llama2, gemma) ou um modelo de incorporação separado, como o all-MiniLM de sentence-transformers. É importante que o modelo gere resultados de incorporação como vectores.
8. Como é que inicio o Qdrant no Mac?
A forma mais fácil é através do comando Docker:
docker run -p 6333:6333 -v qdrant_storage:/qdrant/storage qdrant/qdrant
O Qdrant é então executado em http://localhost:6333
9. Qual é o tamanho dos meus volumes de dados?
O Qdrant tem um excelente desempenho e pode gerir facilmente dezenas ou centenas de milhares de blocos. A principal limitação é a RAM e o espaço de armazenamento, não o número.
10. Isto também funciona com o FileMaker?
Sim, é possível fazer toda a exportação de chunking e JSON diretamente no FileMaker. Os pedaços são exportados como ficheiros JSON individuais, que são depois importados para o Qdrant através de um script Python - completamente independente do sistema original.
11. Também posso executar isto noutro servidor em vez de no Mac?
Sem dúvida. A configuração também funciona em servidores Linux, Raspberry Pi ou na nuvem (se desejado). O Docker torna-o independente da plataforma. Para uso produtivo, geralmente é recomendado um servidor com mais RAM e suporte a GPU.
12. Como posso combinar a pesquisa de vectores com o Ollama?
Em primeiro lugar, cria-se um vetor para uma pergunta do utilizador através do Ollama (Embedding API), utilizando-o para procurar os fragmentos mais relevantes no Qdrant e fornecendo-os ao modelo linguístico como contexto. O Ollama processa então a pergunta + informações relevantes para o contexto e gera uma resposta bem fundamentada.
Imagem (c) geralt @ pixabay




