Novita AI 上的 Qwen3 Coder Next API:打造程式編碼代理

Novita AI 上的 Qwen3 Coder Next API:打造程式編碼代理

Qwen3 Coder Next 現已於 Novita AI 上線,作為一個無伺服器文字模型,適用於需要長上下文程式碼理解、結構化輸出以及類似函式呼叫風格工具協調的編碼代理工作流程。請使用經過驗證的模型 ID qwen/qwen3-coder-next,搭配 OpenAI 相容的 POST https://api.novita.ai/openai/v1/chat/completions 端點,如此一來,就能在代理迴圈中獲得一個專注於程式碼的模型,而無需自行管理模型託管事宜。

如果你想先了解更廣泛的發布資訊與模型定位概覽,請先閱讀 Qwen3-Coder-Next on Novita AI。如果你的目標是將同一個模型整合到 Anthropic 相容的工具中,請參考 companion guide Use Qwen3-Coder-Next in Claude Code

何時該為編碼代理使用 Qwen3 Coder Next

當你的應用程式需要在一個受控的軟體開發工作流程中使用一個專注於程式碼的語言模型時,就適合使用 Qwen3 Coder Next:例如程式碼解釋、修補計畫擬定、錯誤定位、測試案例草稿、重構審查,或是透過工具輔助的儲存庫檢查。

一個重要的區別是,這份指南並非通用的模型概覽。它專注於一個編碼代理的實作模式:

  • 將儲存庫或檔案上下文送入聊天補全請求;
  • 要求模型提出一個限定的下一步動作;
  • 選擇性地要求結構化 JSON,以便你的代理能夠決定是否要檢查另一個檔案、提出修補程式,或停止;
  • 在你自己的應用程式層中執行工具,而不是在模型呼叫內部執行;
  • 將觀察結果送回下一個聊天輪次。

Novita AI 的目錄將 Qwen3 Coder Next 描述為一個文字輸入、文字輸出的 LLM,具備無伺服器可用性、函式呼叫支援、結構化輸出支援以及長上下文。這些是對編碼代理來說至關重要的部分:模型可以產生類似工具呼叫的指令與結構化決策,而你的應用程式則負責檔案系統存取、指令執行、儲存庫變更以及審核閘道。

避免將模型視為可以直接自行編輯儲存庫。一個編碼代理需要周圍的程式碼來準備上下文、驗證輸出、執行工具、套用修補程式以及記錄結果。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 profile、.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:在代理迴圈中使用 Qwen3 Coder Next

一個編碼代理是一個圍繞著模型的迴圈。模型提議下一個動作;你的應用程式決定是否執行它,然後將結果回饋給模型。

對於一個最小化的編碼代理迴圈,請將動作空間保持在較小範圍:

動作 你的應用程式該做什麼
inspect_file 讀取允許的檔案路徑並回傳相關內容。
search_code 使用限定的查詢來搜尋儲存庫。
propose_patch 要求模型為審查產生一個修補計畫或 diff。
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": (
            "你是一個編碼代理規劃器。請僅回傳 JSON,並包含 "
            "action, path, query, rationale, 和 final_answer 這些鍵。允許的動作 "
            "是 inspect_file, search_code, propose_patch, 和 finish。"
        ),
    },
    {
        "role": "user",
        "content": (
            "我們需要找出為什麼 normalize_user 在缺少 email 時會崩潰。"
            "首先選擇下一個安全的檢查步驟。"
        ),
    },
]

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

這個範例使用 JSON 模式來保持應用程式解析器的簡單性。對於正式環境,請在執行任何操作之前,驗證回應包含一個允許的 action,並且諸如 pathquery 等欄位符合你的安全規則。

步驟 4:為代理決策加入結構化輸出

Novita AI 的聊天補全 API 包含 response_format,其中包含 json_objectjson_schema 選項。Qwen3 Coder Next 在模型庫中被標示為支援結構化輸出,因此結構化的決策物件非常適合用於編碼代理的編排。

對於你的軟體必須可靠解析的決策,請使用結構化輸出:

  • 分類是否需要變更;
  • 回傳一個包含檔案路徑和風險說明的修補計畫;
  • 決定是否需要更多上下文;
  • 產生一個測試檢查清單;
  • 輸出一個最終摘要,區分已變更的行為、驗證和風險。

對於更嚴格的驗證,請使用 json_schema 並保持 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": "請以結構化 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 個標記。這為編碼代理提供了容納多檔案上下文的空間,但較大的提示詞會增加成本,並可能稀釋模型的注意力。

與其將整個儲存庫傾倒進每個請求,不如使用檢索步驟:

  1. 從使用者請求、相關的錯誤訊息和儲存庫地圖開始。
  2. 要求模型選擇要檢查的檔案。
  3. 僅加入選定的片段或檔案。
  4. 在要求 diff 之前,先要求一個範圍限定的修補計畫。
  5. 保留一個簡短的運行摘要,而不是重播每一個先前的觀察結果。

成本是根據輸入和輸出標記計算的。以列出的價格(每 1M 輸入標記 $0.20 和每 1M 輸出標記 $1.50)來看,冗長的生成式 diff 可能比簡潔的分析花費更高。請將 max_tokens 設定為能滿足該步驟需求的最小值。例如,一個規劃步驟可能只需要幾百個標記,而最終的修補解釋可能需要更多。

速率限制在代理迴圈中也很重要。模型庫列出 Qwen3 Coder Next 在 T1 配額下的 RPM 為 30,目錄中則會顯示更高的 RPM 層級。請設計你的代理,使其能夠以指數退避的方式重試 429 回應,避免重複檢查相同檔案的並行迴圈,並在適當的情況下快取摘要。

故障排除

問題 可能原因 解決方法
401 或驗證失敗 API 金鑰遺失、過期或格式錯誤 檢查 Authorization: Bearer $NOVITA_API_KEY 標頭,必要時重新產生金鑰。
找不到模型 模型 ID 不正確 精確使用 qwen/qwen3-coder-next
輸出不是有效的 JSON 提示詞或 schema 太過寬鬆 使用 response_format,降低 temperature,並驗證解析後的物件。
上下文太大 一個請求中包含太多檔案或太長的日誌 擷取較小的片段並摘要先前的輪次。
代理迴圈無進展 動作空間太廣或觀察結果重複 加入最大迭代次數限制,並要求每個步驟都有新的理由。
意外的工具動作 模型建議了你的應用程式不該執行的動作 在模型外部實施白名單和核准閘道。
速率限制錯誤 太多並行呼叫或緊湊的重試迴圈 加入指數退避並將代理步驟排入佇列。

常見問題

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 端點系列,但本指南中的可執行範例使用的是聊天補全。

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

根據已確認的 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 僅回傳模型輸出。儲存庫讀取、指令執行、修補程式套用、測試和核准都必須在你自己的代理執行環境中實作。

相關的 Qwen 程式碼指南