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.


