代码能力(Qwen-Coder)

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

开发工具集成方法请参见 Claude CodeQwen Code

模型概览

商业版模型

模型名称

版本

上下文长度

最大输入

最大输出

输入成本

输出成本

免费额度

(注)

(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 SDKOpenAI兼容的HTTP方式调用通义千问代码模型。

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

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方式调用通义千问代码模型。

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": 92, "output_tokens": 95, "total_tokens": 187, "prompt_tokens_details": {"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 userMsg = Message.builder()
                .role(Role.USER.getValue())
                .content("请编写一个Python函数 find_prime_numbers,该函数接受一个整数 n 作为参数,并返回一个包含所有小于 n 的质数(素数)的列表。质数是指仅能被1和其自身整除的正整数,如2, 3, 5, 7等。").build();
        QwenParam param =
                QwenParam.builder().model("qwen3-coder-plus").messages(Arrays.asList(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))

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

代码补全

说明

Qwen3-Coder 即将上线基于 Partial Mode 的代码补全功能,敬请期待。

基于前缀进行代码补全

阿里云百炼提供了 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 中指定的前缀继续生成内容。请参考以下代码:

除了 Qwen3-Coder 系列外的通义千问代码模型都支持使用 Partial Mode。

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

curl

请求示例

curl -X POST https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions \
-H "Authorization: Bearer $DASHSCOPE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
    "model": "qwen-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 次的免费额度?

错误码

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