Pular para o conteúdo principal

Tutorial do DeepSeek Superagent: observe o CI e autorize uma correção

Crie um fluxo de correção de CI no GitHub com o DeepSeek Superagent e use o modo observe, pytest, dados de holdout e revisão humana para checar uma correção no pandas.
· 14 min leer

Explore com IA

A DeepSeek lançou o protótipo dsh-superagent no GitHub sem alarde e, em menos de quatro dias, ultrapassou 17.000 stars. É um protótipo de pesquisa construído sobre o DeepSeek Harness, que observa eventos no repositório e os compara com regras do time. O modo observe registra a decisão sem editar o código.

Eu queria testar e ver como o DeepSeek Superagent lidava com dois resultados vermelhos do GitHub Actions. Um veio de um link quebrado no README; o outro, de um pagamento contado duas vezes. Só a falha de receita deveria levar a uma correção de código.

O projeto é um pequeno pipeline de receita em pandas. Será que o agente ignora a falha no README, aguarda autorização e corrige um replay sem excluir pagamentos válidos do mesmo pedido? Mudanças autônomas param em um pull request. Revisão humana, verificação com holdout, merge manual e recuperação do CI concluem o experimento.

Você vai aprender a:

  • Isolar o protótipo e sua conta do GitHub.
  • Observar o CI do branch padrão sem alterar o código.
  • Separar falhas de documentação e de receita com uma única regra.
  • Autorizar e checar uma correção.

Conhecimentos de Python, pytest e GitHub Actions já bastam para acompanhar. Se quiser revisar algum deles, recomendo fazer nosso curso de Introduction to Testing in Python ou Intermediate GitHub Concepts.

Resumo

O fluxo separa a qualidade da decisão da qualidade da correção:

  • Filtragem do CI seguiu a regra: falhas e recuperações de documentação foram ignoradas; a falha de receita foi marcada como "aceitaria".

  • O modo observe não mudou o código: o trabalho começou após o pedido de uma pessoa autorizada.

  • Entrada do GitHub foi instável: a menção no corpo da Issue falhou três vezes e uma reprodução perdeu dois comentários.

  • A correção reproduziu: todas as correções usaram event_id e passaram na suíte de holdout.

Esses resultados vêm de um cenário repetido três vezes. Eles não demonstram confiabilidade em produção.

O que é o DeepSeek Superagent?

O DeepSeek Superagent observa um repositório do GitHub por meio do DeepSeek Harness. Regras do time decidem se um evento merece trabalho; o trabalho aceito vai para uma sessão separada. Este tutorial cobre o protótipo publicado, não ideias só de design.

O Harness fornece o runtime; o Superagent adiciona monitoramento de eventos e autorização. Nosso guia do agent harness cobre ferramentas, memória e controle.

Como o DeepSeek Superagent funciona?

Um novo evento do GitHub pode passar por quatro etapas. Essas etapas mantêm separadas a decisão e a mudança de código:

  • Source e Trigger: o polling do GitHub transforma cada evento em um Trigger em uma Issue, pull request ou no main.

  • Admission: o gate rotula como pedido explícito, candidato inferido ou nada.

  • Eval e Decision:  o CI inferido é julgado contra as regras. Um pedido explícito é roteado para uma Decision de aceitação, motivo explicitRouted.

  • Ticket e Executor: trabalho aceito recebe autorização, sessão de worker e diretório próprios.

Um comentário posterior na Thread do próprio Ticket vai para seu worker sem novo Eval. O diagrama mostra três caminhos no GitHub: CI do branch padrão, um pedido explícito e essa revisão. No caminho do CI, observe e auto deixam uma regra correspondente em pontas diferentes.

Diagrama de três caminhos do GitHub no DeepSeek Superagent: CI do branch padrão passando por admission e regra do Eval para ignore, would-accept ou um Ticket automático; um pedido explícito aceito com o motivo explicitRouted; uma revisão de pull request voltando para o mesmo Ticket e um worker

O CI é julgado. Pedidos iniciam o trabalho. Imagem do Autor.

Qual a diferença entre observe e auto?

O modo de aceitação se aplica apenas ao trabalho que o Superagent inferiu de um evento. Escolha uma das três opções:

  • off descarta candidatos inferidos.

  • observe avalia e registra um resultado positivo como "aceitaria".

  • auto inicia o trabalho após uma avaliação positiva.

Um pedido de uma pessoa autorizada funciona em qualquer modo e cria seu próprio Ticket. Mantenha o auto desligado neste tutorial.

Crie um fluxo de correção de CI em observe

O pipeline usa pytest e dois jobs do GitHub Actions para transformar eventos em receita diária. O Superagent insere uma decisão antes do trabalho começar. Nosso tutorial de Claude Code Routines cobre outro fluxo orientado a eventos.

Rastreie o bug de replay na receita diária

O bug conta duas vezes um pagamento reenviado. Cada linha tem um event_id, order_id, timestamps e um valor. Um pedido pode ter vários pagamentos válidos.

Por isso, deduplicar por order_id pode passar num teste de replay, mas apagar pagamentos reais; a chave correta é event_id. Calcule os totais esperados com o módulo csv do Python antes de autorizar o agente, para que a saída do agente não vire o gabarito.

Defina o que é uma correção de CI bem-sucedida

Sucesso depende do que o workflow faz, não só do que o agente diz. Defina estas condições antes de mudar o repositório:

  • Ignorar uma falha apenas de documentação.

  • Reconhecer revenue-integrity sem iniciar trabalho.

  • Abrir um pull request só após um pedido explícito.

  • Preservar asserções e passar em uma suíte de holdout pré-criada.

Prepare a suíte de holdout antes de o Superagent ter acesso. Assim o comportamento esperado fica fora dos insumos de desenvolvimento do worker.

Pré-requisitos e isolamento do DeepSeek Superagent

Você precisa de uma chave de API da DeepSeek, duas contas do GitHub e um ambiente Linux descartável. Para o básico do Harness, veja nosso guia de configuração.

Softwares e contas necessárias

Fixe as versões para que uma atualização não altere o fluxo. A última coluna registra a configuração usada nos resultados adiante:

Componente

Requisito

Usado aqui

Sistema operacional

Linux ou WSL

Ubuntu 24.04 LTS no WSL 2.4.11

Node.js

22.19+ ou 24+

22.20.0

DeepSeek Harness

Compatível com ^0.2.1-alpha.2

0.2.1-rc.3

Modelo DeepSeek

Provider configurado no Harness

deepseek-flash

pnpm, Git, tmux, jq

pnpm, Git 2.32+, tmux; jq para o script auxiliar

11.7.0, 2.43.0, 3.4, 1.7

Python, GitHub CLI

Python 3.8+, gh 2.48+

3.12.3, 2.83.1

O agente precisa de seu próprio usuário do GitHub com permissão de escrita porque o Superagent lê as notificações dessa conta. Adicione à lista de permitidos apenas os mantenedores humanos que podem autorizar trabalho.

Isole o agente de arquivos pessoais

Os dois presets dão ao usuário do sistema operacional acesso total, e o wrapper gh não isola o processo. Use uma distribuição WSL nova com automount e interop desativados:

Se você já tem uma VM Linux descartável, ignore o bloco do WSL e use essa máquina. Mantenha credenciais e arquivos não relacionados fora dela.

# /etc/wsl.conf dentro da distribuição descartável
[automount]
enabled = false
mountFsTab = false
[interop]
enabled = false
appendWindowsPath = false
[user]
default = superagent

Um usuário dedicado superagent deve guardar apenas a chave da DeepSeek e o token do agente. Isso reduz acessos acidentais, mas não é um limite de segurança; o modelo de segurança do WSL da Microsoft recomenda uma VM separada fora do WSL para código não confiável.

No GitHub, proteja o main com PR obrigatório, pelo menos uma aprovação independente e ambos os checks do CI. Dê ao agente acesso de escrita sem bypass de administrador. Nada disso impede prompt injection via texto de Issue.

Passo 1: construa o pipeline de receita em Python e a base do CI

O repositório do tutorial publicado agora já tem a correção mesclada no main, então não use o branch atual como estado inicial. Use estes commits para separar as três etapas:

Etapa

Commit

Propósito

Baseline verde

a6d2036

Código e testes iniciais, antes dos dados de replay

Incidente com falha

a29b51b

Dados de replay e teste de regressão

Correção mesclada

62bac08

Correção com event_id mesclada por humano

O pipeline e os testes abaixo são simplificados da baseline verde (a6d2036), não retirados do main atual. Crie um repositório descartável a partir desse commit antes de seguir os passos do CI:

git clone https://github.com/KhalidAbdelaty/superagent-revenue-lab.git revenue-lab
cd revenue-lab
git switch -C main a6d2036
git remote remove origin

export EXPERIMENT_REPO="YOUR_LOGIN/superagent-revenue-lab"
gh repo create "$EXPERIMENT_REPO" --private --source=. --remote=origin --push

Use esse novo repositório para as falhas controladas e os branches do agente. Deixe o repositório publicado intacto; seus commits de incidente e solução servem de referência para comparação.

"""Relatório de receita diária a partir de eventos de pagamento."""
import pandas as pd


def load_events(path):
    """Lê eventos de pagamento; valores em centavos (inteiros)."""
    return pd.read_csv(path, parse_dates=["occurred_at", "received_at"])


def daily_revenue(events):
    """Retorna uma linha por dia em UTC com a receita total em centavos."""
    days = events["occurred_at"].dt.strftime("%Y-%m-%d")
    report = (
        events.assign(day=days)
        .groupby("day", as_index=False)["amount_cents"]
        .sum()
        .rename(columns={"amount_cents": "revenue_cents"})
    )
    return report

O conjunto de dados da baseline cobre dois dias e inclui múltiplos pagamentos reais para um pedido. O Pytest confere totais conhecidos e esse caso de pedido compartilhado, e ainda não testa replays:

import pandas as pd


def test_daily_totals_match_known_values():
    report = daily_revenue(load_events(DATA))
    assert report["revenue_cents"].tolist() == [20398, 27550]


def test_events_on_the_same_order_are_all_counted():
    t = pd.Timestamp(0, unit="s", tz="UTC")
    events = pd.DataFrame({
        "event_id": ["evt_a", "evt_b"],
        "order_id": ["ord_1", "ord_1"],
        "occurred_at": [t, t],
        "received_at": [t, t + pd.Timedelta(seconds=1)],
        "amount_cents": [1000, 250],
    })
    assert daily_revenue(events)["revenue_cents"].tolist() == [1250]

Dê a cada job o nome do comportamento que ele verifica. Os mesmos nomes aparecerão no GitHub e no texto do Trigger do Superagent:

name: ci
on:
  push:
    branches: [main]
  pull_request:

jobs:
  revenue-integrity:
    runs-on: ubuntu-24.04
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-python@v5
        with:
          python-version: "3.12"
      - run: pip install -r requirements.txt   # pandas==2.3.3, pytest==8.4.2
      - run: pytest -v

  docs-check:
    runs-on: ubuntu-24.04
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-python@v5
        with:
          python-version: "3.12"
      - run: python scripts/check_docs.py      # falha se o README linkar um arquivo ausente

Se o pytest puro não conseguir importar revenue, adicione um pytest.ini com pythonpath = .. Confirme que ambos os jobs passam no main antes de instalar o Superagent.

O diretório publicado experiment/holdout documenta a execução original, mas fica visível no clone público. Para um novo experimento, crie uma suíte nova fora de qualquer checkout e filesystem que o worker possa ler.

Faça o hash dessa suíte antes de enviar o pedido de correção. Cubra estes casos:

  • Entregas repetidas de um mesmo evento.
  • Eventos diferentes com o mesmo ID de pedido.
  • Um DataFrame de entrada que deve permanecer inalterado.
  • As colunas e a ordem de ordenação esperadas na saída.

Mantenha essa suíte oculta até a revisão. O passo 6 a executa a partir do ambiente humano separado depois que o worker termina.

O diagrama a seguir separa os insumos de desenvolvimento do worker da checagem final do mantenedor.

Diagrama separando o repositório e testes visíveis dos dados de holdout mantidos por humanos e usados antes do merge

Dados de holdout ficam fora do worker. Imagem do Autor.

Passo 2: instale o DeepSeek Superagent e conecte o GitHub

Instale o bundle em um perfil dedicado do Harness, separado do perfil usado no dia a dia. Carregue o token da conta do agente em AGENT_GH_TOKEN sem gravá-lo no repositório. Depois, execute estes comandos como o usuário superagent:

npm install -g @deepseek-ai/[email protected] [email protected]

git clone https://github.com/deepseek-ai/dsh-superagent-prototype.git ~/dsh-superagent
cd ~/dsh-superagent
git checkout --detach 8c32a9dc5d72c033816c6a8110b37f40cf94fba4
pnpm install && pnpm build

# Um wrapper do gh que só enxerga a conta do agente
mkdir -p "$HOME/.local/bin"
export PATH="$HOME/.local/bin:$PATH"
cat > ~/.local/bin/gh-agent <<'W'
#!/bin/sh
GH_CONFIG_DIR="$HOME/.config/gh-agent" exec gh "$@"
W
chmod +x ~/.local/bin/gh-agent
printf '%s' "$AGENT_GH_TOKEN" | gh-agent auth login --hostname github.com --with-token
gh-agent api user --jq .login            # sua conta dedicada do agente

# Perfil dedicado e depois o bundle
dsh superagent --from-default-profile web --dump-config > /dev/null
dsh plugin --profile superagent add "link:$PWD"

Observação: as execuções deste tutorial usaram o commit 6337fc8, que a DeepSeek depois fez squash em 8c32a9d.

Use o exemplo de perfil no repositório clonado para definir um diretório de estado e ligar o painel a 127.0.0.1:3082. Depois inicie o serviço no tmux:

scripts/dsh-superagent start
scripts/dsh-superagent status

Este perfil separa reinícios do serviço das suas sessões pessoais do Harness. Também mantém o PATH do plugin e as configurações do Git fora do perfil normal.

status pode relatar setup pendente ou repositoryUnset até você salvar o Source do GitHub no Passo 3. Por enquanto, confirme apenas que o runtime responde e que o painel do Superagent abre; não espere um Source ou baseline do CI ainda.

Abra Settings → Models no perfil dedicado e selecione deepseek-flash. Em Superagent → Settings → Eval e Execution, confirme que ambos os papéis herdam o modelo do perfil ou nomeie deepseek-flash explicitamente.

Passo 3: configure o monitoramento do GitHub Actions em observe

Deixe a observação do CI do branch padrão desligada enquanto você salva o Source, a policy, a rule e as configurações do executor. Ligue só depois que o novo repositório estiver verde no main, para que a primeira leitura registre um baseline limpo.

Configure o GitHub Source

Em Settings → Sources, defina o repositório como EXPERIMENT_REPO, aponte o campo de CLI para o wrapper dedicado gh-agent e mantenha a observação de CI do branch padrão desligada. Salve o Source e espere qualquer reinício terminar antes de mudar a policy.

Configure a policy de admission do CI

Um resultado de CI não tem remetente. Sua linha de admission tem uma célula, que por padrão é ignore. Se você deixar assim, o Eval nunca vê o CI.

Defina uma regra enxuta de revenue-integrity

Substitua os exemplos por uma regra com o nome do check. Diga ao avaliador para não adivinhar causas:

{
  "rules": [{
    "id": "revenue-integrity",
    "name": "Falhas de CI em revenue-integrity",
    "enabled": true,
    "instruction": "Um resultado de CI no branch padrão em que o check chamado revenue-integrity falha pela primeira vez. Esse check executa a suíte de pytest que protege os totais de receita diária. Julgue apenas pelos nomes de checks e resultados que você consegue ler para aquele commit; não deduza a causa raiz. Falhas limitadas a outros checks, como docs-check (links no README), não correspondem. Uma recuperação em que todos os checks passam não corresponde. Trabalho, se aceito: investigar os testes com falha em revenue-integrity, corrigir o pipeline sem enfraquecer ou apagar qualquer asserção, adicionar um teste de regressão e abrir um pull request para revisão humana. Nunca faça merge."
  }],
  "sources": {"github": {
    "allowed": [{"id": "<human-login>"}],
    "bots": [],
    "admission": {"ci": {"unlistedUnaddressed": "inferred"}}
  }}
}

Adicione um comando de prepare que crie um worktree Git para cada Ticket. Assim cada worker começa de um checkout do repositório:

C=/home/superagent/src/superagent-revenue-lab
git -C $C fetch --no-tags "https://github.com/$DSH_SUPERAGENT_GITHUB_REPOSITORY.git" \
  "${DSH_SUPERAGENT_GITHUB_PR_HEAD:-HEAD}:refs/dsh-superagent/$DSH_SUPERAGENT_TICKET" &&
git -C $C worktree add -b "agent/$DSH_SUPERAGENT_NAME" "$DSH_SUPERAGENT_DIR" "refs/dsh-superagent/$DSH_SUPERAGENT_TICKET"

O Superagent preenche essas variáveis para cada Ticket. Verifique se o diretório resultante contém o checkout esperado antes de autorizar o trabalho.

O helper opcional grava o mesmo Source, policy, Eval e blocos de executor. Ele mantém a observação do CI desligada na primeira passagem; sempre defina explicitamente o repositório do experimento e o solicitante permitido:

export REPO="$EXPERIMENT_REPO"
export ALLOWED="YOUR_GITHUB_LOGIN"
bash /path/to/configure.sh all

Mantenha a execução proativa desativada

Mantenha o Eval em observe com o modelo padrão do perfil. Após cada evento, confira a aba Eval para a Decision e a aba Execution para qualquer Ticket.

Ligue a observação do CI e registre o baseline

Depois que os dois jobs do GitHub Actions passarem no main, ligue a observação do CI do branch padrão. Com o script auxiliar, use a segunda passagem:

OBSERVE_CI=true bash /path/to/configure.sh source
bash /path/to/configure.sh show

A primeira leitura registra o estado sem criar trabalho. Verifique as quatro condições:

  • Setup sem requisito pendente.

  • O GitHub Source reporta ready.

  • O Source registra um baseline limpo do CI.

  • As abas Trigger e Execution não mostram Trigger nem Ticket do baseline.

Se alguma dessas checagens falhar, pare antes de criar a falha de documentação. As capturas de tela de Source e Eval mostram a configuração final.

Aba Settings Sources do Superagent mostrando o cartão do GitHub com repositório, CLI do agente e observação do CI do branch padrão ativada

Cartão do GitHub Source com observação do CI. Imagem do Autor.

Configurações de Eval do Superagent mostrando a regra revenue-integrity, admission do CI como inferred e accept mode observe

Configurações de Eval: uma regra, modo observe. Imagem do Autor.

Passo 4: teste uma falha não relacionada no GitHub Actions

Use um link quebrado no README como falha não relacionada. Como o branch protegido rejeita um check com falha, use o bypass de administrador humano apenas neste repositório descartável; nunca dê esse bypass ao agente.

sed -i 's|^- Tests: .*|&\n- Data dictionary: [docs/data-dictionary.md](docs/data-dictionary.md)|' README.md
git commit -am "docs: link the data dictionary from the README" && git push

Quando o GitHub Actions terminou, o docs-check falhou e o revenue-integrity passou. Isso casou com a regra definida: o Superagent ignorou o candidato porque a regra de receita não correspondia.

A Decision usou ignoredFromCard, um atalho para candidatos que não tocam uma regra ativa. Então essa verificação cobre o roteamento, e não a regra em si.

Reverta a mudança no README e espere ambos os jobs passarem. O Superagent deve ignorar a recuperação e permanecer inativo.

Passo 5: dispare uma falha de CI em revenue-integrity

Use o mesmo caminho apenas humano para adicionar os dados de incidente do repositório do tutorial. Este resumo mostra o replay e pagamentos separados em um pedido, sem as colunas de timestamp:

event_id,order_id,amount_cents,delivery
evt_1009,ord_507,5000,first
evt_1010,ord_508,6400,first
evt_1011,ord_508,1600,first
evt_1009,ord_507,5000,replay
evt_1012,ord_509,2100,first

O repositório mantém as colunas completas de timestamp; elas foram omitidas aqui porque não determinam a identidade do evento. O cálculo independente preparado antes espera 15.100 centavos, então coloque esse valor no teste e adicione test_replayed_event_is_counted_once().

E       actual daily total: 20100
E       expected daily total: 15100
E       replay total: 8000 != 4000
FAILED tests/test_revenue.py::test_daily_totals_match_known_values
FAILED tests/test_revenue.py::test_replayed_event_is_counted_once
2 failed, 1 passed

Os 5.000 centavos extras são um pagamento contado duas vezes. Editar de 15100 para 20100 ou deletar o teste de replay também deixaria o CI verde, e nenhuma dessas opções é correção.

O workflow do GitHub Actions com falha mostra apenas o revenue-integrity falhando. Seu Trigger chegou após cerca de um intervalo de polling.

O Eval marcou o candidato como "aceitaria", enquanto a aba Execution ficou vazia. O avaliador viu nomes de checks e conclusões, não o log do pytest, então soube qual guarda falhou, mas não o motivo.

Decision do Superagent Eval marcada como would accept com a regra revenue-integrity correspondida e sem Ticket criado

O modo observe registra apenas "aceitaria". Imagem do Autor.

Passo 6: autorize a correção e verifique o pull request

O caminho de pedido explícito, visto antes, agora autoriza a execução. Notificações do GitHub podem chegar com atraso.

Lide com uma menção na Issue que não foi capturada

No Superagent 6337fc8, o GitHub Source sobrepõe polls em cinco segundos e lê uma thread notificada a partir do cursor posterior. Notificações de menção chegaram 21 a 23 segundos depois, então um poll poderia avançar além da mensagem.

Esse timing explica por que o corpo da nova Issue e alguns comentários nunca viraram Triggers. Um relato da comunidade descreve o mesmo modo de falha.

Autorize a correção com um comentário no GitHub

Publique o pedido novamente como um comentário novo e confirme que o Trigger aparece. O Superagent deve aceitá-lo como um pedido explícito e iniciar o worker.

Conversa da Issue no GitHub mostrando a menção repetida em comentário e o reconhecimento da conta do agente

Menção em comentário cria o Ticket autorizado. Imagem do Autor.

Verifique a correção de deduplicação de eventos do agente

O pull request resultante baseou a correção em event_id. Revise o diff em vez de confiar na descrição:

 def daily_revenue(events):
     """Retorna uma linha por dia em UTC com a receita total em centavos."""
+    # O webhook de pagamento pode entregar o mesmo evento mais de uma vez, com um
+    # received_at diferente, mas o mesmo event_id. Um event_id é um evento de
+    # pagamento, então mantenha apenas sua primeira entrega antes de agregar.
+    events = events.drop_duplicates(subset="event_id", keep="first")
     days = events["occurred_at"].dt.strftime("%Y-%m-%d")

Ele adicionou um teste de replay e não deletou nada. O primeiro comando de teste falhou por falta de dependências. Depois que o worker criou um ambiente virtual, a suíte visível de testes passou.

Teste pagamentos que compartilham um pedido

Solicite mudanças sem mencionar o agente: prove que dois pagamentos em um pedido, idênticos exceto por event_id, contam ambos, e que um replay conta uma vez. A revisão deve chegar ao mesmo Ticket sem novo Eval.

O worker respondeu com um commit que apenas adicionou um teste e deixou o pipeline inalterado. Antes da aprovação, confira o exato head SHA e rode a suíte independente contra essa revisão.

Conversa do pull request mostrando o pedido de mudança, o reconhecimento do agente e o novo commit de teste

Feedback de revisão continua no mesmo Ticket. Imagem do Autor.

Confira a correção com dados independentes

Execute o holdout a partir do ambiente humano separado contra o head exato do pull request. No a43c541, ambas as suítes passaram 5 de 5 testes sem remover asserção; o 62bac08 manteve a mesma árvore.

Testes escritos só pelo agente cobrem apenas os casos que o próprio agente escolheu.

Passo 7: faça o merge da correção e meça a recuperação do CI

Após o merge, verifique se o main volta a ficar verde e se a recuperação não inicia novo trabalho. Depois, revise o rastro de eventos, o tempo decorrido e o custo do provider.

Faça o merge e confirme a recuperação do CI

Depois da aprovação manual e do merge, ambos os checks do branch padrão passaram. O Superagent ignorou a recuperação, não iniciou mais trabalho e fechou o Ticket existente com o resultado merged.

Avalie a entrada de eventos e as decisões

Acompanhe cada evento da entrada ao desfecho, como nosso guia de avaliação de agentes de IA descreve. Ao longo de três repetições, eventos que chegaram ao Eval seguiram o caminho esperado; perdas ocorreram na entrada, não na Decision do modelo.

Meça correção, tempo e custo

O mesmo cenário rodou em três repositórios e distribuições WSL novos com Superagent 6337fc8, Harness 0.2.1-rc.3, deepseek-flash e uma única policy. Os custos usam a tarifa reduzida off-peak da DeepSeek; são reproduções, não um benchmark.

Reprodução

Menção no corpo da Issue perdida

Comentários extras perdidos

Ticket até PR

Holdout

Custo do modelo

1

Sim

0

91 s

5/5

$0.0282

2

Sim

0

87 s

5/5

$0.0283

3

Sim

2

140 s

5/5

$0.0310

Todas as três correções usaram event_id; todos os testes de holdout passaram. A entrada variou mais: a menção no corpo da Issue falhou todas as vezes, e a terceira reprodução também perdeu dois comentários antes de um chegar.

A segunda reprodução reescreveu commits, e a aprovação chegou antes do rerun do holdout. A checagem posterior passou, mas a ordem mais segura é head SHA, holdout e, então, aprovação.

Limitações e troubleshooting do DeepSeek Superagent

Várias falhas aqui parecem silêncio, então comece descobrindo onde o evento parou. O frustrante é que uma notificação perdida e um ignore correto podem parecer iguais.

Falhas de CI que não geram Trigger

O Superagent acompanha mudanças no conjunto que falha, então a leitura do baseline, um check que continua falhando e checks ainda em execução não produzem nada. Um Trigger sem Decision geralmente aponta para a célula de admission do CI, não para o modelo.

Pedidos do GitHub que nunca chegam

Pedidos podem falhar quando o remetente não é permitido, o Source está desligado, o processamento está pausado ou o GitHub notifica com atraso. Se essas verificações passarem, poste um comentário novo; editar o corpo da Issue não cria evento.

Limites da correção autônoma de CI

O protótipo não oferece limite de segurança. Workers têm acesso total como usuário do SO, e regras de disclosure são texto de prompt. Isole a conta do agente e limite-a ao repositório descartável.

Antes de mudar para auto, colete semanas de Decisions observadas, conte aceitações erradas e ignores errados, e mova o worker do WSL para uma VM separada.

Considerações finais

O contraste inicial se manteve: dois estados vermelhos no CI não levaram à mesma ação. O Superagent ignorou o docs-check e marcou revenue-integrity como "aceitaria", enquanto o modo observe manteve o código intocado até uma pessoa solicitar a correção.

O patch em event_id foi direto. A entrada de notificações foi menos confiável: a menção no corpo da Issue nunca chegou ao Eval, então uma regra correta não pôde ajudar.

Eu não generalizaria este resultado para correção autônoma de CI. O repositório era pequeno, a regra, enxuta, e o merge, controlado por humanos. Em outros contextos, comece com tudo verde, inspecione as Decisions, autorize explicitamente, mantenha dados de holdout separados e faça o merge após checagens independentes.

Meu próximo passo seria corrigir o caminho de notificações do GitHub e repetir o fluxo com mais tipos de falha. Até que existam essas evidências, eu manteria o modo auto desligado.

FAQs

O que é o DeepSeek Superagent?

O DeepSeek Superagent é um plugin do DeepSeek Harness. Ele observa um repositório do GitHub, aceita entrada opcional do Feishu e dá a cada Ticket aceito uma sessão própria de worker. O protótipo de pesquisa publicado omite algumas ideias do artigo de design.

O DeepSeek Superagent pode corrigir automaticamente falhas do GitHub Actions?

Sim, mas auto só controla se um candidato inferido do CI que corresponde à regra pode criar um Ticket. Não concede permissão de merge nem ignora a proteção de branch. Eu ainda exigiria revisão humana e merge manual.

Como funciona o modo observe no DeepSeek Superagent?

O modo observe salva uma avaliação inferida positiva como um ignore marcado "aceitaria", junto com a versão da Policy que a produziu. Pedidos explícitos continuam funcionando. Use esse histórico de Decisions para apertar as regras antes de considerar o auto.

O DeepSeek Superagent pode monitorar checks de CI em pull requests?

O Superagent acompanha o CI de pull requests anexados a Tickets abertos. O primeiro estado de check define um baseline; mudanças posteriores chegam ao Ticket como contexto.

O DeepSeek Superagent está pronto para produção?

Não. Um worker pode chamar programas por caminho absoluto, então nomes de comandos bloqueados e wrappers de conta não são uma sandbox. Rode em uma VM isolada com credenciais dedicadas, proteção de branch e merge manual.

Khalid Abdelaty

Autor

Khalid Abdelaty

Sou engenheiro de dados e criador de comunidades que trabalha com pipelines de dados, nuvem e ferramentas de IA, além de escrever tutoriais práticos e de alto impacto para o DataCamp e desenvolvedores iniciantes.

Temas