文档API 参考📓 教程🧑‍🍳 食谱🤝 集成💜 Discord🎨 Studio
文档

ComponentTool

此包装器允许将 Haystack 组件用作 LLM 的工具。

必需的初始化变量"component": 要包装的 Haystack 组件
API 参考Tools (工具)
GitHub 链接https://github.com/deepset-ai/haystack/blob/main/haystack/tools/component_tool.py

概述

ComponentTool 是一个包装 Haystack 组件的工具,允许将它们用作 LLM 的工具。ComponentTool 会从组件的输入套接字自动生成 LLM 兼容的工具模式,这些套接字派生自组件的run 方法签名和类型提示。

它执行输入类型转换,并支持具有以下输入类型的 run 方法的组件

  • 基本类型(str、int、float、bool、dict)
  • 数据类(简单和嵌套结构)
  • 基本类型列表(例如 List[str])
  • 数据类列表(例如 List[Document])
  • 混合类型参数(例如 List[Document]、str...)

参数

  • component 是必需的,并且必须是一个 Haystack 组件,可以是现有的组件或自定义组件。
  • name 是可选的,默认为 snake_case 格式的组件名称,例如 SerperDevWebSearch 的 "serper_dev_web_search"。
  • description 是可选的,默认为组件的 docstring。它向 LLM 解释该工具可用于什么。

用法

安装额外的依赖项docstring-parserjsonschema 包即可使用ComponentTool:

pip install docstring-parser jsonschema

在 pipeline 中

您可以创建一个ComponentTool 从现有的SerperDevWebSearch 组件,并让一个OpenAIChatGenerator 在管道中使用它作为工具。

from haystack import component, Pipeline
from haystack.tools import ComponentTool
from haystack.components.websearch import SerperDevWebSearch
from haystack.utils import Secret
from haystack.components.tools.tool_invoker import ToolInvoker
from haystack.components.generators.chat import OpenAIChatGenerator
from haystack.dataclasses import ChatMessage

# Create a SerperDev search component
search = SerperDevWebSearch(api_key=Secret.from_env_var("SERPERDEV_API_KEY"), top_k=3)

# Create a tool from the component
tool = ComponentTool(
    component=search,
    name="web_search",  # Optional: defaults to "serper_dev_web_search"
    description="Search the web for current information on any topic"  # Optional: defaults to component docstring
)

# Create pipeline with OpenAIChatGenerator and ToolInvoker
pipeline = Pipeline()
pipeline.add_component("llm", OpenAIChatGenerator(model="gpt-4o-mini", tools=[tool]))
pipeline.add_component("tool_invoker", ToolInvoker(tools=[tool]))

# Connect components
pipeline.connect("llm.replies", "tool_invoker.messages")

message = ChatMessage.from_user("Use the web search tool to find information about Nikola Tesla")

# Run pipeline
result = pipeline.run({"llm": {"messages": [message]}})

print(result)

通过 Agent 组件

您可以使用ComponentToolAgent 组件。在内部,Agent 组件包含一个ToolInvoker 和您选择的 ChatGenerator 来执行工具调用并处理工具结果。

from haystack.components.generators.chat import OpenAIChatGenerator
from haystack.dataclasses import ChatMessage
from haystack.tools import ComponentTool
from haystack.components.agents import Agent
from haystack.components.websearch import SerperDevWebSearch
from typing import List

# Create a SerperDev search component
search = SerperDevWebSearch(api_key=Secret.from_env_var("SERPERDEV_API_KEY"), top_k=3)

# Create a tool from the component
search_tool = ComponentTool(
    component=search,
    name="web_search",  # Optional: defaults to "serper_dev_web_search"
    description="Search the web for current information on any topic"  # Optional: defaults to component docstring
)

# Agent Setup
agent = Agent(
    chat_generator=OpenAIChatGenerator(),
    tools=[search_tool],
    exit_conditions=["text"]
)

# Run the Agent
agent.warm_up()
response = agent.run(messages=[ChatMessage.from_user("Find information about Nikola Tesla")])

# Output
print(response["messages"][-1].text)

其他参考资料

🧑‍🍳 食谱:构建一个 GitHub Issue Resolver Agent

📓 教程:构建一个 Tool-Calling Agent