Skip to main content
专项模型

代码能力(Qwen-Coder)

Qwen-Coder 是专用于代码任务的语言模型。通过 API,您可以调用模型执行代码生成、代码补全,并通过工具调用与外部系统交互。

推荐使用最新的通用模型替代 Qwen-Coder 模型,请参见文本生成选择适合您场景的模型。

快速开始

API 使用前提:已获取与配置 API Key并完成配置API Key到环境变量。如果通过SDK调用,需要安装 OpenAI 或 DashScope SDK 以下示例将演示如何调用qwen3-coder-next模型编写一个寻找质数的 Python 函数。
  • OpenAI兼容-Chat Completions API
  • DashScope
  • Python
  • Node.js
  • curl
请求示例
import os
from openai import OpenAI

client = OpenAI(
    # 各地域的API Key不同。获取API Key:https://help.aliyun.com/zh/model-studio/get-api-key
    # 若没有配置环境变量,请用阿里云百炼API Key将下行替换为:api_key="sk-xxx",
    api_key=os.getenv("DASHSCOPE_API_KEY"),
    # 请将{WorkspaceId}替换为业务空间ID
    base_url="https://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/compatible-mode/v1",
)
completion = client.chat.completions.create(
    model="qwen3-coder-next",
    messages=[
        {'role': 'system', 'content': 'You are a helpful assistant.'},
        {'role': 'user', 'content': '请编写一个Python函数 find_prime_numbers,该函数接受一个整数 n 作为参数,并返回一个包含所有小于 n 的质数(素数)的列表。不要输出非代码的内容和Markdown的代码块。'}],
)
print(completion.choices[0].message.content)
返回结果
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

核心能力

调用工具

为使模型能够与外部环境交互(例如,读写文件、调用 API、操作数据库),您可以为其提供一系列工具。模型会根据您的指令,决定是否以及如何调用这些工具。详情请参见Function Calling 完整的工具调用流程包括:
  1. 定义工具并发起请求:在请求中定义好工具列表,并向模型提出需要借助工具完成的任务。
  2. 执行工具:解析模型返回的 tool_calls,并调用您本地已实现的对应工具函数来执行任务。
  3. 返回执行结果:将工具的执行结果包装成特定格式,再次发送给模型,让其基于结果完成最终任务。
以下示例将演示如何引导模型生成代码,并使用 write_file 工具将其保存到本地文件。
  • OpenAI兼容-Chat Completions API
  • DashScope
  • Python
  • Node.js
  • curl
import os
import json
from openai import OpenAI

client = OpenAI(
    # 各地域的API Key不同。获取API Key:https://help.aliyun.com/zh/model-studio/get-api-key
    # 若没有配置环境变量,请用阿里云百炼API Key将下行替换为:api_key="sk-xxx",
    api_key=os.getenv("DASHSCOPE_API_KEY"),
    # 请将{WorkspaceId}替换为业务空间ID
    base_url="https://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/compatible-mode/v1",
)

tools = [
    {
        "type": "function",
        "function": {
            "name": "write_file",
            "description": "将内容写入指定文件,若文件不存在则创建。",
            "parameters": {
                "type": "object",
                "properties": {
                    "path": {
                        "type": "string",
                        "description": "目标文件的相对或绝对路径"
                    },
                    "content": {
                        "type": "string",
                        "description": "写入文件的字符串内容"
                    }
                },
                "required": ["path", "content"]
            }
        }
    }
]

# 工具函数实现
def write_file(path: str, content: str) -> str:
    """写入文件内容"""
    try:
        # 为安全起见,文件写入功能已默认禁用,如需使用请取消注释并确保路径安全
        # os.makedirs(os.path.dirname(path),exist_ok=True) if os.path.dirname(path) else None
        # with open(path, 'w', encoding='utf-8') as f:
        #     f.write(content)
        return f"成功: 文件 '{path}' 已写入"
    except Exception as e:
        return f"错误: 写入文件时发生异常 - {str(e)}"

messages = [{"role": "user", "content": "写一个python代码,快速排序,命名为quick_sort.py"}]

completion = client.chat.completions.create(
    model="qwen3-coder-next",
    messages=messages,
    tools=tools
)

assistant_output = completion.choices[0].message
if assistant_output.content is None:
    assistant_output.content = ""
messages.append(assistant_output)

# 如果不需要调用工具,直接输出内容
if assistant_output.tool_calls is None:
    print(f"无需调用工具,直接回复:{assistant_output.content}")
else:
    # 进入工具调用循环(限制最大迭代次数,避免无限循环导致成本或超时问题)
    max_rounds = 10
    current_round = 0
    while assistant_output.tool_calls is not None and current_round < max_rounds:
        current_round += 1
        for tool_call in assistant_output.tool_calls:
            tool_call_id = tool_call.id
            func_name = tool_call.function.name
            arguments = json.loads(tool_call.function.arguments)
            print(f"正在调用工具 [{func_name}],参数:{arguments}")
            # 执行工具
            tool_result = write_file(**arguments)
            # 构造工具返回信息
            tool_message = {
                "role": "tool",
                "tool_call_id": tool_call_id,
                "content": tool_result,
            }
            print(f"工具返回:{tool_message['content']}")
            messages.append(tool_message)
        # 再次调用模型,获取总结后的自然语言回复
        response = client.chat.completions.create(
            model="qwen3-coder-next",
            messages=messages,
            tools=tools
        )
        assistant_output = response.choices[0].message
        if assistant_output.content is None:
            assistant_output.content = ""
        messages.append(assistant_output)
    print(f"模型最终回复:{assistant_output.content}")
返回结果
正在调用工具 [write_file],参数:{'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'}
工具返回:成功: 文件 'quick_sort.py' 已写入
模型最终回复:好的,已经为你创建了名为 `quick_sort.py` 的文件,其中包含了快速排序的 Python 实现。你可以运行这个文件查看示例输出。如果需要进一步修改或解释,请告诉我!

代码补全

Qwen-Coder 支持两种代码补全方式,请根据您的需求选择:
  • 前缀续写(Partial Mode):适用于所有 Qwen-Coder 模型和地域,支持前缀补全,实现简单,推荐使用。
  • Completions接口:仅支持华北2(北京)的qwen-coder-turbo 模型。支持前缀补全和前后缀补全。

前缀续写 (Partial Mode)

此功能用于在您写了一半的代码(前缀)基础上,让模型自动完成剩余部分。 通过在 messages 列表中加入一个 role 为 assistant 的消息,并设置 partial: true 来实现。assistant 消息的 content 即为您提供的代码前缀。详情请参见前缀续写
  • OpenAI兼容
  • DashScope
  • Python
  • Node.js
  • curl
请求示例
import os
from openai import OpenAI

client = OpenAI(
    # 各地域的API Key不同。获取API Key:https://help.aliyun.com/zh/model-studio/get-api-key
    # 若没有配置环境变量,请用阿里云百炼API Key将下行替换为:api_key="sk-xxx",
    api_key=os.getenv("DASHSCOPE_API_KEY"),
    # 请将{WorkspaceId}替换为业务空间ID
    base_url="https://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/compatible-mode/v1",
)
completion = client.chat.completions.create(
    model="qwen3-coder-next",
    messages=[{
        "role": "user",
        "content": "请帮我写一个python代码生成100以内的素数。不要输出非代码的内容和Markdown的代码块。"
    },
    {
        "role": "assistant",
        "content": "def generate_prime_number",
        "partial": True
    }]
    )
print(completion.choices[0].message.content)
返回结果
(n):
    primes = []
    for i in range(2, n+1):
        is_prime = True
        for j in range(2, int(i**0.5)+1):
            if i % j == 0:
                is_prime = False
                break
        if is_prime:
            primes.append(i)
    return primes

prime_numbers = generate_prime_number(100)
print(prime_numbers)

Completions 接口

Completions 接口仅适用华北2(北京)地域的模型,需使用华北2(北京)地域的API Key
支持的模型: qwen-coder-turbo Completions接口通过在 prompt 中使用特殊的 fim (Fill-in-the-Middle) 标签来引导模型进行补全。
  • 基于前缀补全
  • 基于前缀和后缀补全
提示词模板:
<|fim_prefix|>{prefix_content}<|fim_suffix|>
  • <|fim_prefix|><|fim_suffix|>为特殊 Token,用于指引模型进行文本的补全,无需修改。
  • {prefix_content}需要替换为传入的前缀信息,例如函数的名称、输入参数、使用说明等信息。
import os
from openai import OpenAI

client = OpenAI(
    # 请将{WorkspaceId}替换为业务空间ID
    base_url="https://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/compatible-mode/v1",
    api_key=os.getenv("DASHSCOPE_API_KEY")
)

completion = client.completions.create(
  model="qwen-coder-turbo",
  prompt="<|fim_prefix|>def quick_sort(arr):<|fim_suffix|>",
)

print(completion.choices[0].text)

应用于生产环境

为优化千问代码模型的使用效率并降低成本,可参考以下建议:
  • 启用流式输出: 设置 stream=True 可以实时返回中间结果,降低超时风险,提升用户体验。
  • 降低温度参数: 代码生成任务通常要求结果的确定性和准确性。建议降低 temperature 参数,以减少生成结果的随机性。
  • 使用支持上下文缓存的模型: 在包含大量重复前缀的场景(如代码补全、代码审查),推荐使用支持上下文缓存的模型,以有效降低开销。
  • 控制工具数量:为确保模型调用的效率和成本效益,建议单次传入的工具tools数量不超过20个。传入大量工具描述会消耗过多输入Token,这不仅会增加费用、降低响应速度,还会加大模型选择正确工具的难度,详情可参见Function Calling

计费与限流

  • 基本计费:根据每次请求的输入 Token 数和输出 Token 数计费。不同模型的单价不同,具体价格请参考模型列表
  • 特殊计费项
    • 阶梯计费qwen3-coder 系列模型采取阶梯计费。当单次请求的输入Token数达到特定阶梯后,该请求的全部输入和输出Token均按此阶梯的单价计费。
    • 上下文缓存:对于支持上下文缓存的模型,当多次请求包含大量重复输入时(如代码审查),缓存机制可显著降低成本。命中隐式缓存的输入文本按单价的 20% 计费,命中显式缓存的输入文本按单价的 10% 计费。详情请参见上下文缓存
    • 工具调用 (Function Calling):使用工具调用功能时,您在 tools 参数中定义的工具描述会作为输入内容计入 Token 总量并产生费用。
  • 限流:API调用受到每分钟请求数(RPM)和每分钟Token数(TPM)的双重限制。详情请参见限流
  • 免费额度(仅北京地域)(仅新加坡地域):从开通百炼或模型申请通过之日起计算有效期,有效期90天内,Qwen-Coder各模型分别提供100万Token的新人免费额度

API参考

关于千问代码模型的输入与输出参数,请参见文本生成

常见问题

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

通过外部开发工具调用 Qwen-Coder 模型处理问题时,该工具可能会多次调用 API,从而消耗大量 Token。关于具体的监控和减少Token消耗的方法,请参考Qwen CodeClaude Code文档。您可开启免费额度用完即停功能,以避免免费额度耗尽后产生额外费用。 您也可以购买 AI 编码套餐,采用固定月费,提供月度请求额度,支持在AI工具中使用,详情请参见Coding Plan概述

如何查看模型调用量?

模型调用完一小时后,在模型监控(北京新加坡)页面设置查询条件(例如,选择时间范围、业务空间等),再在模型列表区域找到目标模型并单击操作列的监控,即可查看该模型的调用统计结果。具体请参见模型监控文档。
数据按小时更新,高峰期可能有小时级延迟,请您耐心等待。
image

如何让模型只输出代码,不包含任何解释性文字?

可参考以下方法:
  1. 提示词约束: 在提示词中明确指示,例如:“只返回代码,不要包含任何解释、注释或 markdown 标记。”
  2. 设置stop序列: 使用 stop=["\n# 解释:", "说明", "Explanation:", "Note:"] 等词组,在模型开始生成解释性文字时提前终止,详情请参见千问 API 参考
Token Plan
模型调优
模型压缩目录节点
用量统计与性能监控
资产中心
服务支持