【大模型应用开发极简入门】agent之前:Function Calling:将自然语言转换为API调用或数据库查询

一. 介绍

OpenAI可以根据用户的要求输出一个符合用户要求的入参值。然后用户拿到入参值之后,可以调用函数执行。那如何按照用户的要求,生成指定格式,并符合入参值逻辑?

可以使用Function Calling将自然语言转换为API调用或数据库查询

 

最新的模型(gpt-4o、gpt-4-turbo 和 gpt-3.5-turbo)已经训练成能够检测何时应该调用函数(取决于输入),并以比以前的模型更接近被调用函数的参数返回 JSON。

 
注意:

尽管具备了这种能力,但也伴随着潜在的风险。我们强烈建议在代表用户采取影响世界的行动之前,构建用户确认流程(发送电子邮件、在网上发布内容、进行购买等)。

 

二. 常见用例与Function Calling调用逻辑

函数调用可让您更可靠地从模型中获取结构化数据。例如,您可以:

  1. 创建调用外部 API 来回答问题的助手;
  2. 将自然语言转换为 API 调用 例如,将“谁是我的顶级客户?”转换为get_customers(min_revenue: int, created_before: string, limit: int)并调用您的内部 API。
  3. 从文本中提取结构化数据:例如定义一个名为的函数extract_data(name: string, birthday: string)等等。

 

函数调用的基本步骤顺序如下:

  1. 定义函数调用规范,调用openAI返回函数调用参数,以json的形式返回
  2. 解析返回的调用参数获取入参并调用函数;
  3. 将函数响应作为新消息附加到模型中,并让模型将结果总结回用户。

 

三. 调用细节

1. 调用行为:tool_choice

tool_choice的默认行为是"auto"。这让模型决定是否调用函数以及如果调用,要调用哪些函数。另外,如下提供了三种函数调用的行为:

  • 强制模型始终调用函数,可以设置tool_choice: "required"。然后,模型将选择要调用的函数。
  • 强制模型仅调用一个特定的函数,您可以设置tool_choice: {"type": "function", "function": {"name": "myfunction"}}
  • 要禁用函数调用并强制模型仅生成面向用户的消息,您可以设置tool_choice: "none"

 

如下调用行为,

  response = client.chat.completions.create(
        model="gpt-4o",
        messages=messages,
        tools=tools,
        tool_choice="auto",  # auto is default, but we'll be explicit
    )

 

2. 调用规定:functions

函数定义需要作为函数对象数组传递。下表列出了函数对象的详细信息。

字段名称 类型 描述
name string(必填) 函数名
description string 函数描述
parameters object 函数所需的参数,这些参数将从JSON Schema格式进行描述

举个例子:如下规定了调用函数的细节,

  • 函数名是find_product,作用是从一个sql中查询产品,
  • 参数是:sql_query:字段类型:string,表示一个sql
  • 必须传递的参数是:sql_query

functions = [
    {
   
        "name": "find_product",
        
### 如何降低 GENT 开发中调用外部工具的技术门槛 在 GENT 的开发过程中,调用外部工具通常涉及接口设计、数据交换协议的选择以及错误处理机制的实现。为了降低技术门槛,可以从以下几个方面入手: #### 1. **标准化接口** 采用通用的标准 API 接口设计方法,使得开发者能够更容易理解并集成外部工具的功能[^1]。例如,RESTful GraphQL 是目前广泛使用的两种标准接口形式。 #### 2. **化配置流程** 通过提供预定义模板自动化脚本减少手动配置的工作量。这不仅提高了效率,还降低了因误配而导致的问题风险。对于复杂场景下的问题分解能力尤为重要,因为清晰的任务划分有助于更高效地利用外部资源。 #### 3. **增强文档支持** 详尽且易于理解的技术文档可以帮助新用户快速上手。特别是针对常见应用场景给出具体示例代码片段(如下所示),可以让学习曲线变得更加平缓。 ```python import requests def call_external_tool(url, params=None): try: response = requests.get(url, params=params) if response.status_code == 200: return response.json() else: raise Exception(f"Error calling external tool: {response.text}") except Exception as e: print(e) # Example usage of the function result = call_external_tool("https://api.example.com/data", {"key": "value"}) print(result) ``` --- ### 大模型进化为智能体 Agent 过程中的关键角色 当大型语言模型逐步演化成具备自主行动能力的智能体时,“显式问题拆解”成为提升解决问题效能的核心要素之一。这种策略允许系统将复杂的任务分割成若干个小目标逐一完成,从而显著增强了灵活性与适应性。 此外,在实际应用环境中,安全性隐私保护也是不可忽视的重要环节。比如在网络管理领域内实施 SNMPv3 协议来保障通信双方身份验证及内容加密措施的有效执行就显得尤为必要[^3]。这些基础架构层面的支持同样构成了构建强大 Agents 不可缺少的一部分。 最后值得注意的是虚拟化技术支持也为多实例运行提供了可能,像 KVM Docker 等 Hypervisors 可以为不同类型的负载创建隔离环境,进一步促进了智能化系统的部署与发展[^2]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

roman_日积跬步-终至千里

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值