[{"data":1,"prerenderedAt":685},["ShallowReactive",2],{"blog-mem0-en":3},{"slug":4,"published":5,"minutes":6,"category":7,"tags":8,"keywords":13,"about":20,"sources":24,"cover":52,"og":53,"expertise":54,"locales":55,"lang":56,"title":59,"description":60,"coverAlt":61,"metaTitle":62,"takeaways":63,"faq":69,"toc":82,"blocks":107,"others":432},"mem0","2026-09-17",10,"rag",[9,10,11,12],"Agent memory","Long-term memory","RAG","Vector search",[4,14,15,16,17,18,19],"mem0 review","agent memory layer","mem0 self-hosted","mem0 pricing","long-term memory for agents","mem0 alternatives",[21],{"name":22,"url":23},"Mem0","https:\u002F\u002Fmem0.ai",[25,28,31,34,37,40,43,46,49],{"title":26,"url":27},"Mem0 documentation","https:\u002F\u002Fdocs.mem0.ai\u002Fintroduction",{"title":29,"url":30},"Mem0 quickstart","https:\u002F\u002Fdocs.mem0.ai\u002Fquickstart",{"title":32,"url":33},"How Mem0 works","https:\u002F\u002Fdocs.mem0.ai\u002Fcore-concepts\u002Fhow-it-works",{"title":35,"url":36},"Mem0 pricing","https:\u002F\u002Fmem0.ai\u002Fpricing",{"title":38,"url":39},"Mem0 on GitHub","https:\u002F\u002Fgithub.com\u002Fmem0ai\u002Fmem0",{"title":41,"url":42},"mem0ai on PyPI","https:\u002F\u002Fpypi.org\u002Fproject\u002Fmem0ai\u002F",{"title":44,"url":45},"Mem0 research and benchmarks","https:\u002F\u002Fmem0.ai\u002Fresearch",{"title":47,"url":48},"Mem0 MCP server","https:\u002F\u002Fdocs.mem0.ai\u002Fplatform\u002Fmem0-mcp",{"title":50,"url":51},"Mem0 paper on arXiv","https:\u002F\u002Farxiv.org\u002Fabs\u002F2504.19413","\u002Fimages\u002Fblog\u002Fmem0\u002Fcover.webp","\u002Fimages\u002Fblog\u002Fmem0\u002Fog.jpg","ai-engineer",[56,57,58],"en","de","hu","Mem0: what an agent memory layer costs per turn","A review of Mem0: facts extracted from every turn, the April 2026 benchmark table and its platform-only caveat, four cloud tiers and what self-hosting leaves out.","A ring of four quarters, each releasing a small square onto a pile above stacked discs.","Mem0 review: memory that costs per turn · Balázs Csorba",[64,65,66,67,68],"Mem0 turns conversation into stored facts: an LLM extracts, deduplicates and embeds them, so every write costs a model call on top of the storage write.","The current algorithm scores 92.5 on LoCoMo and 94.4 on LongMemEval, and the README states those numbers come from the managed platform rather than the open-source SDK.","Cloud tiers are Hobby for free, Starter at $19 a month and Pro at $249 a month, with graph memory and Dream consolidation gated behind Pro.","Open-source retrieval has no graph memory and boosts on entity overlap alone, so self-hosting buys the API rather than the benchmark tables.","The free tier allows 10,000 add and 1,000 retrieval requests a month, which is roughly thirty-three searches a day.",[70,73,76,79],{"q":71,"a":72},"Is Mem0 free to self-host?","The library is Apache-2.0 and the README offers a docker-compose server with authentication on by default, so there is no licence fee. It still needs an LLM for extraction, gpt-5-mini by default, and a vector store, Qdrant by default, so the cost moves to inference and operations rather than to a subscription.",{"q":74,"a":75},"Mem0 or a summary of the transcript in Postgres?","If a product holds one short session per user, a rolling summary plus a table of facts is cheaper and easier to audit, and it has no extraction step that can invent a fact. Mem0 earns its place when memories outlive sessions, have to be filtered per user, agent and run, and are read on the hot path of every request.",{"q":77,"a":78},"Does the open-source version reach the published benchmark scores?","No, and the repository says so: the numbers reflect the managed platform, which contains proprietary optimizations that are not in the open-source SDK. Open-source retrieval has no graph memory and depends on the vector store that is configured.",{"q":80,"a":81},"How does Mem0 reach an agent that already speaks MCP?","Through a hosted server at mcp.mem0.ai over HTTPS, exposing eleven tools including add_memory, search_memories, update_memory and delete_memory. It authenticates with a browser sign-in flow or an API key sent as a bearer token, and nothing runs on the developer's machine.",[83,86,89,92,95,98,101,104],{"id":84,"title":85},"what-it-is","What it is",{"id":87,"title":88},"how-it-works","How it works",{"id":90,"title":91},"getting-started","Getting started",{"id":93,"title":94},"benchmarks","Benchmarks",{"id":96,"title":97},"pricing","Pricing",{"id":99,"title":100},"where-it-shingles","Where it falls short",{"id":102,"title":103},"verdict","Verdict",{"id":105,"title":106},"sources","Sources",[108,112,115,118,130,148,149,152,158,161,162,177,179,186,197,198,201,258,261,271,272,275,320,323,324,327,373,376,381,382,385,397,401,402],{"type":109,"content":110},"paragraph",[111],"Mem0 is a memory layer for agents: conversation goes in, facts come out, and the facts are fetched back before the next model call. The position taken here is that it is the most carefully built memory API in this market and a bad default at the same time, because an LLM call sits on the write path — remembering is billed per turn, not per user. It earns its place when memories have to outlive sessions and be filtered per user, agent and run; a rolling summary and a table beat it when they do not.",{"type":109,"content":113},[114],"It sits between the application and the model, replacing the habit of appending transcript to the prompt, and competes with Zep, LangMem, Letta and whatever a team builds from a database and a summarisation step. It ships in three shapes under one API: an Apache-2.0 library, a self-hosted server behind docker compose with authentication on by default, and a hosted platform with a dashboard, metered plans and an MCP endpoint.",{"type":116,"level":117,"id":84,"text":85},"heading",2,{"type":109,"content":119},[120,121,125,126,129],"Two products share the name. The open-source repository is the ",{"tag":122,"children":123},"code",[124],"mem0ai"," library for Python and JavaScript, embedded in a process; the platform is a hosted API with scopes, plans and a dashboard, which the same SDK reaches over HTTPS at ",{"tag":122,"children":127},[128],"api.mem0.ai",". The homepage listed 62,590 GitHub stars in early October 2026.",{"type":131,"ordered":132,"items":133},"list",false,[134,136,138,140,142,144,146],[135],"Published on PyPI as mem0ai, version 2.2.1, under Apache-2.0, with a matching JavaScript package.",[137],"Three deployment modes in the README: library for a prototype, a docker-compose server with authentication on by default for a team, and the cloud platform for zero operations.",[139],"Operations are add, search, get_all, update and delete, each scoped by user_id, agent_id, app_id or run_id.",[141],"Writes are inferred: an LLM extracts durable facts, deduplicates and embeds them, and infer=False stores the raw message instead.",[143],"Defaults are gpt-5-mini for extraction and text-embedding-3-small for embeddings, with Qdrant as the packaged vector store.",[145],"Hosted MCP server at mcp.mem0.ai exposing eleven memory tools, authenticated by browser sign-in or by an API key as a bearer token.",[147],"Compliance listed on the homepage as SOC 2 Type 1, HIPAA and GDPR, with BYOK and on-premises deployment on the Enterprise tier.",{"type":116,"level":117,"id":87,"text":88},{"type":109,"content":150},[151],"The pipeline is asymmetric, and that asymmetry is the product. On add, Mem0 looks up related memories so the same fact is not stored twice, extracts new facts with an LLM, deduplicates and embeds them, pulls out entities, and writes to a SQL store for facts, a vector store for embeddings and an entity store for links. On search, four signals are scored and fused: semantic similarity, keyword matching, entity overlap, and a temporal signal scored from metadata written at extraction time.",{"type":153,"src":154,"alt":155,"wide":156,"caption":157},"image","\u002Fimages\u002Fblog\u002Fmem0\u002Fdiagram-7.webp","How a memory is written and read A conversation box on the left feeds an extraction box in the middle, labelled one LLM call and ADD only, which produces facts rather than transcripts. An arrow continues to a deduplicate box that embeds the facts and links entities. From there the flow fans out into three stores: a SQL store for facts and metadata, a vector store for embeddings, and an entity store for boosting. The three stores merge into a search box at the bottom, labelled semantic, keyword, entity and time. A long return arrow runs from the search box back to the conversation box, labelled memories into the prompt, which closes the loop. A label at the top right reads one model call on the write path.",true,"Facts are extracted once per add and read back by a scoped search; the open-source build has no entity graph, so its entity signal is overlap on extracted terms.",{"type":109,"content":159},[160],"The documentation is explicit about the split that follows. The platform fuses all four signals with graph-backed entity matching; the open-source build has no graph memory and boosts on entity overlap alone, depending on whichever vector store is configured. Extraction is additive as well — a new fact does not silently overwrite an old one — so corrections have to be explicit update or delete calls, which is the right default for an audit trail and an annoying one for a user who just changed their mind.",{"type":116,"level":117,"id":90,"text":91},{"type":109,"content":163},[164,165,168,169,172,173,176],"The hosted path is two calls. Install the SDK, take an API key from the dashboard, and give every call a scope: a memory without a ",{"tag":122,"children":166},[167],"user_id",", an ",{"tag":122,"children":170},[171],"agent_id"," or a ",{"tag":122,"children":174},[175],"run_id"," will be handed to whoever asks for it next.",{"type":122,"code":178},"from mem0 import MemoryClient\n\nclient = MemoryClient(api_key=\"your-api-key\")\n\nmessages = [\n    {\"role\": \"user\", \"content\": \"I'm a vegetarian and allergic to nuts.\"},\n    {\"role\": \"assistant\", \"content\": \"Noted.\"},\n]\nclient.add(messages, user_id=\"user123\")\n\nresults = client.search(\n    \"What are my dietary restrictions?\",\n    filters={\"user_id\": \"user123\"},\n)\nfor r in results[\"results\"]:\n    print(r[\"memory\"], r[\"score\"])",{"type":109,"content":180},[181,182,185],"The open-source library has the same shape and no server behind it: ",{"tag":122,"children":183},[184],"from mem0 import Memory",", then add, search, update and delete against stores you operate yourself. It needs an LLM key and a vector store before the first call, which is the real difference between the two halves — the library is Apache-2.0, and the retrieval that makes the benchmark tables lives on the platform.",{"type":187,"variant":188,"title":189,"body":190},"callout","note","What the write path costs",[191],[192,193,196],"Extraction runs on every ",{"tag":122,"children":194},[195],"add",", so a chat product that stores memories per turn pays a model call and an embedding for the write, on top of the retrieval it already does. The number worth tracking is therefore not the price of the tier but the cost per conversation. The docs also tell you not to store secrets or unredacted sensitive data, because the whole point of the store is that it gets retrieved.",{"type":116,"level":117,"id":93,"text":94},{"type":109,"content":199},[200],"Mem0 publishes its own numbers, which is more than most memory layers do, and the README annotates the method: single-pass retrieval, one call with no agentic loop, a top-200 retrieval budget, on the same production-representative model stack.",{"type":202,"head":203,"rows":214},"table",[204,206,208,210,212],[205],"Benchmark",[207],"Before April 2026",[209],"Current score",[211],"Tokens per query",[213],"p50 latency",[215,226,237,248],[216,218,220,222,224],[217],"LoCoMo",[219],"71.4",[221],"92.5",[223],"7.0K",[225],"0.88 s",[227,229,231,233,235],[228],"LongMemEval",[230],"67.8",[232],"94.4",[234],"6.8K",[236],"1.09 s",[238,240,242,244,246],[239],"BEAM, 1M tokens",[241],"not published",[243],"64.1",[245],"6.7K",[247],"1.00 s",[249,251,252,254,256],[250],"BEAM, 10M tokens",[241],[253],"48.6",[255],"6.9K",[257],"1.05 s",{"type":109,"content":259},[260],"The caveat sits in the same paragraph: those scores reflect the managed platform, which carries proprietary optimizations that are not in the open-source SDK, and open-source users should expect directionally similar rather than identical numbers. The paper behind it, posted to arXiv in April 2025, reports 91% lower p95 latency and more than 90% token savings against full-context prompting on LoCoMo, a 26% relative gain in LLM-as-a-Judge over OpenAI's memory, and about 2% more from the graph variant.",{"type":187,"variant":262,"title":263,"body":264},"warn","A vendor table is not a comparison",[265],[266,267,270],"Choosing Mem0 over Zep, or over a summary in the prompt, on the strength of these rows means comparing a vendor's platform against your own stack. The evaluation framework published as ",{"tag":122,"children":268},[269],"mem0ai\u002Fmemory-benchmarks"," is the part worth reproducing.",{"type":116,"level":117,"id":96,"text":97},{"type":109,"content":273},[274],"The pricing page meters two counters, add requests and retrieval requests, and end users are unlimited on every tier. The figures below are what the page listed in early October 2026; usage-based pricing exists for traffic that does not fit a tier.",{"type":202,"head":276,"rows":285},[277,279,281,283],[278],"Plan",[280],"Price",[282],"Add requests per month",[284],"Retrieval requests per month",[286,295,304,312],[287,289,291,293],[288],"Hobby",[290],"Free",[292],"10,000",[294],"1,000",[296,298,300,302],[297],"Starter",[299],"$19 a month",[301],"50,000",[303],"5,000",[305,307,309,311],[306],"Pro",[308],"$249 a month",[310],"500,000",[301],[313,315,317,319],[314],"Enterprise",[316],"Custom",[318],"Unlimited",[318],{"type":109,"content":321},[322],"Two features that carry the marketing — graph memory for entity linking and Dream consolidation — are listed under Pro and Enterprise rather than in the free tiers, and the README's own comparison table describes the self-hosted server's advanced features as teasers. Hobby's 1,000 retrievals work out to about thirty-three searches a day: enough to prove an integration, not enough to run a product.",{"type":116,"level":117,"id":99,"text":100},{"type":109,"content":325},[326],"The weaknesses are structural rather than cosmetic. Every add is a model call, so write latency and the token bill both scale with conversation volume, and the extraction step can store an inference the user never stated — a derived fact is harder to audit than a logged message. The features that make Mem0 interesting live on the platform, which means the open-source build and the paid product share a name more than a feature set. Lock-in is real but modest: memories are rows readable back through the API, and the move to the v3 API has a published migration guide.",{"type":202,"head":328,"rows":337},[329,331,333,335],[330],"Option",[332],"Memory model",[334],"Operational burden",[336],"Right for",[338,346,355,364],[339,340,342,344],[22],[341],"Extracted facts, scoped by user, agent and run",[343],"A library to run, or a platform to pay",[345],"Multi-session personalisation at a known cost per conversation",[347,349,351,353],[348],"Zep with Graphiti",[350],"Temporal knowledge graph of episodes",[352],"A graph store and its upkeep",[354],"Relationship-heavy memory where order in time matters",[356,358,360,362],[357],"LangMem",[359],"Memory stores and semantic search in the LangChain stack",[361],"Part of the LangChain toolchain",[363],"Teams already committed to LangChain",[365,367,369,371],[366],"A table of facts",[368],"Rows you write yourself, plus pgvector",[370],"Your own SQL and a summary prompt",[372],"Short-lived memory and strict audit requirements",{"type":109,"content":374},[375],"Which of these fits depends on how much memory the product needs, not on which row scores highest on LoCoMo. A support agent with a few dozen durable facts per account does not need a memory layer at all; a consumer assistant holding a year of history cannot afford to re-read the transcript.",{"type":187,"variant":262,"title":377,"body":378},"The gap between the SDK and the platform",[379],[380],"Graph memory, temporal ranking and the fused entity signal are platform features. A self-hosted deployment gets vector search, keyword matching and entity overlap, so a team that runs it itself should size the product on that feature set rather than on the benchmark tables.",{"type":116,"level":117,"id":102,"text":103},{"type":109,"content":383},[384],"Adopt it when memory is a product feature that outlives sessions and the write-path model call can be priced into the product. Skip it when a session's context fits into a summary, or when every stored fact needs provenance a human can check, because inference on the way in is the design rather than a side effect.",{"type":131,"ordered":156,"items":386},[387,389,391,393,395],[388],"Start with the library: the API has the same shape, and it keeps the move to the platform open.",[390],"Scope every call. An unscoped memory is the one failure mode that crosses users.",[392],"Budget the write path before the tier: one extraction call per add is the cost model, whatever the plan costs.",[394],"Take the platform for graph memory, temporal ranking and fused retrieval — the parts the open-source build does not have.",[396],"Never store secrets or unredacted personal data; retrieval is designed to surface what is in the store.",{"type":398,"content":399},"quote",[400],"Avoid storing secrets, raw credentials, or unredacted sensitive data. Mem0 is designed to retrieve stored context.",{"type":116,"level":117,"id":105,"text":106},{"type":131,"ordered":156,"items":403},[404,408,411,414,417,420,423,426,429],[405],{"tag":406,"href":27,"children":407},"a",[26],[409],{"tag":406,"href":30,"children":410},[29],[412],{"tag":406,"href":33,"children":413},[32],[415],{"tag":406,"href":36,"children":416},[35],[418],{"tag":406,"href":39,"children":419},[38],[421],{"tag":406,"href":42,"children":422},[41],[424],{"tag":406,"href":45,"children":425},[44],[427],{"tag":406,"href":48,"children":428},[47],[430],{"tag":406,"href":51,"children":431},[50],[433,507,566,624],{"slug":434,"published":435,"minutes":436,"category":7,"tags":437,"keywords":441,"about":454,"sources":464,"cover":501,"og":502,"expertise":54,"locales":503,"lang":56,"title":504,"description":505,"coverAlt":506},"embedding-model-selection-2026","2026-10-17",9,[438,11,439,12,440],"Embeddings","MTEB","Model selection",[442,443,444,445,446,447,448,449,450,451,452,453],"best embedding model 2026","how to choose an embedding model","embedding model comparison","MTEB leaderboard explained","RTEB benchmark","open source embedding model","multilingual embedding model","voyage-4 vs openai embeddings","Qwen3-Embedding","EmbeddingGemma","embedding model for RAG","switching embedding models re-embed",[455,458,461],{"name":456,"url":457},"Word embedding","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FWord_embedding",{"name":459,"url":460},"Information retrieval","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FInformation_retrieval",{"name":462,"url":463},"Discounted cumulative gain","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FDiscounted_cumulative_gain",[465,468,471,474,477,480,483,486,489,492,495,498],{"title":466,"url":467},"Enevoldsen et al.: MMTEB, Massive Multilingual Text Embedding Benchmark (2025)","https:\u002F\u002Farxiv.org\u002Fabs\u002F2502.13595",{"title":469,"url":470},"Hugging Face: Introducing RTEB, a new standard for retrieval evaluation (Oct 2025)","https:\u002F\u002Fhuggingface.co\u002Fblog\u002Frteb",{"title":472,"url":473},"OpenAI: Vector embeddings guide","https:\u002F\u002Fdevelopers.openai.com\u002Fapi\u002Fdocs\u002Fguides\u002Fembeddings",{"title":475,"url":476},"OpenAI: API pricing","https:\u002F\u002Fdevelopers.openai.com\u002Fapi\u002Fdocs\u002Fpricing",{"title":478,"url":479},"Voyage AI: The Voyage 4 model family, shared embedding space with MoE architecture (Jan 2026)","https:\u002F\u002Fblog.voyageai.com\u002F2026\u002F01\u002F15\u002Fvoyage-4\u002F",{"title":481,"url":482},"Voyage AI: Text embeddings documentation","https:\u002F\u002Fdocs.voyageai.com\u002Fdocs\u002Fembeddings",{"title":484,"url":485},"Voyage AI: Pricing","https:\u002F\u002Fdocs.voyageai.com\u002Fdocs\u002Fpricing",{"title":487,"url":488},"Google: Gemini API embeddings documentation","https:\u002F\u002Fai.google.dev\u002Fgemini-api\u002Fdocs\u002Fembeddings",{"title":490,"url":491},"Google: Gemini API pricing","https:\u002F\u002Fai.google.dev\u002Fgemini-api\u002Fdocs\u002Fpricing",{"title":493,"url":494},"Cohere: Embed models documentation","https:\u002F\u002Fdocs.cohere.com\u002Fdocs\u002Fcohere-embed",{"title":496,"url":497},"Qwen: Qwen3-Embedding-8B model card","https:\u002F\u002Fhuggingface.co\u002FQwen\u002FQwen3-Embedding-8B",{"title":499,"url":500},"Google Developers Blog: Introducing EmbeddingGemma (Sep 2025)","https:\u002F\u002Fdevelopers.googleblog.com\u002Fen\u002Fintroducing-embeddinggemma\u002F","\u002Fimages\u002Fblog\u002Fembedding-model-selection-2026\u002Fcover.webp","\u002Fimages\u002Fblog\u002Fembedding-model-selection-2026\u002Fog.jpg",[56,57,58],"Choosing an embedding model in 2026: leaderboards, costs and a bake-off on your own data","How to pick an embedding model for RAG in 2026: what MTEB and RTEB tell you, hosted vs open weights, prices, dimensions, and a one-week bake-off.","Three columns of stacked blocks, the middle tallest, each measured by a short bar and a wide bracket.",{"slug":508,"published":435,"minutes":6,"category":7,"tags":509,"keywords":513,"about":525,"sources":535,"cover":560,"og":561,"expertise":54,"locales":562,"lang":56,"title":563,"description":564,"coverAlt":565},"contextual-retrieval-late-chunking",[11,510,438,511,512],"Chunking","Contextual retrieval","Late chunking",[514,515,516,517,518,519,520,521,522,523,524],"contextual retrieval","anthropic contextual retrieval","late chunking","contextual chunk embeddings","contextual embeddings rag","contextual bm25","chunk context rag","voyage-context-3","voyage-context-4","late chunking vs contextual retrieval","rag chunking context loss",[526,529,532],{"name":527,"url":528},"Retrieval-augmented generation","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FRetrieval-augmented_generation",{"name":530,"url":531},"Okapi BM25","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FOkapi_BM25",{"name":533,"url":534},"Sentence embedding","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FSentence_embedding",[536,539,542,545,548,551,554,557],{"title":537,"url":538},"Anthropic: Introducing Contextual Retrieval (Sep 2024)","https:\u002F\u002Fwww.anthropic.com\u002Fnews\u002Fcontextual-retrieval",{"title":540,"url":541},"Günther et al.: Late Chunking, Contextual Chunk Embeddings Using Long-Context Embedding Models (2024, rev. 2025)","https:\u002F\u002Farxiv.org\u002Fabs\u002F2409.04701",{"title":543,"url":544},"Jina AI: Late Chunking in Long-Context Embedding Models (Aug 2024)","https:\u002F\u002Fjina.ai\u002Fnews\u002Flate-chunking-in-long-context-embedding-models\u002F",{"title":546,"url":547},"Voyage AI: Introducing voyage-context-3 (Jul 2025)","https:\u002F\u002Fblog.voyageai.com\u002F2025\u002F07\u002F23\u002Fvoyage-context-3\u002F",{"title":549,"url":550},"Voyage AI: voyage-context-4 (Jun 2026)","https:\u002F\u002Fblog.voyageai.com\u002F2026\u002F06\u002F29\u002Fvoyage-context-4\u002F",{"title":552,"url":553},"Voyage AI: Contextualized chunk embeddings documentation","https:\u002F\u002Fdocs.voyageai.com\u002Fdocs\u002Fcontextualized-chunk-embeddings",{"title":555,"url":556},"Anthropic: Claude API pricing","https:\u002F\u002Fplatform.claude.com\u002Fdocs\u002Fen\u002Fabout-claude\u002Fpricing",{"title":558,"url":559},"Qu, Tu and Bao: Is Semantic Chunking Worth the Computational Cost? (2024)","https:\u002F\u002Farxiv.org\u002Fabs\u002F2410.13070","\u002Fimages\u002Fblog\u002Fcontextual-retrieval-late-chunking\u002Fcover.webp","\u002Fimages\u002Fblog\u002Fcontextual-retrieval-late-chunking\u002Fog.jpg",[56,57,58],"Contextual retrieval and late chunking: giving RAG chunks back their context","Chunks lose their document. How contextual retrieval, late chunking and contextualized embedding models fix that, what each costs, and when to skip it.","Four loose square pieces gathered by a wide bracket below, each joined upward to a large sheet.",{"slug":567,"published":435,"minutes":436,"category":7,"tags":568,"keywords":572,"about":585,"sources":593,"cover":618,"og":619,"expertise":54,"locales":620,"lang":56,"title":621,"description":622,"coverAlt":623},"rag-access-control-permissions",[11,569,570,571,12],"Access control","Security","Multi-tenancy",[573,574,575,576,577,578,579,580,581,582,583,584],"rag access control","permission aware rag","document level security rag","rag multi tenancy","vector database access control","pgvector row level security","security trimming azure ai search","openfga rag authorization","qdrant multitenancy","pinecone namespaces multitenancy","owasp llm08 vector and embedding weaknesses","rag data leakage",[586,589,592],{"name":587,"url":588},"Access-control list","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FAccess-control_list",{"name":590,"url":591},"Multitenancy","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FMultitenancy",{"name":527,"url":528},[594,597,600,603,606,609,612,615],{"title":595,"url":596},"OWASP GenAI Security Project: LLM08:2025 Vector and Embedding Weaknesses","https:\u002F\u002Fgenai.owasp.org\u002Fllmrisk\u002Fllm082025-vector-and-embedding-weaknesses\u002F",{"title":598,"url":599},"PostgreSQL documentation: Row Security Policies","https:\u002F\u002Fwww.postgresql.org\u002Fdocs\u002Fcurrent\u002Fddl-rowsecurity.html",{"title":601,"url":602},"pgvector README: filtering and iterative index scans","https:\u002F\u002Fgithub.com\u002Fpgvector\u002Fpgvector",{"title":604,"url":605},"Qdrant: Multitenancy and partitions guide","https:\u002F\u002Fqdrant.tech\u002Fdocumentation\u002Fguides\u002Fmultiple-partitions\u002F",{"title":607,"url":608},"Pinecone: Implement multitenancy using namespaces","https:\u002F\u002Fdocs.pinecone.io\u002Fguides\u002Findex-data\u002Fimplement-multitenancy",{"title":610,"url":611},"Microsoft Learn: Document-level access control in Azure AI Search","https:\u002F\u002Flearn.microsoft.com\u002Fen-us\u002Fazure\u002Fsearch\u002Fsearch-document-level-access-overview",{"title":613,"url":614},"OpenFGA: RAG authorization use case","https:\u002F\u002Fopenfga.dev\u002Fdocs\u002Fuse-cases\u002Frag-authorization",{"title":616,"url":617},"Morris et al.: Text Embeddings Reveal (Almost) As Much As Text (EMNLP 2023)","https:\u002F\u002Farxiv.org\u002Fabs\u002F2310.06816","\u002Fimages\u002Fblog\u002Frag-access-control-permissions\u002Fcover.webp","\u002Fimages\u002Fblog\u002Frag-access-control-permissions\u002Fog.jpg",[56,57,58],"Access control for RAG: permission-aware retrieval without leaking documents","How RAG assistants leak documents and how to stop it: ACLs on every chunk, pre-filtering, row-level security in pgvector, permission sync and leak tests.","Seven cards in a row, six with a lock badge, one bare card sending an arrow outward.",{"slug":625,"published":435,"minutes":6,"category":7,"tags":626,"keywords":631,"about":643,"sources":651,"cover":678,"og":679,"expertise":680,"locales":681,"lang":56,"title":682,"description":683,"coverAlt":684},"rag-product-catalog-pim-data",[11,627,628,629,630],"PIM","Product data","B2B e-commerce","Metadata filtering",[632,633,634,635,636,637,638,639,640,641,642],"rag product catalog","rag pim data","llm product data","product catalog chatbot","akeneo rag","pimcore ai search","rag structured data","metadata filtering rag","product attributes embeddings","b2b product assistant","etim classification ai",[644,647,648],{"name":645,"url":646},"Product information management","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FProduct_information_management",{"name":527,"url":528},{"name":649,"url":650},"ETIM (standard)","https:\u002F\u002Fwww.etim-international.com\u002Fclassification\u002F",[652,655,658,661,663,666,669,672,675],{"title":653,"url":654},"Akeneo API: Products, product values, metric values and product models","https:\u002F\u002Fapi.akeneo.com\u002Fconcepts\u002Fproducts.html",{"title":656,"url":657},"Akeneo Help Center: What about products with variants?","https:\u002F\u002Fhelp.akeneo.com\u002Fserenity-take-the-power-over-your-products\u002Fserenity-what-about-products-with-variants",{"title":659,"url":660},"Pimcore documentation: Classification Store","https:\u002F\u002Fdocs.pimcore.com\u002Fplatform\u002FPimcore\u002FObjects\u002FObject_Classes\u002FData_Types\u002FClassification_Store\u002F",{"title":662,"url":650},"ETIM International: Classification",{"title":664,"url":665},"ETIM International: ETIM releases and the IXF format","https:\u002F\u002Fetim-international.com\u002F?p=754",{"title":667,"url":668},"Reddy et al.: Shopping Queries Dataset, a large-scale ESCI benchmark for improving product search (2022)","https:\u002F\u002Farxiv.org\u002Fabs\u002F2206.06588",{"title":670,"url":671},"Amazon Science: esci-data repository","https:\u002F\u002Fgithub.com\u002Famazon-science\u002Fesci-data",{"title":673,"url":674},"Qdrant documentation: Filtering","https:\u002F\u002Fqdrant.tech\u002Fdocumentation\u002Fconcepts\u002Ffiltering\u002F",{"title":676,"url":677},"Sui et al.: Table Meets LLM, can large language models understand structured table data? (WSDM 2024)","https:\u002F\u002Farxiv.org\u002Fabs\u002F2305.13062","\u002Fimages\u002Fblog\u002Frag-product-catalog-pim-data\u002Fcover.webp","\u002Fimages\u002Fblog\u002Frag-product-catalog-pim-data\u002Fog.jpg","b2b-ecommerce-developer",[56,57,58],"RAG over product catalogues: turning PIM data into answers that hold","Product data is structured, so chunking it like PDFs fails. How to serialize PIM attributes, route spec questions to filters and keep answers exact.","A frame of nine squares with tiny symbols, funnelling down to one card.",1792261155835]