共计 1364 个字符,预计需要花费 4 分钟才能阅读完成。
在构建 AI Agent 时,高效检索相关数据是关键。无论是实现语义搜索还是长期记忆存储,连接向量数据库都能大幅提升 Agent 的理解和响应能力。

技术选型:主流向量数据库对比
目前市面上主流的向量数据库有 Faiss、Milvus 和 Pinecone,它们各有特点:
- Faiss:Facebook 开源的库,适合本地部署,延迟最低但需要自行管理基础设施
- Milvus:开源分布式系统,平衡了性能和易用性,支持水平扩展
- Pinecone:全托管服务,最简单易用但成本较高,适合快速原型开发
对于大多数开发团队,我推荐从 Milvus 开始,它提供了不错的性能同时降低了运维复杂度。
实战:用 LangChain 连接 ChromaDB
以下是使用 Python 和 LangChain 连接 ChromaDB 的完整示例代码:
from langchain.vectorstores import Chroma
from langchain.embeddings import OpenAIEmbeddings
# 初始化 embedding 模型
# 对比 OpenAI 和 Sentence-BERT:# OpenAI 更强大但收费,Sentence-BERT 免费且本地运行
embeddings = OpenAIEmbeddings(model="text-embedding-ada-002")
# 创建并持久化向量数据库
vector_db = Chroma.from_texts(texts=["示例文本 1", "示例文本 2"], # 你的文档数据
embedding=embeddings,
persist_directory="./chroma_db"
)
# 异步查询示例
async def search(query: str, top_k=5, score_threshold=0.7):
"""
top_k: 返回最相似的 k 个结果
score_threshold: 相似度阈值,过滤低质量结果
"""
results = await vector_db.asimilarity_search_with_score(query, k=top_k, score_threshold=score_threshold)
return results
性能优化实战
索引构建测试
在 AWS c5.2xlarge 实例 (8vCPU 16GB 内存) 上测试:
- 10 万条平均长度 500 字的文本
- 使用 Sentence-BERT-base 模型
- 索引构建时间:约 42 分钟
并发查询优化
高并发场景下的配置建议:
- 使用连接池管理数据库连接
- 合理设置 max_connections 参数(通常 CPU 核心数×2)
- 考虑使用异步客户端减少 IO 等待
避坑指南
余弦相似度计算
直接计算可能出现数值不稳定问题,推荐:
- 对向量做 L2 规范化
- 使用 logits 空间计算
- 添加微小 epsilon 防止除以零
分布式部署
多节点部署时注意:
- 使用一致性哈希分配数据
- 设置合理的副本因子(通常 3 个)
- 定期校验数据一致性
开放问题
在项目实践中,我遇到了两个值得深入探讨的问题:
- 如何实现索引的动态更新而不阻塞查询?当前我们的做法是使用双缓冲机制,但维护成本较高。
- 不同类型 Agent(如客服 Agent 和搜索 Agent)是否需要独立数据库?共享数据库简化了架构但可能影响性能。
期待听到大家的实践经验分享。向量数据库在 Agent 系统中的应用还在快速发展,保持对新技术的关注很重要。
正文完
