深入内部:构建用于 AI 记忆的混合搜索引擎(Node.js + pgvector)
发布: (2025年11月30日 GMT+8 07:59)
4 min read
原文: Dev.to
Source: Dev.to
1. 核心理念:务实
该架构旨在 降低基础设施认知负担,通过避免使用单独的向量数据库实现。所有向量和元数据都存放在带有 pgvector 扩展的 PostgreSQL 中,保持 ACID 合规并简化技术栈。
- 运行时: Node.js(事件驱动 I/O,用于编排 DB/LLM 调用)
- 语言: TypeScript(严格类型用于 1536 维浮点数组)
- 存储: PostgreSQL +
pgvector(向量 +session_id、user_id在同一引擎中)
2. 混合搜索算法
MemVault 实时计算加权得分:
Score = (SemanticSimilarity * α) + (RecencyScore * β) + (Importance * γ)
组成部分
- 语义相似度 (α) – 由
pgvector计算的余弦距离。衡量主题匹配程度。 - 新鲜度衰减 (β) – 对时间戳应用的衰减函数,使旧记忆在未被强化时逐渐淡化。
- 重要性 (γ) – 对永不衰减的事实(例如 “用户对坚果过敏”)的显式权重。
典型默认值:80 % 语义、20 % 新鲜度。通过调节 α、β、γ 可微调代理行为。
3. 可观测性:“黑箱”问题
向量搜索本质上是不可见的,调试幻觉可能困难。MemVault 包含一个 实时可视化工具,将高维向量投射到 2‑D 图上,帮助你检查聚类并发现嵌入问题。
4. 开源与路线图
MemVault 完全开源。下一个路线图里程碑是加入 BM25(关键词搜索),以处理纯语义搜索难以应对的标识符(例如产品 ID)。
项目链接
- GitHub 仓库: https://github.com/jakops88-hub/Long-Term-Memory-API
- NPM 包: https://www.npmjs.com/package/memvault-sdk-jakops88
- 在线演示: https://memvault-demo-g38n.vercel.app/
- 许可证: MIT
5. 快速入门
在自托管(Docker)和托管 API(RapidAPI)之间任选其一。
| 功能 | 自托管 (Docker) | 托管 API (RapidAPI) |
|---|---|---|
| 价格 | 免费(开源) | 提供免费套餐 |
| 设置时间 | ~15 分钟 | ~30 秒 |
| 数据隐私 | 100 % 在您自己的服务器上 | 由我们托管 |
| 维护 | 您自行管理更新 | 我们全权处理 |
| 链接 | Self‑hosting guide | — |
入门步骤
# Clone the repo
git clone https://github.com/jakops88-hub/Long-Term-Memory-API.git
cd Long-Term-Memory-API
# Build and run with Docker
docker compose up -d
然后安装 SDK:
npm install memvault-sdk-jakops88
使用 SDK 存储块、生成嵌入并使用混合得分进行查询:
import { MemVault } from 'memvault-sdk-jakops88';
const client = new MemVault({ connectionString: process.env.DATABASE_URL });
await client.storeChunk({
session_id: 'abc123',
user_id: 'user42',
content: 'User is allergic to peanuts',
importance: 1.0, // never decays
});
const results = await client.search({
query: 'What can I eat?',
topK: 5,
alpha: 0.8,
beta: 0.2,
gamma: 0.0,
});
如果您对 pgvector 实现有疑问或想为混合评分逻辑贡献代码,欢迎打开 issue 或提交 pull request!