Modelos e plataformas de IA

ChatDev: Agentes Comunicativos para Desenvolvimento de Software

mm
Adicione Unite.AI às suas fontes preferidas no Google
ChatDev : AI Assisted Software Development

A indústria de desenvolvimento de software é um domínio que frequentemente depende de consultas e 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 em intuição, em vez de consultas, 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, os 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, utilizando projetos sofisticados implementados em diferentes estágios do processo de desenvolvimento de software.

Hoje, vamos discutir o ChatDev, uma abordagem inovadora baseada em Modelo de Linguagem Grande (LLM) que visa revolucionar o campo do desenvolvimento de software. Essa abordagem busca eliminar a necessidade de modelos especializados em cada fase do processo de desenvolvimento. O framework ChatDev aproveita as capacidades dos frameworks LLM, utilizando a comunicação em linguagem natural para unificar e otimizar os principais 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 o processo de desenvolvimento de software em quatro estágios principais.

  1. Projetando.
  2. Codificando.
  3. Testando.
  4. Documentando.

Cada um desses estágios utiliza 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 cadeia de conversa funciona como um facilitador e divide cada estágio do processo de desenvolvimento em tarefas subatômicas, permitindo papéis duplos e propostas e validação de soluções usando comunicações conscientes do contexto que permitem que os desenvolvedores resolvam efetivamente as tarefas subatômicas especificadas.

ChatDev: Desenvolvimento de Software Assistido por IA

A análise instrumental do ChatDev demonstra que o framework ChatDev não apenas é extremamente eficaz no processo de desenvolvimento de software, mas também é extremamente eficiente em termos de custo, pois completa 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 as vulnerabilidades potenciais, corrige as alucinações potenciais, mantendo alta eficiência e eficácia em termos de custo.

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

Tradionalmente, a indústria de desenvolvimento de software é uma que se baseia em uma abordagem disciplinada e metódica, não apenas para o desenvolvimento de aplicações, mas também para a manutenção e operação delas. Tradicionalmente, um processo de desenvolvimento de software típico é um processo complexo e demorado, com longos ciclos de desenvolvimento, pois há muitos papéis envolvidos no processo de desenvolvimento, incluindo coordenação dentro da organização, alocação de tarefas, codificação, testes e, finalmente, documentação.

Nos últimos anos, com a ajuda dos Modelos de Linguagem Grande (LLM), 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 de próxima palavra”, os Modelos de Linguagem Grande 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 Modelos de Linguagem Grande possam escrever código para o software inteiro, eles têm uma grande desvantagem: alucinações de código, que é bastante semelhante às alucinações enfrentadas pelos 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: Ao gerar o código de software em um único passo, não definir as especificações 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á ausente dos 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 o processo de desenvolvimento de software em quatro estágios principais,

  1. Projetando.
  2. Codificando.
  3. Testando.
  4. Documentando.

Cada um desses estágios utiliza 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 utiliza uma cadeia de conversa que funciona como um facilitador e divide cada estágio do processo de desenvolvimento em tarefas subatômicas, permitindo papéis duplos e propostas e validação de soluções usando comunicações conscientes do contexto que permitem que os desenvolvedores resolvam efetivamente as tarefas subatômicas especificadas. A cadeia de conversa consiste em vários nós, onde cada nó individual representa uma tarefa subatômica específica, e esses dois papéis se envolvem em discussões multi-turno conscientes do contexto para não apenas propor, mas também validar as soluções.

Nessa abordagem, o framework ChatDev primeiro analisa os requisitos do 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 do ambiente de dependência.

ChatDev: Arquitetura e Funcionamento

Agora que temos uma breve introdução ao ChatDev, vamos dar uma olhada na arquitetura e funcionamento do framework ChatDev, começando com a Cadeia de Conversa.

Cadeia de Conversa

Como mencionamos na seção anterior, o framework ChatDev utiliza um método em cascata para o desenvolvimento de software, que divide o processo de desenvolvimento de software em quatro fases, incluindo projetar, codificar, testar e documentar. 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 se envolver e determinar a sequência de interações.

Para resolver esse problema, o framework ChatDev utiliza a Cadeia de Conversa, uma arquitetura generalizada que divide cada fase em uma conversa subatômica, com cada uma dessas fases se concentrando em papéis orientados para tarefas que envolvem papéis duplos. A saída desejada para a conversa é 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 de resolução de tarefas intermediárias da Cadeia de Conversa é ilustrado na imagem abaixo.

Para cada conversa individual, um instrutor primeiro inicia as instruções e, em seguida, guia 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 se envolvem em discussões sobre a viabilidade da solução. O instrutor e o agente, então, se envolvem em diálogos multi-turno até que cheguem a um consenso e considerem a tarefa concluída com sucesso. A Cadeia de Conversa 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 surgem, permitindo 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 a Cadeia de Conversa, o framework ChatDev é capaz de se concentrar em cada tarefa subatômica específica em uma escala granular, o que não apenas facilita a colaboração eficaz entre os agentes, mas também resulta na rápida obtenção das saídas necessárias.

Projetando

Na fase de projeto, o framework ChatDev requer 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 Cadeia de Conversa, então, divide a fase de projeto em tarefas de conversa subatômicas sequenciais, 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 principais: 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 ou prompts especiais durante o processo de atribuição de papéis. Ao contrário de outros modelos de linguagem conversacional, o framework ChatDev se limita a iniciar cenários de atribuiçã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 se envolve em planejamento interativo, enquanto as responsabilidades do CPO são tratadas pelo agente que executa tarefas e fornece as respostas necessárias. O framework utiliza ” iniciação de prompt” para a especialização de papéis, o que permite que os agentes atuem efetivamente em seus papéis. Os prompts do assistente e do instrutor consistem em detalhes vitais sobre os papéis e tarefas designados, 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 utilizado 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ões que se segue de uma maneira consciente do discurso. O framework ChatDev utiliza 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 uma nova conversa, listando “pseudo-eu” como um novo questionador. O “pseudo-eu” analisa os diálogos anteriores e registros históricos e informa o assistente atual, solicitando 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.

Codificando

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, a Cadeia de Conversa divide a fase de codificação em tarefas subatômicas individuais, como gerar códigos (programador e CTO) ou criar uma interface gráfica do usuário (programador e designer). O CTO, então, instrui o programador a usar o formato de marcação para implementar um sistema de software, seguindo o que o designer de arte propõe uma interface gráfica do usuário interativa e amigável que utiliza ícones gráficos para interagir com os usuários, em vez de confiar em comandos de texto tradicionais.

Gerenciamento de Código

O framework ChatDev utiliza 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 na remoção de 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 imprecisas, 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 nos prompts de cadeia de pensamento. O mecanismo de “instruções de pensamento” aborda explicitamente os pensamentos individuais de resolução de problemas incluídos nas instruções, semelhante à resolução de tarefas de forma sequencial e organizada.

Testando

Escrever um código sem erros na primeira tentativa é um desafio não apenas para os LLMs, mas também para os programadores humanos, e, em vez de descartar completamente o código incorreto, os programadores analisam o código para identificar os erros e corrigi-los. A fase de teste no framework ChatDev é dividida em três papéis: programador, testador e revisor. O processo de teste é ainda dividido em duas tarefas subatômicas sequenciais: Revisão por Pares ou Depuração Estática (Revisor e Programador), e Teste 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 teste 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.

Documentando

Depois que o framework ChatDev completa as fases de projeto, codificação e teste, ele emprega quatro agentes, nomeadamente o CEO, CTO, CPO e Programador, para gerar a documentação do projeto de software. O framework ChatDev utiliza LLMs para aproveitar prompts de exemplo 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 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 uma interface gráfica do usuário. Como pode ser visto claramente, o aplicativo sem uma interface gráfica do usuário oferece interatividade limitada, e os usuários podem jogar esse jogo apenas por meio do terminal de comando. A próxima figura demonstra um jogo mais atraente criado com o uso de uma interface gráfica do usuário, oferecendo uma melhor experiência do usuário e uma interatividade aprimorada para um ambiente de jogo envolvente que pode ser desfrutado muito mais 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 de forma alguma. 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 ter concluído 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, discutimos o ChatDev, uma abordagem inovadora baseada em Modelo de Linguagem Grande (LLM) que visa revolucionar o campo do desenvolvimento de software, eliminando a necessidade de modelos especializados em cada fase do processo de desenvolvimento. O framework ChatDev visa aproveitar as capacidades dos frameworks LLM, utilizando a comunicação em linguagem natural para unificar e otimizar os principais processos de desenvolvimento de software. O framework ChatDev utiliza a Cadeia de Conversa para dividir o processo de desenvolvimento de software em tarefas subatômicas sequenciais, permitindo um foco granular e promovendo saídas desejadas para cada tarefa subatô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.