Programação em par com IA com o IBM Bob
Use o Bob como assistente de programação em par com IA para construir uma API To-Do com FastAPI, trabalhando desde os requisitos até um plano, código gerado, testes e documentação.
Com a programação em par com IA, você constrói software ao lado de um assistente que ajuda em cada etapa de planejamento, codificação, testes e documentação, em vez de apenas autocompletar linhas. Neste tutorial, você faz par com o IBM Bob para construir uma API To-Do com FastAPI a partir de um conjunto de requisitos.
Você começa pelos requisitos e avança por um plano revisado, código gerado, uma explicação da implementação, melhorias de qualidade de código, testes unitários e documentação técnica. O armazenamento de dados é uma lista Python em memória, então não há banco de dados para configurar.
Ao final, você tem uma API To-Do containerizada e funcional, e praticou o ciclo de revisão de programação em par em cada etapa: planejar, gerar, explicar, refatorar, testar e documentar.
Este tutorial é para desenvolvedores que conhecem Python básico e conceitos REST e querem um ciclo de revisão repetível para construir software com um assistente de IA. Não é necessária experiência com FastAPI.
Este tutorial cobre o ciclo de build completo de ponta a ponta em um novo projeto. Para se aprofundar no planejamento e na implementação de uma funcionalidade grande em uma base de código existente, consulte Planejar e implementar funcionalidades complexas.
Pré-requisitos
Para concluir este tutorial, você precisa do seguinte:
- Bob IDE instalado e configurado.
- Familiaridade com Use literate coding para gerar código a partir de comentários.
- Conclusão de Criar uma nova janela de contexto, para que você possa gerenciar o contexto do Bob ao longo deste fluxo de trabalho de várias etapas.
- Docker instalado e em execução na sua estação de trabalho. O Bob gera um Dockerfile para que você possa construir e executar a API em um container sem instalar Python ou suas dependências localmente.
- Conhecimento básico de Python.
- Noções básicas de APIs REST. Você não precisa de experiência prévia com FastAPI. O Bob gera o código FastAPI e explica sob pedido como parte do fluxo de trabalho.
Entenda a programação em par com IA com o Bob
Cada etapa a seguir abrange planejamento, geração, explicação, refatoração, testes e documentação. Em cada etapa, o Bob propõe mudanças e você as aprova, rejeita ou revisa antes de o Bob aplicá-las.
Fluxo de trabalho de programação em par
Este tutorial usa o seguinte fluxo de trabalho:
Requisitos
↓
Bob cria um plano
↓
Você revisa e refina o plano
↓
Bob gera o código
↓
Você revisa o resultado
↓
Executa e valida
↓
Bob explica a implementação
↓
Bob sugere melhorias de qualidade de código
↓
Gerar testes
↓
Gerar documentaçãoConfigure seu workspace
Inicie o Bob, abra uma pasta de projeto vazia e configure o Bob para solicitar aprovação antes de alterar arquivos.
Inicie o IBM Bob
Inicie o IBM Bob IDE.
Abra a interface de chat do Bob
Se a interface de chat do Bob não estiver visível, abra-a selecionando o ícone do Bob ao lado da barra de navegação. Você também pode pressionar Option + Command + B no Mac, ou Ctrl + Alt + B no Windows e Linux.

Abra uma pasta de projeto vazia
Crie uma pasta vazia chamada todo-api, depois abra-a no Bob com File > Open Folder. Se o Bob perguntar se você confia nos autores dos arquivos na pasta, selecione Yes, I trust the authors.
O Bob grava o aplicativo gerado nesta pasta. Você não precisa de um repositório existente para este tutorial.
Desative a aprovação automática
Abra Permissions e confirme que a aprovação automática está desativada. Com a aprovação automática desligada, o Bob solicita sua permissão antes de ler arquivos, editar arquivos ou executar comandos. Você mantém o controle de cada alteração neste tutorial.
Defina os requisitos e o plano
Forneça ao Bob os requisitos da API To-Do e, em seguida, revise o plano proposto antes que o Bob escreva qualquer código.
Mude para o modo Plan
Abra o dropdown de modos na parte inferior da barra lateral do Bob e selecione Plan.

Modes aplicam o princípio do menor privilégio. No modo Plan, o Bob lê seu código e escreve um plano em Markdown. O Bob não executa comandos nem faz alterações de implementação. Você revisa a abordagem antes de o Bob escrever qualquer código da aplicação.
Defina os requisitos do aplicativo
Na interface de chat do Bob, insira o seguinte prompt:
Create a simple FastAPI To-Do API.
Requirements:
- Store tasks in a Python list.
- Each task should contain:
- id
- task_name
Implement these endpoints with explicit HTTP status codes:
- GET /tasks: list all tasks. Return 200.
- POST /tasks: create a task from a JSON body containing only task_name. Return 201 with the created task.
- DELETE /tasks/{task_id}: delete a task. Return 204 on success and 404 if no task has that id.
Use FastAPI and Pydantic. Use Pydantic model validation so an invalid request body returns 422.
Include a requirements.txt and a Dockerfile. The Dockerfile must start Uvicorn bound to 0.0.0.0 on port 8000 so the API is reachable through a published container port.
Save the plan as Markdown files in a folder named `plans`.
Put the FastAPI application in a single file named `main.py` at the project root.
Keep the implementation simple.
Don't install any dependencies locally or run local tests. Everything will run in a Docker container.Para construir o plano, o Bob executa sua skill de planejamento. Quando solicitado, selecione Approve skill tools for task e Approve subagent tools for task para que o Bob possa explorar o workspace e elaborar o plano.
Refine o plano
Você pode alterar o plano antes que o Bob escreva qualquer código. Na interface de chat do Bob, insira um prompt de acompanhamento:
Update the plan to reject a task whose task_name is empty or longer than 200 characters.O Bob revisa o plano para incluir a validação de entrada extra. Revise o plano atualizado.
Revise o plano
O Bob apresenta um plano ordenado e pode salvá-lo como um arquivo Markdown no projeto. Revise-o antes de continuar:
- Escopo: o plano cobre cada endpoint e a regra de validação que você adicionou, e nada que você não solicitou.
- Arquivos nomeados: cada etapa nomeia o arquivo que cria ou altera.
- Linguagem vaga: frases como "handle errors appropriately" escondem suposições. Peça ao Bob que as torne específicas.
Você mantém a responsabilidade por essas decisões de design. O Bob não implementa nada até você mudar para o modo Agent em Gere e revise o aplicativo.
Gere e revise o aplicativo
Inicie uma nova janela de contexto, mude para o modo Agent e peça ao Bob que implemente o plano aprovado.
Inicie uma nova janela de contexto
Selecione New task na caixa de chat ou + no topo do painel de chat para iniciar uma nova janela de contexto. Consulte Criar uma nova janela de contexto para mais contexto. O Bob salvou o plano na pasta plans, então você não precisa mais da conversa de planejamento no contexto. Um contexto limpo mantém a implementação focada no plano aprovado.
Mude para o modo Agent e execute o plano
Abra o dropdown de modos na parte inferior da barra lateral do Bob e selecione Agent. Depois, diga ao Bob para implementar o plano:
Implement the plan in the plans folder.
@plans/O modo Agent permite que o Bob escreva arquivos e execute comandos. O Bob solicita aprovação antes de cada alteração porque você desativou a aprovação automática. Aprove as etapas conforme o Bob avança pelo plano.
Revise o aplicativo gerado
Quando a implementação estiver concluída, revise o código gerado. Como a saída do Bob é probabilística, o estilo de código e os nomes internos podem diferir dos exemplos mostrados aqui. O aplicativo consiste nas seguintes partes.
Modelos de dados. O Bob gera dois modelos Pydantic: um para o corpo da requisição ao criar uma tarefa e outro para uma tarefa armazenada. O modelo de criação aplica a regra de comprimento que você adicionou durante o planejamento:
class TaskCreate(BaseModel):
task_name: Annotated[str, Field(min_length=1, max_length=200)]
class Task(BaseModel):
id: int
task_name: strOs caminhos dos endpoints e os códigos de status correspondem aos requisitos fornecidos ao Bob, mas os nomes das classes de modelo e o layout dos arquivos podem variar. Este tutorial assume os modelos Task e TaskCreate. Ajuste os prompts a seguir se o Bob tiver escolhido nomes diferentes.
Armazenamento de dados em memória. O Bob armazena tarefas em uma lista Python vazia e atribui a cada nova tarefa um id incremental:
tasks: list[dict] = []
id_counter = 0Operações da API. O aplicativo fornece os seguintes endpoints:
GET /tasksPOST /tasksDELETE /tasks/{task_id}
POST /tasks recebe apenas task_name no corpo da requisição e retorna 201 com a tarefa criada. DELETE /tasks/{task_id} retorna 204 em caso de sucesso e 404 quando nenhuma tarefa possui aquele task_id.
Dependências. O Bob gera um arquivo requirements.txt que lista FastAPI, Uvicorn e Pydantic.
Container. O Bob gera um Dockerfile que instala as dependências e executa a API na porta 8000 com Uvicorn.
O contrato HTTP segue o prompt de requisitos, incluindo métodos, caminhos e códigos de status. As seguintes etapas de validação se aplicam como descritas.
Adicione um endpoint com literate coding
Use o modo literate coding para adicionar um endpoint de atualização diretamente a partir de uma instrução em linguagem natural no editor, sem precisar mudar para a janela de chat.
Literate coding mode gera código a partir de instruções em linguagem natural escritas diretamente no editor.
Abra o arquivo do aplicativo
Abra o arquivo main.py que o Bob gerou e posicione o cursor em uma linha vazia no final do arquivo, após o último route handler.
Ative o modo literate coding
Pressione Command + I no Mac, ou Ctrl + I no Windows e Linux. Você também pode selecionar o ícone de varinha mágica na barra de ferramentas do editor.
Escreva a instrução
Insira a seguinte instrução na linha vazia. Ela aparece destacada em uma cor diferente do restante do código.
Add a PUT /tasks/{task_id} endpoint that updates the task_name of an existing task, matching the style and conventions of the existing routes. Return 200 with the updated task, or 404 if no task has that id.O Bob infere o nome do parâmetro, o modelo de requisição e o tratamento de erros a partir do código ao redor, então você só precisa especificar o método e o caminho.
Gere e aceite o código
Selecione Generate, ou pressione Command + Enter no Mac, ou Ctrl + Enter no Windows e Linux. O Bob substitui sua instrução por uma implementação e mostra um diff inline.
Revise o diff e, em seguida, selecione Accept All para aplicar a alteração. Pressione Command + I no Mac, ou Ctrl + I no Windows e Linux novamente para sair do modo literate coding.
Explique, execute e valide
Peça ao Bob para explicar a implementação e, em seguida, execute o aplicativo e valide seu comportamento.
Peça ao Bob para explicar o código
Inicie uma nova janela de contexto com New task e, em seguida, selecione Ask no dropdown de modos. O modo Ask responde perguntas e analisa código sem editar arquivos. Use-o quando quiser uma explicação sem alterações.
Entender o código gerado é uma parte importante da programação em par com IA. Pergunte ao Bob:
Explain the generated To-Do API.O Bob pode explicar a arquitetura do aplicativo, o fluxo de dados, os componentes do FastAPI, os modelos Pydantic, o comportamento dos endpoints e as decisões de design. Use a explicação para confirmar que o código faz o que você espera antes de alterá-lo ou estendê-lo.
Execute o aplicativo
Volte para o modo Agent para que o Bob possa executar comandos. Peça ao Bob para construir e executar a API em um container:
Build the Docker image and run the container with port 8000 mapped to the host. Confirm the API is reachable.O Bob executa os comandos de build e inicialização e informa quando o container está em execução.
Abra http://localhost:8000/docs no seu navegador.
O FastAPI serve uma interface Swagger UI interativa em /docs. Use-a para explorar cada endpoint, inspecionar esquemas de requisição e resposta, e executar chamadas de API pelo navegador.
Valide a API
Use o Swagger UI em /docs para exercitar cada operação. Para cada endpoint:
- Expanda sua linha e selecione Try it out.
- Insira quaisquer parâmetros de caminho ou corpo da requisição.
- Selecione Execute.
- Verifique o código e o corpo da Server response.
Adicionar uma tarefa
-
Expanda POST /tasks e selecione Try it out.
-
Substitua o corpo da requisição por:
{ "task_name": "My first API item!" } -
Selecione Execute. Confirme que o código de resposta é
201e que o corpo da resposta mostra a tarefa criada com umidatribuído.
Recuperar tarefas
- Expanda GET /tasks e selecione Try it out.
- Selecione Execute. Confirme que o código de resposta é
200e que o corpo da resposta lista a tarefaMy first API item!com oidatribuído quando você a adicionou.
Atualizar uma tarefa
-
Expanda
PUT /tasks/{task_id}e selecione Try it out. -
Insira o
task_idda tarefa que você criou. -
Substitua o corpo da requisição por:
{ "task_name": "Build and ship a To-Do API" } -
Selecione Execute. Confirme que o código de resposta é
200e que a tarefa retornada mostra otask_nameatualizado. -
Altere
task_idpara um valor que não existe e selecione Execute novamente. Confirme que o código de resposta é404.
Excluir uma tarefa
- Expanda
DELETE /tasks/{task_id}e selecione Try it out. - Insira o
task_idda tarefa que você criou e selecione Execute. Confirme que o código de resposta é204. - Expanda GET /tasks, selecione Execute e confirme que a tarefa não aparece mais na resposta.
- Expanda
DELETE /tasks/{task_id}novamente, insira o mesmotask_ide selecione Execute. Confirme que o código de resposta é404.
A implementação atende aos requisitos originais, incluindo o endpoint de atualização que você adicionou com literate coding.
Melhore a qualidade do código
Peça ao Bob para revisar o código gerado em busca de problemas de qualidade e, em seguida, aplique as alterações com as quais você concordar. Esta etapa usa o Bob como revisor, e não apenas como gerador de código.
Peça sugestões de melhoria ao Bob
Inicie uma nova janela de contexto com New task e, em seguida, insira:
Review the To-Do API and suggest improvements to code quality, error handling, and HTTP status codes.O Bob identifica lacunas como um endpoint ausente para recuperar uma única tarefa, um armazenamento em memória que contém dicionários simples em vez de modelos Task validados, e um id_counter no nível do módulo que é difícil de redefinir ou testar.
Aplique as melhorias
Peça ao Bob para implementar as sugestões que você deseja manter:
Add a GET /tasks/{task_id} endpoint that returns 404 when the task ID does not exist, and store tasks as Task models instead of dictionaries.Revise as alterações propostas e aprove para aplicá-las. Peça ao Bob para reconstruir a imagem e reiniciar o container e, em seguida, repita as etapas de validação. Confirme que GET /tasks/{task_id} retorna 200 com a tarefa para um ID válido e 404 para um ID desconhecido, e que os endpoints existentes ainda se comportam como antes.
Gere testes e documentação
Peça ao Bob para gerar um conjunto de testes e documentação técnica para a API.
Gere testes unitários
Inicie uma nova janela de contexto com New task e, em seguida, pergunte ao Bob:
Generate pytest unit tests for this application. Add pytest and httpx to a dev requirements file, build a test image, and run the suite in a container.O Bob adiciona as dependências de teste pytest e httpx, constrói uma imagem que as inclui, executa o conjunto de testes em um container e reporta os resultados. Executar os testes em um container significa que você não precisa de um ambiente Python local. Revise e refine os testes gerados.
A revisão e manutenção dos testes gerados permanecem de sua responsabilidade.
Gere documentação técnica
Pergunte ao Bob:
Generate technical documentation for this To-Do API.O Bob pode gerar uma visão geral do aplicativo, descrição da arquitetura, resumos de endpoints, exemplos de requisição e resposta, e instruções de uso. Esta documentação complementa a documentação da API que o FastAPI gera automaticamente.
Solução de problemas
Use as seguintes soluções para problemas comuns:
- Cannot connect to the Docker daemon: Inicie o Docker Desktop ou o serviço Docker antes de construir a imagem.
- The container starts but
http://localhost:8000/docsdoes not load: O Dockerfile vincula a API a127.0.0.1dentro do container, que a porta publicada não consegue alcançar. Certifique-se de que o Dockerfile inicia o Uvicorn com--host 0.0.0.0e, em seguida, reconstrua a imagem. - Bind for 0.0.0.0:8000 failed: port is already allocated: Pare o processo que usa a porta
8000, ou mapeie outra porta do host comdocker run -d --name todo-api -p 8080:8000 todo-apie abrahttp://localhost:8080/docs. - The container name "/todo-api" is already in use: Execute
docker rm -f todo-apie, em seguida, inicie o container novamente. - pytest is missing when the tests run: A imagem do aplicativo não inclui dependências de teste. Peça ao Bob para adicionar
pytestehttpxa um arquivo de requisitos de desenvolvimento e construir uma imagem de teste separada.
Limpeza
Pare e remova o container para liberar a porta 8000:
Stop and remove the To-Do API and test container and image.A API mantém as tarefas apenas em memória, portanto remover o container descarta todos os dados. Não há mais nada para limpar.
Próximos passos
Neste tutorial, você construiu e validou uma API To-Do com FastAPI containerizada, fazendo par com o Bob em cada etapa e revisando cada alteração antes de aplicá-la.
- Avance para Planejar e implementar funcionalidades complexas para delimitar mudanças maiores e de múltiplas camadas.
- Explore Criar um commit e pull request para levar o código gerado do seu editor a um pull request.
FAQ
Preciso conhecer FastAPI? Não. O Bob gera o código FastAPI e Pydantic e explica sob pedido. Conhecimento básico de Python e REST é suficiente.
Por que mudar de modo entre as etapas? Os modos aplicam o menor privilégio. O modo Plan lê o código e escreve um plano, mas não executa nada; o modo Agent pode editar arquivos e executar comandos; o modo Ask responde perguntas sem alterar arquivos. Alternar mantém as capacidades do Bob alinhadas com a tarefa em mãos.
E se o Bob nomear arquivos ou modelos de forma diferente?
O contrato HTTP é fixado pelo prompt de requisitos, então caminhos e códigos de status coincidem. Nomes de classes e layout de arquivos podem variar. Este tutorial assume os modelos Task e TaskCreate; ajuste os prompts seguintes se o Bob tiver escolhido outros nomes.
Por que iniciar uma nova janela de contexto em cada etapa?
O Bob salva o plano na pasta plans, portanto a conversa anterior não é mais necessária no contexto. Um contexto limpo mantém cada etapa focada e controla o custo de tokens.
Posso fazer este tutorial sem Docker? Tecnicamente sim, mas você precisará editar o plano e os prompts ao Bob.
O modo Plan altera arquivos? Não. No modo Plan o Bob lê seu código e escreve apenas um plano em Markdown. Nenhum código da aplicação é alterado até você mudar para o modo Agent.