如何把 Memori BYODB 接入已有 PostgreSQL 并配置连接池与 SSL?
【免费下载链接】MemoriMemori is agent-native memory infrastructure. A LLM-agnostic layer that turns agent execution and conversation into structured, persistent state for production systems. Built for enterprise, Memori works with the data infrastructure you already run, no rip-and-replace, and deploys across managed cloud, single-tenant cloud, VPC, and on-premises.项目地址: https://gitcode.com/GitHub_Trending/me/Memori
如果你的应用已经在运行一个 PostgreSQL 实例(本地、AWS RDS、Neon、Supabase 等),现在想把 Memori BYODB(Bring Your Own Database)的记忆存储挂接到这个库上,同时配好连接池和 SSL,这篇文章给出官方文档中的完整操作路径:安装 SDK 与驱动、用 SQLAlchemy(Python)或pg.Pool(TypeScript)建立连接、设置pool_size/max_overflow/pool_recycle等池参数、追加?sslmode=require走 SSL,最后通过一次"写入事实 → recall 召回"的流程验证记忆确实持久化在了你自己的 PostgreSQL 里。
适用前提(来自文档):
- Python 3.10+(TypeScript 路径要求 Node.js 20+);
- 一个可用的 PostgreSQL 实例及账号信息(host、端口、用户名、密码、库名);
- 一个 LLM 提供商的 API key——本文示例代码全部来自官方文档,使用 OpenAI,需要
OPENAI_API_KEY;其他提供商见 LLM providers 文档。
Memori 的 PostgreSQL 连接方式由你自己的代码持有:Memori 接受一个conn参数(Python 里传 SQLAlchemy 的sessionmaker,TypeScript 里传返回连接池的工厂函数),不会自建或接管数据库连接。
安装 SDK 与 PostgreSQL 驱动
Python:
pip install memori psycopgTypeScript:
npm install @memorilabs/memori pg openai dotenv npm install --save-dev @types/pg说明:
- 专用文档 PostgreSQL 给出的驱动是
psycopg,连接串前缀为postgresql+psycopg://。注意通用安装页 Installation (Python) 在 PostgreSQL 一节列出的是pip install psycopg2-binary(或异步的asyncpg),对应连接串前缀postgresql+psycopg2://。两处文档同时存在,本文主路径按专用页使用psycopg;如果你选用psycopg2-binary,把连接串前缀相应改为postgresql+psycopg2://,二者保持对应即可。 - 用
pip show memori可以确认 Python 包已装好。 - 可选:
python -m memori setup可预下载内嵌 Rust 的 embedding 模型,避免首次运行时自动下载耗时。
连接已有 PostgreSQL 并创建 Memori 表
以 Python 为例,核心是四步:create_engine建引擎、sessionmaker绑定、Memori(conn=...)传入会话工厂、mem.config.storage.build()建表。
from memori import Memori from sqlalchemy import create_engine from sqlalchemy.orm import sessionmaker engine = create_engine( "postgresql+psycopg://user:password@localhost:5432/memori_db", pool_pre_ping=True ) SessionLocal = sessionmaker(bind=engine) mem = Memori(conn=SessionLocal) mem.config.storage.build()代码中的user、password、localhost、5432、memori_db是文档示例值,替换为你实际的 PostgreSQL 用户名、密码、主机、端口和数据库名(memori_db是文档示例的库名)。
关于build(),文档的说明是:它在数据库里创建 Memori 所需的全部表,只需在首次运行或升级 Memori 后执行一次;它只创建 Memori 自己的 schema 表,不会动你已有的应用表(ORMs (TypeScript) 中明确 "creates Memori's schema tables without touching your ORM's tables")。这对"接入已有 PostgreSQL"很关键——接入不会改写你原有库里的表。
如果DATABASE_URL这类环境变量里存的是完整连接串(例如云托管实例),可以像文档完整示例那样从环境变量读取:
engine = create_engine( os.getenv("DATABASE_URL"), pool_pre_ping=True, pool_size=10, max_overflow=20, pool_recycle=300 )配置连接池
官方文档称 PostgreSQL 是生产部署的推荐数据库,理由包括完整的并发写支持与连接池能力(Databases Overview 将其定位为 "Production, high concurrency")。
Python(SQLAlchemy)主路径:在create_engine中加上池参数,文档给出的组合是:
engine = create_engine( "postgresql+psycopg://user:password@localhost:5432/memori_db", pool_pre_ping=True, pool_size=10, max_overflow=20, pool_recycle=300 )pool_pre_ping=True:取连接前先探活;pool_size=10:连接池基础大小;max_overflow=20:超出基础大小后允许额外溢出的连接数;pool_recycle=300:连接回收周期(秒)。
文档没有逐项解释这些参数,以上仅按参数用途做对应说明。Troubleshooting 在 "Connection pool errors" 一条中建议的修复方式就是启用pool_pre_ping=True和pool_recycle=300,即出现连接池报错时优先检查这两项。
TypeScript 路径:Memori 直接使用pg的原始连接池。文档对 TS 的池配置给出的是约束而非参数表:
- 必须传工厂函数
conn: () => pool; - 用
pg.Pool,不要用单个pg.Client——池能安全处理 Memori 的并发读写与后台 augmentation 请求; - 连接串放在
.env的DATABASE_CONNECTION_STRING中; - 池的生命周期由你持有:Memori 永远不会关闭池,结束时你自己调用
pool.end()。
import 'dotenv/config'; import pg from 'pg'; import { Memori } from '@memorilabs/memori'; const pool = new pg.Pool({ connectionString: process.env.DATABASE_CONNECTION_STRING, }); const mem = new Memori({ conn: () => pool }); // ...使用完毕 // await pool.end();TS 文档未给出pool_size之类的池容量参数,需要调参时由pg.Pool自身配置承担。
如果你的应用已有 ORM(Drizzle、Prisma、Sequelize、MikroORM 等),ORMs (TypeScript) 的说明是:把你的 ORM 底层已有的那个 pool 直接传给 Memori(new Memori({ conn: () => pool })),两者共用一个池、互不冲突,Memori 不引入额外依赖。
配置 SSL 连接
对接云托管 PostgreSQL(Neon、Supabase、AWS RDS、Google Cloud SQL、Azure Database)时启用 SSL。
Python:在连接串后追加?sslmode=参数:
engine = create_engine( "postgresql+psycopg://user:password@host:5432/memori_db" "?sslmode=require", pool_pre_ping=True )文档给出的三种模式:
| Mode | Description(文档原文) |
|---|---|
require | SSL required, no certificate verification |
verify-ca | SSL + verify server certificate |
verify-full | SSL + verify certificate + hostname |
TypeScript:对DATABASE_CONNECTION_STRING追加?sslmode=require。文档明确点名适用于 Neon、Supabase、AWS RDS 这类云托管实例。
云托管实例的连接串格式可参考文档中的对照表:
| Provider | Connection Format |
|---|---|
| Neon | postgresql+psycopg://...@*.neon.tech/... |
| Supabase | postgresql+psycopg://...@*.supabase.co/... |
| AWS RDS | postgresql+psycopg://...@*.rds.amazonaws.com/... |
| AWS Aurora | postgresql+psycopg://...@*.rds.amazonaws.com/... |
| Google Cloud SQL | postgresql+psycopg://...@*.cloudsql/... |
| Azure Database | postgresql+psycopg://...@*.postgres.database.azure.com/... |
验证:写入一条事实并召回
接入是否成功,用文档完整示例的流程验证:注册 LLM 客户端、设置 attribution、教模型一个事实,等后台 augmentation 完成后用recall查回来。
Python 完整示例(来自 PostgreSQL 文档 的 Complete Example,OPENAI_API_KEY和DATABASE_URL需事先设为环境变量):
import os from sqlalchemy import create_engine from sqlalchemy.orm import sessionmaker from memori import Memori from openai import OpenAI engine = create_engine( os.getenv("DATABASE_URL"), pool_pre_ping=True, pool_size=10, max_overflow=20, pool_recycle=300 ) SessionLocal = sessionmaker(bind=engine) client = OpenAI(api_key=os.getenv("OPENAI_API_KEY")) mem = Memori(conn=SessionLocal).llm.register(client) mem.attribution(entity_id="user_123", process_id="my_agent") mem.config.storage.build() response = client.chat.completions.create( model="gpt-4.1-mini", messages=[{"role": "user", "content": "I'm a senior engineer at Google."}] ) print(response.choices[0].message.content) mem.augmentation.wait() facts = mem.recall("job title and company") print(facts)其中:
llm.register(client)包裹你的 LLM 客户端,Memori 才能捕获对话——不注册就不会记录记忆;attribution(entity_id=..., process_id=...)把记忆关联到具体用户与进程,文档示例值为user_123/my_agent,按你的实际用户与 agent 标识替换;没有 attribution 不会产生记忆;mem.augmentation.wait()在短生命周期脚本中等待异步的后台记忆处理完成,之后再 recall;- 成功判定:
print(facts)输出与 "job title and company" 相关的记忆条目(文档未给出固定输出文本,以实际召回到你刚告知的事实为准); - 更直接的落库验证:查询 Memori 的表。Quickstart 列出的四张表为
memori_conversation_message、memori_entity_fact、memori_knowledge_graph、memori_session(文档示例是对 SQLite 用sqlite3 ... "SELECT * FROM ..."查询;PostgreSQL 中用你的数据库客户端按相同表名查询即可确认数据写入)。
TypeScript 完整示例:
import 'dotenv/config'; import pg from 'pg'; import { OpenAI } from 'openai'; import { Memori } from '@memorilabs/memori'; const pool = new pg.Pool({ connectionString: process.env.DATABASE_CONNECTION_STRING, }); const client = new OpenAI(); const mem = new Memori({ conn: () => pool }).llm.register(client); mem.attribution('user-123', 'my-app'); if (!mem.config.storage) { throw new Error('Storage not initialized'); } try { await mem.config.storage.build(); const response = await client.chat.completions.create({ model: 'gpt-4.1-mini', messages: [{ role: 'user', content: 'My favorite color is blue.' }], }); console.log(response.choices[0]?.message?.content); await mem.augmentation.wait(); const facts = await mem.recall('favorite color'); console.log(facts); } finally { await pool.end(); }验证方式同上:facts应能召回刚写入的事实;pool.end()放在finally中保证池被你自己关闭。
常见问题排查与限制
结合 Troubleshooting,接入 PostgreSQL 时按现象对照:
No connection factory provided:初始化时没有传conn。Python 侧传入sessionmaker,TypeScript 侧传入() => pool工厂函数。Table does not exist:没有执行建表。运行一次mem.config.storage.build()(TypeScript 为await mem.config.storage.build(););升级 Memori 后也需要再跑一次。- 连接池报错:在
create_engine中启用pool_pre_ping=True与pool_recycle=300。 - 没有记忆产生:依次检查是否设置了 attribution、短脚本中是否调用了
augmentation.wait()、LLM 客户端是否经过llm.register()。 - 首次运行慢:Memori 首次使用会下载 embedding 模型,可用
python -m memori setup预下载。 Rust embeddings are unavailable:安装带原生扩展的 Memori wheel,或改用外部 TEI 兼容服务(embed_texts(..., tei=TEI(url=...)))。
限制与注意:
- 池的生命周期归调用方:TypeScript 中 Memori 永不关闭
pg.Pool,必须自己pool.end(); - SSL 模式只有文档表格中的
require/verify-ca/verify-full三档说明,verify-ca/verify-full涉及的证书配置文档未展开; - 无 Memori API key 时 augmentation 配额为 100 次/月,注册 key 后为 5,000 次/月(Installation (Python));
- Python 驱动存在
psycopg与psycopg2-binary两套写法(见安装一节),连接串前缀与驱动名必须匹配。
更多可直接运行的参考实现见仓库中的 examples/postgres/main.py(Python + OpenAI + PostgreSQL 的完整脚本)。
【免费下载链接】MemoriMemori is agent-native memory infrastructure. A LLM-agnostic layer that turns agent execution and conversation into structured, persistent state for production systems. Built for enterprise, Memori works with the data infrastructure you already run, no rip-and-replace, and deploys across managed cloud, single-tenant cloud, VPC, and on-premises.项目地址: https://gitcode.com/GitHub_Trending/me/Memori
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考