一、简介
- DashScope是阿里云的一款模型服务产品,简化了AI模型的应用与部署。
- 对主流的AI大模型进行了标准化封装,提供API接口,方便开发者可以调用这些模型,并进行推理、训练、微调。
- 为开发者提供了从模型获取、使用到优化的一站式解决方案,极大地促进了AI技术在不同行业和场景中的广泛应用。
二、使用
1. 前提条件
- 已开通服务并获得API-KEY:开通DashScope并创建API-KEY。
- 通过 pip 安装 Python SDK。
pip install dashscope
2. 使用 Python 调用大模型
from http import HTTPStatus
import dashscope
import json
# 替换为自己的 API Key
dashscope.api_key="sk-xxxxxxxxxxxxxxxxxxxxxxxx"
# 打印优美的JSON
def print_json(data):
"""
打印参数。如果参数是有结构的(如字典或列表),则以格式化的 JSON 形式打印;
否则,直接打印该值。
"""
# 检查 data 是否是列表(list)或字典(dict)
if (isinstance(data, (list, dict))):
# Python对象 转 JSON字符串
# indent=4参数表示在输出的JSON字符串中,每一级缩进4个空格。
# ensure_ascii=False参数表示在输出的JSON字符串中,非ASCII字符将被输出为原始的Unicode,而不是被转义。
print(json.dumps(data, indent=4, ensure_ascii=False))
else:
print(data)
def sample_sync_call():
prompt_text = '用萝卜、土豆、茄子做饭,给我个菜谱。'
resp = dashscope.Generation.call(
model='qwen-turbo',
prompt=prompt_text
)
# 如果响应的状态码是 HTTPStatus.OK,表示成功,
# 否则表示请求失败,您可以从 code 和 message 中获取错误代码和信息。
if resp.status_code == HTTPStatus.OK:
print_json(resp)
else:
print_json(resp)
sample_sync_call()
- 输出结果:
{
"status_code": 200,
"request_id": "748f56b5-6d6a-9640-a4d9-2f25ca87cbe5",
"code": "",
"message": "",
"output": {
"text": "当然可以,这里是一个简单易做的三菜一汤的建议,以萝卜、土豆和茄子为主料:\n\n**菜品一:红烧萝卜**\n食材:萝卜半个,土豆1个,生抽、老抽、糖、盐适量,清水适量,食用油少许。\n步骤:\n1. 萝卜、土豆洗净切块,备用。\n2. 热锅凉油,放入糖小火慢慢炒化,炒至红色泡沫冒出来。\n3. 加入切好的萝卜块,翻煎均匀,让萝卜块表面裹上糖色。\n4. 倒入足够的清水,加入生抽、老抽,盖上锅盖煮15分钟左右。\n5. 加入土豆块,继续煮10分钟,直到土豆熟透,加盐调味即可。\n\n**菜品二:土豆烧茄子**\n食材:茄子2个,土豆1个,蒜末、姜末、盐、生抽、糖、食用油适量。\n步骤:\n1. 茄子切滚刀块,土豆去皮切块,用淀粉水浸泡备用。\n2. 热锅冷油,放入土豆块炸至金黄捞出,再炸茄子至微焦。\n3. 锅中留底油,加入蒜末、姜末炒香。\n4. 放入炸好的土豆和茄子,加入生抽、糖、盐调味,翻炒均匀后出锅。\n\n**菜品三:清炒蒜蓉茄子**\n食材:茄子2个,大蒜3瓣,盐、生抽、食用油适量。\n步骤:\n1. 茄子切段,大蒜剁成蒜蓉。\n2. 热锅凉油,下蒜蓉炒香,然后放入茄子翻炒。\n3. 加入适量的盐和生抽调味,炒至茄子软烂即可。\n\n**汤品:蔬菜豆腐汤**\n食材:豆腐1块,胡萝卜半根,萝卜半个,土豆1个,清水适量,盐适量。\n步骤:\n1. 豆腐切块,胡萝卜、土豆和萝卜切片。\n2. 烧开一锅水,加入所有蔬菜和豆腐,慢炖15-20分钟。\n3. 最后加盐调味,煮沸即可。\n\n以上就是一道简单的三菜一汤,营养均衡,希望你会喜欢!",
"finish_reason": "stop",
"choices": null
},
"usage": {
"input_tokens": 32,
"output_tokens": 489,
"total_tokens": 521
}
}
3. 接收流式输出
上述代码的会在整体文本生成完成后,一次性返回所有输出结果。修改代码设置stream=True
,可以让大模型一边生成一边输出,即通过流式输出的方式尽快的将中间结果显示在屏幕上。
- 完整代码
from http import HTTPStatus
import dashscope
dashscope.api_key="sk-xxxxxxxxxxxxxxxxxxxxxxxx"
def sample_call_streaming():
prompt_text = '用萝卜、土豆、茄子做饭,给我个菜谱。'
response_generator = dashscope.Generation.call(
model='qwen-turbo',
prompt=prompt_text,
stream=True, # 流式输出
top_p=0.8
)
# 流式输出,需要通过迭代来获得结果。
for response in response_generator:
if response.status_code == HTTPStatus.OK:
print(response.output)
else:
print(response)
sample_call_streaming()
- 输出结果:
{
"text": "当然", "finish_reason": "null", "choices": null}
{
"text": "当然可以", "finish_reason": "null", "choices": null}
{
"text": "当然可以,", "finish_reason": "null", "choices": null}
{
"text": "当然可以,这里有一个简单的三菜", "finish_reason": "null", "choices": null}
{
"text": "当然可以,这里有一个简单的三菜一汤的菜谱,使用萝卜", "finish_reason": "null", "choices": null}
{
"text": "当然可以,这里有一个简单的三菜一汤的菜谱,使用萝卜、土豆和茄子:\n\n**菜品一", "finish_reason": "null", "choices": null}
{
"text": "当然可以,这里有一个简单的三菜一汤的菜谱,使用萝卜、土豆和茄子:\n\n**菜品一:红烧萝卜土豆**\n食材:", "finish_reason": "null", "choices": null}
{
"text": "当然可以,这里有一个简单的三菜一汤的菜谱,使用萝卜、土豆和茄子:\n\n**菜品一:红烧萝卜土豆**\n食材:萝卜半个,土豆2个,生", "finish_reason": "null", "choices": null}
{
"text": "当然可以,这里有一个简单的三菜一汤的菜谱,使用萝卜、土豆和茄子:\n\n**菜品一:红烧萝卜土豆**\n食材:萝卜半个,土豆2个,生抽、老抽、糖、盐", "finish_reason": "null", "choices": null}
{
"text": "当然可以,这里有一个简单的三菜一汤的菜谱,使用萝卜、土豆和茄子:\n\n**菜品一:红烧萝卜土豆**\n食材:萝卜半个,土豆2个,生抽、老抽、糖、盐、葱姜适量,清水适量。\n", "finish_reason": "null", "choices": null}
{
"text": "当然可以,这里有一个简单的三菜一汤的菜谱,使用萝卜、土豆和茄子:\n\n**菜品一:红烧萝卜土豆**\n食材:萝卜半个,土豆2个,生抽、老抽、糖、盐、葱姜适量,清水适量。\n步骤:\n1. 萝卜", "finish_reason":