Skip to content
CrewAI 文档版本 跟随上游 源快照 ee4abd08 更新于 2026-10-18

RAG 工具

RagTool 是一个动态知识库工具,用于通过检索增强生成来回答问题。

RagTool

描述

RagTool 旨在通过 CrewAI 原生 RAG 系统利用检索增强生成(RAG)的能力来回答问题。 它提供一个动态知识库,可以查询该知识库以从各种数据源中检索相关信息。 对于需要访问大量信息并提供上下文相关答案的应用,此工具尤其有用。

示例

以下示例演示如何初始化该工具并将其用于不同的数据源:

python
from crewai_tools import RagTool

# Create a RAG tool with default settings
rag_tool = RagTool()

# Add content from a file
rag_tool.add(data_type="file", path="path/to/your/document.pdf")

# Add content from a web page
rag_tool.add(data_type="web_page", url="https://example.com")

# Define an agent with the RagTool
@agent
def knowledge_expert(self) -> Agent:
    '''
    This agent uses the RagTool to answer questions about the knowledge base.
    '''
    return Agent(
        config=self.agents_config["knowledge_expert"],
        allow_delegation=False,
        tools=[rag_tool]
    )

受支持的数据源

RagTool 可与多种数据源一起使用,包括:

  • 📰 PDF 文件
  • 📊 CSV 文件
  • 📃 JSON 文件
  • 📝 文本
  • 📁 目录/文件夹
  • 🌐 HTML 网页
  • 📽️ YouTube 频道
  • 📺 YouTube 视频
  • 📚 文档网站
  • 📝 MDX 文件
  • 📄 DOCX 文件
  • 🧾 XML 文件
  • 📬 Gmail
  • 📝 GitHub 仓库
  • 🐘 PostgreSQL 数据库
  • 🐬 MySQL 数据库
  • 🤖 Slack 对话
  • 💬 Discord 消息
  • 🗨️ Discourse 论坛
  • 📝 Substack 新闻简报
  • 🐝 Beehiiv 内容
  • 💾 Dropbox 文件
  • 🖼️ 图像
  • ⚙️ 自定义数据源

参数

RagTool 接受以下参数:

  • summarize:可选。是否对检索到的内容进行摘要。默认值为 False。
  • adapter:可选。知识库的自定义适配器。如果未提供,将使用 CrewAIRagAdapter。
  • config:可选。底层 CrewAI RAG 系统的配置。接受一个 RagToolConfig TypedDict,其中可选包含 embedding_model(ProviderSpec)和 vectordb(VectorDbConfig)键。以编程方式提供的所有配置值优先于环境变量。

添加内容

你可以使用 add 方法向知识库添加内容:

python
# Add a PDF file
rag_tool.add(data_type="file", path="path/to/your/document.pdf")

# Add a web page
rag_tool.add(data_type="web_page", url="https://example.com")

# Add a YouTube video
rag_tool.add(data_type="youtube_video", url="https://www.youtube.com/watch?v=VIDEO_ID")

# Add a directory of files
rag_tool.add(data_type="directory", path="path/to/your/directory")

智能体集成示例

以下是如何将 RagTool 与 CrewAI 智能体集成:

python
from crewai import Agent
from crewai.project import agent
from crewai_tools import RagTool

# Initialize the tool and add content
rag_tool = RagTool()
rag_tool.add(data_type="web_page", url="https://docs.crewai.com")
rag_tool.add(data_type="file", path="company_data.pdf")

# Define an agent with the RagTool
@agent
def knowledge_expert(self) -> Agent:
    return Agent(
        config=self.agents_config["knowledge_expert"],
        allow_delegation=False,
        tools=[rag_tool]
    )

进阶配置

你可以通过提供配置字典来自定义 RagTool 的行为:

python
from crewai_tools import RagTool
from crewai_tools.tools.rag import RagToolConfig, VectorDbConfig, ProviderSpec

# Create a RAG tool with custom configuration

vectordb: VectorDbConfig = {
    "provider": "qdrant",
    "config": {
        "collection_name": "my-collection"
    }
}

embedding_model: ProviderSpec = {
    "provider": "openai",
    "config": {
        "model_name": "text-embedding-3-small"
    }
}

config: RagToolConfig = {
    "vectordb": vectordb,
    "embedding_model": embedding_model
}

rag_tool = RagTool(config=config, summarize=True)

嵌入模型配置

embedding_model 参数接受一个结构如下的 crewai.rag.embeddings.types.ProviderSpec 字典:

python
{
    "provider": "provider-name",  # Required
    "config": {                    # Optional
        # Provider-specific configuration
    }
}

支持的服务商

OpenAI
python
from crewai.rag.embeddings.providers.openai.types import OpenAIProviderSpec

embedding_model: OpenAIProviderSpec = {
    "provider": "openai",
    "config": {
        "api_key": "your-api-key",
        "model_name": "text-embedding-ada-002",
        "dimensions": 1536,
        "organization_id": "your-org-id",
        "api_base": "https://api.openai.com/v1",
        "api_version": "v1",
        "default_headers": {"Custom-Header": "value"}
    }
}

配置选项:

  • api_key (str):OpenAI API 密钥
  • model_name (str):要使用的模型。默认值:text-embedding-ada-002。可选值:text-embedding-3-small、text-embedding-3-large、text-embedding-ada-002
  • dimensions (int):嵌入的维度数量
  • organization_id (str):OpenAI 组织 ID
  • api_base (str):自定义 API 基础 URL
  • api_version (str):API 版本
  • default_headers (dict):API 请求的自定义请求头

环境变量:

  • OPENAI_API_KEY 或 EMBEDDINGS_OPENAI_API_KEY:api_key
  • OPENAI_ORGANIZATION_ID 或 EMBEDDINGS_OPENAI_ORGANIZATION_ID:organization_id
  • OPENAI_MODEL_NAME 或 EMBEDDINGS_OPENAI_MODEL_NAME:model_name
  • OPENAI_API_BASE 或 EMBEDDINGS_OPENAI_API_BASE:api_base
  • OPENAI_API_VERSION 或 EMBEDDINGS_OPENAI_API_VERSION:api_version
  • OPENAI_DIMENSIONS 或 EMBEDDINGS_OPENAI_DIMENSIONS:dimensions
Cohere
python
from crewai.rag.embeddings.providers.cohere.types import CohereProviderSpec

embedding_model: CohereProviderSpec = {
    "provider": "cohere",
    "config": {
        "api_key": "your-api-key",
        "model_name": "embed-english-v3.0"
    }
}

配置选项:

  • api_key (str):Cohere API 密钥
  • model_name (str):要使用的模型。默认:large。可选:embed-english-v3.0、embed-multilingual-v3.0、large、small

环境变量:

  • COHERE_API_KEY 或 EMBEDDINGS_COHERE_API_KEY:api_key
  • EMBEDDINGS_COHERE_MODEL_NAME:model_name
VoyageAI
python
from crewai.rag.embeddings.providers.voyageai.types import VoyageAIProviderSpec

embedding_model: VoyageAIProviderSpec = {
    "provider": "voyageai",
    "config": {
        "api_key": "your-api-key",
        "model": "voyage-3",
        "input_type": "document",
        "truncation": True,
        "output_dtype": "float32",
        "output_dimension": 1024,
        "max_retries": 3,
        "timeout": 60.0
    }
}

配置选项:

  • api_key (str):VoyageAI API 密钥
  • model (str):要使用的模型。默认:voyage-2。可选:voyage-3、voyage-3-lite、voyage-code-3、voyage-large-2
  • input_type (str):输入类型。可选:document(用于存储)、query(用于搜索)
  • truncation (bool):是否截断超过最大长度的输入。默认:True
  • output_dtype (str):输出数据类型
  • output_dimension (int):输出嵌入的维度
  • max_retries (int):最大重试次数。默认:0
  • timeout (float):请求超时时间(秒)

环境变量:

  • VOYAGEAI_API_KEY 或 EMBEDDINGS_VOYAGEAI_API_KEY:api_key
  • VOYAGEAI_MODEL 或 EMBEDDINGS_VOYAGEAI_MODEL:model
  • VOYAGEAI_INPUT_TYPE 或 EMBEDDINGS_VOYAGEAI_INPUT_TYPE:input_type
  • VOYAGEAI_TRUNCATION 或 EMBEDDINGS_VOYAGEAI_TRUNCATION:truncation
  • VOYAGEAI_OUTPUT_DTYPE 或 EMBEDDINGS_VOYAGEAI_OUTPUT_DTYPE:output_dtype
  • VOYAGEAI_OUTPUT_DIMENSION 或 EMBEDDINGS_VOYAGEAI_OUTPUT_DIMENSION:output_dimension
  • VOYAGEAI_MAX_RETRIES 或 EMBEDDINGS_VOYAGEAI_MAX_RETRIES:max_retries
  • VOYAGEAI_TIMEOUT 或 EMBEDDINGS_VOYAGEAI_TIMEOUT:timeout
Ollama
python
from crewai.rag.embeddings.providers.ollama.types import OllamaProviderSpec

embedding_model: OllamaProviderSpec = {
    "provider": "ollama",
    "config": {
        "model_name": "llama2",
        "url": "http://localhost:11434/api/embeddings"
    }
}

配置选项:

  • model_name (str):Ollama 模型名称(例如 llama2、mistral、nomic-embed-text)
  • url (str):Ollama API 端点 URL。默认:http://localhost:11434/api/embeddings

环境变量:

  • OLLAMA_MODEL 或 EMBEDDINGS_OLLAMA_MODEL:model_name
  • OLLAMA_URL 或 EMBEDDINGS_OLLAMA_URL:url
Amazon Bedrock
python
from crewai.rag.embeddings.providers.aws.types import BedrockProviderSpec

embedding_model: BedrockProviderSpec = {
    "provider": "amazon-bedrock",
    "config": {
        "model_name": "amazon.titan-embed-text-v2:0",
        "session": boto3_session
    }
}

配置选项:

  • model_name (str):Bedrock 模型 ID。默认:amazon.titan-embed-text-v1。可选:amazon.titan-embed-text-v1、amazon.titan-embed-text-v2:0、cohere.embed-english-v3、cohere.embed-multilingual-v3
  • session (Any):用于 AWS 身份认证的 Boto3 会话对象

环境变量:

  • AWS_ACCESS_KEY_ID:AWS 访问密钥
  • AWS_SECRET_ACCESS_KEY:AWS 私有密钥
  • AWS_REGION:AWS 区域(例如 us-east-1)
Azure OpenAI
python
from crewai.rag.embeddings.providers.microsoft.types import AzureProviderSpec

embedding_model: AzureProviderSpec = {
    "provider": "azure",
    "config": {
        "deployment_id": "your-deployment-id",
        "api_key": "your-api-key",
        "api_base": "https://your-resource.openai.azure.com",
        "api_version": "2024-02-01",
        "model_name": "text-embedding-ada-002",
        "api_type": "azure"
    }
}

配置选项:

  • deployment_id (str):必填 - Azure OpenAI 部署 ID
  • api_key (str):Azure OpenAI API 密钥
  • api_base (str):Azure OpenAI 资源端点
  • api_version (str):API 版本。示例:2024-02-01
  • model_name (str):模型名称。默认:text-embedding-ada-002
  • api_type (str):API 类型。默认:azure
  • dimensions (int):输出维度
  • default_headers (dict):自定义请求头

环境变量:

  • AZURE_OPENAI_API_KEY 或 EMBEDDINGS_AZURE_API_KEY:api_key
  • AZURE_OPENAI_ENDPOINT 或 EMBEDDINGS_AZURE_API_BASE:api_base
  • EMBEDDINGS_AZURE_DEPLOYMENT_ID:deployment_id
  • EMBEDDINGS_AZURE_API_VERSION:api_version
  • EMBEDDINGS_AZURE_MODEL_NAME:model_name
  • EMBEDDINGS_AZURE_API_TYPE:api_type
  • EMBEDDINGS_AZURE_DIMENSIONS:dimensions
Google Generative AI
python
from crewai.rag.embeddings.providers.google.types import GenerativeAiProviderSpec

embedding_model: GenerativeAiProviderSpec = {
    "provider": "google-generativeai",
    "config": {
        "api_key": "your-api-key",
        "model_name": "gemini-embedding-001",
        "task_type": "RETRIEVAL_DOCUMENT"
    }
}

配置选项:

  • api_key (str):Google AI API 密钥
  • model_name (str):模型名称。默认:gemini-embedding-001。可选:gemini-embedding-001、text-embedding-005、text-multilingual-embedding-002
  • task_type (str):嵌入的任务类型。默认:RETRIEVAL_DOCUMENT。可选:RETRIEVAL_DOCUMENT、RETRIEVAL_QUERY

环境变量:

  • GOOGLE_API_KEY、GEMINI_API_KEY 或 EMBEDDINGS_GOOGLE_API_KEY:api_key
  • EMBEDDINGS_GOOGLE_GENERATIVE_AI_MODEL_NAME:model_name
  • EMBEDDINGS_GOOGLE_GENERATIVE_AI_TASK_TYPE:task_type
Google Vertex AI
python
from crewai.rag.embeddings.providers.google.types import VertexAIProviderSpec

embedding_model: VertexAIProviderSpec = {
    "provider": "google-vertex",
    "config": {
        "model_name": "text-embedding-004",
        "project_id": "your-project-id",
        "region": "us-central1",
        "api_key": "your-api-key"
    }
}

配置选项:

  • model_name (str):模型名称。默认:textembedding-gecko。可选:text-embedding-004、textembedding-gecko、textembedding-gecko-multilingual
  • project_id (str):Google Cloud 项目 ID。默认:cloud-large-language-models
  • region (str):Google Cloud 区域。默认:us-central1
  • api_key (str):用于身份认证的 API 密钥

环境变量:

  • GOOGLE_APPLICATION_CREDENTIALS:服务账号 JSON 文件的路径
  • GOOGLE_CLOUD_PROJECT 或 EMBEDDINGS_GOOGLE_VERTEX_PROJECT_ID:project_id
  • EMBEDDINGS_GOOGLE_VERTEX_MODEL_NAME:model_name
  • EMBEDDINGS_GOOGLE_VERTEX_REGION:region
  • EMBEDDINGS_GOOGLE_VERTEX_API_KEY:api_key
Jina AI
python
from crewai.rag.embeddings.providers.jina.types import JinaProviderSpec

embedding_model: JinaProviderSpec = {
    "provider": "jina",
    "config": {
        "api_key": "your-api-key",
        "model_name": "jina-embeddings-v3"
    }
}

配置选项:

  • api_key (str):Jina AI API 密钥
  • model_name (str):模型名称。默认:jina-embeddings-v2-base-en。可选:jina-embeddings-v3、jina-embeddings-v2-base-en、jina-embeddings-v2-small-en

环境变量:

  • JINA_API_KEY 或 EMBEDDINGS_JINA_API_KEY:api_key
  • EMBEDDINGS_JINA_MODEL_NAME:model_name
HuggingFace
python
from crewai.rag.embeddings.providers.huggingface.types import HuggingFaceProviderSpec

embedding_model: HuggingFaceProviderSpec = {
    "provider": "huggingface",
    "config": {
        "url": "https://api-inference.huggingface.co/models/sentence-transformers/all-MiniLM-L6-v2"
    }
}

配置选项:

  • url (str):HuggingFace 推理 API 端点的完整 URL

环境变量:

  • HUGGINGFACE_URL 或 EMBEDDINGS_HUGGINGFACE_URL:url
Instructor
python
from crewai.rag.embeddings.providers.instructor.types import InstructorProviderSpec

embedding_model: InstructorProviderSpec = {
    "provider": "instructor",
    "config": {
        "model_name": "hkunlp/instructor-xl",
        "device": "cuda",
        "instruction": "Represent the document"
    }
}

配置选项:

  • model_name (str):HuggingFace 模型 ID。默认:hkunlp/instructor-base。可选:hkunlp/instructor-xl、hkunlp/instructor-large、hkunlp/instructor-base
  • device (str):运行设备。默认:cpu。可选:cpu、cuda、mps、xpu
  • instruction (str):用于嵌入的指令前缀

环境变量:

  • EMBEDDINGS_INSTRUCTOR_MODEL_NAME:model_name
  • EMBEDDINGS_INSTRUCTOR_DEVICE:device
  • EMBEDDINGS_INSTRUCTOR_INSTRUCTION:instruction
Sentence Transformer
python
from crewai.rag.embeddings.providers.sentence_transformer.types import SentenceTransformerProviderSpec

embedding_model: SentenceTransformerProviderSpec = {
    "provider": "sentence-transformer",
    "config": {
        "model_name": "all-mpnet-base-v2",
        "device": "cuda",
        "normalize_embeddings": True
    }
}

配置选项:

  • model_name (str):Sentence Transformers 模型名称。默认:all-MiniLM-L6-v2。可选:all-mpnet-base-v2、all-MiniLM-L6-v2、paraphrase-multilingual-MiniLM-L12-v2
  • device (str):运行设备。默认:cpu。可选:cpu、cuda、mps、xpu
  • normalize_embeddings (bool):是否对嵌入进行归一化。默认:False

环境变量:

  • EMBEDDINGS_SENTENCE_TRANSFORMER_MODEL_NAME:model_name
  • EMBEDDINGS_SENTENCE_TRANSFORMER_DEVICE:device
  • EMBEDDINGS_SENTENCE_TRANSFORMER_NORMALIZE_EMBEDDINGS:normalize_embeddings
ONNX
python
from crewai.rag.embeddings.providers.onnx.types import ONNXProviderSpec

embedding_model: ONNXProviderSpec = {
    "provider": "onnx",
    "config": {
        "preferred_providers": ["CUDAExecutionProvider", "CPUExecutionProvider"]
    }
}

配置选项:

  • preferred_providers (list[str]):按优先级排序的 ONNX 执行提供程序列表

环境变量:

  • EMBEDDINGS_ONNX_PREFERRED_PROVIDERS:preferred_providers(逗号分隔的列表)
OpenCLIP
python
from crewai.rag.embeddings.providers.openclip.types import OpenCLIPProviderSpec

embedding_model: OpenCLIPProviderSpec = {
    "provider": "openclip",
    "config": {
        "model_name": "ViT-B-32",
        "checkpoint": "laion2b_s34b_b79k",
        "device": "cuda"
    }
}

配置选项:

  • model_name (str):OpenCLIP 模型架构。默认:ViT-B-32。可选:ViT-B-32、ViT-B-16、ViT-L-14
  • checkpoint (str):预训练检查点名称。默认:laion2b_s34b_b79k。可选:laion2b_s34b_b79k、laion400m_e32、openai
  • device (str):运行设备。默认:cpu。可选:cpu、cuda、mps、xpu

环境变量:

  • EMBEDDINGS_OPENCLIP_MODEL_NAME:model_name
  • EMBEDDINGS_OPENCLIP_CHECKPOINT:checkpoint
  • EMBEDDINGS_OPENCLIP_DEVICE:device
Text2Vec
python
from crewai.rag.embeddings.providers.text2vec.types import Text2VecProviderSpec

embedding_model: Text2VecProviderSpec = {
    "provider": "text2vec",
    "config": {
        "model_name": "shibing624/text2vec-base-multilingual"
    }
}

配置选项:

  • model_name (str):来自 HuggingFace 的 Text2Vec 模型名称。默认值:shibing624/text2vec-base-chinese。可选值:shibing624/text2vec-base-multilingual、shibing624/text2vec-base-chinese

环境变量:

  • EMBEDDINGS_TEXT2VEC_MODEL_NAME:model_name
Roboflow
python
from crewai.rag.embeddings.providers.roboflow.types import RoboflowProviderSpec

embedding_model: RoboflowProviderSpec = {
    "provider": "roboflow",
    "config": {
        "api_key": "your-api-key",
        "api_url": "https://infer.roboflow.com"
    }
}

配置选项:

  • api_key (str):Roboflow API 密钥。默认值:""(空字符串)
  • api_url (str):Roboflow 推理 API URL。默认值:https://infer.roboflow.com

环境变量:

  • ROBOFLOW_API_KEY 或 EMBEDDINGS_ROBOFLOW_API_KEY:api_key
  • ROBOFLOW_API_URL 或 EMBEDDINGS_ROBOFLOW_API_URL:api_url
WatsonX (IBM)
python
from crewai.rag.embeddings.providers.ibm.types import WatsonXProviderSpec

embedding_model: WatsonXProviderSpec = {
    "provider": "watsonx",
    "config": {
        "model_id": "ibm/slate-125m-english-rtrvr",
        "url": "https://us-south.ml.cloud.ibm.com",
        "api_key": "your-api-key",
        "project_id": "your-project-id",
        "batch_size": 100,
        "concurrency_limit": 10,
        "persistent_connection": True
    }
}

配置选项:

  • model_id (str):WatsonX 模型标识符
  • url (str):WatsonX API 端点
  • api_key (str):IBM Cloud API 密钥
  • project_id (str):WatsonX 项目 ID
  • space_id (str):WatsonX 空间 ID(project_id 的替代项)
  • batch_size (int):嵌入的批大小。默认值:100
  • concurrency_limit (int):最大并发请求数。默认值:10
  • persistent_connection (bool):使用持久连接。默认值:True
  • 外加 20 多项额外的身份认证与配置选项

环境变量:

  • WATSONX_API_KEY 或 EMBEDDINGS_WATSONX_API_KEY:api_key
  • WATSONX_URL 或 EMBEDDINGS_WATSONX_URL:url
  • WATSONX_PROJECT_ID 或 EMBEDDINGS_WATSONX_PROJECT_ID:project_id
  • EMBEDDINGS_WATSONX_MODEL_ID:model_id
  • EMBEDDINGS_WATSONX_SPACE_ID:space_id
  • EMBEDDINGS_WATSONX_BATCH_SIZE:batch_size
  • EMBEDDINGS_WATSONX_CONCURRENCY_LIMIT:concurrency_limit
  • EMBEDDINGS_WATSONX_PERSISTENT_CONNECTION:persistent_connection
Custom
python
from crewai.rag.core.base_embeddings_callable import EmbeddingFunction
from crewai.rag.embeddings.providers.custom.types import CustomProviderSpec

class MyEmbeddingFunction(EmbeddingFunction):
    def __call__(self, input):
        # Your custom embedding logic
        return embeddings

embedding_model: CustomProviderSpec = {
    "provider": "custom",
    "config": {
        "embedding_callable": MyEmbeddingFunction
    }
}

配置选项:

  • embedding_callable (type[EmbeddingFunction]):自定义嵌入函数类

注意: 自定义嵌入函数必须实现 crewai.rag.core.base_embeddings_callable 中定义的 EmbeddingFunction 协议。__call__ 方法应接收输入数据并以 numpy 数组列表(或可被标准化的兼容格式)返回嵌入。返回的嵌入会被自动标准化并校验。

注

  • 除非标注为 必填,否则所有配置字段均为可选
  • API 密钥通常可以通过环境变量提供,而不必写在配置中
  • 适用处已给默认值

结论

RagTool 提供了一种强大方式,可从各类数据源创建知识库并对其进行查询。借助检索增强生成,它使智能体能够高效地访问和检索相关信息,从而增强其给出准确且贴合上下文的回复的能力。

BytesRouter 是社区翻译站点,所有译文仅供参考,一切以官方英文原文为准。