跳转到内容

MongoDB Vector Search Tool

在 MongoDB Atlas collection 上执行向量相似度查询。支持索引创建辅助功能以及批量插入已嵌入文本。

MongoDB Atlas 原生支持向量搜索。了解更多: https://www.mongodb.com/docs/atlas/atlas-vector-search/vector-search-overview/

使用 MongoDB extra 安装:

Terminal window
pip install crewai-tools[mongodb]

或者

Terminal window
uv add crewai-tools --extra mongodb
  • connection_string (str, required)
  • database_name (str, required)
  • collection_name (str, required)
  • vector_index_name (str, default vector_index)
  • text_key (str, default text)
  • embedding_key (str, default embedding)
  • dimensions (int, default 1536)
  • query (str, required): 要嵌入并搜索的自然语言查询。
from crewai_tools import MongoDBVectorSearchTool
tool = MongoDBVectorSearchTool(
connection_string="mongodb+srv://...",
database_name="mydb",
collection_name="docs",
)
print(tool.run(query="how to create vector index"))

使用 create_vector_search_index(...) 可以创建具有正确维度和相似度设置的 Atlas Vector Search 索引。

  • 认证失败:请确保你的 Atlas IP Access List 允许运行环境访问,并且连接字符串中包含凭据。
  • 找不到索引:先创建 vector index;名称必须与 vector_index_name 一致。
  • 维度不匹配:确保 embedding 模型维度与 dimensions 对齐。
from crewai_tools import MongoDBVectorSearchTool
tool = MongoDBVectorSearchTool(
database_name="example_database",
collection_name="example_collection",
connection_string="<your_mongodb_connection_string>",
)
from crewai_tools import MongoDBVectorSearchConfig, MongoDBVectorSearchTool
query_config = MongoDBVectorSearchConfig(limit=10, oversampling_factor=2)
tool = MongoDBVectorSearchTool(
database_name="example_database",
collection_name="example_collection",
connection_string="<your_mongodb_connection_string>",
query_config=query_config,
vector_index_name="my_vector_index",
)
rag_agent = Agent(
name="rag_agent",
role="You are a helpful assistant that can answer questions with the help of the MongoDBVectorSearchTool.",
goal="...",
backstory="...",
tools=[tool],
)
import os
from crewai_tools import MongoDBVectorSearchTool
tool = MongoDBVectorSearchTool(
database_name="example_database",
collection_name="example_collection",
connection_string="<your_mongodb_connection_string>",
)
# Load text content from a local folder and add to MongoDB
texts = []
for fname in os.listdir("knowledge"):
path = os.path.join("knowledge", fname)
if os.path.isfile(path):
with open(path, "r", encoding="utf-8") as f:
texts.append(f.read())
tool.add_texts(texts)
# Create the Atlas Vector Search index (e.g., 3072 dims for text-embedding-3-large)
tool.create_vector_search_index(dimensions=3072)
from crewai import Agent, Task, Crew
from crewai_tools import MongoDBVectorSearchTool
tool = MongoDBVectorSearchTool(
connection_string="mongodb+srv://...",
database_name="mydb",
collection_name="docs",
)
agent = Agent(
role="RAG Agent",
goal="Answer using MongoDB vector search",
backstory="Knowledge retrieval specialist",
tools=[tool],
verbose=True,
)
task = Task(
description="Find relevant content for 'indexing guidance'",
expected_output="A concise answer citing the most relevant matches",
agent=agent,
)
crew = Crew(
agents=[agent],
tasks=[task],
verbose=True,
)
result = crew.kickoff()