Kako povezati Mem0 s Ollamom za stvaranje lokalne memorije

Zadnje ažuriranje: 27/08/2026

  • Postavljanje ekosustava trajne memorije korištenjem Ollame kao mehanizma za zaključivanje i ugrađivanja.
  • Implementacija lokalnih vektorskih baza podataka pomoću Qdranta ili ChromaDB-a kako bi se izbjegla ovisnost o oblaku.
  • Optimizacija ekstrakcije činjenica sinkronizacijom specifičnih vektorskih dimenzija.
Kako koristiti preglednik s Ollama i lokalnim modelima

Jezični modeli ne pamte automatski što se dogodilo u prethodnim razgovorima. Kada zatvorite aplikaciju, prebacite sesiju ili izbrišete stare poruke iz kontekstnog prozora, model gubi te informacije.

Jedan od načina za prevladavanje ovog ograničenja je Poveži memorandum s OllamomOllama lokalno pokreće generativni model i model ugrađivanja, dok Mem0 izvlači korisne informacije iz razgovora, organizira ih i omogućuje njihovo dohvaćanje kada ponovno postanu relevantne.

Umjesto da uvijek šalje cijelu povijest modelu, aplikacija može dohvatiti nekoliko sjećanja povezanih s trenutnim upitom i umetnuti ih u prompt. To smanjuje količinu konteksta i omogućuje održavanje preferencija, ciljeva ili važnih činjenica između sesija.

Instalacija može funkcionirati u potpunosti unutar vaše infrastrukture ako koristite Ollama, Mem0 OSS i lokalnu bazu podataka. Međutim, krajnja privatnost ovisit će o svim povezanim komponentama. Ako dodate vanjski model, reranker, bazu podataka ili upravljanu uslugu, neki podaci mogu napustiti vaš sustav.

Što Mem0 radi i koju funkciju ima Ollama?

Što Mem0 radi i koju funkciju ima Ollama?

Mem0 i Ollama rješavaju različite probleme. Ollama je odgovorna za vođenje modeladok Mem0 pruža operacije potrebne za dodavanje, pretraživanje, ispitivanje, ažuriranje i brisanje memorija.

Tijekom spremanja, Mem0 može analizirati razgovor i izdvojiti činjenice koje bi kasnije mogle biti korisne. Na primjer:

  • Korisnik preferira kratke odgovore.
  • Razvija aplikaciju u Rustu.
  • Ne želi preporuke za horor filmove.
  • Njihov je cilj završiti utrku za manje od četiri sata.

Mem0 pretvara svaku memoriju u numerički prikaz koristeći model ugrađivanja i pohranjuje je zajedno sa sadržajem i metapodacima. Prilikom pretraživanja kombinira upit s filterima kao što je identifikator korisnika i vraća najrelevantnije memorije.

Trenutne verzije Mem0 prvenstveno koriste aditivnu ekstrakciju. To znači da se nove informacije mogu pohraniti bez automatskog brisanja prethodnih podataka. Ako su podaci zastarjeli i potrebno ih je ispraviti, aplikacija može eksplicitno koristiti odgovarajuće operacije. update() o delete().

Mem0 ne zamjenjuje konverzacijski model. Aplikacija mora dohvatiti sjećanja, uključiti ih u sistemsku poruku ili kontekst i zatražiti od Ollame da generira odgovor.

Komponente potrebne za povezivanje Mem0 s Ollamom

Za izgradnju lokalnog sustava potrebne su vam ove komponente:

  • OSS za dopisivanje: upravlja izdvajanjem, pohranjivanjem i pronalaženjem sjećanja.
  • Ollama: Izvršava generativni model i model ugrađivanja.
  • Jezični model: Interpretira razgovore i generira odgovore.
  • Model ugradnje: transformira sjećanja i upite u vektore.
  • Vektorsko skladište: Čuva vektore i omogućuje vam pretraživanje povezanih sjećanja.
  • Aplikacija: Povezuje razgovor, pronalaženje i spremanje memorije.

Qdrant i Chroma su dvije uobičajene opcije pohrane:

Trgovina Preporučena upotreba
Qdrant Trajne usluge, više aplikacija i implementacije pomoću Dockera
Kroma Lokalno testiranje i male aplikacije s pohranom u mape

Qdrant pruža zaseban API i olakšava odvajanje vektorske baze podataka od aplikacije. Chroma može koristiti lokalnu rutu, što pojednostavljuje početno testiranje.

Kako instalirati Mem0, Ollamu i Qdrant

Prvo instalirajte Ollamu i provjerite radi li usluga. Zatim preuzmite jezični model i model ugrađivanja:

ollama pull llama3.1:latest
ollama pull nomic-embed-text:latest

llama3.1:latest Ovo je model korišten u službenom primjeru Mem0, ali ga možete zamijeniti drugim instrukcijskim modelom kompatibilnim s Ollamom. Manji modeli troše manje memorije, iako mogu izdvajati podatke s manjom točnošću ili se slabije pridržavati očekivanog formata.

Ekskluzivan sadržaj - Kliknite ovdje  Kako dobiti informacije s računala pomoću My.config datoteke

Instalirajte Python zavisnosti:

pip install mem0ai qdrant-client openai ollama

Za pokretanje Qdranta u Dockeru i očuvanje podataka pomoću volumena, koristite:

docker volume create qdrant_storage

docker run -d \
  --name qdrant \
  -p 6333:6333 \
  -p 6334:6334 \
  -v qdrant_storage:/qdrant/storage \
  qdrant/qdrant

Luka 6333 pruža HTTP API i 6334 Koristi se za gRPC. U ovom primjeru, Mem0 se povezuje pomoću HTTP API-ja.

Provjerite odgovara li Ollama:

curl http://localhost:11434/api/tags

Qdrant možete provjeriti otvaranjem:

http://localhost:6333/dashboard

Nemojte ove portove izravno izlagati internetu. Ako se usluge izvode na različitim računalima, koristite privatnu mrežu, VPN ili pravila vatrozida koja dopuštaju samo potrebne veze.

Lokalna konfiguracija Mem0 s Ollama i Qdrant

Lokalna konfiguracija Mem0 s Ollama i Qdrant

Konfiguracija mora eksplicitno navesti da će se Ollama koristiti kao LLM i kao pružatelj ugrađivanja. Također mora definirati gdje se Qdrant nalazi i koje dimenzije proizvode ugrađivanja.

from mem0 import Memory

OLLAMA_URL = "http://localhost:11434"
CHAT_MODEL = "llama3.1:latest"
EMBEDDING_MODEL = "nomic-embed-text:latest"

config = {
    "vector_store": {
        "provider": "qdrant",
        "config": {
            "collection_name": "memoria_agente",
            "host": "localhost",
            "port": 6333,
            "embedding_model_dims": 768,
        },
    },
    "llm": {
        "provider": "ollama",
        "config": {
            "model": CHAT_MODEL,
            "temperature": 0,
            "max_tokens": 2000,
            "ollama_base_url": OLLAMA_URL,
        },
    },
    "embedder": {
        "provider": "ollama",
        "config": {
            "model": EMBEDDING_MODEL,
            "ollama_base_url": OLLAMA_URL,
        },
    },
    "history_db_path": "./mem0_history.db",
    "custom_instructions": """
    Extrae únicamente información que pueda ser útil en conversaciones futuras:
    - Preferencias estables
    - Objetivos y proyectos
    - Restricciones importantes
    - Decisiones confirmadas

    Ignora saludos, conversación casual y hechos temporales sin importancia.
    Devuelve un objeto JSON con la clave facts y una lista de recuerdos.
    """,
}

memory = Memory.from_config(config)

Memory.from_config() Prisiljava Mem0 da koristi navedene pružatelje usluga. Konstruktor Memory() Ne povezuje se automatski s Mem0 Cloudom, ali može primijeniti zadane komponente temeljene na OpenAI-ju i zatražiti ključ ako ih ne zamijenite.

custom_instructions Omogućuje vam da odredite koje informacije zaslužuju pohranu. Moraju biti uključene kao svojstvo najviše razine prije stvaranja instance. Memory.

Zašto se dimenzije ugradnje moraju podudarati

Model nomic-embed-text proizvodi vektore 768 dimenzijaStoga je Qdrant kolekcija konfigurirana pomoću:

embedding_model_dims=768

Ako pohrana očekuje vektore drugačije veličine, Qdrant će odbaciti podatke i Mem0 neće moći ispravno spremiti ili ispitati memorije.

Prilikom promjene modela ugradnje, provjerite njegove dimenzije prije izmjene postavki. Možda ćete također morati stvoriti novu kolekciju i regenerirati sve postojeće vektore.

Ne miješajte ugradnje proizvedene različitim modelima unutar iste kolekcije. Čak i ako dva modela generiraju vektore s identičnim dimenzijama, njihovi semantički prostori možda neće biti kompatibilni.

Kako sačuvati i vratiti uspomene

Apstraktni prikaz digitalne sinapse koji prikazuje neuronsku mrežu i središnju memorijsku jezgru, simbolizirajući integraciju Mem0 i Ollame.

Za spremanje razgovora, proslijedite popis poruka memory.add() i označava stabilan identifikator za korisnika:

mensajes = [
    {
        "role": "user",
        "content": "Estoy desarrollando una aplicación en Rust"
    },
    {
        "role": "assistant",
        "content": "Lo recordaré para adaptar los próximos ejemplos"
    }
]

resultado = memory.add(
    mensajes,
    user_id="usuario_001"
)

print(resultado)

S infer=TruePrema zadanim postavkama, Mem0 koristi model za izdvajanje strukturiranih memorija. Ako želite sačuvati sadržaj bez primjene ove ekstrakcije, možete koristiti infer=False.

Za pronalaženje povezanih informacija:

recuerdos = memory.search(
    "¿Qué lenguaje utiliza en su proyecto?",
    filters={"user_id": "usuario_001"},
    top_k=5
)

for recuerdo in recuerdos["results"]:
    print(recuerdo["memory"])

Filter po user_id Ovo je ključno. Ako aplikacija koju koristi više osoba pretražuje bez ispravne primjene identifikatora, mogla bi dohvatiti sjećanja koja pripadaju drugom korisniku.

Također možete koristiti agent_id odvojiti memoriju različitih agenata i run_id podijeliti razgovore, projekte ili određene procese.

Ekskluzivan sadržaj - Kliknite ovdje  Kako preuzeti Pinterest videozapise

Kako stvoriti kompletan chat s Ollamom i Mem0

Kako stvoriti kompletan chat s Ollamom i Mem0

Da bi Ollama koristila sjećanja, aplikacija mora izvršiti četiri koraka:

  1. Primite korisnikovo pitanje.
  2. Pretražite povezane uspomene pomoću Mem0.
  3. Dodajte ih kontekstu poslanom Ollami.
  4. Spremi pitanje i odgovor kao novu interakciju.

Ollama pruža API kompatibilan s OpenAI formatom. Možemo ga koristiti za stvaranje cijele petlje:

from openai import OpenAI

ollama_chat = OpenAI(
    base_url=f"{OLLAMA_URL}/v1",
    api_key="ollama"
)

def chat(mensaje_usuario, user_id):
    resultado = memory.search(
        mensaje_usuario,
        filters={"user_id": user_id},
        top_k=5
    )

    recuerdos = [
        item["memory"]
        for item in resultado["results"]
    ]

    contexto = "\n".join(
        f"- {recuerdo}" for recuerdo in recuerdos
    )

    respuesta = ollama_chat.chat.completions.create(
        model=CHAT_MODEL,
        messages=[
            {
                "role": "system",
                "content": (
                    "Eres un asistente útil. Utiliza los recuerdos "
                    "solo cuando sean relevantes.\n\n"
                    f"Recuerdos del usuario:\n{contexto}"
                ),
            },
            {
                "role": "user",
                "content": mensaje_usuario,
            },
        ],
    ).choices[0].message.content

    memory.add(
        [
            {
                "role": "user",
                "content": mensaje_usuario,
            },
            {
                "role": "assistant",
                "content": respuesta,
            },
        ],
        user_id=user_id,
    )

    return respuesta

Sada možete započeti razgovor:

print(
    chat(
        "Estoy creando un programa de escritorio en Rust",
        user_id="usuario_001"
    )
)

Nakon ponovnog pokretanja aplikacije, isti korisnik može pitati:

print(
    chat(
        "¿Qué lenguaje estoy utilizando en mi proyecto?",
        user_id="usuario_001"
    )
)

Ako je memorija ispravno pohranjena, Mem0 će dohvatiti informacije i Ollama će ih moći koristiti za odgovor.

Kako koristiti Chroma umjesto Qdranta

Za mali lokalni test, možete zamijeniti Qdrant s Chroma. Ispravan naziv pružatelja usluga na Mem0 je chroma:

"vector_store": {
    "provider": "chroma",
    "config": {
        "collection_name": "memoria_agente",
        "path": "./chroma_db",
    },
}

Mapa naznačena u path Sadržavat će trajne podatke Chroma. Morate ga uključiti u svoje sigurnosne kopije i izbjegavati brisanje prilikom ažuriranja aplikacije.

Python paket koji koristi projekt i dalje se zove chromadbAli identifikator koji trebate napisati unutar konfiguracije Mem0 je chroma.

Kako ispraviti ili izbrisati zastarjela sjećanja

Pamćenje asistenta ne treba smatrati nepogrešivim izvorom. Model može pohraniti pogrešno protumačenu činjenicu, zadržati informacije koje više nisu valjane ili generirati nekoliko sličnih sjećanja.

Možete pregledati sva sjećanja povezana s korisnikom:

resultado = memory.get_all(
    filters={"user_id": "usuario_001"}
)

for recuerdo in resultado["results"]:
    print(recuerdo["id"], recuerdo["memory"])

Za ispravljanje određenog sjećanja:

memory.update(
    memory_id="ID_DEL_RECUERDO",
    data="El usuario está desarrollando una aplicación en Python"
)

Za uklanjanje:

memory.delete(
    memory_id="ID_DEL_RECUERDO"
)

Aplikacija namijenjena krajnjim korisnicima trebala bi omogućiti kontrole za pregled, ispravljanje i brisanje pohranjenih podataka. Također je preporučljivo uspostaviti pravila isteka za privremene informacije.

Kako poboljšati kvalitetu sjećanja

Kvaliteta ovisi o modelu, uputama, razgovoru i količini poslanih informacija. Uvijek korištenje većeg modela ne jamči bolje rezultate, iako vrlo mali modeli mogu propustiti nijanse ili vratiti netočne formate.

Ove vježbe pomažu u poboljšanju pamćenja:

  • Koristite nisku temperaturu kako bi ekstrakcija bila stabilnija.
  • Jasno definirajte koje kategorije vrijedi zapamtiti.
  • Isključite pozdrave, ponavljanja i nebitne razgovore.
  • Spremi i poruku korisnika i odgovor agenta.
  • Koristite različite identifikatore za korisnike, agente i projekte.
  • Ograničite broj dohvaćenih sjećanja kako ne biste preopteretili kontekst.
  • Povremeno pregledajte netočne, duplicirane ili zastarjele uspomene.
  • Testirajte pretrage sa stvarnim upitima prije nego što ih pustite u produkciju.

Ne uvodite sjećanja kao naredbe najvišeg prioriteta. Tretirajte ih kao kontekstualne informacije koje mogu biti nepotpune ili zastarjele. To smanjuje rizik da manipulirano sjećanje promijeni cjelokupno ponašanje agenta.

Optimizacija performansi

Svaki poziv na memory.add() Model možete pokrenuti kako biste izvukli činjenice koje je potrebno pohraniti. Stoga, ušteda memorije povećava latenciju i potrošnju resursa.

U maloj aplikaciji možete spremiti razgovor nakon generiranja odgovora. U uslugama s više istovremenih zahtjeva, poželjnije je koristiti Asinkrona memorijapozadinski radnik ili red čekanja zadataka.

Ekskluzivan sadržaj - Kliknite ovdje  Što je URL?

Mem0 pruža asinkrono sučelje kako bi se izbjeglo blokiranje aplikacija izgrađenih s asyncio ili FastAPI:

from mem0 import AsyncMemory

memory = AsyncMemory.from_config(config)

resultado = await memory.search(
    "proyecto actual",
    filters={"user_id": "usuario_001"},
    top_k=5
)

await memory.add(
    mensajes,
    user_id="usuario_001"
)

Ne prosljeđujte posao sekundarnoj niti bez obrade njezinih iznimki. Ako se program zatvori prije završetka spremanja, razgovor se možda neće snimiti. Trajni red čekanja omogućuje ponovni pokušaj neuspjelih operacija.

Također možete koristiti različite modele za razgovor i ekstrakciju. Snažniji generativni model može obraditi odgovore, dok manji obrađuje memoriju. Prije toga provjerite slijedi li drugi model ispravno upute i potreban format.

Uobičajene pogreške prilikom povezivanja Mem0 s Ollamom

Uobičajene pogreške prilikom povezivanja Mem0 s Ollamom

Mem0 traži OpenAI ključ

Konfiguracija nije dovršena i neke komponente još uvijek koriste svog zadanog pružatelja usluga. Provjerite jeste li konfigurirali oboje. llm kao embedder s dobavljačem ollama.

Nije moguće povezati se s Ollamom

Provjerite odgovara li API:

curl http://localhost:11434/api/tags

Ako se Mem0 izvršava unutar Dockera, localhost Ovo se odnosi na kontejner, a ne na glavno računalo. U Docker Desktopu možda ćete trebati koristiti:

http://host.docker.internal:11434

Qdrant odbacuje vektore

Kolekcija i model ugradnje koriste različite dimenzije. S nomic-embed-text, konfigurira 768 dimenzija i stvara novu kolekciju ako je postojeća generirana s drugom veličinom.

Pretrage ne vraćaju sjećanja

Provjerite koristite li isti user_id tijekom spremanja i pretraživanja. Također provjerite naziv modela ugradnje, filtere i sadržaj resultado["results"].

Mem0 pohranjuje nebitne informacije

Patka custom_instructionsSmanjuje temperaturu i definira koje kategorije treba uključiti ili isključiti. Također, provjerite je li odabrani model sposoban slijediti strukturirane upute.

Sjećanja proturječe novijim informacijama

Trenutne verzije mogu sačuvati prethodne podatke umjesto da ih automatski prebrišu. Dodajte datume ili metapodatke i koristite update() o delete() kada trebate ispraviti podatke.

Memorija nestaje kada se zamijeni Qdrant

Provjerite koristi li kontejner montirani volumen u /qdrant/storagePonovno pokretanje kontejnera nije isto što i njegovo brisanje, ali ponovno stvaranje bez trajne pohrane može izostaviti podatke iz novog raspoređivanja.

Privatnost i sigurnosne kopije

Lokalna instalacija izbjegava obavezno oslanjanje na upravljane API-je tvrtki Mem0, OpenAI ili drugih pružatelja usluga. Unatoč tome, trebali biste zaštititi infrastrukturu baš kao i svaku aplikaciju koja pohranjuje osobne podatke.

  • Ne izlažite Ollamu ili Qdrant izravno internetu.
  • Šifrirajte diskove i sigurnosne kopije kada sadrže privatne podatke.
  • Primijenite autentifikaciju i kontrole pristupa na aplikaciju.
  • Odvojite memorije pomoću pouzdanih korisničkih identifikatora.
  • Omogućuje vam pregled i brisanje pohranjenih informacija.
  • Ne spremajte lozinke, API ključeve ili bankovne podatke kao suvenire.
  • Bilježi pogreške bez uključivanja cijelih razgovora ili sjećanja.
  • Provjerite mora li obrada podataka biti u skladu s GDPR-om.

S Qdrantom morate napraviti sigurnosnu kopiju volumena qdrant_storage i datoteku definiranu s history_db_pathS Chroma morate kopirati konfiguriranu mapu u path i povijesnu bazu podataka.

Povezivanje Mem0 s Ollamom omogućuje vam stvaranje asistenta koji zadržava informacije između sesija bez nužnog oslanjanja na vanjske usluge. Ollama pokreće modele, Mem0 izdvaja i dohvaća memorije, a Qdrant ili Chroma osigurava trajnu pohranu.

Ključ nije samo spremanje razgovora. Aplikacija mora dohvatiti relevantna sjećanja, pružiti kontekst, ograničiti njihov opseg pomoću identifikatora i ponuditi mehanizme za ispravljanje ili brisanje informacija. S ovim mjerama opreza možete izgraditi korisnu, trajnu i kontroliranu lokalnu memoriju.