跳转到主要内容
Zeus 使用 PostgreSQL pgvector 作为向量存储引擎,通过 langchain-postgresPGVector 封装,同时为 Knowledge Base(RAG 检索)和 Memory(长期记忆)提供统一的向量存储服务。

存储架构

Collection 设计

Collection用途过滤字段
knowledge知识库文档分块user_id, knowledge_base_id, document_id, chunk_index
memory用户长期记忆user_id, scope, project_id, session_id
每个 collection 通过 VectorStore.get_instance(collection_name, embeddings) 获取,同一 collection + embeddings 组合共享单例。

Embedding 配置

Zeus 支持 用户级别 的 Embedding 配置,不同用户可使用不同的 Embedding 模型。配置按以下优先级查找:

优先级

优先级来源获取方式
1 (最高)用户数据库配置GET /api/config/embedding(X-User-Id header),取 isDefault=trueenabled=true 的配置
2环境变量OPENAI_API_KEY + OPENAI_BASE_URL + EMBEDDING_MODEL
3系统默认Next.js API 的 system embedding 配置

支持的模型

任何兼容 OpenAI Embeddings API 格式的模型均可使用:
模型说明
text-embedding-3-smallOpenAI 默认,1536 维,性价比高
text-embedding-3-largeOpenAI 高精度,3072 维
BGE 系列通过兼容 API 使用
Jina Embeddings通过兼容 API 使用
自部署模型通过自定义 base_url 接入

核心操作

写入

# 文档处理时写入
docs_to_add = [
    LCDocument(
        page_content="分块内容...",
        metadata={
            "user_id": "user_123",
            "knowledge_base_id": "kb_456",
            "document_id": "doc_789",
            "chunk_index": 0,
            "source": "example.pdf",
            "page": 1,
            "created_at": "2025-01-01T00:00:00",
        }
    )
]
chunk_ids = vectorstore.add_documents(docs_to_add)

检索

# 向量相似度搜索 + 元数据过滤
results = vectorstore.similarity_search_with_score(
    query="如何配置 Zeus?",
    k=5,
    filter={
        "user_id": "user_123",
        "knowledge_base_id": "kb_456",
    },
)

删除

# 删除文档的所有分块
vectorstore.delete(filter={"document_id": "doc_789"})

# 删除知识库的所有数据
vectorstore.delete(filter={"knowledge_base_id": "kb_456"})