Qwen3-Coder 模型具有强大的代码能力,可通过 API 将其集成到业务中。
模型与价格
中国大陆(北京)
商业版模型
| 模型名称 | 版本 | 上下文长度 | 最大输入 | 最大输出 | 输入成本 | 输出成本 | 免费额度 | 
| (Token数) | (每千Token) | ||||||
| qwen3-coder-plus 当前与qwen3-coder-plus-2025-07-22能力相同 | 稳定版 | 1,000,000 | 997,952 | 65,536 | 阶梯计价,请参见表格下方说明。 | 各100万Token 有效期:百炼开通后90天内 | |
| qwen3-coder-plus-2025-09-23 | 快照版 | ||||||
| qwen3-coder-plus-2025-07-22 | 快照版 | ||||||
| qwen3-coder-flash 当前与qwen3-coder-flash-2025-07-28能力相同 | 稳定版 | ||||||
| qwen3-coder-flash-2025-07-28 | 快照版 | ||||||
上述模型根据本次请求输入的Token数,采取阶梯计费。
qwen3-coder-plus系列
qwen3-coder-plus、qwen3-coder-plus-2025-09-23和qwen3-coder-plus-2025-07-22价格如下,其中 qwen3-coder-plus 支持上下文缓存,命中隐式缓存的输入文本按单价的 20% 计费,命中显式缓存的输入文本按单价的 10% 计费。
| 单次请求的输入Token数 | 输入成本(每千Token) | 输出成本(每千Token) | 
| 0<Token≤32K | 0.004元 | 0.016元 | 
| 32K<Token≤128K | 0.006元 | 0.024元 | 
| 128K<Token≤256K | 0.01元 | 0.04元 | 
| 256K<Token≤1M | 0.02元 | 0.2元 | 
qwen3-coder-flash系列
qwen3-coder-flash 和 qwen3-coder-flash-2025-07-28 价格如下,其中 qwen3-coder-flash 支持上下文缓存,命中隐式缓存的输入文本按单价的 20% 计费,命中显式缓存的输入文本按单价的 10% 计费。
| 单次请求的输入Token数 | 输入成本(每千Token) | 输出成本(每千Token) | 
| 0<Token≤32K | 0.001元 | 0.004元 | 
| 32K<Token≤128K | 0.0015元 | 0.006元 | 
| 128K<Token≤256K | 0.0025元 | 0.01元 | 
| 256K<Token≤1M | 0.005元 | 0.025元 | 
开源版模型
| 模型名称 | 上下文长度 | 最大输入 | 最大输出 | 输入成本 | 输出成本 | 免费额度 | 
| (Token数) | (每千Token) | |||||
| qwen3-coder-480b-a35b-instruct | 262,144 | 204,800 | 65,536 | 阶梯计价,请参见表格下方说明。 | 各100万Token 有效期:百炼开通后90天内 | |
| qwen3-coder-30b-a3b-instruct | ||||||
qwen3-coder-480b-a35b-instruct 与 qwen3-coder-30b-a3b-instruct 根据本次请求输入的 Token数,采取阶梯计费。
| 模型名称 | 单次请求的输入 Token 数 | 输入成本(每千Token) | 输出成本(每千Token) | 
| qwen3-coder-480b-a35b-instruct | 0<Token≤32K | 0.006元 | 0.024元 | 
| 32K<Token≤128K | 0.009元 | 0.036元 | |
| 128K<Token≤200K | 0.015元 | 0.06元 | |
| qwen3-coder-30b-a3b-instruct | 0<Token≤32K | 0.0015元 | 0.006元 | 
| 32K<Token≤128K | 0.00225元 | 0.009元 | |
| 128K<Token≤200K | 0.00375元 | 0.015元 | 
国际(新加坡)
商业版模型
| 模型名称 | 版本 | 上下文长度 | 最大输入 | 最大输出 | 输入成本 | 输出成本 | 免费额度 | 
| (Token数) | (每千Token) | ||||||
| qwen3-coder-plus 当前与qwen3-coder-plus-2025-07-22能力相同 | 稳定版 | 1,000,000 | 997,952 | 65,536 | 阶梯计价,请参见表格下方说明。 | 无免费额度 | |
| qwen3-coder-plus-2025-09-23 | 快照版 | ||||||
| qwen3-coder-plus-2025-07-22 | 快照版 | ||||||
| qwen3-coder-flash 当前与qwen3-coder-flash-2025-07-28能力相同 | 稳定版 | ||||||
| qwen3-coder-flash-2025-07-28 | 快照版 | ||||||
上述模型根据本次请求输入的Token数,采取阶梯计费。
qwen3-coder-plus系列
qwen3-coder-plus、qwen3-coder-plus-2025-09-23 和 qwen3-coder-plus-2025-07-22 价格如下,其中 qwen3-coder-plus 支持上下文缓存,命中隐式缓存的输入文本按单价的 20% 计费,命中显式缓存的输入文本按单价的 10% 计费。
| 单次请求的输入Token数 | 输入成本(每千Token) | 输出成本(每千Token) | 
| 0<Token≤32K | 0.007339元 | 0.036696元 | 
| 32K<Token≤128K | 0.013211元 | 0.066053元 | 
| 128K<Token≤256K | 0.022018元 | 0.110089元 | 
| 256K<Token≤1M | 0.044035元 | 0.440354元 | 
qwen3-coder-flash系列
qwen3-coder-flash 和 qwen3-coder-flash-2025-07-28 价格如下,其中 qwen3-coder-flash 支持上下文缓存,命中隐式缓存的输入文本按单价的 20% 计费,命中显式缓存的输入文本按单价的 10% 计费。
| 单次请求的输入Token数 | 输入成本(每千Token) | 输出成本(每千Token) | 
| 0<Token≤32K | 0.002202元 | 0.011009元 | 
| 32K<Token≤128K | 0.00367元 | 0.018348元 | 
| 128K<Token≤256K | 0.005871元 | 0.029357元 | 
| 256K<Token≤1M | 0.011743元 | 0.070457元 | 
开源版模型
| 模型名称 | 上下文长度 | 最大输入 | 最大输出 | 输入成本 | 输出成本 | 免费额度 | 
| (Token数) | (每千Token) | |||||
| qwen3-coder-480b-a35b-instruct | 262,144 | 204,800 | 65,536 | 阶梯计价,请参见表格下方说明。 | 无免费额度 | |
| qwen3-coder-30b-a3b-instruct | ||||||
qwen3-coder-480b-a35b-instruct 与 qwen3-coder-30b-a3b-instruct 根据本次请求输入的 Token数,采取阶梯计费。
| 模型名称 | 单次请求的输入 Token 数 | 输入成本(每千Token) | 输出成本(每千Token) | 
| qwen3-coder-480b-a35b-instruct | 0<Token≤32K | 0.011009元 | 0.055044元 | 
| 32K<Token≤128K | 0.019816元 | 0.09908元 | |
| 128K<Token≤200K | 0.033027元 | 0.165133元 | |
| qwen3-coder-30b-a3b-instruct | 0<Token≤32K | 0.003303元 | 0.016513元 | 
| 32K<Token≤128K | 0.005504元 | 0.027522元 | |
| 128K<Token≤200K | 0.008807元 | 0.044035元 | 
快速开始
您需要已获取API Key并配置API Key到环境变量。如果通过OpenAI SDK或DashScope SDK进行调用,还需要安装SDK。
此处以编写一个寻找质数的Python函数简单场景为例。此外,您也可以通过Qwen Code、 Claude Code、Cline 等开发工具集成 Qwen-Coder 模型。
OpenAI兼容
Python
请求示例
import os
from openai import OpenAI
client = OpenAI(
    # 新加坡和北京地域的API Key不同。获取API Key:https://help.aliyun.com/zh/model-studio/get-api-key
    # 若没有配置环境变量,请用阿里云百炼API Key将下行替换为:api_key="sk-xxx",
    api_key=os.getenv("DASHSCOPE_API_KEY"),
    # 以下是北京地域base_url,如果使用新加坡地域的模型,需要将base_url替换为:https://dashscope-intl.aliyuncs.com/compatible-mode/v1
    base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",
)
completion = client.chat.completions.create(
    # 此处以qwen3-coder-plus为例,可按需更换模型名称。
    model="qwen3-coder-plus",
    messages=[
        {'role': 'system', 'content': 'You are a helpful assistant.'},
        {'role': 'user', 'content': '请编写一个Python函数 find_prime_numbers,该函数接受一个整数 n 作为参数,并返回一个包含所有小于 n 的质数(素数)的列表。质数是指仅能被1和其自身整除的正整数,如2, 3, 5, 7等。不要输出非代码的内容和Markdown的代码块。'}],
    )
print("="*20+"回复内容"+"="*20)
print(completion.choices[0].message.content)
print("="*20+"Token消耗"+"="*20)
print(f"输入 Tokens: {completion.usage.prompt_tokens}")
print(f"输出 Tokens: {completion.usage.completion_tokens}")
print(f"总计 Tokens: {completion.usage.total_tokens}")返回结果
====================回复内容====================
def find_prime_numbers(n):
    if n <= 2:
        return []
    
    primes = []
    
    for num in range(2, n):
        is_prime = True
        for i in range(2, int(num ** 0.5) + 1):
            if num % i == 0:
                is_prime = False
                break
        if is_prime:
            primes.append(num)
    
    return primes
====================Token消耗====================
输入 Tokens: 96
输出 Tokens: 90
总计 Tokens: 186Node.js
请求示例
import OpenAI from "openai";
const client = new OpenAI(
    {
        // 新加坡和北京地域的API Key不同。获取API Key:https://help.aliyun.com/zh/model-studio/get-api-key
        // 若没有配置环境变量,请用百炼API Key将下行替换为:apiKey: "sk-xxx",
        apiKey: process.env.DASHSCOPE_API_KEY,
        // 以下是北京地域base_url,如果使用新加坡地域的模型,需要将base_url替换为:https://dashscope-intl.aliyuncs.com/compatible-mode/v1
        baseURL: "https://dashscope.aliyuncs.com/compatible-mode/v1"
    }
);
async function main() {
    const completion = await client.chat.completions.create({
        model: "qwen3-coder-plus",  //此处以qwen3-coder-plus为例,可按需更换模型名称。
        messages: [
            { role: "system", content: "You are a helpful assistant." },
            { role: "user", content: "请编写一个Python函数 find_prime_numbers,该函数接受一个整数 n 作为参数,并返回一个包含所有小于 n 的质数(素数)的列表。质数是指仅能被1和其自身整除的正整数,如2, 3, 5, 7等。不要输出非代码的内容和Markdown的代码块。" }
        ],
    });
    console.log("=".repeat(20) + "回复内容" + "=".repeat(20));
    console.log(completion.choices[0].message.content);
    console.log("=".repeat(20) + "Token消耗" + "=".repeat(20));
    if (completion.usage) {
        console.log(`输入 Tokens: ${completion.usage.prompt_tokens}`);
        console.log(`输出 Tokens: ${completion.usage.completion_tokens}`);
        console.log(`总计 Tokens: ${completion.usage.total_tokens}`);
    }
}
main();返回结果
====================回复内容====================
def find_prime_numbers(n):
    if n <= 2:
        return []
    
    primes = []
    
    for num in range(2, n):
        is_prime = True
        for i in range(2, int(num ** 0.5) + 1):
            if num % i == 0:
                is_prime = False
                break
        if is_prime:
            primes.append(num)
    
    return primes
====================Token消耗====================
输入 Tokens: 96
输出 Tokens: 90
总计 Tokens: 186curl
请求示例
以下为北京地域url,若使用新加坡地域的模型,需将url替换为:https://dashscope-intl.aliyuncs.com/compatible-mode/v1/chat/completions
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": "qwen3-coder-plus",
    "messages": [
        {
            "role": "system",
            "content": "You are a helpful assistant."
        },
        {
            "role": "user", 
            "content": "请编写一个Python函数 find_prime_numbers,该函数接受一个整数 n 作为参数,并返回一个包含所有小于 n 的质数(素数)的列表。质数是指仅能被1和其自身整除的正整数,如2, 3, 5, 7等。不要输出非代码的内容和Markdown的代码块。"
        }
    ]
}'返回结果
{
    "choices": [
        {
            "message": {
                "content": "def find_prime_numbers(n):\n    if n <= 2:\n        return []\n    \n    primes = []\n    \n    for num in range(2, n):\n        is_prime = True\n        for i in range(2, int(num ** 0.5) + 1):\n            if num % i == 0:\n                is_prime = False\n                break\n        if is_prime:\n            primes.append(num)\n    \n    return primes",
                "role": "assistant"
            },
            "finish_reason": "stop",
            "index": 0,
            "logprobs": null
        }
    ],
    "object": "chat.completion",
    "usage": {
        "prompt_tokens": 96,
        "completion_tokens": 90,
        "total_tokens": 186,
        "prompt_tokens_details": {
            "cached_tokens": 0
        }
    },
    "created": 1761615592,
    "system_fingerprint": null,
    "model": "qwen3-coder-plus",
    "id": "chatcmpl-3de690bd-ae7f-461d-8eb6-d65b0577e803"
}DashScope
Python
请求示例
import dashscope
import os
# 若使用新加坡地域的模型,请取消下行注释
# dashscope.base_http_api_url = "https://dashscope-intl.aliyuncs.com/api/v1"
messages = [
    {
        "role": "system",
        "content": "You are a helpful assistant."
    },
    {
        "role": "user",
        "content": "请编写一个Python函数 find_prime_numbers,该函数接受一个整数 n 作为参数,并返回一个包含所有小于 n 的质数(素数)的列表。质数是指仅能被1和其自身整除的正整数,如2, 3, 5, 7等。不要输出非代码的内容和Markdown的代码块。"
    }
]
response = dashscope.Generation.call(
    # 新加坡和北京地域的API Key不同。获取API Key:https://help.aliyun.com/zh/model-studio/get-api-key
    # 若没有配置环境变量,请用阿里云百炼API Key将下行替换为:api_key = "sk-xxx",
    api_key=os.getenv("DASHSCOPE_API_KEY"),
    model="qwen3-coder-plus",
    messages=messages,
    result_format="message"
)
print("=" * 20 + "回复内容" + "=" * 20)
print(response.output.choices[0].message.content)
print("=" * 20 + "Token消耗" + "=" * 20)
print(f"输入 Tokens: {response.usage.input_tokens}")
print(f"输出 Tokens: {response.usage.output_tokens}")
print(f"总计 Tokens: {response.usage.total_tokens}")返回结果
====================回复内容====================
def find_prime_numbers(n):
    if n <= 2:
        return []
    
    primes = []
    
    for num in range(2, n):
        is_prime = True
        for i in range(2, int(num ** 0.5) + 1):
            if num % i == 0:
                is_prime = False
                break
        if is_prime:
            primes.append(num)
    
    return primes
====================Token消耗====================
输入 Tokens: 96
输出 Tokens: 90
总计 Tokens: 186Java
请求示例
import java.util.Arrays;
import com.alibaba.dashscope.aigc.generation.Generation;
import com.alibaba.dashscope.aigc.generation.GenerationResult;
import com.alibaba.dashscope.aigc.generation.GenerationParam;
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.protocol.Protocol;
public class Main {
    public static void callWithMessage()
            throws NoApiKeyException, ApiException, InputRequiredException {
        String apiKey = System.getenv("DASHSCOPE_API_KEY");
        // 以下为北京地域base_url,若使用新加坡地域的模型,需将base_url替换为:https://dashscope-intl.aliyuncs.com/api/v1
        Generation gen = new Generation(Protocol.HTTP.getValue(), "https://dashscope.aliyuncs.com/api/v1");
        Message sysMsg = Message.builder()
                .role(Role.SYSTEM.getValue())
                .content("You are a helpful assistant.").build();
        Message userMsg = Message.builder()
                .role(Role.USER.getValue())
                .content("请编写一个Python函数 find_prime_numbers,该函数接受一个整数 n 作为参数,并返回一个包含所有小于 n 的质数(素数)的列表。质数是指仅能被1和其自身整除的正整数,如2, 3, 5, 7等。不要输出非代码的内容和Markdown的代码块。").build();
        // 此处以qwen3-coder-plus为例,可按需更换模型名称。
        GenerationParam param = GenerationParam.builder()
                .apiKey(apiKey)
                .model("qwen3-coder-plus")
                .messages(Arrays.asList(sysMsg, userMsg))
                .resultFormat(GenerationParam.ResultFormat.MESSAGE)
                .build();
        GenerationResult result = gen.call(param);
        System.out.println("====================回复内容====================");
        System.out.println(result.getOutput().getChoices().get(0).getMessage().getContent());
        System.out.println("====================Token消耗====================");
        System.out.println("输入 Tokens:" + result.getUsage().getInputTokens());
        System.out.println("输出 Tokens:" + result.getUsage().getOutputTokens());
        System.out.println("总计 Tokens:" + result.getUsage().getTotalTokens());
    }
    public static void main(String[] args){
        try {
            callWithMessage();
        } catch (ApiException | NoApiKeyException | InputRequiredException e) {
            e.printStackTrace();
        }
    }
}返回结果
====================回复内容====================
def find_prime_numbers(n):
    if n <= 2:
        return []
    
    primes = []
    
    for num in range(2, n):
        is_prime = True
        for i in range(2, int(num ** 0.5) + 1):
            if num % i == 0:
                is_prime = False
                break
        if is_prime:
            primes.append(num)
    
    return primes
====================Token消耗====================
输入 Tokens: 96
输出 Tokens: 90
总计 Tokens: 186curl
请求示例
以下为北京地域url,若使用新加坡地域的模型,需将url替换为:https://dashscope-intl.aliyuncs.com/api/v1/services/aigc/text-generation/generation
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": "qwen3-coder-plus",
    "input":{
        "messages":[      
            {
                "role": "system",
                "content": "You are a helpful assistant."
            },
            {
                "role": "user",
                "content": "请编写一个Python函数 find_prime_numbers,该函数接受一个整数 n 作为参数,并返回一个包含所有小于 n 的质数(素数)的列表。质数是指仅能被1和其自身整除的正整数,如2, 3, 5, 7等。不要输出非代码的内容和Markdown的代码块。"
            }
        ]
    },
    "parameters": {
        "result_format": "message"
    }
}'返回结果
{
    "output": {
        "choices": [
            {
                "message": {
                    "content": "def find_prime_numbers(n):\n    if n <= 2:\n        return []\n    \n    primes = []\n    \n    for num in range(2, n):\n        is_prime = True\n        for i in range(2, int(num ** 0.5) + 1):\n            if num % i == 0:\n                is_prime = False\n                break\n        if is_prime:\n            primes.append(num)\n    \n    return primes",
                    "role": "assistant"
                },
                "finish_reason": "stop"
            }
        ]
    },
    "usage": {
        "total_tokens": 186,
        "output_tokens": 90,
        "input_tokens": 96,
        "prompt_tokens_details": {
            "cached_tokens": 0
        }
    },
    "request_id": "b1b8d1f8-0d26-4651-a466-66eefa0e7c51"
}进阶用法
流式输出
使用流式输出调用通义千问代码模型,能够实时返回中间结果,减少阅读等待时间,并降低请求的超时风险。
OpenAI兼容
Python
请求示例
import os
from openai import OpenAI
client = OpenAI(
    # 新加坡和北京地域的API Key不同。获取API Key:https://help.aliyun.com/zh/model-studio/get-api-key
    # 若没有配置环境变量,请用阿里云百炼API Key将下行替换为:api_key="sk-xxx",
    api_key=os.getenv("DASHSCOPE_API_KEY"),
    # 以下是北京地域base_url,如果使用新加坡地域的模型,需要将base_url替换为:https://dashscope-intl.aliyuncs.com/compatible-mode/v1
    base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",
)
completion = client.chat.completions.create(
    model="qwen3-coder-plus",
    messages=[
        {"role": "system", "content": "You are a helpful assistant."},
        {"role": "user", "content": "请编写一个Python函数 isPalindrome,该函数接受一个字符串 string 作为参数,并检查该字符串是否为回文。回文是指正读和反读都相同的字符串。函数应返回布尔值 True 或 False。不要输出非代码的内容和Markdown的代码块。"}
    ],
    stream=True,
    # 在最后一个chunk中获取本次请求的Token用量
    stream_options={"include_usage": True}
)
content_parts = []
print("="*20+"回复内容"+"="*20+"\n", end="", flush=True)
for chunk in completion:
    # 最后一个chunk不包含choices,但包含usage信息
    if chunk.choices:
        # delta.content可能为None,使用`or ""`避免拼接时出错
        content = chunk.choices[0].delta.content or ""
        print(content, end="", flush=True)
        content_parts.append(content)
    elif chunk.usage:
        print("\n"+"="*20+"Token消耗"+"="*20)
        print(f"输入 Tokens: {chunk.usage.prompt_tokens}")
        print(f"输出 Tokens: {chunk.usage.completion_tokens}")
        print(f"总计 Tokens: {chunk.usage.total_tokens}")
full_response = "".join(content_parts)
# 如需获取完整响应字符串,请取消下行注释
# print(f"\n--- 完整回复 ---\n{full_response}")返回结果
====================回复内容====================
def isPalindrome(string):
    # 将字符串转换为小写并去除空格
    cleaned_string = string.lower().replace(" ", "")
    # 检查字符串是否与其反转相等
    return cleaned_string == cleaned_string[::-1]
====================Token消耗====================
输入 Tokens: 77
输出 Tokens: 53
总计 Tokens: 130Node.js
请求示例
import OpenAI from "openai";
const client = new OpenAI(
    {
        // 新加坡和北京地域的API Key不同。获取API Key:https://help.aliyun.com/zh/model-studio/get-api-key
        // 若没有配置环境变量,请用百炼API Key将下行替换为:apiKey: "sk-xxx",
        apiKey: process.env.DASHSCOPE_API_KEY,
        // 以下是北京地域base_url,如果使用新加坡地域的模型,需要将base_url替换为:https://dashscope-intl.aliyuncs.com/compatible-mode/v1
        baseURL: "https://dashscope.aliyuncs.com/compatible-mode/v1"
    }
);
async function main() {
    const stream = await client.chat.completions.create({
        model: "qwen3-coder-plus",
        messages: [
            { role: "system", content: "You are a helpful assistant." },
            { role: "user", content: "请编写一个Python函数 isPalindrome,该函数接受一个字符串 string 作为参数,并检查该字符串是否为回文。回文是指正读和反读都相同的字符串。函数应返回布尔值 True 或 False。不要输出非代码的内容和Markdown的代码块。" },
        ],
        stream: true,
        // 在最后一个chunk中获取本次请求的Token用量
        stream_options: { include_usage: true },
    });
    const contentParts = [];
    process.stdout.write("\n"+"=".repeat(20) + "回复内容" + "=".repeat(20) + "\n");
    
    for await (const chunk of stream) {
        // 最后一个chunk不包含choices,但包含usage信息
        if (chunk.choices && chunk.choices.length > 0) {
            const content = chunk.choices[0]?.delta?.content || "";
            process.stdout.write(content);
            contentParts.push(content);
        } else if (chunk.usage) {
            // 请求结束,打印Token用量
            console.log("\n"+"=".repeat(20) + "Token消耗" + "=".repeat(20));
            console.log(`输入 Tokens: ${chunk.usage.prompt_tokens}`);
            console.log(`输出 Tokens: ${chunk.usage.completion_tokens}`);
            console.log(`总计 Tokens: ${chunk.usage.total_tokens}`);
        }
    }
    
    const fullResponse = contentParts.join("");
    // 如需获取完整响应字符串,请取消下行注释
    // console.log(`\n--- 完整回复 ---\n${fullResponse}`);
}
main();返回结果
====================回复内容====================
def isPalindrome(string):
    # 将字符串转换为小写并去除空格
    cleaned_string = string.lower().replace(" ", "")
    # 检查字符串是否与其反转相等
    return cleaned_string == cleaned_string[::-1]
====================Token消耗====================
输入 Tokens: 77
输出 Tokens: 53
总计 Tokens: 130curl
请求示例
以下为北京地域url,若使用新加坡地域的模型,需将url替换为:https://dashscope-intl.aliyuncs.com/compatible-mode/v1/chat/completions
curl -X POST https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions \
-H "Authorization: Bearer $DASHSCOPE_API_KEY" \
-H "Content-Type: application/json" \
--no-buffer \
-d '{
    "model": "qwen3-coder-plus",
    "messages": [
        {"role": "user", "content": "请编写一个Python函数 isPalindrome,该函数接受一个字符串 string 作为参数,并检查该字符串是否为回文。回文是指正读和反读都相同的字符串。函数应返回布尔值 True 或 False。不要输出非代码的内容和Markdown的代码块。"}
    ],
    "stream": true,
    "stream_options": {"include_usage": true}
}'返回结果
data: {"choices":[{"delta":{"content":"","role":"assistant"},"index":0,"logprobs":null,"finish_reason":null}],"object":"chat.completion.chunk","usage":null,"created":1761299312,"system_fingerprint":null,"model":"qwen3-coder-plus","id":"chatcmpl-1288d5fa-3c9f-443d-9d43-1ddaf4519393"}
data: {"choices":[{"finish_reason":null,"logprobs":null,"delta":{"content":"def"},"index":0}],"object":"chat.completion.chunk","usage":null,"created":1761299312,"system_fingerprint":null,"model":"qwen3-coder-plus","id":"chatcmpl-1288d5fa-3c9f-443d-9d43-1ddaf4519393"}
data: {"choices":[{"delta":{"content":" isPalindrome(string"},"finish_reason":null,"index":0,"logprobs":null}],"object":"chat.completion.chunk","usage":null,"created":1761299312,"system_fingerprint":null,"model":"qwen3-coder-plus","id":"chatcmpl-1288d5fa-3c9f-443d-9d43-1ddaf4519393"}
......
data: {"choices":[{"delta":{"content":"_string[::-1]"},"finish_reason":null,"index":0,"logprobs":null}],"object":"chat.completion.chunk","usage":null,"created":1761299312,"system_fingerprint":null,"model":"qwen3-coder-plus","id":"chatcmpl-1288d5fa-3c9f-443d-9d43-1ddaf4519393"}
data: {"choices":[{"finish_reason":"stop","delta":{"content":""},"index":0,"logprobs":null}],"object":"chat.completion.chunk","usage":null,"created":1761299312,"system_fingerprint":null,"model":"qwen3-coder-plus","id":"chatcmpl-1288d5fa-3c9f-443d-9d43-1ddaf4519393"}
data: {"choices":[],"object":"chat.completion.chunk","usage":{"prompt_tokens":66,"completion_tokens":53,"total_tokens":119,"prompt_tokens_details":{"cached_tokens":0}},"created":1761299312,"system_fingerprint":null,"model":"qwen3-coder-plus","id":"chatcmpl-1288d5fa-3c9f-443d-9d43-1ddaf4519393"}
data: [DONE]DashScope
Python
请求示例
import os
from http import HTTPStatus
import dashscope
from dashscope import Generation
# 若使用新加坡地域的模型,请取消下行注释
# dashscope.base_http_api_url = "https://dashscope-intl.aliyuncs.com/api/v1"
messages = [
    {"role": "system", "content": "You are a helpful assistant."},
    {"role": "user", "content": "请编写一个Python函数 isPalindrome,该函数接受一个字符串 string 作为参数,并检查该字符串是否为回文。回文是指正读和反读都相同的字符串。函数应返回布尔值 True 或 False。不要输出非代码的内容和Markdown的代码块。"},
]
responses = Generation.call(
    # 新加坡和北京地域的API Key不同。获取API Key:https://help.aliyun.com/zh/model-studio/get-api-key
    # 若没有配置环境变量,请用百炼API Key将下行替换为:api_key="sk-xxx",
    api_key=os.getenv('DASHSCOPE_API_KEY'),
    model="qwen3-coder-plus",
    messages=messages,
    result_format="message",
    stream=True,
    # 增量输出,每个数据块仅包含新生成的内容
    incremental_output=True,
)
content_parts = []
print("="*20+"回复内容"+"="*20+"\n", end="", flush=True)
for resp in responses:
    if resp.status_code == HTTPStatus.OK:
        content = resp.output.choices[0].message.content
        print(content, end="", flush=True)
        content_parts.append(content)
        if resp.output.choices[0].finish_reason == "stop":
            print("\n"+"=" * 20 + "Token消耗" + "=" * 20)
            print(f"输入 Tokens: {resp.usage.input_tokens}")
            print(f"输出 Tokens: {resp.usage.output_tokens}")
            print(f"总计 Tokens: {resp.usage.total_tokens}")
full_response = "".join(content_parts)
# 如需获取完整响应字符串,请取消下行注释
# print(f"\n--- 完整回复 ---\n{full_response}")返回结果
====================回复内容====================
def isPalindrome(string):
    # 将字符串转换为小写并去除空格
    cleaned_string = string.lower().replace(" ", "")
    # 检查字符串是否与其反转相等
    return cleaned_string == cleaned_string[::-1]
====================Token消耗====================
输入 Tokens: 77
输出 Tokens: 53
总计 Tokens: 130Java
请求示例
// DashScope SDK 版本需要不低于 2.20.6
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 io.reactivex.Flowable;
import io.reactivex.schedulers.Schedulers;
import java.util.Arrays;
import java.util.concurrent.CountDownLatch;
import com.alibaba.dashscope.protocol.Protocol;
public class Main {
    public static void main(String[] args) {
        String apiKey = System.getenv("DASHSCOPE_API_KEY");
        // 以下为北京地域base_url,若使用新加坡地域的模型,需将base_url替换为:https://dashscope-intl.aliyuncs.com/api/v1
        Generation gen = new Generation(Protocol.HTTP.getValue(), "https://dashscope.aliyuncs.com/api/v1");
        CountDownLatch latch = new CountDownLatch(1);
        GenerationParam param = GenerationParam.builder()
                .apiKey(apiKey)
                .model("qwen3-coder-plus")
                .messages(Arrays.asList(
                        Message.builder()
                                .role(Role.USER.getValue())
                                .content("请编写一个Python函数 isPalindrome,该函数接受一个字符串 string 作为参数,并检查该字符串是否为回文。回文是指正读和反读都相同的字符串。函数应返回布尔值 True 或 False。不要输出非代码的内容和Markdown的代码块。")
                                .build()
                ))
                .resultFormat(GenerationParam.ResultFormat.MESSAGE)
                .incrementalOutput(true) // 开启增量输出,流式返回,每个数据块仅包含新生成的内容
                .build();
        try {
            Flowable<GenerationResult> result = gen.streamCall(param);
            StringBuilder fullContent = new StringBuilder();
            System.out.println("====================回复内容====================");
            result
                    .subscribeOn(Schedulers.io()) // IO线程执行请求
                    .observeOn(Schedulers.computation()) // 计算线程处理响应
                    .subscribe(
                            // onNext: 处理每个响应片段
                            message -> {
                                String content = message.getOutput().getChoices().get(0).getMessage().getContent();
                                String finishReason = message.getOutput().getChoices().get(0).getFinishReason();
                                // 输出内容
                                System.out.print(content);
                                fullContent.append(content);
                                // 当 finishReason 不为 null 时,表示是最后一个 chunk,输出用量信息
                                if (finishReason != null && !"null".equals(finishReason)) {
                                    System.out.println("\n====================Token消耗====================");
                                    System.out.println("输入 Tokens: " + message.getUsage().getInputTokens());
                                    System.out.println("输出 Tokens: " + message.getUsage().getOutputTokens());
                                    System.out.println("总计 Tokens: " + message.getUsage().getTotalTokens());
                                }
                                System.out.flush(); // 立即刷新输出
                            },
                            // onError: 处理错误
                            error -> {
                                System.err.println("\n请求失败: " + error.getMessage());
                                latch.countDown();
                            },
                            // onComplete: 完成回调
                            () -> {
                                System.out.println(); // 换行
                                // 如需获取完整响应字符串,请取消下行注释
                                // System.out.println("完整响应: " + fullContent.toString());
                                latch.countDown();
                            }
                    );
            // 主线程等待异步任务完成
            latch.await();
        } catch (Exception e) {
            System.err.println("请求异常: " + e.getMessage());
            e.printStackTrace();
        }
    }
}返回结果
====================回复内容====================
def isPalindrome(string):
    # 将字符串转换为小写并去除空格
    cleaned_string = string.lower().replace(" ", "")
    # 检查字符串是否与其反转相等
    return cleaned_string == cleaned_string[::-1]
====================Token消耗====================
输入 Tokens: 77
输出 Tokens: 53
总计 Tokens: 130curl
请求示例
以下为北京地域url,若使用新加坡地域的模型,需将url替换为:https://dashscope-intl.aliyuncs.com/api/v1/services/aigc/text-generation/generation
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" \
-H "X-DashScope-SSE: enable" \
-d '{
    "model": "qwen3-coder-plus",
    "input":{
        "messages":[      
            {
                "role": "system",
                "content": "You are a helpful assistant."
            },
            {
                "role": "user",
                "content": "请编写一个Python函数 isPalindrome,该函数接受一个字符串 string 作为参数,并检查该字符串是否为回文。回文是指正读和反读都相同的字符串。函数应返回布尔值 True 或 False。不要输出非代码的内容和Markdown的代码块。"
            }
        ]
    },
    "parameters": {
        "result_format": "message",
        "incremental_output":true
    }
}'返回结果
id:1
event:result
:HTTP_STATUS/200
data:{"output":{"choices":[{"message":{"content":"def","role":"assistant"},"finish_reason":"null"}]},"usage":{"total_tokens":78,"output_tokens":1,"input_tokens":77,"prompt_tokens_details":{"cached_tokens":0}},"request_id":"92057470-782b-4235-bac8-2fd1492231eb"}
id:2
event:result
:HTTP_STATUS/200
data:{"output":{"choices":[{"message":{"content":" isPalindrome(string","role":"assistant"},"finish_reason":"null"}]},"usage":{"total_tokens":81,"output_tokens":4,"input_tokens":77,"prompt_tokens_details":{"cached_tokens":0}},"request_id":"92057470-782b-4235-bac8-2fd1492231eb"}
id:3
event:result
:HTTP_STATUS/200
data:{"output":{"choices":[{"message":{"content":"):\n    #","role":"assistant"},"finish_reason":"null"}]},"usage":{"total_tokens":84,"output_tokens":7,"input_tokens":77,"prompt_tokens_details":{"cached_tokens":0}},"request_id":"92057470-782b-4235-bac8-2fd1492231eb"}
...
id:17
event:result
:HTTP_STATUS/200
data:{"output":{"choices":[{"message":{"content":" == cleaned","role":"assistant"},"finish_reason":"null"}]},"usage":{"total_tokens":125,"output_tokens":48,"input_tokens":77,"prompt_tokens_details":{"cached_tokens":0}},"request_id":"92057470-782b-4235-bac8-2fd1492231eb"}
id:18
event:result
:HTTP_STATUS/200
data:{"output":{"choices":[{"message":{"content":"_string[::-1]","role":"assistant"},"finish_reason":"null"}]},"usage":{"total_tokens":129,"output_tokens":52,"input_tokens":77,"prompt_tokens_details":{"cached_tokens":0}},"request_id":"92057470-782b-4235-bac8-2fd1492231eb"}
id:19
event:result
:HTTP_STATUS/200
data:{"output":{"choices":[{"message":{"content":"","role":"assistant"},"finish_reason":"stop"}]},"usage":{"total_tokens":129,"output_tokens":52,"input_tokens":77,"prompt_tokens_details":{"cached_tokens":0}},"request_id":"92057470-782b-4235-bac8-2fd1492231eb"}工具调用
Qwen3-Coder 模型具有强大的 Coding Agent 能力,能够调用外部工具实现代码修改、文件操作等复杂任务。发起 Function Calling 调用后,模型将在 tool_calls 响应字段中返回工具名称与参数。实现并执行这些工具,即可完成写入文件等实际操作,完整流程请参见:Function Calling。
OpenAI兼容
Python
请求示例
import os
from openai import OpenAI
client = OpenAI(
    # 新加坡和北京地域的API Key不同。获取API Key:https://help.aliyun.com/zh/model-studio/get-api-key
    # 若没有配置环境变量,请用阿里云百炼API Key将下行替换为:api_key="sk-xxx",
    api_key=os.getenv("DASHSCOPE_API_KEY"),
    # 以下是北京地域base_url,如果使用新加坡地域的模型,需要将base_url替换为:https://dashscope-intl.aliyuncs.com/compatible-mode/v1
    base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",
)
tools = [
    # 工具1 读取文件内容
    {
        "type": "function",
        "function": {
            "name": "read_file",
            "description": "读取指定路径的文件内容。",
            "parameters": {
                "type": "object",
                "properties": {
                    "path": {
                        "type": "string",
                        "description": "目标文件的相对或绝对路径"
                    }
                },
                "required": ["path"]
            }
        }
    },
    # 工具2 写入文件内容
    {
        "type": "function",
        "function": {
            "name": "write_file",
            "description": "将内容写入指定文件,若文件不存在则创建。",
            "parameters": {
                "type": "object",
                "properties": {
                    "path": {
                        "type": "string",
                        "description": "目标文件的相对或绝对路径"
                    },
                    "content": {
                        "type": "string",
                        "description": "写入文件的字符串内容"
                    }
                },
                "required": ["path", "content"]
            }
        }
    },
    # 工具3 列出目录内容
    {
        "type": "function",
        "function": {
            "name": "list_directory",
            "description": "列出指定目录中的文件和子目录。",
            "parameters": {
                "type": "object",
                "properties": {
                    "path": {
                        "type": "string",
                        "description": "目标目录的相对或绝对路径"
                    }
                },
                "required": ["path"]
            }
        }
    }
]
messages = [{"role": "user", "content": "写一个python代码,快速排序,命名为quick_sort.py"}]
completion = client.chat.completions.create(
    model="qwen3-coder-plus",
    messages=messages,
    tools=tools
)
print("="*20+"工具调用信息"+"="*20)
print(completion.choices[0].message.tool_calls)
print("="*20+"Token消耗"+"="*20)
print(f"输入 Tokens: {completion.usage.prompt_tokens}")
print(f"输出 Tokens: {completion.usage.completion_tokens}")
print(f"总计 Tokens: {completion.usage.total_tokens}")返回结果
====================工具调用信息====================
[ChatCompletionMessageFunctionToolCall(id='call_1f3c569a3fb14a84a86b94db', function=Function(arguments='{"content": "def quick_sort(arr):\\\\n    if len(arr) <= 1:\\\\n        return arr\\\\n    pivot = arr[len(arr) // 2]\\\\n    left = [x for x in arr if x < pivot]\\\\n    middle = [x for x in arr if x == pivot]\\\\n    right = [x for x in arr if x > pivot]\\\\n    return quick_sort(left) + middle + quick_sort(right)\\\\n\\\\nif __name__ == \\\\\\"__main__\\\\\\":\\\\n    example = [3, 6, 8, 10, 1, 2, 1]\\\\n    print(\\\\\\"Original list:\\\\\\", example)\\\\n    sorted_list = quick_sort(example)\\\\n    print(\\\\\\"Sorted list:\\\\\\", sorted_list)", "path": "quick_sort.py"}', name='write_file'), type='function', index=0)]
====================Token消耗====================
输入 Tokens: 494
输出 Tokens: 190
总计 Tokens: 684Node.js
请求示例
import OpenAI from "openai";
const client = new OpenAI(
    {
        // 新加坡和北京地域的API Key不同。获取API Key:https://help.aliyun.com/zh/model-studio/get-api-key
        // 若没有配置环境变量,请用百炼API Key将下行替换为:apiKey: "sk-xxx",
        apiKey: process.env.DASHSCOPE_API_KEY,
        // 以下是北京地域base_url,如果使用新加坡地域的模型,需要将base_url替换为:https://dashscope-intl.aliyuncs.com/compatible-mode/v1
        baseURL: "https://dashscope.aliyuncs.com/compatible-mode/v1"
    }
);
const tools = [
    // 工具1 读取文件内容
    {
        "type": "function",
        "function": {
            "name": "read_file",
            "description": "读取指定路径的文件内容。",
            "parameters": {
                "type": "object",
                "properties": {
                    "path": {
                        "type": "string",
                        "description": "目标文件的相对或绝对路径"
                    }
                },
                "required": ["path"]
            }
        }
    },
    // 工具2 写入文件内容
    {
        "type": "function",
        "function": {
            "name": "write_file",
            "description": "将内容写入指定文件,若文件不存在则创建。",
            "parameters": {
                "type": "object",
                "properties": {
                    "path": {
                        "type": "string",
                        "description": "目标文件的相对或绝对路径"
                    },
                    "content": {
                        "type": "string",
                        "description": "写入文件的字符串内容"
                    }
                },
                "required": ["path", "content"]
            }
        }
    },
    // 工具3 列出目录内容
    {
        "type": "function",
        "function": {
            "name": "list_directory",
            "description": "列出指定目录中的文件和子目录。",
            "parameters": {
                "type": "object",
                "properties": {
                    "path": {
                        "type": "string",
                        "description": "目标目录的相对或绝对路径"
                    }
                },
                "required": ["path"]
            }
        }
    }
];
const messages = [{"role": "user", "content": "写一个python代码,快速排序,命名为quick_sort.py"}];
async function main() {
    const completion = await client.chat.completions.create({
        model: "qwen3-coder-plus", // 此处以qwen3-coder-plus为例,可按需更换模型名称。
        messages: messages,
        tools: tools,
    });
    console.log("=".repeat(20) + "工具调用信息" + "=".repeat(20));
    console.log(completion.choices[0].message.tool_calls);
    console.log("=".repeat(20) + "Token消耗" + "=".repeat(20));
    console.log(`输入 Tokens: ${completion.usage.prompt_tokens}`);
    console.log(`输出 Tokens: ${completion.usage.completion_tokens}`);
    console.log(`总计 Tokens: ${completion.usage.total_tokens}`);
}
main();返回结果
====================工具调用信息====================
[
  {
    index: 0,
    id: 'call_242eec7c7b524a2d90d2e167',
    type: 'function',
    function: {
      name: 'write_file',
      arguments: '{"content": "def quick_sort(arr):\\\\n    if len(arr) <= 1:\\\\n        return arr\\\\n    pivot = arr[len(arr) // 2]\\\\n    left = [x for x in arr if x < pivot]\\\\n    middle = [x for x in arr if x == pivot]\\\\n    right = [x for x in arr if x > pivot]\\\\n    return quick_sort(left) + middle + quick_sort(right)\\\\n\\\\nif __name__ == \\\\\\"__main__\\\\\\":\\\\n    example_list = [3, 6, 8, 10, 1, 2, 1]\\\\n    print(\\\\\\"Original list:\\\\\\", example_list)\\\\n    sorted_list = quick_sort(example_list)\\\\n    print(\\\\\\"Sorted list:\\\\\\", sorted_list)", "path": "quick_sort.py"}'
    }
  }
]
====================Token消耗====================
输入 Tokens: 494
输出 Tokens: 193
总计 Tokens: 687curl
请求示例
以下为北京地域url,若使用新加坡地域的模型,需将url替换为:https://dashscope-intl.aliyuncs.com/compatible-mode/v1/chat/completions
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": "qwen3-coder-plus",
    "messages": [
        {
            "role": "user", 
            "content": "写一个python代码,快速排序,命名为quick_sort.py"
        }
    ],
    "tools": [
        {
            "type": "function",
            "function": {
                "name": "read_file",
                "description": "读取指定路径的文件内容。",
                "parameters": {
                    "type": "object",
                    "properties": {
                        "path": {
                            "type": "string",
                            "description": "目标文件的相对或绝对路径"
                        }
                    },
                    "required": ["path"]
                }
            }
        },
        {
            "type": "function",
            "function": {
                "name": "write_file",
                "description": "将内容写入指定文件,若文件不存在则创建。",
                "parameters": {
                    "type": "object",
                    "properties": {
                        "path": {
                            "type": "string",
                            "description": "目标文件的相对或绝对路径"
                        },
                        "content": {
                            "type": "string",
                            "description": "写入文件的字符串内容"
                        }
                    },
                    "required": ["path", "content"]
                }
            }
        },
        {
            "type": "function",
            "function": {
                "name": "list_directory",
                "description": "列出指定目录中的文件和子目录。",
                "parameters": {
                    "type": "object",
                    "properties": {
                        "path": {
                            "type": "string",
                            "description": "目标目录的相对或绝对路径"
                        }
                    },
                    "required": ["path"]
                }
            }
        }
    ]
}'返回结果
{
    "choices": [
        {
            "message": {
                "content": "",
                "role": "assistant",
                "tool_calls": [
                    {
                        "index": 0,
                        "id": "call_0ca7505bb6e44471a40511e5",
                        "type": "function",
                        "function": {
                            "name": "write_file",
                            "arguments": "{\"content\": \"def quick_sort(arr):\\\\n    if len(arr) <= 1:\\\\n        return arr\\\\n    pivot = arr[len(arr) // 2]\\\\n    left = [x for x in arr if x < pivot]\\\\n    middle = [x for x in arr if x == pivot]\\\\n    right = [x for x in arr if x > pivot]\\\\n    return quick_sort(left) + middle + quick_sort(right)\\\\n\\\\nif __name__ == \\\\\\\"__main__\\\\\\\":\\\\n    example_list = [3, 6, 8, 10, 1, 2, 1]\\\\n    print(\\\\\\\"Original list:\\\\\\\", example_list)\\\\n    sorted_list = quick_sort(example_list)\\\\n    print(\\\\\\\"Sorted list:\\\\\\\", sorted_list)\", \"path\": \"quick_sort.py\"}"
                        }
                    }
                ]
            },
            "finish_reason": "tool_calls",
            "index": 0,
            "logprobs": null
        }
    ],
    "object": "chat.completion",
    "usage": {
        "prompt_tokens": 494,
        "completion_tokens": 193,
        "total_tokens": 687,
        "prompt_tokens_details": {
            "cached_tokens": 0
        }
    },
    "created": 1761620025,
    "system_fingerprint": null,
    "model": "qwen3-coder-plus",
    "id": "chatcmpl-20e96159-beea-451f-b3a4-d13b218112b5"
}DashScope
Python
请求示例
import os
import dashscope
# 若使用新加坡地域的模型,请取消下行注释
# dashscope.base_http_api_url = "https://dashscope-intl.aliyuncs.com/api/v1"
tools = [
    # 工具1 读取文件内容
    {
        "type": "function",
        "function": {
            "name": "read_file",
            "description": "读取指定路径的文件内容。",
            "parameters": {
                "type": "object",
                "properties": {
                    "path": {
                        "type": "string",
                        "description": "目标文件的相对或绝对路径"
                    }
                },
                "required": ["path"]
            }
        }
    },
    # 工具2 写入文件内容
    {
        "type": "function",
        "function": {
            "name": "write_file",
            "description": "将内容写入指定文件,若文件不存在则创建。",
            "parameters": {
                "type": "object",
                "properties": {
                    "path": {
                        "type": "string",
                        "description": "目标文件的相对或绝对路径"
                    },
                    "content": {
                        "type": "string",
                        "description": "写入文件的字符串内容"
                    }
                },
                "required": ["path", "content"]
            }
        }
    },
    # 工具3 列出目录内容
    {
        "type": "function",
        "function": {
            "name": "list_directory",
            "description": "列出指定目录中的文件和子目录。",
            "parameters": {
                "type": "object",
                "properties": {
                    "path": {
                        "type": "string",
                        "description": "目标目录的相对或绝对路径"
                    }
                },
                "required": ["path"]
            }
        }
    }
]
messages = [{"role": "user", "content": "写一个python代码,快速排序,命名为quick_sort.py"}]
response = dashscope.Generation.call(
    # 若没有配置环境变量,请用百炼API Key将下行替换为:api_key="sk-xxx",
    api_key=os.getenv('DASHSCOPE_API_KEY'),
    model='qwen3-coder-plus',
    messages=messages,
    tools=tools,
    result_format='message'
)
print("="*20+"工具调用信息"+"="*20)
print(response.output.choices[0].message.tool_calls)
print("="*20+"Token消耗"+"="*20)
print(f"输入 Tokens: {response.usage.input_tokens}")
print(f"输出 Tokens: {response.usage.output_tokens}")
print(f"总计 Tokens: {response.usage.total_tokens}")返回结果
====================工具调用信息====================
[{'index': 0, 'id': 'call_33f8121d277f40589eb6cc90', 'type': 'function', 'function': {'name': 'write_file', 'arguments': '{"content": "def quick_sort(arr):\\\\n    if len(arr) <= 1:\\\\n        return arr\\\\n    pivot = arr[len(arr) // 2]\\\\n    left = [x for x in arr if x < pivot]\\\\n    middle = [x for x in arr if x == pivot]\\\\n    right = [x for x in arr if x > pivot]\\\\n    return quick_sort(left) + middle + quick_sort(right)\\\\n\\\\nif __name__ == \\\\\\"__main__\\\\\\":\\\\n    example = [3, 6, 8, 10, 1, 2, 1]\\\\n    print(\\\\\\"Original list:\\\\\\", example)\\\\n    sorted_list = quick_sort(example)\\\\n    print(\\\\\\"Sorted list:\\\\\\", sorted_list)", "path": "quick_sort.py"}'}}]
====================Token消耗====================
输入 Tokens: 494
输出 Tokens: 190
总计 Tokens: 684Java
请求示例
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.tools.FunctionDefinition;
import com.alibaba.dashscope.tools.ToolBase;
import com.alibaba.dashscope.tools.ToolFunction;
import com.alibaba.dashscope.utils.JsonUtils;
import com.alibaba.dashscope.protocol.Protocol;
import java.util.Arrays;
import java.util.List;
public class Main {
    public static void main(String[] args) {
        String apiKey = System.getenv("DASHSCOPE_API_KEY");
        // 定义工具参数模式
        String readPropertyParams =
                "{\"type\":\"object\",\"properties\":{\"path\":{\"type\":\"string\",\"description\":\"目标文件的相对或绝对路径\"}},\"required\":[\"path\"]}";
        String writePropertyParams =
                "{\"type\":\"object\",\"properties\":{\"path\":{\"type\":\"string\",\"description\":\"目标文件的相对或绝对路径\"},\"content\":{\"type\":\"string\",\"description\":\"写入文件的字符串内容\"}},\"required\":[\"path\",\"content\"]}";
        String listDirParams =
                "{\"type\":\"object\",\"properties\":{\"path\":{\"type\":\"string\",\"description\":\"目标目录的相对或绝对路径\"}},\"required\":[\"path\"]}";
        // 定义工具列表
        List<ToolBase> tools = Arrays.asList(
                // 工具1: read_file
                ToolFunction.builder()
                        .function(FunctionDefinition.builder()
                                .name("read_file")
                                .description("读取指定路径的文件内容。")
                                .parameters(JsonUtils.parseString(readPropertyParams).getAsJsonObject())
                                .build())
                        .build(),
                // 工具2: write_file
                ToolFunction.builder()
                        .function(FunctionDefinition.builder()
                                .name("write_file")
                                .description("将内容写入指定文件,若文件不存在则创建。")
                                .parameters(JsonUtils.parseString(writePropertyParams).getAsJsonObject())
                                .build())
                        .build(),
                // 工具3: list_directory
                ToolFunction.builder()
                        .function(FunctionDefinition.builder()
                                .name("list_directory")
                                .description("列出指定目录中的文件和子目录。")
                                .parameters(JsonUtils.parseString(listDirParams).getAsJsonObject())
                                .build())
                        .build()
        );
        // 以下为北京地域base_url,若使用新加坡地域的模型,需将base_url替换为:https://dashscope-intl.aliyuncs.com/api/v1
        Generation gen = new Generation(Protocol.HTTP.getValue(), "https://dashscope.aliyuncs.com/api/v1");
        // 构建消息
        List<Message> messages = Arrays.asList(
                Message.builder()
                        .role(Role.USER.getValue())
                        .content("写一个python代码,快速排序,命名为quick_sort.py")
                        .build()
        );
        // 构建 GenerationParam 参数
        GenerationParam param = GenerationParam.builder()
                .apiKey(apiKey)
                .model("qwen3-coder-plus")
                .messages(messages)
                .tools(tools)
                .resultFormat(GenerationParam.ResultFormat.MESSAGE)
                .build();
        try {
            // 调用模型并获取结果
            GenerationResult result = gen.call(param);
            // 输出工具调用信息
            System.out.println("====================工具调用信息====================");
            System.out.println(result.getOutput().getChoices().get(0).getMessage().getToolCalls());
            // 输出 Token 消耗情况
            System.out.println("====================Token消耗====================");
            System.out.println("输入 Tokens:" + result.getUsage().getInputTokens());
            System.out.println("输出 Tokens:" + result.getUsage().getOutputTokens());
            System.out.println("总 Tokens:" + result.getUsage().getTotalTokens());
        } catch (Exception e) {
            System.err.println("请求异常: " + e.getMessage());
            e.printStackTrace();
        }
    }
}
返回结果
====================工具调用信息====================
[ToolCallFunction(index=null, id=call_6e8dca9f41b0466a868261fd, type=function, function=ToolCallFunction.CallFunction(name=write_file, arguments={"content": "def quick_sort(arr):\\n    if len(arr) <= 1:\\n        return arr\\n    pivot = arr[len(arr) // 2]\\n    left = [x for x in arr if x < pivot]\\n    middle = [x for x in arr if x == pivot]\\n    right = [x for x in arr if x > pivot]\\n    return quick_sort(left) + middle + quick_sort(right)\\n\\nif __name__ == \\\"__main__\\\":\\n    example = [3, 6, 8, 10, 1, 2, 1]\\n    print(\\\"Original list:\\\", example)\\n    sorted_list = quick_sort(example)\\n    print(\\\"Sorted list:\\\", sorted_list)", "path": "quick_sort.py"}, output=null))]
====================Token消耗====================
输入 Tokens:494
输出 Tokens:190
总 Tokens:684curl
请求示例
以下为北京地域url,若使用新加坡地域的模型,需将url替换为:https://dashscope-intl.aliyuncs.com/api/v1/services/aigc/text-generation/generation
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": "qwen3-coder-plus",
    "input": {
        "messages": [{
            "role": "user",
            "content": "写一个python代码,快速排序,命名为quick_sort.py"
        }]
    },
    "parameters": {
        "result_format": "message",
        "tools": [
        {
            "type": "function",
            "function": {
                "name": "read_file",
                "description": "读取指定路径的文件内容。",
                "parameters": {
                    "type": "object",
                    "properties": {
                        "path": {
                            "type": "string",
                            "description": "目标文件的相对或绝对路径"
                        }
                    },
                    "required": ["path"]
                }
            }
        },
        {
            "type": "function",
            "function": {
                "name": "write_file",
                "description": "将内容写入指定文件,若文件不存在则创建。",
                "parameters": {
                    "type": "object",
                    "properties": {
                        "path": {
                            "type": "string",
                            "description": "目标文件的相对或绝对路径"
                        },
                        "content": {
                            "type": "string",
                            "description": "写入文件的字符串内容"
                        }
                    },
                    "required": ["path", "content"]
                }
            }
        },
        {
            "type": "function",
            "function": {
                "name": "list_directory",
                "description": "列出指定目录中的文件和子目录。",
                "parameters": {
                    "type": "object",
                    "properties": {
                        "path": {
                            "type": "string",
                            "description": "目标目录的相对或绝对路径"
                        }
                    },
                    "required": ["path"]
                }
            }
        }
    ]
    }
}'返回结果
{
    "output": {
        "choices": [
            {
                "finish_reason": "tool_calls",
                "message": {
                    "role": "assistant",
                    "tool_calls": [
                        {
                            "function": {
                                "name": "write_file",
                                "arguments": "{\"content\": \"def quick_sort(arr):\\\\n    if len(arr) <= 1:\\\\n        return arr\\\\n    pivot = arr[len(arr) // 2]\\\\n    left = [x for x in arr if x < pivot]\\\\n    middle = [x for x in arr if x == pivot]\\\\n    right = [x for x in arr if x > pivot]\\\\n    return quick_sort(left) + middle + quick_sort(right)\\\\n\\\\nif __name__ == \\\\\\\"__main__\\\\\\\":\\\\n    example_list = [3, 6, 8, 10, 1, 2, 1]\\\\n    print(\\\\\\\"Original list:\\\\\\\", example_list)\\\\n    sorted_list = quick_sort(example_list)\\\\n    print(\\\\\\\"Sorted list:\\\\\\\", sorted_list), \"path\": \"quick_sort.py\"}"
                            },
                            "index": 0,
                            "id": "call_645b149bbd274e8bb3789aae",
                            "type": "function"
                        }
                    ],
                    "content": ""
                }
            }
        ]
    },
    "usage": {
        "total_tokens": 684,
        "output_tokens": 193,
        "input_tokens": 491,
        "prompt_tokens_details": {
            "cached_tokens": 0
        }
    },
    "request_id": "d2386acd-fce3-9d0f-8015-c5f3a8bf9f5c"
}代码补全
代码补全可通过两种方式实现:
- Partial Mode 可进行前缀补全,支持所有通义千问代码系列模型。 
- OpenAI兼容的Completions接口支持前缀补全和基于前后缀的中间补全,当前支持部分模型。仅适用中国(北京)地域的模型,需使用中国(北京)地域的API Key。 
Partial Mode
Partial Mode 可基于在 Assistant Message 中提供的前缀内容进行续写,支持所有通义千问代码系列模型,详情请参见前缀续写。
OpenAI兼容
Python
请求示例
import os
from openai import OpenAI
client = OpenAI(
    # 新加坡和北京地域的API Key不同。获取API Key:https://help.aliyun.com/zh/model-studio/get-api-key
    # 若没有配置环境变量,请用阿里云百炼API Key将下行替换为:api_key="sk-xxx",
    api_key=os.getenv("DASHSCOPE_API_KEY"), # 如果您没有配置环境变量,请在此处用您的API Key进行替换
    # 以下是北京地域base_url,如果使用新加坡地域的模型,需要将base_url替换为:https://dashscope-intl.aliyuncs.com/compatible-mode/v1
    base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",
)
completion = client.chat.completions.create(
    model="qwen3-coder-plus",
    messages=[{
        "role": "user",
        "content": "请帮我写一个python代码生成100以内的素数。不要输出非代码的内容和Markdown的代码块。"
    },
    {
        "role": "assistant",
        "content": "def generate_prime_number",
        "partial": True
    }]
    )
print(completion.choices[0].message.content)
返回结果
(n):
    primes = []
    for i in range(2, n+1):
        is_prime = True
        for j in range(2, int(i**0.5)+1):
            if i % j == 0:
                is_prime = False
                break
        if is_prime:
            primes.append(i)
    return primes
prime_numbers = generate_prime_number(100)
print(prime_numbers)Node.js
请求示例
import OpenAI from "openai";
const client = new OpenAI(
    {
        // 新加坡和北京地域的API Key不同。获取API Key:https://help.aliyun.com/zh/model-studio/get-api-key
        // 若没有配置环境变量,请用百炼API Key将下行替换为:apiKey: "sk-xxx",
        apiKey: process.env.DASHSCOPE_API_KEY,
        // 以下是北京地域base_url,如果使用新加坡地域的模型,需要将base_url替换为:https://dashscope-intl.aliyuncs.com/compatible-mode/v1
        baseURL: "https://dashscope.aliyuncs.com/compatible-mode/v1"
    }
);
async function main() {
    const completion = await client.chat.completions.create({
        model: "qwen3-coder-plus",
        messages: [
            { role: "user", content: "请帮我写一个python代码生成100以内的素数。不要输出非代码的内容和Markdown的代码块。" },
            { role: "assistant", content: "def generate_prime_number", partial: true}
        ],
    });
    console.log(completion.choices[0].message.content);
}
main();返回结果
(n):
    primes = []
    for i in range(2, n+1):
        is_prime = True
        for j in range(2, int(i**0.5)+1):
            if i % j == 0:
                is_prime = False
                break
        if is_prime:
            primes.append(i)
    return primes
prime_numbers = generate_prime_number(100)
print(prime_numbers)curl
请求示例
以下为北京地域url,若使用新加坡地域的模型,需将url替换为:https://dashscope-intl.aliyuncs.com/compatible-mode/v1/chat/completions
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": "qwen3-coder-plus",
    "messages": [{
        "role": "user",
        "content": "请帮我写一个python代码生成100以内的素数。不要输出非代码的内容和Markdown的代码块。"
    },
    {
        "role": "assistant",
        "content": "def generate_prime_number",
        "partial": true
    }]
}'返回结果
{
    "choices": [
        {
            "message": {
                "content": "(n):\n    primes = []\n    for num in range(2, n + 1):\n        is_prime = True\n        for i in range(2, int(num ** 0.5) + 1):\n            if num % i == 0:\n                is_prime = False\n                break\n        if is_prime:\n            primes.append(num)\n    return primes\n\nprime_numbers = generate_prime_number(100)\nprint(prime_numbers)",
                "role": "assistant"
            },
            "finish_reason": "stop",
            "index": 0,
            "logprobs": null
        }
    ],
    "object": "chat.completion",
    "usage": {
        "prompt_tokens": 38,
        "completion_tokens": 93,
        "total_tokens": 131,
        "prompt_tokens_details": {
            "cached_tokens": 0
        }
    },
    "created": 1761634556,
    "system_fingerprint": null,
    "model": "qwen3-coder-plus",
    "id": "chatcmpl-c108050a-bb6d-4423-9d36-f64aa6a32976"
}DashScope
Python
请求示例
from http import HTTPStatus
import dashscope
import os
messages = [{
    "role": "user",
    "content": "请帮我写一个python代码生成100以内的素数,不要输出非代码的内容和Markdown的代码块。"
},
{
    "role": "assistant",
    "content": "def generate_prime_number",
    "partial": True
}]
response = dashscope.Generation.call(
    # 若没有配置环境变量,请用百炼API Key将下行替换为:api_key="sk-xxx",
    api_key=os.getenv('DASHSCOPE_API_KEY'),
    model='qwen3-coder-plus',
    messages=messages,
    result_format='message',  
)
if response.status_code == HTTPStatus.OK:
    print(response.output.choices[0].message.content)
else:
    print('Request id: %s, Status code: %s, error code: %s, error message: %s' % (
        response.request_id, response.status_code,
        response.code, response.message
    ))
返回结果
(n):
    primes = []
    for i in range(2, n+1):
        is_prime = True
        for j in range(2, int(i**0.5)+1):
            if i % j == 0:
                is_prime = False
                break
        if is_prime:
            primes.append(i)
    return primes
prime_numbers = generate_prime_number(100)
print(prime_numbers)curl
请求示例
以下为北京地域url,若使用新加坡地域的模型,需将url替换为:https://dashscope-intl.aliyuncs.com/api/v1/services/aigc/text-generation/generation
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": "qwen3-coder-plus",
    "input":{
        "messages":[{
            "role": "user",
            "content": "请帮我写一个python代码生成100以内的素数,不要输出非代码的内容和Markdown的代码块。"
        },
        {
            "role": "assistant",
            "content": "def generate_prime_number",
            "partial": true
        }]
    },
    "parameters": {
        "result_format": "message"
    }
}'返回结果
{
    "output": {
        "choices": [
            {
                "message": {
                    "content": "(n):\n    prime_list = []\n    for i in range(2, n+1):\n        is_prime = True\n        for j in range(2, int(i**0.5)+1):\n            if i % j == 0:\n                is_prime = False\n                break\n        if is_prime:\n            prime_list.append(i)\n    return prime_list\n\nprime_numbers = generate_prime_number(100)\nprint(prime_numbers)`",
                    "role": "assistant"
                },
                "finish_reason": "stop"
            }
        ]
    },
    "usage": {
        "total_tokens": 131,
        "output_tokens": 92,
        "input_tokens": 39,
        "prompt_tokens_details": {
            "cached_tokens": 0
        }
    },
    "request_id": "9917f629-e819-4519-af44-b0e677e94b2c"
}Completions接口
Completions 接口仅适用中国(北京)地域的模型,需使用中国(北京)地域的API Key。
调用Completions接口时需通过特定提示词模板指引模型进行代码补全。当前支持 Qwen-Coder 的部分模型:
qwen2.5-coder-0.5b-instruct、qwen2.5-coder-1.5b-instruct、qwen2.5-coder-3b-instruct、qwen2.5-coder-7b-instruct、qwen2.5-coder-14b-instruct、qwen2.5-coder-32b-instruct、qwen-coder-turbo-0919、qwen-coder-turbo-latest、qwen-coder-turbo
基于前缀补全
提示词模板:
<|fim_prefix|>{prefix_content}<|fim_suffix|>- <|fim_prefix|>和- <|fim_suffix|>为特殊 Token(- fim即"Fill-in-the-Middle"),用于指引模型进行文本的补全,无需修改。
- {prefix_content}需要替换为传入的前缀信息,比如函数的名称、输入参数、使用说明等信息。
import os
from openai import OpenAI
client = OpenAI(
    base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",
    api_key=os.getenv("DASHSCOPE_API_KEY")
)
completion = client.completions.create(
  model="qwen2.5-coder-32b-instruct",
  prompt="<|fim_prefix|>def quick_sort(arr):<|fim_suffix|>",
)
print(completion.choices[0].text)import OpenAI from "openai";
const client = 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 client.completions.create({
        model: "qwen2.5-coder-32b-instruct",
        prompt: "<|fim_prefix|>def quick_sort(arr):<|fim_suffix|>",
    });
    console.log(completion.choices[0].text)
}
main();curl -X POST https://dashscope.aliyuncs.com/compatible-mode/v1/completions \
-H "Authorization: Bearer $DASHSCOPE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
    "model": "qwen2.5-coder-32b-instruct",
    "prompt": "<|fim_prefix|>def quick_sort(arr):<|fim_suffix|>"
}'基于前缀和后缀补全
提示词模板:
<|fim_prefix|>{prefix_content}<|fim_suffix|>{suffix_content}<|fim_middle|>- <|fim_prefix|>、- <|fim_suffix|>和- <|fim_middle|>为特殊 Token(- fim即"Fill-in-the-Middle"),用于指引模型进行文本的补全,无需修改。
- {prefix_content}需要替换为传入的前缀信息,比如函数的名称、输入参数、使用说明等信息。
- {suffix_content}需要替换为传入的后缀信息,比如函数的返回参数等信息。
import os
from openai import OpenAI
client = OpenAI(
    base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",
    api_key=os.getenv("DASHSCOPE_API_KEY")
)
prefix_content = """def reverse_words_with_special_chars(s):
'''
反转字符串中的每个单词(保留非字母字符的位置),并保持单词顺序。
    示例:
    reverse_words_with_special_chars("Hello, world!") -> "olleH, dlrow!"
    参数:
        s (str): 输入字符串(可能包含标点符号)
    返回:
        str: 处理后的字符串,单词反转但非字母字符位置不变
'''
"""
suffix_content = "return result"
completion = client.completions.create(
  model="qwen2.5-coder-32b-instruct",
  prompt=f"<|fim_prefix|>{prefix_content}<|fim_suffix|>{suffix_content}<|fim_middle|>",
)
print(completion.choices[0].text)import OpenAI from 'openai';
const client = new OpenAI({
  baseURL: "https://dashscope.aliyuncs.com/compatible-mode/v1",
  apiKey: process.env.DASHSCOPE_API_KEY
});
const prefixContent = `def reverse_words_with_special_chars(s):
'''
反转字符串中的每个单词(保留非字母字符的位置),并保持单词顺序。
    示例:
    reverse_words_with_special_chars("Hello, world!") -> "olleH, dlrow!"
    参数:
        s (str): 输入字符串(可能包含标点符号)
    返回:
        str: 处理后的字符串,单词反转但非字母字符位置不变
'''
`;
const suffixContent = "return result";
async function main() {
  const completion = await client.completions.create({
    model: "qwen2.5-coder-32b-instruct",
    prompt: `<|fim_prefix|>${prefixContent}<|fim_suffix|>${suffixContent}<|fim_middle|>`
  });
  console.log(completion.choices[0].text);
}
main();curl -X POST https://dashscope.aliyuncs.com/compatible-mode/v1/completions \
-H "Authorization: Bearer $DASHSCOPE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
    "model": "qwen2.5-coder-32b-instruct",
    "prompt": "<|fim_prefix|>def reverse_words_with_special_chars(s):\n\"\"\"\n反转字符串中的每个单词(保留非字母字符的位置),并保持单词顺序。\n    示例:\n    reverse_words_with_special_chars(\"Hello, world!\") -> \"olleH, dlrow!\"\n    参数:\n        s (str): 输入字符串(可能包含标点符号)\n    返回:\n        str: 处理后的字符串,单词反转但非字母字符位置不变\n\"\"\"\n<|fim_suffix|>return result<|fim_middle|>"
}'应用于生产环境
为优化通义千问代码模型的使用效率并降低成本,可参考以下建议:
- 启用流式输出: 设置 - stream=True可以实时返回中间结果,提升用户体验。
- 降低温度参数: 对于代码生成任务,建议将 - temperature参数 (用于控制生成文本的随机性)设置在- 0.1-- 0.3之间,以提高代码的准确性和确定性。
- 使用支持上下文缓存的模型: 对于包含大量重复前缀(如原始代码)的请求,推荐使用支持上下文缓存的模型(如 qwen3-coder-plus 和 qwen3-coder-flash),以有效降低开销。 
- 控制工具数量:为确保模型调用的效率和成本效益,建议单次传入的工具 - tools数量不超过20个。传入大量工具描述会消耗过多输入Token,这不仅会增加费用、降低响应速度,还会加大模型选择正确工具的难度,详情可参见Function Calling。
错误码
如果模型调用失败并返回报错信息,请参见错误信息进行解决。
API参考
关于通义千问代码模型的输入与输出参数,请参见通义千问 API 参考。
常见问题
Q:使用Qwen Code、Claude Code等开发工具时,为什么会消耗大量 Token?
A:通过外部开发工具调用 Qwen-Coder 模型处理问题时,该工具可能会多次调用 API,从而消耗大量 Token。关于具体的监控和减少Token消耗的方法,请参考Qwen Code和Claude Code文档。
Q:如何让模型只输出代码,不包含任何解释性文字?
A:可以参考以下方法:
- 提示词约束: 在提示词中明确指示,例如:“只返回代码,不要包含任何解释、注释或 markdown 标记。” 
- 设置 - stop序列: 使用- stop=["\n# 解释:", "说明", "Explanation:", "Note:"]等词组,在模型开始生成解释性文字时提前终止,详情请参见通义千问 API 参考。
Q:如何使用 qwen3-coder-plus 的每日 2000 次免费额度?
A:此额度需要通过 Qwen Code 工具使用,与通用的新人免费额度独立计算,不互相冲突。详情请参见如何使用每天 2000 次的免费额度?