首次调用通义千问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 OpenAItry: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/modelsmessages=[{'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.contentprint(content)return contentdef 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_textdef 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