OpenAI API - Function calling 的概念与使用(一)

目录

前言

Function calling 基本介绍

Common use cases (常见用例)

Supported models (支持的模型)

Function calling behavior (函数调用行为)

Parallel function calling (并行函数调用)

Example invoking multiple function calls in one response (多函数调用示例)

Tokens (令牌)

总结


前言

        此篇文章基于OpenAI 官方文档,用中文的方式为大家讲解 Function calling(函数调用),有需要的朋友可以收藏方便后续的学习和使用,此篇文章涵盖基础概念和实际用例,所以我打算分成2-3部分来讲解

Function calling 基本介绍

        在一次API调用中,你可以描述函数,并让模型智能地选择输出包含调用一个或多个函数参数的JSON对象。Chat Completions API并不会调用函数,而是由模型生成JSON,你可以在代码中使用这些JSON来调用函数。

        最新的模型(gpt-4o、gpt-4-turbo和gpt-3.5-turbo)已经被训练成可以根据输入来检测何时应该调用函数,并且能够生成更加符合函数签名的JSON。具备这一能力的同时也带来了潜在的风险,例如发送电子邮件、在线发布内容、进行购买等动作,所以在执行之前,最好得到用户相应授权。

注:本篇文章主使用Chat Completions API来进行函数调用。关于 Assistants API 中函数调用教程会在以后的播客中为大家更新。

Common use cases (常见用例)

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

  • 创建通过调用外部API回答问题的助手

    • 定义一些函数,例如 send_email(to: string, body: string) 或者 get_current_weather(location: string, unit: 'celsius' | 'fahrenheit')
  • 将自然语言转换为API调用

    • 例如,将“谁是我最重要的客户?”转换为 get_customers(min_revenue: int, created_before: string, limit: int),然后调用你内部的API。
  • 从文本中提取结构化数据

    • 定义一个名为 extract_data(name: string, birthday: string) 的函数,或 sql_query(query: string)

这些用例还有更多可能性!

函数调用的基本步骤如下

  1. 使用用户的查询和在 functions 参数中定义的一组函数调用模型。
  2. 模型可以选择调用一个或多个函数;如果是这样,内容将是一个符合你自定义模式的字符串化JSON对象(注意:模型可能会生成虚构的参数)。
  3. 在代码中将字符串解析为JSON,并使用提供的参数(如果存在)调用你的函数。
  4. 通过将函数响应作为新消息附加,再次调用模型,让模型将结果总结返回给用户。
Supported models (支持的模型)
### 如何部署 OpenAI API 为了确保应用程序的安全性和稳定性,在部署涉及敏感信息(如API密钥)的应用程序时,采取适当措施至关重要。对于Web应用而言,直接在前端暴露API密钥存在安全隐患;因此推荐的做法是在服务器端处理这些请求。 #### 使用环境变量管理API密钥 当构建ReactJS项目并打算将其托管于GitHub Pages这样的静态站点服务上时,应该从未将任何秘密信息硬编码至客户端代码内。相反地,应当利用`.env`文件存储开发期间所需的配置项,并通过Git忽略列表防止提交此类敏感资料到版本控制系统中去[^1]。 然而值得注意的是,旦涉及到生产环境中实际调用第三方接口的情况,则更适宜采用后端代理的方式来进行间接访问——即创建自己的RESTful微服务作为中介层负责转发最终用户的HTTP请求给目标平台的同时也承担起鉴权职责。这不仅有助于保护凭证免遭泄露风险,还能实现诸如限流控制等功能增强整体架构灵活性安全性。 #### 构建后端中间件 种常见的做法是借助云函数(Cloud Function),比如Google Cloud Functions 或者 AWS Lambda 来搭建这样个轻量级的服务网关。以Firebase为例,可以编写段Node.js脚本来封装对OpenAI API的具体操作逻辑: ```javascript const functions = require('firebase-functions'); const axios = require('axios'); // 安全地读取环境变量中的API Key const OPENAI_API_KEY = process.env.OPENAI_API_KEY; exports.openAiProxy = functions.https.onRequest(async (req, res) => { try { const response = await axios.post( "https://api.openai.com/v1/engines/davinci-codex/completions", req.body, { headers: {"Authorization": `Bearer ${OPENAI_API_KEY}`} } ); return res.status(200).json(response.data); } catch(error){ console.error("Error calling OpenAI API:", error.message); return res.status(500).send({ message:error.message }); } }); ``` 上述代码片段展示了如何定义个HTTPS触发器类型的Cloud Function实例,它接受来自外部的POST请求并将之转交给指定引擎完成文本补全文案的任务。此同时,所有必要的身份验证参数均来源于运行时刻上下文中预先加载好的配置对象而非明文形式写死在线路里头[^2]。 #### 部署流程概述 最后步就是按照所选平台官方文档指示完成整个项目的上线准备工作了。如果是基于Firebase的话,那么只需简单执行几条命令即可快速发布最新改动成果: ```bash npm install -g firebase-tools firebase login firebase init hosting:functions firebase deploy ``` 以上步骤会引导开发者初始化项目结构、关联远程仓库以及推送本地更改记录直至云端生效为止。当然具体细节可能会因个人需求差异而有所不同,请参照各自服务商提供的指南做相应调整优化[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值