社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

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

玩转ATGC • 5 月前 • 290 次点击  
大模型估计已经是很多同学平常必备的工具了,不过日常个人使用都是在网页版或者在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
 
290 次点击