Py学习  »  Python

阿里通义千问大模型API调用(python版)

玩转ATGC • 7 月前 • 356 次点击  
大模型估计已经是很多同学平常必备的工具了,不过日常个人使用都是在网页版或者在App端使用。

不过总有些需求需要调用API,比如一下解读很多个文件或者图片,手动一次一次的输入很麻烦;或者为实现某自动化流程,有固定格式的输入和固定的问题,直接调用API实现自动化输出,省去了重复的工作。

老美的ChatGPT是NB,但国内阿里的通义千问和月之暗面的kimi也很厉害了,我平常都是三个对比着用,自我感觉国内的这两个模型不比ChatGPT差。

这次先写通义千问大模型API的调用方式。

首先介绍通义千问大模型不同的版本:

  • qwen-max是常规的纯文本对话版本,网页版后台就是使用该版本;

  • qwen-long是可以解读pdf,word等文档的版本;

  • qwen-vl是可以解读图片的版本;


  • qwen-plus和qwen-turbo应是qwen-max的升级版,也是纯文本对话版本。



收费也不贵,注册账号30天内100万免费的tokens(一个token相当于相当于 1.5-2 个汉字,没啥大工程的话,完全够用了),超过30天就得收费了。

qwen-long可以处理大文件,输出的话1000 tokens也就0.002元,输入是0.0005元,没啥大工程的话也没多少钱,qwen-max和qwen-vl贵一些。



那么就看看这三个模型分别如何调用:

首先获取API-KEY,登录阿里云百炼平台:

https://bailian.console.aliyun.com/#/home

点击个人头像,选择API-KEY:

进入API-KEY界面,点击创建新的API-KEY即可:

然后返回首页,点击模型下面的立即调用,就会看到可以调用一堆大模型:

具体如何调用呢?

测试了两个不同的python包,阿里自己的DashScope包,还有OpenAI包,哪个更方便选哪个。

首先纯文本对话模型:qwen-max,也可改为qwen-plus和qwen-turbo

from http import HTTPStatusfrom dashscope import Generation
apikey = "####你的apikey###"##询问第一个问题:“如何做西红柿炖牛腩?”messages = [{'role': 'system', 'content': 'You are a helpful assistant.'}, {'role': 'user', 'content': '如何做西红柿炖牛腩?'}]response = Generation.call(model="qwen-max", messages=messages, # 将输出设置为"message"格式 result_format='message', api_key=apikey) if response.status_code == HTTPStatus.OK: print(response.output.choices[0].message.content) # 将assistant的回复添加到messages列表中 messages.append({'role': response.output.choices[0]['message']['role'], 'content': response.output.choices[0]['message']['content']})else: print('Request id: %s, Status code: %s, error code: %s, error message: %s' % ( response.request_id, response.status_code, response.code, response.message )) # 如果响应失败,将最后一条user message从messages列表里删除,确保user/assistant消息交替出现 messages = messages[:-1] # 第二个问题messages.append({'role': 'user', 'content': '不放糖可以吗?'})# 进行第二轮模型的响应response = Generation.call(model="qwen-max", messages=messages, result_format='message', # 将输出设置为"message"格式 api_key=apikey )if response.status_code == HTTPStatus.OK: print(response.output.choices[0].message.content)else: print('Request id: %s, Status code: %s, error code: %s, error message: %s' % ( response.request_id, response.status_code, response.code, response.message    ))

返回结果:


然后是处理文本文件的qwen-long模型,亲测没问题:

from openai import OpenAIfrom pathlib import Pathimport os

##多轮对话函数 def chat(query, history): history.append({ "role": "user", "content": query }) completion = client.chat.completions.create( model="qwen-long", messages=history, ) result = completion.choices[0].message.content history.append({ "role": "assistant", "content": result }) return result  if __name__ == "__main__": apikey = "##你的apikey##" client = OpenAI( api_key=apikey, base_url="https://dashscope.aliyuncs.com/compatible-mode/v1", )
  输入文件:    file_object = client.files.create(file=Path("输入的文件路径(pdf,word等)"), purpose="file-extract") history = [ { "role": "system", "content": "You are a helpful assistant.", }, { "role": "system", "content": f'fileid://{file_object.id}', }, ]    ##运行函数,第一个问题    jiedu = chat("全面解读传入的文件", history) print(jiedu)    ##运行函数,第二个问题,需要将历史对话信息传入新一轮对话    advice = chat("有什么建议", history)    print(advice)    ##等等。。。。


最后是可解读图片的qwen-vl模型,亲测没问题:

from dashscope import MultiModalConversationfrom http import HTTPStatus

##多轮对话函数def chat(messages):  ##模型可以是qwen-vl-max也可以是qwen-vl-plus response = MultiModalConversation.call(model="qwen-vl-max", messages=messages, # 将输出设置为"message"格式 result_format='message', api_key=apikey) if response.status_code == HTTPStatus.OK: #prnt(response.output.choices[0].message.content) # 将assistant的回复添加到messages列表中 messages.append({'role': response.output.choices[0]['message']['role'], 'content' : response.output.choices[0]['message']['content']}) else: print('Request id: %s, Status code: %s, error code: %s, error message: %s' % ( response.request_id, response.status_code, response.code, response.message )) # 如果响应失败,将最后一条user message从messages列表里删除,确保user/assistant消息交替出现 messages = messages[:-1]    return response,messages
if __name__ == "__main__":    apikey = "##你的api-key##"    tarfig = "待解读图片路径" rawmessages = [{'role''system''content''You are a helpful assistant.'}]    ##第一轮对话 jiedu_mes =  {'role''user''content': [ {"image": tarfig},            {"text""全面解读该图片"} ]} rawmessages.append(jiedu_mes) jiedu,messages_jiedu = chat(rawmessages) print(jiedu.output.choices[0].message.content[0]["text"])    ##第二轮对话,需要将历史对话信息传入新一轮对话    advice_mes =  {'role''user''content'"有什么相关建议?"}    messages_jiedu.append(advice_mes)    advice,messages_advice = chat(messages_jiedu)    print(advice.output.choices[0].message.content[0]["text"])    ##下一轮对话,与上格式相同    


获得了输出结果,就可以根据你自己的需求修改格式,输出你需要的报告了。


Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/172119
 
356 次点击