Modo Batch (DashScope)
A API Batch do DashScope executa requisições de forma assíncrona pela metade do preço em tempo real, com uma janela de conclusão de pelo menos 24 horas. O Qwen Code a utiliza através do /batch-api: você descreve uma tarefa em lote, o agente prepara um plano e o qwen batch o submete, acompanha e escreve os resultados como arquivos.
Configurar um modelo Batch
Declare o endpoint e a credencial uma vez em settings.json e depois selecione-o com batch.model. Seu modelo de conversa comum e a autenticação permanecem inalterados, inclusive quando a conversa usa Qwen OAuth ou outro provedor.
{
"env": { "DASHSCOPE_API_KEY": "your-key" },
"modelProviders": {
"openai": [
{
"id": "qwen3.7-plus",
"baseUrl": "https://dashscope.aliyuncs.com/compatible-mode/v1",
"envKey": "DASHSCOPE_API_KEY"
}
]
},
"batch": { "authType": "openai", "model": "qwen3.7-plus" }
}Mescle esses campos nas suas configurações existentes, mantendo suas outras entradas de provedor. envKey nomeia a chave em settings.env (ou uma variável de ambiente); nenhuma exportação separada no shell é necessária. O generationConfig do provedor controla a geração Batch. wireApi é o protocolo de requisição, não um interruptor Batch: omita-o ou use "chat-completions"; "responses" não é suportado por este executor.
batch.authType tem como padrão openai. O modelo deve corresponder a exatamente uma entrada de chat-completions compatível com OpenAI com um baseUrl e um envKey preenchido. Se os IDs se repetirem, defina batch.baseUrl como a URL configurada exata. Seleções explícitas inválidas falham antes de qualquer upload; elas nunca recorrem às credenciais de conversa. Reinicie a sessão interativa após alterar essa seleção para que seu coletor em segundo plano use as mesmas configurações dos comandos filhos.
Sem uma seleção Batch, o comportamento anterior permanece: o Batch reutiliza a configuração do modelo principal e requer autenticação por chave de API compatível com OpenAI. As credenciais Qwen OAuth não possuem uma rota Batch. Execute qwen batch check para verificar a prontidão sem enviar uma requisição paga.
Quando o batch é a ferramenta certa
- Metade do preço, sem cache. O Batch cobra requisições bem-sucedidas a 50% do preço de tabela em tempo real, mas o cache de prefixo nunca acerta dentro de um batch (medido
cached_tokens: 0). O tempo real cobra entrada em cache a 20% do preço de tabela, então o batch só vale a pena quando pouco de cada requisição é compartilhado: com uma taxa de acerto de cacheh, o tempo real custa cerca de1 − 0.8hdo preço de tabela na entrada, e o batch perde quandohultrapassa 0,625. - Bom uso: muitas requisições independentes de turno único, cada uma dominada por seu próprio conteúdo — traduzir ou resumir um conjunto de documentos, extrair dados por arquivo. Saídas longas favorecem ainda mais o batch.
- Mau uso: um manual compartilhado longo ou prefixo few-shot com itens curtos, poucos itens, qualquer coisa que precise de mais de um turno. Rotear os próprios turnos de um agente pelo Batch foi medido em 1,03× o tempo real e horas mais lento.
- Latência: de segundos a horas, principalmente em fila, e varia por modelo. Conte com o fato de ser barato, não rápido.
Para verificar uma tarefa antes de confirmá-la, envie uma requisição em tempo real e compare usage.prompt_tokens_details.cached_tokens com usage.prompt_tokens.
/batch-api
/batch-api translate the Markdown docs in docs/zh into English,
writing them to docs/en with the same file namesO agente executa qwen batch check, confirma que a tarefa se encaixa, lê uma pequena amostra, escreve um plano em .qwen/batch/plans/ e o visualiza — nada é enviado ou cobrado:
qwen batch run .qwen/batch/plans/<slug>.json --dry-run
# preview: 42 item(s), window 24h — nothing uploaded, nothing billed
# model qwen-plus, thinking off, max output 8192 tokens (frozen from your current settings; retries reuse them)
# writes new files to: docs/en/ (42)
# ~180,000 in / ~190,000 out tokens (rough estimate); ...
# snapshot 3f9c2a7e5d10b884; submit exactly this batch with: qwen batch run .qwen/batch/plans/<slug>.json --expect 3f9c2a7e5d10b884Em seguida, ele envia esse snapshot. O prompt de aprovação para este comando é onde você decide gastar, com a visualização acima; se o plano, um arquivo de origem ou suas configurações mudarem nesse intervalo, o envio é recusado.
qwen batch run .qwen/batch/plans/<slug>.json --expect 3f9c2a7e5d10b884
# task translate-docs-20260923103000: 42 item(s), window 24h
# ...
# batch job: batch_abc123run retorna imediatamente e você não precisa coletar manualmente. O agente inicia qwen batch collect <task-id> --wait como uma tarefa em segundo plano (visível em /tasks) e encerra seu turno, para que você possa continuar trabalhando. Esse processo consulta o provedor via HTTP — nenhuma chamada de modelo enquanto você espera — e quando o batch termina, ele escreve os resultados e sai. O agente então é despertado uma vez: ele informa o que foi entregue, retido ou falhou, e faz qualquer acompanhamento que você tenha solicitado na requisição original. Itens com falha nunca são repetidos automaticamente, pois uma repetição cobra novamente.
Se a sessão fechar primeiro, nada é perdido: uma sessão interativa coleta as tarefas finalizadas do projeto na inicialização e enquanto estiver aberta, e exibe um aviso. Defina general.batchAutoCollect como false para desativar isso. Execuções headless (qwen -p), qwen serve e clientes IDE/ACP não fazem coleta automática.
Os comandos funcionam de qualquer diretório e dentro de uma sessão com o prefixo ! (por exemplo, !qwen batch collect <task-id>), para que nenhum turno de modelo seja gasto:
qwen batch check # verify setup; nothing is billed
qwen batch collect <task-id> [--wait [--timeout <s>]] # validate + write target files
qwen batch retry <task-id> # resubmit only the failed items
qwen batch retry <task-id> --max-output-tokens 8192 # include truncated ones
qwen batch list # every recorded task, with its project
qwen batch cancel <task-id> # partial results are still billed
qwen batch clean <task-id> # delete the local record (cancels nothing)collect relata cada item como:
- delivered — escrito em seu destino;
- held — a origem mudou após o envio (
retryo reenvia contra a nova origem), ou o destino já existe com conteúdo diferente (resolva e executecollectnovamente; nenhuma nova requisição é feita); - failed — truncado, vazio, uma chamada de ferramenta ou um erro do provedor;
retryreenvia estes, itens truncados apenas com um--max-output-tokensmaior.
Reexecutar collect é sempre seguro: itens entregues nunca são refeitos e o uso nunca é contado em duplicidade. Quando os resultados estão no disco, os arquivos remotos de entrada e saída são excluídos.
Registros, segurança e custo
- Os registros de tarefas ficam em
~/.qwen/batch/tasks/<task-id>/(QWEN_BATCH_HOMEsobrescreve) com permissões apenas para o proprietário, pois contêm cópias completas das suas origens e saídas. Arquivos de plano no.qwen/batch/do projeto recebem um.gitignore. - Uma tarefa está vinculada ao endpoint e à chave de API com os quais foi enviada (apenas um hash curto da chave é armazenado); após trocar de conta ou região, os comandos recusam até que você volte.
- Se a resposta da chamada de criação for perdida,
runfalha, a tarefa é marcada comosubmit-unknownecollectreconcilia com a lista de batch do provedor em vez de reenviar — um duplicado cobraria duas vezes. - Apenas um comando
qwen batchtrabalha em uma tarefa por vez. - Uma execução congela seus parâmetros de amostragem atuais, limite de saída e modo de pensamento; as repetições os reutilizam.
- As estimativas são baseadas em tokens, a menos que você defina
QWEN_BATCH_INPUT_PRICE_PER_1M_USDeQWEN_BATCH_OUTPUT_PRICE_PER_1M_USD. A estimativa aproximada exclui os tokens de pensamento, que podem ser várias vezes a saída. OmaxCostUsdde um plano é aplicado ao pior caso nos limites da requisição: ele precisa desses preços, ummaxOutputTokense pensamento desligado ou umthinking_budget, ou a execução é recusada. Nenhum dos valores inclui o que sua sessão gastou preparando o plano. - Uma limpeza remota que falha nunca bloqueia
retry,cancelouclean; umcollectposterior a tenta novamente. Um arquivo de resultado que o provedor não pode servir completamente (após um download novo) ou não possui mais falha nos itens afetados em vez de deixar a tarefa presa. cleanrecusa enquanto um batch pode ainda estar em execução ou possui resultados não coletados, a menos que você passe--force.- Os destinos devem permanecer dentro do projeto e fora de qualquer caminho oculto (
.git/,.github/,.qwen/, … em qualquer profundidade): os resultados são escritos horas após você aprovar o plano. A visualização lista os diretórios de destino.
Design: docs/design/2026-09-23-batch-api-design.md.
Uma verificação offline ponta a ponta (Batch API falsa, CLI real compilado) está em docs/verification/batch-api/.