RagTool

描述

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

示例

以下示例演示了如何初始化该工具并将其与不同数据源一起使用

代码
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:可选。用于知识库的自定义适配器。如果未提供,将使用 EmbedchainAdapter。
  • config:可选。底层 EmbedChain App 的配置。

添加内容

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

代码
# 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")

Agent 集成示例

这里是如何将 RagTool 与 CrewAI agent 集成

代码
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.org.cn")
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 的行为

代码
from crewai_tools import RagTool

# Create a RAG tool with custom configuration
config = {
    "app": {
        "name": "custom_app",
    },
    "llm": {
        "provider": "openai",
        "config": {
            "model": "gpt-4",
        }
    },
    "embedding_model": {
        "provider": "openai",
        "config": {
            "model": "text-embedding-ada-002"
        }
    },
    "vectordb": {
        "provider": "elasticsearch",
        "config": {
            "collection_name": "my-collection",
            "cloud_id": "deployment-name:xxxx",
            "api_key": "your-key",
            "verify_certs": False
        }
    },
    "chunker": {
        "chunk_size": 400,
        "chunk_overlap": 100,
        "length_function": "len",
        "min_chunk_size": 0
    }
}

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

内部 RAG 工具利用了 Embedchain 适配器,您可以通过它传递 Embedchain 支持的任何配置选项。您可以参考 Embedchain 文档 获取详细信息。请务必查看 .yaml 文件中可用的配置选项。

结论

RagTool 提供了一种强大的方法,可以从各种数据源创建和查询知识库。通过利用检索增强生成 (RAG),它使 agent 能够高效地访问和检索相关信息,从而增强他们提供准确且上下文适当的响应的能力。