Inteligência artificial

ChatDev : Agentes Comunicativos para Desenvolvimento de Software

mm
ChatDev : AI Assisted Software Development

A indústria de desenvolvimento de software é um domínio que frequentemente depende tanto de consultas quanto de intuição, caracterizado por estratégias de tomada de decisão intricadas. Além disso, o desenvolvimento, manutenção e operação de software exigem uma abordagem disciplinada e metódica. É comum que os desenvolvedores de software baseiem suas decisões mais na intuição do que na consulta, dependendo da complexidade do problema. Em um esforço para melhorar a eficiência da engenharia de software, incluindo a eficácia do software e a redução dos custos de desenvolvimento, cientistas estão explorando o uso de frameworks baseados em aprendizado profundo para lidar com várias tarefas dentro do processo de desenvolvimento de software. Com os recentes desenvolvimentos e avanços nos setores de aprendizado profundo e IA, os desenvolvedores estão procurando maneiras de transformar os processos e práticas de desenvolvimento de software. Eles estão fazendo isso usando designs sofisticados implementados em diferentes estágios do processo de desenvolvimento de software.

Hoje, vamos discutir o ChatDev, uma abordagem inovadora baseada em Large Language Model (LLM) que visa revolucionar o campo do desenvolvimento de software. Este paradigma busca eliminar a necessidade de modelos especializados durante cada fase do processo de desenvolvimento. O framework ChatDev aproveita as capacidades dos frameworks LLM, utilizando a comunicação de linguagem natural para unificar e otimizar os processos de desenvolvimento de software.

Neste artigo, vamos explorar o ChatDev, uma empresa virtual especializada em desenvolvimento de software. O ChatDev adota o modelo em cascata e divide meticulosamente o processo de desenvolvimento de software em quatro estágios principais.

  1. Projeto.
  2. Codificação.
  3. Testes.
  4. Documentação.

Cada um desses estágios implanta uma equipe de agentes virtuais, como programadores de código ou testadores, que colaboram entre si usando diálogos que resultam em um fluxo de trabalho sem interrupções. A corrente de diálogos funciona como um facilitador e divide cada estágio do processo de desenvolvimento em subtarefas atômicas, permitindo assim papéis duplos, permitindo propostas e validação de soluções usando comunicações conscientes do contexto que permitem que os desenvolvedores resolvam efetivamente as subtarefas especificadas.

ChatDev : Desenvolvimento de Software Assistido por IA

A análise instrumental do ChatDev demonstra que não apenas o framework ChatDev é extremamente eficaz em concluir o processo de desenvolvimento de software, mas também é extremamente eficiente em termos de custo, pois conclui todo o processo de desenvolvimento de software por menos de um dólar. Além disso, o framework não apenas identifica, mas também alivia possíveis vulnerabilidades, corrige possíveis alucinações, mantendo assim uma alta eficiência e eficácia em termos de custo.

ChatDev : Uma Introdução ao Desenvolvimento de Software com LLM

Tradicionalmente, a indústria de desenvolvimento de software é uma que se baseia nas fundações de uma abordagem disciplinada e metódica, não apenas para desenvolver as aplicações, mas também para mantê-las e operá-las. Tradicionalmente, um processo típico de desenvolvimento de software é um processo altamente intricado, complexo e demorado, com longos ciclos de desenvolvimento, pois há múltiplos papéis envolvidos no processo de desenvolvimento, incluindo coordenação dentro da organização, alocação de tarefas, escrita de código, testes e, finalmente, documentação.

Nos últimos anos, com a ajuda de LLM ou Large Language Models, a comunidade de IA alcançou marcos significativos nos campos de visão computacional e processamento de linguagem natural, e, após o treinamento em paradigmas de “previsão da próxima palavra”, os Large Language Models demonstraram sua capacidade de retornar um desempenho eficiente em uma ampla gama de tarefas downstream, como tradução de máquina, resposta a perguntas e geração de código.

Embora os Large Language Models possam escrever código para todo o software, eles têm uma grande desvantagem: alucinações de código, que é bastante semelhante às alucinações enfrentadas por frameworks de processamento de linguagem natural. As alucinações de código podem incluir problemas como bugs não descobertos, dependências ausentes e implementações de funções incompletas. Há duas principais causas de alucinações de código.

  • Falta de Especificação de Tarefa: Quando gerando o código de software em um único passo, não definir os detalhes da tarefa confunde os LLMs, pois tarefas no processo de desenvolvimento de software, como analisar os requisitos do usuário ou selecionar a linguagem de programação preferida, frequentemente fornecem pensamento orientado, algo que está faltando nos tarefas de alto nível tratadas por esses LLMs.
  • Falta de Exame Cruzado : Riscos significativos surgem quando um exame cruzado não é realizado, especialmente durante os processos de tomada de decisão.

O ChatDev visa resolver esses problemas e facilitar que os LLMs criem aplicações de software de estado da arte e eficazes, criando uma empresa virtual para desenvolvimento de software que estabelece o modelo em cascata e divide meticulosamente o processo de desenvolvimento de software em quatro estágios principais,

  1. Projeto.
  2. Codificação.
  3. Testes.
  4. Documentação.

Cada um desses estágios implanta uma equipe de agentes virtuais, como programadores de código ou testadores, que colaboram entre si usando diálogos que resultam em um fluxo de trabalho sem interrupções. Além disso, o ChatDev faz uso de uma corrente de diálogos que funciona como um facilitador e divide cada estágio do processo de desenvolvimento em subtarefas atômicas, permitindo assim papéis duplos, permitindo propostas e validação de soluções usando comunicações conscientes do contexto que permitem que os desenvolvedores resolvam efetivamente as subtarefas especificadas.

Nessa abordagem, o framework ChatDev primeiro analisa os requisitos de um cliente, gera ideias criativas, projeta e implementa sistemas de protótipo, identifica e aborda problemas potenciais, cria gráficos atraentes, explica as informações de depuração e gera os manuais do usuário. Finalmente, o framework ChatDev entrega o software ao usuário, juntamente com o código-fonte, manuais do usuário e especificações de ambiente de dependência.

ChatDev : Arquitetura e Funcionamento

Agora que temos uma breve introdução ao ChatDev, vamos dar uma olhada na arquitetura e no funcionamento do framework ChatDev, começando com a Corrente de Diálogos.

Corrente de Diálogos

Como mencionamos na seção anterior, o framework ChatDev usa um método em cascata para desenvolvimento de software que divide o processo de desenvolvimento de software em quatro fases, incluindo projeto, codificação, testes e documentação. Cada uma dessas fases tem um papel único no processo de desenvolvimento e há uma necessidade de comunicação eficaz entre elas, e há desafios potenciais ao identificar indivíduos para interagir e determinar a sequência de interações.

Para resolver esse problema, o framework ChatDev usa a Corrente de Diálogos, uma arquitetura generalizada que divide cada fase em uma sub-árvore de diálogos, com cada uma dessas fases focando em uma representação de papel orientada à tarefa que envolve papéis duplos. A saída desejada para o diálogo forma um componente vital para o software-alvo e é alcançada como resultado da colaboração e troca de instruções entre os agentes que participam do processo de desenvolvimento. O paradigma da corrente de diálogos para resolução de tarefas intermediárias é ilustrado na imagem abaixo.

Para cada diálogo individual, um instrutor primeiro inicia as instruções e, em seguida, orienta o diálogo em direção à conclusão da tarefa, e, enquanto isso, os assistentes seguem as instruções estabelecidas pelo instrutor, fornecem soluções ideais e participam de discussões sobre a viabilidade da solução. O instrutor e o agente, então, participam de diálogos multi-turnos até que cheguem a um consenso e considerem a tarefa como bem-sucedida. A corrente de diálogos fornece aos usuários uma visão transparente do processo de desenvolvimento, lança luz sobre o caminho para a tomada de decisões e oferece oportunidades para depurar os erros quando eles surgem, o que permite que os usuários finais analisem e diagnosticem os erros, inspecionem as saídas intermediárias e intervenham no processo, se necessário. Ao incorporar uma corrente de diálogos, o framework ChatDev é capaz de se concentrar em cada subtarefa específica em uma escala granular que não apenas facilita a colaboração eficaz entre os agentes, mas também resulta na obtenção rápida das saídas necessárias.

Projeto

Na fase de projeto, o framework ChatDev exige uma ideia inicial como entrada do cliente humano e há três papéis pré-definidos nessa etapa.

  1. CEO ou Diretor Executivo.
  2. CPO ou Diretor de Produto.
  3. CTO ou Diretor Técnico.

A corrente de diálogos, então, divide a fase de projeto em tarefas de diálogo sub-atômicas, que incluem a linguagem de programação (CTO e CEO) e a modalidade do software-alvo (CPO e CEO). A fase de projeto envolve três mecanismos-chave: Atribuição de Papel ou Especialização de Papel, Fluxo de Memória e Auto-reflexão.

Atribuição de Papel

Cada agente no framework ChatDev é atribuído a um papel usando mensagens especiais ou prompts especiais durante o processo de representação de papéis. Ao contrário de outros modelos de linguagem conversacional, o framework ChatDev restringe-se a iniciar cenários de representação de papéis entre os agentes. Esses prompts são usados para atribuir papéis aos agentes antes dos diálogos.

Inicialmente, o instrutor assume as responsabilidades do CEO e participa de planejamento interativo, enquanto as responsabilidades do CPO são tratadas pelo agente que executa tarefas e fornece as respostas necessárias. O framework usa “iniciação de prompts” para especialização de papéis, o que permite que os agentes cumpram seus papéis de forma eficaz. Os prompts do assistente e do instrutor consistem em detalhes vitais sobre os papéis designados e as tarefas, critérios de término, protocolos de comunicação e várias restrições que visam prevenir comportamentos indesejados, como loops infinitos, respostas não informativas e redundância de instruções.

Fluxo de Memória

O fluxo de memória é um mecanismo usado pelo framework ChatDev que mantém um registro conversacional abrangente dos diálogos anteriores de um agente e ajuda no processo de tomada de decisão que segue de forma consciente da fala. O framework ChatDev usa prompts para estabelecer os protocolos de comunicação necessários. Por exemplo, quando as partes envolvidas chegam a um consenso, uma mensagem de término que atende a um requisito de formatação específico, como (<MODALIDADE>: Aplicativo de Desktop”). Para garantir a conformidade com o formato designado, o framework monitora continuamente e, finalmente, permite que o diálogo atual chegue a uma conclusão.

Auto-reflexão

Os desenvolvedores do framework ChatDev observaram situações em que ambas as partes envolvidas haviam chegado a um consenso mútuo, mas os protocolos de comunicação pré-definidos não foram acionados. Para lidar com esses problemas, o framework ChatDev introduz um mecanismo de auto-reflexão que ajuda na recuperação e extração de memórias. Para implementar o mecanismo de auto-reflexão, o framework ChatDev inicia um novo diálogo, listando “pseudo-eu” como um novo questionador. O “pseudo-eu” analisa os diálogos anteriores e registros históricos e informa o assistente atual, após o que solicita um resumo de informações conclusivas e dignas de ação, como demonstrado na figura abaixo.

Com a ajuda do mecanismo de auto-ajuda, o assistente ChatDev é encorajado a refletir e analisar as decisões que propôs.

Codificação

Há três papéis pré-definidos na fase de codificação, nomeadamente o CTO, o programador e o designer de arte. Como de costume, o mecanismo da corrente de diálogos divide a fase de codificação em tarefas sub-atômicas individuais, como gerar códigos (programador e CTO) ou criar uma GUI ou interface de usuário gráfica (programador e designer). O CTO, então, instrui o programador a usar o formato de markdown para implementar um sistema de software, após o que o designer de arte propõe uma GUI interativa e amigável que usa ícones gráficos para interagir com os usuários, em vez de confiar em comandos baseados em texto tradicionais.

Gerenciamento de Código

O framework ChatDev usa linguagens de programação orientadas a objetos, como Python, Java e C++, para lidar com sistemas de software complexos, pois a modularidade dessas linguagens de programação permite o uso de objetos autocontidos que não apenas ajudam na depuração, mas também no desenvolvimento colaborativo e ajudam a remover redundâncias reutilizando os objetos por meio do conceito de herança.

Instruções de Pensamento

Os métodos tradicionais de resposta a perguntas frequentemente levam a informações irrelevantes ou imprecisões, especialmente ao gerar código, pois fornecer instruções ingênuas pode levar a alucinações de LLM e pode se tornar um problema desafiador. Para lidar com esse problema, o framework ChatDev introduz o mecanismo de “instruções de pensamento” que se inspira em prompts de cadeia de pensamento. O mecanismo de “instruções de pensamento” aborda explicitamente os pensamentos de resolução de problemas individuais incluídos nas instruções, semelhante à resolução de tarefas de forma sequencial e organizada.

Testes

Escrever um código sem erros na primeira tentativa é um desafio não apenas para os LLMs, mas também para programadores humanos, e, em vez de descartar completamente o código incorreto, os programadores analisam seu código para identificar os erros e corrigi-los. A fase de testes no framework ChatDev é dividida em três papéis: programador, testador e revisor. O processo de teste é ainda dividido em duas tarefas sub-atômicas sequenciais: Revisão por Pares ou Depuração Estática (Revisor e Programador), e Testes de Sistema ou Depuração Dinâmica (Programador e Testador). A depuração estática ou revisão por pares analisa o código-fonte para identificar erros, enquanto a depuração dinâmica ou testes de sistema verifica a execução do software por meio de vários testes realizados usando um interpretador pelo programador. A depuração dinâmica se concentra principalmente em testes de caixa preta para avaliar as aplicações.

Documentação

Depois que o framework ChatDev conclui as fases de projeto, codificação e testes, ele emprega quatro agentes, nomeadamente o CEO, CTO, CPO e Programador, para gerar a documentação do projeto de software. O framework ChatDev usa LLMs para aproveitar prompts de poucos disparos com exemplos de contexto para gerar os documentos. O CTO instrui o programador a fornecer as instruções para a configuração de dependências ambientais e criar um documento como “requisitos de dependência.txt”. Ao mesmo tempo, os requisitos e o design do sistema são comunicados ao CPO pelo CEO para gerar o manual do usuário do produto.

Resultados

Estatísticas de Software

Para analisar o desempenho do framework ChatDev, a equipe de desenvolvedores realizou uma análise estatística nos aplicativos de software gerados pelo framework com base em alguns métricas-chave, incluindo tokens consumidos, turnos de diálogo totais, ativos de imagem, arquivos de software, atualizações de versão e alguns mais, e os resultados são demonstrados na tabela abaixo.

Análise de Duração

Para examinar o tempo de produção do ChatDev para software para diferentes prompts de solicitação, os desenvolvedores também realizaram uma análise de duração, e a diferença no tempo de desenvolvimento para diferentes prompts reflete a clareza e complexidade variadas das tarefas atribuídas, e os resultados são demonstrados na figura abaixo.

Estudo de Caso

A figura a seguir demonstra o ChatDev desenvolvendo um jogo de Cinco em uma Linha ou Gomoku.

A figura mais à esquerda demonstra o software básico criado pelo framework sem usar nenhuma GUI. Como pode ser claramente visto, o aplicativo sem GUI oferece interatividade limitada e os usuários podem jogar este jogo apenas por meio do terminal de comando. A próxima figura demonstra um jogo mais visualmente atraente criado com o uso de GUI, oferece uma melhor experiência do usuário e uma interatividade aprimorada para um ambiente de jogo envolvente que pode ser muito mais apreciado pelos usuários. O agente designer, então, cria gráficos adicionais para melhorar ainda mais a usabilidade e a estética do jogo sem afetar a funcionalidade do software. No entanto, se os usuários humanos não estiverem satisfeitos com a imagem gerada pelo designer, eles podem substituir as imagens após o framework ChatDev concluir o software. A flexibilidade oferecida pelo framework ChatDev para substituir manualmente as imagens permite que os usuários personalizem as aplicações de acordo com suas preferências para uma interatividade e experiência do usuário aprimoradas, sem afetar a funcionalidade do software de forma alguma.

Pensamentos Finais

Neste artigo, falamos sobre o ChatDev, um paradigma inovador baseado em LLM ou Large Language Model que visa revolucionar o campo do desenvolvimento de software, eliminando a necessidade de modelos especializados durante cada fase do processo de desenvolvimento. O framework ChatDev visa aproveitar as capacidades dos frameworks LLM, utilizando a comunicação de linguagem natural para unificar e otimizar os processos de desenvolvimento de software. O framework ChatDev usa o mecanismo da corrente de diálogos para dividir o processo de desenvolvimento de software em subtarefas sub-atômicas, permitindo assim um foco granular e promovendo saídas desejadas para cada subtarefa sub-atômica.

Um engenheiro por profissão, um escritor por coração. Kunal é um escritor técnico com um amor e compreensão profundos de AI e ML, dedicado a simplificar conceitos complexos nestes campos por meio de sua documentação envolvente e informativa.