【大模型应用开发极简入门】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",
        "description"
### 如何在 React 函数组件中调用 Agent 模型 为了在 React 函数组件中调用 Agent 模型的方法,可以遵循以下模式。Agent 的核心是由 LLM 驱动的大脑模块[^1],因此可以通过定义清晰的接口来与其交互。 #### 定义 Agent 接口 首先,在前端环境中集成 Agent 模型时,通常需要通过 API 者本地 SDK 来实现通信。假设我们有一个名为 `agentApi` 的对象,它封装了与 Agent 模型交互的功能: ```javascript // 假设这是用于调用 Agent 方法的 API 封装 const agentApi = { callFunction: async (functionName, params) => { const response = await fetch('/api/agent', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ functionName, params }), }); return response.json(); } }; ``` #### 在函数组件中使用 Agent 接下来是在 React 函数组件中实际调用这些方法的方式。这里展示了一个单的例子,说明如何触发 Agent 并处理其返回的结果。 ```jsx import React, { useState } from 'react'; const MyComponent = () => { const [result, setResult] = useState(null); const handleCallAgent = async () => { try { // 调用 Agent 中的一个具体功能 const functionResponse = await agentApi.callFunction('exampleFunction', { param1: 'value1' }); // 更新状态以显示结果 setResult(functionResponse); } catch (error) { console.error('Error calling agent:', error); } }; return ( <div> <h3>Calling Agent Model</h3> <button onClick={handleCallAgent}>Call Agent Function</button> {result && <p>Result: {JSON.stringify(result)}</p>} </div> ); }; export default MyComponent; ``` 上述代码展示了如何在一个按钮点击事件中调用 Agent 提供的功能,并将结果显示给用户。这里的重点在于通过 `fetch` 请求向后端发送数据并接收响应。 #### 自定义属性支持(可选) 如果涉及到更复杂的场景,比如自定义图像其他媒体类型的输入,则可以根据环境配置额外的支持机制。例如 HTML `<image>` 标签语法可用于注册某些特性[^2],这可能适用于特定的应用程序上下文中。 另外,对于进一步优化用户体验而言,还可以利用设置中的规则选项来自定义 AI 行为[^3],从而更好地满足不同用户的个性化需求。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

roman_日积跬步-终至千里

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

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

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

打赏作者

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

抵扣说明:

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

余额充值