代码能力(Qwen-Coder)

Qwen3-Coder 模型具有强大的代码能力,可通过 API 将其集成到业务中。

模型概览

商业版模型

模型名称

版本

上下文长度

最大输入

最大输出

输入成本

输出成本

免费额度

(注)

(Token数)

(每千Token)

qwen3-coder-plus

当前与qwen3-coder-plus-2025-07-22能力相同

稳定版

1,000,000

997,952

65,536

阶梯计价,请参见表格下方说明。

100Token

有效期:百炼开通后180天内

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-07-22 价格如下,其中 qwen3-coder-plus 支持上下文缓存

输入Token

输入成本(每千Token)

输出成本(每千Token)

0-32K

0.004

0.016

32K-128K

0.006

0.024

128K-256K

0.01

0.04

256K-1M

0.02

0.2

qwen3-coder-flash系列

qwen3-coder-flash 和 qwen3-coder-flash-2025-07-28 价格如下,其中 qwen3-coder-flash 支持上下文缓存

输入Token

输入成本(每千Token)

输出成本(每千Token)

0-32K

0.001

0.004

32K-128K

0.0015

0.006

128K-256K

0.0025

0.01

256K-1M

0.005

0.025

早期版本

模型名称

版本

上下文长度

最大输入

最大输出

输入成本

输出成本

免费额度

(注)

(Token数)

(每千Token)

qwen-coder-plus

当前与qwen-coder-plus-2024-11-06能力相同

稳定版

131,072

129,024

8,192

0.0035

0.007

100Token

有效期:百炼开通后180天内

qwen-coder-plus-latest

qwen-coder-plus的最新快照版能力相同

最新版

qwen-coder-plus-2024-11-06

又称qwen-coder-plus-1106

快照版

qwen-coder-turbo

当前与qwen-coder-turbo-2024-09-19能力相同

稳定版

131,072

129,024

8,192

0.002

0.006

qwen-coder-turbo-latest

qwen-coder-turbo的最新快照版能力相同

最新版

qwen-coder-turbo-2024-09-19

又称qwen-coder-turbo-0919

快照版

开源版模型

模型名称

上下文长度

最大输入

最大输出

输入成本

输出成本

免费额度

(注)

(Token数)

(每千Token)

qwen3-coder-480b-a35b-instruct

262,144

204,800

65,536

阶梯计价,请参见表格下方说明。

100Token

有效期:百炼开通后180天内

qwen3-coder-30b-a3b-instruct

qwen2.5-coder-32b-instruct

131,072

129,024

8,192

0.002

0.006

qwen2.5-coder-14b-instruct

qwen2.5-coder-7b-instruct

0.001

0.002

qwen2.5-coder-3b-instruct

32,768

30,720

限时免费体验

qwen2.5-coder-1.5b-instruct

qwen2.5-coder-0.5b-instruct

qwen3-coder-480b-a35b-instruct 与 qwen3-coder-30b-a3b-instruct 根据本次请求输入的 Token数,采取阶梯计费。

模型名称

输入 Token 数

输入成本(每千Token)

输出成本(每千Token)

qwen3-coder-480b-a35b-instruct

0-32K

0.006

0.024

32K-128K

0.009

0.036

128K-200K

0.015

0.06

qwen3-coder-30b-a3b-instruct

0-32K

0.0015

0.006

32K-128K

0.00225

0.009

128K-200K

0.0075

0.0375

关于模型的限流条件,请参见限流

使用方法

以下是调用 Qwen‑Coder 模型的示例代码。此外,您也可以通过 Claude CodeCline 等工具集成 Qwen‑Coder 模型。

您需要已获取API Key配置API Key到环境变量。如果通过OpenAI SDKDashScope SDK进行调用,还需要安装SDK

简单示例

此处以使用通义千问代码模型编写一个寻找质数的Python函数为例。

OpenAI兼容

您可以通过 OpenAI SDK 或 OpenAI 兼容的HTTP方式快速体验通义千问模型。

完整参数列表参考 OpenAI 兼容 API 参考

Python

请求示例

import os
from openai import OpenAI

client = OpenAI(
    api_key=os.getenv("DASHSCOPE_API_KEY"), # 如果您没有配置环境变量,请在此处用您的API Key进行替换
    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函数 find_prime_numbers,该函数接受一个整数 n 作为参数,并返回一个包含所有小于 n 的质数(素数)的列表。质数是指仅能被1和其自身整除的正整数,如2, 3, 5, 7等。不要输出非代码的内容。'}],
    )
print("="*20+"回复内容"+"="*20)
print(completion.choices[0].message.content)
print("="*20+"Token消耗"+"="*20)
print(completion.usage)

返回结果

====================回复内容====================
```python
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消耗====================
CompletionUsage(completion_tokens=95, prompt_tokens=91, total_tokens=186, completion_tokens_details=None, prompt_tokens_details=PromptTokensDetails(audio_tokens=None, cached_tokens=0, cache_type='implicit'))

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: "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等。不要输出非代码的内容。" }
        ],
    });
    console.log("=".repeat(20) + "回复内容" + "=".repeat(20));
    console.log(completion.choices[0].message.content);
    console.log("=".repeat(20) + "Token消耗" + "=".repeat(20));
    console.log(completion.usage);
}

main();

返回结果

====================回复内容====================
```python
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消耗====================
{
  prompt_tokens: 91,
  completion_tokens: 94,
  total_tokens: 185,
  prompt_tokens_details: { cache_type: 'implicit', cached_tokens: 0 }
}

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": "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等。不要输出非代码的内容。"
        }
    ]
}'

返回结果

{
    "choices": [
        {
            "message": {
                "content": "```python\ndef 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\n```",
                "role": "assistant"
            },
            "finish_reason": "stop",
            "index": 0,
            "logprobs": null
        }
    ],
    "object": "chat.completion",
    "usage": {
        "prompt_tokens": 91,
        "completion_tokens": 95,
        "total_tokens": 186,
        "prompt_tokens_details": {
            "cached_tokens": 0
        }
    },
    "created": 1753192010,
    "system_fingerprint": null,
    "model": "qwen3-coder-plus",
    "id": "chatcmpl-798c99c2-7410-9cc4-8385-6dfd757757fa"
}

DashScope

您可以通过DashScope SDKHTTP方式调用通义千问代码模型。

完整参数列表参考DashScope API 参考。SDK 安装请参考安装SDK

Python

请求示例

import dashscope

messages = [
    {
        "role": "system",
        "content": "You are a helpful assistant."
    },
    {
        "role": "user",
        "content": "请编写一个Python函数 find_prime_numbers,该函数接受一个整数 n 作为参数,并返回一个包含所有小于 n 的质数(素数)的列表。质数是指仅能被1和其自身整除的正整数,如2, 3, 5, 7等。不要输出非代码的内容。"
    }
]

response = dashscope.Generation.call(
    model="qwen3-coder-plus",
    messages=messages,
    result_format="message"
)

print("=" * 20 + "回复内容" + "=" * 20)
print(response.output.choices[0].message.content)
print("=" * 20 + "Token消耗" + "=" * 20)
print(response.usage)

返回结果

====================回复内容====================
```python
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消耗====================
{"input_tokens": 91, "output_tokens": 95, "total_tokens": 186, "prompt_tokens_details": {"cache_type": "implicit", "cached_tokens": 0}, "cached_tokens": 0}

Java

请求示例

import java.util.Arrays;
import com.alibaba.dashscope.aigc.generation.Generation;
import com.alibaba.dashscope.aigc.generation.GenerationResult;
import com.alibaba.dashscope.aigc.generation.models.QwenParam;
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;

public class Main {
    public static void callWithMessage()
            throws NoApiKeyException, ApiException, InputRequiredException {
        Generation gen = new Generation();
        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等。不要输出非代码的内容。").build();
        // 此处以qwen3-coder-plus为例,可按需更换模型名称。
        QwenParam param = QwenParam.builder()
                .model("qwen3-coder-plus")
                .messages(Arrays.asList(sysMsg, userMsg))
                .resultFormat(QwenParam.ResultFormat.MESSAGE)
                .build();
        GenerationResult result = gen.call(param);
        System.out.println(result.getOutput().getChoices().get(0).getMessage().getContent());
    }
    public static void main(String[] args){
        try {
            callWithMessage();
        } catch (ApiException | NoApiKeyException | InputRequiredException e) {
            System.out.println(e.getMessage());
        }
        System.exit(0);
    }
}

返回结果

```python
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
```

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": "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等。不要输出非代码的内容。"
            }
        ]
    },
    "parameters": {
        "result_format": "message"
    }
}'

返回结果

{
    "output": {
        "choices": [
            {
                "finish_reason": "stop",
                "message": {
                    "role": "assistant",
                    "content": "```python\ndef find_prime_numbers(n):\n    primes = []\n    for possiblePrime in range(2, n):\n        isPrime = True\n        for num in range(2, int(possiblePrime ** 0.5) + 1):\n            if possiblePrime % num == 0:\n                isPrime = False\n                break\n        if isPrime:\n            primes.append(possiblePrime)\n    return primes\n\n# 示例使用:\nprint(find_prime_numbers(10))  # 输出: [2, 3, 5, 7]\n```\n这个函数通过遍历从2到n-1的所有数字,检查每个数字是否为质数。如果是质数,则将其添加到结果列表中。最后返回包含所有小于n的质数的列表。"
                }
            }
        ]
    },
    "usage": {
        "total_tokens": 247,
        "output_tokens": 162,
        "input_tokens": 85
    },
    "request_id": "e67209f6-e107-914b-b89f-fdfa3d6535df"
}

工具调用

Qwen3-Coder 模型具有强大的 Coding Agent 能力。您可以为模型配置读写文件、列举文件等工具,使其可以直接修改代码文件。

OpenAI兼容

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",
)

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(completion.usage)

返回结果

====================工具调用信息====================
[ChatCompletionMessageToolCall(id='call_fb381599706a4d1d8496fdcb', 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消耗====================
CompletionUsage(completion_tokens=190, prompt_tokens=491, total_tokens=681, completion_tokens_details=None, prompt_tokens_details=PromptTokensDetails(audio_tokens=None, cached_tokens=0, cache_type='implicit'))

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 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 openai.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(completion.usage);
}

main();

返回结果

====================工具调用信息====================
[
  {
    index: 0,
    id: 'call_ea5d4797cae84e76bda8a4a6',
    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消耗====================
{
  prompt_tokens: 491,
  completion_tokens: 190,
  total_tokens: 681,
  prompt_tokens_details: { cache_type: 'implicit', cached_tokens: 0 }
}

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": "qwen3-coder-plus",
    "messages": [
        {
            "role": "system",
            "content": "You are a helpful assistant."
        },
        {
            "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": [
                    {
                        "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_82d0f7acdbd347f89c363551",
                        "type": "function"
                    }
                ]
            },
            "finish_reason": "tool_calls",
            "index": 0,
            "logprobs": null
        }
    ],
    "object": "chat.completion",
    "usage": {
        "prompt_tokens": 478,
        "completion_tokens": 176,
        "total_tokens": 654,
        "prompt_tokens_details": {
            "cached_tokens": 0
        }
    },
    "created": 1753192182,
    "system_fingerprint": null,
    "model": "qwen3-coder-plus",
    "id": "chatcmpl-59d41f11-9f3f-9a94-9faf-50a070f8260a"
}

通过tool_calls参数获得工具函数名与入参信息,运行工具函数可实现修改代码的效果。此请求示例为发起 Function Calling 步骤的代码,完整流程请参见:Function Calling

DashScope

Python

请求示例

import os
import dashscope

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(response.usage)

返回结果

====================工具调用信息====================
[{'index': 0, 'id': 'call_d011365ecedc4552bc449ee9', '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)\\\\n", "path": "quick_sort.py"}'}}]
====================Token消耗====================
{"input_tokens": 491, "output_tokens": 192, "total_tokens": 683, "prompt_tokens_details": {"cached_tokens": 0}}

通过tool_calls参数获得工具函数名与入参信息,运行工具函数可实现修改代码的效果。此请求示例为发起 Function Calling 步骤的代码,完整流程请参见:Function Calling

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": "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"
}

代码补全

基于前缀进行代码补全

阿里云百炼提供了 OpenAI 兼容的 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

如果您需要使用的代码模型不支持 Completions 接口,可使用Partial Mode,它也可以基于前缀进行代码补全。

您可以在前缀中传入函数的名称、输入参数、使用说明等信息,Completions 接口将返回生成的代码。

提示词模板为:

<|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|>写一个python的快速排序函数,def quick_sort(arr):<|fim_suffix|>",
)

print(completion.choices[0].text)
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.completions.create({
        model: "qwen2.5-coder-32b-instruct",
        prompt: "<|fim_prefix|>写一个python的快速排序函数,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|>写一个python的快速排序函数,def quick_sort(arr):<|fim_suffix|>"
}'

除了使用 Completions 接口进行代码补全外,您也可以使用 Partial Mode 实现类似效果,但我们更推荐您使用 Completions 接口。

Partial Mode

该模式允许模型基于在 Assistant Message 中指定的前缀继续生成内容。请参考以下代码:

OpenAI 兼容

Python

请求示例

import os
from openai import OpenAI


client = OpenAI(
    api_key=os.getenv("DASHSCOPE_API_KEY"), # 如果您没有配置环境变量,请在此处用您的API Key进行替换
    base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",
)
completion = client.chat.completions.create(
    model="qwen-coder-plus",
    messages=[{
        "role": "user",
        "content": "请帮我写一个python代码生成100以内的素数。不要生成代码之外的内容。"
    },
    {
        "role": "assistant",
        "content": "```python\ndef my_test",
        "partial": True
    }]
    )
print(completion.choices[0].message.content)

返回结果

(n):
    if n <= 1:
        return False
    for i in range(2, int(n**0.5) + 1):
        if n % i == 0:
            return False
    return True

for num in range(2, 101):
    if my_test(num):
        print(num)
```

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-coder-plus",
        messages: [
            { role: "user", content: "请帮我写一个python代码生成100以内的素数。不要生成代码之外的内容。" },
            { role: "assistant", content: "```python\ndef my_test", partial: true}
        ],
    });
    console.log(completion.choices[0].message.content);
}

main();

返回结果

_prime(n):
    if n <= 1:
        return False
    for i in range(2, int(n**0.5) + 1):
        if n % i == 0:
            return False
    return True

primes = []
for num in range(2, 101):
    if my_test_prime(num):
        primes.append(num)

print(primes)
```

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": "qwen3-coder-plus",
    "messages": [{
        "role": "user",
        "content": "请帮我写一个python代码生成100以内的素数。不要生成代码之外的内容。"
    },
    {
        "role": "assistant",
        "content": "```python\ndef my_test",
        "partial": true
    }]
}'

返回结果

{
    "choices": [
        {
            "message": {
                "role": "assistant",
                "content": "():\n    primes = []\n    for num in range(2, 101):\n        if all(num % i != 0 for i in range(2, int(num**0.5) + 1)):\n            primes.append(num)\n    return primes\n\nprint(my_test())\n```"
            },
            "finish_reason": "stop",
            "index": 0,
            "logprobs": null
        }
    ],
    "object": "chat.completion",
    "usage": {
        "prompt_tokens": 45,
        "completion_tokens": 59,
        "total_tokens": 104
    },
    "created": 1726826616,
    "system_fingerprint": null,
    "model": "qwen-coder-turbo",
    "id": "chatcmpl-e344c69c-3275-9f6d-9a53-b37df03c666d"
}

DashScope

Python

请求示例

from http import HTTPStatus
import dashscope

messages = [{
    "role": "user",
    "content": "请帮我写一个python代码生成100以内的素数,不要生成代码之外的内容。"
},
{
    "role": "assistant",
    "content": "```python\ndef my_test",
    "partial": True
}]
response = dashscope.Generation.call(
    model='qwen-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
    ))

返回结果

():
    primes = []
    for num in range(2, 101):
        if all(num % i != 0 for i in range(2, int(num**0.5) + 1)):
            primes.append(num)
    return primes

if __name__ == "__main__":
    print(my_test())
```

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-coder-plus",
    "input":{
        "messages":[{
            "role": "user",
            "content": "请帮我写一个python代码生成100以内的素数,不要生成代码之外的内容。"
        },
        {
            "role": "assistant",
            "content": "```python\ndef my_test",
            "partial": true
        }]
    },
    "parameters": {
        "result_format": "message"
    }
}'

返回结果

{
    "output": {
        "choices": [
            {
                "finish_reason": "stop",
                "message": {
                    "role": "assistant",
                    "content": "():\n    for i in range(2, 101):\n        if all(i % j != 0 for j in range(2, int(i**0.5) + 1)):\n            print(i)\n\nmy_test()\n```"
                }
            }
        ]
    },
    "usage": {
        "total_tokens": 94,
        "output_tokens": 49,
        "input_tokens": 45
    },
    "request_id": "11c5108b-8e73-94dd-bcc4-e1360fc83e64"
}

根据前缀和后缀生成中间内容

Completions 接口支持通过您给定的前缀与后缀生成中间内容,您可以在前缀中传入函数的名称、输入参数、使用说明等信息,在后缀中传入函数的返回参数等信息,Completions 接口将返回生成的代码。

提示词模板为:

<|fim_prefix|>{prefix_content}<|fim_suffix|>{suffix_content}<|fim_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 = f"""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|>"
}'

API参考

通义千问代码模型的输入与输出参数请参考通义千问

常见问题

Q:使用Qwen Code、Claude Code等开发工具时,为什么会消耗大量 Token?

A:通过外部开发工具(如Qwen Code、Claude Code、Cline等)调用 Qwen-Coder 模型处理问题时,该工具可能会多次调用 API,从而消耗大量 Token。关于具体的监控和减少Token消耗的方法,请参考Qwen CodeClaude Code文档。

Q:如何使用 qwen3-coder-plus 的每日 2000 次免费额度?

A:该额度不同于新人免费额度,需通过 Qwen Code 工具使用。请参见如何使用每天 2000 次的免费额度?

错误码

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