Novita AI 上的 Qwen3 Coder Next API:用于编码 Agent

Novita AI 上的 Qwen3 Coder Next API:用于编码 Agent

Qwen3 Coder Next 在 Novita AI 上以无服务器文本模型的形式提供,适用于需要长上下文代码理解、结构化输出以及通过聊天补全 API 进行函数调用风格工具协调的编码 Agent 工作流。当您希望在 Agent 循环中使用专注于编码的模型而无需管理模型托管时,请使用已验证的模型 ID qwen/qwen3-coder-next 配合兼容 OpenAI 的 POST https://api.novita.ai/openai/v1/chat/completions 端点。

如果您希望先了解更广泛的发布信息和模型定位概述,请阅读 Novita AI 上的 Qwen3-Coder-Next。如果您当前的目标是将同一模型集成到兼容 Anthropic 的工具中,请使用配套指南 在 Claude Code 中使用 Qwen3-Coder-Next:成本降低 80% 的替代方案

何时在编码 Agent 中使用 Qwen3 Coder Next

当您的应用程序需要一个面向编码的语言模型,且用于受控的软件开发工作流时——例如代码解释、补丁规划、缺陷定位、测试用例起草、重构审查或工具驱动的仓库检查——请使用 Qwen3 Coder Next。

一个重要区别是,本指南并非通用的模型概述。它专注于一种编码 Agent 实现模式:

  • 将仓库或文件上下文发送到聊天补全请求中;
  • 要求模型输出一个有限范围的下一步行动;
  • 可选地请求结构化 JSON,以便您的 Agent 决定是检查另一个文件、提出补丁还是停止;
  • 在您自己的应用层执行工具,而不是在模型调用内部;
  • 将观察结果发送回下一轮聊天轮次。

Novita AI 的目录将 Qwen3 Coder Next 描述为一个文本输入、文本输出的 LLM,具备无服务器可用性、函数调用支持、结构化输出支持和长上下文。这些正是编码 Agent 所需的关键要素:模型可以生成类似工具调用的指令和结构化决策,而您的应用程序仍负责文件系统访问、命令执行、仓库变更和审批关卡。

不要将模型视为能够直接自行编辑仓库。一个编码 Agent 需要周围的代码来准备上下文、验证输出、运行工具、应用补丁并记录结果。Qwen3 Coder Next 在该循环中提供语言模型步骤。

模型 ID、端点、定价和限制

已验证的 Novita AI 模型 ID 是 qwen/qwen3-coder-next

字段 已验证的值
显示名称 Qwen3 Coder Next
模型 ID qwen/qwen3-coder-next
输入模态 文本
输出模态 文本
端点家族 chat/completions, anthropic
兼容 OpenAI 的端点 POST https://api.novita.ai/openai/v1/chat/completions
上下文大小 262,144 个令牌
最大输出令牌数 65,536 个令牌
列出输入价格 每 1M 令牌 $0.20
列出输出价格 每 1M 令牌 $1.50
列出功能 函数调用、结构化输出、无服务器
T1 配额下列出 RPM 30 RPM

定价、速率限制和可用性可能会发生变化。在正式投入生产之前,请查看 Novita AI 模型库 和您的控制台配额。

步骤 1:获取 Novita AI API 密钥

创建或打开您的 Novita AI 账户,然后从控制台生成一个 API 密钥。将其存储为环境变量,而不是硬编码在您的应用程序中。

export NOVITA_API_KEY="your_api_key_here"

对于本地开发,请使用您的 shell 配置文件、.env 加载器或密钥管理器。对于生产环境,请通过您的部署平台的密钥系统注入该密钥,并确保其不进入日志、客户端代码和仓库历史记录。

步骤 2:发送第一个编码请求

从最小有用的请求开始:一条约束助手角色的系统消息,加上一条包含简短代码示例和特定编码任务的用户消息。

curl https://api.novita.ai/openai/v1/chat/completions \
-H "Authorization: Bearer $NOVITA_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "qwen/qwen3-coder-next",
"messages": [
{
"role": "system",
"content": "你是一个编码助手。清晰地解释风险,除非被要求,否则不要改变行为。"
},
{
"role": "user",
"content": "审查这个 JavaScript 函数的边界情况:\n\nfunction divide(a, b) {\n return a / b;\n}"
}
],
"temperature": 0.2,
"max_tokens": 600
}'

成功的非流式响应会返回一个包含 choices 数组的聊天补全对象。读取 choices[0].message.content 获取模型输出,读取 usage 获取令牌统计。

import os
import requests

api_key = os.environ["NOVITA_API_KEY"]

response = requests.post(
    "https://api.novita.ai/openai/v1/chat/completions",
    headers={
        "Authorization": f"Bearer {api_key}",
        "Content-Type": "application/json",
    },
    json={
        "model": "qwen/qwen3-coder-next",
        "messages": [
            {
                "role": "system",
                "content": (
                    "你是一个编码助手。清晰地解释风险,"
                    "并将建议范围限制在所提供的代码内。"
                ),
            },
            {
                "role": "user",
                "content": (
                    "审查这个 Python 函数的错误:\n\n"
                    "def normalize(items):\n"
                    "    return [x.strip().lower() for x in items]\n"
                ),
            },
        ],
        "temperature": 0.2,
        "max_tokens": 600,
    },
    timeout=60,
)

response.raise_for_status()
data = response.json()
print(data["choices"][0]["message"]["content"])

这个示例特意保持简洁。只有在您环境中基本请求正常工作后,再添加流式、工具或结构化输出。

步骤 3:在 Agent 循环中使用 Qwen3 Coder Next

编码 Agent 是一个围绕模型的循环。模型提出下一步行动;您的应用程序决定是否执行该行动,然后将结果反馈给模型。

对于一个最小的编码 Agent 循环,请保持较小的行动空间:

行动 您的应用程序做什么
inspect_file 读取允许的文件路径并返回相关内容。
search_code 使用有界查询搜索仓库。
propose_patch 要求模型生成补丁计划或差异供审查。
finish 以总结和剩余风险结束循环。

不要给模型不受限制的 shell 访问权限。将每个建议的行动视为需要您的应用程序验证的请求。良好的验证包括路径白名单、最大文件大小、命令白名单(如果支持命令)、超时限制以及应用更改前的人工审批。

一个简单的循环可以如下所示:

import json
import os
import requests

API_URL = "https://api.novita.ai/openai/v1/chat/completions"
MODEL = "qwen/qwen3-coder-next"

def call_model(messages):
    response = requests.post(
        API_URL,
        headers={
            "Authorization": f"Bearer {os.environ['NOVITA_API_KEY']}",
            "Content-Type": "application/json",
        },
        json={
            "model": MODEL,
            "messages": messages,
            "temperature": 0.1,
            "max_tokens": 1200,
            "response_format": {"type": "json_object"},
        },
        timeout=60,
    )
    response.raise_for_status()
    return response.json()["choices"][0]["message"]["content"]

messages = [
    {
        "role": "system",
        "content": (
            "你是一个编码 Agent 规划器。仅返回包含 action, "
            "path, query, rationale 和 final_answer 键的 JSON。允许的 action 是 "
            "inspect_file, search_code, propose_patch 和 finish。"
        ),
    },
    {
        "role": "user",
        "content": (
            "我们需要找出为什么当 email 缺失时 normalize_user 会崩溃。"
            "首先选择一个安全的下一个检查步骤。"
        ),
    },
]

raw = call_model(messages)
decision = json.loads(raw)
print(decision)

此示例使用 JSON 模式以保持应用程序解析器的简单性。对于生产环境,在执行任何操作之前,请验证响应是否包含允许的 action,并且诸如 pathquery 等字段是否符合您的安全规则。

步骤 4:为 Agent 决策添加结构化输出

Novita AI 的聊天补全 API 包含 response_format,包括 json_objectjson_schema 选项。Qwen3 Coder Next 在模型库中被列为支持结构化输出,因此结构化决策对象非常适合编码 Agent 的编排。

对于您的软件必须可靠解析的决策,请使用结构化输出:

  • 分类是否需要更改;
  • 返回包含文件路径和风险说明的补丁计划;
  • 决定是否需要更多上下文;
  • 生成测试检查清单;
  • 输出最终总结,区分已更改的行为、验证和风险。

为了更严格的验证,请使用 json_schema 并保持模式较小。模型输出仍然是您程序的不可信输入,因此在解析后需要对其进行验证。

schema = {
    "name": "coding_agent_decision",
    "schema": {
        "type": "object",
        "properties": {
            "action": {
                "type": "string",
                "enum": ["inspect_file", "search_code", "propose_patch", "finish"],
            },
            "path": {"type": "string"},
            "query": {"type": "string"},
            "rationale": {"type": "string"},
            "risk": {"type": "string"},
        },
        "required": ["action", "rationale", "risk"],
        "additionalProperties": False,
    },
    "strict": True,
}

payload = {
    "model": "qwen/qwen3-coder-next",
    "messages": [
        {
            "role": "system",
            "content": "将下一个编码 Agent 决策以结构化 JSON 形式返回。",
        },
        {
            "role": "user",
            "content": "找出调试失败登录测试的最安全的第一步。",
        },
    ],
    "response_format": {
        "type": "json_schema",
        "json_schema": schema,
    },
    "temperature": 0.1,
    "max_tokens": 800,
}

当您的应用程序已经有工具分发层时,请使用函数调用。Novita AI API 参考文档记录了一个 tools 字段,可以在其中提供函数。模型可能会为这些函数生成 JSON 输入,但是您的应用程序仍然执行该函数并在后续轮次中返回观察结果。保持工具描述精确,并避免暴露破坏性操作,除非它们需要明确批准。

步骤 5:规划上下文、输出和成本

Qwen3 Coder Next 在 Novita AI 上列出的上下文大小为 262,144 个令牌,最大输出大小为 65,536 个令牌。这为编码 Agent 提供了处理多文件上下文的空间,但更大的提示会推高成本并可能稀释模型的注意力。

与其将整个仓库转储到每个请求中,不如使用检索步骤:

  1. 从用户请求、相关错误信息和仓库地图开始。
  2. 要求模型选择要检查的文件。
  3. 仅添加选定的代码片段或文件。
  4. 在要求生成差异之前,先要求一个有限范围的补丁计划。
  5. 保留简短的运行摘要,而不是重放每一个先前的观察结果。

成本基于输入和输出令牌。按照列出的每 1M 输入令牌 $0.20 和每 1M 输出令牌 $1.50 的价格,冗长的生成差异可能比简洁的分析成本更高。将 max_tokens 设置为适合该步骤的最小值。例如,一个规划步骤可能需要几百个令牌,而最终的补丁解释可能需要更多。

在 Agent 循环中,速率限制也很重要。模型库列出 Qwen3 Coder Next 的 T1 配额为 30 RPM,目录中显示了更高的 RPM 层级。设计您的 Agent 以在遇到 429 响应时进行带退避的重试,避免反复检查同一文件的并行循环,并在适当情况下缓存摘要。

故障排除

问题 可能的原因 修复方法
401 或身份验证失败 API 密钥缺失、过期或格式错误 检查 Authorization: Bearer $NOVITA_API_KEY 标头,必要时重新生成密钥。
找不到模型 模型 ID 不正确 请准确使用 qwen/qwen3-coder-next
输出不是有效的 JSON 提示或模式过于宽松 使用 response_format、降低 temperature,并验证解析后的对象。
上下文过大 单个请求中包含太多文件或长日志 检索更小的片段并总结之前的轮次。
Agent 循环无进展 行动空间过于宽泛或观察结果重复 添加最大迭代限制,并要求每一步都提供新的理由。
意外的工具行动 模型建议了您的应用程序不应运行的操作 在模型之外强制执行白名单和审批关卡。
速率限制错误 并行调用过多或重试循环过于紧密 添加指数退避并排队 Agent 步骤。

常见问题

Qwen3 Coder Next 是否可通过 Novita AI API 使用?

是的。Novita AI 模型库将 Qwen3 Coder Next 列为无服务器 LLM,模型 ID 为 qwen/qwen3-coder-next

我应该为 Qwen3 Coder Next 使用哪个端点?

使用兼容 OpenAI 的聊天补全端点:POST https://api.novita.ai/openai/v1/chat/completions。模型目录也列出了 anthropic 端点家族,但本指南中的可运行示例使用的是聊天补全。

Qwen3 Coder Next 在 Novita AI 上的费用是多少?

经查的 Novita AI 目录列出 Qwen3 Coder Next 的价格为每 1M 输入令牌 $0.20,每 1M 输出令牌 $1.50。在发布前请重新检查模型库中的定价,因为价格可能会变化。

上下文和输出限制是多少?

经查的 Novita AI 目录列出 Qwen3 Coder Next 的上下文大小为 262,144 个令牌,最大输出令牌为 65,536 个。

Qwen3 Coder Next 是否支持函数调用和结构化输出?

是的。Novita AI 模型库将 Qwen3 Coder Next 列为具有 function-callingstructured-outputs 功能。您的应用程序仍然需要验证和执行任何工具操作。

Qwen3 Coder Next 可以直接编辑我的仓库吗?

不能。API 返回模型输出。仓库读取、命令执行、补丁应用、测试和审批必须在您自己的 Agent 运行时中实现。

相关 Qwen 编码指南