文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Python ChatGPT API 新增的函数调用功能演示

2023-09-03 21:17

关注

文章目录

🍉 CSDN 叶庭云https://yetingyun.blog.csdn.net/


一、前言

OpenAI 重磅更新,API 添加函数调用能力,能处理更长上下文,价格又有所降低 …

在这里插入图片描述

知乎讨论:https://www.zhihu.com/question/606520916

这次更新的主角,在我看来毫无疑问是函数调用功能,过去要么依靠 Prompt Engineering 提供的信息,要么就需要使用 LangChain 这样的框架实现。现在官方提供了更稳定的方式与本地代码或者第三方 API,可以无缝将 GPT 的语言理解和解析能力整合入本地工作流中。

稍微再总结一下此次更新的主要内容:


二、主要内容

新增的函数调用功能的解释:我理解的是,ChatGPT 的 API 现在可以根据你给出的函数描述,理解你的函数输入输出格式要求,把用户的自然语言转化成本地 / {/} /第三方函数的输入参数。然后开发者需要拿着这个参数自己执行一下,得到一个结果再还给 ChatGPT,ChatGPT 最后会根据这个结果回答用户的问题,输出最终内容。

函数调用的官方示例:

在这里插入图片描述

自从 ChatGPT 插件的 alpha 版本发布以来,我们已经学到了很多关于如何安全地使工具和语言模型协同工作的知识。然而,仍有一些未解决的研究问题。例如,一个概念验证漏洞说明了不受信任的数据可以指示模型执行意外操作。我们正在努力减轻这些和其他风险。开发人员可以通过只消费来自可信工具的信息并在执行具有现实影响(例如发送电子邮件、在线发布或购买)的操作之前包含用户确认步骤来保护其应用程序。

下面我们自己写个实例来实践和感受一下,以查询国内城市今天的天气情况为例:

API 使用的是国家气象局的接口,完全免费的:http://t.weather.sojson.com/api/weather/city/101010100

城市到代码的转化是参考这篇博客:https://blog.csdn.net/qq_42855293/article/details/103864266。把他分享的内容粘贴到 Excel 并保存,方便后续使用。

完整代码如下:

import astimport jsonimport requestsimport pandas as pdimport openaifrom pprint import pprintdef get_current_weather(city):    code = city2code[city]    resp = requests.get(f"http://t.weather.sojson.com/api/weather/city/{code}")    data = resp.json()["data"]        date_info = data["forecast"][0]["ymd"] + " - " + data["forecast"][0]["week"]    wendu = data["wendu"]    shidu = data["shidu"]    pm25 = data["pm25"]    pm10 = data["pm10"]    tianqi_type = data["forecast"][0]["type"]    air_quality = data["quality"]    zhuyi = data["forecast"][0]["notice"]    low = data["forecast"][0]["low"]    high = data["forecast"][0]["high"]    aqi = data["forecast"][0]["aqi"]        return {"时间": date_info, "温度": wendu, "最高温度": high, "最低温度": low,            "湿度": shidu, "天气类型": tianqi_type, "空气质量": air_quality,            "注意": zhuyi, "PM2.5": pm25, "PM10": pm10, "AQI": aqi}openai.api_key = "请注意:替换为你的 API KEY"      # 配置自己的 API Keyopenai.api_base = 'https://你的反向代理域名-如果有的话/v1'   # 请注意后面 /v1 不可省略# 如果没有自己的反向代理   你还需要设置你挂的魔法# proxies = {'http': "http://127.0.0.1:7890", 'https': "https://127.0.0.1:7890"}# openai.proxy = proxiesdf = pd.read_excel("./citycode/city.xlsx")city2code = {k: v for k, v in zip(df["区域"], df["区域编号"])}             prompt = "今天北京的天气怎么样?"print("Prompt:")print(prompt)my_function = [{"name": "get_current_weather",                "description": "获取给定位置的当前天气",                "parameters": {"type": "object",   "properties": {"location": {"type": "string", "description": "城市,例如北京"},                  "unit": {"type": "string", "enum": ["celsius", "fahrenheit"]}                },   "required": ["location"]   }                }               ]# LLMs as Controller# 据你给出的函数描述,理解你的函数输入输出格式要求,把用户的自然语言转化成本地${/}$第三方函数的输入参数和确定调用那个函数。然后开发者需要拿着这个参数自己执行一下,得到一个结果再还给 ChatGPT,ChatGPT 最后会根据这个结果回答用户的问题,输出最终内容。resp1 = openai.ChatCompletion.create(model="gpt-3.5-turbo-0613",         messages=[{"role": "user", "content": prompt}],         temperature=0.0,         max_tokens=3072,         functions=my_function,         )params = ast.literal_eval(resp1.choices[0].message.function_call["arguments"])call_fuction = resp1.choices[0].message.function_call["name"]if call_fuction == "get_current_weather":    weather_data = get_current_weather(params["location"])resp2 = openai.ChatCompletion.create(model="gpt-3.5-turbo-0613",         messages=[{"role": "user", "content": prompt},                   {"role": "assistant", "content": "null", "function_call": resp1.choices[0].message.function_call},                   {"role": "function", "name": "call_fuction", "content": str(weather_data)}                   ],            temperature=0.0,            max_tokens=3072,            functions=my_function,         )print("-" * 99)print(resp2.choices[0].message.content)

这段代码主要实现了以下功能:

结果如下示意:

在这里插入图片描述


三、总结

所谓的「函数调用」功能,并不是说 GPT API 会帮你执行某些第三方的功能或接口,而是说,通过提交给 GPT 函数的名称、描述和输入参数,它能够在语义中理解应该调用哪一个函数去满足用户功能,如果此时的语境中缺少函数必需的参数,GPT 会进一步与用户对话要求补全信息;当满足函数调用条件时,GPT 会返回一个结果,告诉开发者此时需要调用的函数名和相应的参数;然后开发者自行执行本地/第三方函数,并将结果再次输入给 GPT API,GPT API 则会根据返回值告诉用户结果。

我们必须先理解了这个过程,至于具体的代码很容易实现。从上面这段话抽取一下工作流程

示意图如下所示(图片来自知乎@段小草):
在这里插入图片描述

GPT API 是介于开发者和用户直接的「翻译官」,干两件事:


📚️ 参考链接:

来源地址:https://blog.csdn.net/fyfugoyfa/article/details/131216745

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯