18.langchain 入门到放弃(八)tools-StructuredTool

185 阅读1分钟

18.langchain 入门到放弃(八)tools-StructuredTool

  工具是代理、链或 LLM 用来与世界交互的界面。它们包含以下几个方面:
1、工具名称
2、工具描述
3、工具输入的 JSON 模式
4、要调用的函数
5、工具的结果是否应直接返回给用户

   掌握所有这些信息非常有用,因为这些信息可用于构建行动执行系统!名称、描述和 JSON 模式可用于提示 LLM,使其知道如何指定要采取的行动,然后调用的函数就相当于采取该行动。

  工具的输入越简单,LLM 使用起来就越容易。许多代理只能使用单字符串输入的工具。

  重要的是,名称、描述和 JSON 模式(如果使用)都会在提示中使用。因此,这三者必须清晰明确地描述工具的使用方法。如果 LLM 不明白如何使用工具,可能需要更改默认名称、描述或 JSON 模式。

  ‍

  自定义工具

  • name​ (str), 是必需的,而且必须在提供给代理的一套工具中是唯一的
  • description​ (str), 是可选的,但推荐使用,因为它被代理用来确定工具的使用情况
  • args_schema​ (Pydantic BaseModel), 是可选的,但推荐使用,可用于提供更多信息(如少量示例)或验证预期参数。

  ‍

from langchain_core.tools import tool

'''@tool 注解定义工具类'''


@tool
def search(query: str) -> str:
    """Look up things online."""
    return "LangChain"


print(search.name)
print(search.description)
print(search.args)

  ‍

  ‍

from langchain_core.tools import StructuredTool, ToolException


def search_function(query: str) -> str:
    raise ToolException("The search tool1 is not available.")


'''您也可以使用 StructuredTool 数据类。它比 @tool提供了更多的功能'''
search = StructuredTool.from_function(
    func=search_function,
    name="Search",
    description="useful for when you need to answer questions about current events"
)

print(search.name)
print(search.description)
print(search.args)

  ‍