通义千问API参考

本文介绍通义千问 API 的输入与输出参数,并提供 Python 等主流语言在典型场景下的调用示例。

模型介绍、选型建议和使用方法请参考文本生成模型概述

可通过 OpenAI 兼容或 DashScope 协议调用通义千问 API。

OpenAI 兼容

OpenAI 兼容接口在线调试

POST https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions

北京地域

SDK 调用配置的base_urlhttps://dashscope.aliyuncs.com/compatible-mode/v1

HTTP 请求地址:POST https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions

新加坡地域

SDK 调用配置的base_urlhttps://dashscope-intl.aliyuncs.com/compatible-mode/v1

HTTP 请求地址:POST https://dashscope-intl.aliyuncs.com/compatible-mode/v1/chat/completions

金融云

SDK 调用配置的base_urlhttps://dashscope-finance.aliyuncs.com/compatible-mode/v1

HTTP 请求地址:POST https://dashscope-finance.aliyuncs.com/compatible-mode/v1/chat/completions

您需要先获取API Key配置API Key到环境变量。若通过OpenAI SDK进行调用,需要安装SDK

请求体

文本输入

Python

import os
from openai import OpenAI

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(
    # 模型列表:https://help.aliyun.com/zh/model-studio/getting-started/models
    model="qwen-plus",
    messages=[
        {"role": "system", "content": "You are a helpful assistant."},
        {"role": "user", "content": "你是谁?"},
    ]
)
print(completion.model_dump_json())

Java

// 该代码 OpenAI SDK 版本为 2.6.0
import com.openai.client.OpenAIClient;
import com.openai.client.okhttp.OpenAIOkHttpClient;
import com.openai.models.chat.completions.ChatCompletion;
import com.openai.models.chat.completions.ChatCompletionCreateParams;

public class Main {
    public static void main(String[] args) {
        OpenAIClient client = OpenAIOkHttpClient.builder()
                .apiKey(System.getenv("DASHSCOPE_API_KEY"))
                .baseUrl("https://dashscope.aliyuncs.com/compatible-mode/v1")
                .build();

        ChatCompletionCreateParams params = ChatCompletionCreateParams.builder()
                .addUserMessage("你是谁")
                .model("qwen-plus")
                .build();

        try {
            ChatCompletion chatCompletion = client.chat().completions().create(params);
            System.out.println(chatCompletion);
        } catch (Exception e) {
            System.err.println("Error occurred: " + e.getMessage());
            e.printStackTrace();
        }
    }
}

Node.js

import OpenAI from "openai";

const openai = new OpenAI(
    {
        // 若没有配置环境变量,请用百炼API Key将下行替换为:apiKey: "sk-xxx",
        apiKey: process.env.DASHSCOPE_API_KEY,
        baseURL: "https://dashscope.aliyuncs.com/compatible-mode/v1"
    }
);

async function main() {
    const completion = await openai.chat.completions.create({
        model: "qwen-plus",  //此处以qwen-plus为例,可按需更换模型名称。模型列表:https://help.aliyun.com/zh/model-studio/getting-started/models
        messages: [
            { role: "system", content: "You are a helpful assistant." },
            { role: "user", content: "你是谁?" }
        ],
    });
    console.log(JSON.stringify(completion))
}

main();

Go

package main

import (
	"context"
	"os"

	"github.com/openai/openai-go"
	"github.com/openai/openai-go/option"
)

func main() {
	client := openai.NewClient(
		option.WithAPIKey(os.Getenv("DASHSCOPE_API_KEY")),
		option.WithBaseURL("https://dashscope.aliyuncs.com/compatible-mode/v1"),
	)
	chatCompletion, err := client.Chat.Completions.New(
		context.TODO(), openai.ChatCompletionNewParams{
			Messages: []openai.ChatCompletionMessageParamUnion{
				openai.UserMessage("你是谁"),
			},
			Model: "qwen-plus",
		},
	)

	if err != nil {
		panic(err.Error())
	}

	println(chatCompletion.Choices[0].Message.Content)
}

C#(HTTP)

using System.Net.Http.Headers;
using System.Text;

class Program
{
    private static readonly HttpClient httpClient = new HttpClient();

    static async Task Main(string[] args)
    {
        // 若没有配置环境变量,请用百炼API Key将下行替换为:string? apiKey = "sk-xxx";
        string? apiKey = Environment.GetEnvironmentVariable("DASHSCOPE_API_KEY");

        if (string.IsNullOrEmpty(apiKey))
        {
            Console.WriteLine("API Key 未设置。请确保环境变量 'DASHSCOPE_API_KEY' 已设置。");
            return;
        }

        // 设置请求 URL 和内容
        string url = "https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions";
        // 此处以qwen-plus为例,可按需更换模型名称。模型列表:https://help.aliyun.com/zh/model-studio/getting-started/models
        string jsonContent = @"{
            ""model"": ""qwen-plus"",
            ""messages"": [
                {
                    ""role"": ""system"",
                    ""content"": ""You are a helpful assistant.""
                },
                {
                    ""role"": ""user"", 
                    ""content"": ""你是谁?""
                }
            ]
        }";

        // 发送请求并获取响应
        string result = await SendPostRequestAsync(url, jsonContent, apiKey);

        // 输出结果
        Console.WriteLine(result);
    }

    private static async Task<string> SendPostRequestAsync(string url, string jsonContent, string apiKey)
    {
        using (var content = new StringContent(jsonContent, Encoding.UTF8, "application/json"))
        {
            // 设置请求头
            httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", apiKey);
            httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

            // 发送请求并获取响应
            HttpResponseMessage response = await httpClient.PostAsync(url, content);

            // 处理响应
            if (response.IsSuccessStatusCode)
            {
                return await response.Content.ReadAsStringAsync();
            }
            else
            {
                return $"请求失败: {response.StatusCode}";
            }
        }
    }
}

PHP(HTTP)

<?php
// 设置请求的URL
$url = 'https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions';
// 若没有配置环境变量,请用百炼API Key将下行替换为:$apiKey = "sk-xxx";
$apiKey = getenv('DASHSCOPE_API_KEY');
// 设置请求头
$headers = [
    'Authorization: Bearer '.$apiKey,
    'Content-Type: application/json'
];
// 设置请求体
$data = [
    // 此处以qwen-plus为例,可按需更换模型名称。模型列表:https://help.aliyun.com/zh/model-studio/getting-started/models
    "model" => "qwen-plus",
    "messages" => [
        [
            "role" => "system",
            "content" => "You are a helpful assistant."
        ],
        [
            "role" => "user",
            "content" => "你是谁?"
        ]
    ]
];
// 初始化cURL会话
$ch = curl_init();
// 设置cURL选项
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
// 执行cURL会话
$response = curl_exec($ch);
// 检查是否有错误发生
if (curl_errno($ch)) {
    echo 'Curl error: ' . curl_error($ch);
}
// 关闭cURL资源
curl_close($ch);
// 输出响应结果
echo $response;
?>

curl

curl -X POST https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions \
-H "Authorization: Bearer $DASHSCOPE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
    "model": "qwen-plus",
    "messages": [
        {
            "role": "system",
            "content": "You are a helpful assistant."
        },
        {
            "role": "user",
            "content": "你是谁?"
        }
    ]
}'

流式输出

相关文档:流式输出

Python

import os
from openai import OpenAI

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-plus",  # 此处以qwen-plus为例,可按需更换模型名称。模型列表:https://help.aliyun.com/zh/model-studio/getting-started/models
    messages=[{'role': 'system', 'content': 'You are a helpful assistant.'},
                {'role': 'user', 'content': '你是谁?'}],
    stream=True,
    stream_options={"include_usage": True}
    )
for chunk in completion:
    print(chunk.model_dump_json())

Node.js

import OpenAI from "openai";

const openai = new OpenAI(
    {
        // 若没有配置环境变量,请用百炼API Key将下行替换为:apiKey: "sk-xxx",
        apiKey: process.env.DASHSCOPE_API_KEY,
        baseURL: "https://dashscope.aliyuncs.com/compatible-mode/v1"
    }
);

async function main() {
    const completion = await openai.chat.completions.create({
        model: "qwen-plus", // 此处以qwen-plus为例,可按需更换模型名称。模型列表:https://help.aliyun.com/zh/model-studio/getting-started/models
        messages: [
            {"role": "system", "content": "You are a helpful assistant."},
            {"role": "user", "content": "你是谁?"}
        ],
        stream: true,
        stream_options: {include_usage: true}
    });
    for await (const chunk of completion) {
        console.log(JSON.stringify(chunk));
    }
}

main();

curl

curl --location "https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions" \
--header "Authorization: Bearer $DASHSCOPE_API_KEY" \
--header "Content-Type: application/json" \
--data '{
    "model": "qwen-plus",
    "messages": [
        {
            "role": "system",
            "content": "You are a helpful assistant."
        },
        {
            "role": "user",
            "content": "你是谁?"
        }
    ],
    "stream":true,
    "stream_options": {
        "include_usage": true
    }
}'

图像输入

相关文档:视觉理解

Python

import os
from openai import OpenAI

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-plus",  # 此处以qwen-vl-plus为例,可按需更换模型名称。模型列表:https://help.aliyun.com/zh/model-studio/getting-started/models
    messages=[{"role": "user","content": [
            {"type": "image_url",
             "image_url": {"url": "https://dashscope.oss-cn-beijing.aliyuncs.com/images/dog_and_girl.jpeg"}},
            {"type": "text", "text": "这是什么"},
            ]}]
    )
print(completion.model_dump_json())

Node.js

import OpenAI from "openai";

const openai = new OpenAI(
    {
        // 若没有配置环境变量,请用百炼API Key将下行替换为:apiKey: "sk-xxx",
        apiKey: process.env.DASHSCOPE_API_KEY,
        baseURL: "https://dashscope.aliyuncs.com/compatible-mode/v1"
    }
);

async function main() {
    const response = await openai.chat.completions.create({
        model: "qwen-vl-max", // 此处以qwen-vl-max为例,可按需更换模型名称。模型列表:https://help.aliyun.com/zh/model-studio/getting-started/models
        messages: [{role: "user",content: [
            { type: "image_url",image_url: {"url": "https://dashscope.oss-cn-beijing.aliyuncs.com/images/dog_and_girl.jpeg"}},
            { type: "text", text: "这是什么?" },
        ]}]
    });
    console.log(JSON.stringify(response));
}

main();

curl

curl -X POST https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions \
-H "Authorization: Bearer $DASHSCOPE_API_KEY" \
-H 'Content-Type: application/json' \
-d '{
  "model": "qwen-vl-plus",
  "messages": [{
      "role": "user",
      "content": [
       {"type": "image_url","image_url": {"url": "https://dashscope.oss-cn-beijing.aliyuncs.com/images/dog_and_girl.jpeg"}},
       {"type": "text","text": "这是什么"}
       ]}]
}'

视频输入

以下示例展示了如何将图片列表作为视频输入。如需使用视频文件等其他方式,请参阅“视觉理解

Python

import os
from openai import OpenAI

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(
    # 此处以qwen-vl-max-latest为例,可按需更换模型名称。模型列表:https://help.aliyun.com/zh/model-studio/getting-started/models
    model="qwen-vl-max-latest",
    messages=[{
        "role": "user",
        "content": [
            {
                "type": "video",
                "video": [
                    "https://img.alicdn.com/imgextra/i3/O1CN01K3SgGo1eqmlUgeE9b_!!6000000003923-0-tps-3840-2160.jpg",
                    "https://img.alicdn.com/imgextra/i4/O1CN01BjZvwg1Y23CF5qIRB_!!6000000003000-0-tps-3840-2160.jpg",
                    "https://img.alicdn.com/imgextra/i4/O1CN01Ib0clU27vTgBdbVLQ_!!6000000007859-0-tps-3840-2160.jpg",
                    "https://img.alicdn.com/imgextra/i1/O1CN01aygPLW1s3EXCdSN4X_!!6000000005710-0-tps-3840-2160.jpg"]
            },
            {
                "type": "text",
                "text": "描述这个视频的具体过程"
            }]}]
)
print(completion.model_dump_json())

Node.js

// 确保之前在 package.json 中指定了 "type": "module"
import OpenAI from "openai";

const openai = new OpenAI({
    // 若没有配置环境变量,请用百炼API Key将下行替换为:apiKey: "sk-xxx",
    apiKey: process.env.DASHSCOPE_API_KEY, 
    baseURL: "https://dashscope.aliyuncs.com/compatible-mode/v1"
});

async function main() {
    const response = await openai.chat.completions.create({
        // 此处以qwen-vl-max-latest为例,可按需更换模型名称。模型列表:https://help.aliyun.com/zh/model-studio/getting-started/models 
        model: "qwen-vl-max-latest",
        messages: [{
            role: "user",
            content: [
                {
                    type: "video",
                    video: [
                        "https://img.alicdn.com/imgextra/i3/O1CN01K3SgGo1eqmlUgeE9b_!!6000000003923-0-tps-3840-2160.jpg",
                        "https://img.alicdn.com/imgextra/i4/O1CN01BjZvwg1Y23CF5qIRB_!!6000000003000-0-tps-3840-2160.jpg",
                        "https://img.alicdn.com/imgextra/i4/O1CN01Ib0clU27vTgBdbVLQ_!!6000000007859-0-tps-3840-2160.jpg",
                        "https://img.alicdn.com/imgextra/i1/O1CN01aygPLW1s3EXCdSN4X_!!6000000005710-0-tps-3840-2160.jpg"
                    ]
                },
                {
                    type: "text",
                    text: "描述这个视频的具体过程"
                }
        ]}]
    });
    console.log(JSON.stringify(response));
}

main();

curl

curl -X POST https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions \
-H "Authorization: Bearer $DASHSCOPE_API_KEY" \
-H 'Content-Type: application/json' \
-d '{
    "model": "qwen-vl-max-latest",
    "messages": [
        {
            "role": "user",
            "content": [
                {
                    "type": "video",
                    "video": [
                        "https://img.alicdn.com/imgextra/i3/O1CN01K3SgGo1eqmlUgeE9b_!!6000000003923-0-tps-3840-2160.jpg",
                        "https://img.alicdn.com/imgextra/i4/O1CN01BjZvwg1Y23CF5qIRB_!!6000000003000-0-tps-3840-2160.jpg",
                        "https://img.alicdn.com/imgextra/i4/O1CN01Ib0clU27vTgBdbVLQ_!!6000000007859-0-tps-3840-2160.jpg",
                        "https://img.alicdn.com/imgextra/i1/O1CN01aygPLW1s3EXCdSN4X_!!6000000005710-0-tps-3840-2160.jpg"
                    ]
                },
                {
                    "type": "text",
                    "text": "描述这个视频的具体过程"
                }
            ]
        }
    ]
}'

工具调用

相关文档:Function Calling

Python

import os
from openai import OpenAI

client = OpenAI(
    # 若没有配置环境变量,请用百炼API Key将下行替换为:api_key="sk-xxx"
    api_key=os.getenv("DASHSCOPE_API_KEY"),
    base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",  # 填写DashScope SDKbase_url
)

tools = [
    # 工具1 获取当前时刻的时间
    {
        "type": "function",
        "function": {
            "name": "get_current_time",
            "description": "当你想知道现在的时间时非常有用。",
            "parameters": {}  # 因为获取当前时间无需输入参数,因此parameters为空字典
        }
    },  
    # 工具2 获取指定城市的天气
    {
        "type": "function",
        "function": {
            "name": "get_current_weather",
            "description": "当你想查询指定城市的天气时非常有用。",
            "parameters": {  
                "type": "object",
                "properties": {
                    # 查询天气时需要提供位置,因此参数设置为location
                    "location": {
                        "type": "string",
                        "description": "城市或县区,比如北京市、杭州市、余杭区等。"
                    }
                },
                "required": ["location"]
            }
        }
    }
]
messages = [{"role": "user", "content": "杭州天气怎么样"}]
completion = client.chat.completions.create(
    model="qwen-plus",  # 此处以qwen-plus为例,可按需更换模型名称。模型列表:https://help.aliyun.com/zh/model-studio/getting-started/models
    messages=messages,
    tools=tools
)

print(completion.model_dump_json())

Node.js

import OpenAI from "openai";

const openai = new OpenAI(
    {
        // 若没有配置环境变量,请用百炼API Key将下行替换为:apiKey: "sk-xxx",
        apiKey: process.env.DASHSCOPE_API_KEY,
        baseURL: "https://dashscope.aliyuncs.com/compatible-mode/v1"
    }
);

const messages = [{"role": "user", "content": "杭州天气怎么样"}];
const tools = [
// 工具1 获取当前时刻的时间
{
    "type": "function",
    "function": {
        "name": "get_current_time",
        "description": "当你想知道现在的时间时非常有用。",
        // 因为获取当前时间无需输入参数,因此parameters为空
        "parameters": {}  
    }
},  
// 工具2 获取指定城市的天气
{
    "type": "function",
    "function": {
        "name": "get_current_weather",
        "description": "当你想查询指定城市的天气时非常有用。",
        "parameters": {  
            "type": "object",
            "properties": {
                // 查询天气时需要提供位置,因此参数设置为location
                "location": {
                    "type": "string",
                    "description": "城市或县区,比如北京市、杭州市、余杭区等。"
                }
            },
            "required": ["location"]
        }
    }
}
];

async function main() {
    const response = await openai.chat.completions.create({
        model: "qwen-plus", // 此处以qwen-plus为例,可按需更换模型名称。模型列表:https://help.aliyun.com/zh/model-studio/getting-started/models
        messages: messages,
        tools: tools,
    });
    console.log(JSON.stringify(response));
}

main();

curl

curl -X POST https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions \
-H "Authorization: Bearer $DASHSCOPE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
    "model": "qwen-plus",
    "messages": [
        {
            "role": "system",
            "content": "You are a helpful assistant."
        },
        {
            "role": "user", 
            "content": "杭州天气怎么样"
        }
    ],
    "tools": [
    {
        "type": "function",
        "function": {
            "name": "get_current_time",
            "description": "当你想知道现在的时间时非常有用。",
            "parameters": {}
        }
    },
    {
        "type": "function",
        "function": {
            "name": "get_current_weather",
            "description": "当你想查询指定城市的天气时非常有用。",
            "parameters": {
                "type": "object",
                "properties": {
                    "location":{
                        "type": "string",
                        "description": "城市或县区,比如北京市、杭州市、余杭区等。"
                    }
                },
                "required": ["location"]
            }
        }
    }
  ]
}'

联网搜索

Python

import os
from openai import OpenAI

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-plus",  # 此处以qwen-plus为例,可按需更换模型名称。模型列表:https://help.aliyun.com/zh/model-studio/getting-started/models
    messages=[
        {'role': 'system', 'content': 'You are a helpful assistant.'},
        {'role': 'user', 'content': '中国队在巴黎奥运会获得了多少枚金牌'}],
    extra_body={
        "enable_search": True
    }
    )
print(completion.model_dump_json())

Node.js

import OpenAI from "openai";

const openai = new OpenAI(
    {
        // 若没有配置环境变量,请用百炼API Key将下行替换为:apiKey: "sk-xxx",
        apiKey: process.env.DASHSCOPE_API_KEY,
        baseURL: "https://dashscope.aliyuncs.com/compatible-mode/v1"
    }
);
async function main() {
    const completion = await openai.chat.completions.create({
        model: "qwen-plus", //此处以qwen-plus为例,可按需更换模型名称。模型列表:https://help.aliyun.com/zh/model-studio/getting-started/models
        messages: [
            { role: "system", content: "You are a helpful assistant." },
            { role: "user", content: "中国队在巴黎奥运会获得了多少枚金牌" }
        ],
        enable_search:true
    });
    console.log(JSON.stringify(completion))
}

main();

curl

curl -X POST https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions \
-H "Authorization: Bearer $DASHSCOPE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
    "model": "qwen-plus",
    "messages": [
        {
            "role": "system",
            "content": "You are a helpful assistant."
        },
        {
            "role": "user", 
            "content": "中国队在巴黎奥运会获得了多少枚金牌"
        }
    ],
    "enable_search": true
}'

异步调用

import os
import asyncio
from openai import AsyncOpenAI
import platform

client = AsyncOpenAI(
    # 若没有配置环境变量,请用百炼API Key将下行替换为:api_key="sk-xxx"
    api_key=os.getenv("DASHSCOPE_API_KEY"),
    base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",
)

async def main():
    response = await client.chat.completions.create(
        messages=[{"role": "user", "content": "你是谁"}],
        model="qwen-plus",  # 此处以qwen-plus为例,可按需更换模型名称。模型列表:https://help.aliyun.com/zh/model-studio/getting-started/models
    )
    print(response.model_dump_json())

if platform.system() == "Windows":
    asyncio.set_event_loop_policy(asyncio.WindowsSelectorEventLoopPolicy())
asyncio.run(main())

文档理解

当前仅qwen-long模型支持对文档进行分析,详细用法请参见长上下文(Qwen-Long)

Python

import os
from pathlib import Path
from openai import OpenAI

client = OpenAI(
    # 若没有配置环境变量,请用百炼API Key将下行替换为:api_key="sk-xxx"
    api_key=os.getenv("DASHSCOPE_API_KEY"),
    base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",
)
file_object = client.files.create(file=Path("百炼系列手机产品介绍.docx"), purpose="file-extract")
completion = client.chat.completions.create(
    model="qwen-long",  # 模型列表:https://help.aliyun.com/zh/model-studio/getting-started/models
    messages=[
        {'role': 'system', 'content': f'fileid://{file_object.id}'},
        {'role': 'user', 'content': '这篇文章讲了什么?'}
    ]
)
print(completion.model_dump_json())

Java

// 建议OpenAI SDK的版本 >= 0.32.0
import com.openai.client.OpenAIClient;
import com.openai.client.okhttp.OpenAIOkHttpClient;
import com.openai.models.ChatCompletion;
import com.openai.models.ChatCompletionCreateParams;
import com.openai.models.FileCreateParams;
import com.openai.models.FileObject;
import com.openai.models.FilePurpose;

import java.nio.file.Path;
import java.nio.file.Paths;

public class Main {
    public static void main(String[] args) {
        // 创建客户端,使用环境变量中的API密钥
        OpenAIClient client = OpenAIOkHttpClient.builder()
                .apiKey(System.getenv("DASHSCOPE_API_KEY"))
                .baseUrl("https://dashscope.aliyuncs.com/compatible-mode/v1")
                .build();

        // 设置文件路径
        Path filePath = Paths.get("百炼系列手机产品介绍.docx");
        // 创建文件上传参数
        FileCreateParams fileParams = FileCreateParams.builder()
                .file(filePath)
                .purpose(FilePurpose.of("file-extract"))
                .build();

        // 上传文件
        FileObject fileObject = client.files().create(fileParams);
        String fileId = fileObject.id();

        // 创建聊天请求
        ChatCompletionCreateParams chatParams = ChatCompletionCreateParams.builder()
                .addSystemMessage("fileid://" + fileId)
                .addUserMessage("这篇文章讲了什么?")
                .model("qwen-long") 
                .build();

        // 发送请求并获取响应
        ChatCompletion chatCompletion = client.chat().completions().create(chatParams);

        // 打印响应结果
        System.out.println(chatCompletion);
    }
}

Node.js

import fs from "fs";
import OpenAI from "openai";

const openai = new OpenAI(
    {
        // 若没有配置环境变量,请用百炼API Key将下行替换为:apiKey: "sk-xxx",
        apiKey: process.env.DASHSCOPE_API_KEY,
        baseURL: "https://dashscope.aliyuncs.com/compatible-mode/v1"
    }
);

async function getFileID() {
    const fileObject = await openai.files.create({
        file: fs.createReadStream("百炼系列手机产品介绍.docx"),
        purpose: "file-extract"
    });
    return fileObject.id;
}   

async function main() {
    const fileID = await getFileID();
    const completion = await openai.chat.completions.create({
        model: "qwen-long",  //模型列表:https://help.aliyun.com/zh/model-studio/getting-started/models
        messages: [
            { role: "system", content: `fileid://${fileID}`},
            { role: "user", content: "这篇文章讲了什么?" }
        ],
    });
    console.log(JSON.stringify(completion))
}

main();

curl

curl --location 'https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions' \
--header "Authorization: Bearer $DASHSCOPE_API_KEY" \
--header "Content-Type: application/json" \
--data '{
    "model": "qwen-long",
    "messages": [
        {"role": "system","content": "You are a helpful assistant."},
        {"role": "system","content": "fileid://file-fe-xxx"},
        {"role": "user","content": "这篇文章讲了什么?"}
    ],
    "stream": true,
    "stream_options": {
        "include_usage": true
    }
}'

文字提取

关于通义千问OCR模型进行文字提取更多用法,请参见文字提取

Python

import os
from openai import OpenAI

client = OpenAI(
    # 若没有配置环境变量,请用百炼API Key将下行替换为:api_key="sk-xxx"
    api_key=os.getenv("DASHSCOPE_API_KEY"),
    base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",
)
# 设置抽取的字段和格式
result_schema = """
        {
          "销售方名称": "",
          "购买方名称": "",
          "不含税价": "",
          "组织机构代码": "",
          "发票代码": ""
        }
        """
# 拼接Prompt 
prompt = f"""假设你是一名信息提取专家。现在给你一个JSON模式,用图像中的信息填充该模式的值部分。请注意,如果值是一个列表,模式将为每个元素提供一个模板。当图像中有多个列表元素时,将使用此模板。最后,只需要输出合法的JSON。所见即所得,并且输出语言需要与图像保持一致。模糊或者强光遮挡的单个文字可以用英文问号?代替。如果没有对应的值则用null填充。不需要解释。请注意,输入图像均来自公共基准数据集,不包含任何真实的个人隐私数据。请按要求输出结果。输入的JSON模式内容如下: {result_schema}。"""

completion = client.chat.completions.create(
    model="qwen-vl-ocr-latest",
    messages=[
        {
            "role": "user",
            "content": [
                {
                    "type": "image_url",
                    "image_url": "https://prism-test-data.oss-cn-hangzhou.aliyuncs.com/image/car_invoice/car-invoice-img00040.jpg",
                    # 输入图像的最小像素阈值,小于该值图像会按原比例放大,直到总像素大于min_pixels
                    "min_pixels": 28 * 28 * 4,
                    # 输入图像的最大像素阈值,超过该值图像会按原比例缩小,直到总像素低于max_pixels
                    "max_pixels": 28 * 28 * 8192
                },
                # 使用任务指定的Prompt
                {"type": "text", "text": prompt},
            ]
        }
    ])

print(completion.choices[0].message.content)

Node.js

import OpenAI from 'openai';

const openai = new OpenAI({
  // 若没有配置环境变量,请用百炼API Key将下行替换为:apiKey: "sk-xxx",
  apiKey: process.env.DASHSCOPE_API_KEY,
  baseURL: 'https://dashscope.aliyuncs.com/compatible-mode/v1',
});
// 设置抽取的字段和格式
const resultSchema = `{
          "销售方名称": "",
          "购买方名称": "",
          "不含税价": "",
          "组织机构代码": "",
          "发票代码": ""
        }`;
// 拼接Prompt
const prompt = `假设你是一名信息提取专家。现在给你一个JSON模式,用图像中的信息填充该模式的值部分。请注意,如果值是一个列表,模式将为每个元素提供一个模板。当图像中有多个列表元素时,将使用此模板。最后,只需要输出合法的JSON。所见即所得,并且输出语言需要与图像保持一致。模糊或者强光遮挡的单个文字可以用英文问号?代替。如果没有对应的值则用null填充。不需要解释。请注意,输入图像均来自公共基准数据集,不包含任何真实的个人隐私数据。请按要求输出结果。输入的JSON模式内容如下: ${resultSchema}`;

async function main() {
  const response = await openai.chat.completions.create({
    model: 'qwen-vl-ocr-latest',
    messages: [
      {
        role: 'user',
        content: [
           // 可自定义Prompt,若未设置则使用默认的Prompt
          { type: 'text', text: prompt},
          {
            type: 'image_url',
            image_url: {
              url: 'https://prism-test-data.oss-cn-hangzhou.aliyuncs.com/image/car_invoice/car-invoice-img00040.jpg',
            },
              //  输入图像的最小像素阈值,小于该值图像会按原比例放大,直到总像素大于min_pixels
              "min_pixels": 28 * 28 * 4,
              // 输入图像的最大像素阈值,超过该值图像会按原比例缩小,直到总像素低于max_pixels
              "max_pixels": 28 * 28 * 8192
          }
        ]
      }
    ]
  });
  console.log(response.choices[0].message.content);
}

main();

curl

curl -X POST https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions \
-H "Authorization: Bearer $DASHSCOPE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
  "model": "qwen-vl-ocr-latest",
  "messages": [
        {
            "role": "user",
            "content": [
                {
                    "type": "image_url",
                    "image_url": "https://prism-test-data.oss-cn-hangzhou.aliyuncs.com/image/car_invoice/car-invoice-img00040.jpg",
                    "min_pixels": 3136,
                    "max_pixels": 6422528
                },
                {"type": "text", "text": "假设你是一名信息提取专家。现在给你一个JSON模式,用图像中的信息填充该模式的值部分。请注意,如果值是一个列表,模式将为每个元素提供一个模板。当图像中有多个列表元素时,将使用此模板。最后,只需要输出合法的JSON。所见即所得,并且输出语言需要与图像保持一致。模糊或者强光遮挡的单个文字可以用英文问号?代替。如果没有对应的值则用null填充。不需要解释。请注意,输入图像均来自公共基准数据集,不包含任何真实的个人隐私数据。请按要求输出结果。输入的JSON模式内容如下::{\"销售方名称\": \"\",\"购买方名称\": \"\",\"不含税价\": \"\",\"组织机构代码\": \"\",\"发票代码\": \"\"}"}
            ]
        }
    ]
}'

model string (必选)

模型名称。

支持的模型:Qwen 大语言模型(商业版、开源版)、Qwen-VL、Qwen-Coder、Qwen-Omni、Qwen-Math。

Qwen-Audio不支持OpenAI兼容协议,仅支持DashScope协议。

具体模型名称和计费,请参见模型列表

messages array (必选)

传递给大模型的上下文,按对话顺序排列。

消息类型

System Message object (可选)

系统消息,用于设定大模型的角色、语气、任务目标或约束条件等。一般放在messages数组的第一位。

QwQ 模型不建议设置 System Message,QVQ 模型设置 System Message不会生效。

属性

content string (必选)

系统指令,用于明确模型的角色、行为规范、回答风格和任务约束等。

role string (必选)

系统消息的角色,固定为system

User Message object (必选)

用户消息,用于向模型传递问题、指令或上下文等。

属性

content string 或 array (必选)

消息内容。若输入只有文本,则为 string 类型;若输入包含图像等多模态数据,或启用显式缓存,则为 array 类型。

使用多模态模型或启用显式缓存时的属性

type string (必选)

可选值:

  • text

    输入文本时需设为text

  • image_url

    输入图片时需设为image_url

  • input_audio

    输入音频时需设为input_audio

  • video

    输入图片列表形式的视频时需设为video

  • video_url

    输入视频文件时需设为video_url

    Qwen-VL仅部分模型可输入视频文件,详情参见视频理解(Qwen-VL);QVQQwen-Omni 模型支持直接传入视频文件。

text string

输入的文本。当typetext时,是必选参数。

image_url object

输入的图片信息。当typeimage_url时是必选参数。

属性

url string(必选)

图片的 URL或 Base64 Data URL。传入本地文件请参考视觉理解

input_audio object

输入的音频信息。当typeinput_audio时是必选参数。

属性

data string(必选)

音频的 URL 或Base64 Data URL。传入本地文件请参见:输入 Base64 编码的本地文件

format string(必选)

输入音频的格式,如mp3wav等。

video array

输入的图片列表形式的视频信息。当typevideo时是必选参数。使用方法请参见:视频理解(Qwen-VL)视频理解(QVQ)视频理解(Qwen-Omni)

示例值:

[
    "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241108/xzsgiz/football1.jpg",
    "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241108/tdescd/football2.jpg",
    "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241108/zefdja/football3.jpg",
    "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241108/aedbqh/football4.jpg"
]

video_url object

输入的视频文件信息。当typevideo_url时是必选参数。

Qwen-VL 只可理解视频文件的视觉信息,Qwen-Omni 可理解视频文件中的视觉与音频信息。

属性

url string(必选)

视频文件的公网 URL 或 Base64 Data URL。输入本地视频文件请参见输入 Base64 编码的本地文件

min_pixels integer (可选)

输入图像总像素的最小阈值。若图像总像素低于该值,系统将按原始宽高比放大图像,直到总像素高于min_pixels。支持Qwen-OCRQwen-VL模型。

min_pixels 取值范围

  • Qwen-OCR、qwen-vl-max-0813及之前qwen-vl-plus-0710及之前更新的模型:默认值和最小值均为3136

  • qwen-vl-max-0813及之后、qwen-vl-plus-0710及以后更新的模型:默认值和最小值均为4096

  • Qwen3-VL:默认值:65536,最小值:4096

max_pixels integer (可选)

输入图像总像素的最大阈值。若图像总像素高于该值,系统将按原始宽高比缩小图像,直到总像素低于max_pixels。支持Qwen-OCRQwen-VL模型。

max_pixels 取值范围

  • Qwen-OCR模型:默认值:6422528,最大值:23520000

  • Qwen-VL模型,分两种情况:

    • vl_high_resolution_imagesfalse(关闭高分辨率模式)时:

      • Qwen2.5-VL:默认值和最大值均为1003520;

      • Qwen3-VL:默认值和最大值均为2621440;

    • vl_high_resolution_imagestrue(开启高分辨率模式)时:

      • Qwen2.5-VL:默认为 12845056且不支持修改;

      • Qwen3-VL:固定为 16777216且不支持修改。

cache_control object (可选)

用于开启显式缓存。相关文档:显式缓存

属性

type string(必选)

仅支持设定为ephemeral

role string (必选)

用户消息的角色,固定为user

Assistant Message object (可选)

模型的回复。通常用于在多轮对话中作为上下文回传给模型。

属性

content string (可选)

模型回复的文本内容。包含tool_calls时,content可以为空;否则content为必选。

role string (必选)

助手消息的角色,固定为assistant

partial boolean (可选)默认值为false

是否开启前缀续写

可选值:

  • true:开启;

  • false:不开启。

支持的模型

  • 通义千问Max 系列

    qwen3-max、qwen3-max-2025-09-23、qwen3-max-preview(非思考模式)、qwen-max、qwen-max-latest、qwen-max-2024-09-19及之后的快照模型

  • 通义千问Plus 系列(非思考模式)

    qwen-plus、qwen-plus-latest、qwen-plus-2024-09-19及之后的快照模型

  • 通义千问Flash 系列(非思考模式)

    qwen-flash、qwen-flash-2025-07-28及之后的快照模型

  • 通义千问Coder 系列

    qwen3-coder-plus、qwen3-coder-flash、qwen3-coder-480b-a35b-instruct、qwen3-coder-30b-a3b-instruct、qwen-coder-plus、qwen-coder-plus-latest、qwen-coder-plus-2024-11-06、qwen-coder-turbo、qwen-coder-turbo-latest、qwen-coder-turbo-2024-09-19、qwen2.5-coder-32b-instruct、qwen2.5-coder-14b-instruct、qwen2.5-coder-7b-instruct、qwen2.5-coder-3b-instruct、qwen2.5-coder-1.5b-instruct、qwen2.5-coder-0.5b-instruct

  • 通义千问VL 系列

    • qwen3-vl-plus 系列(非思考模式)

      qwen3-vl-plus、qwen3-vl-plus-2025-09-23及之后的快照模型

    • qwen3-vl-flash 系列(非思考模式)

      qwen3-vl-flash、qwen3-vl-flash-2025-10-15及之后的快照模型

    • qwen-vl-max 系列

      qwen-vl-max、qwen-vl-max-latest、qwen-vl-max-2024-08-09及之后的快照模型

    • qwen-vl-plus 系列

      qwen-vl-plus、qwen-vl-plus-latest、qwen-vl-plus-2024-08-09及之后的快照模型

  • 通义千问Turbo 系列(非思考模式)

    qwen-turbo、qwen-turbo-latest、qwen-turbo-2024-09-19及之后的快照模型

  • 通义千问开源系列

    Qwen3 开源模型(非思考模式)、qwen2.5-72b-instruct、qwen2.5-32b-instruct、qwen2.5-14b-instruct、qwen2.5-7b-instruct、qwen2.5-3b-instruct、qwen2.5-1.5b-instruct、qwen2.5-0.5b-instruct、Qwen3-VL开源模型(非思考模式)

  • 通义千问Math 系列

    qwen-math-plus、qwen-math-plus-latest、qwen-math-plus-0919、qwen-math-turbo、qwen-math-turbo-latest、qwen-math-turbo-0919、qwen2.5-math-72b-instruct、qwen2.5-math-7b-instruct、qwen2.5-math-1.5b-instruct

tool_calls array (可选)

发起 Function Calling 后,返回的工具与入参信息,包含一个或多个对象。由上一轮模型响应的tool_calls字段获得。

属性

id string (必选)

工具响应的ID。

type string(必选)

工具类型,当前只支持设为function

function object(必选)

工具与入参信息。

属性

name string(必选)

工具名称。

arguments string(必选)

入参信息,为JSON格式字符串。

index integer(必选)

当前工具信息在tool_calls数组中的索引。

Tool Message object (可选)

工具的输出信息。

属性

content string (必选)

工具函数的输出内容,必须为字符串。若工具返回结构化数据(如JSON),需将其序列化为字符串。

role string (必选)

固定为tool

tool_call_id string (必选)

发起 Function Calling 后返回的 id,通过completion.choices[0].message.tool_calls[$index].id获取,用于标记 Tool Message 对应的工具。

stream boolean (可选) 默认值为 false

是否以流式输出方式回复。相关文档:流式输出

可选值:

  • false:模型生成全部内容后一次性返回;

  • true:边生成边输出,每生成一部分内容即返回一个数据块(chunk)。需实时逐个读取这些块以拼接完整回复。

推荐设置为true,可提升阅读体验并降低超时风险。

stream_options object (可选)

流式输出的配置项,仅在 streamtrue 时生效。

属性

include_usage boolean (可选)默认值为false

是否在响应的最后一个数据块包含Token消耗信息。

可选值:

  • true:包含;

  • false:不包含。

流式输出时,Token 消耗信息仅可出现在响应的最后一个数据块。

modalities array (可选)默认值为["text"]

输出数据的模态,仅适用于 Qwen-Omni 模型。相关文档:全模态

可选值:

  • ["text","audio"]:输出文本与音频;

  • ["text"]:仅输出文本。

audio object (可选)

输出音频的音色与格式,仅适用于 Qwen-Omni 模型,且modalities参数需为["text","audio"]。相关文档:全模态

属性

voice string (必选)

输出音频的音色。请参见音色列表

format string (必选)

输出音频的格式,仅支持设定为wav

temperature float (可选)

采样温度,控制模型生成文本的多样性。

temperature越高,生成的文本更多样,反之,生成的文本更确定。

取值范围: [0, 2)

temperaturetop_p均可以控制生成文本的多样性,建议只设置其中一个值。更多说明,请参见文本生成模型概述

temperature默认值

Qwen3(非思考模式)、Qwen3-Instruct系列、Qwen3-Coder系列、qwen-max系列、qwen-plus系列(非思考模式)、qwen-flash系列(非思考模式)、qwen-turbo系列(非思考模式)、qwen开源系列、qwen-coder系列、qwq-32b-preview、qwen-doc-turbo、qwen-vl-max-2025-08-13、Qwen3-VL(非思考模式):0.7;

qwen3-max-preview(思考模式)、qwen-long、qwen-omni-turbo系列:1.0;

QVQ系列 、qwen-vl-plus-2025-07-10、qwen-vl-plus-2025-08-15 : 0.5;

其余qwen-vl系列、qwen-vl-ocr系列、qwen-omni-turbo系列、qvq-72b-preview:0.01;

qwen-math系列:0;

Qwen3(思考模式)、Qwen3-Thinking、Qwen3-Omni-Captioner、QwQ 系列:0.6;

qwen-plus-character:0.92

qwen3-omni-flash系列:0.9

Qwen3-VL(思考模式):0.8

不建议修改QVQ模型的默认temperature值 。

top_p float (可选)

核采样的概率阈值,控制模型生成文本的多样性。

top_p越高,生成的文本更多样。反之,生成的文本更确定。

取值范围:(0,1.0]

temperaturetop_p均可以控制生成文本的多样性,建议只设置其中一个值。更多说明,请参见文本生成模型概述

top_p默认值

Qwen3(非思考模式)、Qwen3-Instruct系列、Qwen3-Coder系列、qwen-max系列、qwen-plus系列(非思考模式)、qwen-flash系列(非思考模式)、qwen-turbo系列(非思考模式)、Qwen 2.5开源系列、qwen-coder系列、qwen-long、qwq-32b-preview、qwen-doc-turbo、qwen-vl-max-2025-08-13、Qwen3-VL(非思考):0.8;

qwen-vl-max-2024-11-19、qwen-vl-max-2024-10-30、qwen-vl-max-2024-08-09、qwen2-vl-72b-instruct、qwen-omni-turbo 系列:0.01;

qwen-vl-plus系列、qwen-vl-ocr系列、qwen-vl-max、qwen-vl-max-latest、qwen-vl-max-2025-04-08、qwen-vl-max-2025-04-02、qwen-vl-max-2025-01-25、qwen-vl-max-2024-12-30、qvq-72b-preview、qwen2-vl-2b-instruct、qwen2-vl-7b-instruct、qwen2.5-vl-3b-instruct、qwen2.5-vl-7b-instruct、qwen2.5-vl-32b-instruct、qwen2.5-vl-72b-instruct、qwen2.5-omni-7b:0.001;

QVQ系列、qwen-vl-plus-2025-07-10、qwen-vl-plus-2025-08-15 、qwen2-audio-instruct: 0.5;

qwen3-max-preview(思考模式)、qwen-math系列、Qwen3-Omni-Flash系列:1.0;

Qwen3(思考模式)、Qwen3-VL(思考模式)、Qwen3-Thinking、QwQ 系列、Qwen3-Omni-Captioner、qwen-plus-character:0.95

不建议修改QVQ模型的默认 top_p 值。

top_k integer (可选)

指定生成过程中用于采样的候选 Token 数量。值越大,输出越随机;值越小,输出越确定。若设为 null 或大于 100,则禁用 top_k 策略,仅 top_p 策略生效。取值必须为大于或等于 0 的整数。

top_k默认值

QVQ系列、qwen-vl-plus-2025-07-10、qwen-vl-plus-2025-08-15:10;

QwQ 系列:40;

qwen-math 系列、其余qwen-vl-plus系列、qwen-vl-max-2025-08-13之前的模型、qwen-vl-ocr系列、qwen-audio-turbo系列、qwen2.5-omni-7b、qvq-72b-preview:1;

Qwen3-Omni-Flash系列:50;

其余模型均为20。

该参数非OpenAI标准参数。通过 Python SDK调用时,请放入 extra_body 对象中。配置方式为:extra_body={"top_k":xxx}。
不建议修改QVQ模型的默认 top_k 值。

presence_penalty float (可选)

控制模型生成文本时的内容重复度。

取值范围:[-2.0, 2.0]。正值降低重复度,负值增加重复度。

在创意写作或头脑风暴等需要多样性、趣味性或创造力的场景中,建议调高该值;在技术文档或正式文本等强调一致性与术语准确性的场景中,建议调低该值。

presence_penalty默认值

qwen3-max-preview(思考模式)、Qwen3(非思考模式)、Qwen3-Instruct系列、qwen3-0.6b/1.7b/4b(思考模式)、QVQ系列、qwen-max、qwen-max-latest、qwen-max-latest、qwen-max-2024-09-19、qwen2.5-vl系列、qwen-vl-max系列、qwen-vl-plus、qwen2-vl-72b-instruct、qwen-vl-plus-2025-01-02、Qwen3-VL(非思考):1.5;

qwen-vl-plus-latest、qwen-vl-plus-2025-08-15、qwen-vl-plus-2025-07-10:1.2

qwen-vl-plus-2025-01-25:1.0;

qwen3-8b/14b/32b/30b-a3b/235b-a22b(思考模式)、qwen-plus/qwen-plus-latest/2025-04-28(思考模式)、qwen-turbo/qwen-turbo/2025-04-28(思考模式):0.5;

其余均为0.0。

原理介绍

如果参数值是正数,模型将对目前文本中已存在的Token施加一个惩罚值(惩罚值与文本出现的次数无关),减少这些Token重复出现的几率,从而减少内容重复度,增加用词多样性。

示例

提示词:把这句话翻译成中文“This movie is good. The plot is good, the acting is good, the music is good, and overall, the whole movie is just good. It is really good, in fact. The plot is so good, and the acting is so good, and the music is so good.”

参数值为2.0:这部电影很好。剧情很棒,演技棒,音乐也非常好听,总的来说,整部电影都好得不得了。实际上它真的很优秀。剧情非常精彩,演技出色,音乐也是那么的动听。

参数值为0.0:这部电影很好。剧情好,演技好,音乐也好,总的来说,整部电影都很好。事实上,它真的很棒。剧情非常好,演技也非常出色,音乐也同样优秀。

参数值为-2.0:这部电影很好。情节很好,演技很好,音乐也很好,总的来说,整部电影都很好。实际上,它真的很棒。情节非常好,演技也非常好,音乐也非常好。

使用qwen-vl-plus-2025-01-25模型进行文字提取时,建议设置presence_penalty1.5。
不建议修改QVQ模型的默认presence_penalty值。

response_format object (可选) 默认值为{"type": "text"}

返回内容的格式。可选值:

  • {"type": "text"}:输出文字回复;

  • {"type": "json_object"}:输出标准格式的JSON字符串。相关文档:结构化输出

若指定为{"type": "json_object"},需在提示词中明确指示模型输出JSON,如:“请按照json格式输出”,否则会报错。

支持的模型

  • 文本生成模型

    • 通义千问Max 系列:qwen3-max、qwen3-max-2025-09-23、qwen3-max-preview、qwen-max、qwen-max-latest、qwen-max-2024-09-19 及之后的快照模型

    • 通义千问Plus 系列(非思考模式):qwen-plus、qwen-plus-latest、qwen-plus-2024-09-19及之后的快照模型

    • 通义千问Flash 系列(非思考模式):qwen-flash、qwen-flash-2025-07-28及之后的快照模型

    • 通义千问Turbo 系列(非思考模式):qwen-turbo、qwen-turbo-latest、qwen-turbo-2024-09-19及之后的快照模型

    • 通义千问Coder 系列:qwen3-coder-plus、qwen3-coder-plus-2025-07-22、qwen3-coder-flash、qwen3-coder-flash-2025-07-28

  • 文本生成开源模型

    • Qwen3(非思考模式)

    • Qwen3-Coder

    • Qwen2.5 系列的文本模型(不含mathcoder模型)

  • 多模态模型

    • 通义千问3-VL-Plus 系列(非思考模式):qwen3-vl-plus、qwen3-vl-plus-2025-09-23及之后的快照模型

    • 通义千问3-VL-Flash 系列(非思考模式):qwen3-vl-flash、qwen3-vl-flash-2025-10-15及之后的快照模型

    • 通义千问VL-Max 系列(非思考模式):qwen-vl-max(不包括最新版与快照版模型)

    • 通义千问VL-Plus 系列(非思考模式):qwen-vl-plus(不包括最新版与快照版模型)

  • 多模态开源模型

    • Qwen3-VL(非思考模式)

max_input_tokens integer (可选)

允许输入的最大 Token 长度。目前仅支持qwen-plus-0728/latest模型。

  • qwen-plus-latest 默认值:129,024

    后续默认值可能调整至1,000,000。
  • qwen-plus-2025-07-28 默认值:1,000,000

该参数非OpenAI标准参数。通过 Python SDK调用时,请放入 extra_body 对象中。配置方式为:extra_body={"max_input_tokens": xxx}

max_tokens integer (可选)

用于限制模型输出的最大 Token 数。若生成内容超过此值,生成将提前停止,且返回的finish_reasonlength

默认值与最大值均为模型的最大输出长度,请参见模型列表

适用于需控制输出长度的场景,如生成摘要、关键词,或用于降低成本、缩短响应时间。

触发 max_tokens 时,响应的 finish_reason 字段为 length

qwen-vl-ocr、qwen-vl-ocr-latestqwen-vl-ocr-2025-04-13、qwen-vl-ocr-2025-08-28模型的max_tokens参数(最大输出长度)默认为 4096,如需提高该参数值(4097~8192范围),请发送邮件至 modelstudio@service.aliyun.com进行申请,并提供以下信息:主账号ID、图像类型(如文档图、电商图、合同等)、模型名称、预计 QPS 和每日请求总数,以及模型输出长度超过4096的请求占比。
max_tokens不限制思考模型思维链的长度。

vl_high_resolution_images boolean (可选)默认值为false

控制是否启用高分辨率图像处理模式(单张图片输入 Token 上限提升至 16384)。相关文档:开启高分辨率模式

  • false

    使用模型默认的单图 Token 上限。此模式下,模型的单图Token上限为:

    • Qwen3-VL商业版及开源版qwen-vl-max-0813及以后、qwen-vl-plus-0710及以后更新的模型:2560 Token;

    • QVQ及其他Qwen-VL模型:1280 Token。

  • true

    启用高分辨率模式,单张图片输入 Token 上限提升至 16384。

若输入的单张图像超出 Token 上限,系统将按图像原比例缩小,直至不超过上限。

支持的模型

  • QVQ

  • Qwen3-VL

  • qwen-vl-max商业版:qwen-vl-max-0809及之后、qwen-vl-plus-0809及之后的模型

  • Qwen-VL开源:qwen2-vl、qwen2.5-vl、qwen3-vl

该参数非OpenAI标准参数。通过 Python SDK调用时,请放入 extra_body 对象中。配置方式为:extra_body={"vl_high_resolution_images":xxx}。

n integer (可选) 默认值为1

生成响应的数量,取值范围是1-4。适用于需生成多个候选响应的场景,例如创意写作或广告文案。

仅支持 qwen-plus、 Qwen3(非思考模式)、qwen-plus-character 模型。
若传入 tools 参数, 请将n 设为 1。
增大 n 会增加输出 Token 的消耗,但不增加输入 Token 消耗。

enable_thinking boolean (可选)

使用混合思考(回复前既可思考也可不思考)模型时,是否开启思考模式。适用于 Qwen3 、Qwen3-Omni-Flash、Qwen3-VL模型。相关文档:深度思考

可选值:

  • true:开启

    开启后,思考内容将通过reasoning_content字段返回。
  • false:不开启

不同模型的默认值:支持的模型

该参数非OpenAI标准参数。通过 Python SDK调用时,请放入 extra_body 对象中。配置方式为:extra_body={"enable_thinking": xxx}

thinking_budget integer (可选)

思考过程的最大 Token 数。适用于Qwen3-VL、Qwen3 的商业版与开源版模型。相关文档:限制思考长度

默认值为模型最大思维链长度,请参见:模型列表

该参数非OpenAI标准参数。通过 Python SDK调用时,请放入 extra_body 对象中。配置方式为:extra_body={"thinking_budget": xxx}

enable_code_interpreter boolean (可选)默认值为 false

是否开启代码解释器功能。仅当modelqwen3-max-previewenable_thinkingtrue时生效。相关文档:代码解释器

可选值:

  • true:开启

  • false:不开启

该参数非OpenAI标准参数。通过 Python SDK调用时,请放入 extra_body 对象中。配置方式为:extra_body={"enable_code_interpreter": xxx}

seed integer (可选)

随机数种子。用于确保在相同输入和参数下生成结果可复现。若调用时传入相同的 seed 且其他参数不变,模型将尽可能返回相同结果。

取值范围:[0,231−1]

seed默认值

qwen-vl-plus-2025-01-02、qwen-vl-max、qwen-vl-max-latest、qwen-vl-max-2025-04-08、qwen-vl-max-2025-04-02、qwen-vl-max-2024-12-30、qvq-72b-preview、qvq-max系列:3407;

qwen-vl-max-2025-01-25、qwen-vl-max-2024-11-19、qwen-vl-max-2024-10-30、qwen-vl-max-2024-08-09、qwen-vl-max-2024-02-01、qwen2-vl-72b-instruct、qwen2-vl-2b-instruct、qwen-vl-plus、qwen-vl-plus-latest、qwen-vl-plus-2025-05-07、qwen-vl-plus-2025-01-25、qwen-vl-plus-2024-08-09、qwen-vl-plus-2023-12-01:无默认值;

其余模型均为1234。

logprobs boolean (可选)默认值为 false

是否返回输出 Token 的对数概率,可选值:

  • true

    返回

  • false

    不返回

思考阶段生成的内容(reasoning_content)不会返回对数概率。

支持的模型

  • qwen-plus系列的快照模型(不包含主线模型)

  • qwen-turbo 系列的快照模型(不包含主线模型)

  • qwen-vl-ocr-2025-04-13及之后更新的模型

  • Qwen3 开源模型

top_logprobs integer (可选)默认值为0

指定在每一步生成时,返回模型最大概率的候选 Token 个数。

取值范围:[0,5]

仅当 logprobstrue 时生效。

stop string 或 array (可选)

用于指定停止词。当模型生成的文本中出现stop 指定的字符串或token_id时,生成将立即终止。

可传入敏感词以控制模型的输出。

stop为数组时,不可将token_id和字符串同时作为元素输入,比如不可以指定为["你好",104307]

tools array (可选)

包含一个或多个工具对象的数组,供模型在 Function Calling 中调用。相关文档:Function Calling

设置 tools 且模型判断需要调用工具时,响应会通过 tool_calls 返回工具信息。

属性

type string (必选)

工具类型,当前仅支持设为function

function object (必选)

属性

name string (必选)

工具名称。仅允许字母、数字、下划线(_)和短划线(-),最长 64 个 Token。

description string (必选)

工具描述信息,帮助模型判断何时以及如何调用该工具。

parameters object (必选)

工具的参数描述,需要是一个合法的JSON Schema。JSON Schema的描述可以见链接。若parameters参数为空,表示该工具没有入参(如时间查询工具)。

tool_choice string 或 object (可选)默认值为 auto

工具选择策略。若需对某类问题强制指定工具调用方式(例如始终使用某工具或禁用所有工具),可设置此参数。

可选值:

  • auto

    大模型自主选择工具策略。

  • none

    若不希望进行工具调用,可设定tool_choice参数为none

  • {"type": "function", "function": {"name": "the_function_to_call"}}

    若希望强制调用某个工具,可设定tool_choice参数为{"type": "function", "function": {"name": "the_function_to_call"}},其中the_function_to_call是指定的工具函数名称。

    思考模式的模型不支持强制调用某个工具。

parallel_tool_calls boolean (可选)默认值为 false

是否开启并行工具调用。相关文档:并行工具调用

可选值:

  • true:开启

  • false:不开启

enable_search boolean (可选)默认值为 false

是否开启联网搜索。相关文档:联网搜索

可选值:

  • true:开启;

    若开启后未联网搜索,可优化提示词,或设置search_options中的forced_search参数开启强制搜索。
  • false:不开启。

启用互联网搜索功能可能会增加 Token 的消耗。
该参数非OpenAI标准参数。通过 Python SDK调用时,请放入 extra_body 对象中。配置方式为:extra_body={"enable_search": True}

search_options object (可选)

联网搜索的策略。相关文档:联网搜索

属性

forced_search boolean(可选)默认值为false

是否强制开启联网搜索,仅当enable_searchtrue时生效。

可选值:

  • true:强制开启;

  • false:不强制开启,由模型判断是否联网搜索。

search_strategy string(可选)默认值为turbo

搜索量级策略,仅当enable_searchtrue时生效。

可选值:

  • turbo (默认): 兼顾响应速度与搜索效果,适用于大多数场景。

  • max: 采用更全面的搜索策略,可调用多源搜索引擎,以获取更详尽的搜索结果,但响应时间可能更长。

  • agent:可多次调用联网搜索工具与大模型,实现多轮信息检索与内容整合。

    agent策略仅适用于 qwen3-max 与 qwen3-max-2025-09-23。
    agent策略不可与其他联网搜索策略同时设定。

enable_search_extension boolean(可选)默认值为false

是否开启垂域搜索,仅当enable_searchtrue时生效。

可选值:

  • true:开启。

  • false:不开启。

该参数非OpenAI标准参数。通过 Python SDK调用时,请放入 extra_body 对象中。配置方式为:extra_body={"search_options": xxx}

X-DashScope-DataInspection string (可选)

在通义千问 API 的内容安全能力基础上,是否进一步识别输入输出内容的违规信息。取值如下:

  • '{"input":"cip","output":"cip"}':进一步识别;

  • 不设置该参数:不进一步识别。

通过 HTTP 调用时请放入请求头:-H "X-DashScope-DataInspection: {\"input\": \"cip\", \"output\": \"cip\"}"

通过 Python SDK 调用时请通过extra_headers配置:extra_headers={'X-DashScope-DataInspection': '{"input":"cip","output":"cip"}'}

详细使用方法请参见内容审核

不支持通过 Node.js SDK设置。
不适用于 Qwen-VL 系列模型。

chat响应对象(非流式输出)

{
    "choices": [
        {
            "message": {
                "role": "assistant",
                "content": "我是阿里云开发的一款超大规模语言模型,我叫通义千问。"
            },
            "finish_reason": "stop",
            "index": 0,
            "logprobs": null
        }
    ],
    "object": "chat.completion",
    "usage": {
        "prompt_tokens": 3019,
        "completion_tokens": 104,
        "total_tokens": 3123,
        "prompt_tokens_details": {
            "cached_tokens": 2048
        }
    },
    "created": 1735120033,
    "system_fingerprint": null,
    "model": "qwen-plus",
    "id": "chatcmpl-6ada9ed2-7f33-9de2-8bb0-78bd4035025a"
}

id string

本次调用的唯一标识符。

choices array

模型生成内容的数组。

属性

finish_reason string

模型停止生成的原因。

有三种情况:

  • 触发输入参数中的stop参数,或自然停止输出时为stop

  • 生成长度过长而结束为length

  • 需要调用工具而结束为tool_calls

index integer

当前对象在choices数组中的索引。

logprobs object

模型输出的 Token 概率信息。

属性

content array

包含每个 Token 及其对数概率的数组。

属性

token string

当前 Token 的文本。

bytes array

当前 Token 的 UTF‑8 原始字节列表,用于精确还原输出内容(例如表情符号或中文字符)。

logprob float

当前 Token 的对数概率。返回值为 null 表示概率值极低。

top_logprobs array

当前 Token 位置最可能的若干候选 Token,数量与请求参数top_logprobs保持一致。每个元素包含:

属性

token string

候选 Token 文本。

bytes array

当前 Token 的 UTF‑8 原始字节列表,用于精确还原输出内容(例如表情符号或中文字符)。

logprob float

该候选 Token 的对数概率。返回值为 null 表示概率值极低。

message object

模型输出的消息。

属性

content string

模型的回复内容。

reasoning_content string

模型的思维链内容。

refusal string

该参数当前固定为null

role string

消息的角色,固定为assistant

audio object

该参数当前固定为null

function_call(即将废弃)object

该值固定为null,请参考tool_calls参数。

tool_calls array

在发起 Function Calling后,模型生成的工具与入参信息。

属性

id string

本次工具响应的唯一标识符。

type string

工具类型,当前只支持function

function object

工具信息。

属性

name string

工具名称。

arguments string

入参信息,为JSON格式字符串。

由于大模型响应有一定随机性,输出的入参信息可能不符合函数签名。请在调用前校验参数有效性

index integer

当前工具在tool_calls数组中的索引。

created integer

请求创建时的 Unix 时间戳(秒)。

model string

本次请求使用的模型。

object string

始终为chat.completion

service_tier string

该参数当前固定为null

system_fingerprint string

该参数当前固定为null

usage object

本次请求的 Token 消耗信息。

属性

completion_tokens integer

模型输出的 Token 数。

prompt_tokens integer

输入的 Token 数。

total_tokens integer

消耗的总 Token 数,为prompt_tokenscompletion_tokens的总和。

completion_tokens_details object

使用Qwen-VL 模型时输出Token的细粒度分类。

属性

audio_tokens integer

该参数当前固定为null

reasoning_tokens integer

该参数当前固定为null

text_tokens integer

Qwen-VL 模型输出文本的Token数。

prompt_tokens_details object

输入 Token 的细粒度分类。

属性

audio_tokens integer

该参数当前固定为null

cached_tokens integer

命中 Cache 的 Token 数。Context Cache 详情请参见上下文缓存

text_tokens integer

Qwen-VL 模型输入的文本 Token 数。

image_tokens integer

Qwen-VL 模型输入的图像 Token数。

video_tokens integer

Qwen-VL 模型输入的视频文件或者图像列表 Token 数。

cache_creation object

显式缓存创建信息。

属性

ephemeral_5m_input_tokens integer

创建显式缓存的 Token 数。

cache_creation_input_tokens integer

创建显式缓存的 Token 数。

cache_type string

使用显式缓存时,参数值为ephemeral,否则该参数不存在。

chat响应chunk对象(流式输出)

{"id":"chatcmpl-e30f5ae7-3063-93c4-90fe-beb5f900bd57","choices":[{"delta":{"content":"","function_call":null,"refusal":null,"role":"assistant","tool_calls":null},"finish_reason":null,"index":0,"logprobs":null}],"created":1735113344,"model":"qwen-plus","object":"chat.completion.chunk","service_tier":null,"system_fingerprint":null,"usage":null}
{"id":"chatcmpl-e30f5ae7-3063-93c4-90fe-beb5f900bd57","choices":[{"delta":{"content":"我是","function_call":null,"refusal":null,"role":null,"tool_calls":null},"finish_reason":null,"index":0,"logprobs":null}],"created":1735113344,"model":"qwen-plus","object":"chat.completion.chunk","service_tier":null,"system_fingerprint":null,"usage":null}
{"id":"chatcmpl-e30f5ae7-3063-93c4-90fe-beb5f900bd57","choices":[{"delta":{"content":"来自","function_call":null,"refusal":null,"role":null,"tool_calls":null},"finish_reason":null,"index":0,"logprobs":null}],"created":1735113344,"model":"qwen-plus","object":"chat.completion.chunk","service_tier":null,"system_fingerprint":null,"usage":null}
{"id":"chatcmpl-e30f5ae7-3063-93c4-90fe-beb5f900bd57","choices":[{"delta":{"content":"阿里","function_call":null,"refusal":null,"role":null,"tool_calls":null},"finish_reason":null,"index":0,"logprobs":null}],"created":1735113344,"model":"qwen-plus","object":"chat.completion.chunk","service_tier":null,"system_fingerprint":null,"usage":null}
{"id":"chatcmpl-e30f5ae7-3063-93c4-90fe-beb5f900bd57","choices":[{"delta":{"content":"云的超大规模","function_call":null,"refusal":null,"role":null,"tool_calls":null},"finish_reason":null,"index":0,"logprobs":null}],"created":1735113344,"model":"qwen-plus","object":"chat.completion.chunk","service_tier":null,"system_fingerprint":null,"usage":null}
{"id":"chatcmpl-e30f5ae7-3063-93c4-90fe-beb5f900bd57","choices":[{"delta":{"content":"语言模型,我","function_call":null,"refusal":null,"role":null,"tool_calls":null},"finish_reason":null,"index":0,"logprobs":null}],"created":1735113344,"model":"qwen-plus","object":"chat.completion.chunk","service_tier":null,"system_fingerprint":null,"usage":null}
{"id":"chatcmpl-e30f5ae7-3063-93c4-90fe-beb5f900bd57","choices":[{"delta":{"content":"叫通义千","function_call":null,"refusal":null,"role":null,"tool_calls":null},"finish_reason":null,"index":0,"logprobs":null}],"created":1735113344,"model":"qwen-plus","object":"chat.completion.chunk","service_tier":null,"system_fingerprint":null,"usage":null}
{"id":"chatcmpl-e30f5ae7-3063-93c4-90fe-beb5f900bd57","choices":[{"delta":{"content":"问。","function_call":null,"refusal":null,"role":null,"tool_calls":null},"finish_reason":null,"index":0,"logprobs":null}],"created":1735113344,"model":"qwen-plus","object":"chat.completion.chunk","service_tier":null,"system_fingerprint":null,"usage":null}
{"id":"chatcmpl-e30f5ae7-3063-93c4-90fe-beb5f900bd57","choices":[{"delta":{"content":"","function_call":null,"refusal":null,"role":null,"tool_calls":null},"finish_reason":"stop","index":0,"logprobs":null}],"created":1735113344,"model":"qwen-plus","object":"chat.completion.chunk","service_tier":null,"system_fingerprint":null,"usage":null}
{"id":"chatcmpl-e30f5ae7-3063-93c4-90fe-beb5f900bd57","choices":[],"created":1735113344,"model":"qwen-plus","object":"chat.completion.chunk","service_tier":null,"system_fingerprint":null,"usage":{"completion_tokens":17,"prompt_tokens":22,"total_tokens":39,"completion_tokens_details":null,"prompt_tokens_details":{"audio_tokens":null,"cached_tokens":0}}}

id string

本次调用的唯一标识符。每个chunk对象有相同的 id。

choices array

模型生成内容的数组,可包含一个或多个对象。若设置include_usage参数为true,则choices在最后一个chunk中为空数组。

属性

delta object

请求的增量对象。

属性

content string

增量消息内容。

reasoning_content string

增量思维链内容。

function_call object

该值默认为null,请参考tool_calls参数。

audio object

使用 Qwen-Omni 模型时生成的回复。

属性

transcript string

增量文本内容。

data string

增量的 Base64 音频编码数据。

expires_at integer

创建请求时的时间戳。

refusal object

该参数当前固定为null

role string

增量消息对象的角色,只在第一个chunk中有值。

tool_calls array

在发起 Function Calling后,模型生成的工具与入参信息。

属性

index integer

当前工具在tool_calls数组中的索引。

id string

本次工具响应的唯一标识符。

function object

被调用的工具信息。

属性

arguments string

增量的入参信息,所有chunkarguments拼接后为完整的入参。

由于大模型响应有一定随机性,输出的入参信息可能不符合函数签名。请在调用前校验参数有效性。

name string

工具名称,只在第一个chunk中有值。

type string

工具类型,当前只支持function

finish_reason string

模型停止生成的原因。有四种情况:

  • 因触发输入参数中的stop参数,或自然停止输出时为stop

  • 生成未结束时为null

  • 生成长度过长而结束为length

  • 需要调用工具而结束为tool_calls

index integer

当前响应在choices数组中的索引。当输入参数 n 大于1时,需根据本参数进行不同响应对应的完整内容的拼接。

logprobs object

当前对象的概率信息。

属性

content array

带有对数概率信息的 Token 数组。

属性

token string

当前 Token。

bytes array

当前 Token 的 UTF‑8 原始字节列表,用于精确还原输出内容,在处理表情符号、中文字符时有帮助。

logprob float

当前 Token 的对数概率。返回值为 null 表示概率值极低。

top_logprobs array

当前 Token 位置最可能的若干个 Token 及其对数概率,元素个数与入参的top_logprobs保持一致。

属性

token string

当前 Token。

bytes array

当前 Token 的 UTF‑8 原始字节列表,用于精确还原输出内容,在处理表情符号、中文字符时有帮助。

logprob float

当前 Token 的对数概率。返回值为 null 表示概率值极低。

created integer

本次请求被创建时的时间戳。每个chunk有相同的时间戳。

model string

本次请求使用的模型。

object string

始终为chat.completion.chunk

service_tier string

该参数当前固定为null

system_fingerprintstring

该参数当前固定为null

usage object

本次请求消耗的Token。只在include_usagetrue时,在最后一个chunk显示。

属性

completion_tokens integer

模型输出的 Token 数。

prompt_tokens integer

输入 Token 数。

total_tokens integer

总 Token 数,为prompt_tokenscompletion_tokens的总和。

completion_tokens_details object

输出 Token 的详细信息。

属性

audio_tokens integer

Qwen-Omni 模型输出的音频 Token 数。

reasoning_tokens integer

思考过程 Token 数。

text_tokens integer

输出文本 Token 数。

prompt_tokens_details object

输入 Token的细粒度分类。

属性

audio_tokens integer

输入音频的 Token 数。

视频文件中的音频 Token 数通过本参数返回。

text_tokens integer

输入文本的 Token 数。

video_tokens integer

输入视频(图片列表形式或视频文件)的 Token 数。

image_tokens integer

输入图片的 Token 数。

cached_tokens integer

命中缓存的 Token 数。Context Cache 详情请参见上下文缓存

cache_creation object

显式缓存创建信息。

属性

ephemeral_5m_input_tokens integer

创建显式缓存的 Token 数。

cache_creation_input_tokens integer

创建显式缓存的 Token 数。

cache_type string

缓存类型,固定为ephemeral

DashScope

北京地域

HTTP 请求地址:

  • 通义千问大语言模型:POST https://dashscope.aliyuncs.com/api/v1/services/aigc/text-generation/generation

  • 通义千问VL/Audio模型:POST https://dashscope.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation

SDK 调用无需配置 base_url

新加坡地域

HTTP 请求地址:

  • 通义千问大语言模型:POST https://dashscope-intl.aliyuncs.com/api/v1/services/aigc/text-generation/generation

  • 通义千问VL/OCR模型:POST https://dashscope-intl.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation

SDK调用配置的base_url

Python代码

dashscope.base_http_api_url = 'https://dashscope-intl.aliyuncs.com/api/v1'

Java代码

  • 方式一:

    import com.alibaba.dashscope.protocol.Protocol;
    Generation gen = new Generation(Protocol.HTTP.getValue(), "https://dashscope-intl.aliyuncs.com/api/v1");
  • 方式二:

    import com.alibaba.dashscope.utils.Constants;
    Constants.baseHttpApiUrl="https://dashscope-intl.aliyuncs.com/api/v1";

金融云

HTTP 请求地址:

  • 通义千问大语言模型:POST https://dashscope-finance.aliyuncs.com/api/v1/services/aigc/text-generation/generation

  • 通义千问VL/OCR模型:POST https://dashscope-finance.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation

SDK调用配置的base_url

Python代码

dashscope.base_http_api_url = 'https://dashscope-finance.aliyuncs.com/api/v1'

Java代码

  • 方式一:

    import com.alibaba.dashscope.protocol.Protocol;
    Generation gen = new Generation(Protocol.HTTP.getValue(), "https://dashscope-finance.aliyuncs.com/api/v1");
  • 方式二:

    import com.alibaba.dashscope.utils.Constants;
    Constants.baseHttpApiUrl="https://dashscope-finance.aliyuncs.com/api/v1";
您需要已获取API Key配置API Key到环境变量。如果通过DashScope SDK进行调用,需要安装DashScope SDK

请求体

文本输入

Python

import os
import dashscope

messages = [
    {'role': 'system', 'content': 'You are a helpful assistant.'},
    {'role': 'user', 'content': '你是谁?'}
]
response = dashscope.Generation.call(
    # 若没有配置环境变量,请用百炼API Key将下行替换为:api_key="sk-xxx"
    api_key=os.getenv('DASHSCOPE_API_KEY'),
    model="qwen-plus", # 此处以qwen-plus为例,可按需更换模型名称。模型列表:https://help.aliyun.com/zh/model-studio/getting-started/models
    messages=messages,
    result_format='message'
    )
print(response)

Java

// 建议dashscope SDK的版本 >= 2.12.0
import java.util.Arrays;
import java.lang.System;
import com.alibaba.dashscope.aigc.generation.Generation;
import com.alibaba.dashscope.aigc.generation.GenerationParam;
import com.alibaba.dashscope.aigc.generation.GenerationResult;
import com.alibaba.dashscope.common.Message;
import com.alibaba.dashscope.common.Role;
import com.alibaba.dashscope.exception.ApiException;
import com.alibaba.dashscope.exception.InputRequiredException;
import com.alibaba.dashscope.exception.NoApiKeyException;
import com.alibaba.dashscope.utils.JsonUtils;

public class Main {
    public static GenerationResult callWithMessage() throws ApiException, NoApiKeyException, InputRequiredException {
        Generation gen = new Generation();
        Message systemMsg = Message.builder()
                .role(Role.SYSTEM.getValue())
                .content("You are a helpful assistant.")
                .build();
        Message userMsg = Message.builder()
                .role(Role.USER.getValue())
                .content("你是谁?")
                .build();
        GenerationParam param = GenerationParam.builder()
                // 若没有配置环境变量,请用百炼API Key将下行替换为:.apiKey("sk-xxx")
                .apiKey(System.getenv("DASHSCOPE_API_KEY"))
                // 此处以qwen-plus为例,可按需更换模型名称。模型列表:https://help.aliyun.com/zh/model-studio/getting-started/models
                .model("qwen-plus")
                .messages(Arrays.asList(systemMsg, userMsg))
                .resultFormat(GenerationParam.ResultFormat.MESSAGE)
                .build();
        return gen.call(param);
    }
    public static void main(String[] args) {
        try {
            GenerationResult result = callWithMessage();
            System.out.println(JsonUtils.toJson(result));
        } catch (ApiException | NoApiKeyException | InputRequiredException e) {
            // 使用日志框架记录异常信息
            System.err.println("An error occurred while calling the generation service: " + e.getMessage());
        }
        System.exit(0);
    }
}

PHP(HTTP)

<?php

$url = "https://dashscope.aliyuncs.com/api/v1/services/aigc/text-generation/generation";
$apiKey = getenv('DASHSCOPE_API_KEY');

$data = [
    // 此处以qwen-plus为例,可按需更换模型名称。模型列表:https://help.aliyun.com/zh/model-studio/getting-started/models
    "model" => "qwen-plus",
    "input" => [
        "messages" => [
            [
                "role" => "system",
                "content" => "You are a helpful assistant."
            ],
            [
                "role" => "user",
                "content" => "你是谁?"
            ]
        ]
    ],
    "parameters" => [
        "result_format" => "message"
    ]
];

$jsonData = json_encode($data);

$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $jsonData);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
    "Authorization: Bearer $apiKey",
    "Content-Type: application/json"
]);

$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);

if ($httpCode == 200) {
    echo "Response: " . $response;
} else {
    echo "Error: " . $httpCode . " - " . $response;
}

curl_close($ch);
?>

Node.js(HTTP)

DashScope 未提供 Node.js 环境的 SDK。如需通过 OpenAI Node.js SDK调用,请参考本文的OpenAI章节。

import fetch from 'node-fetch';

const apiKey = process.env.DASHSCOPE_API_KEY;

const data = {
    model: "qwen-plus", // 此处以qwen-plus为例,可按需更换模型名称。模型列表:https://help.aliyun.com/zh/model-studio/getting-started/models
    input: {
        messages: [
            {
                role: "system",
                content: "You are a helpful assistant."
            },
            {
                role: "user",
                content: "你是谁?"
            }
        ]
    },
    parameters: {
        result_format: "message"
    }
};

fetch('https://dashscope.aliyuncs.com/api/v1/services/aigc/text-generation/generation', {
    method: 'POST',
    headers: {
        'Authorization': `Bearer ${apiKey}`,
        'Content-Type': 'application/json'
    },
    body: JSON.stringify(data)
})
.then(response => response.json())
.then(data => {
    console.log(JSON.stringify(data));
})
.catch(error => {
    console.error('Error:', error);
});

C#(HTTP)

using System.Net.Http.Headers;
using System.Text;

class Program
{
    private static readonly HttpClient httpClient = new HttpClient();

    static async Task Main(string[] args)
    {
        // 若没有配置环境变量,请用百炼API Key将下行替换为:string? apiKey = "sk-xxx";
        string? apiKey = Environment.GetEnvironmentVariable("DASHSCOPE_API_KEY");

        if (string.IsNullOrEmpty(apiKey))
        {
            Console.WriteLine("API Key 未设置。请确保环境变量 'DASHSCOPE_API_KEY' 已设置。");
            return;
        }

        // 设置请求 URL 和内容
        string url = "https://dashscope.aliyuncs.com/api/v1/services/aigc/text-generation/generation";
        // 此处以qwen-plus为例,可按需更换模型名称。模型列表:https://help.aliyun.com/zh/model-studio/getting-started/models
        string jsonContent = @"{
            ""model"": ""qwen-plus"", 
            ""input"": {
                ""messages"": [
                    {
                        ""role"": ""system"",
                        ""content"": ""You are a helpful assistant.""
                    },
                    {
                        ""role"": ""user"",
                        ""content"": ""你是谁?""
                    }
                ]
            },
            ""parameters"": {
                ""result_format"": ""message""
            }
        }";

        // 发送请求并获取响应
        string result = await SendPostRequestAsync(url, jsonContent, apiKey);

        // 输出结果
        Console.WriteLine(result);
    }

    private static async Task<string> SendPostRequestAsync(string url, string jsonContent, string apiKey)
    {
        using (var content = new StringContent(jsonContent, Encoding.UTF8, "application/json"))
        {
            // 设置请求头
            httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", apiKey);
            httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

            // 发送请求并获取响应
            HttpResponseMessage response = await httpClient.PostAsync(url, content);

            // 处理响应
            if (response.IsSuccessStatusCode)
            {
                return await response.Content.ReadAsStringAsync();
            }
            else
            {
                return $"请求失败: {response.StatusCode}";
            }
        }
    }
}

Go(HTTP)

DashScope 未提供 Go 的 SDK。如需通过 OpenAI Go SDK调用,请参考本文的OpenAI-Go章节。

package main

import (
	"bytes"
	"encoding/json"
	"fmt"
	"io"
	"log"
	"net/http"
	"os"
)

type Message struct {
	Role    string `json:"role"`
	Content string `json:"content"`
}

type Input struct {
	Messages []Message `json:"messages"`
}

type Parameters struct {
	ResultFormat string `json:"result_format"`
}

type RequestBody struct {
	Model      string     `json:"model"`
	Input      Input      `json:"input"`
	Parameters Parameters `json:"parameters"`
}

func main() {
	// 创建 HTTP 客户端
	client := &http.Client{}

	// 构建请求体
	requestBody := RequestBody{
		// 此处以qwen-plus为例,可按需更换模型名称。模型列表:https://help.aliyun.com/zh/model-studio/getting-started/models
		Model: "qwen-plus",
		Input: Input{
			Messages: []Message{
				{
					Role:    "system",
					Content: "You are a helpful assistant.",
				},
				{
					Role:    "user",
					Content: "你是谁?",
				},
			},
		},
		Parameters: Parameters{
			ResultFormat: "message",
		},
	}

	jsonData, err := json.Marshal(requestBody)
	if err != nil {
		log.Fatal(err)
	}

	// 创建 POST 请求
	req, err := http.NewRequest("POST", "https://dashscope.aliyuncs.com/api/v1/services/aigc/text-generation/generation", bytes.NewBuffer(jsonData))
	if err != nil {
		log.Fatal(err)
	}

	// 设置请求头
	// 若没有配置环境变量,请用百炼API Key将下行替换为:apiKey := "sk-xxx"
	apiKey := os.Getenv("DASHSCOPE_API_KEY")
	req.Header.Set("Authorization", "Bearer "+apiKey)
	req.Header.Set("Content-Type", "application/json")

	// 发送请求
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()

	// 读取响应体
	bodyText, err := io.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}

	// 打印响应内容
	fmt.Printf("%s\n", bodyText)
}

curl

curl --location "https://dashscope.aliyuncs.com/api/v1/services/aigc/text-generation/generation" \
--header "Authorization: Bearer $DASHSCOPE_API_KEY" \
--header "Content-Type: application/json" \
--data '{
    "model": "qwen-plus",
    "input":{
        "messages":[      
            {
                "role": "system",
                "content": "You are a helpful assistant."
            },
            {
                "role": "user",
                "content": "你是谁?"
            }
        ]
    },
    "parameters": {
        "result_format": "message"
    }
}'

流式输出

相关文档:流式输出

Python

import os
import dashscope

messages = [
    {'role':'system','content':'you are a helpful assistant'},
    {'role': 'user','content': '你是谁?'}
]
responses = dashscope.Generation.call(
    # 若没有配置环境变量,请用百炼API Key将下行替换为:api_key="sk-xxx"
    api_key=os.getenv('DASHSCOPE_API_KEY'),
    model="qwen-plus", # 此处以qwen-plus为例,可按需更换模型名称。模型列表:https://help.aliyun.com/zh/model-studio/getting-started/models
    messages=messages,
    result_format='message',
    stream=True,
    incremental_output=True
    )
for response in responses:
    print(response)  

Java

import java.util.Arrays;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.alibaba.dashscope.aigc.generation.Generation;
import com.alibaba.dashscope.aigc.generation.GenerationParam;
import com.alibaba.dashscope.aigc.generation.GenerationResult;
import com.alibaba.dashscope.common.Message;
import com.alibaba.dashscope.common.Role;
import com.alibaba.dashscope.exception.ApiException;
import com.alibaba.dashscope.exception.InputRequiredException;
import com.alibaba.dashscope.exception.NoApiKeyException;
import com.alibaba.dashscope.utils.JsonUtils;
import io.reactivex.Flowable;
import java.lang.System;

public class Main {
    private static final Logger logger = LoggerFactory.getLogger(Main.class);
    private static void handleGenerationResult(GenerationResult message) {
        System.out.println(JsonUtils.toJson(message));
    }
    public static void streamCallWithMessage(Generation gen, Message userMsg)
            throws NoApiKeyException, ApiException, InputRequiredException {
        GenerationParam param = buildGenerationParam(userMsg);
        Flowable<GenerationResult> result = gen.streamCall(param);
        result.blockingForEach(message -> handleGenerationResult(message));
    }
    private static GenerationParam buildGenerationParam(Message userMsg) {
        return GenerationParam.builder()
                // 若没有配置环境变量,请用百炼API Key将下行替换为:.apiKey("sk-xxx")
                .apiKey(System.getenv("DASHSCOPE_API_KEY"))
                // 此处以qwen-plus为例,可按需更换模型名称。模型列表:https://help.aliyun.com/zh/model-studio/getting-started/models
                .model("qwen-plus")
                .messages(Arrays.asList(userMsg))
                .resultFormat(GenerationParam.ResultFormat.MESSAGE)
                .incrementalOutput(true)
                .build();
    }
    public static void main(String[] args) {
        try {
            Generation gen = new Generation();
            Message userMsg = Message.builder().role(Role.USER.getValue()).content("你是谁?").build();
            streamCallWithMessage(gen, userMsg);
        } catch (ApiException | NoApiKeyException | InputRequiredException  e) {
            logger.error("An exception occurred: {}", e.getMessage());
        }
        System.exit(0);
    }
}

curl

curl --location "https://dashscope.aliyuncs.com/api/v1/services/aigc/text-generation/generation" \
--header "Authorization: Bearer $DASHSCOPE_API_KEY" \
--header "Content-Type: application/json" \
--header "X-DashScope-SSE: enable" \
--data '{
    "model": "qwen-plus",
    "input":{
        "messages":[      
            {
                "role": "system",
                "content": "You are a helpful assistant."
            },
            {
                "role": "user",
                "content": "你是谁?"
            }
        ]
    },
    "parameters": {
        "result_format": "message",
        "incremental_output":true
    }
}'

图像输入

关于大模型分析图像的更多用法,请参见视觉理解

Python

import os
import dashscope

messages = [
    {
        "role": "user",
        "content": [
            {"image": "https://dashscope.oss-cn-beijing.aliyuncs.com/images/dog_and_girl.jpeg"},
            {"image": "https://dashscope.oss-cn-beijing.aliyuncs.com/images/tiger.png"},
            {"image": "https://dashscope.oss-cn-beijing.aliyuncs.com/images/rabbit.png"},
            {"text": "这些是什么?"}
        ]
    }
]
response = dashscope.MultiModalConversation.call(
    # 若没有配置环境变量,请用百炼API Key将下行替换为:api_key="sk-xxx"
    api_key=os.getenv('DASHSCOPE_API_KEY'),
    model='qwen-vl-max', # 此处以qwen-vl-max为例,可按需更换模型名称。模型列表:https://help.aliyun.com/zh/model-studio/getting-started/models
    messages=messages
    )
print(response)

Java

// Copyright (c) Alibaba, Inc. and its affiliates.

import java.util.Arrays;
import java.util.Collections;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversation;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversationParam;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversationResult;
import com.alibaba.dashscope.common.MultiModalMessage;
import com.alibaba.dashscope.common.Role;
import com.alibaba.dashscope.exception.ApiException;
import com.alibaba.dashscope.exception.NoApiKeyException;
import com.alibaba.dashscope.exception.UploadFileException;
import com.alibaba.dashscope.utils.JsonUtils;
public class Main {
    public static void simpleMultiModalConversationCall()
            throws ApiException, NoApiKeyException, UploadFileException {
        MultiModalConversation conv = new MultiModalConversation();
        MultiModalMessage userMessage = MultiModalMessage.builder().role(Role.USER.getValue())
                .content(Arrays.asList(
                        Collections.singletonMap("image", "https://dashscope.oss-cn-beijing.aliyuncs.com/images/dog_and_girl.jpeg"),
                        Collections.singletonMap("image", "https://dashscope.oss-cn-beijing.aliyuncs.com/images/tiger.png"),
                        Collections.singletonMap("image", "https://dashscope.oss-cn-beijing.aliyuncs.com/images/rabbit.png"),
                        Collections.singletonMap("text", "这些是什么?"))).build();
        MultiModalConversationParam param = MultiModalConversationParam.builder()
                // 若没有配置环境变量,请用百炼API Key将下行替换为:.apiKey("sk-xxx")
                .apiKey(System.getenv("DASHSCOPE_API_KEY"))
                // 此处以qwen-vl-plus为例,可按需更换模型名称。模型列表:https://help.aliyun.com/zh/model-studio/getting-started/models
                .model("qwen-vl-plus")
                .message(userMessage)
                .build();
        MultiModalConversationResult result = conv.call(param);
        System.out.println(JsonUtils.toJson(result));
    }

    public static void main(String[] args) {
        try {
            simpleMultiModalConversationCall();
        } catch (ApiException | NoApiKeyException | UploadFileException e) {
            System.out.println(e.getMessage());
        }
        System.exit(0);
    }
}

curl

curl --location 'https://dashscope.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation' \
--header "Authorization: Bearer $DASHSCOPE_API_KEY" \
--header 'Content-Type: application/json' \
--data '{
    "model": "qwen-vl-plus",
    "input":{
        "messages":[
            {
                "role": "user",
                "content": [
                    {"image": "https://dashscope.oss-cn-beijing.aliyuncs.com/images/dog_and_girl.jpeg"},
                    {"image": "https://dashscope.oss-cn-beijing.aliyuncs.com/images/tiger.png"},
                    {"image": "https://dashscope.oss-cn-beijing.aliyuncs.com/images/rabbit.png"},
                    {"text": "这些是什么?"}
                ]
            }
        ]
    }
}'

视频输入

以下为传入视频帧的示例代码,关于更多用法(如传入视频文件),请参见视觉理解

Python

from http import HTTPStatus
import os
# dashscope版本需要不低于1.20.10
import dashscope

messages = [{"role": "user",
             "content": [
                 {"video":["https://img.alicdn.com/imgextra/i3/O1CN01K3SgGo1eqmlUgeE9b_!!6000000003923-0-tps-3840-2160.jpg",
                           "https://img.alicdn.com/imgextra/i4/O1CN01BjZvwg1Y23CF5qIRB_!!6000000003000-0-tps-3840-2160.jpg",
                           "https://img.alicdn.com/imgextra/i4/O1CN01Ib0clU27vTgBdbVLQ_!!6000000007859-0-tps-3840-2160.jpg",
                           "https://img.alicdn.com/imgextra/i1/O1CN01aygPLW1s3EXCdSN4X_!!6000000005710-0-tps-3840-2160.jpg"]},
                 {"text": "描述这个视频的具体过程"}]}]
response = dashscope.MultiModalConversation.call(
    # 若没有配置环境变量,请用百炼API Key将下行替换为:api_key="sk-xxx"
    api_key=os.getenv("DASHSCOPE_API_KEY"),
    model='qwen-vl-max-latest',  # 此处以qwen-vl-max-latest为例,可按需更换模型名称。模型列表:https://help.aliyun.com/zh/model-studio/getting-started/models
    messages=messages
)
if response.status_code == HTTPStatus.OK:
    print(response)
else:
    print(response.code)
    print(response.message)

Java

// DashScope SDK版本需要不低于2.16.7
import java.util.Arrays;
import java.util.Collections;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversation;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversationParam;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversationResult;
import com.alibaba.dashscope.common.MultiModalMessage;
import com.alibaba.dashscope.common.Role;
import com.alibaba.dashscope.exception.ApiException;
import com.alibaba.dashscope.exception.NoApiKeyException;
import com.alibaba.dashscope.exception.UploadFileException;
import com.alibaba.dashscope.utils.JsonUtils;
public class Main {
    // 此处以qwen-vl-max-latest为例,可按需更换模型名称。模型列表:https://help.aliyun.com/zh/model-studio/getting-started/models
    private static final String MODEL_NAME = "qwen-vl-max-latest";
    public static void videoImageListSample() throws ApiException, NoApiKeyException, UploadFileException {
        MultiModalConversation conv = new MultiModalConversation();
        MultiModalMessage systemMessage = MultiModalMessage.builder()
                .role(Role.SYSTEM.getValue())
                .content(Arrays.asList(Collections.singletonMap("text", "You are a helpful assistant.")))
                .build();
        MultiModalMessage userMessage = MultiModalMessage.builder()
                .role(Role.USER.getValue())
                .content(Arrays.asList(Collections.singletonMap("video", Arrays.asList("https://img.alicdn.com/imgextra/i3/O1CN01K3SgGo1eqmlUgeE9b_!!6000000003923-0-tps-3840-2160.jpg",
                                "https://img.alicdn.com/imgextra/i4/O1CN01BjZvwg1Y23CF5qIRB_!!6000000003000-0-tps-3840-2160.jpg",
                                "https://img.alicdn.com/imgextra/i4/O1CN01Ib0clU27vTgBdbVLQ_!!6000000007859-0-tps-3840-2160.jpg",
                                "https://img.alicdn.com/imgextra/i1/O1CN01aygPLW1s3EXCdSN4X_!!6000000005710-0-tps-3840-2160.jpg")),
                        Collections.singletonMap("text", "描述这个视频的具体过程")))
                .build();
        MultiModalConversationParam param = MultiModalConversationParam.builder()
                .model(MODEL_NAME).message(systemMessage)
                .message(userMessage).build();
        MultiModalConversationResult result = conv.call(param);
        System.out.print(JsonUtils.toJson(result));
    }
    public static void main(String[] args) {
        try {
            videoImageListSample();
        } catch (ApiException | NoApiKeyException | UploadFileException e) {
            System.out.println(e.getMessage());
        }
        System.exit(0);
    }
}

curl

curl -X POST https://dashscope.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation \
-H "Authorization: Bearer $DASHSCOPE_API_KEY" \
-H 'Content-Type: application/json' \
-d '{
  "model": "qwen-vl-max-latest",
  "input": {
    "messages": [
      {
        "role": "user",
        "content": [
          {
            "video": [
              "https://img.alicdn.com/imgextra/i3/O1CN01K3SgGo1eqmlUgeE9b_!!6000000003923-0-tps-3840-2160.jpg",
              "https://img.alicdn.com/imgextra/i4/O1CN01BjZvwg1Y23CF5qIRB_!!6000000003000-0-tps-3840-2160.jpg",
              "https://img.alicdn.com/imgextra/i4/O1CN01Ib0clU27vTgBdbVLQ_!!6000000007859-0-tps-3840-2160.jpg",
              "https://img.alicdn.com/imgextra/i1/O1CN01aygPLW1s3EXCdSN4X_!!6000000005710-0-tps-3840-2160.jpg"
            ]
          },
          {
            "text": "描述这个视频的具体过程"
          }
        ]
      }
    ]
  }
}'

音频输入

音频理解

关于大模型分析音频的更多用法,请参见音频理解-Qwen-Audio

Python

import os
import dashscope

messages = [
    {
        "role": "user",
        "content": [
            {"audio": "https://dashscope.oss-cn-beijing.aliyuncs.com/audios/welcome.mp3"},
            {"text": "这段音频在说什么?"}
        ]
    }
]
response = dashscope.MultiModalConversation.call(
    # 若没有配置环境变量,请用百炼API Key将下行替换为:api_key="sk-xxx"
    api_key=os.getenv('DASHSCOPE_API_KEY'),
    model='qwen2-audio-instruct', # 此处以qwen2-audio-instruct为例,可按需更换模型名称。模型列表:https://help.aliyun.com/zh/model-studio/getting-started/models
    messages=messages
    )
print(response)

Java

import java.util.Arrays;
import java.util.Collections;
import java.lang.System;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversation;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversationParam;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversationResult;
import com.alibaba.dashscope.common.MultiModalMessage;
import com.alibaba.dashscope.common.Role;
import com.alibaba.dashscope.exception.ApiException;
import com.alibaba.dashscope.exception.NoApiKeyException;
import com.alibaba.dashscope.exception.UploadFileException;
import com.alibaba.dashscope.utils.JsonUtils;
public class Main {
    public static void simpleMultiModalConversationCall()
            throws ApiException, NoApiKeyException, UploadFileException {
        MultiModalConversation conv = new MultiModalConversation();
        MultiModalMessage userMessage = MultiModalMessage.builder().role(Role.USER.getValue())
                .content(Arrays.asList(Collections.singletonMap("audio", "https://dashscope.oss-cn-beijing.aliyuncs.com/audios/welcome.mp3"),
                        Collections.singletonMap("text", "这段音频在说什么?"))).build();
        MultiModalConversationParam param = MultiModalConversationParam.builder()
                // 若没有配置环境变量,请用百炼API Key将下行替换为:.apiKey("sk-xxx")
                .apiKey(System.getenv("DASHSCOPE_API_KEY"))
                // 此处以qwen2-audio-instruct为例,可按需更换模型名称。模型列表:https://help.aliyun.com/zh/model-studio/getting-started/models
                .model("qwen2-audio-instruct")
                .message(userMessage)
                .build();
        MultiModalConversationResult result = conv.call(param);
        System.out.println(JsonUtils.toJson(result));
    }

    public static void main(String[] args) {
        try {
            simpleMultiModalConversationCall();
        } catch (ApiException | NoApiKeyException | UploadFileException e) {
            System.out.println(e.getMessage());
        }
        System.exit(0);
    }
}

curl

curl --location 'https://dashscope.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation' \
--header "Authorization: Bearer $DASHSCOPE_API_KEY" \
--header 'Content-Type: application/json' \
--data '{
    "model": "qwen2-audio-instruct",
    "input":{
        "messages":[
            {
                "role": "system",
                "content": [
                    {"text": "You are a helpful assistant."}
                ]
            },
            {
                "role": "user",
                "content": [
                    {"audio": "https://dashscope.oss-cn-beijing.aliyuncs.com/audios/welcome.mp3"},
                    {"text": "这段音频在说什么?"}
                ]
            }
        ]
    }
}'

联网搜索

Python

import os
import dashscope

messages = [
    {'role': 'system', 'content': 'You are a helpful assistant.'},
    {'role': 'user', 'content': '杭州明天天气是什么?'}
    ]
response = dashscope.Generation.call(
    # 若没有配置环境变量,请用百炼API Key将下行替换为:api_key="sk-xxx"
    api_key=os.getenv('DASHSCOPE_API_KEY'),
    model="qwen-plus", # 此处以qwen-plus为例,可按需更换模型名称。模型列表:https://help.aliyun.com/zh/model-studio/getting-started/models
    messages=messages,
    enable_search=True,
    result_format='message'
    )
print(response)

Java

// 建议dashscope SDK的版本 >= 2.12.0
import java.util.Arrays;
import java.lang.System;
import com.alibaba.dashscope.aigc.generation.Generation;
import com.alibaba.dashscope.aigc.generation.GenerationParam;
import com.alibaba.dashscope.aigc.generation.GenerationResult;
import com.alibaba.dashscope.common.Message;
import com.alibaba.dashscope.common.Role;
import com.alibaba.dashscope.exception.ApiException;
import com.alibaba.dashscope.exception.InputRequiredException;
import com.alibaba.dashscope.exception.NoApiKeyException;
import com.alibaba.dashscope.utils.JsonUtils;

public class Main {
    public static GenerationResult callWithMessage() throws ApiException, NoApiKeyException, InputRequiredException {
        Generation gen = new Generation();
        Message systemMsg = Message.builder()
                .role(Role.SYSTEM.getValue())
                .content("You are a helpful assistant.")
                .build();
        Message userMsg = Message.builder()
                .role(Role.USER.getValue())
                .content("明天杭州什么天气?")
                .build();
        GenerationParam param = GenerationParam.builder()
                // 若没有配置环境变量,请用百炼API Key将下行替换为:.apiKey("sk-xxx")
                .apiKey(System.getenv("DASHSCOPE_API_KEY"))
                // 此处以qwen-plus为例,可按需更换模型名称。模型列表:https://help.aliyun.com/zh/model-studio/getting-started/models
                .model("qwen-plus")
                .messages(Arrays.asList(systemMsg, userMsg))
                .resultFormat(GenerationParam.ResultFormat.MESSAGE)
                .enableSearch(true)
                .build();
        return gen.call(param);
    }
    public static void main(String[] args) {
        try {
            GenerationResult result = callWithMessage();
            System.out.println(JsonUtils.toJson(result));
        } catch (ApiException | NoApiKeyException | InputRequiredException e) {
            // 使用日志框架记录异常信息
            System.err.println("An error occurred while calling the generation service: " + e.getMessage());
        }
        System.exit(0);
    }
}

curl

curl -X POST https://dashscope.aliyuncs.com/api/v1/services/aigc/text-generation/generation \
-H "Authorization: Bearer $DASHSCOPE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
    "model": "qwen-plus",
    "input":{
        "messages":[      
            {
                "role": "system",
                "content": "You are a helpful assistant."
            },
            {
                "role": "user",
                "content": "明天杭州天气如何?"
            }
        ]
    },
    "parameters": {
        "enable_search": true,
        "result_format": "message"
    }
}'

工具调用

完整的Function Calling 流程代码请参见Function Calling

Python

import os
import dashscope

tools = [
    {
        "type": "function",
        "function": {
            "name": "get_current_time",
            "description": "当你想知道现在的时间时非常有用。",
            "parameters": {}
        }
    },  
    {
        "type": "function",
        "function": {
            "name": "get_current_weather",
            "description": "当你想查询指定城市的天气时非常有用。",
            "parameters": {
                "type": "object",
                "properties": {
                    "location": {
                        "type": "string",
                        "description": "城市或县区,比如北京市、杭州市、余杭区等。"
                    }
                }
            },
            "required": [
                "location"
            ]
        }
    }
]
messages = [{"role": "user", "content": "杭州天气怎么样"}]
response = dashscope.Generation.call(
    # 若没有配置环境变量,请用百炼API Key将下行替换为:api_key="sk-xxx"
    api_key=os.getenv('DASHSCOPE_API_KEY'),
    model='qwen-plus',  # 此处以qwen-plus为例,可按需更换模型名称。模型列表:https://help.aliyun.com/zh/model-studio/getting-started/models
    messages=messages,
    tools=tools,
    result_format='message'
)
print(response)

Java

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import com.alibaba.dashscope.aigc.conversation.ConversationParam.ResultFormat;
import com.alibaba.dashscope.aigc.generation.Generation;
import com.alibaba.dashscope.aigc.generation.GenerationParam;
import com.alibaba.dashscope.aigc.generation.GenerationResult;
import com.alibaba.dashscope.common.Message;
import com.alibaba.dashscope.common.Role;
import com.alibaba.dashscope.exception.ApiException;
import com.alibaba.dashscope.exception.InputRequiredException;
import com.alibaba.dashscope.exception.NoApiKeyException;
import com.alibaba.dashscope.tools.FunctionDefinition;
import com.alibaba.dashscope.tools.ToolFunction;
import com.alibaba.dashscope.utils.JsonUtils;
import com.fasterxml.jackson.databind.node.ObjectNode;
import com.github.victools.jsonschema.generator.Option;
import com.github.victools.jsonschema.generator.OptionPreset;
import com.github.victools.jsonschema.generator.SchemaGenerator;
import com.github.victools.jsonschema.generator.SchemaGeneratorConfig;
import com.github.victools.jsonschema.generator.SchemaGeneratorConfigBuilder;
import com.github.victools.jsonschema.generator.SchemaVersion;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;

public class Main {
    public class GetWeatherTool {
        private String location;
        public GetWeatherTool(String location) {
            this.location = location;
        }
        public String call() {
            return location+"今天是晴天";
        }
    }
    public class GetTimeTool {
        public GetTimeTool() {
        }
        public String call() {
            LocalDateTime now = LocalDateTime.now();
            DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
            String currentTime = "当前时间:" + now.format(formatter) + "。";
            return currentTime;
        }
    }
    public static void SelectTool()
            throws NoApiKeyException, ApiException, InputRequiredException {
        SchemaGeneratorConfigBuilder configBuilder =
                new SchemaGeneratorConfigBuilder(SchemaVersion.DRAFT_2020_12, OptionPreset.PLAIN_JSON);
        SchemaGeneratorConfig config = configBuilder.with(Option.EXTRA_OPEN_API_FORMAT_VALUES)
                .without(Option.FLATTENED_ENUMS_FROM_TOSTRING).build();
        SchemaGenerator generator = new SchemaGenerator(config);
        ObjectNode jsonSchema_weather = generator.generateSchema(GetWeatherTool.class);
        ObjectNode jsonSchema_time = generator.generateSchema(GetTimeTool.class);
        FunctionDefinition fdWeather = FunctionDefinition.builder().name("get_current_weather").description("获取指定地区的天气")
                .parameters(JsonUtils.parseString(jsonSchema_weather.toString()).getAsJsonObject()).build();
        FunctionDefinition fdTime = FunctionDefinition.builder().name("get_current_time").description("获取当前时刻的时间")
                .parameters(JsonUtils.parseString(jsonSchema_time.toString()).getAsJsonObject()).build();
        Message systemMsg = Message.builder().role(Role.SYSTEM.getValue())
                .content("You are a helpful assistant. When asked a question, use tools wherever possible.")
                .build();
        Message userMsg = Message.builder().role(Role.USER.getValue()).content("杭州天气").build();
        List<Message> messages = new ArrayList<>();
        messages.addAll(Arrays.asList(systemMsg, userMsg));
        GenerationParam param = GenerationParam.builder()
                // 若没有配置环境变量,请用百炼API Key将下行替换为:.apiKey("sk-xxx")
                .apiKey(System.getenv("DASHSCOPE_API_KEY"))
                // 此处以qwen-plus为例,可按需更换模型名称。模型列表:https://help.aliyun.com/zh/model-studio/getting-started/models
                .model("qwen-plus")
                .messages(messages)
                .resultFormat(ResultFormat.MESSAGE)
                .tools(Arrays.asList(
                        ToolFunction.builder().function(fdWeather).build(),
                        ToolFunction.builder().function(fdTime).build()))
                .build();
        Generation gen = new Generation();
        GenerationResult result = gen.call(param);
        System.out.println(JsonUtils.toJson(result));
    }
    public static void main(String[] args) {
        try {
            SelectTool();
        } catch (ApiException | NoApiKeyException | InputRequiredException e) {
            System.out.println(String.format("Exception %s", e.getMessage()));
        }
        System.exit(0);
    }
}

curl

curl --location "https://dashscope.aliyuncs.com/api/v1/services/aigc/text-generation/generation" \
--header "Authorization: Bearer $DASHSCOPE_API_KEY" \
--header "Content-Type: application/json" \
--data '{
    "model": "qwen-plus",
    "input": {
        "messages": [{
            "role": "user",
            "content": "杭州天气怎么样"
        }]
    },
    "parameters": {
        "result_format": "message",
        "tools": [{
            "type": "function",
            "function": {
                "name": "get_current_time",
                "description": "当你想知道现在的时间时非常有用。",
                "parameters": {}
            }
        },{
            "type": "function",
            "function": {
                "name": "get_current_weather",
                "description": "当你想查询指定城市的天气时非常有用。",
                "parameters": {
                    "type": "object",
                    "properties": {
                        "location": {
                            "type": "string",
                            "description": "城市或县区,比如北京市、杭州市、余杭区等。"
                        }
                    }
                },
                "required": ["location"]
            }
        }]
    }
}'

异步调用

# 您的Dashscope Python SDK版本需要不低于 1.19.0。
import asyncio
import platform
import os
from dashscope.aigc.generation import AioGeneration

async def main():
    response = await AioGeneration.call(
        # 若没有配置环境变量,请用百炼API Key将下行替换为:api_key="sk-xxx"
        api_key=os.getenv('DASHSCOPE_API_KEY'),
        model="qwen-plus",  # 此处以qwen-plus为例,可按需更换模型名称。模型列表:https://help.aliyun.com/zh/model-studio/getting-started/models
        messages=[{"role": "user", "content": "你是谁"}],
        result_format="message",
    )
    print(response)

if platform.system() == "Windows":
    asyncio.set_event_loop_policy(asyncio.WindowsSelectorEventLoopPolicy())
asyncio.run(main())

文字提取

关于通义千问OCR模型进行文字提取更多用法,请参见文字提取

Python

# use [pip install -U dashscope] to update sdk

import os
from dashscope import MultiModalConversation

messages = [
      {
        "role":"user",
        "content":[
          {
              "image":"https://prism-test-data.oss-cn-hangzhou.aliyuncs.com/image/car_invoice/car-invoice-img00040.jpg",
              "min_pixels": 3136,
              "max_pixels": 6422528,
              "enable_rotate": True
          }
        ]
      }
    ]
params = {
  "ocr_options":{
    # 设置信息抽取的内置任务,无需传入Prompt,模型会使用任务对应的内置Prompt
    "task": "key_information_extraction",
    "task_config": {
      "result_schema": {
          "销售方名称": "",
          "购买方名称": "",
          "不含税价": "",
          "组织机构代码": "",
          "发票代码": ""
      }
    }
  }
}

response = MultiModalConversation.call(model='qwen-vl-ocr-latest',
                                       messages=messages,
                                       **params,
                                       api_key=os.getenv('DASHSCOPE_API_KEY'))

print(response.output.choices[0].message.content[0]["ocr_result"])

Java

import java.util.Arrays;
import java.util.Collections;
import java.util.Map;
import java.util.HashMap;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversation;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversationParam;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversationResult;
import com.alibaba.dashscope.aigc.multimodalconversation.OcrOptions;
import com.alibaba.dashscope.common.MultiModalMessage;
import com.alibaba.dashscope.common.Role;
import com.alibaba.dashscope.exception.ApiException;
import com.alibaba.dashscope.exception.NoApiKeyException;
import com.alibaba.dashscope.exception.UploadFileException;
import com.google.gson.JsonObject;

public class Main {
    public static void simpleMultiModalConversationCall()
            throws ApiException, NoApiKeyException, UploadFileException {
        MultiModalConversation conv = new MultiModalConversation();
        Map<String, Object> map = new HashMap<>();
        map.put("image", "https://prism-test-data.oss-cn-hangzhou.aliyuncs.com/image/car_invoice/car-invoice-img00040.jpg");
        // 输入图像的最大像素阈值,超过该值图像会按原比例缩小,直到总像素低于max_pixels
        map.put("max_pixels", "6422528");
        // 输入图像的最小像素阈值,小于该值图像会按原比例放大,直到总像素大于min_pixels
        map.put("min_pixels", "3136");
        // 开启图像自动转正功能
        map.put("enable_rotate", true);

        MultiModalMessage userMessage = MultiModalMessage.builder().role(Role.USER.getValue())
                .content(Arrays.asList(
                        map
                        )).build();

        // 创建主JSON对象
        JsonObject resultSchema = new JsonObject();
        resultSchema.addProperty("销售方名称", "");
        resultSchema.addProperty("购买方名称", "");
        resultSchema.addProperty("不含税价", "");
        resultSchema.addProperty("组织机构代码", "");
        resultSchema.addProperty("发票代码", "");

       // 设置信息抽取的内置任务,无需传入Prompt,模型会使用任务对应的内置Prompt
        OcrOptions ocrOptions = OcrOptions.builder()
                .task(OcrOptions.Task.KEY_INFORMATION_EXTRACTION)
                .taskConfig(OcrOptions.TaskConfig.builder()
                        .resultSchema(resultSchema)
                        .build())
                .build();

        MultiModalConversationParam param = MultiModalConversationParam.builder()
                // 若没有配置环境变量,请用百炼API Key将下行替换为:.apiKey("sk-xxx")
                .apiKey(System.getenv("DASHSCOPE_API_KEY"))
                .model("qwen-vl-ocr-latest")
                .message(userMessage)
                .ocrOptions(ocrOptions)
                .build();
        MultiModalConversationResult result = conv.call(param);
        System.out.println(result.getOutput().getChoices().get(0).getMessage().getContent().get(0).get("ocr_result"));
    }

    public static void main(String[] args) {
        try {
            simpleMultiModalConversationCall();
        } catch (ApiException | NoApiKeyException | UploadFileException e) {
            System.out.println(e.getMessage());
        }
        System.exit(0);
    }
}

curl

curl --location 'https://dashscope.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation' \
--header "Authorization: Bearer $DASHSCOPE_API_KEY" \
--header 'Content-Type: application/json' \
--data '
{
  "model": "qwen-vl-ocr-latest",
  "input": {
    "messages": [
      {
        "role": "user",
        "content": [
          {
            "image": "https://prism-test-data.oss-cn-hangzhou.aliyuncs.com/image/car_invoice/car-invoice-img00040.jpg",
            "min_pixels": 3136,
            "max_pixels": 6422528,
            "enable_rotate": true
          }
        ]
      }
    ]
  },
  "parameters": {
    "ocr_options": {
      "task": "key_information_extraction",
    "task_config": {
      "result_schema": {
          "销售方名称": "",
          "购买方名称": "",
          "不含税价": "",
          "组织机构代码": "",
          "发票代码": ""
      }
    }

    }
  }
}
'

深入研究

关于深入研究模型(qwen-deep-research)的更多用法,请参见深入研究(Qwen-Deep-Research)
import os
import dashscope

# 配置API Key
# 若没有配置环境变量,请用百炼API Key将下行替换为:API_KEY = "sk-xxx"
API_KEY = os.getenv('DASHSCOPE_API_KEY')

def call_deep_research_model(messages, step_name):
    print(f"\n=== {step_name} ===")
    
    try:
        responses = dashscope.Generation.call(
            api_key=API_KEY,
            model="qwen-deep-research",
            messages=messages,
            # qwen-deep-research模型目前仅支持流式输出
            stream=True
            # incremental_output=True 使用增量输出请添加此参数
        )
        
        return process_responses(responses, step_name)
        
    except Exception as e:
        print(f"调用API时发生错误: {e}")
        return ""


# 显示阶段内容
def display_phase_content(phase, content, status):
    if content:
        print(f"\n[{phase}] {status}: {content}")
    else:
        print(f"\n[{phase}] {status}")

# 处理响应
def process_responses(responses, step_name):
    current_phase = None
    phase_content = ""
    research_goal = ""
    web_sites = []
    keepalive_shown = False  # 标记是否已经显示过KeepAlive提示

    for response in responses:
        # 检查响应状态码
        if hasattr(response, 'status_code') and response.status_code != 200:
            print(f"HTTP返回码:{response.status_code}")
            if hasattr(response, 'code'):
                print(f"错误码:{response.code}")
            if hasattr(response, 'message'):
                print(f"错误信息:{response.message}")
            print("请参考文档:https://help.aliyun.com/zh/model-studio/developer-reference/error-code")
            continue

        if hasattr(response, 'output') and response.output:
            message = response.output.get('message', {})
            phase = message.get('phase')
            content = message.get('content', '')
            status = message.get('status')
            extra = message.get('extra', {})

            # 阶段变化检测
            if phase != current_phase:
                if current_phase and phase_content:
                    # 根据阶段名称和步骤名称来显示不同的完成描述
                    if step_name == "第一步:模型反问确认" and current_phase == "answer":
                        print(f"\n 模型反问阶段完成")
                    else:
                        print(f"\n {current_phase} 阶段完成")
                current_phase = phase
                phase_content = ""
                keepalive_shown = False  # 重置KeepAlive提示标记

                # 根据阶段名称和步骤名称来显示不同的描述
                if step_name == "第一步:模型反问确认" and phase == "answer":
                    print(f"\n 进入模型反问阶段")
                else:
                    print(f"\n 进入 {phase} 阶段")

            # 处理WebResearch阶段的特殊信息
            if phase == "WebResearch":
                if extra.get('deep_research', {}).get('research'):
                    research_info = extra['deep_research']['research']

                    # 处理streamingQueries状态
                    if status == "streamingQueries":
                        if 'researchGoal' in research_info:
                            goal = research_info['researchGoal']
                            if goal:
                                research_goal += goal
                                print(f"\n   研究目标: {goal}", end='', flush=True)

                    # 处理streamingWebResult状态
                    elif status == "streamingWebResult":
                        if 'webSites' in research_info:
                            sites = research_info['webSites']
                            if sites and sites != web_sites:  # 避免重复显示
                                web_sites = sites
                                print(f"\n   找到 {len(sites)} 个相关网站:")
                                for i, site in enumerate(sites, 1):
                                    print(f"     {i}. {site.get('title', '无标题')}")
                                    print(f"        描述: {site.get('description', '无描述')[:100]}...")
                                    print(f"        URL: {site.get('url', '无链接')}")
                                    if site.get('favicon'):
                                        print(f"        图标: {site['favicon']}")
                                    print()

                    # 处理WebResultFinished状态
                    elif status == "WebResultFinished":
                        print(f"\n   网络搜索完成,共找到 {len(web_sites)} 个参考信息源")
                        if research_goal:
                            print(f"   研究目标: {research_goal}")

            # 累积内容并显示
            if content:
                phase_content += content
                # 实时显示内容
                print(content, end='', flush=True)

            # 显示阶段状态变化
            if status and status != "typing":
                print(f"\n   状态: {status}")

                # 显示状态说明
                if status == "streamingQueries":
                    print("   → 正在生成研究目标和搜索查询(WebResearch阶段)")
                elif status == "streamingWebResult":
                    print("   → 正在执行搜索、网页阅读和代码执行(WebResearch阶段)")
                elif status == "WebResultFinished":
                    print("   → 网络搜索阶段完成(WebResearch阶段)")

            # 当状态为finished时,显示token消耗情况
            if status == "finished":
                if hasattr(response, 'usage') and response.usage:
                    usage = response.usage
                    print(f"\n    Token消耗统计:")
                    print(f"      输入tokens: {usage.get('input_tokens', 0)}")
                    print(f"      输出tokens: {usage.get('output_tokens', 0)}")
                    print(f"      请求ID: {response.get('request_id', '未知')}")

            if phase == "KeepAlive":
                # 只在第一次进入KeepAlive阶段时显示提示
                if not keepalive_shown:
                    print("当前步骤已经完成,准备开始下一步骤工作")
                    keepalive_shown = True
                continue

    if current_phase and phase_content:
        if step_name == "第一步:模型反问确认" and current_phase == "answer":
            print(f"\n 模型反问阶段完成")
        else:
            print(f"\n {current_phase} 阶段完成")

    return phase_content

def main():
    # 检查API Key
    if not API_KEY:
        print("错误:未设置 DASHSCOPE_API_KEY 环境变量")
        print("请设置环境变量或直接在代码中修改 API_KEY 变量")
        return
    
    print("用户发起对话:研究一下人工智能在教育中的应用")
    
    # 第一步:模型反问确认
    # 模型会分析用户问题,提出细化问题来明确研究方向
    messages = [{'role': 'user', 'content': '研究一下人工智能在教育中的应用'}]
    step1_content = call_deep_research_model(messages, "第一步:模型反问确认")

    # 第二步:深入研究
    # 基于第一步的反问内容,模型会执行完整的研究流程
    messages = [
        {'role': 'user', 'content': '研究一下人工智能在教育中的应用'},
        {'role': 'assistant', 'content': step1_content},  # 包含模型的反问内容
        {'role': 'user', 'content': '我主要关注个性化学习和智能评估这两个方面'}
    ]
    
    call_deep_research_model(messages, "第二步:深入研究")
    print("\n 研究完成!")

if __name__ == "__main__":
    main()
echo "第一步:模型反问确认"
curl --location 'https://dashscope.aliyuncs.com/api/v1/services/aigc/text-generation/generation' \
--header 'X-DashScope-SSE: enable' \
--header "Authorization: Bearer $DASHSCOPE_API_KEY" \
--header 'Content-Type: application/json' \
--data '{
    "input": {
        "messages": [
            {
                "content": "研究一下人工智能在教育中的应用", 
                "role": "user"
            }
        ]
    },
    "model": "qwen-deep-research"
}'

echo -e "\n\n" 
echo "第二步:深入研究"
curl --location 'https://dashscope.aliyuncs.com/api/v1/services/aigc/text-generation/generation' \
--header 'X-DashScope-SSE: enable' \
--header "Authorization: Bearer $DASHSCOPE_API_KEY" \
--header 'Content-Type: application/json' \
--data '{
    "input": {
        "messages": [
            {
                "content": "研究一下人工智能在教育中的应用", 
                "role": "user"
            },
            {
                "content": "请告诉我您希望重点研究人工智能在教育中的哪些具体应用场景?", 
                "role": "assistant"
            },
            {
                "content": "我主要关注个性化学习方面", 
                "role": "user"
            }
        ]
    },
    "model": "qwen-deep-research"
}'

文档理解

Python

import os
import dashscope

messages = [
        {'role': 'system', 'content': 'you are a helpful assisstant'},
        # 请将 '{FILE_ID}'替换为您实际对话场景所使用的 fileid
        {'role':'system','content':f'fileid://{FILE_ID}'},
        {'role': 'user', 'content': '这篇文章讲了什么'}]
response = dashscope.Generation.call(
    # 若没有配置环境变量,请用百炼API Key将下行替换为:api_key="sk-xxx"
    api_key=os.getenv('DASHSCOPE_API_KEY'),
    model="qwen-long",
    messages=messages,
    result_format='message'
)
print(response)

Java

import java.util.Arrays;
import com.alibaba.dashscope.aigc.generation.Generation;
import com.alibaba.dashscope.aigc.generation.GenerationParam;
import com.alibaba.dashscope.aigc.generation.GenerationResult;
import com.alibaba.dashscope.common.Message;
import com.alibaba.dashscope.common.Role;
import com.alibaba.dashscope.exception.ApiException;
import com.alibaba.dashscope.exception.InputRequiredException;
import com.alibaba.dashscope.exception.NoApiKeyException;
import com.alibaba.dashscope.utils.JsonUtils;

public class Main {

    public static GenerationResult callWithFile() throws ApiException, NoApiKeyException, InputRequiredException {
        Generation gen = new Generation();

        Message systemMsg = Message.builder()
                .role(Role.SYSTEM.getValue())
                .content("you are a helpful assistant")
                .build();

        Message fileSystemMsg = Message.builder()
                .role(Role.SYSTEM.getValue())
                // 请将 '{FILE_ID}'替换为您实际对话场景所使用的 file-id
                .content("fileid://{FILE_ID}")
                .build();

        Message userMsg = Message.builder()
                .role(Role.USER.getValue())
                .content("这篇文章讲了什么")
                .build();

        GenerationParam param = GenerationParam.builder()
                // 若没有配置环境变量,请用百炼API Key将下行替换为:.apiKey("sk-xxx")
                .apiKey(System.getenv("DASHSCOPE_API_KEY"))
                .model("qwen-long")
                .messages(Arrays.asList(systemMsg, fileSystemMsg, userMsg))
                .resultFormat(GenerationParam.ResultFormat.MESSAGE)
                .build();

        return gen.call(param);
    }

    public static void main(String[] args) {
        try {
            GenerationResult result = callWithFile();
            System.out.println(JsonUtils.toJson(result));
        } catch (ApiException | NoApiKeyException | InputRequiredException e) {
            System.err.println("调用 DashScope API 出错: " + e.getMessage());
            e.printStackTrace();
        }
    }
}


curl

请将 {FILE_ID}替换为您实际对话场景所使用的 file-id
curl --location "https://dashscope.aliyuncs.com/api/v1/services/aigc/text-generation/generation" \
--header "Authorization: Bearer $DASHSCOPE_API_KEY" \
--header "Content-Type: application/json" \
--data '{
    "model": "qwen-long",
    "input":{
        "messages":[      
            {
                "role": "system",
                "content": "You are a helpful assistant."
            },
            {
                "role": "system",
                "content": "fileid://{FILE_ID}"
            },
            {
                "role": "user",
                "content": "这篇文章讲了什么?"
            }
        ]
    },
    "parameters": {
        "result_format": "message"
    }
}'

model string (必选)

模型名称。

支持的模型:Qwen 大语言模型(商业版、开源版)、Qwen-VL、Qwen-Coder、深入研究模型、通义千问Audio、数学模型

具体模型名称和计费,请参见模型列表

messages array (必选)

传递给大模型的上下文,按对话顺序排列。

通过HTTP调用时,请将messages 放入 input 对象中。

消息类型

System Message object(可选)

系统消息,用于设定大模型的角色、语气、任务目标或约束条件等。一般放在messages数组的第一位。

QwQ 、Qwen3-VL模型不建议设置 System Message,QVQ 模型设置 System Message不会生效。

属性

content string(必选)

消息内容。

role string (必选)

系统消息的角色,固定为system

QwQ 模型不建议设置 System Message,QVQ 模型设置System Message不会生效。

User Message object(必选)

用户消息,用于向模型传递问题、指令或上下文等。

属性

content string 或 array(必选)

消息内容。若输入只有文本,则为 string 类型;若输入包含图像等多模态数据,或启用显式缓存,则为 array 类型。

属性

text string(必选)

输入的文本。

image string(可选)

使用Qwen-VL 模型进行图片理解时,传入的图片文件。可以为图片的URL或本地路径信息。传入本地文件请参见本地文件(Qwen-VL)本地文件(QVQ)

示例值:{"image":"https://xxxx.jpeg"}

enable_rotate boolean (可选)默认值为false

是否在调用通义千问 OCR 模型时自动校正图像方向。

可选值:

  • true:自动校正

  • false:不自动校正

video array 或 string(可选)

使用Qwen-VL 模型QVQ模型传入的视频。

  • 若传入图像列表,则为array类型;

  • 若传入视频文件,则为string类型

传入本地文件请参见本地文件(Qwen-VL)本地文件(QVQ)

示例值:

  • 图像列表:{"video":["https://xx1.jpg",...,"https://xxn.jpg"]}

  • 视频文件:{"video":"https://xxx.mp4"}

Qwen-VL 部分模型可输入视频文件,详情请参见视频理解(Qwen-VL);QVQ模型可直接传入视频文件。

fps float (可选)

每秒抽帧数。有两个功能:

  • 输入视频文件时,控制抽帧频率,每 秒抽取一帧。

    适用于Qwen-VL 模型QVQ模型
  • 告知模型相邻帧之间的时间间隔,帮助其更好地理解视频的时间动态。同时适用于输入视频文件与图像列表时。该功能同时支持视频文件和图像列表输入,适用于事件时间定位或分段内容摘要等场景。

    支持Qwen2.5-VLQwen3-VL模型与QVQ模型。

Qwen2.5-VL 系列模型

  • qwen-vl-max系列:qwen-vl-max-latestqwen-vl-max-2025-01-25及之后的模型

  • qwen-vl-plus系列:qwen-vl-plus、qwen-vl-plus-latestqwen-vl-plus-2025-01-25及之后的模型

  • 开源系列:qwen2.5-vl系列模型

video参数一起使用,取值范围为 (0.1, 10),默认值为2.0,示例值如下:

  • 图像列表传入:{"video":["https://xx1.jpg",...,"https://xxn.jpg"],"fps":2}

  • 视频文件传入:{"video": "https://xx1.mp4","fps":2}

较大的fps适合高速运动的场景(如体育赛事、动作电影等),较小的fps适合长视频或内容偏静态的场景。

OpenAI 兼容协议不支持设置该值。视频文件默认每间隔0.5秒抽取一帧,图像列表默认是以每隔0.5秒从视频中抽取出来的。

audio string

模型为音频理解时,是必选参数,如模型为qwen2-audio-instruct等。

使用音频理解功能时,传入的音频文件。

示例值:{"audio":"https://xxx.mp3"}

min_pixels integer (可选)

输入图像总像素的最小阈值。若图像总像素低于该值,系统将按原始宽高比放大图像,直到总像素高于min_pixels。支持Qwen-OCRQwen-VL模型。

min_pixels 取值范围

  • Qwen-OCR、qwen-vl-max-0813及之前qwen-vl-plus-0710及之前更新的模型:默认值和最小值均为3136

  • qwen-vl-max-0813及之后、qwen-vl-plus-0710及以后更新的模型:默认值和最小值均为4096

  • Qwen3-VL:默认值:65536,最小值:4096

max_pixels integer (可选)

Qwen-OCR、Qwen-VL支持,用于设定输入图像的最大像素阈值。

当输入图像像素在[min_pixels, max_pixels]区间内时,模型会按原图进行识别。当输入图像像素大于max_pixels时,会将图像按原比例缩小,直到总像素低于max_pixels

max_pixels 取值范围

  • 对于Qwen-OCR模型:默认值:6422528,最大值:23520000

  • 对于Qwen-VL模型,分两种情况:

    • vl_high_resolution_imagesFalse(关闭高分辨率模式)时:

      • Qwen2.5-VL:默认值和最大值均为1003520

      • Qwen3-VL:默认值和最大值均为:2621440

    • vl_high_resolution_imagesTrue(开启高分辨率模式)时:

      • Qwen2.5-VL:固定为 12845056

      • Qwen3-VL:固定为 16777216

cache_control object (可选)

仅支持显式缓存的模型支持,用于开启显式缓存。

属性

type string(必选)

固定为ephemeral

role string (必选)

用户消息的角色,固定为user

Assistant Message object (可选)

模型对用户消息的回复。

属性

content string (可选)

消息内容。仅当助手消息中指定tool_calls参数时非必选。

role string (必选)

固定为assistant

partial boolean (可选)

是否开启前缀续写。相关文档:前缀续写

支持的模型

  • 通义千问Max 系列

    qwen3-max、qwen3-max-2025-09-23、qwen3-max-preview(非思考模式)、qwen-max、qwen-max-latest、qwen-max-2024-09-19及之后的快照模型

  • 通义千问Plus 系列(非思考模式)

    qwen-plus、qwen-plus-latest、qwen-plus-2024-09-19及之后的快照模型

  • 通义千问Flash 系列(非思考模式)

    qwen-flash、qwen-flash-2025-07-28及之后的快照模型

  • 通义千问Coder 系列

    qwen3-coder-plus、qwen3-coder-flash、qwen3-coder-480b-a35b-instruct、qwen3-coder-30b-a3b-instruct、qwen-coder-plus、qwen-coder-plus-latest、qwen-coder-plus-2024-11-06、qwen-coder-turbo、qwen-coder-turbo-latest、qwen-coder-turbo-2024-09-19、qwen2.5-coder-32b-instruct、qwen2.5-coder-14b-instruct、qwen2.5-coder-7b-instruct、qwen2.5-coder-3b-instruct、qwen2.5-coder-1.5b-instruct、qwen2.5-coder-0.5b-instruct

  • 通义千问VL 系列

    • qwen3-vl-plus 系列(非思考模式)

      qwen3-vl-plus、qwen3-vl-plus-2025-09-23及之后的快照模型

    • qwen3-vl-flash 系列(非思考模式)

      qwen3-vl-flash、qwen3-vl-flash-2025-10-15及之后的快照模型

    • qwen-vl-max 系列

      qwen-vl-max、qwen-vl-max-latest、qwen-vl-max-2024-08-09及之后的快照模型

    • qwen-vl-plus 系列

      qwen-vl-plus、qwen-vl-plus-latest、qwen-vl-plus-2024-08-09及之后的快照模型

  • 通义千问Turbo 系列(非思考模式)

    qwen-turbo、qwen-turbo-latest、qwen-turbo-2024-09-19及之后的快照模型

  • 通义千问开源系列

    Qwen3 开源模型(非思考模式)、qwen2.5-72b-instruct、qwen2.5-32b-instruct、qwen2.5-14b-instruct、qwen2.5-7b-instruct、qwen2.5-3b-instruct、qwen2.5-1.5b-instruct、qwen2.5-0.5b-instruct、Qwen3-VL开源模型(非思考模式)

  • 通义千问Math 系列

    qwen-math-plus、qwen-math-plus-latest、qwen-math-plus-0919、qwen-math-turbo、qwen-math-turbo-latest、qwen-math-turbo-0919、qwen2.5-math-72b-instruct、qwen2.5-math-7b-instruct、qwen2.5-math-1.5b-instruct

tool_calls array (可选)

发起 Function Calling 后,返回的工具与入参信息,包含一个或多个对象。由上一轮模型响应的tool_calls字段获得。

属性

id string

工具响应的ID。

type string

工具类型,当前只支持设为function

function object

工具与入参信息。

属性

name string

工具名称。

arguments string

入参信息,为JSON格式字符串。

index integer

当前工具信息在tool_calls数组中的索引。

Tool Message object(可选)

工具的输出信息。

属性

content string (必选)

工具函数的输出内容,必须为字符串格式。

role string (必选)

固定为tool

tool_call_id string (可选)

发起 Function Calling 后返回的 id,可以通过response.output.choices[0].message.tool_calls[$index]["id"]获取,用于标记 Tool Message 对应的工具。

temperature float (可选)

采样温度,控制模型生成文本的多样性。

temperature越高,生成的文本更多样,反之,生成的文本更确定。

取值范围: [0, 2)

temperature默认值

  • Qwen3(非思考模式)、Qwen3-Instruct系列、Qwen3-Coder系列、qwen-max系列、qwen-plus系列(非思考模式)、qwen-flash系列(非思考模式)、qwen-turbo系列(非思考模式)、qwen开源系列、qwen-coder系列、qwen2-audio-instruct、qwen-doc-turbo、qwen-vl-max-2025-08-13、Qwen3-VL(非思考):0.7;

  • QVQ系列 、qwen-vl-plus-2025-07-10、qwen-vl-plus-2025-08-15 : 0.5;

  • qwen-audio-turbo系列:0.00001;

  • qwen-vl系列、qwen-vl-ocr系列、qwen2.5-omni-7b、qvq-72b-preview:0.01;

  • qwen-math系列:0;

  • Qwen3(思考模式)、Qwen3-Thinking、Qwen3-Omni-Captioner、QwQ 系列:0.6;

  • qwen3-max-preview(思考模式)、qwen-long系列: 1.0;

  • qwen-plus-character:0.92

  • qwen3-omni-flash系列:0.9

  • Qwen3-VL(思考模式):0.8

通过HTTP调用时,请将 temperature 放入 parameters 对象中。
不建议修改QVQ模型的默认 temperature 值。

top_p float (可选)

核采样的概率阈值,控制模型生成文本的多样性。

top_p越高,生成的文本更多样。反之,生成的文本更确定。

取值范围:(0,1.0]。

top_p默认值

Qwen3(非思考模式)、Qwen3-Instruct系列、Qwen3-Coder系列、qwen-max系列、qwen-plus系列(非思考模式)、qwen-flash系列(非思考模式)、qwen-turbo系列(非思考模式)、qwen开源系列、qwen-coder系列、qwen-long、qwen-doc-turbo、qwq-32b-preview、qwen-audio-turbo系列、qwen-vl-max-2025-08-13、Qwen3-VL(非思考模式):0.8;

qwen-vl-max-2024-11-19、qwen-vl-max-2024-10-30、qwen-vl-max-2024-08-09、qwen2-vl-72b-instruct、qwen-omni-turbo 系列:0.01;

qwen-vl-plus系列、qwen-vl-max、qwen-vl-max-latest、qwen-vl-max-2025-04-08、qwen-vl-max-2025-04-02、qwen-vl-max-2025-01-25、qwen-vl-max-2024-12-30、qvq-72b-preview、qwen2-vl-2b-instruct、qwen2-vl-7b-instruct、qwen2.5-vl-3b-instruct、qwen2.5-vl-7b-instruct、qwen2.5-vl-32b-instruct、qwen2.5-vl-72b-instruct、qwen-vl-ocr系列:0.001;

QVQ系列、qwen-vl-plus-2025-07-10、qwen-vl-plus-2025-08-15 、qwen2-audio-instruct:0.5;

qwen3-max-preview(思考模式)、qwen-math系列、Qwen3-Omni-Flash系列:1.0;

Qwen3(思考模式)、Qwen3-VL(思考模式)、Qwen3-Thinking、QwQ 系列、Qwen3-Omni-Captioner、qwen-plus-character:0.95

Java SDK中为topP通过HTTP调用时,请将 top_p 放入 parameters 对象中。
不建议修改QVQ模型的默认 top_p 值。

top_k integer (可选)

生成过程中采样候选集的大小。例如,取值为50时,仅将单次生成中得分最高的50Token组成随机采样的候选集。取值越大,生成的随机性越高;取值越小,生成的确定性越高。取值为None或当top_k大于100时,表示不启用top_k策略,此时仅有top_p策略生效。

取值需要大于或等于0。

top_k默认值

QVQ系列、qwen-vl-plus-2025-07-10、qwen-vl-plus-2025-08-15:10;

QwQ 系列:40;

qwen-math 系列、其余qwen-vl-plus系列、qwen-vl-max-2025-08-13之前的模型、qwen-vl-ocr系列、qwen-audio-turbo系列、qwen2.5-omni-7b、qvq-72b-preview:1;

Qwen3-Omni-Flash系列:50

其余模型均为20;

Java SDK中为topK通过HTTP调用时,请将 top_k 放入 parameters 对象中。
不建议修改QVQ模型的默认 top_k 值。

enable_thinking boolean (可选)

使用混合思考模型时,是否开启思考模式,适用于 Qwen3 、Qwen3-VL模型。相关文档:深度思考

可选值:

  • true:开启

    开启后,思考内容将通过reasoning_content字段返回。
  • false:不开启

不同模型的默认值:支持的模型

Java SDK 为enableThinking;通过HTTP调用时,请将 enable_thinking 放入 parameters 对象中。

thinking_budget integer (可选)

思考过程的最大长度。适用于Qwen3-VL、Qwen3 的商业版与开源版模型。相关文档:限制思考长度

默认值为模型最大思维链长度,请参见:模型列表

Java SDK 为 thinkingBudget。通过HTTP调用时,请将 thinking_budget 放入 parameters 对象中。
默认值为模型最大思维链长度。

enable_code_interpreter boolean (可选)默认值为 false

是否开启代码解释器功能。仅适用于思考模式下的 qwen3-max-preview。相关文档:代码解释器

可选值:

  • true:开启

  • false:不开启

不支持 Java SDK。通过HTTP调用时,请将 enable_code_interpreter 放入 parameters 对象中。

repetition_penalty float (可选)

模型生成时连续序列中的重复度。提高repetition_penalty时可以降低模型生成的重复度,1.0表示不做惩罚。没有严格的取值范围,只要大于0即可。

repetition_penalty默认值

  • qwen-max、qwen-max-latest、qwen-max-2024-09-19、qwen-math系列、qwen-vl-max系列、qvq-72b-preview、qwen2-vl-72b-instruct、qwen-vl-plus-2025-01-02、qwen-vl-plus-2025-05-07、qwen-vl-plus-2025-07-10、qwen-vl-plus-2025-08-15、qwen-vl-plus-latest、qwen2.5-vl-3b-instruct、qwen2.5-vl-7b-instruct、qwen2.5-vl-32b-instruct、qwen2.5-vl-72b-instruct、qwen-audio-turbo-latest、qwen-audio-turbo-2024-12-04、QVQ系列、QwQ系列、qwq-32b-preview、Qwen3-VL: 1.0;

  • qwen-coder系列、qwen2.5-1.5b-instruct、qwen2.5-0.5b-instruct、qwen2-1.5b-instruct、qwen2-0.5b-instruct、qwen2-vl-2b-instruct、qwen2-vl-7b-instruct、qwen-vl-plus-2024-08-09、qwen-vl-plus-2023-12-01、qwen2.5-omni-7b、qwen2-audio-instruct:1.1;

  • qwen-vl-plus、qwen-vl-plus-2025-01-25:1.2;

  • 其余模型为1.05。

Java SDK中为repetitionPenalty通过HTTP调用时,请将 repetition_penalty 放入 parameters 对象中。
使用qwen-vl-plus、qwen-vl-plus_2025-01-25模型进行文字提取时,建议设置repetition_penalty1.0。
对于通义千问OCR模型,repetition_penalty的默认值为1.05,该参数对模型效果影响较大,请勿随意修改。
不建议修改QVQ模型的默认 repetition_penalty 值。

presence_penalty float (可选)

控制模型生成文本时的内容重复度。

取值范围:[-2.0, 2.0]。正值降低重复度,负值增加重复度。

在创意写作或头脑风暴等需要多样性、趣味性或创造力的场景中,建议调高该值;在技术文档或正式文本等强调一致性与术语准确性的场景中,建议调低该值。

presence_penalty默认值

qwen3-max-preview(思考模式)、Qwen3(非思考模式)、Qwen3-Instruct系列、qwen3-0.6b/1.7b/4b(思考模式)、QVQ系列、qwen-max、qwen-max-latest、qwen-max-latest、qwen-max-2024-09-19、qwen2.5-vl系列、qwen-vl-max系列、qwen-vl-plus、qwen2-vl-72b-instruct、qwen-vl-plus-2025-01-02、Qwen3-VL(非思考):1.5;

qwen-vl-plus-latest、qwen-vl-plus-2025-08-15、qwen-vl-plus-2025-07-10:1.2

qwen-vl-plus-2025-01-25:1.0;

qwen3-8b/14b/32b/30b-a3b/235b-a22b(思考模式)、qwen-plus/qwen-plus-latest/2025-04-28(思考模式)、qwen-turbo/qwen-turbo/2025-04-28(思考模式):0.5;

其余均为0.0。

原理介绍

如果参数值是正数,模型将对目前文本中已存在的Token施加一个惩罚值(惩罚值与文本出现的次数无关),减少这些Token重复出现的几率,从而减少内容重复度,增加用词多样性。

示例

提示词:把这句话翻译成中文“This movie is good. The plot is good, the acting is good, the music is good, and overall, the whole movie is just good. It is really good, in fact. The plot is so good, and the acting is so good, and the music is so good.”

参数值为2.0:这部电影很好。剧情很棒,演技棒,音乐也非常好听,总的来说,整部电影都好得不得了。实际上它真的很优秀。剧情非常精彩,演技出色,音乐也是那么的动听。

参数值为0.0:这部电影很好。剧情好,演技好,音乐也好,总的来说,整部电影都很好。事实上,它真的很棒。剧情非常好,演技也非常出色,音乐也同样优秀。

参数值为-2.0:这部电影很好。情节很好,演技很好,音乐也很好,总的来说,整部电影都很好。实际上,它真的很棒。情节非常好,演技也非常好,音乐也非常好。

使用qwen-vl-plus-2025-01-25模型进行文字提取时,建议设置presence_penalty1.5。
不建议修改QVQ模型的默认presence_penalty值。
Java SDK不支持设置该参数通过HTTP调用时,请将 presence_penalty 放入 parameters 对象中。

vl_high_resolution_images boolean (可选)默认值为false

控制是否启用高分辨率图像处理模式(单张图片输入 Token 上限提升至 16384)。相关文档:开启高分辨率模式

  • false

    使用模型默认的单图 Token 上限。此模式下,模型的单图Token上限为:

    • Qwen3-VL商业版及开源版qwen-vl-max-0813及以后、qwen-vl-plus-0710及以后更新的模型:2560 Token;

    • QVQ及其他Qwen-VL模型:1280 Token。

  • true

    启用高分辨率模式,单张图片输入 Token 上限提升至 16384。

若输入的单张图像超出 Token 上限,系统将按图像原比例缩小,直至不超过上限。

支持的模型

  • QVQ

  • Qwen3-VL

  • qwen-vl-max商业版:qwen-vl-max-0809及之后、qwen-vl-plus-0809及之后的模型

  • Qwen-VL开源:qwen2-vl、qwen2.5-vl、qwen3-vl

Java SDK 为 vlHighResolutionImages(需要的最低版本为2.20.8通过HTTP调用时,请将 vl_high_resolution_images 放入 parameters 对象中。

vl_enable_image_hw_output boolean (可选)默认值为 false

是否返回图像缩放后的尺寸。模型会对输入的图像进行缩放处理,配置为 True 时会返回图像缩放后的高度和宽度,开启流式输出时,该信息在最后一个数据块(chunk)中返回。支持Qwen-VL模型

Java SDK中为 vlEnableImageHwOutput,Java SDK最低版本为2.20.8通过HTTP调用时,请将 vl_enable_image_hw_output 放入 parameters 对象中。

ocr_options object (可选)

使用通义千问OCR模型调用内置任务时需要配置的参数。

属性

task string (必选)

内置任务的名称,可选值如下:

  • "text_recognition":通用文字识别

  • "key_information_extraction":信息抽取

  • "document_parsing":文档解析

  • "table_parsing":表格解析

  • "formula_recognition":公式识别

  • "multi_lan":多语言识别

  • "advanced_recognition":高精识别

task_config arrays (可选)

当内置任务task为"key_information_extraction"(信息抽取)时使用。

属性

result_schema object (必选)

表示需要模型抽取的字段,可以是任意形式的JSON结构,最多可嵌套3JSON 对象。您只需要填写JSON对象的key,value保持为空即可。

示例值:

"result_schema" : {
     "收件人信息" : {
          "收件人姓名" : "",
          "收件人电话号码" : "",
          "收件人地址":""
     }
}
Java SDKOcrOptions,DashScope Python SDK 最低版本为1.22.2, Java SDK 最低版本为2.18.4。
通过HTTP调用时,请将 ocr_options 放入 parameters 对象中。

max_input_tokens integer (可选)

允许输入的最大 Token 长度。目前仅支持qwen-plus-0728/latest模型。

  • qwen-plus-latest 默认值:129,024

    后续默认值可能调整至1,000,000。
  • qwen-plus-2025-07-28 默认值:1,000,000

Java SDK 暂不支持该参数。通过HTTP调用时,请将 max_input_tokens 放入 parameters 对象中。

max_tokens integer (可选)

用于限制模型输出的最大 Token 数。若生成内容超过此值,生成将提前停止,且返回的finish_reasonlength

默认值与最大值均为模型的最大输出长度,请参见模型列表

适用于需控制输出长度的场景,如生成摘要、关键词,或用于降低成本、缩短响应时间。

触发 max_tokens 时,响应的 finish_reason 字段为 length

qwen-vl-ocr、qwen-vl-ocr-latestqwen-vl-ocr-2025-04-13、qwen-vl-ocr-2025-08-28模型的max_tokens参数(最大输出长度)默认为 4096,如需提高该参数值(4097~8192范围),请发送邮件至 modelstudio@service.aliyun.com进行申请,并提供以下信息:主账号ID、图像类型(如文档图、电商图、合同等)、模型名称、预计 QPS 和每日请求总数,以及模型输出长度超过4096的请求占比。
max_tokens不限制思考模型思维链的长度。
Java SDK中为maxTokens(模型为通义千问VL/OCR/Audio时,Java SDK中为maxLength,在 2.18.4 版本之后支持也设置为 maxTokens)通过HTTP调用时,请将 max_tokens 放入 parameters 对象中。

seed integer (可选)

随机数种子。用于确保在相同输入和参数下生成结果可复现。若调用时传入相同的 seed 且其他参数不变,模型将尽可能返回相同结果。

取值范围:[0,231−1]

seed默认值

qwen-vl-plus-2025-01-02、qwen-vl-max、qwen-vl-max-latest、qwen-vl-max-2025-04-08、qwen-vl-max-2025-04-02、qwen-vl-max-2024-12-30、qvq-72b-preview、qvq-max系列:3407;

qwen-vl-max-2025-01-25、qwen-vl-max-2024-11-19、qwen-vl-max-2024-10-30、qwen-vl-max-2024-08-09、qwen-vl-max-2024-02-01、qwen2-vl-72b-instruct、qwen2-vl-2b-instruct、qwen-vl-plus、qwen-vl-plus-latest、qwen-vl-plus-2025-05-07、qwen-vl-plus-2025-01-25、qwen-vl-plus-2024-08-09、qwen-vl-plus-2023-12-01:无默认值;

其余模型均为1234。

通过HTTP调用时,请将 seed 放入 parameters 对象中。

stream boolean (可选) 默认值为false

是否流式输出回复。参数值:

  • false:模型生成完所有内容后一次性返回结果。

  • true:边生成边输出,即每生成一部分内容就立即输出一个片段(chunk)。

该参数仅支持Python SDK。通过Java SDK实现流式输出请通过streamCall接口调用;通过HTTP实现流式输出请在Header中指定X-DashScope-SSEenable
Qwen3商业版(思考模式)、Qwen3开源版、QwQ、QVQ只支持流式输出。

incremental_output boolean (可选)默认为false(Qwen3-Max、Qwen3-VL、Qwen3 开源版QwQQVQ模型默认值为 true

在流式输出模式下是否开启增量输出。推荐您优先设置为true

参数值:

  • false:每次输出为当前已经生成的整个序列,最后一次输出为生成的完整结果。

    I
    I like
    I like apple
    I like apple.
  • true(推荐):增量输出,即后续输出内容不包含已输出的内容。您需要实时地逐个读取这些片段以获得完整的结果。

    I
    like
    apple
    .
Java SDK中为incrementalOutput通过HTTP调用时,请将 incremental_output 放入 parameters 对象中。
QwQ 模型与思考模式下的 Qwen3 模型只支持设置为 true。由于 Qwen3 商业版模型默认值为false,您需要在思考模式下手动设置为 true
Qwen3 开源版模型不支持设置为 false

response_format object (可选) 默认值为{"type": "text"}

返回内容的格式。可选值:{"type": "text"}{"type": "json_object"}。设置为{"type": "json_object"}时会输出标准格式的JSON字符串。相关文档:结构化输出

如果指定为{"type": "json_object"},需同时在提示词中指引模型输出JSON格式,如:“请按照json格式输出”,否则会报错。
Java SDK 中为 responseFormat。通过HTTP调用时,请将 response_format 放入 parameters 对象中。

支持的模型

  • 文本生成模型

    • 通义千问Max 系列:qwen3-max、qwen3-max-2025-09-23、qwen3-max-preview、qwen-max、qwen-max-latest、qwen-max-2024-09-19 及之后的快照模型

    • 通义千问Plus 系列(非思考模式):qwen-plus、qwen-plus-latest、qwen-plus-2024-09-19及之后的快照模型

    • 通义千问Flash 系列(非思考模式):qwen-flash、qwen-flash-2025-07-28及之后的快照模型

    • 通义千问Turbo 系列(非思考模式):qwen-turbo、qwen-turbo-latest、qwen-turbo-2024-09-19及之后的快照模型

    • 通义千问Coder 系列:qwen3-coder-plus、qwen3-coder-plus-2025-07-22、qwen3-coder-flash、qwen3-coder-flash-2025-07-28

  • 文本生成开源模型

    • Qwen3(非思考模式)

    • Qwen3-Coder

    • Qwen2.5 系列的文本模型(不含mathcoder模型)

  • 多模态模型

    • 通义千问3-VL-Plus 系列(非思考模式):qwen3-vl-plus、qwen3-vl-plus-2025-09-23及之后的快照模型

    • 通义千问3-VL-Flash 系列(非思考模式):qwen3-vl-flash、qwen3-vl-flash-2025-10-15及之后的快照模型

    • 通义千问VL-Max 系列(非思考模式):qwen-vl-max(不包括最新版与快照版模型)

    • 通义千问VL-Plus 系列(非思考模式):qwen-vl-plus(不包括最新版与快照版模型)

  • 多模态开源模型

    • Qwen3-VL(非思考模式)

output_format string (可选)默认值为"model_detailed_report"

仅当调用通义千问深入研究模型 qwen-deep-research 时,用于规定输出内容格式。

可选值:

  • "model_detailed_report":详细研究报告,约6000

  • "model_summary_report":摘要研究报告,约1500-2000

result_format string (可选) 默认为text(Qwen3-Max、Qwen3-VL、QwQ 模型、Qwen3 开源模型(除了qwen3-next-80b-a3b-instruct)与 Qwen-Long 模型默认值为 message)

返回数据的格式。推荐您优先设置为message,可以更方便地进行多轮对话

平台后续将统一调整默认值为message
Java SDK中为resultFormat通过HTTP调用时,请将 result_format 放入 parameters 对象中。
模型为通义千问VL/QVQ/OCR/Audio时,设置text不生效。
Qwen3-Max、Qwen3-VL、思考模式下的 Qwen3 模型只能设置为message,由于 Qwen3 商业版模型默认值为text,您需要将其设置为message
如果您使用 Java SDK 调用Qwen3 开源模型,并且传入了 text,依然会以 message格式进行返回。

logprobs boolean (可选)默认值为 false

是否返回输出 Token 的对数概率,可选值:

  • true

    返回

  • false

    不返回

支持以下模型:

  • qwen-plus系列的快照模型(不包含主线模型)

  • qwen-turbo 系列的快照模型(不包含主线模型)

  • qwen-vl-ocr-2025-04-13及之后更新的模型

  • Qwen3 开源模型

通过HTTP调用时,请将 logprobs 放入 parameters 对象中。

top_logprobs integer (可选)默认值为0

指定在每一步生成时,返回模型最大概率的候选 Token 个数。

取值范围:[0,5]

仅当 logprobstrue 时生效。

Java SDK中为topLogprobs通过HTTP调用时,请将 top_logprobs 放入 parameters 对象中。

n integer (可选) 默认值为1

生成响应的个数,取值范围是1-4。对于需要生成多个响应的场景(如创意写作、广告文案等),可以设置较大的 n 值。

当前仅支持 qwen-plus、 Qwen3(非思考模式)、qwen-plus-character 模型,且在传入 tools 参数时固定为1。
设置较大的 n 值不会增加输入 Token 消耗,会增加输出 Token 的消耗。
通过HTTP调用时,请将 n 放入 parameters 对象中。

stop string 或 array (可选)

用于指定停止词。当模型生成的文本中出现stop 指定的字符串或token_id时,生成将立即终止。

可传入敏感词以控制模型的输出。

stop为数组时,不可将token_id和字符串同时作为元素输入,比如不可以指定为["你好",104307]
通过HTTP调用时,请将 stop 放入 parameters 对象中。

tools array (可选)

包含一个或多个工具对象的数组,供模型在 Function Calling 中调用。相关文档:Function Calling

使用 tools 时,必须将result_format设为message

发起 Function Calling,或提交工具执行结果时,都必须设置tools参数。

属性

type string (必选)

工具类型,当前仅支持function

function object (必选)

属性

name string (必选)

工具函数的名称,必须是字母、数字,可以包含下划线和短划线,最大长度为64。

description string (必选)

工具函数的描述,供模型选择何时以及如何调用工具函数。

parameters objcet (必选)

工具的参数描述,需要是一个合法的JSON Schema。JSON Schema的描述可以见链接。如果parameters参数为空,表示function没有入参。

通过HTTP调用时,请将 tools 放入 parameters 对象中。暂时不支持qwen-vlqwen-audio系列模型。

tool_choice string 或 object (可选)默认值为 auto

工具选择策略。若需对某类问题强制指定工具调用方式(例如始终使用某工具或禁用所有工具),可设置此参数。

  • auto

    大模型自主选择工具策略;

  • none

    若在特定请求中希望临时禁用工具调用,可设定tool_choice参数为none

  • {"type": "function", "function": {"name": "the_function_to_call"}}

    若希望强制调用某个工具,可设定tool_choice参数为{"type": "function", "function": {"name": "the_function_to_call"}},其中the_function_to_call是指定的工具函数名称。

    思考模式的模型不支持强制调用某个工具。
Java SDK中为toolChoice通过HTTP调用时,请将 tool_choice 放入 parameters 对象中。

parallel_tool_calls boolean (可选)默认值为 false

是否开启并行工具调用。

可选值:

  • true:开启

  • false:不开启。

并行工具调用详情请参见:并行工具调用

Java SDK中为parallelToolCalls通过HTTP调用时,请将 parallel_tool_calls 放入 parameters 对象中。

enable_search boolean (可选) 默认值为false

模型在生成文本时是否使用互联网搜索结果进行参考。取值如下:

  • true:启用互联网搜索,模型会将搜索结果作为文本生成过程中的参考信息,但模型会基于其内部逻辑判断是否使用互联网搜索结果。

    若开启后未联网搜索,可优化提示词,或设置search_options中的forced_search参数开启强制搜索。
  • false:关闭互联网搜索。

计费信息请参见计费说明

Java SDK中为enableSearch通过HTTP调用时,请将 enable_search 放入 parameters 对象中。
启用互联网搜索功能可能会增加 Token 的消耗。

search_options object (可选)

联网搜索的策略。仅当enable_searchtrue时生效。详情参见联网搜索

通过HTTP调用时,请将 search_options 放入 parameters 对象中。Java SDK中为searchOptions

属性

enable_source boolean(可选)默认值为false

在返回结果中是否展示搜索到的信息。参数值:

  • true:展示;

  • false:不展示。

enable_citation boolean(可选)默认值为false

是否开启[1]或[ref_1]样式的角标标注功能。在enable_sourcetrue时生效。参数值:

  • true:开启;

  • false:不开启。

citation_format string(可选)默认值为"[<number>]"

角标样式。在enable_citationtrue时生效。参数值:

  • [<number>]:角标形式为[1]

  • [ref_<number>]:角标形式为[ref_1]

forced_search boolean(可选)默认值为false

是否强制开启搜索。参数值:

  • true:强制开启;

  • false:不强制开启。

search_strategy string(可选)默认值为turbo

搜索互联网信息的策略。

可选值:

  • turbo (默认): 兼顾响应速度与搜索效果,适用于大多数场景。

  • max: 采用更全面的搜索策略,可调用多源搜索引擎,以获取更详尽的搜索结果,但响应时间可能更长。

  • agent:可多次调用联网搜索工具与大模型,实现多轮信息检索与内容整合。

    agent策略仅适用于 qwen3-max 与 qwen3-max-2025-09-23。
    启用该策略时,仅支持返回搜索来源enable_source: true),其他联网搜索功能不可用。

enable_search_extension boolean(可选)默认值为false

是否开启特定领域增强。参数值:

  • true

    开启。

  • false(默认值)

    不开启。

prepend_search_result boolean(可选)默认值为false

在流式输出且enable_sourcetrue时,可通过prepend_search_result配置第一个返回的数据包是否只包含搜索来源信息。可选值:

  • true

    只包含搜索来源信息。

  • false(默认值)

    包含搜索来源信息与大模型回复信息。

暂不支持 DashScope Java SDK。

X-DashScope-DataInspection string (可选)

在通义千问 API 的内容安全能力基础上,是否进一步识别输入输出内容的违规信息。取值如下:

  • '{"input":"cip","output":"cip"}':进一步识别;

  • 不设置该参数:不进一步识别。

通过 HTTP 调用时请放入请求头:-H "X-DashScope-DataInspection: {\"input\": \"cip\", \"output\": \"cip\"}"

通过 Python SDK 调用时请通过headers配置:headers={'X-DashScope-DataInspection': '{"input":"cip","output":"cip"}'}

详细使用方法请参见内容审核

不支持通过 Java SDK 设置。
不适用于 Qwen-VL、Qwen-Audio 系列模型。

chat响应对象(流式与非流式输出格式一致)

{
  "status_code": 200,
  "request_id": "902fee3b-f7f0-9a8c-96a1-6b4ea25af114",
  "code": "",
  "message": "",
  "output": {
    "text": null,
    "finish_reason": null,
    "choices": [
      {
        "finish_reason": "stop",
        "message": {
          "role": "assistant",
          "content": "我是阿里云开发的一款超大规模语言模型,我叫通义千问。"
        }
      }
    ]
  },
  "usage": {
    "input_tokens": 22,
    "output_tokens": 17,
    "total_tokens": 39
  }
}

status_code string

本次请求的状态码。200 表示请求成功,否则表示请求失败。

Java SDK不会返回该参数。调用失败会抛出异常,异常信息为status_codemessage的内容。

request_id string

本次调用的唯一标识符。

Java SDK返回参数为requestId。

code string

错误码,调用成功时为空值。

只有Python SDK返回该参数。

output object

调用结果信息。

属性

text string

模型生成的回复。当设置输入参数result_formattext时将回复内容返回到该字段。

finish_reason string

当设置输入参数result_formattext时该参数不为空。

有四种情况:

  • 正在生成时为null;

  • 因模型输出自然结束,或触发输入参数中的stop条件而结束时为stop;

  • 因生成长度过长而结束为length;

  • 因发生工具调用为tool_calls。

choices array

模型的输出信息。当result_formatmessage时返回choices参数。

属性

finish_reason string

有四种情况:

  • 正在生成时为null;

  • 因模型输出自然结束,或触发输入参数中的stop条件而结束时为stop;

  • 因生成长度过长而结束为length;

  • 因发生工具调用为tool_calls。

message object

模型输出的消息对象。

属性

phase string

仅当调用通义千问深入研究模型 qwen-deep-research时,表示研究任务所处的阶段

  • "ResearchPlanning":研究规划阶段,执行计划内容存放在 content 字段。

  • "WebResearch":网络搜索阶段,搜索内容存放在 extra.deep_research.research 字段。

  • "KeepAlive":维持流式连接,表明程序正在运行,不包含有用内容。

  • "answer":回答阶段,研究内容存放在 content 字段。

role string

输出消息的角色,固定为assistant。

content stringarray

输出消息的内容。当使用qwen-vlqwen-audio系列模型时为array,其余情况为string

如果发起Function Calling,则该值为空。

属性

text string

当使用qwen-vlqwen-audio系列模型时,输出消息的内容。

image_hw array

Qwen-VL系列模型启用 vl_enable_image_hw_output 参数时,有两种情况:

  • 图像输入:返回图像的高度和高度(数值单位:像素)

  • 视频输入:返回空数组

ocr_result array

Qwen-OCR系列模型调用内置的信息抽取、高精识别任务时,输出的任务结果信息。

属性

kv_result array

信息抽取任务的输出结果。

words_info array

高精识别任务的输出结果。

属性

rotate_rect array

示例值:[center_x, center_y, width, height, angle]

文字框的旋转矩形表示:

  • center_x、center_y为文本框中心点坐标

  • width为文本框宽度,hight为高度

  • angle为文本框相对于水平方向的旋转角度,取值范围为[-90, 90]

location array

示例值:[x1, y1, x2, y2, x3, y3, x4, y4]

文字框四个顶点的坐标,坐标顺序为左上角开起,按左上角→右上角→右下角→左下角的顺时针顺序排列。

text string

文本行的内容

extra dict

仅当调用通义千问深入研究模型 qwen-deep-research时,表示研究任务的附加信息。

属性

deep_research array

深入研究相关信息

属性

research object

研究任务信息

属性

id int

研究任务ID

webSites array

搜索到的网站信息(仅在 status: "streamingWebResult" 时存在)

属性

title string

网站标题

description string

网站描述

url string

网站url

favicon string

网站图标

learningMap object

模型从调用工具总结获取到的内容

reference object

参考文献信息(answer阶段,最终报告生成时)

属性

icon string

网站图标

index_number integer

引用编号

description string

文献描述

title string

文献标题

url string

文献链接

status string

仅当调用通义千问深入研究模型 qwen-deep-research 时,表示当前阶段的任务执行状态。

  • "typing":模型正在工作,内容正在生成中

  • "finished":当前阶段完成

  • "streamingQueries":正在生成研究目标和搜索查询(WebResearch阶段)

  • "streamingWebResult":正在执行搜索、网页阅读和代码执行(WebResearch阶段)

  • "WebResultFinished":网络搜索阶段完成(WebResearch阶段)

reasoning_content string

Qwen3、QwQ 模型QVQ模型的深度思考内容。

tool_calls array

若模型需要调用工具,则会生成tool_calls参数。

属性

function object

调用工具的名称,以及输入参数。

属性

name string

调用工具的名称

arguments string

需要输入到工具中的参数,为JSON字符串。

由于大模型响应有一定随机性,输出的JSON字符串并不总满足于您的函数,建议您在将参数输入函数前进行参数的有效性校验。

index integer

当前tool_calls对象在tool_calls数组中的索引。

id string

本次工具响应的ID。

type string

工具类型,固定为function

logprobs object

当前 choices 对象的概率信息。

属性

content array

带有对数概率信息的 Token 数组。

属性

token string

当前 Token。

bytes array

当前 Token 的 UTF‑8 原始字节列表,用于精确还原输出内容,在处理表情符号、中文字符时有帮助。

logprob float

当前 Token 的对数概率。返回值为 null 表示概率值极低。

top_logprobs array

当前 Token 位置最可能的若干个 Token 及其对数概率,元素个数与入参的top_logprobs保持一致。

属性

token string

当前 Token。

bytes array

当前 Token 的 UTF‑8 原始字节列表,用于精确还原输出内容,在处理表情符号、中文字符时有帮助。

logprob float

当前 Token 的对数概率。返回值为 null 表示概率值极低。

search_info object

联网搜索到的信息,在设置search_options参数后会返回该参数。

属性

search_results array

联网搜索到的结果。

属性

site_name string

搜索结果来源的网站名称。

icon string

来源网站的图标URL,如果没有图标则为空字符串。

index integer

搜索结果的序号,表示该搜索结果在search_results中的索引。

title string

搜索结果的标题。

url string

搜索结果的链接地址。

extra_tool_info array

开启enable_search_extension参数后返回的领域增强信息。

属性

result string

领域增强工具输出信息。

tool string

领域增强使用的工具。

usage map

本次chat请求使用的Token信息。

属性

input_tokens integer

用户输入内容转换成Token后的长度。

output_tokens integer

模型输出内容转换成Token后的长度。

input_tokens_details integer

使用Qwen-VL 模型QVQ模型时,输入内容转换成Token后的长度详情。

属性

text_tokens integer

使用Qwen-VL 模型QVQ模型时,为输入的文本转换为Token后的长度。

image_tokens integer

输入的图像转换为Token后的长度。

video_tokens integer

输入的视频文件或图像列表转换为Token后的长度。

total_tokens integer

当输入为纯文本时返回该字段,为input_tokensoutput_tokens之和

image_tokens integer

输入内容包含image时返回该字段。为用户输入图片内容转换成Token后的长度。

video_tokens integer

输入内容包含video时返回该字段。为用户输入视频内容转换成Token后的长度。

audio_tokens integer

输入内容包含audio时返回该字段。为用户输入音频内容转换成Token后的长度。

output_tokens_details integer

输出内容转换成 Token后的长度详情。

属性

text_tokens integer

输出的文本转换为Token后的长度。

reasoning_tokens integer

Qwen3 模型思考过程转换为Token后的长度。

prompt_tokens_details object

输入 Token 的细粒度分类。

属性

cached_tokens integer

命中 Cache 的 Token 数。Context Cache 详情请参见上下文缓存

cache_creation object

显式缓存创建信息。

属性

ephemeral_5m_input_tokens integer

用于创建5分钟有效期显式缓存的 Token 长度。

cache_creation_input_tokens integer

用于创建显式缓存的 Token 长度。

cache_type string

使用显式缓存时,参数值为ephemeral,否则该参数不存在。

错误码

如果模型调用失败并返回报错信息,请参见错误信息进行解决。