Skip to content

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

Número de palavras~3.530 palavrasTempo~20 minPré-requisitoCH 05, CH 08, CH 14Ní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 14, 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 14 instalamos aihot (uma skill de pesquisa que faz scraping de AI hot-topics), e no CH 05 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