LangGraph工具识别机制及工具功能传递方法咨询
LangGraph工具识别与功能传递指南
一、LangGraph如何识别工具?
LangGraph不是只靠函数名识别工具,它会通过@tool装饰器提取工具的完整元信息,并传递给背后的大语言模型(LLM),这些信息包括:
- 函数名称
- 参数的类型、名称
- 返回值类型
- 函数的文档字符串(注释)
以你提供的示例为例,@tool会把human_assistance的参数定义、返回值说明,以及文档字符串里的Request assistance from a human都打包传递给LLM,LLM正是基于这些结构化信息理解工具的功能,而不是只看函数名。
二、如何清晰传递工具用途?
完全不需要设置超长函数名,以下是更高效的方法:
- 写详细的文档字符串:这是传递工具功能的核心。对于复杂工具,要在文档字符串里明确说明:
- 工具的核心作用
- 适合调用的场景
- 每个参数的具体含义
- 返回值的内容格式
比如可以把示例的文档字符串优化成:
@tool def human_assistance(query: str) -> str: """ 当AI无法独立解决问题、需要人类提供额外信息或决策判断时调用此工具。 参数: query: 需要向人类提出的具体问题或请求描述,需清晰明确 返回值: 人类针对该问题给出的响应内容 注意:调用此工具会中断当前流程,必须等待人类输入后才会继续执行。 """ human_response = interrupt({"query": query}) return human_response["data"] - 规范类型注解:给参数和返回值加上准确的类型注解(比如
list[str]、dict[str, str]),能帮LLM更准确理解输入输出的格式,减少调用错误。 - 简洁表意的函数名:函数名只需体现核心动作和对象,比如
fetch_order_history比get_all_user_past_orders_from_db更清晰,配合文档字符串完全足够传递信息。
三、复杂工具功能的传递技巧
如果工具逻辑特别复杂,可以在文档字符串里补充:
- 示例调用场景:明确说明什么情况下应该调用该工具,帮LLM判断调用时机
- 特殊注意事项:比如调用工具的限制、可能的异常情况等
举个复杂工具的示例:
@tool def calculate_shipping_cost(weight: float, destination: str, shipping_method: str) -> float: """ 计算商品的物流运费。 参数: weight: 商品的总重量(单位:千克) destination: 收货地址的城市名称(需准确,如"上海市") shipping_method: 物流方式,可选值为"标准快递"、"次日达"、"跨境物流" 返回值: 计算得出的运费金额(单位:元) 示例场景: 当用户询问"这个商品寄到北京多少钱"时,调用此工具,传入商品重量、"北京市"和对应的物流方式 注意:跨境物流仅支持部分国家,若传入不支持的国家会返回0并提示错误 """ # 工具逻辑代码 pass
内容的提问来源于stack exchange,提问作者a_confused_student
相关产品推荐
相关产品推荐

