Kako povezati Mem0 z Ollamo za ustvarjanje lokalnega pomnilnika

Zadnja posodobitev: 27/08/2026

  • Vzpostavitev ekosistema trajnega pomnilnika z uporabo Ollame kot mehanizma za sklepanje in vdelave.
  • Implementacija lokalnih vektorskih podatkovnih baz z uporabo Qdrant ali ChromaDB za preprečevanje odvisnosti od oblaka.
  • Optimizacija ekstrakcije dejstev s sinhronizacijo specifičnih vektorskih dimenzij.
Kako uporabljati brskalnik z Ollamo in lokalnimi modeli

Jezikovni modeli si ne zapomnijo samodejno, kaj se je zgodilo v prejšnjih pogovorih. Ko zaprete aplikacijo, preklopite med sejami ali izbrišete stara sporočila iz kontekstnega okna, model izgubi te podatke.

Eden od načinov za premagovanje te omejitve je, da Poveži zapisek z OllamoOllama lokalno izvaja generativni model in model vdelave, medtem ko Mem0 iz pogovorov izvleče koristne informacije, jih organizira in omogoča njihov dostop, ko postanejo ponovno pomembne.

Namesto da bi modelu vedno pošiljala celotno zgodovino, lahko aplikacija pridobi nekaj spominov, povezanih s trenutno poizvedbo, in jih vstavi v poziv. To zmanjša količino konteksta in omogoča ohranjanje nastavitev, ciljev ali pomembnih dejstev med sejami.

Namestitev lahko deluje v celoti znotraj vaše infrastrukture, če uporabljate Ollama, Mem0 OSS in lokalno bazo podatkov. Vendar pa bo popolna zasebnost odvisna od vseh povezanih komponent. Če dodate zunanji model, prerazvrščevalec, bazo podatkov ali upravljano storitev, lahko nekateri podatki zapustijo vaš sistem.

Kaj počne Mem0 in kakšno funkcijo ima Ollama?

Kaj počne Mem0 in kakšno funkcijo ima Ollama?

Mem0 in Ollama rešujeta različne probleme. Ollama je odgovoren za vodenje modelovmedtem ko Mem0 zagotavlja operacije, potrebne za dodajanje, iskanje, poizvedovanje, posodabljanje in brisanje pomnilnikov.

Med shranjevanjem lahko Mem0 analizira pogovor in iz njega izlušči dejstva, ki so lahko kasneje koristna. Na primer:

  • Uporabnik ima raje kratke odgovore.
  • Razvija aplikacijo v Rustu.
  • Noče priporočil za grozljivke.
  • Njihov cilj je dirko preteči v manj kot štirih urah.

Mem0 pretvori vsak spomin v numerično predstavitev z uporabo modela vdelave in ga shrani skupaj z njegovo vsebino in metapodatki. Pri iskanju združi poizvedbo s filtri, kot je uporabnikov identifikator, in vrne najustreznejše spomine.

Trenutne različice Mem0 uporabljajo predvsem aditivno ekstrakcijo. To pomeni, da je mogoče shraniti nove informacije, ne da bi se pri tem samodejno izbrisali prejšnji podatki. Če so podatki zastareli in jih je treba popraviti, lahko aplikacija izrecno uporabi ustrezne operacije. update() o delete().

Mem0 ne nadomešča pogovornega modela. Aplikacija mora pridobiti spomine, jih vključiti v sistemsko sporočilo ali kontekst in od Ollame zahtevati, da ustvari odgovor.

Komponente, potrebne za povezavo Mem0 z Ollamo

Za izgradnjo lokalnega sistema potrebujete te komponente:

  • Zapis OSS: upravlja ekstrakcijo, shranjevanje in priklic spominov.
  • Ollama: Izvaja generativni model in model vdelav.
  • Jezikovni model: Interpretira pogovore in generira odgovore.
  • Model vgradnje: preoblikuje spomine in poizvedbe v vektorje.
  • Vektorsko skladišče: Ohranja vektorje in omogoča iskanje sorodnih spominov.
  • Vloga: Povezuje pogovor, iskanje in shranjevanje v spominu.

Qdrant in Chroma sta dve pogosti možnosti shranjevanja:

Trgovina Priporočena uporaba
Qdrant Trajne storitve, več aplikacij in uvajanja z uporabo Dockerja
Kroma Lokalno testiranje in majhne aplikacije s shranjevanjem v mape

Qdrant ponuja ločen API in omogoča enostavno ločevanje vektorske baze podatkov od aplikacije. Chroma lahko uporablja lokalno pot, kar poenostavi začetno testiranje.

Kako namestiti Mem0, Ollama in Qdrant

Najprej namestite Ollamo in preverite, ali storitev deluje. Nato prenesite jezikovni model in model vdelave:

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

llama3.1:latest To je model, uporabljen v uradnem primeru Mem0, vendar ga lahko zamenjate z drugim inštrukcionalnim modelom, ki je združljiv z Ollamo. Manjši modeli porabijo manj pomnilnika, čeprav lahko podatke izvlečejo z manjšo natančnostjo ali se slabše držijo pričakovane oblike.

Ekskluzivna vsebina - Kliknite tukaj  Kaj je ccc exe in zakaj se izvaja

Namestite odvisnosti Pythona:

pip install mem0ai qdrant-client openai ollama

Če želite zagnati Qdrant v Dockerju in ohraniti podatke z uporabo nosilca, uporabite:

docker volume create qdrant_storage

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

Pristanišče 6333 zagotavlja HTTP API in 6334 Uporablja se za gRPC. V tem primeru se Mem0 poveže z uporabo HTTP API-ja.

Preverite, ali Ollama odgovori:

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

Qdrant lahko preverite tako, da odprete:

http://localhost:6333/dashboard

Teh vrat ne izpostavljajte neposredno internetu. Če storitve delujejo na različnih računalnikih, uporabite zasebno omrežje, VPN ali pravila požarnega zidu, ki dovoljujejo le potrebne povezave.

Lokalna konfiguracija Mem0 z Ollamo in Qdrantom

Lokalna konfiguracija Mem0 z Ollamo in Qdrantom

Konfiguracija mora izrecno navajati, da bo Ollama uporabljena kot LLM in kot ponudnik vdelave. Prav tako mora določati, kje se nahaja Qdrant in katere dimenzije ustvarjajo vdelave.

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() Prisili Mem0, da uporabi določene ponudnike. Konstruktor Memory() Ne poveže se samodejno z Mem0 Cloud, lahko pa uporabi privzete komponente, ki temeljijo na OpenAI, in zahteva ključ, če jih ne zamenjate.

custom_instructions Omogoča vam, da določite, katere informacije je treba shraniti. Pred ustvarjanjem primerka jih je treba vključiti kot lastnost najvišje ravni. Memory.

Zakaj se morajo dimenzije vgradnje ujemati

Model nomic-embed-text proizvaja vektorje 768 dimenzijZato je zbirka Qdrant konfigurirana z uporabo:

embedding_model_dims=768

Če shramba pričakuje vektorje drugačne velikosti, bo Qdrant zavrnil podatke in Mem0 ne bo mogel pravilno shraniti ali poizvedovati po pomnilnikih.

Pri spreminjanju modela vdelave preverite njegove dimenzije, preden spremenite nastavitve. Morda boste morali ustvariti tudi novo zbirko in regenerirati vse obstoječe vektorje.

V isti zbirki ne mešajte vgradenj, ki jih ustvarjajo različni modeli. Tudi če dva modela ustvarita vektorje z enakimi dimenzijami, njuni semantični prostori morda niso združljivi.

Kako shraniti in obuditi spomine

Abstraktna predstavitev digitalne sinapse, ki prikazuje nevronsko mrežo in osrednje pomnilniško jedro, kar simbolizira integracijo Mem0 in Ollame.

Če želite shraniti pogovor, posredujte seznam sporočil memory.add() in označuje stabilen identifikator za uporabnika:

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)

Z infer=TrueMem0 privzeto uporablja model za ekstrakcijo strukturiranih spominov. Če želite ohraniti vsebino brez te ekstrakcije, lahko uporabite infer=False.

Če želite najti sorodne informacije:

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 To je ključnega pomena. Če aplikacija, ki jo uporablja več ljudi, išče brez pravilne uporabe identifikatorja, lahko pridobi spomine, ki pripadajo drugemu uporabniku.

Uporabite lahko tudi agent_id ločiti spomin različnih agentov in run_id za razdelitev pogovorov, projektov ali določenih procesov.

Ekskluzivna vsebina - Kliknite tukaj  Kako odstraniti opomnik o zasebnosti v Googlu

Kako ustvariti popoln klepet z Ollamo in Mem0

Kako ustvariti popoln klepet z Ollamo in Mem0

Da bi Ollama lahko uporabljala spomine, mora aplikacija izvesti štiri korake:

  1. Prejmite uporabnikovo vprašanje.
  2. Poiščite povezane spomine z uporabo Mem0.
  3. Dodajte jih kontekstu, poslanemu Ollami.
  4. Shrani vprašanje in odgovor kot novo interakcijo.

Ollama ponuja API, združljiv s formatom OpenAI. Z njim lahko ustvarimo celotno zanko:

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

Zdaj lahko začnete pogovor:

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

Po ponovnem zagonu aplikacije lahko isti uporabnik vpraša:

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

Če je bil pomnilnik pravilno shranjen, bo Mem0 pridobil informacije in Ollama jih bo lahko uporabila za odgovor.

Kako uporabljati Chroma namesto Qdranta

Za majhen lokalni test lahko Qdrant zamenjate s Chroma. Pravilno ime ponudnika na Mem0 je chroma:

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

Mapa, navedena v path Vseboval bo trajne podatke Chroma. Vključiti jih morate v varnostne kopije in se jih pri posodabljanju aplikacije ne smete izbrisati.

Paket Python, ki ga uporablja projekt, se še naprej imenuje chromadbToda identifikator, ki ga morate zapisati v konfiguraciji Mem0, je chroma.

Kako popraviti ali izbrisati zastarele spomine

Spomina asistenta ne bi smeli šteti za nezmotljiv vir. Model lahko shrani napačno interpretirano dejstvo, ohrani informacije, ki niso več veljavne, ali ustvari več podobnih spominov.

Ogledate si lahko vse spomine, povezane z uporabnikom:

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

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

Za popravljanje določenega spomina:

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

Če ga želite odstraniti:

memory.delete(
    memory_id="ID_DEL_RECUERDO"
)

Aplikacija, namenjena končnim uporabnikom, mora omogočati nadzor za ogled, popravljanje in brisanje shranjenih spominov. Priporočljivo je tudi vzpostaviti pravilnik o poteka veljavnosti začasnih informacij.

Kako izboljšati kakovost spominov

Kakovost je odvisna od modela, navodil, pogovora in količine poslanih informacij. Uporaba večjega modela vedno ne zagotavlja boljših rezultatov, čeprav lahko zelo majhni modeli spregledajo nianse ali vrnejo napačne oblike.

Te vaje pomagajo izboljšati spomin:

  • Za stabilnejšo ekstrakcijo uporabite nizko temperaturo.
  • Jasno opredelite, katere kategorije si je vredno zapomniti.
  • Izključite pozdrave, ponavljanja in nepomembne pogovore.
  • Shranite tako uporabnikovo sporočilo kot odgovor agenta.
  • Za uporabnike, agente in projekte uporabite različne identifikatorje.
  • Omejite število priklicanih spominov, da ne preobremenite konteksta.
  • Občasno preglejte napačne, podvojene ali zastarele spomine.
  • Preden jih daste v produkcijo, preizkusite iskanja z resničnimi poizvedbami.

Ne uvajajte spominov kot ukazov najvišje prioritete. Obravnavajte jih kot kontekstualne informacije, ki so lahko nepopolne ali zastarele. To zmanjša tveganje, da bi manipuliran spomin spremenil splošno vedenje agenta.

Optimizacija delovanja

Vsak klic na memory.add() Model lahko zaženete, da izluščite dejstva, ki jih je treba shraniti. Zato varčevanje s pomnilnikom poveča zakasnitev in porabo virov.

V majhni aplikaciji lahko pogovor shranite po generiranju odgovora. V storitvah z več hkratnimi zahtevami je bolje uporabiti Asinhronski pomnilnikdelavec v ozadju ali čakalna vrsta opravil.

Ekskluzivna vsebina - Kliknite tukaj  Kako znova zagnati prenosnik Asus s tipkovnico

Mem0 zagotavlja asinhroni vmesnik, da se izognemo blokiranju aplikacij, zgrajenih z asyncio ali 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 posredujte naloge sekundarni niti, ne da bi obravnavali njene izjeme. Če se program zapre, preden je shranjevanje končano, pogovor morda ne bo posnet. Trajna čakalna vrsta omogoča ponovni poskus neuspešnih operacij.

Za pogovor in ekstrakcijo lahko uporabite tudi različne modele. Zmogljivejši generativni model lahko obravnava odgovore, medtem ko manjši obdeluje pomnilnik. Preden to storite, preverite, ali drugi model pravilno sledi navodilom in zahtevani obliki.

Pogoste napake pri povezovanju Mem0 z Ollamo

Pogoste napake pri povezovanju Mem0 z Ollamo

Mem0 zahteva ključ OpenAI

Konfiguracija je nepopolna in nekatere komponente še vedno uporabljajo privzetega ponudnika. Preverite, ali ste konfigurirali oba. llm kot embedder z dobaviteljem ollama.

Ni mogoče vzpostaviti povezave z Ollamo

Preverite, ali se API odziva:

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

Če se Mem0 izvaja znotraj Dockerja, localhost To se nanaša na vsebnik, ne na gostiteljski računalnik. V Docker Desktop boste morda morali uporabiti:

http://host.docker.internal:11434

Qdrant zavrača vektorje

Zbirka in model vdelave uporabljata različne dimenzije. Z nomic-embed-text, konfigurira 768 dimenzij in ustvari novo zbirko, če je bila obstoječa ustvarjena z drugačno velikostjo.

Iskanja ne vračajo spominov

Preverite, ali uporabljate isto user_id med shranjevanjem in iskanjem. Preverite tudi ime modela vdelave, filtre in vsebino resultado["results"].

Mem0 shranjuje nepomembne informacije

Raca custom_instructionsZnižuje temperaturo in določa, katere kategorije vključiti ali izključiti. Preverite tudi, ali izbrani model lahko sledi strukturiranim navodilom.

Spomini nasprotujejo novejšim informacijam

Trenutne različice lahko ohranijo prejšnje podatke, namesto da bi jih samodejno prepisale. Dodajte datume ali metapodatke in jih uporabite update() o delete() ko morate popraviti podatke.

Pomnilnik izgine, ko zamenjate Qdrant

Preverite, ali vsebnik uporablja nameščeni nosilec v /qdrant/storagePonovni zagon vsebnika ni enak njegovemu brisanju, vendar lahko ponovna izdelava brez trajnega shranjevanja izpusti podatke iz nove uvedbe.

Zasebnost in varnostne kopije

Lokalna namestitev se izogne ​​obvezni odvisnosti od upravljanih API-jev Mem0, OpenAI ali drugih ponudnikov. Kljub temu morate infrastrukturo zaščititi tako kot vsako aplikacijo, ki shranjuje osebne podatke.

  • Ollame ali Qdranta ne izpostavljajte neposredno internetu.
  • Šifriraj diske in varnostne kopije, če vsebujejo zasebne podatke.
  • V aplikaciji uporabite preverjanje pristnosti in nadzor dostopa.
  • Ločite spomine z uporabo zanesljivih uporabniških identifikatorjev.
  • Omogoča vam ogled in brisanje shranjenih podatkov.
  • Ne shranjujte gesel, API ključev ali bančnih podatkov kot spominke.
  • Zapisuje napake, ne da bi vključil celotne pogovore ali spomine.
  • Preverite, ali mora biti obdelava podatkov v skladu z GDPR.

S Qdrantom morate varnostno kopirati nosilec qdrant_storage in datoteko, ki jo definira history_db_pathS Chroma morate konfigurirano mapo kopirati v path in zgodovinsko bazo podatkov.

Povezava Mem0 z Ollamo vam omogoča, da ustvarite pomočnika, ki hrani informacije med sejami, ne da bi se nujno zanašal na zunanje storitve. Ollama izvaja modele, Mem0 izvleče in pridobi spomine, Qdrant ali Chroma pa zagotavlja trajno shranjevanje.

Ključ ni zgolj shranjevanje pogovorov. Aplikacija mora pridobiti ustrezne spomine, zagotoviti kontekst, omejiti njihov obseg z identifikatorji in ponuditi mehanizme za popravljanje ali brisanje informacij. S temi previdnostnimi ukrepi lahko zgradite uporaben, trajen in nadzorljiv lokalni pomnilnik.