跳转到主要内容

MongoDBVectorSearchTool

描述

在 MongoDB Atlas 集合上执行向量相似性查询。支持索引创建辅助功能和批量插入嵌入文本。 MongoDB Atlas 支持原生向量搜索。了解更多:https://mongodb.ac.cn/docs/atlas/atlas-vector-search/vector-search-overview/

安装

使用 MongoDB extra 进行安装
pip install crewai-tools[mongodb]
uv add crewai-tools --extra mongodb

参数

初始化

  • connection_string (str, 必需)
  • database_name (str, 必需)
  • collection_name (str, 必需)
  • vector_index_name (str, 默认 vector_index)
  • text_key (str, 默认 text)
  • embedding_key (str, 默认 embedding)
  • dimensions (int, 默认 1536)

运行参数

  • query (str, 必需): 用于嵌入和搜索的自然语言查询。

快速入门

代码
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 向量搜索索引。

常见问题

  • 身份验证失败:确保您的 Atlas IP 访问列表允许您的运行程序,并且连接字符串包含凭据。
  • 索引未找到:请先创建向量索引;名称必须与 vector_index_name 匹配。
  • 维度不匹配:将嵌入模型的维度与 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()