大模型估计已经是很多同学平常必备的工具了,不过日常个人使用都是在网页版或者在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 HTTPStatus
from 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 OpenAI
from pathlib import Path
import 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 MultiModalConversation
from 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"])
##下一轮对话,与上格式相同
获得了输出结果,就可以根据你自己的需求修改格式,输出你需要的报告了。