2023-03-09 06:05:45 来源:腾讯云
北国春迟,春寒料峭略带阴霾,但ChatGPT新接口模型gpt-3.5-turbo的更新为我们带来了一丝暖意,使用成本更加亲民,比高端产品ChatGPT Plus更实惠也更方便,毕竟ChatGPT Plus依然是通过网页端来输出,Api接口是以token的数量来计算价格的,0.002刀每1000个token,token可以理解为字数,说白了就是每1000个字合0.01381人民币,以ChatGPT无与伦比的产品力而言,如此低的使用成本让所有市面上其他所有类ChatGPT产品都黯然失光。
本次让我们使用Python3.10光速接入ChatGPT API的新模型gpt-3.5-turbo。
【资料图】
OpenAI库的SDK方式接入
OpenAI官方同步更新了接口Api的三方库openai,版本为0.27.0,如果要使用新的模型gpt-3.5-turbo,就必须同步安装最新版本:
pip3 install openai==0.27.0随后建立chat.py文件:
import openaiopenai.api_key = "openai的接口apikey" completion = openai.ChatCompletion.create( model="gpt-3.5-turbo", messages=[{"role": "user", "content": "北国风光,千里冰封,万里雪飘,请接着续写,使用沁园春的词牌"}])print(completion["choices"][0]["message"]["content"])程序返回:
瑶池冰缘,雪舞凄美, 隔窗寒意,似乎钻进衣袖。寒塘渡鸭,雪中梅影, 孤独是一片银白的姿态。冰雪如花,开放在草莓园里, 可爱的雪人,瑟瑟发抖着欢呼。北风凛冽,寒暄难挡, 四季明媚,但冬日尤甜美。千里冰封,万里雪飘, 窗外天下壮观,此时正是京城美。闪电般秒回,让用惯了ChatGPT网页端的我们几乎不能适应。
gpt-3.5-turbo,对得起turbo的加成,带涡轮的ChatGPT就是不一样。
ChatGPT聊天上下文
我们知道ChatGPT的最大特色就是可以联系语境中的上下文,换句话说,ChatGPT可以根据之前的回答来优化之后的回答,形成上下文关系,让人机对话更加连贯和富有逻辑性。
这里取决于输入参数中的role参数,每一个role的取值,对应的场景不一样,其中system用于在对话开始时给ChatGPT一个指示或声明,有点像引导词,使得后续的回答更具有个性化和专业化。user是用于给用户提问的或者说是用来给用户输入引导词的。assistant顾名思义,是用于输入ChatGPT的回答内容:
import openaiopenai.api_key = "apikey" class ChatGPT: def __init__(self,chat_list=[]) -> None: # 初始化对话列表 self.chat_list = [] # 显示接口返回 def show_conversation(self,msg_list): for msg in msg_list: if msg["role"] == "user": print(f"Me: {msg["content"]}\n") else: print(f"ChatGPT: {msg["content"]}\n") # 提示chatgpt def ask(self,prompt): self.chat_list.append({"role":"user","content":prompt}) response = openai.ChatCompletion.create(model="gpt-3.5-turbo",messages=self.chat_list) answer = response.choices[0].message["content"] # 添加历史对话,形成上下文关系 self.chat_list.append({"role":"assistant","content":answer}) self.show_conversation(self.chat_list)这里每一次会话都会加入chat_list的聊天列表,角色为assistant,为了让ChatGPT分析上下文,下面开始测试:
if __name__ == "__main__": chat = ChatGPT() chat.ask("你是一位南宋词人,词风婉约,有点类似李清照女士,请使用蝶恋花词牌描写北国春光")程序返回:
Me: 你是一位南宋词人,词风婉约,有点类似李清照女士,请使用蝶恋花词牌描写北国春光ChatGPT: 北国春光,清冽宜人。望眼欲穿的远山如翠起伏,遥远而缥缈。层层叠叠的林木,新绿徜徉,婆娑摇曳。风儿吹起,沁人心脾,点点梅花飘至,宛如仙境。花间蝶恋,春色满园。莺莺燕燕,鸟鸣花落,时时惹人遐思。碧空万里,蓝天白云,彩云飘飘,缤纷夺目。柳絮飘飘,轻羽翩翩,小河潺潺,流水声声,婉转动人。清风拂面,落英缤纷。听着草虫唱起,充满阳光的气息,轻轻飘荡,仿佛一条无形的小河,展开春天的美好,留下美好的记忆。人间万象,却只有这春色无边,似乎奔向远方的快乐。此时再次发问:
chat.ask("请使用另外一种粗狂阳刚的风格再写一遍上面的词")程序返回:
Me: 请使用另外一种粗狂阳刚的风格再写一遍上面的词ChatGPT: 北国春光,不柔不媚,金色的阳光照在地上,充满了男子气概。草原上风吹不断,那些疯狂的野花,在春风中舞蹈。看!那些猛禽静静地盘旋在高空,监视着整片草原,威武雄壮。花丛间,一只雄性蜂鹰跃跃欲飞,看上去仿佛要冲破天际。这里的春天有时带着风沙,但这并不能阻止狂放豪迈的草原奔腾前行,而这样的北国春光,怎会轻易被遗忘!虽然内容有些尬,但确实联系了上下文。
需要注意的是,token不仅计算ChatGPT的接口返回内容,也会计算用户的发送内容,token的计算方法不是简单的一词一个,例如中文输入,一个中文汉字占2个字节数,而对于一次中文测试中,50个汉字被算为100个tokens,差不多是英文的一倍,而token还计算api发送中的角色字段,如果像上文一样实现上下文操作,就必须发送ChatGPT接口返回的历史聊天列表,这意味着ChatGPT上下文聊天的成本并不是我们想象中的那么低,需要谨慎使用。
原生ChatGPT接口异步访问
除了官方的SDK,新接口模型也支持原生的Http请求方式,比如使用requests库:
pip3 install requests直接请求openai官方接口:
import requestsh = { "Content-Type": "application/json", "Authorization": "Bearer apikey"}d = { "model": "gpt-3.5-turbo", "messages":[{"role": "user", "content": "请解释同步请求和异步请求的区别"}], "max_tokens": 100, "temperature": 0}u = "https://api.openai.com/v1/chat/completions"r = requests.post(url=u, headers=h, json=d).json()print(r)程序返回:
{"id": "chatcmpl-6qDNQ9O4hZPDT1Ju902coxypjO0mY", "object": "chat.completion", "created": 1677902496, "model": "gpt-3.5-turbo-0301", "usage": {"prompt_tokens": 20, "completion_tokens": 100, "total_tokens": 120}, "choices": [{"message": {"role": "assistant", "content": "\n\n同步请求和异步请求是指在客户端向服务器发送请求时,客户端等待服务器响应的方式不同。\n\n同步请求是指客户端发送请求后,必须等待服务器响应后才能继续执行后续的代码。在等待服务器响应的过程中,客户端的界面会被阻塞,用户无法进行"}, "finish_reason": "length", "index": 0}]}ChatGPT原生接口也支持异步方式请求,这里使用httpx:
pip3 install httpx编写异步请求:
h = { "Content-Type": "application/json", "Authorization": "Bearer apikey"}d = { "model": "gpt-3.5-turbo", "messages":[{"role": "user", "content": "请解释同步请求和异步请求的区别"}], "max_tokens": 100, "temperature": 0}u = "https://api.openai.com/v1/chat/completions"import asyncioimport httpxasync def main(): async with httpx.AsyncClient() as client: resp = await client.post(url=u, headers=h, json=d) result = resp.json() print(result)asyncio.run(main())程序返回:
{"id": "chatcmpl-6qDNQ9O4hZPDT1Ju902coxypjO0mY", "object": "chat.completion", "created": 1677902496, "model": "gpt-3.5-turbo-0301", "usage": {"prompt_tokens": 20, "completion_tokens": 100, "total_tokens": 120}, "choices": [{"message": {"role": "assistant", "content": "\n\n同步请求和异步请求是指在客户端向服务器发送请求时,客户端等待服务器响应的方式不同。\n\n同步请求是指客户端发送请求后,必须等待服务器响应后才能继续执行后续的代码。在等待服务器响应的过程中,客户端的界面会被阻塞,用户无法进行"}, "finish_reason": "length", "index": 0}]}我们也可以将异步请求方式封装到对话类中,完整代码:
import openaiimport asyncioimport httpxopenai.api_key = "apikey" h = { "Content-Type": "application/json", "Authorization": f"Bearer {openai.api_key}"}d = { "model": "gpt-3.5-turbo", "messages":[{"role": "user", "content": "请解释同步请求和异步请求的区别"}], "max_tokens": 100, "temperature": 0}u = "https://api.openai.com/v1/chat/completions"class ChatGPT: def __init__(self,chat_list=[]) -> None: # 初始化对话列表 self.chat_list = [] # 异步访问 async def ask_async(self,prompt): d["messages"][0]["content"] = prompt async with httpx.AsyncClient() as client: resp = await client.post(url=u, headers=h, json=d) result = resp.json() print(result) # 显示接口返回 def show_conversation(self,msg_list): for msg in msg_list: if msg["role"] == "user": print(f"Me: {msg["content"]}\n") else: print(f"ChatGPT: {msg["content"]}\n") # 提示chatgpt def ask(self,prompt): self.chat_list.append({"role":"user","content":prompt}) response = openai.ChatCompletion.create(model="gpt-3.5-turbo",messages=self.chat_list) answer = response.choices[0].message["content"] # 添加历史对话,形成上下文关系 self.chat_list.append({"role":"assistant","content":answer}) self.show_conversation(self.chat_list)if __name__ == "__main__": chat = ChatGPT() chat.ask("你是一位南宋词人,词风婉约,有点类似李清照女士,请使用蝶恋花词牌描写北国春光") chat.ask("请使用另外一种粗狂阳刚的风格再写一遍上面的词") asyncio.run(chat.ask_async("请解释同步请求接口和异步请求接口的区别"))结语
低成本ChatGPT接口模型gpt-3.5-turbo更容易接入三方的客户端,比如微信、QQ、钉钉群之类,比起ChatGPT网页端,ChatGPT接口的响应速度更加迅速且稳定,ChatGPT,永远的神,没有之一,且不可替代,最后奉上异步上下文封装项目,与君共觞:github.com/zcxey2911/chatgpt_api_Contextual_async
标签:
- 加快虚拟仿真实训基地建设 启动职业学校信息化建设试点很必要
- “双减”后如何在满足学生多样需求方面做“加法”?
- 处于生理活跃期且心理发展不成熟 高校开设公共卫生必修课很必要
- 价格低于相应蔬菜零售价 西安投放约1万吨政府储备蔬菜
- 深受年轻消费群体所青睐 国潮风商品成为年货新选择
知识
- 他把银行卡卖给骗子,“黑吃黑”“截胡”十万元
- “老司机”4S店试驾豪车 结果油门当刹车撞了
- 新开工改造城镇老旧小区5.34万个
- 发动巡河志愿者2万余名 “用心护好每一条河”
- 假客服的套路:伪装成大平台客服,层层布局引人上钩
人物
- 当前热门:小鲨易贷网贷逾期7个月征信有什么影响
- 通讯!业界:搭平台促交流 助力中国白酒走向世界
- 视讯!LPR连续四月不变 专家预计短期内仍将持稳
- 环球热资讯!57.5% 网友赞成,马斯克或将卸任 Twitter CEO
- 提钱花网贷逾期半年会不会上征信_速看料
- 育碧正在为其《星球大战》游戏寻找测试人员
- 世界杯的阿尔法之战
- 别受伤!浓眉篮下被小卡晃飞 空中失去重心后背着地 当前速讯
- 世界新资讯:中油测井多相位定向光纤避射技术填补空白
- 天天快资讯:中材科技: 董事会决议公告
- 每日热门:锦程消费金融的一股东想彻底退出
- 深南电A董秘回复:关于您提出的问题,现回复如下:公司目前的主营业务为天然气发电,未涉及到核聚变反应相关业务
- 热议:伯特利: 芜湖伯特利汽车安全系统股份有限公司章程(2022年12月修订)(更正后)
- 宝钢包装(601968)12月15日主力资金净买入24.60万元 今日播报
- 鸥玛软件董秘回复:截至11月30日,公司股票持有数量15,896户
- 铂力特: 西安铂力特增材技术股份有限公司监事会关于2020年限制性股票激励计划首次授予部分第二个归属及预留授予第一个归属期归属名单的核查意见 今日报
- 济源市人民法院:加强失信曝光、法律文书电子送达 全球新要闻
- 【机构调研记录】中海基金调研楚江新材、伟星新材等4只个股(附名单)
- 世界通讯!一边要路权,一边要停车,占路20余年车棚这样拆违腾路
- 环球热消息:独家资金:早盘主力买入前10股
- 免费可商用!荣耀HONOR Sans字体来了 附下载
- 在南洋与中文相遇(阅读时光)_短讯
- 源杰科技(688498)新股概览,12月12日开始网上申购-视焦点讯
- 中欣氟材董秘回复:谢谢您对本公司的关注,目前公司钠电池电解液添加液产品正在设计及设备订购等前期项目准备中
- 头条:英集芯(688209)12月7日主力资金净卖出490.52万元
- 股票行情快报:石化机械(000852)12月6日主力资金净卖出3954.17万元
- 浙江两轮核酸检测结果均为阴性 无新增本土阳性感染者
- 新疆阿克苏地区库车市发生4.1级地震 震源深度18千米
- 抵返哈尔滨人员须持48小时内核酸检测阴性证明
- 浙大紫金港校区已解封 有7337人有序离开该校区
- 2021年广东省第七届风筝锦标赛落幕
- 黑龙江讷河市启动全员核酸检测 目前讷河市全员核酸检测结果均为阴性
- 【同心粤港澳 携手大湾区】南头古城,搭建深港澳三地文化创意活动交流平台
- 重庆入河排污口整治工作推进至全市26个区县
- 四川省第二批政法队伍教育整顿:立案审查调查省级政法机关干警58人
- 长三角区域生态环境部门“云签约”长江大保护倡议书
- 古老长城重焕新生机
- 藏不住了!你同事里有许多“武林高手”……
- 浙江杭州2例无症状感染者系感染德尔塔变异株
- 喜马拉雅的深情和誓言
- 浪漫之城打造山海城一体新地标
- 让老年人更适应数字生活
- 内蒙古通辽市新增1例本土确诊病例、1例无症状感染者
- 徐州无新增确诊病例 核酸检测55515人结果均为阴性
- 甘肃培树“农家巧娘”增技能:返乡创业掌勺又“掌柜”
- 内蒙古通辽市科尔沁区一地调整为中风险地区
- 上海本轮疫情涉及闭环管理的医疗机构全面恢复门急诊
- 青年学生成艾滋病感染高发人群 “社会疫苗”如何打?
- 内蒙古满洲里新增本土确诊病例1例 当地开展第二轮大规模核酸检测
- 江西无新增本土确诊病例 上饶全面恢复正常生产生活秩序
精彩阅读
- 中老铁路上会四国语言的列车长:用心维护中老友谊的桥梁
- 海南首次发现有环志的世界极危鸟种勺嘴鹬
- 一场“网络劝生者”和“网络劝死者”的战役
- 内蒙古通辽新增本土确诊和无症状感染者各1例 轨迹公布
- 江西中烟工业有限责任公司原总经理姚庆艳接受审查调查
- 宁夏45例新冠肺炎确诊病例均已治愈出院
- 内蒙古通辽市科尔沁区发现2名初筛阳性人员
- 生活在闹钟里的丈夫:自己迟一秒,渐冻症妻子就会多一分疼
- 辽宁新冠肺炎确诊病例零新增
- 11月28日16-24时,内蒙古新增本土确诊病例1例
- 奥密克戎毒株为何“需要关注”?现有防疫工具还有效吗?
- 黑龙江新增本土无症状感染者1例
- 这辈子一定要去趟这个公园 在这里“有种爱叫放手”
- 那年今日 | 一张漫画涨知识之11月29日
- 寒潮预警!我国中东部迎大范围降温 黑龙江等地降幅可达12℃
- 冷空气继续影响我国中东部 华北黄淮等地有雾和霾天气
