langchain_core.tools.tool

langchain_core.tools.tool(*args: Union[str, Callable, Runnable], return_direct: bool = False, args_schema: Optional[Type] = None, infer_schema: bool = True, response_format: Literal['content', 'content_and_artifact'] = 'content', parse_docstring: bool = False, error_on_invalid_docstring: bool = True) Callable[source]

将函数转换为工具,可以使用或不需要参数。

参数
  • *args (Union[str, Callable, Runnable]) – 工具的参数。

  • return_direct (bool) – 是否直接从工具返回而不是继续代理循环。默认为False。

  • args_schema (Optional[Type]) – 用户指定的可选参数模式。默认为None。

  • infer_schema (bool) – 是否从函数的签名中推断参数的架构。这也使得生成的工具接受其run()函数的字典输入。默认为True。

  • response_format (Literal['content', 'content_and_artifact']) – 工具响应格式。如果是“content”,则工具的输出被视为ToolMessage的内容。如果是“content_and_artifact”,则期望输出为一个两个元素的元组,对应于ToolMessage的(content, artifact)。默认为“content”。

  • parse_docstring (布尔值) – 如果启用了 infer_schemaparse_docstring,则尝试从 Google 风格函数文档字符串中解析参数描述。默认值是 False。

  • error_on_invalid_docstring (布尔值) – 如果提供了 parse_docstring,配置是否在无效的 Google 风格文档字符串上引发 ValueError。默认值是 True。

返回

工具。

返回类型

可调用

要求
  • 函数必须是 (str) -> str 类型

  • 函数必须具有文档字符串

示例

@tool
def search_api(query: str) -> str:
    # Searches the API for the query.
    return

@tool("search", return_direct=True)
def search_api(query: str) -> str:
    # Searches the API for the query.
    return

@tool(response_format="content_and_artifact")
def search_api(query: str) -> Tuple[str, dict]:
    return "partial json of results", {"full": "object of results"}

新增于版本 0.2.14。

解析 Google 风格文档字符串

@tool(parse_docstring=True)
def foo(bar: str, baz: int) -> str:
    """The foo.

    Args:
        bar: The bar.
        baz: The baz.
    """
    return bar

foo.args_schema.schema()
{
    "title": "fooSchema",
    "description": "The foo.",
    "type": "object",
    "properties": {
        "bar": {
            "title": "Bar",
            "description": "The bar.",
            "type": "string"
        },
        "baz": {
            "title": "Baz",
            "description": "The baz.",
            "type": "integer"
        }
    },
    "required": [
        "bar",
        "baz"
    ]
}

注意,默认情况下,如果文档字符串被认为无效,将引发 ValueError。如果文档字符串包含函数签名中未定义的参数,或者无法解析为摘要和“Args:”块,则认为它是无效的。以下是一些示例:

# No args section
def invalid_docstring_1(bar: str, baz: int) -> str:
    """The foo."""
    return bar

# Improper whitespace between summary and args section
def invalid_docstring_2(bar: str, baz: int) -> str:
    """The foo.
    Args:
        bar: The bar.
        baz: The baz.
    """
    return bar

# Documented args absent from function signature
def invalid_docstring_3(bar: str, baz: int) -> str:
    """The foo.

    Args:
        banana: The bar.
        monkey: The baz.
    """
    return bar

使用工具的示例