通义千问代码模型能力

通义千问代码模型具有强大的代码能力,您可以通过API接口调用,将通义千问代码模型集成到您的业务中。

模型概览

  • 如果您对代码相关的任务或在复杂场景下的任务效果有要求,建议选择qwen-coder-plusqwen2.5-coder-32b-instruct,这些模型在代码生成、代码修复、代码推理能力上具备业界领先水平。

  • 如果您对模型推理速度有要求,如在补全场景下使用,建议选择qwen-coder-turboqwen2.5-coder-7b-instruct,这些模型响应较快,且仍然有较好的代码能力。

闭源版本

模型名称

版本

上下文长度

最大输入

最大输出

输入成本

输出成本

免费额度

(注)

(Token数)

(每千Token)

qwen-coder-plus

当前等同qwen-coder-plus-2024-11-06

稳定版

131,072

129,024

8192

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

100Token

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

qwen-coder-turbo-latest

等同qwen-coder-turbo最新的快照版本

最新版

qwen-coder-turbo-2024-09-19

又称qwen-coder-turbo-0919

快照版

开源版本

模型名称

上下文长度

最大输入

最大输出

输入成本

输出成本

免费额度

(注)

(Token数)

(每千Token)

qwen2.5-coder-32b-instruct

131,072

129,024

8,192

0.0035

0.007

100Token

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

qwen2.5-coder-14b-instruct

0.002

0.006

qwen2.5-coder-7b-instruct

0.001

0.002

qwen2.5-coder-3b-instruct

32,768

30,720

限时免费

限时免费

qwen2.5-coder-1.5b-instruct

100Token

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

qwen2.5-coder-0.5b-instruct

限时免费

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

示例代码

您需要已获取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",  # 填写DashScope服务的base_url
)
completion = client.chat.completions.create(
    model="qwen-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(completion.choices[0].message.content)

返回结果

```python
def find_prime_numbers(n):
    def is_prime(num):
        if num <= 1:
            return False
        for i in range(2, int(num**0.5) + 1):
            if num % i == 0:
                return False
        return True

    prime_numbers = []
    for number in range(2, n):
        if is_prime(number):
            prime_numbers.append(number)
    return prime_numbers
```

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

返回结果

{
    "choices": [
        {
            "message": {
                "role": "assistant",
                "content": "```python\ndef find_prime_numbers(n):\n    prime_numbers = []\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            prime_numbers.append(num)\n    return prime_numbers\n```"
            },
            "finish_reason": "stop",
            "index": 0,
            "logprobs": null
        }
    ],
    "object": "chat.completion",
    "usage": {
        "prompt_tokens": 101,
        "completion_tokens": 84,
        "total_tokens": 185
    },
    "created": 1726825741,
    "system_fingerprint": null,
    "model": "qwen-coder-turbo",
    "id": "chatcmpl-88ea08ce-194e-9926-824b-c4c07dd48649"
}

DashScope

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

Python

示例代码

from http import HTTPStatus
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='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
    ))

返回结果

```python
def find_prime_numbers(n):
    prime_numbers = []
    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:
            prime_numbers.append(num)
    return prime_numbers
```
这个函数首先定义了一个空列表 `prime_numbers` 来存储找到的质数。然后,它遍历从2到n-1的所有数字,对于每个数字,它检查是否有任何小于等于其平方根的数可以整除它。如果没有这样的数,那么这个数字就是质数,将其添加到列表中。最后,函数返回包含所有质数的列表。

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("qwen-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):
    def is_prime(num):
        if num <= 1:
            return False
        for i in range(2, int(num**0.5) + 1):
            if num % i == 0:
                return False
        return True

    prime_numbers = []
    for number in range(2, n):
        if is_prime(number):
            prime_numbers.append(number)
    return prime_numbers

# 示例使用
print(find_prime_numbers(10))  # 输出: [2, 3, 5, 7]
```
这个函数首先定义了一个内部函数 `is_prime` 来检查一个数是否为质数。然后,它遍历从2到n-1的所有数字,使用 `is_prime` 函数来判断每个数字是否为质数,如果是,则将其添加到结果列表中。最后,函数返回包含所有小于n的质数的列表。

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

Partial mode

如果您希望Coder模型在生成内容时能够严格以指定内容作为前缀,可以使用Partial 模式。该模式允许模型基于在Assistant Message中指定的前缀继续生成内容。请参考以下代码:

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",  # 填写DashScope服务的base_url
)
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

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

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

API参考

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

错误码

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