Back to Mem0

Neon

docs/components/vectordbs/dbs/neon.mdx

2.0.105.1 KB
Original Source

Use Neon as a vector store in Mem0, powered by PostgreSQL and the pgvector extension.

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

<CodeGroup> ```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 m = new Memory({
  vectorStore: {
    provider: "pgvector",
    config: {
      connectionString: process.env.DATABASE_URL!,
      ssl: {
        rejectUnauthorized: false,
      },
      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);
</CodeGroup>

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:[email protected]/neondb?sslmode=require

Config

<Tabs> <Tab title="Python"> | 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 | </Tab> <Tab title="TypeScript"> Use the Neon `DATABASE_URL` directly with `connectionString`. Set `ssl` if your runtime needs an explicit TLS config object.
ParameterDescriptionDefault
connectionStringNeon Postgres connection string.Required
sslOptional TLS settings passed directly to pg.Driver default
collectionNameName for the vector collection.memories
dimensionVector dimension for Mem0 config.Auto-detected
embeddingModelDimsEmbedding model dimensions for table creation.Required
hnswEnables HNSW indexing.false

TLS note: ssl: true is sufficient for most Neon connections since Neon uses valid certificates. Use ssl: { rejectUnauthorized: false } only when connecting through Neon's connection pooler on certain edge runtimes (e.g. Cloudflare Workers) that require it, or when your environment does not trust the Neon CA chain.

</Tab> </Tabs>

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.

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