Skip to content

大千世界无奇不有,大千AI智探万象

function call

简介

为什么需要function call

  • 大语言模型 (LLM) 擅长解决许多类型的问题。但是,它们受到以下限制:

    • 知识固化:模型在训练后参数就被冻结,无法获取新知识
    • 能力边界:无法直接查询或修改外部数据,缺乏实时交互能力
    • 计算限制:复杂数学运算或专业领域计算能力有限
  • 函数调用(function call)本质上是为LLM提供了"使用工具"的能力,让模型可以:

    • 动态获取最新信息(如查询天气、股票)
    • 执行具体操作(如发送邮件、预订机票)
    • 处理复杂计算(如调用专业API)
    • 连接企业系统(如CRM、ERP等业务系统)
  • 技术实现上,这需要开发者向模型提供一组定义良好的函数接口,模型会根据用户需求智能选择调用

Function Call技术原理

  • 通过结构化输出(json格式)描述需要调用的函数及参数
  • 模型自身不直接执行函数,而是输出调用指令
  • 开发者负责实际函数调用并将结果返回给模型

应用

使用场景

  • 实时数据获取:天气查询、股票行情、新闻检索
  • 业务系统集成:CRM、ERP系统查询与操作
  • 复杂任务分解:将复杂问题拆解为多个API调用
  • 专业领域增强:法律、医疗等专业领域工具调用
  • 典型案例:
    • 智能旅行助手:整合航班查询、酒店预订、天气查询等多个API
    • 电商客服机器人:查询订单状态、退货处理等后端系统对接

最佳实践

函数名称

  • 函数名称应以字母或下划线开头,且只能包含字符 a-z、A-Z、0-9、下划线、英文句点或英文短划线,长度上限为 64 个字符。

函数说明规范

  • 清晰而详细地撰写函数说明。例如,对于 book_flight_ticket 函数:
    • 下面是一个良好的函数说明示例:book flight tickets after confirming users' specific requirements, such as time, departure, destination, party size and preferred airline
    • 下面是一个不良的函数说明示例:book flight ticket

函数参数规范

  • 命名规则:函数参数和嵌套属性名称应以字母或下划线开头,并且只能包含字母 a-z、A-Z、数字 0-9 或下划线,最大长度为 64 个字符。请勿在函数参数名称和嵌套属性中使用英文句点 (.)、短划线 (-) 或空格字符。
说明
  • 编写清晰而详细的参数说明,包括首选格式或值等详细信息。例如,对于 book_flight_ticket 函数:
    • 以下是 departure 参数说明的一个良好示例:Use the 3 char airport code to represent the airport. For example, SJC or SFO. Don't use the city name.
    • 以下是 departure 参数说明的一个不良示例:the departure airport
类型
  • 尽可能使用强类型参数来减少模型幻觉。例如,如果参数值来自有限集,请添加 enum 字段,而不是将值集放入说明中。如果参数值始终是整数,请将类型设置为 integer,而不是 number。

  • 参数类型定义示例:

json
"parameters": {
  "location": {
    "type": "string",
    "description": "城市名称,如'北京'或'New York'"
  },
  "temperature_unit": {
    "type": "string",
    "enum": ["celsius", "fahrenheit"],
    "default": "celsius"
  }
}
系统指令优化
  • 使用包含日期、时间或位置参数的函数时,请在系统说明中添加当前日期、时间或相关位置信息(例如城市和国家/地区)。这样可以确保模型具有必要的上下文来准确处理请求,即使用户提示缺少详细信息也是如此。

用户提示

  • 为获得最佳结果,请在用户提示前面加上以下详细信息:
    • 模型的其他上下文,例如 You are a flight API assistant to help with searching flights based on user preferences.
    • 有关如何及何时使用函数的详细信息或说明,例如 Don't make assumptions on the departure or destination airports. Always use a future date for the departure or destination time.
    • 在用户查询不明确时询问澄清性问题的说明,例如 Ask clarifying questions if not enough information is available.

生成配置

  • 对于温度参数,请使用 0 或其他较低值。这会指示模型生成置信度更高的结果并减少幻觉。

API 调用

  • 如果模型建议调用一个会发送订单、更新数据库或以其他方式产生重大后果的函数,请在执行之前先向用户验证该函数调用。

实例说明

  • 例如,您可以提供一个函数 get_weather,该函数接受一个位置参数,并返回该位置的天气状况信息

  • 处理提示时,该模型可以选择将某些数据处理任务委托给您确定的函数。模型不会直接调用函数。相反,模型会提供结构化数据输出,其中包含要调用的函数和要使用的参数值。例如,对于提示What is the weather like in Boston?,模型可以将处理委托给get_weather函数,并提供位置参数值Boston, MA.

  • 您可以使用模型的结构化输出来调用外部 API。例如,您可以连接到天气服务 API,提供位置 Boston, MA,并接收有关温度、云量和风况的信息

  • 然后,您可以将 API 输出返回给模型,使模型能够完成对提示的回答。对于天气示例,模型可能会提供以下回答:It is currently 38 degrees Fahrenheit in Boston, MA with partly cloudy skies.

  • google-function-calling-weather-example

  • 完整交互流程

参考

微信搜索 "大千AI助手" 学习最实用的AI技术

Last updated:

build with vitepress