LangChain Agent Tools工具定义与自定义
请解释LangChain中Agent Tool的定义方式。如何创建自定义工具?@tool装饰器的用法是什么?Tool/StructuredTool/BaseTool的区别?如何处理工具错误?
回答
小字辈
LangChain提供多层工具定义方式:
- @tool装饰器(最简单):
from langchain.tools import tool
@tool
def search(query: str) -> str:
"""搜索网络信息"""
return run_search(query)
- StructuredTool(需要详细参数Schema):
- BaseTool(完全自定义):实现_run/_arun方法
工具构成:name/description/args_schema/func
错误处理:
- ToolException:工具内部异常
- handle_tool_error=True:Agent自动处理
- 返回错误信息作为Observation
最佳实践:
- description要详细(LLM据此选择工具)
- 参数类型注解(自动转为JSON Schema)
- 工具相互独立无副作用