|
【一文系列】一篇文章记录gptAPI的使用过程(python版)“一文系列”目标是仅通过一篇文章来解决一个类别问题,简洁高效,快速获取知识,提升技能。文章目录【一文系列】一篇文章记录gptAPI的使用过程(python版)前言一、背景介绍二、gptAPI的代码调用1.环境准备2.环境验证3.简单参数说明三、牛刀小试:利用gptAPI实现加法器1.创建任务提示词2.代码示例3.运行并测试4.注意点四、进阶案例:利用gptAPI实现交互式翻译器1.创建任务提示词2.代码示例3.运行并测试总结前言让我们开始吧!!!自然语言处理(NLP)作为人工智能领域的关键技术之一,正在以迅猛的步伐发展。OpenAI的GPT系列模型一直是NLP领域的领军者,为我们带来了许多令人惊叹的进展。也为开发者提供了无与伦比的自然语言处理能力。本文将探讨ChatGPTAPI的背景,并以python语言为例,基于gpt-3.5-turbo-0613模型进行API调用、小例子、进阶使用等方面的讨论,帮助读者能够了解如何利用AI来创造程序开发的新时代。一、背景介绍就在前些时间,openai推出了gpt-3.5-turbo-0613和gpt-3.5-turbo-16k这两款为开发者提供更强大和多样化的自然语言处理模型,在gpt-3.5-turbo模型的基础上进一步缩短了单次访问的响应时间,并扩展了模型的应用范围。作为大语言模型,gpt的功能远不止进行智能聊天那么简单,如果能够借助AI的力量来实现我们日常开发中比较棘手的问题,那才是AI真正能为开发人员进行赋能的价值,基于以上思考,本文将从简单的gptAPI使用作为入口,并通过案例来展示gpt模型在NLP领域的前瞻性意义以及能为开发人员带来的无限可能。二、gptAPI的代码调用1.环境准备(1)python3环境:本文在进行gptAPI的使用上是直接基于python3的openai模块进行的,所以应该确保操作系统中按照了python3环境,python3的安装这里不再过多陈述,具体的安装方法请参考python官网。(2)openaiAPIkey:需要去openai官网上申请APIkey。(3)外网访问条件:openaiapi的访问服务目前还没有向国内提供,在进行调用时需要通过技术手段进行科学上网,或是在国外vps服务器上访问,推荐使用第二种方案,第一种会有被封号的可能。(4)openaipython模块:安装好python3环境后可以使用以下2种命令安装openai模块使用pip工具pip3installopenai1使用conda工具#需要安装conda环境condainstallopenai122.环境验证完成上述的环境准备,就可以上手进行openai模块的调用,可以使用以下代码来验证环境的可用性。将apikey写入环境变量,不推荐以明文方式在代码中出现exportOPENAI_API_KEY=""1环境验证代码importopenaiimportos#从环境变量中读取openaiapikeyopenai.api_key=os.getenv('OPENAI_API_KEY')resp=openai.ChatCompletion.create(model='gpt-3.5-turbo-0613',messages=[{'role':'system','content':'hello'}],timeout=30,n=1)print(resp)12345678910111213当有如下输出后说明环境验证成功,接下来就可以享受AI带来的乐趣了。3.简单参数说明(1)请求参数model:模型的名称,这里调用gpt-3.5-turbo-0613模型。messages:消息上下文列表,使用数组表示,数组的元素表示一次会话消息,其中role属性表示当前会话的角色,包括:system、user和assistant。system表示系统消息,user表示模型使用者,assistant表示gpt机器人;content属性表示当前会话的内容,未来提交给gpt的提示词就是这个属性。timeout:会话超时时间,单位为秒。n:希望gpt给出回答的数目,会影响gpt响应中的choices数组长度,默认为1,一般使用默认值即可。(2)响应参数choices:gpt模型做出的回答的对象数组,数组长度为请求参数中的n。choices对象的各个属性如下:finish_reason:模型对于此次会话结束的原因,分别为stop、length、max_tokens,其中stop正常结束,后面两项分别为是因为达到了最大内容长度和最大token而异常结束。index:在choices数组中的索引。message:会话消息对象,包括如下属性:content:消息内容,即gpt模型给出的回答内容。role:gpt模型所扮演的角色,一般固定为assistant。created:请求的时间戳。id:请求id。model:模型名称,与请求中的model参数一致。object:返回的对象类型(例如:chat.completion)usage:token的利用量,包括:completion_tokens:模型完成会话所利用的token量。prompt_tokens:提示词利用的token量。total_tokens:总共利用的token量,即completion_tokens与prompt_tokens的累加和。上述列出的是平时开发中最为常用的参数,更多参数请参考openai官方文档。三、牛刀小试:利用gptAPI实现加法器完成环境的构建,就可以借助gptAPI进行一些有趣的实验,在这一部分将以实现一个简单的加法器作为切入点,并总结了本人在使用gptAPI时的步骤和心得。1.创建任务提示词提示词(prompt)在使用gpt这种生成式大语言模型中至关重要,好的提示词可以清晰的让AI理解功能需求,并能够对输入输出格式进行把控。本人在构建提示词时习惯从以下方面来考虑:(1)背景:描述需求场景,让gpt能够理解我们的需求。(2)输入格式:给出我们提供给gpt的输入格式,并对必要部分进行说明,让gpt能够更有目的的提前我们给出的提问。(3)输出格式:这部分至关重要,在不规定输出格式时,gpt给出的回答格式是没有规则的,我们很难对结果进行目的性提取。因此需要严格规定gpt的输出格式,这一点就类似于我们日常的api接口开发,需要对期望结果指定返回格式,对于gpt模型而言道理同理。(4)示例:对于较为复杂的需求可能只通过背景的描述还不足够让gpt所理解,所以需要给出1到多个示例,就类似于我们在做算法题一样,这样可以让gpt给出的结果更加精准。(5)要求:给出gpt一些要求去限制其回答,例如异常处理,格式控制等。(6)任务:明确需求任务,让gpt作为执行引擎来完成我们的目标需求。(7)确认:用于确认gpt能否理解我们的需求,同时也作为模型预处理阶段gpt给我们的反馈,只有经过确认的模型我们才可以开始之后的交互操作。基于上述说明,为了gpt能够实现加法器需求,可以给出类似如下的提示词:sum.prompt(我习惯于将提示词文件命名为.prompt后缀,只是为了方便识别)--背景加法功能是我们常用的功能,可以将两个数字进行相加并求和,请按照以下要求完成数字求和的操作。--输入格式\input:[方括号内为数字1],[方括号内为数字2](说明:输入必须以"\input:"字符串作为开头,后面是两个数字类型参数--输出格式\output:[方括号内为数字1+数字2的结果](说明:输出必须以"\output:"字符串作为开头,后面是输入的两个数字类型的累加和--示例--我的输入:\input:1,2--你的输出:\output:3--要求1.请校验输入格式,不满足输入格式的字符串按照错误情况处理,错误情况请只回答"error";2.请严格按照输出的格式进行回答;--任务请严格按照上述内容和要求根据我的输入做出相应回答,请只按照输出格式回答,拒绝其他描述性文字。--确认如果了解了上述要求,请只回答”yes“1234567891011121314151617181920212223242526272.代码示例importopenaiimportosopenai.api_key=os.getenv("OPENAI_API_KEY")model_name='gpt-3.5-turbo-0613'#加载提示词文件并获取提示词withopen('./sum.prompt','r',encoding='utf-8')asf:prompt=f.read()defgpt_sum(val1:int,val2:int):#首先给出gpt任务提示词messages=[{'role':'system','content':prompt}]#模拟gpt的确认响应,后续可以直接以user角色给出gpt问题messages.append({'role':'assistant',"content":'yes'})#以user角色给出gpt问题user_input=f"\input:{val1},{val2}"messages.append({'role':'user','content':user_input})gpt_resp=openai.ChatCompletion.create(model=model_name,messages=messages,timeout=30)ifgpt_resp.choicesandgpt_resp.choices[0]:resp_str:str=gpt_resp.choices[0].message.contentifresp_strandresp_str.startswith('\output:'):returnint(resp_str[len('\output:'):].strip())raiseException(f'Failedtogetavailableresponsefromgpt,resp_str={resp_str}')if__name__=='__main__':terminal_input=input("Pleasegivetwointegers,splitbycomma:")inputs:list[str]=terminal_input.split(',')iflen(inputs)>>{translate(source)}")123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869703.运行并测试以下是执行结果:上述测试分别使用英文、日文和法文进行了测试,实际发现gpt模型更倾向于欧美语言的翻译,对于其他地区的翻译有时会出现不太准确的情况,不过可以证实gpt已经可以很好的完整我们既定的需求了。总结一文总结通过本篇文章,可以帮助读者了解ChatGPTAPI的背景和代码调用方式。同时,我们探索了API的小例子和进阶使用技巧。ChatGPTAPI为开发者带来了更多可能性,我们期待在不同领域看到更多创新和应用。最后希望笔者的文章能给大家带来帮助,内容方面如有不足之处也希望大家多多给出意见和建议,让我们共同进步!!!示例代码地址:gitee
|
|