找回密码
 会员注册
查看: 27|回复: 0

调用阿里通义千问大语言模型API-小白新手教程-python

[复制链接]

2万

主题

0

回帖

6万

积分

超级版主

积分
63676
发表于 2024-9-13 12:44:39 | 显示全部楼层 |阅读模式
阿里大语言模型通义千问API使用新手教程       最近需要用到大模型,了解到目前国产大模型中,阿里的通义千问有比较详细的SDK文档可进行二次开发,目前通义千问的API文档其实是可以进行精简然后学习的,也就是说,是可以通过简单的API调用在自己网页或者软件中接入一个大语言模型,但是似乎并没有人愿意花费时间经历写一个新手友好的教程,为此处于对知识的梳理,和对技术的热爱,我尽我的最大的努力来做这件事,如果帮到了各位同学,或者老师们,可以点赞或者关注支持一下,后续更新基于本地知识库的详细教程。如果有什么写的不对的或者可以补充完善的,欢迎交流。系列文章:1.调用阿里通义千问大语言模型API-小白新手教程-python2.LangChain结合通义千问的自建知识库3.使用LangChain结合通义千问API基于自建知识库的多轮对话和流式输出4.解决LangChain构建知识向量库的过程中官方API无法自定义文本切割方式的问题-例如按行切分5.通义千问本地部署教程Qwen-7B-ChatQwen1.5-1.8BWindows-详细认真版对于有基础的开发技术人员请直接根据目录跳到代码部分综合查看官方文档和代码即可对于想充实自己毕业设计或者软件但对自然语言处理技术并不是非常了解的同学,把每一个代码运行一遍即可,切记不要纠结专业术语如果是做相关应用的研究生,请按顺序阅读,思考数据格式,有助于思维的培养文章目录阿里大语言模型通义千问API使用新手教程1.通义千问模型介绍2024.4.26更新模型的API-KEY收费了2.通义千问API-KEY申请3.安装DashScopeSDK4.API-KEY设置4.1方式1可以直接在命令台设置环境变量4.2方式2在系统环境变量里直接设置4.3方式3通过代码设置4.4方式经验总结5.使用通义千问API进行Token切分6.使用通义千问的API进行对话6.1通过messages进行对话开发推荐6.2通过prompt进行对话新手推荐6.3多轮对话6.4流式输出7.通过控制台输入实现多轮对话-非流式输出8.通过控制台输入实现多轮对话-流式输出9.参考文档链接总结资源绑定1.通义千问模型介绍​通义千问是阿里云开发的大语言模型(LargelanguageModel)LLM,旨在提供广泛的知识和普适性,可以理解和回答各领域中的问题,其包含网页版和手机版本的通义前文APP,网页使用的模型为不公开的最新版本。其网页使用版本地址:https://tongyi.aliyun.com/qianwen/官网文档地址:https://help.aliyun.com/zh/dashscope/developer-reference/​在其官方文档中主要开源了五种可以使用的模型其开源模型的简介和参数如下:2024.4.26更新模型的API-KEY收费了我之前用的Max然后用着用着账户就欠费了,然后整个账户的API-Key就都不能用了,后来在控制台部分消息,和手机短信发现是有短信提示,但是我一直没注意,没想到这个事情,大家之前用免费KEY的要注意一下(旧)​非限时免费开放模型,有使用Token数量的限制2.通义千问API-KEY申请官方流程网址指导:https://help.aliyun.com/zh/dashscope/developer-reference/activate-dashscope-and-create-an-api-key其主要流程如下,具体请参考官网步骤开通DashScope灵积模型服务创建API-KEY根据官网流程获得一个API-Key3.安装DashScopeSDKDashScope目前支持Python和Java的SDK安装SDK的官网教程网址:https://help.aliyun.com/zh/dashscope/developer-reference/install-dashscope-sdk这里介绍python的安装安装环境Python3.8及以上版本执行以下命令安装SDK,亲测支持清华园镜像安装pipinstalldashscope1更新DashDcopeSDK包请执行以下命令pipinstalldashscope--upgrade14.API-KEY设置API-KEY设置地址官方文档网址:https://help.aliyun.com/zh/dashscope/developer-reference/api-key-settings4.1方式1可以直接在命令台设置环境变量Linux/maxOSexportDASHSCOPE_API_KEY="YOUR_DASHSCOPE_API_KEY"14.2方式2在系统环境变量里直接设置4.3方式3通过代码设置python设置API-KEY代码如下importdashscopedashscope.api_key="YOUR_DASHSCOPE_API_KEY"124.4方式经验总结其中官方推荐使用4.1的方式不推荐将API-KEY直接写在代码中,会有一定的API-KEY暴露风险,实际应用中,配置的环境变量有时会出现读取不到的情况,此时将API-KEY写在代码中可以使程序正常运行。5.使用通义千问API进行Token切分使用通义千问对Token进行切分官方文档网址:https://help.aliyun.com/zh/dashscope/developer-reference/token-api精简版如下:importdashscope#如果环境变量配置无效请启用以下代码#dashscope.api_key='YOUR_DASHSCOPE_API_KEY'#respose获得的为response=dashscope.Tokenization.call(model='qwen-turbo',messages=[{'role':'user','content':'你好?'}])print(response)#{"status_code":200,"request_id":"6d53e094-e8bc-9d88-a84a-6085c9425ad8","code":"","message":"","output":{"token_ids":[108386,11319],"tokens":["你好","?"]},"usage":{"input_tokens":2}}12345678910消息格式为一个列表,role为当前角色设置为user则模拟为用户的真实输入,content后面为要切分tokens的句子messages=[{'role':'user','content':'你好?'}]1可能会出现的错误1:系统配置了环境变量但是依然读取不到,错误中包含notfindAPI相关错误请启用以下代码dashscope.api_key='YOUR_DASHSCOPE_API_KEY'1可能会出现的错误2:错误中出现Http相关字样,其主要可能原因是网络问题,请检查网络状态是否断网或者是是国内地址官方代码对出现Http错误的情况进行了判断,官方代码如下fromhttpimportHTTPStatusimportdashscopedeftokenizer():response=dashscope.Tokenization.call(model='qwen-turbo',messages=[{'role':'user','content':'你好?'}],)ifresponse.status_code==HTTPStatus.OK:print('Resultis:%s'%response)else:print('Failedrequest_id:%s,status_code:%s,code:%s,message:%s'%(response.request_id,response.status_code,response.code,response.message))if__name__=='__main__':tokenizer()123456789101112131415161718196.使用通义千问的API进行对话使用通义千问进行对话API官方文档网址:https://help.aliyun.com/zh/dashscope/developer-reference/quick-start下面是对其中主要内容的6.1通过messages进行对话开发推荐精简版版代码如下,参数介绍在代码后:importdashscope#如果环境变量配置无效请启用以下代码#dashscope.api_key='YOUR_DASHSCOPE_API_KEY'messages=[{'role':'user','content':'如何做炒西红柿鸡蛋?'}]response=dashscope.Generation.call(dashscope.Generation.Models.qwen_turbo,messages=messages,result_format='message')print(response)#{"status_code":200,"request_id":"537d7681-8aa2-9f15-a17d-1b8492ad901f","code":"","message":"","output":{"text":null,"finish_reason":null,"choices":[{"finish_reason":"stop","message":{"role":"assistant","content":"材料:鸡蛋2个,西红柿1个。\n\n做法:\n\n1.鸡蛋打入碗中搅拌均匀备用;\n\n2.西红柿洗净切块备用;\n\n3.热锅凉油,油热后放入搅拌好的鸡蛋液,用筷子快速划散成小块,凝固即可盛出备用;\n\n4.锅内再加少量底油,放入西红柿翻炒出汁,倒入炒好的鸡蛋,加入适量盐、糖调味翻匀即可。"}}]},"usage":{"input_tokens":12,"output_tokens":106,"total_tokens":118}}1234567891011dashscope.Generation.call中输入参数的介绍dashscope.Generation.Models.qwen_turbo选用的对话模型默认对应的是model参数也就是在代码中等效于dashscope.Generation.call(model=dashscope.Generation.Models.qwen_turbo,messages=messages,result_format='message')12还有dashscope.Generation中还有qwen_maxqwen_plus两个选项如果要使用其他模型例如qwen-14b-chat,前提是API有访问该模型的权限则对应代码为dashscope.Generation.call(model='qwen-14b-chat'.qwen_turbo,messages=messages,result_format='message')12messages输入为对话角色和对话内容输入应为一个列表其对应的伪代如下[{'role':'角色类型(使用user即可)','content':'对话文本'}]1result_format输出格式该参数其实可以去掉,因为实际使用中我发现无论设置成什么都是message形式输出6.2通过prompt进行对话新手推荐精简版代码如下:importdashscope#如果环境变量配置无效请启用以下代码#dashscope.api_key='YOUR_DASHSCOPE_API_KEY'response=dashscope.Generation.call(model=dashscope.Generation.Models.qwen_turbo,prompt='如何做炒西红柿鸡蛋?')print(response.output['text'])'''材料:鸡蛋2个,西红柿1个。做法:1.鸡蛋打入碗中搅拌均匀备用;2.西红柿洗净切块备用;3.热锅凉油,油热后放入搅拌好的鸡蛋液,用筷子快速划散成小块,凝固即可盛出备用;4.锅内再加少量底油,放入西红柿翻炒出汁,倒入炒好的鸡蛋,加入适量盐、糖调味翻匀即可。'''1234567891011121314151617181920其作用就是不需要messages格式进行输入,只需要输入对话的内容即可官方代码#Forprerequisitesrunningthefollowingsample,visithttps://help.aliyun.com/document_detail/611472.htmlfromhttpimportHTTPStatusimportdashscopedefcall_with_prompt():response=dashscope.Generation.call(model=dashscope.Generation.Models.qwen_turbo,prompt='如何做炒西红柿鸡蛋?')#Theresponsestatus_codeisHTTPStatus.OKindicatesuccess,#otherwiseindicaterequestisfailed,youcangeterrorcode#andmessagefromcodeandmessage.ifresponse.status_code==HTTPStatus.OK:print(response.output)#Theoutputtextprint(response.usage)#Theusageinformationelse:print(response.code)#Theerrorcode.print(response.message)#Theerrormessage.if__name__=='__main__':call_with_prompt()12345678910111213141516171819206.3多轮对话多轮对话(Multi-TurnDialogue)是指在一个对话中,参与者之间交换多个信息单位(如句子、问题、回答)的过程。在多轮对话中,每个参与者的发言通常是对前一个发言的回应,并且每个发言都为对话的进一步发展做出贡献。官方代码精简版fromdashscopeimportGenerationfromdashscope.api_entities.dashscope_responseimportRolemessages=[{'role':Role.USER,'content':'如何做西红柿炖牛腩?'}]response=Generation.call(Generation.Models.qwen_turbo,messages=messages,result_format='message')print(response.output.choices[0]['message']['content'])messages.append({'role':response.output.choices[0]['message']['role'],'content':response.output.choices[0]['message']['content']})messages.append({'role':Role.USER,'content':'不放糖可以吗?'})response=Generation.call(Generation.Models.qwen_turbo,messages=messages,result_format='message')print(response.output.choices[0]['message']['content'])'''材料:牛腩1000克,西红柿2个,大葱1根,姜3片,蒜瓣6粒,八角1颗,桂皮1小块,香叶2片,干辣椒2只,生抽2勺,老抽1勺,料酒2勺,冰糖20克,盐适量做法:1.牛腩洗净切块,放沸水中焯水去血沫捞出备用。2.西红柿顶部划十字刀口,放入沸水中烫一下去皮,切滚刀块备用。3.大葱切段、姜切片、蒜瓣剥好。锅内油烧热,下入大葱段、姜片、蒜瓣、八角、桂皮、香叶和干辣椒炒香。4.下入牛腩翻炒均匀,烹入料酒炒匀后,加入生抽和老抽炒至上色。5.加入足量热水(没过牛腩),大火煮开后撇去浮沫,转中小火慢慢炖煮至牛腩软烂,约需1小时以上。6.当牛腩炖至8成熟时,加入西红柿块继续炖煮,炖煮至西红柿软烂且汤汁浓稠即可,最后调入适量的盐调味。西红柿炖牛腩就做好了!可以的,如果不喜欢甜味,可以不放冰糖或者减少用量。不过需要注意的是,糖能够增加菜肴的鲜美口感和色泽,如果你不放糖,可能会让菜肴的味道变得有些平淡无味。另外,糖还能够中和牛肉的腥味,如果没有糖的话,可能需要在炖煮的过程中多加一些调料来提味。'''1234567891011121314151617181920212223242526多轮对话需要将输入信息反复输入给模型,且要包含以往全部的对话内容第一次发信息messages=[{'role':Role.USER,'content':'如何做西红柿炖牛腩?'}]response=Generation.call(Generation.Models.qwen_turbo,messages=messages,result_format='message')12第二次发信息#添加机器返回的内容messages.append({'role':response.output.choices[0]['message']['role'],'content':response.output.choices[0]['message']['content']})#添加新的内容messages.append({'role':Role.USER,'content':'不放糖可以吗?'})response=Generation.call(Generation.Models.qwen_turbo,messages=messages,result_format='message')123456官方代码fromhttpimportHTTPStatusfromdashscopeimportGenerationfromdashscope.api_entities.dashscope_responseimportRoledefconversation_with_messages():messages=[{'role':Role.SYSTEM,'content':'Youareahelpfulassistant.'},{'role':Role.USER,'content':'如何做西红柿炖牛腩?'}]response=Generation.call(Generation.Models.qwen_turbo,messages=messages,result_format='message',#settheresulttobe"message"format.)ifresponse.status_code==HTTPStatus.OK:print(response)#appendresulttomessages.messages.append({'role':response.output.choices[0]['message']['role'],'content':response.output.choices[0]['message']['content']})else:print('Requestid:%s,Statuscode:%s,errorcode:%s,errormessage:%s'%(response.request_id,response.status_code,response.code,response.message))messages.append({'role':Role.USER,'content':'不放糖可以吗?'})#makesecondroundcallresponse=Generation.call(Generation.Models.qwen_turbo,messages=messages,result_format='message',#settheresulttobe"message"format.)ifresponse.status_code==HTTPStatus.OK:print(response)else:print('Requestid:%s,Statuscode:%s,errorcode:%s,errormessage:%s'%(response.request_id,response.status_code,response.code,response.message))if__name__=='__main__':conversation_with_messages()12345678910111213141516171819202122232425262728293031323334353637383940416.4流式输出流式输出(StreamingOutput)是一种数据处理和输出的方式,其中数据连续地、实时地被发送和接收,而不是在所有数据都准备好后一次性发送。这种方法常用于处理实时数据流和大型数据集,尤其是在数据量太大以至于无法一次性完全加载到内存中的情况。精简代码如下,将API中stream和incremental_output两个变量设置成Ture就可以流式输出返回的responses是一个迭代器,所以需要通过for来迭代读取其内部信息fromdashscopeimportGeneration#如果环境变量配置无效请启用以下代码#dashscope.api_key='yourapi'messages=[{'role':'user','content':'如何做西红柿炖牛腩?'}]responses=Generation.call(Generation.Models.qwen_turbo,messages=messages,result_format='message',stream=True,incremental_output=True)forresponseinresponses:print(response.output.choices[0]['message']['content'],end='')1234567891011官方代码如下fromhttpimportHTTPStatusfromdashscopeimportGenerationdefcall_with_stream():messages=[{'role':'user','content':'如何做西红柿炖牛腩?'}]responses=Generation.call(Generation.Models.qwen_turbo,messages=messages,result_format='message',#settheresulttobe"message"format.stream=True,incremental_output=True#getstreamingoutputincrementally)full_content=''#withincrementallyweneedtomergeoutput.forresponseinresponses:ifresponse.status_code==HTTPStatus.OK:full_content+=response.output.choices[0]['message']['content']print(response)else:print('Requestid:%s,Statuscode:%s,errorcode:%s,errormessage:%s'%(response.request_id,response.status_code,response.code,response.message))print('Fullresponse:\n'+full_content)if__name__=='__main__':call_with_stream()12345678910111213141516171819202122232425262728297.通过控制台输入实现多轮对话-非流式输出最后根据对文档的理解,实现一个使用pycharm的控制台输入然后实现多轮输出的过程,用来实现网页版的对话模式,首先不使流式输出多轮对话中参数量更大的模型对上下文的理解更出色,但运行的时间较长,也就是不使用流式输出的话,对话体验会非常不好,小模型也能正确回答一般回答的会比较精,适合不需要深入理解对话的应用场景测试文本如下:#现在请你扮演一个角色你叫航宝,今年4岁了,喜欢编程,擅长python,喜欢吃麻婆豆腐#那你今年多大了呀#你最喜欢吃的菜是什么呢#你擅长什么编程语言呢1234下面的GIF是使用qwen_max模型也就是默认模型中的最大模型进行实际的对话的效果,虽然设备网速之间会略有差异,我的设备是win1064位,网络用的5G的手机热点。代码如下:为了精简代码易于理解,直接使用了一个需要手动退出的while死循环fromdashscopeimportGenerationfromdashscope.api_entities.dashscope_responseimportRolemessages=[]whileTrue:message=input('user:')#将输入信息加入历史对话messages.append({'role':Role.USER,'content':message})#获得模型输出结果response=Generation.call(Generation.Models.qwen_max,messages=messages,result_format='message')print('system:'+response.output.choices[0]['message']['content'])#将输出信息加入历史对话messages.append({'role':response.output.choices[0]['message']['role'],'content':response.output.choices[0]['message']['content']})12345678910111213148.通过控制台输入实现多轮对话-流式输出接下来看一下流式输出的效果,可以看到虽然从打印第一段文字到最后一段总体用时还是很长,但是流式输出就不会给人一种尴尬的等待的时间。代码如下fromdashscopeimportGenerationfromdashscope.api_entities.dashscope_responseimportRolemessages=[]whileTrue:message=input('user:')messages.append({'role':Role.USER,'content':message})whole_message=''responses=Generation.call(Generation.Models.qwen_max,messages=messages,result_format='message',stream=True,incremental_output=True)print('system:',end='')forresponseinresponses:whole_message+=response.output.choices[0]['message']['content']print(response.output.choices[0]['message']['content'],end='')print()messages.append({'role':'assistant','content':whole_message})12345678910111213141516使用qwen_turbo小模型流式输出效果如下9.参考文档链接总结通义千问网页使用版本地址:https://tongyi.aliyun.com/qianwen/通义千问官网文档地址:https://help.aliyun.com/zh/dashscope/developer-reference/API-KEY设置地址官方文档网址:https://help.aliyun.com/zh/dashscope/developer-reference/api-key-settings使用通义千问对Token进行切分官方文档网址:https://help.aliyun.com/zh/dashscope/developer-reference/token-api使用通义千问进行对话API官方文档网址:https://help.aliyun.com/zh/dashscope/developer-reference/quick-start资源绑定资源绑定中总结了所有代码
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 会员注册

本版积分规则

QQ|手机版|心飞设计-版权所有:微度网络信息技术服务中心 ( 鲁ICP备17032091号-12 )|网站地图

GMT+8, 2024-12-25 13:11 , Processed in 1.579516 second(s), 26 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表