Meu Agente de Codificação Concluiu a Tarefa. Por que o Thread Morreu?
O pior bug em um agente de codificação não é um crash.
É quando a primeira tarefa é bem-sucedida, mas a próxima mensagem parece amnésia. Você pede uma tarefa. O agente termina. Então você diz: "deixe o botão verde".
Para você, esta é a mesma conversa. Para o sistema, uma tarefa concluída muitas vezes significa que a sessão acabou. O sistema começa do zero.
Ao construir o CliGate, percebi que misturei três camadas diferentes:
- A conversa do chat
- A sessão de runtime
- O turno de execução atual
Elas não são a mesma coisa.
Uma conversa é um espaço de longa duração para conversar. Uma sessão de runtime é o thread de trabalho para essa conversa. Um turno é uma única execução dentro dessa sessão.
Quando uma tarefa é concluída, apenas o turno deve terminar. A sessão deve permanecer ativa.
O fluxo quebrado é assim: Usuário pede uma tarefa -> Sessão de runtime inicia -> Tarefa é concluída -> Conversa limpa a sessão ativa -> O próximo acompanhamento inicia uma sessão totalmente nova.
Isso quebra acompanhamentos curtos como:
- tente novamente
- faça o mesmo para este arquivo
- explique o erro
- continue
Se o sistema desconectar a sessão imediatamente, você terá que repetir tudo. O agente funciona, mas a conversa parece artificial.
Eu corrigi isso tornando o modelo explícito:
- Conversas são persistentes.
- Sessões de runtime são persistentes por padrão.
- Tarefas concluídas ou falhas apenas fecham o turno atual.
- Novas sessões só começam se o usuário pedir ou se o modelo mudar.
Parei de tratar a conclusão da tarefa como o fim da sessão. Essa pequena mudança melhora toda a percepção do produto.
No CliGate, uma nova sessão só começa se:
- Não houver uma sessão ainda.
- O usuário pedir uma nova.
- A mudança de modelo tornar a sessão antiga incompatível.
Isso condiz com a forma como os humanos pensam. Um usuário espera que uma aba de chat funcione como um thread contínuo. Isso é vital em aplicativos móveis como Telegram ou Feishu.
A nova lógica é simples:
- A primeira mensagem cria uma sessão de runtime.
- Mensagens posteriores continuam usando essa sessão.
- A conclusão não encerra o thread.
- Apenas comandos explícitos iniciam uma nova sessão.
Isso faz com que o agente pareça um colega de trabalho, em vez de um lançador de comandos.
Se você constrói agentes de codificação, lembre-se disso: A conversa é a unidade durável. A sessão de runtime é o trabalhador reutilizável. O turno é o que termina no sucesso ou na falha.
Separe estas três camadas. Seus follow-ups finalmente parecerão conversacionais.
Fonte: https://dev.to/codekingai/my-coding-agent-finished-the-task-why-did-the-thread-die-2jk2
Comunidade de aprendizado opcional: https://t.me/GyaanSetuAi