cat,不能回滚,没有 per-agent 路径 scope,也不是 LLM 真正想读的文本。那是 puppyone 的活。向量数据库很好。我们在它们之上建过;客户在跑。我们不是向量库,也不想成为向量库。
Pinecone、Zilliz、Milvus、FAISS 这些解决一个真实、狭窄的问题:给定一个 query embedding,快速返回最相似的 K 个条目,规模化。在这个事上它们是世界上最好的。它们的数据模型是"向量 + payload",不是版本化文件系统。
我们不停看到团队痛苦地发现:
"我们把所有文档放进 Pinecone。现在 LLM '差不多' 能答问题,但是我们不能
cat真正的文件,没有版本历史,没有 per-agent 权限,存进去的 chunked 文本和真正的源已经漂了。真正的文档放哪里?"
答案是:放进文件工作空间。那就是 puppyone。向量库在 puppyone 上面建索引。每个工具做它擅长的事。
| 维度 | 向量库(Pinecone / Zilliz / FAISS) | puppyone |
|---|---|---|
| 存什么 | 向量 embedding + 小 metadata payload | canonical 文件(markdown / JSON / CSV / 任何东西) |
| 查询用什么 | 一个 embedding(相似度搜索) | 一个路径(cat、ls、grep、read_file) |
| 返回什么 | 最相似 K 条的 ID / payload | 文件实际内容 |
| 版本历史 | per-vector upsert;通常版本之间无 diff | Git 风格 commit、per-file diff、秒级回滚 |
| per-agent 权限 | namespace / collection 级(per-tenant),不是 per-agent 路径 | per-agent Access Point,明确读写路径 scope |
| 原生接口 | SDK / REST 围绕 query()、upsert()、fetch() | Bash、MCP、REST、sandbox 挂载 |
| LLM 拿它干什么 | "找 5 个像这个 query 的 chunk,给我 ID" | "读 /research/spec.md 给我,给我字节" |
| SaaS 接入 | 不是它的活 —— 你建 embedding 流水线 | 内置:Notion / Slack / Gmail / Postgres / GitHub 等连接器 |
| 能否自托管 | 一些能(FAISS / Milvus / pgvector),一些不能(Pinecone 托管) | 能(开源、Docker) |
| 真正擅长 | 大规模快速相似度搜索 | 成为 Agent 读写文件的 canonical 存储 |
让 Pinecone / Zilliz / FAISS / pgvector 干它建出来要干的活:大规模 embedding 检索。
我们不替代这些。puppyone 没有内置相似度搜索,我们故意不发向量引擎 —— 大多数团队要么已经有一个,要么想自己选。
问题是关于 canonical 存储而不是检索的时候用 puppyone:
cat 的路径?"向量库在这些上没法答得好,因为它不是为这建的。它答"什么和这相似" —— 同样关键的问题,只是另一个问题。
我们见过的所有生产 RAG / Agent 设置布局大致都是:
/research/spec.md)。cat 那些路径(通过 Bash / MCP / REST)拿真正的 canonical 文本。干净规则:向量找它,puppyone 存它。其他做法都会漂。
可以。有人这么做。常见崩点:
payload。现在你的"存储"两个头:一个是 embedding 源,一个是原文,它们漂。cat 文件。upsert,旧向量没了 —— 通常无 diff、无回滚、无审计。合规和调试讨厌这个。如果你一直在往 Pinecone payload 列里塞 markdown 来"留个原文",你已经悄悄把向量库变成了一个差的文件系统。那就是缝。
pgvector 和 Supabase Vector 在"embedding 挨着 Postgres 里的结构化数据"这件事上很出色。向量层成为关系栈的一部分 —— 对很多工作负载很好。它仍不解决:
生产里布局通常是:结构化应用数据 + 向量在 Postgres / Supabase(带 pgvector);canonical 文件 / Agent 上下文在 puppyone;Agent 查向量、读文件。没有重复,不漂。
FAISS 在你想要进程内低延迟相似度搜索、不需要 server 时是出色的嵌入式库。它根本不是存储系统。你喂它向量,它返回 ID。那些 ID 指向的东西总要存在某处 —— 大多数生产设置用 puppyone(或数据库)当那个"某处"。
不存在迁移。你不用 puppyone 替换向量库。
cat 文件。 这是模式。一个月后架构停止是"一个把文本塞 payload 假装是知识库的向量库",开始是干净的两层系统:puppyone 装文件,向量库索引它们。
puppyone 替代 Pinecone / Zilliz / FAISS / pgvector 吗? 不。我们不发向量引擎。我们是向量库索引的那个 canonical 文件存储。互补层。
puppyone 有语义搜索吗? 没原生。我们让在 puppyone 内容上接向量库(Pinecone / Zilliz / FAISS / pgvector —— 你选)很容易。"向量搜 → cat 文件"是推荐模式。
为什么不在 puppyone 里内置一个向量库? 三个原因:(1) 大多数团队已经有或想自己选,(2) 向量引擎选择有真实运维 trade-off(托管 vs 自托管、成本 vs 规模),(3) 让 puppyone 单一职责使它跟你选的任何向量层都可互换。
我现在 RAG 流水线是 Pinecone-only,文本在 payload 里,错了吗? "错"太重。这个设置在版本历史、Agent 溯源、per-agent 权限、SaaS 接入变成真需求之前是 work 的。变成真需求时,puppyone 是要在底下加的层,Pinecone 留作索引。
puppyone 支持混合搜索(BM25 + 向量)吗? 支持 —— BM25 和向量索引都能在 puppyone 内容上建。canonical 文本和结构在 puppyone 里;索引在你想放的任何地方。
向量库找文档。puppyone 存文档。别让一个干另一个的活。两个一起跑:puppyone 当 canonical、版本化、per-agent scoped 的文件存储;你选的向量库在它上面当相似度索引。LLM 每次都拿到对的文档加对的历史。
别再把向量库变成半坏的文件系统。把它缺的那层加上。Get started