如何把 Memori BYODB 接入已有 PostgreSQL 并配置连接池与 SSL?
2026/9/14 16:12:07 网站建设 项目流程

如何把 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 psycopg

TypeScript:

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()

代码中的userpasswordlocalhost5432memori_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=Truepool_recycle=300,即出现连接池报错时优先检查这两项。

TypeScript 路径:Memori 直接使用pg的原始连接池。文档对 TS 的池配置给出的是约束而非参数表:

  • 必须传工厂函数conn: () => pool
  • pg.Pool,不要用单个pg.Client——池能安全处理 Memori 的并发读写与后台 augmentation 请求;
  • 连接串放在.envDATABASE_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 )

文档给出的三种模式:

ModeDescription(文档原文)
requireSSL required, no certificate verification
verify-caSSL + verify server certificate
verify-fullSSL + verify certificate + hostname

TypeScript:对DATABASE_CONNECTION_STRING追加?sslmode=require。文档明确点名适用于 Neon、Supabase、AWS RDS 这类云托管实例。

云托管实例的连接串格式可参考文档中的对照表:

ProviderConnection Format
Neonpostgresql+psycopg://...@*.neon.tech/...
Supabasepostgresql+psycopg://...@*.supabase.co/...
AWS RDSpostgresql+psycopg://...@*.rds.amazonaws.com/...
AWS Aurorapostgresql+psycopg://...@*.rds.amazonaws.com/...
Google Cloud SQLpostgresql+psycopg://...@*.cloudsql/...
Azure Databasepostgresql+psycopg://...@*.postgres.database.azure.com/...

验证:写入一条事实并召回

接入是否成功,用文档完整示例的流程验证:注册 LLM 客户端、设置 attribution、教模型一个事实,等后台 augmentation 完成后用recall查回来。

Python 完整示例(来自 PostgreSQL 文档 的 Complete Example,OPENAI_API_KEYDATABASE_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_messagememori_entity_factmemori_knowledge_graphmemori_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=Truepool_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 驱动存在psycopgpsycopg2-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),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询