Programación en pareja con IA con IBM Bob
Usa Bob como asistente de programación en pareja con IA para construir una API To-Do con FastAPI, trabajando desde los requisitos hasta un plan, código generado, pruebas y documentación.
Con la programación en pareja con IA, construyes software junto a un asistente que te ayuda en cada etapa de planificación, codificación, pruebas y documentación, en lugar de uno que solo autocompleta líneas. En este tutorial, trabajas en pareja con IBM Bob para construir una API To-Do con FastAPI a partir de un conjunto de requisitos.
Empiezas desde los requisitos y avanzas a través de un plan revisado, código generado, una explicación de la implementación, mejoras de calidad del código, pruebas unitarias y documentación técnica. El almacén de datos es una lista de Python en memoria, por lo que no hay ninguna base de datos que configurar.
Al final, tienes una API To-Do en contenedor en funcionamiento y has practicado el ciclo de revisión de programación en pareja en cada etapa: planificar, generar, explicar, refactorizar, probar y documentar.
Este tutorial es para desarrolladores que conocen Python básico y los conceptos REST y quieren un ciclo de revisión repetible para construir software con un asistente de IA. No se requiere experiencia con FastAPI.
Este tutorial cubre el ciclo de construcción completo de principio a fin en un proyecto nuevo. Para profundizar en la planificación e implementación de una funcionalidad grande dentro de una base de código existente, consulta Planificar e implementar funcionalidades complejas.
Prerrequisitos
Para completar este tutorial, necesitas lo siguiente:
- Bob IDE instalado y configurado.
- Familiaridad con Usa la codificación literaria para generar código a partir de comentarios.
- Haber completado Crear una nueva ventana de contexto, para que puedas gestionar el contexto de Bob en este flujo de trabajo de varios pasos.
- Docker instalado y en ejecución en tu estación de trabajo. Bob genera un Dockerfile para que puedas construir y ejecutar la API en un contenedor sin instalar Python ni sus dependencias localmente.
- Conocimientos básicos de Python.
- Comprensión básica de las API REST. No necesitas experiencia previa con FastAPI. Bob genera el código de FastAPI y lo explica a petición como parte del flujo de trabajo.
Comprender la programación en pareja con IA con Bob
Cada etapa que sigue cubre la planificación, generación, explicación, refactorización, pruebas y documentación. En cada etapa, Bob propone cambios y tú los apruebas, rechazas o revisas antes de que Bob los aplique.
Flujo de trabajo de programación en pareja
Este tutorial utiliza el siguiente flujo de trabajo:
Requisitos
↓
Bob crea un plan
↓
Tú revisas y refinas el plan
↓
Bob genera código
↓
Tú revisas el resultado
↓
Ejecutar y validar
↓
Bob explica la implementación
↓
Bob sugiere mejoras de calidad del código
↓
Generar pruebas
↓
Generar documentaciónConfigura tu espacio de trabajo
Lanza Bob, abre una carpeta de proyecto vacía y configura Bob para que pida aprobación antes de cambiar archivos.
Lanza IBM Bob
Lanza el IDE IBM Bob.
Abre la interfaz de chat de Bob
Si la interfaz de chat de Bob no está visible, ábrela seleccionando el icono de Bob junto a la barra de navegación. También puedes pulsar Option + Command + B en Mac, o Ctrl + Alt + B en Windows y Linux.

Abre una carpeta de proyecto vacía
Crea una carpeta vacía llamada todo-api, luego ábrela en Bob con Archivo > Abrir carpeta. Si Bob te pregunta si confías en los autores de los archivos de la carpeta, selecciona Sí, confío en los autores.
Bob escribe la aplicación generada en esta carpeta. No necesitas un repositorio existente para este tutorial.
Desactiva la aprobación automática
Abre Permisos y confirma que la aprobación automática está desactivada. Con la aprobación automática desactivada, Bob te pide permiso antes de leer archivos, editar archivos o ejecutar comandos. Mantienes el control de cada cambio en este tutorial.
Define los requisitos y el plan
Dale a Bob los requisitos para la API To-Do, luego revisa el plan que propone antes de que Bob escriba ningún código.
Cambia al modo Plan
Abre el menú desplegable de modos en la parte inferior de la barra lateral de Bob y selecciona Plan.

Los Modos aplican el principio de mínimo privilegio. En el modo Plan, Bob lee tu código y escribe un plan en Markdown. Bob no ejecuta comandos ni realiza cambios de implementación. Tú revisas el enfoque antes de que Bob escriba código de la aplicación.
Define los requisitos de la aplicación
En la interfaz de chat de Bob, introduce el siguiente 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 el plan, Bob ejecuta su skill de planificación. Cuando se te solicite, selecciona Approve skill tools for task y Approve subagent tools for task para que Bob pueda investigar el espacio de trabajo y redactar el plan.
Refina el plan
Puedes cambiar el plan antes de que Bob escriba ningún código. En la interfaz de chat de Bob, introduce un prompt de seguimiento:
Update the plan to reject a task whose task_name is empty or longer than 200 characters.Bob revisa el plan para incluir la validación de entrada adicional. Revisa el plan actualizado.
Revisa el plan
Bob presenta un plan ordenado y puede guardarlo como un archivo Markdown en el proyecto. Revísalo antes de continuar:
- Alcance: el plan cubre cada endpoint y la regla de validación que añadiste, y nada que no hayas pedido.
- Archivos nombrados: cada paso nombra el archivo que crea o modifica.
- Lenguaje impreciso: frases como "gestionar los errores adecuadamente" ocultan suposiciones. Pide a Bob que las haga específicas.
Sigues siendo responsable de estas decisiones de diseño. Bob no implementa nada hasta que cambies al modo Agent en Genera y revisa la aplicación.
Genera y revisa la aplicación
Inicia una nueva ventana de contexto, cambia al modo Agent y haz que Bob implemente el plan aprobado.
Inicia una nueva ventana de contexto
Selecciona Nueva tarea en el cuadro de chat o + en la parte superior del panel de chat para iniciar una nueva ventana de contexto. Consulta Crear una nueva ventana de contexto para más información. Bob guardó el plan en la carpeta plans, por lo que ya no necesitas la conversación de planificación en el contexto. Un contexto limpio mantiene la implementación enfocada en el plan aprobado.
Cambia al modo Agent y ejecuta el plan
Abre el menú desplegable de modos en la parte inferior de la barra lateral de Bob y selecciona Agent. Luego dile a Bob que implemente el plan:
Implement the plan in the plans folder.
@plans/El modo Agent permite a Bob escribir archivos y ejecutar comandos. Bob pide aprobación antes de cada cambio porque desactivaste la aprobación automática. Aprueba los pasos mientras Bob trabaja en el plan.
Revisa la aplicación generada
Cuando la implementación esté completa, revisa el código generado. Dado que la salida de Bob es probabilística, tu estilo de código y nombres internos pueden diferir de los ejemplos mostrados aquí. La aplicación consta de las siguientes partes.
Modelos de datos. Bob genera dos modelos Pydantic: uno para el cuerpo de la solicitud al crear una tarea y otro para una tarea almacenada. El modelo de creación impone la regla de longitud que añadiste durante la planificación:
class TaskCreate(BaseModel):
task_name: Annotated[str, Field(min_length=1, max_length=200)]
class Task(BaseModel):
id: int
task_name: strLas rutas de los endpoints y los códigos de estado coinciden con los requisitos que le diste a Bob, pero los nombres de las clases de modelos y la estructura de archivos pueden variar. Este tutorial asume los modelos Task y TaskCreate. Ajusta los prompts que siguen si Bob eligió nombres diferentes.
Almacén de datos en memoria. Bob almacena las tareas en una lista de Python vacía y asigna a cada nueva tarea un id incremental:
tasks: list[dict] = []
id_counter = 0Operaciones de la API. La aplicación proporciona los siguientes endpoints:
GET /tasksPOST /tasksDELETE /tasks/{task_id}
POST /tasks toma solo task_name en el cuerpo de la solicitud y devuelve 201 con la tarea creada. DELETE /tasks/{task_id} devuelve 204 en caso de éxito y 404 cuando ninguna tarea tiene ese task_id.
Dependencias. Bob genera un archivo requirements.txt que lista FastAPI, Uvicorn y Pydantic.
Contenedor. Bob genera un Dockerfile que instala las dependencias y ejecuta la API en el puerto 8000 con Uvicorn.
El contrato HTTP sigue el prompt de requisitos, incluidos los métodos, rutas y códigos de estado. Los siguientes pasos de validación se aplican tal cual están escritos.
Añade un endpoint con codificación literaria
Usa el modo de codificación literaria para añadir un endpoint de actualización directamente desde una instrucción en lenguaje natural en el editor, sin cambiar a la ventana de chat.
El modo de codificación literaria genera código a partir de instrucciones en lenguaje natural escritas directamente en el editor.
Abre el archivo de la aplicación
Abre el archivo main.py que Bob generó y coloca el cursor en una línea vacía al final del archivo, después del último manejador de rutas.
Activa el modo de codificación literaria
Pulsa Command + I en Mac, o Ctrl + I en Windows y Linux. También puedes seleccionar el icono de varita mágica en la barra de herramientas del editor.
Escribe la instrucción
Introduce la siguiente instrucción en la línea vacía. Aparece resaltada en un color diferente al del resto del 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.Bob deduce el nombre del parámetro, el modelo de solicitud y el manejo de errores a partir del código circundante, por lo que solo especificas el método y la ruta.
Genera y acepta el código
Selecciona Generar, o pulsa Command + Enter en Mac, o Ctrl + Enter en Windows y Linux. Bob reemplaza tu instrucción con una implementación y muestra un diff en línea.
Revisa el diff, luego selecciona Aceptar todo para aplicar el cambio. Pulsa Command + I en Mac, o Ctrl + I en Windows y Linux de nuevo para salir del modo de codificación literaria.
Explica, ejecuta y valida
Pide a Bob que explique la implementación, luego ejecuta la aplicación y valida su comportamiento.
Pide a Bob que explique el código
Inicia una nueva ventana de contexto con Nueva tarea, luego selecciona Ask en el menú desplegable de modos. El modo Ask responde preguntas y analiza código sin editar archivos. Úsalo cuando quieras una explicación sin cambios.
Comprender el código generado es una parte importante de la programación en pareja con IA. Pregúntale a Bob:
Explain the generated To-Do API.Bob puede explicar la arquitectura de la aplicación, el flujo de datos, los componentes de FastAPI, los modelos Pydantic, el comportamiento de los endpoints y las decisiones de diseño. Usa la explicación para confirmar que el código hace lo que esperas antes de cambiarlo o ampliarlo.
Ejecuta la aplicación
Vuelve a cambiar al modo Agent para que Bob pueda ejecutar comandos. Pide a Bob que construya y ejecute la API en un contenedor:
Build the Docker image and run the container with port 8000 mapped to the host. Confirm the API is reachable.Bob ejecuta los comandos de construcción e inicio e informa cuando el contenedor está en ejecución.
Abre http://localhost:8000/docs en tu navegador.
FastAPI sirve una interfaz Swagger UI interactiva en /docs. Úsala para explorar cada endpoint, inspeccionar los esquemas de solicitud y respuesta, y ejecutar llamadas a la API desde el navegador.
Valida la API
Usa la Swagger UI en /docs para ejercitar cada operación. Para cada endpoint:
- Expande su fila y selecciona Try it out.
- Introduce los parámetros de ruta o el cuerpo de la solicitud necesarios.
- Selecciona Execute.
- Comprueba el código y el cuerpo de la Server response.
Añadir una tarea
-
Expande POST /tasks y selecciona Try it out.
-
Reemplaza el cuerpo de la solicitud con:
{ "task_name": "My first API item!" } -
Selecciona Execute. Confirma que el código de respuesta es
201y que el cuerpo de la respuesta muestra la tarea creada con unidasignado.
Recuperar tareas
- Expande GET /tasks y selecciona Try it out.
- Selecciona Execute. Confirma que el código de respuesta es
200y que el cuerpo de la respuesta lista la tareaMy first API item!con elidasignado cuando la añadiste.
Actualizar una tarea
-
Expande
PUT /tasks/{task_id}y selecciona Try it out. -
Introduce el
task_idde la tarea que creaste. -
Reemplaza el cuerpo de la solicitud con:
{ "task_name": "Build and ship a To-Do API" } -
Selecciona Execute. Confirma que el código de respuesta es
200y que la tarea devuelta muestra eltask_nameactualizado. -
Cambia
task_ida un valor que no exista y selecciona Execute de nuevo. Confirma que el código de respuesta es404.
Eliminar una tarea
- Expande
DELETE /tasks/{task_id}y selecciona Try it out. - Introduce el
task_idde la tarea que creaste y selecciona Execute. Confirma que el código de respuesta es204. - Expande GET /tasks, selecciona Execute y confirma que la tarea ya no aparece en la respuesta.
- Expande
DELETE /tasks/{task_id}de nuevo, introduce el mismotask_idy selecciona Execute. Confirma que el código de respuesta es404.
La implementación cumple los requisitos originales, incluido el endpoint de actualización que añadiste con la codificación literaria.
Mejora la calidad del código
Pide a Bob que revise el código generado en busca de problemas de calidad, luego aplica los cambios con los que estés de acuerdo. Este paso usa a Bob como revisor en lugar de solo como generador de código.
Pide a Bob sugerencias de mejora
Inicia una nueva ventana de contexto con Nueva tarea, luego introduce:
Review the To-Do API and suggest improvements to code quality, error handling, and HTTP status codes.Bob identifica carencias como la falta de un endpoint para recuperar una sola tarea, un almacén en memoria que guarda diccionarios simples en lugar de modelos Task validados, y un id_counter a nivel de módulo que es difícil de reiniciar o probar.
Aplica las mejoras
Pide a Bob que implemente las sugerencias que quieres conservar:
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.Revisa los cambios propuestos y aprueba para aplicarlos. Pide a Bob que reconstruya la imagen y reinicie el contenedor, luego repite los pasos de validación. Confirma que GET /tasks/{task_id} devuelve 200 con la tarea para un ID válido y 404 para un ID desconocido, y que los endpoints existentes siguen comportándose como antes.
Genera pruebas y documentación
Pide a Bob que genere un conjunto de pruebas y documentación técnica para la API.
Genera pruebas unitarias
Inicia una nueva ventana de contexto con Nueva tarea, luego pregúntale a 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.Bob añade las dependencias de prueba pytest e httpx, construye una imagen que las incluye, ejecuta el conjunto de pruebas en un contenedor e informa los resultados. Ejecutar las pruebas en un contenedor significa que no necesitas un entorno Python local. Revisa y refina las pruebas generadas.
La revisión y el mantenimiento de las pruebas generadas siguen siendo tu responsabilidad.
Genera documentación técnica
Pregúntale a Bob:
Generate technical documentation for this To-Do API.Bob puede generar una descripción general de la aplicación, la descripción de la arquitectura, resúmenes de los endpoints, ejemplos de solicitudes y respuestas, e instrucciones de uso. Esta documentación complementa la documentación de la API que FastAPI genera automáticamente.
Solución de problemas
Usa las siguientes soluciones para problemas comunes:
- Cannot connect to the Docker daemon: Inicia Docker Desktop o el servicio Docker antes de construir la imagen.
- The container starts but
http://localhost:8000/docsdoes not load: El Dockerfile vincula la API a127.0.0.1dentro del contenedor, a la que el puerto publicado no puede acceder. Asegúrate de que el Dockerfile inicie Uvicorn con--host 0.0.0.0, luego reconstruye la imagen. - Bind for 0.0.0.0:8000 failed: port is already allocated: Detén el proceso que usa el puerto
8000, o mapea otro puerto del host condocker run -d --name todo-api -p 8080:8000 todo-apiy abrehttp://localhost:8080/docs. - The container name "/todo-api" is already in use: Ejecuta
docker rm -f todo-apiy luego inicia el contenedor de nuevo. - pytest is missing when the tests run: La imagen de la aplicación no incluye dependencias de prueba. Pide a Bob que añada
pytestehttpxa un archivo de requisitos de desarrollo y construya una imagen de prueba separada.
Limpieza
Detén y elimina el contenedor para liberar el puerto 8000:
docker rm -f todo-apiElimina la imagen cuando termines:
docker rmi todo-apiTambién puedes pedirle a Bob que limpie:
Stop and remove the To-Do API and test container and image.La API mantiene las tareas solo en memoria, por lo que eliminar el contenedor descarta todos los datos. No hay nada más que limpiar.
Próximos pasos
En este tutorial, construiste y validaste una API To-Do con FastAPI en contenedor trabajando en pareja con Bob en cada etapa y revisando cada cambio antes de aplicarlo.
- Avanza a Planificar e implementar funcionalidades complejas para definir el alcance de cambios más grandes y de múltiples capas.
- Explora Crear un commit y pull request para llevar el código generado desde tu editor hasta un pull request.
Preguntas frecuentes
¿Necesito conocer FastAPI? No. Bob genera el código de FastAPI y Pydantic y lo explica a petición. Con conocimientos básicos de Python y REST es suficiente.
¿Por qué cambiar de modo entre etapas? Los modos aplican el mínimo privilegio. El modo Plan lee código y escribe un plan pero no ejecuta nada; el modo Agent puede editar archivos y ejecutar comandos; el modo Ask responde preguntas sin cambiar archivos. Cambiar de modo mantiene las capacidades de Bob ajustadas a la tarea en cuestión.
¿Qué pasa si Bob nombra los archivos o modelos de forma diferente?
El contrato HTTP está fijado por el prompt de requisitos, por lo que las rutas y los códigos de estado coinciden. Los nombres de clases y la estructura de archivos pueden variar. Este tutorial asume los modelos Task y TaskCreate; ajusta los prompts posteriores si Bob eligió otros nombres.
¿Por qué iniciar una nueva ventana de contexto en cada etapa?
Bob guarda el plan en la carpeta plans, por lo que la conversación anterior ya no es necesaria en el contexto. Un contexto limpio mantiene cada etapa enfocada y controla el coste de tokens.
¿Puedo hacer esto sin Docker? Técnicamente puedes hacer este tutorial sin Docker, pero tendrás que editar el plan y los prompts para Bob.
¿El modo Plan cambia archivos? No. En el modo Plan, Bob solo lee tu código y escribe un plan en Markdown. No se realizan cambios en el código de la aplicación hasta que cambias al modo Agent.