一个没有记忆的 AI 代理,被困在每次对话都要重新自我介绍。解法是一个向量数据库——它存储你文档、笔记或过往聊天的 embeddings,好让代理按需回忆起相关的片段(那就是 RAG 里的那个“R”)。你能把它作为一个托管服务来租,或者你能在一台 VPS 上自己跑它、把你的数据——常常是你的私有数据——留在一台你掌控的机器上。这是怎么做,以及它在 RAM 上实际花多少。
两个好选择
你不需要任何奇特的东西。两条路覆盖几乎所有人:
pgvector —— 一个 Postgres 扩展。如果你已经在跑 Postgres(或乐意跑),这给你已有的数据库加上向量搜索。一个服务、一份备份、你会的 SQL。远远是最省事的起点。
Qdrant —— 一个专建的向量引擎。当你有很多向量(一到几百万+)、或想要快速的元数据过滤和一个专用 API 时上它。它是一个要跑的单独服务,但它正是为这活而建。
对大多数刚站稳脚跟的代理,pgvector 是对的第一个答案。 长过它了再转 Qdrant,别提前。
RAM 的现实(这是人们低估的部分)
向量搜索快,因为索引住在内存里——所以 RAM,而不是磁盘,才是你真正的约束。一个粗略指引:
- 几十万个 embeddings —— 舒服地放进 2 GB。
- 一到几百万 —— 规划 4 GB+ 并调索引。
- 磁盘是简单的部分:一百万个 embeddings 只有几 GB,所以 25–45 GB 覆盖一个正经的库。
所以按索引配置,不是按文件。(跟通用配置指南是同一套逻辑——重的东西你不量就看不出来。)
快速上手:pgvector
在一台有 Postgres 的机器上(Docker 最简单——跟自托管 n8n 同一个套路):
CREATE EXTENSION IF NOT EXISTS vector;
CREATE TABLE memory (
id bigserial PRIMARY KEY,
content text,
embedding vector(1536) -- 匹配你 embedding 模型的维度
);
-- 有了数据之后,建一个索引以加快搜索:
CREATE INDEX ON memory USING hnsw (embedding vector_cosine_ops);
你的代理插入 content + 它的 embedding,然后用 ORDER BY embedding <=> $query_embedding LIMIT 5 查询,拉出最近的记忆。那就是整个循环。
更想用 Qdrant?它是一个暴露 HTTP/gRPC API 的单个 Docker 容器;你用你的向量大小创建一个 collection、upsert 点。同样的想法、专用引擎。
它能跟代理共享一台机器吗?
能——对中小型记忆库,把向量数据库跑在跟代理同一台 VPS 上。 它更简单、延迟基本为零。只有当一个开始把另一个从 RAM 里挤出去时才拆到单独的服务器上。那是一个以后的、值得拥有的好问题的决定,不是第一天的。
诚实的注意事项
- RAM 是那堵墙,而且它很安静。 搜索一直快,直到索引不再装进内存,然后它退化。盯着内存、在它咬人之前扩容——别等慢查询来告诉你。
- 创建 embeddings 要花 token。 你 embed 的每份文档都是对一个 embedding 模型的一次 API 调用。库托管起来便宜;生成向量是那笔经常性成本——和跑一个代理实际花多少有关。
- 备份它。 你代理的记忆和别的数据一样是数据。如果它要紧,做快照。
在这之内,一个自托管的向量库是给代理持久记忆、又不把你私有数据交给第三方的干净办法。从一台 2 GB 机器上的 pgvector 起步、盯着 RAM,只有当数字让你升时,才长进 Qdrant 或一个更大的套餐。
评论
暂无评论。来做第一个吧。