🧲 OpenClaw 向量数据库集成教程

Pinecone / Weaviate / Chroma / Milvus 一站式接入指南

向量检索 RAG 语义搜索 知识库

📖 这是什么?

世界上有一种技术叫向量数据库,它就像AI的"概念图书馆"——不是按书名找书,而是按"感觉"找书。你想找"关于猫咪搞笑行为的文章",它不会傻傻匹配关键词,而是理解你的意图,递给你那本最对味的。

OpenClaw 支持主流向量数据库集成,让你的 Agent 拥有:

🏆 主流向量数据库对比

🌲 Pinecone

全托管,开箱即用,免费层够用。适合快速上线。

优点:零运维、自动扩展

缺点:数据不出自己服务器

🔷 Weaviate

开源 + 云服务,GraphQL API,模块化设计。

优点:自托管可选、功能丰富

缺点:学习曲线稍陡

🎨 Chroma

轻量级开源,Python 原生,适合快速原型。

优点:超简单、本地运行

缺点:生产级能力有限

🚀 Milvus

企业级开源,高性能,支持百亿级向量。

优点:高性能、可扩展

缺点:部署复杂度较高

⚡ 快速开始

1. Pinecone 集成

# 安装依赖
npm install @pinecone-database/pinecone

# 或使用 OpenClaw Skills
skills:
  - id: vector-pinecone
    name: Pinecone 向量存储
    config:
      apiKey: ${PINECONE_API_KEY}
      environment: us-east-1
      indexName: openclaw-knowledge

2. Weaviate 集成

# Docker 启动本地实例
docker run -d \
  --name weaviate \
  -p 8080:8080 \
  -e QUERY_DEFAULTS_LIMIT=25 \
  -e AUTHENTICATION_ANONYMOUS_ACCESS_ENABLED=true \
  semitechnologies/weaviate:latest

# OpenClaw 配置
skills:
  - id: vector-weaviate
    name: Weaviate 知识库
    config:
      host: http://localhost:8080
      scheme: http

3. Chroma 本地集成

# 安装
pip install chromadb

# Python 客户端示例
import chromadb
client = chromadb.Client()
collection = client.create_collection("openclaw_docs")

# 添加向量
collection.add(
    documents=["OpenClaw 是一个 Agent 框架", "向量数据库支持语义搜索"],
    metadatas=[{"source": "doc1"}, {"source": "doc2"}],
    ids=["id1", "id2"]
)

🔧 OpenClaw Skills 配置

# ~/.openclaw/skills/vector-database/SKILL.md
---
name: vector-database
description: 向量数据库集成 - 语义搜索与知识检索
tools:
  - web_fetch
  - exec
---

## 支持的数据库

| 数据库 | 配置方式 | 最佳场景 |
|--------|----------|----------|
| Pinecone | API Key + Environment | 生产环境、快速部署 |
| Weaviate | Docker/云服务 | 企业级、混合查询 |
| Chroma | 本地嵌入 | 开发测试、原型验证 |
| Milvus | Kubernetes | 大规模、高性能 |

## 使用示例

### 存储向量
\`\`\`javascript
await vectorDb.upsert({
  id: 'doc-001',
  values: embedding, // 1536维向量
  metadata: {
    title: 'OpenClaw 教程',
    category: 'documentation',
    url: 'https://miaoquai.com/tools/...'
  }
});
\`\`\`

### 语义搜索
\`\`\`javascript
const results = await vectorDb.query({
  vector: queryEmbedding,
  topK: 10,
  filter: { category: 'documentation' }
});
\`\`\`

💡 最佳实践

✅ Embedding 模型选择

模型 维度 特点 推荐场景
OpenAI text-embedding-3-small 1536 性价比高、速度快 通用场景
OpenAI text-embedding-3-large 3072 精度最高 高精度需求
Cohere embed-v3 1024 多语言支持好 中文场景
Sentence Transformers 768 免费开源 成本敏感

⚠️ 常见踩坑

  1. 向量维度不匹配 - 不同 embedding 模型输出维度不同,务必一致
  2. 未做归一化 - 某些数据库要求向量归一化,否则相似度计算错误
  3. Metadata 过大 - 存储的元数据不要太大,影响查询性能
  4. Index 未规划 - 上线前规划好分区策略,后期迁移很痛苦

🚀 实战案例:构建 RAG 知识库

# OpenClaw Agent 配置
agent:
  name: KnowledgeAssistant
  skills:
    - id: vector-pinecone
      config:
        indexName: company-wiki
    - id: rag-pipeline
      config:
        chunkSize: 500
        chunkOverlap: 50
        topK: 5

# RAG 流程
pipeline:
  1. 用户提问 → Embedding
  2. 向量检索 → Top-K 相关文档
  3. 构建 Prompt → 注入上下文
  4. LLM 生成 → 基于事实的回答
  5. 引用来源 → 可追溯性

🔗 相关资源