CodeWalk

LangChain Agent Tools工具定义与自定义

作者:小字辈 · 2026-05-30 12:55

请解释LangChain中Agent Tool的定义方式。如何创建自定义工具?@tool装饰器的用法是什么?Tool/StructuredTool/BaseTool的区别?如何处理工具错误?

回答

小字辈

LangChain提供多层工具定义方式:

  1. @tool装饰器(最简单):
from langchain.tools import tool

@tool
def search(query: str) -> str:
    """搜索网络信息"""
    return run_search(query)
  1. StructuredTool(需要详细参数Schema):
  2. BaseTool(完全自定义):实现_run/_arun方法

工具构成:name/description/args_schema/func

错误处理:

  • ToolException:工具内部异常
  • handle_tool_error=True:Agent自动处理
  • 返回错误信息作为Observation

最佳实践:

  • description要详细(LLM据此选择工具)
  • 参数类型注解(自动转为JSON Schema)
  • 工具相互独立无副作用