From 2e90ed4f78ba825771a82452c438bfd51160b4db Mon Sep 17 00:00:00 2001 From: "Dominik K." Date: Fri, 5 Jun 2026 15:36:59 +0200 Subject: [PATCH] docs: add Neon vector store guide (#5119) Co-authored-by: kartik-mem0 --- docs/components/vectordbs/dbs/neon.mdx | 156 +++++++++++++++++++++++++ docs/docs.json | 1 + docs/llms.txt | 1 + 3 files changed, 158 insertions(+) create mode 100644 docs/components/vectordbs/dbs/neon.mdx diff --git a/docs/components/vectordbs/dbs/neon.mdx b/docs/components/vectordbs/dbs/neon.mdx new file mode 100644 index 000000000..20c91a569 --- /dev/null +++ b/docs/components/vectordbs/dbs/neon.mdx @@ -0,0 +1,156 @@ +--- +title: "Neon" +description: "Use Neon as a vector store in Mem0, powered by PostgreSQL and pgvector." +--- + +Use [Neon](https://neon.com/) as a vector store in Mem0, powered by PostgreSQL and the +[pgvector extension](https://neon.com/docs/extensions/pgvector). + +Neon is a serverless Postgres platform. Since Mem0 supports Postgres through the +`pgvector` provider, Neon can be used with a standard Postgres connection string. + +## Usage + + +```python Python +import os + +from dotenv import load_dotenv +from mem0 import Memory + +load_dotenv() + +config = { + "vector_store": { + "provider": "pgvector", + "config": { + "connection_string": os.environ["DATABASE_URL"], + "collection_name": "memories", + "embedding_model_dims": 1536, + "hnsw": True, + }, + }, +} + +m = Memory.from_config(config) +messages = [ + {"role": "user", "content": "I'm planning to watch a movie tonight. Any recommendations?"}, + {"role": "assistant", "content": "How about thriller movies? They can be quite engaging."}, + {"role": "user", "content": "I'm not a big fan of thriller movies but I love sci-fi movies."}, + {"role": "assistant", "content": "Got it! I'll avoid thriller recommendations and suggest sci-fi movies in the future."}, +] +m.add(messages, user_id="alice", metadata={"category": "movies"}) + +results = m.search( + "What movies should I recommend?", + filters={"user_id": "alice"}, +) + +print(results) +``` + +```typescript TypeScript +import "dotenv/config"; +import { Memory } from "mem0ai/oss"; + +const databaseUrl = new URL(process.env.DATABASE_URL!); + +const m = new Memory({ + vectorStore: { + provider: "pgvector", + config: { + user: decodeURIComponent(databaseUrl.username), + password: decodeURIComponent(databaseUrl.password), + host: databaseUrl.hostname, + port: Number(databaseUrl.port || 5432), + dbname: databaseUrl.pathname.slice(1) || "neondb", + collectionName: "memories", + dimension: 1536, + embeddingModelDims: 1536, + hnsw: true, + }, + }, +}); + +const messages = [ + { role: "user" as const, content: "I'm planning to watch a movie tonight. Any recommendations?" }, + { role: "assistant" as const, content: "How about thriller movies? They can be quite engaging." }, + { role: "user" as const, content: "I'm not a big fan of thriller movies but I love sci-fi movies." }, + { role: "assistant" as const, content: "Got it! I'll avoid thriller recommendations and suggest sci-fi movies in the future." }, +]; + +await m.add(messages, { + userId: "alice", + metadata: { category: "movies" }, +}); + +const results = await m.search("What movies should I recommend?", { + filters: { user_id: "alice" }, +}); + +console.log(results); +``` + + +## SQL Migration + +You don't need to run any SQL migrations. Mem0 creates the collection table when it initializes the `pgvector` store. + +## Environment + +```env +OPENAI_API_KEY=sk-xx... +DATABASE_URL=postgresql://user:password@ep-example.us-east-2.aws.neon.tech/neondb?sslmode=require +``` + +## Config + + + +| Parameter | Description | Default Value | +| --- | --- | --- | +| `connection_string` | Neon Postgres connection string. | Required | +| `collection_name` | Name for the vector collection. | `mem0` | +| `embedding_model_dims` | Embedding model dimensions. | `1536` | +| `hnsw` | Enables HNSW indexing. | `False` | +| `sslmode` | PostgreSQL SSL mode. Use `require` for Neon. | Driver default | + + +The current Mem0 TypeScript `pgvector` adapter takes individual Postgres fields, +so parse `DATABASE_URL` before creating `Memory`. + +| Parameter | Description | Default | +| --- | --- | --- | +| `user` | Database user. | Required | +| `password` | Database password. | Required | +| `host` | Database host. | Required | +| `port` | Database port. | `5432` | +| `dbname` | Database name. | `vector_store` | +| `collectionName` | Name for the vector collection. | `memories` | +| `dimension` | Vector dimension for Mem0 config. | Auto-detected | +| `embeddingModelDims` | Embedding model dimensions for table creation. | Required | +| `hnsw` | Enables HNSW indexing. | `false` | + + + +### Indexing + +The `pgvector` provider can create an HNSW index for faster vector search. + +- Set `hnsw` to `true` to enable a Hierarchical Navigable Small World index. +- Leave `hnsw` as `false` if you want to create or manage indexes yourself. + +### Similarity Search + +The `pgvector` provider uses cosine similarity for vector search. Make sure your +embedding dimensions match the configured `embedding_model_dims` value. + +### Best Practices + +1. **Index Selection**: + - Use `hnsw` for faster search performance when memory usage is not a constraint + - Manage indexes manually if you need a different pgvector index strategy + +2. **Connection String**: + - Always use environment variables or even better, a secret manager for sensitive information in the connection string + - Format: `postgresql://user:password@host:port/database` diff --git a/docs/docs.json b/docs/docs.json index 9b4cbb318..dcb0eb7c7 100644 --- a/docs/docs.json +++ b/docs/docs.json @@ -245,6 +245,7 @@ "components/vectordbs/dbs/cassandra", "components/vectordbs/dbs/s3_vectors", "components/vectordbs/dbs/databricks", + "components/vectordbs/dbs/neon", "components/vectordbs/dbs/neptune_analytics", "components/vectordbs/dbs/turbopuffer" ] diff --git a/docs/llms.txt b/docs/llms.txt index cd94cbf2d..5ba5fe5fb 100644 --- a/docs/llms.txt +++ b/docs/llms.txt @@ -475,6 +475,7 @@ Everything below is OSS-only provider configuration. Skip this entire section wh - [Elasticsearch](https://docs.mem0.ai/components/vectordbs/dbs/elasticsearch) [OSS]: Use when Elasticsearch is the backing store. - [OpenSearch](https://docs.mem0.ai/components/vectordbs/dbs/opensearch) [OSS]: Use when OpenSearch is the backing store. - [Supabase](https://docs.mem0.ai/components/vectordbs/dbs/supabase) [OSS]: Use when Supabase with pgvector is the backing store. +- [Neon](https://docs.mem0.ai/components/vectordbs/dbs/neon) [OSS]: Use when Neon Postgres with pgvector is the backing store. - [Upstash Vector](https://docs.mem0.ai/components/vectordbs/dbs/upstash-vector) [OSS]: Use for serverless Upstash Vector. - [Vectorize](https://docs.mem0.ai/components/vectordbs/dbs/vectorize) [OSS]: Use when the store is Cloudflare Vectorize. - [Vertex AI Vector Search](https://docs.mem0.ai/components/vectordbs/dbs/vertex_ai) [OSS]: Use when the store is Google Cloud Vertex Vector Search.