MCP与向量数据库
2851 字约 10 分钟
AIAgentMCP向量数据库
2026-07-24
向量数据库是 AI 系统的「长期记忆」,MCP 是连接这段记忆的标准化接口。通过 MCP 接入向量数据库(Pinecone、Weaviate、Qdrant、Milvus、Chroma 等),Agent 可以存储、检索和管理向量化的知识,为 RAG 提供底层存储能力。
一、基本定义
MCP 向量数据库接入是指通过 MCP Server 将向量数据库的存储、检索和管理能力暴露给 AI 应用。核心目标:让 Agent 以统一协议操作不同类型的向量数据库,无需关心底层实现差异。
向量数据库(Vector Database)是专门存储和索引高维向量的数据库系统。与传统数据库通过精确匹配查询不同,向量数据库通过相似度计算(余弦相似度、欧氏距离、内积等)找到语义最相近的结果。
主流向量数据库对比:
| 数据库 | 部署方式 | 特色能力 | 适用场景 |
|---|---|---|---|
| Pinecone | 全托管 SaaS | 零运维、自动扩缩 | 快速上线、中小规模 |
| Weaviate | 自托管/托管 | 内置向量化模块、GraphQL | 多模态搜索 |
| Qdrant | 自托管/云 | Rust 高性能、过滤扩展 | 高吞吐低延迟 |
| Milvus | 自托管/云原生 | 分布式、GPU 加速 | 大规模生产环境 |
| Chroma | 嵌入式/本地 | 轻量、Python 原生 | 开发原型、本地实验 |
二、向量数据库在 AI 系统中的角色
在 AI Agent 架构中,向量数据库承担三个核心角色:
- 语义记忆层:将文档、对话、知识编码为向量,实现长期语义存储
- 检索引擎层:根据查询语义,快速召回最相关的知识片段
- 知识管理层:支持知识的增删改查和版本控制
MCP 作为连接层,将这三个角色以标准化能力暴露给 Agent:
三、核心操作与能力划分
Tool(可执行操作)
Tool 用于有副作用或需要参数的操作:
- 存储向量(upsert / insert):将文本经嵌入模型编码后写入向量数据库,支持批量操作
- 相似度搜索(query / search):输入查询向量或文本,返回 top_k 个最相似结果
- 创建/删除索引(create_index / delete_index):管理向量索引的生命周期
- 更新向量(update):修改已有向量的值或元数据
- 删除向量(delete):按 ID 或过滤条件删除向量
Resource(可读取数据)
Resource 用于无副作用的被动读取:
- 索引状态(index status):查看索引的向量数量、维度、存储大小等元信息
- 文档内容(document content):按 ID 读取特定文档的原始内容和元数据
- 索引列表(index list):列出可用的索引及其基本属性
四、Resource vs Tool 划分原则
| 操作 | 分类 | 原因 |
|---|---|---|
| 相似度搜索 | Tool | 需要参数(query、top_k、filter),涉及计算 |
| 存储向量 | Tool | 有副作用,修改数据库状态 |
| 创建/删除索引 | Tool | 有副作用,影响系统结构 |
| 查看索引状态 | Resource | 被动读取,无副作用 |
| 读取文档内容 | Resource | 被动读取,无副作用 |
| 列出索引 | Resource | 被动读取,无副作用 |
划分原则参见 MCP资源模型:有状态变更或需要复杂参数 → Tool;纯读取、可被注入上下文 → Resource。
五、向量搜索参数设计
搜索 Tool 的参数设计直接影响检索质量:
top_k
返回结果数量。需要根据场景权衡:
- 问答场景:3-5 条,减少噪声
- 知识探索:10-20 条,扩大覆盖面
- 默认值建议:5,允许 Agent 根据任务调整
相似度阈值(score_threshold)
过滤低相似度结果,避免返回不相关内容:
- 余弦相似度:通常设为 0.7-0.85
- 建议在 Tool schema 中提供可选参数,由 Agent 决定是否启用
过滤器(filter)
基于元数据的预过滤,缩小搜索范围:
{
"query": "向量数据库性能优化",
"top_k": 5,
"filter": {
"category": "AI",
"date": {"$gte": "2026-01-01"}
}
}命名空间(namespace)
在同一索引内实现逻辑隔离,适合多租户或多项目场景。
六、与 RAG 的关系
向量数据库和 MCP 在 RAG 流程中各承担不同职责:
- 向量数据库是 RAG 的存储层:负责向量的持久化存储和高效检索
- MCP是 RAG 的连接层:负责将检索能力标准化暴露给 Agent
完整 RAG 流程:
MCP Server 封装了从 D 到 F 的环节,让 Agent 无需直接操作向量数据库 SDK。详见 MCP与RAG。
七、嵌入模型选择
嵌入模型(Embedding Model)决定了向量化的质量,直接影响检索效果:
| 模型 | 维度 | 特点 | 适用场景 |
|---|---|---|---|
| OpenAI text-embedding-3-small | 1536 | 性价比高、速度快 | 通用场景 |
| OpenAI text-embedding-3-large | 3072 | 精度更高 | 高质量检索 |
| BGE-M3 | 1024 | 多语言、开源 | 中文优先、私有化部署 |
| Cohere embed-v3 | 1024 | 多语言、支持压缩 | 多语言场景 |
选择原则:
- 中文为主 → 优先 BGE 系列或 Cohere
- 追求精度 → OpenAI large 或 Cohere
- 私有化部署 → BGE-M3、GTE 等开源模型
- 关键:索引和查询必须使用同一个嵌入模型,否则语义空间不一致
八、分块策略
文档分块(Chunking)是向量检索质量的前置决定因素:
| 策略 | 原理 | 适用场景 |
|---|---|---|
| 固定长度 | 按字符数/token 数切分 | 通用文本 |
| 语义分块 | 按段落、标题等语义边界切分 | 结构化文档 |
| 递归分块 | 先按大结构切分,再递归细分 | 长文档 |
| 滑动窗口 | 重叠切分,保留上下文连贯性 | 需要上下文连续性的场景 |
推荐参数:
- 块大小:300-800 tokens
- 重叠:50-150 tokens(约块大小的 15-20%)
- 每个块附带元数据:来源文件、页码、章节标题
九、索引管理
通过 MCP Tool 暴露索引管理能力:
- 创建索引:指定维度、距离度量方式(cosine / euclidean / dot_product)
- 删除索引:级联删除索引内所有向量
- 索引统计:返回向量总数、命名空间列表、索引状态
- 批量写入:单次写入多条向量,减少网络往返
- 增量更新:支持 upsert(存在则更新,不存在则插入)
维度必须与嵌入模型一致:text-embedding-3-large 生成 3072 维向量,索引维度必须匹配。
十、权限和安全
向量数据库接入是安全风险较高的场景,需要多层防护:
命名空间隔离
- 不同项目/租户使用独立命名空间
- MCP Server 根据调用方身份自动限定命名空间范围
- 防止跨租户数据泄露
数据脱敏
- 敏感文档在写入前进行脱敏处理
- 搜索结果返回前过滤敏感字段
- 嵌入向量本身不包含原始文本,但仍需防范逆向攻击
访问控制
- 基于角色的读写权限分离
- 索引级别的访问控制
- 操作审计日志
十一、性能考虑
索引大小
- 百万级以下向量:单节点即可满足
- 千万级以上:需要分布式索引或分片
- 索引构建时间:百万向量通常需要数分钟
查询延迟
- 典型延迟:10-50ms(取决于索引大小和 top_k)
- 预过滤 + 向量搜索的组合可能增加延迟
- 建议:对高频查询做缓存或预计算
批量操作
- 批量写入比逐条写入快 10-100 倍
- 建议批量大小:100-1000 条/次
- 批量操作通过 Tool 暴露时,需设计合理的参数结构
性能调优细节参见 MCP性能与扩展性。
十二、设计原则
- 能力边界清晰:MCP 是连接层,不实现检索算法;向量数据库是存储层,不处理业务逻辑
- Resource 和 Tool 分离:写入和管理操作 → Tool;状态查询和内容读取 → Resource
- 参数设计面向 Agent:top_k、filter、threshold 等参数应提供合理默认值,让 Agent 能自主调整
- 嵌入模型一致性:索引和查询必须使用同一模型,MCP Server 应强制保证
- 安全第一:命名空间隔离 + 访问控制 + 审计日志缺一不可
十三、常见误区
| 误区 | 正确理解 |
|---|---|
| 「向量数据库就是 RAG」 | 向量数据库是 RAG 的存储组件,RAG 还包含分块、检索策略、上下文组装等环节 |
| 「top_k 越大越好」 | 过大的 top_k 引入噪声,浪费 context window |
| 「不同嵌入模型可以混用」 | 不同模型的向量不在同一语义空间,混用会导致检索失效 |
| 「向量搜索不需要过滤」 | 纯向量搜索缺乏精确匹配能力,元数据过滤是必要的补充 |
| 「MCP Server 应该实现分块逻辑」 | 分块是数据预处理步骤,应在写入前完成,不属于 MCP 的职责范围 |