MongoDB Vector Search Tool
MongoDBVectorSearchTool
Section titled “MongoDBVectorSearchTool”在 MongoDB Atlas collection 上执行向量相似度查询。支持索引创建辅助功能以及批量插入已嵌入文本。
MongoDB Atlas 原生支持向量搜索。了解更多: https://www.mongodb.com/docs/atlas/atlas-vector-search/vector-search-overview/
使用 MongoDB extra 安装:
pip install crewai-tools[mongodb]或者
uv add crewai-tools --extra mongodbconnection_string(str, required)database_name(str, required)collection_name(str, required)vector_index_name(str, defaultvector_index)text_key(str, defaulttext)embedding_key(str, defaultembedding)dimensions(int, default1536)
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"))索引创建辅助
Section titled “索引创建辅助”使用 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>",)自定义查询配置
Section titled “自定义查询配置”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],)预加载数据库并创建索引
Section titled “预加载数据库并创建索引”import osfrom 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 MongoDBtexts = []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, Crewfrom 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()