OpenAI 函数调用 功能入门
作者:AI小火箭的HB
我是AI小火箭的HB,我探索和写作人工智能和语言交叉点的所有事物,范围从LLM,聊天机器人,语音机器人,开发框架,以数据为中心的潜在空间等。
范例
初步体验
OpenAI新增了“函数调用”功能,这是什么呢?
我们先调用API来体验下。
下面是发送到模型的 JSON 文档。此调用的目的是生成一个 JSON 文件,该文件可用于发送到发送电子邮件的 API。
您可以看到函数名称为
send_email
,并定义了三个参数,to_address
,subject
和body
,即电子邮件正文。用户请求为:
Send Cobus from humanfirst ai an email asking for the monthly report?
curl --location 'https://api.openai.com/v1/chat/completions' \ --header 'Content-Type: application/json' \ --header 'Authorization: Bearer sk-xxxx' \ --data '{ "model": "gpt-3.5-turbo-0613", "messages": [ {"role": "user", "content": "Send Cobus from humanfirst ai an email asking for the monthly report?"} ], "functions": [ { "name": "send_email", "description": "Please send an email.", "parameters": { "type": "object", "properties": { "to_address": { "type": "string", "description": "To address for email" }, "subject": { "type": "string", "description": "subject of the email" }, "body": { "type": "string", "description": "Body of the email" } } } } ] }'
下面是返回的 JSON
{ "id": "chatcmpl-7TQuwzJpQAY470saQM2RPfxwF6DDE", "object": "chat.completion", "created": 1687249338, "model": "gpt-3.5-turbo-0613", "choices": [ { "index": 0, "message": { "role": "assistant", "content": null, "function_call": { "name": "send_email", "arguments": "{\n \"to_address\": \"cobus@humanfirst.ai\",\n \"subject\": \"Request for Monthly Report\",\n \"body\": \"Hi Cobus,\\n\\nI hope you're doing well. Could you please share the monthly report with me? It would be great to have it before the end of the week.\\n\\nThanks,\\n[Your Name]\"\n}" } }, "finish_reason": "function_call" } ], "usage": { "prompt_tokens": 86, "completion_tokens": 82, "total_tokens": 168 } }
GPT模型会返回需要调用的函数名 send_email
和对应的参数(放在arguments
字段)。
{ "to_address": "cobus@humanfirst.ai", "subject": "Request for Monthly Report", "body": "Hi Cobus,\n\nI hope you're doing well. Could you please share the monthly report with me? It would be great to have it before the end of the week.\n\nThanks,\n[Your Name]" }
这就非常有用,第三方的应用可以提供多个函数/服务(类似插件),GPT模型可以根据用户的指令自动选择不同的函数/服务。
现在再来看示例,就比较清晰了。
用途
根据官网文档,函数调用允许您更可靠地从模型中获取结构化数据。例如,您可以:
-
创建聊天机器人,通过调用外部 API 来回答问题(例如 ChatGPT 插件)
-
例如,定义像
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)
的函数
-
函数调用的基本步骤顺序如下:
-
使用用户查询和函数参数中定义的一组函数调用模型。
-
模型可以选择调用函数;如果是这样,内容将是符合自定义架构的字符串化 JSON 对象(注意:模型可能会生成无效的 JSON 或幻觉参数)。
-
在代码中将字符串解析为 JSON,并使用提供的参数调用函数(如果存在)。
-
通过将函数响应追加为新消息来再次调用模型,并让模型将结果汇总回给用户。
AI小火箭
AI小火箭已经支持函数调用和gpt-3.5-turbo-16k
、gpt-3.5-turbo-0613
、gpt-3.5-turbo-16k-0613
,大家可以去体验下。

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
【SIGMOD 2023】深度学习弹性数据流水线系统GoldMiner,大幅提升任务和集群效率
第一板块:开篇 近日,阿里云机器学习平台PAI和北京大学杨智老师团队合作的论文《GoldMiner: Elastic Scaling of Training Data Pre-Processing Pipelines for Deep Learning》被数据库领域顶会SIGMOD 2023接收。 GoldMiner观察到深度学习任务中的数据预处理流水线具有无状态的特点,具有内在的资源弹性。基于此,GoldMiner将数据预处理流水线和模型训练部分分离执行,通过自动计算图分析来识别无状态的数据预处理计算,并对其实现高效的并行加速和弹性伸缩,从而缓解数据预处理瓶颈,提升训练性能。通过与集群调度器的协同设计,GoldMiner进一步发挥了数据预处理计算的资源弹性,大幅提升集群调度效率。实验显示GoldMiner可提升训练性能达12.1倍,提升GPU集群利用率达2.5倍。 第二板块:背景 近年来,随着GPU加速器的不断进化,以及各类软件优化技术的层出不穷,深度学习训练的计算效率正不断被提升到新的层次。但与此同时,深度学习本质上仍是一种多阶段、多资源的任务类型:不仅需要在GPU上进行大量的训练...
- 下一篇
CosId 2.1.0 发布,全面拥抱 Spring Boot 3
CosId通用、灵活、高性能分布式 ID 生成器 更新内容(v2.1.0) 🎉 🎉 🎉 维护说明:(v2.x) 变更为主 (main) 维护分支 更新依赖org.springframework.boot:spring-boot-dependencies到v3.1.0 更新依赖org.springframework.cloud:spring-cloud-dependencies到v2022.0.3 合并main分支特性 简介 CosId旨在提供通用、灵活、高性能的分布式 ID 生成器。 SnowflakeId:单机 TPS 性能:409W/sJMH 基准测试, 主要解决时钟回拨问题、机器号分配问题并且提供更加友好、灵活的使用体验。 SegmentId: 每次获取一段 (Step) ID,来降低号段分发器的网络 IO 请求频次提升性能。 IdSegmentDistributor: 号段分发器(号段存储器) RedisIdSegmentDistributor: 基于Redis的号段分发器。 JdbcIdSegmentDistributor: 基于Jdbc的号段分发器,支持各种关系型数...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- MySQL8.0.19开启GTID主从同步CentOS8
- Mario游戏-低调大师作品
- Linux系统CentOS6、CentOS7手动修改IP地址
- Docker安装Oracle12C,快速搭建Oracle学习环境
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- CentOS7安装Docker,走上虚拟化容器引擎之路
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题