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

大模型估计已经是很多同学平常必备的工具了,不过日常个人使用都是在网页版或者在App端使用。
不过总有些需求需要调用API,比如一下解读很多个文件或者图片,手动一次一次的输入很麻烦;或者为实现某自动化流程,有固定格式的输入和固定的问题,直接调用API实现自动化输出,省去了重复的工作。
老美的ChatGPT是NB,但国内阿里的通义千问和月之暗面的kimi也很厉害了,我平常都是三个对比着用,自我感觉国内的这两个模型不比ChatGPT差。
这次先写通义千问大模型API的调用方式。
首先介绍通义千问大模型不同的版本:

  • qwen-max是常规的纯文本对话版本,网页版后台就是使用该版本;
  • qwen-long是可以解读pdf,word等文档的版本;
  • qwen-vl是可以解读图片的版本;
  • qwen-plus和qwen-turbo应是qwen-max的升级版,也是纯文本对话版本。
1.webp
2.webp
收费也不贵,注册账号30天内100万免费的tokens(一个token相当于相当于 1.5-2 个汉字,没啥大工程的话,完全够用了),超过30天就得收费了。
qwen-long可以处理大文件,输出的话1000 tokens也就0.002元,输入是0.0005元,没啥大工程的话也没多少钱,qwen-max和qwen-vl贵一些。
3.webp
那么就看看这三个模型分别如何调用:
首先获取API-KEY,登录阿里云百炼平台:
https://bailian.console.aliyun.com/#/home
点击个人头像,选择API-KEY:
4.webp
进入API-KEY界面,点击创建新的API-KEY即可:
5.webp
然后返回首页,点击模型下面的立即调用,就会看到可以调用一堆模型版本:

6.webp
具体如何调用呢?
测试了两个不同的python包,阿里自己的DashScope包,还有OpenAI包,哪个更方便选哪个。
首先纯文本对话模型:qwen-max,也可改为qwen-plus和qwen-turbo
from http import HTTPStatusfrom dashscope import Generationapikey = "####你的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    ))返回结果:
7.webp
然后是处理文本文件的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模型,亲测没问题:
rom 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,messagesif __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"])    ##下一轮对话,与上格式相同    获得了输出结果,就可以根据你自己的需求修改格式,输出你需要的报告了。
收藏者
0
被浏览
81

3 个回答

cuiweizuishuai LV

发表于 2025-1-6 14:22:51

一个会话只能传一张图么?能一个会话传多张图多个问答么?

mssafia LV

发表于 2024-12-19 16:50:32

阿里自己的DashScope是不是不能调用本地大模型啊

史迪仔Ly LV

发表于 2024-9-2 14:05:37

为什么我问一个问题,在网页端得到回答只需要3秒左右,而在java后端得到response却要十几秒?

您需要登录后才可以回帖 登录 | 立即注册