Ollama a Qdrant: Místní paměť pro vaši umělou inteligenci na Macu

Místní AI s pamětí - bez cloudu, bez předplatného, bez odklonů

V předchozí články Vysvětlil jsem, jak nakonfigurovat Ollama na Macu install. Pokud jste již tento krok dokončili, máte nyní k dispozici výkonný místní jazykový model - například Mistral, LLaMA3 nebo jiný kompatibilní model, který lze oslovit prostřednictvím rozhraní REST API.

Model však "ví" pouze to, co je v aktuální výzvě. Nepamatuje si předchozí konverzace. Chybí vzpomínka.


Aktuální témata umělé inteligence

Právě proto používáme Qdrant, moderní sémantickou vektorovou databázi.
V tomto článku vás provedu krok za krokem:

  • jak installier Qdrant na Macu (přes Docker)
  • Jak vytvářet vložené soubory v jazyce Python
  • jak ukládat, vyhledávat a integrovat obsah do pracovního postupu Ollama.
  • a jak vypadá kompletní sekvence výzva→paměť→odpověď

Proč Qdrant?

Qdrant neukládá tradiční texty, ale vektory, které reprezentují význam textu jako číselný kód. To znamená, že obsah lze najít nejen přesně, ale také sémanticky podobně - i když se slova liší.

Ollama + Qdrant tedy vede k výsledkům:

Lokální jazykový model s dlouhodobou pamětí - bezpečný, kontrolovatelný a rozšiřitelný.

Předpoklady

Balíčekinstallation od Qdrant:

pip install qdrant-client sentence-transformers

Spuštění Qdrant (Docker)

docker run -p 6333:6333 -p 6334:6334 qdrant/qdrant

Qdrant poté spustí:

http://localhost:6333 (REST API)

http://localhost:6334 (gRPC, pro tento článek není vyžadováno)

Qdrant v Dockeru pod Apple macOS

Příklad Pythonu pro Ollama + Qdrant

Nyní napíšeme jednoduchý základní skript, který:

  • přijme výzvu uživatele
  • vygeneruje vložený vektor z tohoto
  • vyhledává sémanticky podobné vzpomínky v Qdrant.
  • odpověď je generována s kontextem prostřednictvím Ollama
  • uloží novou konverzaci jako připomínku
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()

Poznámky k praxi

Můžete také použít vlastní modely vkládání, např. prostřednictvím modelu Ollama (např. nomic-embed-text) nebo modelu Hugging Face.

Qdrant podporuje filtry nákladu, časová období a pole (velmi užitečné pro pozdější rozšíření!)

Pro jednoduché testy stačí hash(text)-ID, pro profesionální aplikace byste měli používat UUID.

Místní umělá inteligence s pamětí - a co s ní můžete dělat

V předchozích kapitolách jsem vám ukázal, jak vytvořit skutečnou lokální paměť AI na počítači Mac s Ollama a Qdrant. Nastavení, které funguje bez cloudu, bez předplatného a bez externích serverů - rychlé, bezpečné, soukromé.

Ale co teď?

K čemu lze tuto technologii vlastně použít? Co je s ní možné - dnes, zítra, pozítří?

Odpověď: poměrně hodně.

Protože to, co tu máte, je víc než jen chatbot. Je to na platformě nezávislý myslící stroj s dlouhodobou pamětí. A to otevírá dveře.

🔍 1. databáze osobních znalostí

Jako osobní dlouhodobou paměť můžete použít Ollama + Qdrant.
Dokumenty, poznámky z rozhovorů, nápady - vše, co mu řeknete, lze sémanticky ukládat a vyhledávat.

Příklad:

"Jaký byl můj obchodní nápad z minulého čtvrtka?"

"Kteří zákazníci chtěli v březnu upgrade?"

Místo prohledávání složek se jednoduše zeptáte systému. Obzvláště zajímavé je, že funguje i při nepřesných dotazech, protože Qdrant vyhledává sémanticky, nejen podle klíčových slov.

📄 2. automatické protokolování a shrnutí

V kombinaci se zvukovým nebo textovým vstupem může systém vést průběžný protokol:

  • Poznámky na schůzkách
  • Hovory se zákazníky
  • Denní záznamy nebo historie projektů

Tato data se automaticky ukládají do paměti Qdrant, a proto je lze později vyhledávat jako asistenta:

"Co že to pan Meier říkal o té dodávce?"

"Jaký byl proces projektu XY?"

🧠 3. osobní kouč nebo asistent pro vedení diáře

Pravidelným zapisováním myšlenek, nálad nebo rozhodnutí si můžete vytvořit reflexního společníka:

"Jaký byl můj největší pokrok v tomto měsíci?"

"Jak jsem tehdy reagoval na neúspěchy?"

Systém vás časem pozná - a stane se skutečným zrcadlem, ne jen chatbotem.

💼 4. obchodní aplikace s FileMaker

Pokud - stejně jako já - používáte FileMaker, můžete tuto konfiguraci připojit přímo:

  • Odesílání výzev z FileMaker
  • Automatické načítání a ukládání odpovědí
  • Řízení přístupu do paměti přímo prostřednictvím rozhraní REST API nebo shellového skriptu

To vytváří mimořádně silnou kombinaci:

  • FileMaker = Front end, uživatelské rozhraní, řídicí centrum
  • Ollama = Jazyková inteligence
  • Qdrant = sémantická dlouhodobá paměť

Výsledkem je skutečná součást AI pro řešení FileMaker - místní, bezpečná a přizpůsobená.

🛠️ 5. Podpora v každodenním životě: připomínky, nápady, doporučení

"Připomeňte mi tento nápad příští týden."

"Které knihy jsem vám už doporučil?"

"Co bych mohl panu Müllerovi nabídnout dál?"

Díky cílené logice paměti (časová razítka, kategorie, uživatelé) můžete cíleně strukturovat paměť a používat ji v mnoha oblastech života a podnikání.

🤖 6. základ agentního systému

Pokud budete přemýšlet dopředu, můžete s tímto nastavením vytvořit i systémy podobné agentům:

  • Umělá inteligence přebírá jednoduché úkoly
  • Umělá inteligence rozpoznává vzorce v průběhu času
  • Umělá inteligence dává proaktivní nápovědy

Příklad:

"Tento týden jste se čtyřikrát zeptal na stejnou otázku - chcete si uložit poznámku?"

"O tomto produktu se zmínil nápadný počet zákazníků - mám vám to shrnout?"

🌐 7. integrace s dalšími nástroji

Systém lze snadno propojit s dalšími nástroji:

  • Neo4jgraficky znázornit sémantické vztahy
  • Soubory a PDFautomaticky indexovat obsah
  • Parser poštyanalyzovat a zapamatovat si e-maily
  • Hlasoví asistentikomunikovat prostřednictvím hlasu

🔐 8. vše zůstává lokální - a pod kontrolou

Největší výhoda: o tom, co se uloží, rozhodujete vy. Vy rozhodujete, jak dlouho to zůstane uložené. A: pokud nechcete, nikdy neopustí váš počítač. Ve světě, kde se mnoho lidí slepě spoléhá na cloudovou umělou inteligenci, je to silná protiváha - zejména pro freelancery, vývojáře, autory a podnikatele.


Aktuální průzkum používání místních systémů umělé inteligence

Co si myslíte o lokálně provozovaném softwaru AI, jako je MLX nebo Ollama?

Zkrocení Ollama + Qdrant: Jak dát místní umělé inteligenci strukturu, pravidla a vyladění?

Každý, kdo si dal tu práci a nainstaloval Ollama a Qdrant lokálně na Mac, už dosáhl velkých úspěchů. Nyní máte:

  • UI v místním jazyce
  • Sémantická paměť
  • A funkční potrubí, které mapuje Prompt → Paměť → Ollama → Odpověď

Každý, kdo s ním pracuje, si však rychle uvědomí, že potřebuje pravidla. Struktura. Řád.
Bez kontroly se totiž váš asistent rychle změní v žvanila, který si toho pamatuje příliš mnoho, neustále se opakuje nebo vytahuje nepodstatné vzpomínky.

🧭 Co vám ještě chybí?

Orchestr má také dirigenta. A to je přesně váš úkol: řídit, nikoliv jen využívat.

Modul 1: "Směrovač" pro paměťovou logiku

Namísto tupého ukládání všeho nebo tupého vyhledávání všeho byste se měli předem rozhodnout, zda něco vůbec ukládat nebo načítat. Můžete to udělat například pomocí jednoduchého směrovače relevance, který umístíte mezi výzvu a paměť:

PříkladZkontrolujte relevanci prostřednictvím výzvy k samotnému 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")

Zadáte tedy Ollama úkol vyhodnotit jeho odpověď - a teprve pokud je klasifikována jako relevantní, uložíte ji do Qdrantu.

Modul 2: Vyloučení starších zpráv (kontextové omezení)

Zejména u delších relací se stává problematickým, pokud se v kontextu znovu objevují staré zprávy. Model nezapomíná - zabředává.

ŘešeníOmezit kontextové okno.

Toho můžete dosáhnout dvěma způsoby:

Metoda 1: Omezit počet zásahů

context = search_memory(user_prompt, top_k=3)

Zde se načítá pouze to, co je sémanticky relevantní - ne vše.

Metoda 2: Omezit čas

# Nur Nachrichten der letzten 7 Tage
now = datetime.utcnow()
filter = Filter(
must=[
FieldCondition(key="timestamp", range=Range(gte=now - timedelta(days=7)))
]
)

Pokud tedy systém zasahuje příliš daleko do minulosti, můžete čas "odříznout".

Modul 3: Zavedení kontextových vah a značek

Ne každý záznam v paměti má stejnou hodnotu. Můžete jim přiřadit váhu nebo kategorie:

  • Opraveno (např. "Uživatel se jmenuje Markus")
  • Dočasné (např. "Dnes je úterý").
  • Situační (např. "Chat od dnešních 10:30")

Qdrant podporuje tzv. payloads - tj. dodatečné informace k jednotlivým položkám. To umožňuje pozdější filtrování nebo stanovení priorit.

Modul 4: Jemné doladění pomocí výzvy

Samotná výzva je výkonná řídicí jednotka.
Zde je několik triků, které můžete použít, aby byl Ollama chytřejší:

Příklad výzvy s pokyny:

Jste místní asistent se sémantickou pamětí. Pokud najdete několik pamětí, použijte pouze tři nejvhodnější. Neodkazujte na informace starší než 10 dní, pokud nejsou výslovně označeny. Ignorujte triviální vzpomínky jako "Dobré ráno" nebo "Děkuji". Odpovídejte přesně a stylem zkušeného poradce.

To umožňuje provádět jemné doladění přímo v samotné výzvě - bez nových modelů, bez školení.

A dále: výzvu můžete generovat dynamicky - v závislosti na situaci.

Modul 5: Hygiena skladování

Jak paměť roste, stává se nepřehlednou.
Jednoduchý skript pro údržbu, který odstraní irelevantní nebo duplicitní obsah, má cenu zlata.

Příklad:

"Zapomeňte na všechno, co souvisí s "počasím"."

"Odstranit záznamy, které jsou starší než 3 měsíce a nikdy nebyly načteny."

Qdrant to podporuje prostřednictvím rozhraní API - a můžete to automatizovat například jednou týdně.

Modul 6: FileMaker jako ústředna

Pokud stejně jako já pracujete s FileMaker, můžete vše ovládat na dálku prostřednictvím rozhraní REST-API:

  • Odeslat neprodleně
  • Získat kontext
  • Obdržená odpověď
  • Nechte si provést ocenění
  • Uložit nebo zapomenout

Potřebujete pouze malý modul REST v FileMaker (Vložit z URL pomocí JSON) a několik skriptů.

Výsledkem je rozhraní, které vám umožní ovládat umělou inteligenci jako živý notebook - ale s inteligencí.

🔚 Závěr: Umělá inteligence je tak dobrá, jak dobré je její vedení

Ollama je výkonný. Qdrant je flexibilní. Ale bez jasných pravidel se oba stávají nestrukturovanou hromadou dat. Trik spočívá v tom, že neukládáte všechno - ale uchováváte jen to, co je relevantní, a přemýšlíte účelně, místo abyste si jen pamatovali.

Napsat komentář