IA local com memória - sem nuvem, sem subscrição, sem desvios
Num artigos anteriores Expliquei como configurar o Ollama no Mac install. Se já tiver concluído este passo, tem agora um modelo de língua local poderoso - como o Mistral, LLaMA3 ou outro modelo compatível que pode ser abordado através da API REST.
No entanto, o modelo apenas "sabe" o que está no prompt atual. Não se lembra de conversas anteriores. O que falta é uma memória.
É precisamente por isso que utilizamos o Qdrant, uma base de dados vetorial semântica moderna.
Neste artigo, mostrar-lhe-ei passo a passo:
- Como fazer installier Qdrant no Mac (via Docker)
- Como criar embeddings com Python
- como guardar, pesquisar e integrar conteúdos no fluxo de trabalho do Ollama
- e o aspeto de uma sequência completa de prompt→memória→resposta
Porquê a Qdrant?
O Qdrant não armazena textos tradicionais, mas sim vectores que representam o significado de um texto como um código numérico. Isto significa que o conteúdo pode não só ser encontrado exatamente, mas também semanticamente semelhante - mesmo que as palavras variem.
Ollama + Qdrant resulta portanto:
Um modelo de língua local com memória de longo prazo - seguro, controlável e expansível.
Pré-requisitos
- Ollama é installiert e corre (→ por exemplo, ollama corre mistral)
- Docker é installiert: https://www.docker.com/products/docker-desktop
- Python 3.9+
Pacoteinstallação da Qdrant:
pip install qdrant-client sentence-transformers
Iniciar o Qdrant (Docker)
docker run -p 6333:6333 -p 6334:6334 qdrant/qdrant
Qdrant corre em seguida:
http://localhost:6333 (API REST)
http://localhost:6334 (gRPC, não necessário para este artigo)

Exemplo Python para Ollama + Qdrant
Vamos agora escrever um script básico simples que:
- aceita o pedido do utilizador
- gera um vetor de incorporação a partir deste
- procura memórias semanticamente semelhantes em Qdrant
- a resposta é gerada com contexto através do Ollama
- guarda a nova conversa como um lembrete
Python-Script: ollama_memory.py
import requests
from sentence_transformers import SentenceTransformer
from qdrant_client import QdrantClient
from qdrant_client.models import Distance, VectorParams, PointStruct
# Einstellungen
OLLAMA_URL = "http://localhost:11434/api/generate"
COLLECTION_NAME = "memory"
VECTOR_SIZE = 384 # für 'all-MiniLM-L6-v2'
# Lade Embedding-Modell
embedder = SentenceTransformer("all-MiniLM-L6-v2")
# Verbinde mit Qdrant
qdrant = QdrantClient(host="localhost", port=6333)
# Erstelle Collection (einmalig)
def create_collection():
if COLLECTION_NAME not in qdrant.get_collections().collections:
qdrant.recreate_collection(
collection_name=COLLECTION_NAME,
vectors_config=VectorParams(size=VECTOR_SIZE, distance=Distance.COSINE)
)
# Füge Eintrag ins Gedächtnis hinzu
def add_to_memory(text: str):
vector = embedder.encode(text).tolist()
point = PointStruct(id=hash(text), vector=vector, payload={"text": text})
qdrant.upsert(collection_name=COLLECTION_NAME, points=[point])
# Suche im Gedächtnis
def search_memory(query: str, top_k=3):
vector = embedder.encode(query).tolist()
hits = qdrant.search(
collection_name=COLLECTION_NAME,
query_vector=vector,
limit=top_k
)
return [hit.payload["text"] for hit in hits]
# Sende Anfrage an Ollama
def query_ollama(context: list[str], user_prompt: str):
prompt = "\n\n".join(context + [user_prompt])
response = requests.post(OLLAMA_URL, json={
"model": "mistral",
"prompt": prompt,
"stream": False
})
return response.json()["response"]
# Ablauf
def main():
create_collection()
print("Frage an die KI:")
user_prompt = input("> ")
context = search_memory(user_prompt)
answer = query_ollama(context, user_prompt)
print("\nAntwort von Ollama:")
print(answer.strip())
# Speichern der Konversation
full_entry = f"Frage: {user_prompt}\nAntwort: {answer.strip()}"
add_to_memory(full_entry)
if __name__ == "__main__":
main()
Notas sobre a prática
Também pode utilizar os seus próprios modelos de incorporação, por exemplo, através de Ollama (por exemplo, nomic-embed-text) ou modelos Hugging Face
O Qdrant suporta filtros de carga útil, períodos de tempo e campos (muito útil para expansão posterior!)
O hash(texto)-ID é suficiente para testes simples; para aplicações profissionais, deve utilizar UUIDs
IA local com memória - e o que pode fazer com ela
Nos capítulos anteriores, mostrei-lhe como construir uma memória de IA real e local num Mac com Ollama e Qdrant. Uma configuração que funciona sem a nuvem, sem uma subscrição e sem servidores externos - rápida, segura e privada.
Mas e agora?
Para que pode esta tecnologia ser efetivamente utilizada? O que é possível fazer com ela - hoje, amanhã, depois de amanhã?
A resposta é: bastante.
Porque o que temos aqui é mais do que um simples chatbot. É uma máquina pensante independente de plataforma com uma memória de longo prazo. E isso abre portas.
🔍 1. base de dados de conhecimentos pessoais
Pode utilizar o Ollama + Qdrant como a sua memória pessoal de longo prazo.
Documentos, notas de conversas, ideias - tudo o que lhe disser pode ser armazenado e recuperado semanticamente.
Exemplo:
"Qual foi a minha ideia de negócio da passada quinta-feira?"
"Que clientes pretendiam uma atualização em março?"
Em vez de procurar em pastas, basta perguntar ao seu sistema. O que é particularmente interessante é que também funciona com perguntas imprecisas porque o Qdrant pesquisa semanticamente e não apenas por palavras-chave.
📄 2. Registo e resumo automáticos
Em combinação com a entrada de áudio ou texto, o sistema pode manter um registo de funcionamento:
- Notas nas reuniões
- Chamadas com clientes
- Registos diários ou históricos de projectos
Estes dados são automaticamente introduzidos na memória Qdrant e podem, por conseguinte, ser consultados posteriormente como um assistente:
"O que é que o Sr. Meier disse sobre a entrega?"
"Como foi o processo no projeto XY?"
🧠 3. treinador pessoal ou assistente de agenda
Ao anotar regularmente pensamentos, estados de espírito ou decisões, pode criar um companheiro de reflexão:
"Qual foi o meu maior progresso este mês?"
"Como é que eu reagia aos contratempos nessa altura?"
O sistema começa a conhecê-lo ao longo do tempo - e torna-se um verdadeiro espelho, não apenas um chatbot.
💼 4. aplicações empresariais com FileMaker
Se, tal como eu, utilizar FileMaker, pode ligar esta configuração diretamente:
- Enviar avisos a partir do FileMaker
- Recuperar e guardar automaticamente as respostas
- Controlar o acesso à memória diretamente através da API REST ou do script de shell
Isto cria uma combinação extremamente poderosa:
- FileMaker = Front-end, interface do utilizador, centro de controlo
- Ollama = Inteligência linguística
- Qdrant = memória semântica de longo prazo
O resultado: uma verdadeira componente de IA para as soluções FileMaker - local, segura e personalizada.
🛠️ 5. Apoio na vida quotidiana: lembretes, ideias, recomendações
"Lembrem-me desta ideia na próxima semana"
"Que livros é que eu já te recomendei?"
"O que é que eu poderia oferecer ao Sr. Müller a seguir?"
Com a lógica de memória direcionada (marcas de tempo, categorias, utilizadores), pode estruturar a sua memória de forma direcionada e utilizá-la em muitas áreas da vida e dos negócios.
🤖 6. base para um sistema de agentes
Se pensar no futuro, também pode construir sistemas semelhantes a agentes com esta configuração:
- A IA assume o controlo de tarefas simples
- A IA reconhece padrões ao longo do tempo
- A IA dá dicas proactivas
Exemplo:
"Já fez a mesma pergunta quatro vezes esta semana - quer guardar uma nota?"
"Um número impressionante de clientes mencionou este produto - posso resumir isso para si?"
🌐 7. Integração com outras ferramentas
O sistema pode ser facilmente ligado a outras ferramentas:
- Neo4jpara representar graficamente relações semânticas
- Ficheiros e PDFspara indexar conteúdos automaticamente
- Analisador de correio eletrónicoanalisar e memorizar mensagens electrónicas
- Assistentes de vozpara interagir através da voz
🔐 8. tudo permanece local - e sob controlo
A maior vantagem: o utilizador decide o que é guardado. Decide quanto tempo fica guardado. E: nunca sai do seu computador se não o quiser fazer. Num mundo em que muitas pessoas confiam cegamente na IA na nuvem, este é um poderoso contrapeso - especialmente para freelancers, programadores, autores e empresários.
Inquérito atual sobre a utilização de sistemas locais de IA
Tame Ollama + Qdrant: Como dar à sua IA local estrutura, regras e afinação
Quem se deu ao trabalho de instalar o Ollama e o Qdrant localmente no Mac já conseguiu grandes feitos. Agora você tem:
- Uma língua local IA
- Uma memória semântica
- E um pipeline funcional que mapeia Prompt → Memória → Ollama → Resposta
Mas quem trabalha com ela rapidamente se apercebe: precisa de regras. Estrutura. Ordem.
Porque, sem controlo, o seu assistente transforma-se rapidamente num tagarela que se lembra de demasiadas coisas, que se repete constantemente ou que traz à baila memórias irrelevantes.
O que é que ainda falta?
Uma orquestra também tem um maestro. E é exatamente esse o seu trabalho agora: controlar em vez de apenas utilizar.
Módulo 1: Um "router" para a lógica da memória
Em vez de guardar tudo sem rodeios ou procurar tudo sem rodeios, deve decidir antecipadamente se alguma coisa deve ser guardada ou carregada. Pode fazer isto, por exemplo, com um simples router de relevância que coloca entre o prompt e a memória:
ExemploVerificar a pertinência através de uma mensagem para o próprio Ollama
def is_relevant_for_memory(prompt, response):
prüf_prompt = f"""
Nutzer hat gefragt: "{prompt}"
Die KI hat geantwortet: "{response}"
Sollte man sich diesen Dialog langfristig merken? Antworte nur mit 'Ja' oder 'Nein'.
"""
result = query_ollama([], prüf_prompt).strip().lower()
return result.startswith("ja")
Assim, atribui-se ao Ollama a tarefa de avaliar a sua resposta - e só se esta for classificada como relevante é que a guarda no Qdrant.
Módulo 2: Excluir mensagens mais antigas (limitação de contexto)
Em sessões mais longas, em particular, torna-se problemático quando as mensagens antigas estão sempre a reaparecer no contexto. O modelo não se esquece - fica atolado.
SoluçãoLimitar a janela de contexto.
Isto pode ser feito de duas formas:
Método 1: Limitar o número de acertos
context = search_memory(user_prompt, top_k=3)
Apenas o que é semanticamente relevante é carregado aqui - não tudo.
Método 2: Limitar o tempo
# Nur Nachrichten der letzten 7 Tage now = datetime.utcnow() filter = Filter( must=[ FieldCondition(key="timestamp", range=Range(gte=now - timedelta(days=7))) ] )
Assim, é possível "cortar" o tempo se o sistema for demasiado longe no passado.
Módulo 3: Introdução de pesos e etiquetas de contexto
Nem todas as entradas na sua memória têm o mesmo valor. Pode atribuir-lhes peso ou categorias:
- Fixo (por exemplo, "O utilizador chama-se Markus")
- Temporário (por exemplo, "Hoje é terça-feira")
- Situacional (por exemplo, "Conversa a partir de hoje às 10:30")
O Qdrant suporta os chamados "payloads", ou seja, informações adicionais por entrada. Isto permite-lhe filtrar ou estabelecer prioridades mais tarde.
Módulo 4: Afinação através do prompt
O próprio prompt é uma poderosa unidade de controlo.
Eis alguns truques que pode utilizar para tornar o Ollama mais inteligente:
Exemplo de prompt com instruções:
És um assistente local com uma memória semântica. Se encontrar várias memórias, utilize apenas as três mais relevantes. Não se refira a informações com mais de 10 dias, exceto se estiverem explicitamente assinaladas. Ignore os lembretes triviais, como "Bom dia" ou "Obrigado". Responda com precisão e no estilo de um conselheiro experiente.
Isto permite-lhe efetuar o ajuste fino diretamente no próprio prompt - sem novos modelos, sem formação.
E: Pode gerar o aviso dinamicamente - dependendo da situação.
Módulo 5: Higiene do armazenamento
À medida que a memória cresce, torna-se confusa.
Um simples script de manutenção que elimina conteúdo irrelevante ou duplicado vale o seu peso em ouro.
Exemplo:
"Esquece tudo o que tem a ver com o 'tempo'."
"Eliminar entradas com mais de 3 meses e que nunca foram recuperadas."
A Qdrant suporta isto através da API - e pode automatizá-lo uma vez por semana, por exemplo.
Módulo 6: FileMaker como painel de controlo
Se, tal como eu, trabalha com o FileMaker, pode controlar tudo isto remotamente através da API REST:
- Enviar prontamente
- Recuperar contexto
- Resposta recebida
- Fazer uma avaliação
- Guardar ou esquecer
Tudo o que precisa é de um pequeno módulo REST em FileMaker (Insert from URL with JSON) e alguns scripts.
O resultado: uma interface que lhe permite controlar a sua IA como se fosse um caderno vivo - mas com inteligência.
Conclusão: a IA só é tão boa quanto a sua liderança
O Ollama é poderoso. O Qdrant é flexível. Mas sem regras claras, ambos se tornam numa pilha de dados não estruturados. O truque não é armazenar tudo - mas manter disponível apenas o que é relevante e pensar de uma forma direcionada em vez de apenas recordar.
Nova série de artigos: Históricos do ChatGPT como base de conhecimentos para a sua IA
Se já construiu a sua própria memória de IA com Ollama e Qdrant, vale a pena dar uma vista de olhos a uma nova série de artigos que começa aqui mesmo. É sobre como a Integrar a exportação de dados do ChatGPT neste sistema permite. Muitos utilizadores nem sequer se apercebem de que podem exportar todo o seu histórico de conversas - e que estes dados são uma valiosa fonte de conhecimento. Nesta série, vou mostrar-lhe como analisar estas conversas, convertê-las em embeddings e depois importá-las para uma base de dados vetorial. Isto permite que a sua IA local aceda posteriormente a conversas anteriores e as utilize como contexto para as respostas. Desta forma, um arquivo de conhecimento pessoal cresce passo a passo a partir de diálogos individuais.
Perguntas mais frequentes
- Porque é que uma IA local precisa de uma „memória“? O modelo linguístico não é suficiente?
Um modelo linguístico só funciona com o pedido atual e o contexto que lhe está a ser dado. Por conseguinte, não se lembra permanentemente de conversas, documentos ou informações anteriores. É exatamente aqui que entra a memória local. Uma base de dados adicional permite que a IA guarde conteúdos anteriores e os recupere quando necessário. Assim, o modelo não só recebe a sua pergunta atual quando responde, mas também informações relevantes desta memória. Isto resulta em respostas muito mais consistentes e informadas. Sem este sistema, um modelo linguístico permanece basicamente um gerador de texto puro, sem qualquer conhecimento a longo prazo dos seus próprios dados ou projectos. - O que é exatamente o Qdrant - e porque é utilizado neste sistema?
Qdrant é uma base de dados vetorial moderna que foi especialmente desenvolvida para pesquisas semânticas. Ao contrário das bases de dados tradicionais, armazena informações não apenas como texto, mas como os chamados vectores - representações matemáticas do significado. Isto permite-lhe pesquisar conteúdos não só por palavras idênticas, mas também por proximidade de conteúdos. Assim, se fizer uma pergunta, o Qdrant pode encontrar passagens de texto adequadas da sua base de conhecimentos, mesmo que não contenham exatamente os mesmos termos. Em combinação com um modelo linguístico, isto cria uma espécie de memória inteligente para a IA. - O que significa o termo „RAG“, frequentemente utilizado neste contexto?
RAG significa „Retrieval Augmented Generation“ (Geração Aumentada por Recuperação). Trata-se de uma técnica em que um modelo linguístico recupera informações adicionais de uma base de dados antes de dar uma resposta. Assim, o modelo não só gera a sua resposta a partir da formação, como também a complementa com informações adequadas provenientes de uma fonte de conhecimento. Este método resolve um problema típico dos modelos linguísticos: Estes só sabem o que foi aprendido durante o treino. Em vez disso, o RAG permite-lhes aceder a dados actuais ou pessoais - como documentação, sítios Web ou as suas próprias notas. - Como é que o Ollama e o Qdrant funcionam realmente em conjunto?
Nesta configuração, o Ollama assume o papel de modelo linguístico, enquanto o Qdrant actua como memória semântica. Quando o utilizador faz uma pergunta, o Qdrant começa por procurar fragmentos de texto relevantes. Estes resultados são depois transmitidos ao modelo de linguagem juntamente com a pergunta. O modelo utiliza esta informação adicional para formular uma resposta bem fundamentada. A sequência típica é, por conseguinte, a seguinte: Pedido → Pesquisa na memória → Expandir o contexto → Gerar a resposta. - Que tipos de dados posso incluir nesta memória de IA?
Basicamente, quase tudo o que pode ser convertido em texto. Isto inclui documentação, sítios Web, ficheiros Markdown, PDFs, entradas de bases de dados ou mesmo notas pessoais. A única coisa importante é que o conteúdo possa ser dividido em secções de texto mais pequenas antes de ser guardado na base de dados. Estes chamados „pedaços“ formam mais tarde a base para a pesquisa semântica. Isto permite que a IA aceda especificamente a secções individuais relevantes em vez de ter de procurar em documentos inteiros. - Por que razão é utilizada uma base de dados vetorial em vez de uma pesquisa de texto normal?
Os motores de busca clássicos trabalham normalmente com palavras-chave. Isto significa que só encontram resultados que contenham exatamente os mesmos termos. Uma base de dados vetorial, por outro lado, procura o significado. Por conseguinte, também pode encontrar textos com conteúdos semelhantes, mesmo que tenham sido utilizadas palavras diferentes. Isto é crucial para os sistemas de IA porque as perguntas são frequentemente formuladas de forma diferente dos documentos originais. As pesquisas semânticas tornam a ligação entre a pergunta e a resposta muito mais fiável. - Como é que os textos são convertidos em vectores?
Para o efeito, são utilizados os chamados modelos de incorporação. Estes modelos analisam os textos e convertem-nos em vectores de números que representam o seu significado. Assim, cada secção de texto recebe uma representação matemática no chamado espaço vetorial. Os conteúdos semelhantes estão mais próximos uns dos outros do que os temas completamente diferentes. Se mais tarde for colocada uma pergunta, esta é também convertida num vetor. O Qdrant pode então encontrar muito rapidamente as entradas mais semelhantes na memória. - Porque é que a Qdrant é frequentemente utilizada através do Docker installiert?
O Docker simplifica significativamente a instalação de softwares complexos. Em vez de configurar manualmente muitas dependências individuais, o Qdrant é simplesmente executado num contentor. Isto significa que a instalação funciona de forma fiável em diferentes sistemas e pode ser iniciada ou interrompida facilmente. Este método é particularmente prático no Mac porque mantém o sistema limpo e, ao mesmo tempo, proporciona um ambiente estável para a base de dados. - Posso utilizar este sistema completamente offline?
Sim, essa é uma das maiores vantagens desta arquitetura. Tanto o modelo de linguagem como a base de dados vetorial são executados localmente no seu próprio computador. Isto significa que nenhum dado é enviado para servidores externos. Isto cria um ambiente de IA completamente privado. Esta é uma vantagem decisiva em relação aos sistemas de nuvem, especialmente para dados sensíveis ou documentos internos da empresa. - Qual a dimensão de uma tal memória local de IA?
Isto depende sobretudo do seu espaço de armazenamento e do desempenho do sistema. As bases de dados vectoriais modernas podem gerir facilmente milhões de fragmentos de texto. No entanto, para muitos projectos pessoais, apenas alguns milhares de documentos são suficientes para criar um sistema de conhecimento muito poderoso. A qualidade da estrutura de dados é mais importante do que a quantidade de informação. - A IA pode realmente „aprender“ com este sistema?
Não no sentido clássico. O modelo linguístico em si não é recalculado. Em vez disso, o conhecimento é armazenado fora do modelo e recuperado quando necessário. Embora isto faça com que a IA pareça capaz de aprender, na realidade apenas acede a uma reserva de conhecimentos em constante crescimento. Esta abordagem tem uma grande vantagem: podem ser acrescentadas novas informações em qualquer altura, sem que seja necessário voltar a treinar o modelo. - Que aplicações práticas resultam de uma tal memória local de IA?
As possibilidades são incrivelmente diversas. Por exemplo, é possível criar uma base de dados de conhecimentos pessoais, tornar a documentação técnica pesquisável ou analisar documentos internos da empresa. Os autores, programadores ou investigadores também beneficiam com isto, porque podem tornar acessíveis grandes quantidades de informação de uma forma estruturada. Basicamente, é criado um tipo de assistente de investigação pessoal que compreende os seus próprios dados. - Posso integrar várias fontes de dados ao mesmo tempo?
Sim, o Qdrant permite atribuir metadados adicionais a cada fragmento de texto, como a fonte, a categoria ou a língua. Isto significa que diferentes bases de dados podem ser geridas em conjunto. Estes metadados podem mesmo ser especificamente filtrados durante a pesquisa. Por exemplo, a IA só pode considerar o conteúdo de uma documentação específica ou de um projeto específico. - Em que é que este sistema difere dos chatbots clássicos?
A maioria dos chatbots trabalha exclusivamente com o conhecimento do seu conjunto de dados de treino. Por conseguinte, não podem fornecer qualquer informação específica sobre o seu próprio conteúdo. Um sistema RAG, por outro lado, combina um modelo linguístico com uma base de conhecimentos individual. Isto permite que a IA forneça respostas diretamente adaptadas aos seus próprios dados. Isto torna-a muito mais útil para o trabalho produtivo. - Que papel desempenha o Python nesta configuração?
O Python é frequentemente utilizado para controlar a ligação entre o modelo linguístico e a base de dados. Com apenas alguns scripts, os textos podem ser lidos, convertidos em vectores e guardados em Qdrant. Python pode também efetuar a pesquisa e transferir os resultados encontrados para o modelo de linguagem. Isto cria um pipeline flexível que pode ser personalizado de acordo com as suas próprias necessidades. - A criação de um sistema deste tipo é apenas para os programadores?
Não necessariamente. Embora a configuração do sistema exija uma certa dose de conhecimentos técnicos, muitas das ferramentas necessárias tornaram-se atualmente muito mais simples. Com um pouco de paciência, é possível criar um sistema funcional mesmo sem conhecimentos profundos de programação. Qualquer pessoa que já tenha lidado com isto reconhecerá rapidamente o enorme potencial de tais infra-estruturas locais de IA. - Quais são os limites de uma memória local de IA?
A limitação mais importante é a capacidade de processamento do seu próprio computador. Os modelos de grande dimensão ou as bases de dados de conhecimentos de grande dimensão podem exigir mais memória e potência da CPU. A qualidade das respostas também depende muito da estrutura dos dados. Se os documentos estiverem mal preparados, a IA só pode fornecer bons resultados até certo ponto. - Porque é que esta combinação de Ollama e Qdrant é considerada uma arquitetura particularmente interessante para a IA local?
Porque reúne dois componentes cruciais: um modelo linguístico poderoso e uma base de dados semântica rápida. Juntos, criam um ambiente de trabalho de IA completo que pode ser operado inteiramente a nível local. Isto permite a criação de sistemas de conhecimento pessoal, motores de pesquisa inteligentes ou assistentes especializados - sem dependência da nuvem e com controlo total sobre os seus próprios dados.











