Loading...

文章背景图

weaviate/weaviate:开源AI原生向量数据库

2026-10-18
0
- 字
- 分钟
|

一、官方信息

项目名称Weaviate
仓库地址https://github.com/weaviate/weaviate
官方网站https://weaviate.io/
最新更新2026 年持续活跃
项目定位AI 原生、模块化的开源向量数据库
开源协议BSD-3-Clause

二、项目背景

很多向量数据库只负责"存向量 + 检索",embedding 的生成、模型的对接都要用户自己在外层完成。Weaviate 的思路不太一样:它从一开始就把"向量化"做成了内置模块。你只要告诉它用哪个模型(OpenAI、Cohere、HuggingFace、本地模型都行),Weaviate 在写入数据时会自动帮你把原始文本转成向量,查询时也自动把问题向量化,开发者几乎不用手写 embedding 代码。

Weaviate 用 Go 编写,原生支持 GraphQL 风格的查询接口,内置混合检索(向量 + 关键词 BM25)、Reranker 重排器、生成式检索(Generative Search,直接在数据库层调用 LLM 生成答案)。它在多模态搜索、企业知识库、电商商品搜索领域用得很多,也是 LangChain、LlamaIndex 官方支持的向量后端之一。

对个人用户,Weaviate 提供了非常简单的 Docker Compose 单机部署,配合环境变量即可接入 OpenAI / 本地模型;生产环境则有 Weaviate Cloud 和分布式集群版。

三、核心特性

  • 内置向量化模块:写入 / 查询时自动调用模型生成 embedding,无需外部代码。
  • 混合检索:向量相似度 + BM25 关键词搜索自动融合排序。
  • Generative Search:在数据库层直接调用 LLM,基于检索结果生成答案(RAG 内置)。
  • GraphQL 查询:强大灵活的查询语法,支持过滤、聚合、分组。
  • 多模态支持:文本、图片、视频向量统一存储检索。
  • Reranker 模块:内置 Cohere / HuggingFace rerank,提升召回精度。
  • 模块化架构:model provider、vectorizer、reranker 均可插拔。

四、环境要求

  • 操作系统:Linux / macOS / Windows(WSL2)。
  • Docker 20.10+ 与 Docker Compose v2。
  • 内存:建议 4GB 以上。
  • 端口:8080(HTTP / GraphQL)、50051(gRPC)。
  • 若用 OpenAI 模块需 OpenAI API Key;用本地模型则需可访问的 embedding 服务。

五、详细部署步骤

方式一:Docker Compose(接入 OpenAI 模块)

mkdir weaviate && cd weaviate
cat > docker-compose.yml <<'EOF'
version: '3.4'
services:
  weaviate:
    command:
    - --host
    - 0.0.0.0
    - --port
    - '8080'
    - --scheme
    - http
    image: cr.weaviate.io/semitechnologies/weaviate:1.28.0
    ports:
    - "8080:8080"
    - "50051:50051"
    restart: always
    volumes:
    - ./weaviate_data:/var/lib/weaviate
    environment:
      QUERY_DEFAULTS_LIMIT: 25
      AUTHENTICATION_ANONYMOUS_ACCESS_ENABLED: 'true'
      PERSISTENCE_DATA_PATH: '/var/lib/weaviate'
      DEFAULT_VECTORIZER_MODULE: 'text2vec-openai'
      ENABLE_MODULES: 'text2vec-openai,generative-openai'
      OPENAI_APIKEY: 'sk-xxxxxxxxxxxxxxxx'
EOF
docker compose up -d

关键环境变量说明:

  • DEFAULT_VECTORIZER_MODULE:默认向量化模块,这里用 OpenAI。
  • ENABLE_MODULES:启用的模块列表,generative-openai 用于内置 RAG 生成。
  • AUTHENTICATION_ANONYMOUS_ACCESS_ENABLED:是否允许匿名访问,生产环境建议关闭并启用 OIDC / API Key。

方式二:使用本地模型(Ollama,无需 OpenAI Key)

cat > docker-compose.yml <<'EOF'
services:
  weaviate:
    image: cr.weaviate.io/semitechnologies/weaviate:1.28.0
    ports:
      - "8080:8080"
    volumes:
      - ./weaviate_data:/var/lib/weaviate
    environment:
      QUERY_DEFAULTS_LIMIT: 25
      AUTHENTICATION_ANONYMOUS_ACCESS_ENABLED: 'true'
      PERSISTENCE_DATA_PATH: '/var/lib/weaviate'
      DEFAULT_VECTORIZER_MODULE: 'text2vec-ollama'
      ENABLE_MODULES: 'text2vec-ollama,generative-ollama'
      OLLAMA_API_ENDPOINT: 'http://host.docker.internal:11434'
EOF
docker compose up -d

方式三:Python 客户端

pip install -U weaviate-client
import weaviate

client = weaviate.connect_to_local(host="服务器IP", port=8080)

# 创建 collection
from weaviate.classes.config import Configure
client.collections.create(
    "Article",
    vectorizer_config=Configure.Vectorizer.text2vec_openai(),
    generative_config=Configure.Generative.openai(),
    properties=[
        {"name": "title", "data_type": "text"},
        {"name": "content", "data_type": "text"},
    ],
)

# 写入数据(自动向量化)
articles = client.collections.get("Article")
articles.data.insert({"title": "Weaviate 入门", "content": "Weaviate 是一个开源向量数据库……"})

# 混合检索 + 生成式回答
response = articles.generate.near_text(
    query="向量数据库有什么用",
    limit=3,
    single_prompt="用一句话总结:{content}",
)
for o in response.objects:
    print(o.properties, o.generated)

验证部署

curl http://localhost:8080/v1/.well-known/ready
# 浏览器访问 GraphQL Playground:
# http://服务器IP:8080

六、使用方法

  1. 浏览器访问 http://服务器IP:8080 打开 Weaviate 控制台 / GraphQL Playground。
  2. 匿名模式下无账号密码;若启用了 API Key 需在客户端配置。
  3. 用 GraphQL 查询:GET /v1/schema 查看 schema,POST /v1/graphql 执行查询。
  4. LangChain 集成:from langchain_community.vectorstores import Weaviate,传入 weaviate_url。

七、常见问题 FAQ

Q1:模块加载失败 / OpenAI 报错?
A:检查 OPENAI_APIKEY 是否正确、网络能否访问 OpenAI;国内服务器需走代理或改用 Ollama 模块。

Q2:容器一直重启?
A:看日志 docker compose logs weaviate,常见是数据目录权限问题,把 weaviate_data 目录权限放开。

Q3:如何开启鉴权?
A:设 AUTHENTICATION_ANONYMOUS_ACCESS_ENABLED: 'false',并配置 AUTHENTICATION_APIKEY_ALLOWED_KEYS。

Q4:向量化是自动的吗?
A:是的,只要配置了 vectorizer module,写入文本时 Weaviate 自动调用模型生成向量,无需自己算。

Q5:数据持久化位置?
A:compose 里映射的 ./weaviate_data 目录,备份它即可。

八、跳转链接

评论交流

文章目录