通义千问代码模型具有强大的代码能力,您可以通过API接口调用,将通义千问代码模型集成到您的业务中。
模型概览
如果您对代码相关的任务或在复杂场景下的任务效果有要求,建议选择qwen-coder-plus或qwen2.5-coder-32b-instruct,这些模型在代码生成、代码修复、代码推理能力上具备业界领先水平。
如果您对模型推理速度有要求,如在补全场景下使用,建议选择qwen-coder-turbo或qwen2.5-coder-7b-instruct,这些模型响应较快,且仍然有较好的代码能力。
闭源版本
模型名称 | 版本 | 上下文长度 | 最大输入 | 最大输出 | 输入成本 | 输出成本 | 免费额度 |
(Token数) | (每千Token) |
模型名称 | 版本 | 上下文长度 | 最大输入 | 最大输出 | 输入成本 | 输出成本 | 免费额度 |
(Token数) | (每千Token) | ||||||
qwen-coder-plus 当前等同qwen-coder-plus-2024-11-06 | 稳定版 | 131,072 | 129,024 | 8,192 | 0.0035元 | 0.007元 | 各100万Token 有效期:百炼开通后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) |
模型名称 | 上下文长度 | 最大输入 | 最大输出 | 输入成本 | 输出成本 | 免费额度 |
(Token数) | (每千Token) | |||||
qwen2.5-coder-32b-instruct | 131,072 | 129,024 | 8,192 | 0.002元 | 0.006元 | 各100万Token 有效期:百炼开通后180天内 |
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 |
关于模型的限流条件,请参见限流。
示例代码
您需要已获取API Key并配置API Key到环境变量。如果通过OpenAI SDK或DashScope SDK进行调用,还需要安装SDK。
简单示例
此处以使用通义千问代码模型编写一个寻找质数的Python函数为例。
您可以通过OpenAI SDK或OpenAI兼容的HTTP方式调用通义千问代码模型。
示例代码
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 -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 SDK或HTTP方式调用通义千问代码模型。
示例代码
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的所有数字,对于每个数字,它检查是否有任何小于等于其平方根的数可以整除它。如果没有这样的数,那么这个数字就是质数,将其添加到列表中。最后,函数返回包含所有质数的列表。
示例代码
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 -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"
}
代码补全
基于前缀进行代码补全
百炼提供了 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 接口。
根据前缀和后缀生成中间内容
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参考
关于通义千问代码模型的输入与输出参数,请参考文本生成-通义千问。
错误码
如果模型调用失败并返回报错信息,请参见错误信息进行解决。
- 本页导读 (1)
- 模型概览
- 示例代码
- 简单示例
- 代码补全
- API参考
- 错误码