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-parser 和jsonschema 包即可使用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 组件
您可以使用ComponentTool 和 Agent 组件。在内部,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)
其他参考资料
更新于 5 个月前
