You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

LangGraph工具识别机制及工具功能传递方法咨询

LangGraph工具识别与功能传递指南

一、LangGraph如何识别工具?

LangGraph不是只靠函数名识别工具,它会通过@tool装饰器提取工具的完整元信息,并传递给背后的大语言模型(LLM),这些信息包括:

  • 函数名称
  • 参数的类型、名称
  • 返回值类型
  • 函数的文档字符串(注释)

以你提供的示例为例,@tool会把human_assistance的参数定义、返回值说明,以及文档字符串里的Request assistance from a human都打包传递给LLM,LLM正是基于这些结构化信息理解工具的功能,而不是只看函数名。

二、如何清晰传递工具用途?

完全不需要设置超长函数名,以下是更高效的方法:

  • 写详细的文档字符串:这是传递工具功能的核心。对于复杂工具,要在文档字符串里明确说明:
    1. 工具的核心作用
    2. 适合调用的场景
    3. 每个参数的具体含义
    4. 返回值的内容格式
      比如可以把示例的文档字符串优化成:
    @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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 19:07:20