Skip to content

CH 16 · Tarefas Agendadas e Execuções em Segundo Plano ​

Número de palavras~3.530 palavrasTempo~20 minPré-requisitoCH 06, CH 09, CH 15NívelReproduzível

Objetivo do capítulo ​

Este capítulo resolve um problema: como fazer o Agent "fazer coisas sozinho quando chegar a hora".

"Agendamento" no dsh tem dois níveis, fáceis de confundir:

NívelO que éCenário típico
Lembrete dentro da sessão (Schedule oficial)Fazer o modelo "me lembrar em X minutos" na mesma sessão"Me lembre em 20 minutos para voltar e checar os resultados"
Automação em nível de sistema (headless + scheduler)O Agent inteiro roda uma tarefa e sai, puxado pelo agendador do sistema na hora marcada"Me envie um relatório de AI hot-topics toda manhã às 9"

A primeira metade do capítulo esclarece o Schedule oficial (é um overlay opcional; este artigo te dá um guia de usuário diretamente utilizável); a segunda metade é o mão na obra principal do capítulo — usar a skill aihot instalada no CH 15, montar uma tarefa agendada de "scraping de AI hot-topics no horário".

Schedule oficial: lembretes temporizados dentro da sessão ​

O que é ​

O pacote oficial @deepseek-ai/dsh-schedule fornece lembretes dentro da sessão: fazer o modelo "me lembrar mais tarde" na mesma sessão. Quando chega a hora, retorna a esta sessão como uma mensagem normal de acompanhamento.

É uma capacidade opcional (overlay), off por padrão. Para ativar, adicione um patch ao iniciar o dsh web. O exemplo oficial está no repositório oficial em apps/cli/config/examples/schedule/cordis.yml — esse comando de caminho relativo só funciona quando executado no diretório raiz do repositório oficial clonado, e não dá para usar depois de apenas npm install-ar o dsh. Sem clonar o repositório, você também pode montar um arquivo de patch equivalente você mesmo; o conteúdo são três seções (eu copiei um diretamente do exemplo oficial):

yaml
# schedule.overlay.yml
- insert:
    - id: time-context
      name: '@deepseek-ai/dsh-time-context'
    - id: schedule
      name: '@deepseek-ai/dsh-schedule'
- id: ui-schedule
  disabled: false

Depois aponte para esse arquivo na inicialização:

bash
dsh web --patch C:\seu-caminho\schedule.overlay.yml

Ele faz três coisas: adicionar dsh-time-context (para que o modelo entenda o tempo no fuso horário do seu navegador), adicionar dsh-schedule (fornece a ferramenta de lembrete), e ativar ui-schedule (exibe os lembretes pendentes na UI).

Como usar ​

Depois de ativar, inicie uma nova sessão, e o modelo passa a ter três ferramentas:

FerramentaO que faz
schedule_createCria um lembrete
schedule_listLista todos os lembretes pendentes
schedule_deleteCancela por id

Três tipos de regras para criar um lembrete:

RegraDescrição
afterLembrar uma vez depois de quantos segundos (one-shot)
atLembrar uma vez em um momento específico (one-shot)
everyRepetição em intervalo fixo, mínimo 5 minutos

O uso é uma frase em linguagem natural, por exemplo "me lembre em 20 minutos para checar os resultados do deploy", e o modelo chamará schedule_create e retornará o id, o horário alvo e o status do lembrete.

Limites ​

PodeNão pode
Mensagem de acompanhamento dentro da sessãoSem e-mail / SMS / push / notificações de navegador
Lembrete sobrevive ao reinício (armazenado no log da sessão)Sem regras de calendário / Cron tipo "toda semana às 9"
Repetição em intervalo fixo (≥5 min)Se a sessão for fechada, fica atrasado; só o mais recente é recuperado após a retomada

Resumo de uma linha: o Schedule oficial lida com "lembrar você na hora dentro da sessão", não com "rodar tarefas automaticamente em segundo plano". Para isso — os hot-topics agendados que faremos na segunda metade — você precisa de headless mais um agendador de sistema.

Mão na obra principal: deixe o aihot enviar AI Hot-Topics toda manhã ​

Abordagem ​

No CH 15 instalamos aihot (uma skill de pesquisa que faz scraping de AI hot-topics), e no CH 06 aprendemos headless (um comando roda uma tarefa, sai quando termina). Combine os dois, e adicione um agendador que "puxa na hora certa", e você tem uma tarefa completa de hot-topics agendados:

headless usa aihot para fazer scraping de hot-topics → escreve em um arquivo → o agendador do sistema re-roda esse comando toda manhã às 9

Passo 1: rode manualmente uma vez primeiro, confirme que funciona ​

Não vá direto para o agendador; primeiro faça rodar manualmente. Abra um terminal no workspace onde você quer o arquivo de saída; o meu é E:\software-workspace\DeepSeek harness demo:

bash
cd "E:\software-workspace\DeepSeek harness demo"   # substitua pelo seu workspace
dsh --profile headless "Use a skill aihot para fazer scraping das notícias de AI hot-topics em chinês das últimas 24 horas, organize em um breve resumo dos hot-topics de IA de hoje (cerca de 5 itens, cada um com uma frase mais a fonte), e escreva no arquivo dsh-daily-hot.txt"

Terminal com esse comando headless digitado

aihot está instalada na prateleira de nível-usuário (~/.agents/skills/aihot), e o headless consegue descobri-la, sem configuração extra. Após a execução, um resumo de hot-topics de hoje com 5 itens é escrito em dsh-daily-hot.txt:

Depois do headless rodar, o relatório de conclusão do modelo no terminal

Ao rodar, houve um pequeno contratempo do meu lado: o schannel do PowerShell local reportou SEC_E_NO_CREDENTIALS durante o handshake HTTPS (credenciais TLS faltando no sandbox). O dsh não travou; o modelo mudou automaticamente para o canal OpenSSL para completar a requisição (especificamente Node ou Python, dependendo do julgamento dele na hora), e os dados foram recuperados normalmente. É improvável que você encontre isso na sua máquina; se encontrar, saiba que é um problema de canal TLS, não falha da fonte de dados.

Passo 2: envolva o comando num script de inicialização ​

Deixar o agendador chamar um comando headless longo com aspas é propenso a erros (aninhamento de aspas, diretório de trabalho errado). O jeito seguro é escrever um pequeno script, e o script cuida de "mudar para o diretório alvo → rodar headless".

Crie um run-daily-hot.ps1 no workspace onde você quer rodar a tarefa agendada. Meu diretório aqui é E:\software-workspace\DeepSeek harness demo; substitua o Set-Location no script pelo seu:

powershell
Set-Location "E:\software-workspace\DeepSeek harness demo"   # substitua pelo seu workspace
dsh --profile headless "Use a skill aihot para fazer scraping das notícias de AI hot-topics em chinês das últimas 24 horas, organize em um resumo de hot-topics de IA de hoje (cerca de 5 itens), e escreva no arquivo dsh-daily-hot.txt"

Primeiro rode esse script manualmente (substitua o caminho pelo seu) e confirme que tem o mesmo efeito que rodar o comando diretamente:

powershell
powershell -ExecutionPolicy Bypass -File "E:\software-workspace\DeepSeek harness demo\run-daily-hot.ps1"

Passo 3: passe para o agendador do sistema ​

O Windows já vem com o "Agendador de Tarefas", e a linha de comando pode usar schtasks para criar tarefas. Deixe-o rodar esse script toda manhã às 9:

powershell
schtasks /Create /SC DAILY /ST 09:00 /TN "DSH Daily AI Hot" /TR "powershell -ExecutionPolicy Bypass -File \"E:\software-workspace\DeepSeek harness demo\run-daily-hot.ps1\""
ParâmetroSignificado
/SC DAILYRodar todo dia
/ST 09:009 da manhã
/TNNome da tarefa
/TRO comando real a executar (este chama o script do passo 2)

Depois de criar, dá para verificar uma vez sem esperar até amanhã:

powershell
schtasks /Run /TN "DSH Daily AI Hot"

Então confira se o timestamp de dsh-daily-hot.txt foi atualizado para agora.

Passo 4: como "enviar para mim" ​

A saída do headless é escrever em arquivo — toda manhã quando chega a hora, dsh-daily-hot.txt é o hot-topic mais recente do dia, basta abrir o workspace para ver. Este é o loop central de custo zero.

Se você quiser empurrar para o seu celular, há dois caminhos adicionais:

  • Instale o plugin de agendamento da comunidade dsh-scheduler: ele suporta gatilhos cron e entrega resultados para webhooks do ServerChan / DingTalk / Feishu. Se você quer ser "notificado" em vez de "ficar olhando o arquivo você mesmo", este é o caminho mais fácil.
  • Chame webhooks você mesmo no script: adicione algumas linhas no fim de run-daily-hot.ps1, faça POST do conteúdo do arquivo para ServerChan (Fangtang) e serviços similares, então empurre para o WeChat. Por exemplo:
powershell
$content = Get-Content "E:\software-workspace\DeepSeek harness demo\dsh-daily-hot.txt" -Raw
Invoke-RestMethod -Uri "https://sctapi.ftqq.com/<your-SCKEY>.send" -Method Post -Body @{ title = "AI Hot-Topics de hoje"; desp = $content }

<your-SCKEY> é a chave que o ServerChan atribui a você; registre-se no site do ServerChan para obter uma (este é um serviço de terceiros, não coloque a chave num repositório público).

Deixe o dsh fazer: um prompt resolve ​

Os passos anteriores foram manuais: escrever scripts, criar tarefas. Na verdade o dsh consegue fazer tudo isso sozinho — ele pode escrever arquivos, rodar comandos e registrar tarefas agendadas. Basta deixar os requisitos claros, e ele faz tudo de uma vez; você só verifica.

Mande esse prompt direto na caixa de entrada da Web UI:

text
Me ajude a completar duas coisas no diretório E:\software-workspace\DeepSeek harness demo:
1. Crie um script run-daily-hot.ps1: primeiro use Set-Location para mudar para esse diretório, depois rode
   dsh --profile headless "Use a skill aihot para fazer scraping das notícias de AI hot-topics em chinês das últimas 24 horas, organize em um resumo de hot-topics de IA de hoje (cerca de 5 itens), e escreva no arquivo dsh-daily-hot.txt";
2. Use schtasks para registrar uma tarefa agendada chamada DSH Daily AI Hot, todo dia às 09:00 usar powershell para rodar esse script.
Após completar, dispare manualmente uma vez, confirme que dsh-daily-hot.txt foi atualizado, e me diga o resultado.

Ele mesmo escreverá o script, rodará schtasks /Create sozinho, e disparará a verificação sozinho — você só fica na conversa assistindo ele passar pelas etapas.

Observação: criar tarefas agendadas e outras operações de nível de sistema requer acesso total; recomenda-se apenas selecionar essa permissão e continuar, assim nenhuma confirmação aparecerá.

Caixa de entrada da Web UI preenchida com esse prompt, permissão selecionada como Full access, modelo é DeepSeek-V4-Flash-Vision-Exp

Depois da execução, ele reportará seus próprios resultados — o script está no lugar, a tarefa agendada foi criada e verificada:

Relatório do dsh: run-daily-hot.ps1 existe e o conteúdo está correto, tarefa agendada DSH Daily AI Hot foi criada e verificada (schtasks /Query: Status Ready), com as estatísticas de execução da rodada completa no rodapé

Armadilhas comuns ​

ArmadilhaComo evitar
Tarefa agendada roda no diretório erradoO diretório de trabalho do headless no ambiente do agendador não é controlado por você, use o script para fazer Set-Location primeiro e depois rodar
Comando muito longo / erro de aninhamento de aspasEnvolva o comando num script .ps1, o agendador só chama o script
Achou que o Schedule oficial consegue "rodar todo dia na hora"Ele só faz lembretes dentro da sessão, sem regras de calendário; para rodar tarefas na hora use headless + scheduler
headless reporta erro de handshake TLSProblema de canal schannel, o modelo mudará para OpenSSL como fallback, geralmente não afeta o resultado
Tarefa agendada consome cota de APINão agende de forma muito apertada, uma frequência de uma vez por dia não pressiona nada

O que você aprendeu neste capítulo ​

Você passa se conseguir completar os itens abaixo:

  • [ ] Dizer claramente a diferença entre o Schedule oficial (lembrete dentro da sessão) e a automação em nível de sistema (headless + scheduler)
  • [ ] Saber como usar dsh web --patch apps/cli/config/examples/schedule/cordis.yml para ativar o Schedule, e dizer seus limites (sem notificações externas, sem regras de calendário)
  • [ ] Saber como usar um comando headless para fazer a aihot raspar hot-topics e escrever em um arquivo
  • [ ] Saber como envolver o comando em um script .ps1, e então usar schtasks para criar uma tarefa agendada e dispará-la manualmente para verificar
  • [ ] Conhecer os dois caminhos avançados de "enviar para mim": plugin de webhook da comunidade / chamar ServerChan você mesmo no script

Open Source · MIT · Community Driven