首次调用通义千问API_大模型服务平台百炼(Model Studio)-阿里云帮助中心
https://help.aliyun.com/zh/model-studio/getting-started/first-api-call-to-qwen?spm=a2c4g.11186623.help-menu-2400256.d_0_1_0.8c693048HxtUzZ&scm=20140722.H_2840915._.OR_help-T_cn~zh-V_1
一、开通账号
-
注册账号:如果没有阿里云账号,您需要先注册阿里云账号。
-
开通百炼:前往百炼控制台,如果页面顶部显示以下消息,您需要开通百炼的模型服务,以获得免费额度。如果未显示该消息,则表示您已经开通。
-
获取API Key:在控制台的右上角选择API-KEY,然后创建API Key,用于通过API调用大模型。
二、配置环境
2.1 linux系统配置API Key到环境变量
(也可跳过,直接输入,复制代码过程中不安全)
echo "export DASHSCOPE_API_KEY='YOUR_DASHSCOPE_API_KEY'" >> ~/.bashrc
执行以下命令,使变更生效。
source ~/.bashrc
重新打开一个终端窗口,运行以下命令检查环境变量是否生效。
echo $DASHSCOPE_API_KEY
2.2 windows系统cmd添加
添加永久性环境变量
如果您希望API Key环境变量在当前用户的所有新会话中生效,可以按如下操作。
-
在CMD中运行以下命令。
# 用您的 DashScope API Key 代替 YOUR_DASHSCOPE_API_KEY setx DASHSCOPE_API_KEY "YOUR_DASHSCOPE_API_KEY"
-
打开一个新的CMD窗口。
-
在新的CMD窗口运行以下命令,检查环境变量是否生效。
echo %DASHSCOPE_API_KEY%
2.3 安装 依赖 (之前需要安装python)
pip3 install -U openai
# pip3 install -U dashscope
三、测试代码 (可对一个文件夹图片打标)
3.1 文字智能助手 (官方hello-world)
import os
from openai import OpenAI
try:
client = OpenAI(
# 若没有配置环境变量,请用百炼API Key将下行替换为:api_key="sk-xxx",
# api_key="sk-xxx"
api_key=os.getenv("DASHSCOPE_API_KEY"),
base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",
)
completion = client.chat.completions.create(
model="qwen-plus", # 模型列表:https://help.aliyun.com/zh/model-studio/getting-started/models
messages=[
{'role': 'system', 'content': 'You are a helpful assistant.'},
{'role': 'user', 'content': '你是谁?'}
]
)
print(completion.choices[0].message.content)
except Exception as e:
print(f"错误信息:{e}")
print("请参考文档:https://help.aliyun.com/zh/model-studio/developer-reference/error-code")
3.2 上传本地图片并进行打标 (记得改文件类型)
from openai import OpenAI
import os
import base64
# base 64 编码格式
def encode_image(image_path):
with open(image_path, "rb") as image_file:
return base64.b64encode(image_file.read()).decode("utf-8")
input_image_path = r"C:\Users\admin\Downloads\anytext.png"
base64_image = encode_image(input_image_path)
client = OpenAI(
# 若没有配置环境变量,请用百炼API Key将下行替换为:api_key="sk-xxx"
api_key=os.getenv('DASHSCOPE_API_KEY'),
base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",
)
completion = client.chat.completions.create(
model="qwen-vl-max-latest",
messages=[
{
"role": "user",
"content": [
{
"type": "image_url",
# 需要注意,传入BASE64,图像格式(即image/{format})需要与支持的图片列表中的Content Type保持一致。"f"是字符串格式化的方法。
# PNG图像: f"data:image/png;base64,{base64_image}"
# JPEG图像: f"data:image/jpeg;base64,{base64_image}"
# WEBP图像: f"data:image/webp;base64,{base64_image}"
"image_url": {"url": f"data:image/jpeg;base64,{base64_image}"},
},
{"type": "text", "text": "描述这张图片,分别用中文,英文2种方式"},
],
}
],
)
print(completion.choices[0].message.content)
3.2.1 本地的图片与运行结果结果
3.3 上传一张图片or 对一个文件夹打标,将图片打标后保存到txt
one_img_qwenvl_2_txt(input_image_path) # 单张图片
dir_img_qwenvl_2_txt(r"D:\code\test") # 处理文件夹
其中,下面代码可有针对性指导打标结果,可以输出制定格式
{"type": "text", "text": "详细描述这张图片。分别用中文,英文2种方式描述,中文和英文间,用\n隔开"},
from openai import OpenAI
import os
import base64
import time
# base 64 编码格式
def encode_image(image_path):
with open(image_path, "rb") as image_file:
return base64.b64encode(image_file.read()).decode("utf-8")
def img2text(input_image_path):
img_type=input_image_path.rsplit('.')[1] # 从右边的第一个‘.’分割一次, “xxxx/xx.png”=["xxxx/xx/xx.","png" ],所以取第2个元素
print('img_type:',img_type)
base64_image = encode_image(input_image_path)
client = OpenAI(
# 若没有配置环境变量,请用百炼API Key将下行替换为:api_key="sk-xxx"
api_key=os.getenv('DASHSCOPE_API_KEY'),
base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",
)
completion = client.chat.completions.create(
model="qwen-vl-max-latest",
messages=[
{
"role": "user",
"content": [
{
"type": "image_url",
# 需要注意,传入BASE64,图像格式(即image/{format})需要与支持的图片列表中的Content Type保持一致。"f"是字符串格式化的方法。
# PNG图像: f"data:image/png;base64,{base64_image}"
# JPEG图像: f"data:image/jpeg;base64,{base64_image}"
# WEBP图像: f"data:image/webp;base64,{base64_image}"
"image_url": {"url": f"data:image/{img_type};base64,{base64_image}"},
},
{"type": "text", "text": "详细描述这张图片。分别用中文,英文2种方式描述,中文和英文间,用\n隔开"},
],
}
],
)
content=completion.choices[0].message.content
print(content)
return content
def write_txt(content,name,out_dir='./'):
with open(f'{out_dir}/{name}.txt', 'w') as f:
f.write(content)
def one_img_qwenvl_2_txt(input_image_path):
t1=time.time()
img_dir=os.path.dirname(input_image_path)
content=img2text(input_image_path)
name=os.path.basename(input_image_path).rsplit('.')[0] # 取文件名,去掉后缀
# print('img_dir:file_name',img_dir,name)
cn_text,en_text=content.split('\n') # 根据输出结果进行解析
write_txt(en_text,name,img_dir)
print(f'img {name} cost time:',round(time.time()-t1,2),"秒")
return cn_text,en_text
def dir_img_qwenvl_2_txt(img_dir):
img_list=[ file for file in os.listdir(img_dir) if file.endswith((".jpg", ".png", ".jpeg", ".webp"))]
t0=time.time()
for img_file in img_list:
# print('img_file',img_file)
input_image_path=os.path.join(img_dir,img_file)
cn_text,en_text=one_img_qwenvl_2_txt(input_image_path)
print('Dir cost time:',round(time.time()-t0,2),"秒")
if __name__ == '__main__':
input_image_path = r"D:\code\0train\feij.png"
one_img_qwenvl_2_txt(input_image_path) # 单张图片
dir_img_qwenvl_2_txt(r"D:\code\test") # 处理文件夹
3.3.1 对文件夹打标结果
log