Lokalna sztuczna inteligencja z pamięcią - bez chmury, bez subskrypcji, bez przekierowań
W poprzednie artykuły Wyjaśniłem, jak skonfigurować Ollama na Macu install. Jeśli wykonałeś już ten krok, masz teraz potężny lokalny model językowy - taki jak Mistral, LLaMA3 lub inny kompatybilny model, do którego można się odwołać za pośrednictwem interfejsu API REST.
Model „wie“ jednak tylko to, co znajduje się w bieżącej podpowiedzi. Nie pamięta poprzednich rozmów. Brakuje tylko pamięci.
Właśnie dlatego korzystamy z Qdrant, nowoczesnej semantycznej wektorowej bazy danych.
W tym artykule pokażę to krok po kroku:
- Jak installier Qdrant na Macu (przez Docker)
- Jak tworzyć osadzenia za pomocą Pythona
- jak zapisywać, wyszukiwać i integrować zawartość z przepływem pracy Ollama
- i jak wygląda kompletna sekwencja monit→pamięć→odpowiedź
Dlaczego Qdrant?
Qdrant nie przechowuje tradycyjnych tekstów, ale wektory, które reprezentują znaczenie tekstu jako kod numeryczny. Oznacza to, że treść może być nie tylko dokładnie znaleziona, ale także semantycznie podobna - nawet jeśli słowa się różnią.
Ollama + Qdrant daje zatem wyniki:
Lokalny model językowy z pamięcią długoterminową - bezpieczny, kontrolowany i rozszerzalny.
Wymagania wstępne
- Ollama to installiert i działa (→ np. ollama run mistral)
- Docker to installiert: https://www.docker.com/products/docker-desktop
- Python 3.9+
Pakietinstallation od Qdrant:
pip install qdrant-client sentence-transformers
Uruchom Qdrant (Docker)
docker run -p 6333:6333 -p 6334:6334 qdrant/qdrant
Następnie uruchamia się Qdrant:
http://localhost:6333 (REST API)
http://localhost:6334 (gRPC, niewymagane w tym artykule)

Przykład w języku Python dla Ollama + Qdrant
Napiszemy teraz prosty podstawowy skrypt, który:
- akceptuje monit użytkownika
- generuje wektor osadzania z tego wektora
- wyszukuje semantycznie podobne wspomnienia w Qdrant
- odpowiedź jest generowana z kontekstem przez Ollama
- zapisuje nową rozmowę jako przypomnienie
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()
Uwagi dotyczące praktyki
Można również użyć własnych modeli osadzania, np. za pośrednictwem Ollama (np. nomic-embed-text) lub modeli Hugging Face.
Qdrant obsługuje filtry ładunku, okresy czasu i pola (bardzo przydatne do późniejszej rozbudowy!).
Identyfikator hash(text)-ID jest wystarczający do prostych testów, do profesjonalnych zastosowań należy używać identyfikatorów UUID
Lokalna sztuczna inteligencja z pamięcią - i co można z nią zrobić
W poprzednich rozdziałach pokazałem, jak zbudować prawdziwą, lokalną pamięć AI na komputerze Mac z Ollama i Qdrant. Konfiguracja, która działa bez chmury, bez subskrypcji i bez zewnętrznych serwerów - szybko, bezpiecznie, prywatnie.
Ale co teraz?
Do czego właściwie można wykorzystać tę technologię? Co jest dzięki niej możliwe - dziś, jutro, pojutrze?
Odpowiedź: całkiem sporo.
Ponieważ to, co tutaj masz, to coś więcej niż tylko chatbot. To niezależna od platformy myśląca maszyna z pamięcią długoterminową. A to otwiera drzwi.
1. baza danych wiedzy osobistej
Możesz użyć Ollama + Qdrant jako osobistej pamięci długoterminowej.
Dokumenty, notatki z rozmów, pomysły - wszystko, co mu powiesz, może być semantycznie przechowywane i wyszukiwane.
Przykład:
„Jaki był mój pomysł na biznes z zeszłego czwartku?“.“
„Którzy klienci chcieli aktualizacji w marcu?“
Zamiast przeszukiwać foldery, wystarczy zapytać system. Szczególnie ekscytujące jest to, że działa również z nieprecyzyjnymi pytaniami, ponieważ Qdrant wyszukuje semantycznie, a nie tylko słowa kluczowe.
2. automatyczne rejestrowanie i podsumowywanie
W połączeniu z wprowadzaniem danych dźwiękowych lub tekstowych, system może prowadzić bieżący dziennik:
- Notatki na spotkaniach
- Rozmowy z klientami
- Dzienniki lub historie projektów
Dane te są automatycznie wprowadzane do pamięci Qdrant, dzięki czemu można je później przeszukiwać jak asystenta:
„Co pan Meier powiedział o dostawie?“
„Jak wyglądał proces w projekcie XY?“
3. osobisty trener lub asystent dziennika
Regularne zapisywanie myśli, nastrojów lub decyzji pozwala stworzyć refleksyjnego towarzysza:
„Jaki był mój największy postęp w tym miesiącu?“.“
„Jak wtedy reagowałem na niepowodzenia?“.“
System z czasem poznaje użytkownika i staje się prawdziwym lustrem, a nie tylko chatbotem.
4. aplikacje biznesowe z FileMaker
Jeśli - tak jak ja - używasz FileMaker, możesz podłączyć tę konfigurację bezpośrednio:
- Wysyłanie monitów z FileMaker
- Automatyczne pobieranie i zapisywanie odpowiedzi
- Kontroluj dostęp do pamięci bezpośrednio przez REST API lub skrypt powłoki
Tworzy to niezwykle potężną kombinację:
- FileMaker = Front-end, interfejs użytkownika, centrum sterowania
- Ollama = inteligencja językowa
- Qdrant = semantyczna pamięć długotrwała
Rezultat: prawdziwy komponent AI dla rozwiązań FileMaker - lokalny, bezpieczny i spersonalizowany.
🛠️ 5. Wsparcie w życiu codziennym: przypomnienia, pomysły, zalecenia
„Przypomnij mi o tym pomyśle w przyszłym tygodniu“.“
„Które książki już ci poleciłem?“
„Co mógłbym zaoferować panu Müllerowi w następnej kolejności?“
Dzięki ukierunkowanej logice pamięci (znaczniki czasu, kategorie, użytkownicy) można uporządkować pamięć w ukierunkowany sposób i wykorzystać ją w wielu obszarach życia i biznesu.
6. podstawa dla systemu agentowego
Jeśli myślisz przyszłościowo, możesz również budować systemy podobne do agentów za pomocą tej konfiguracji:
- Sztuczna inteligencja przejmuje proste zadania
- Sztuczna inteligencja rozpoznaje wzorce w czasie
- Sztuczna inteligencja udziela proaktywnych wskazówek
Przykład:
„Zadałeś to samo pytanie cztery razy w tym tygodniu - czy chcesz zapisać notatkę?“.“
„Uderzająca liczba klientów wspomniała o tym produkcie - czy mam to podsumować?“.“
7. integracja z innymi narzędziami
System można łatwo połączyć z innymi narzędziami:
- Neo4j, do graficznego przedstawiania relacji semantycznych
- Pliki i pliki PDF, do automatycznego indeksowania treści
- Parser poczty, analizowanie i zapamiętywanie wiadomości e-mail
- Asystenci głosowi, do interakcji głosowej
8. wszystko pozostaje lokalne - i pod kontrolą
Największa zaleta: Ty decydujesz, co zostanie zapisane. Ty decydujesz, jak długo będą zapisywane. I: nigdy nie opuszcza twojego komputera, jeśli tego nie chcesz. W świecie, w którym wiele osób ślepo polega na sztucznej inteligencji w chmurze, jest to potężna przeciwwaga - szczególnie dla freelancerów, programistów, autorów i przedsiębiorców.
Aktualne badanie dotyczące korzystania z lokalnych systemów AI
Tame Ollama + Qdrant: Jak nadać lokalnej sztucznej inteligencji strukturę, zasady i dopracowanie?
Jeśli zadałeś sobie trud zainstalowania Ollama i Qdrant lokalnie na komputerze Mac, osiągnąłeś już wielkie rzeczy. Masz teraz:
- Lokalny język AI
- Pamięć semantyczna
- I działający potok, który mapuje Prompt → Memory → Ollama → Response
Ale każdy, kto z nim pracuje, szybko zdaje sobie sprawę, że potrzebuje zasad. Struktury. Porządku.
Bez kontroli asystent szybko zamieni się w gadułę, który za dużo pamięta, ciągle się powtarza lub przywołuje nieistotne wspomnienia.
Czego jeszcze brakuje?
Orkiestra ma również dyrygenta. I to właśnie jest teraz twoje zadanie: kontrolować, a nie tylko wykorzystywać.
Moduł 1: „Router“ dla logiki pamięci
Zamiast tępo zapisywać wszystko lub tępo szukać wszystkiego, powinieneś z góry zdecydować, czy cokolwiek powinno zostać zapisane lub załadowane. Można to zrobić na przykład za pomocą prostego routera relewancji, który umieszcza się między monitem a pamięcią:
PrzykładSprawdź trafność za pomocą monitu do samego 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")
Dajesz więc Ollama zadanie oceny jego odpowiedzi - i tylko jeśli zostanie ona sklasyfikowana jako istotna, zapisujesz ją w Qdrant.
Moduł 2: Wykluczanie starszych wiadomości (ograniczenie kontekstu)
Zwłaszcza w przypadku dłuższych sesji staje się to problematyczne, jeśli stare wiadomości pojawiają się ponownie w kontekście. Model nie zapomina - grzęźnie.
RozwiązanieOgranicz okno kontekstowe.
Można to zrobić na dwa sposoby:
Metoda 1Ogranicz liczbę trafień
context = search_memory(user_prompt, top_k=3)
Wczytywane jest tylko to, co ma znaczenie semantyczne - nie wszystko.
Metoda 2Ograniczenie czasu
# Nur Nachrichten der letzten 7 Tage now = datetime.utcnow() filter = Filter( must=[ FieldCondition(key="timestamp", range=Range(gte=now - timedelta(days=7))) ] )
Można zatem „odciąć“ czas, jeśli system sięga zbyt daleko w przeszłość.
Moduł 3: Wprowadzenie wag kontekstowych i etykiet
Nie każdy wpis w pamięci ma taką samą wartość. Możesz nadać im wagę lub kategorie:
- Naprawiono (np. „Użytkownik nazywa się Markus“)
- Tymczasowy (np. „Dzisiaj jest wtorek“)
- Sytuacyjny (np. „Czat od dziś od 10:30“)
Qdrant obsługuje tzw. payloads - tj. dodatkowe informacje na wpis. Pozwala to na późniejsze filtrowanie lub ustalanie priorytetów.
Moduł 4: Dostrajanie za pomocą monitu
Sam monit jest potężną jednostką sterującą.
Oto kilka sztuczek, których możesz użyć, aby uczynić Ollama bardziej inteligentnym:
Przykładowy monit z instrukcjami:
Jesteś lokalnym asystentem z pamięcią semantyczną. Jeśli znajdziesz kilka wspomnień, użyj tylko trzech najbardziej istotnych. Nie odwołuj się do informacji starszych niż 10 dni, chyba że są one wyraźnie zaznaczone. Ignoruj trywialne przypomnienia, takie jak „Dzień dobry“ lub „Dziękuję“. Odpowiadaj precyzyjnie i w stylu doświadczonego doradcy.
Pozwala to na przeprowadzanie dostrajania bezpośrednio w samej podpowiedzi - bez nowych modeli, bez szkolenia.
I: Podpowiedź można generować dynamicznie - w zależności od sytuacji.
Moduł 5: Higiena przechowywania
Gdy pamięć rośnie, staje się to mylące.
Prosty skrypt konserwacyjny, który usuwa nieistotne lub zduplikowane treści, jest na wagę złota.
Przykład:
„Zapomnij o wszystkim, co ma związek z ‚pogodą‘“.“
„Usuń wpisy, które są starsze niż 3 miesiące i nigdy nie były pobierane“.“
Qdrant obsługuje to za pośrednictwem interfejsu API - i można to zautomatyzować na przykład raz w tygodniu.
Moduł 6: FileMaker jako panel kontrolny
Jeśli - tak jak ja - pracujesz z FileMaker, możesz kontrolować to wszystko zdalnie za pośrednictwem REST-API:
- Wyślij niezwłocznie
- Pobieranie kontekstu
- Otrzymana odpowiedź
- Przeprowadzenie wyceny
- Zapisz lub zapomnij
Wszystko, czego potrzebujesz, to mały moduł REST w FileMaker (wstawianie z adresu URL za pomocą JSON) i kilka skryptów.
Rezultat: interfejs, który pozwala kontrolować sztuczną inteligencję jak żywy notebook - ale z inteligencją.
Wniosek: sztuczna inteligencja jest tak dobra, jak jej przywództwo
Ollama jest potężny. Qdrant jest elastyczny. Ale bez jasnych zasad oba stają się nieuporządkowanym stosem danych. Sztuczka nie polega na przechowywaniu wszystkiego - ale na przechowywaniu tylko tego, co jest istotne i myśleniu celowym, a nie tylko zapamiętywaniu.

