Programowanie w parze z AI z IBM Bob
Użyj Boba jako asystenta AI do programowania w parze i zbuduj FastAPI To-Do API, pracując od wymagań przez plan, wygenerowany kod, testy i dokumentację.
Programowanie w parze z AI polega na budowaniu oprogramowania razem z asystentem, który pomaga na każdym etapie planowania, kodowania, testowania i dokumentowania, a nie tylko uzupełnia wiersze kodu. W tym samouczku tworzysz z IBM Bobem FastAPI To-Do API na podstawie zestawu wymagań.
Zaczynasz od wymagań i przechodzisz przez zatwierdzony plan, wygenerowany kod, wyjaśnienie implementacji, poprawki jakości kodu, testy jednostkowe i dokumentację techniczną. Dane są przechowywane w pamięci operacyjnej w liście Pythona, więc nie ma potrzeby konfigurowania bazy danych.
Po ukończeniu tego samouczka będziesz mieć działające skonteneryzowane To-Do API i przećwiczysz pętlę weryfikacji przy programowaniu w parze na każdym etapie: plan, generowanie, wyjaśnianie, refaktoryzacja, testowanie i dokumentowanie.
Ten samouczek jest przeznaczony dla programistów, którzy znają podstawy Pythona i koncepcje REST i chcą powtarzalnej pętli weryfikacji do budowania oprogramowania z asystentem AI. Znajomość FastAPI nie jest wymagana.
Ten samouczek obejmuje pełną pętlę budowania od początku do końca w nowym projekcie. Aby zagłębić się w planowanie i implementację dużej funkcji w istniejącej bazie kodu, zobacz Plan and implement complex features.
Wymagania wstępne
Do ukończenia tego samouczka potrzebujesz:
- Zainstalowanego i skonfigurowanego Bob IDE.
- Znajomości samouczka Use literate coding to generate code from comments.
- Ukończenia samouczka Create a new context window, dzięki czemu możesz zarządzać kontekstem Boba w tym wieloetapowym przepływie pracy.
- Zainstalowanego i uruchomionego Dockera na twoim komputerze. Bob generuje Dockerfile, dzięki któremu możesz zbudować i uruchomić API w kontenerze bez lokalnej instalacji Pythona i jego zależności.
- Podstawowej znajomości Pythona.
- Podstawowej znajomości REST API. Nie potrzebujesz wcześniejszego doświadczenia z FastAPI. Bob generuje kod FastAPI i wyjaśnia go na żądanie w ramach przepływu pracy.
Zrozumieć programowanie w parze z AI z Bobem
Każdy kolejny etap obejmuje planowanie, generowanie, wyjaśnianie, refaktoryzację, testy i dokumentację. Na każdym etapie Bob proponuje zmiany, a ty zatwierdzasz, odrzucasz lub modyfikujesz je, zanim Bob je zastosuje.
Przepływ pracy programowania w parze
Ten samouczek korzysta z następującego przepływu pracy:
Wymagania
↓
Bob tworzy plan
↓
Przeglądasz i dopracowujesz plan
↓
Bob generuje kod
↓
Przeglądasz wynik
↓
Uruchamiasz i weryfikujesz
↓
Bob wyjaśnia implementację
↓
Bob sugeruje poprawki jakości kodu
↓
Generowanie testów
↓
Generowanie dokumentacjiSkonfiguruj swoje środowisko pracy
Uruchom Boba, otwórz pusty folder projektu i skonfiguruj Boba tak, aby prosił o zatwierdzenie przed wprowadzeniem zmian w plikach.
Uruchom IBM Bob
Uruchom IBM Bob IDE.
Otwórz interfejs czatu Boba
Jeśli interfejs czatu Boba nie jest widoczny, otwórz go, wybierając ikonę Boba obok paska nawigacyjnego. Możesz też nacisnąć Option + Command + B na Macu lub Ctrl + Alt + B na Windows i Linux.

Otwórz pusty folder projektu
Utwórz pusty folder o nazwie todo-api, a następnie otwórz go w Bobie za pomocą File > Open Folder. Jeśli Bob zapyta, czy ufasz autorom plików w tym folderze, wybierz Yes, I trust the authors.
Bob zapisuje wygenerowaną aplikację w tym folderze. Do tego samouczka nie potrzebujesz istniejącego repozytorium.
Wyłącz automatyczne zatwierdzanie
Otwórz Permissions i upewnij się, że automatyczne zatwierdzanie jest wyłączone. Gdy automatyczne zatwierdzanie jest wyłączone, Bob prosi o twoje pozwolenie przed odczytem plików, edycją plików lub uruchamianiem poleceń. Pozostajesz w kontroli nad każdą zmianą w tym samouczku.
Zdefiniuj wymagania i plan
Przekaż Bobowi wymagania dotyczące To-Do API, a następnie przejrzyj proponowany plan zanim Bob napisze jakikolwiek kod.
Przejdź do trybu Plan
Otwórz menu rozwijane trybów na dole paska bocznego Boba i wybierz Plan.

Tryby stosują zasadę najmniejszych uprawnień. W trybie Plan Bob odczytuje twój kod i tworzy plan w formacie Markdown. Bob nie uruchamia poleceń ani nie wprowadza zmian implementacyjnych. Przeglądasz podejście zanim Bob napisze jakikolwiek kod aplikacji.
Zdefiniuj wymagania aplikacji
W interfejsie czatu Boba wpisz następujący 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.Aby zbudować plan, Bob uruchamia swoją skill planowania. Gdy zostaniesz o to poproszony, wybierz Approve skill tools for task i Approve subagent tools for task, aby Bob mógł zbadać workspace i przygotować plan.
Doprecyzuj plan
Możesz zmienić plan zanim Bob napisze jakikolwiek kod. W interfejsie czatu Boba wpisz następujący prompt uzupełniający:
Update the plan to reject a task whose task_name is empty or longer than 200 characters.Bob modyfikuje plan, aby uwzględnić dodatkową walidację danych wejściowych. Przejrzyj zaktualizowany plan.
Przejrzyj plan
Bob prezentuje uporządkowany plan i może zapisać go jako plik Markdown w projekcie. Przejrzyj go przed kontynuowaniem:
- Zakres: plan obejmuje każdy endpoint i regułę walidacji, którą dodałeś, i nic, o co nie prosiłeś.
- Nazwane pliki: każdy krok wskazuje plik, który tworzy lub zmienia.
- Niejasny język: frazy takie jak „handle errors appropriately" ukrywają założenia. Poproś Boba o doprecyzowanie.
Pozostajesz odpowiedzialny za te decyzje projektowe. Bob nie implementuje niczego dopóki nie przełączysz się na tryb Agent w sekcji Wygeneruj i przejrzyj aplikację.
Wygeneruj i przejrzyj aplikację
Rozpocznij nowe okno kontekstowe, przełącz się na tryb Agent i poleć Bobowi zaimplementowanie zatwierdzonego planu.
Rozpocznij nowe okno kontekstowe
Wybierz New task w polu czatu lub + na górze panelu czatu, aby rozpocząć nowe okno kontekstowe. Zapoznaj się z Create a new context window w celu uzyskania szczegółów. Bob zapisał plan w folderze plans, więc nie potrzebujesz już rozmowy planistycznej w kontekście. Czysty kontekst koncentruje implementację na zatwierdzonym planie.
Przejdź do trybu Agent i uruchom plan
Otwórz menu rozwijane trybów na dole paska bocznego Boba i wybierz Agent. Następnie powiedz Bobowi, żeby zaimplementował plan:
Implement the plan in the plans folder.
@plans/Tryb Agent pozwala Bobowi zapisywać pliki i uruchamiać polecenia. Bob prosi o zatwierdzenie przed każdą zmianą, ponieważ wyłączyłeś automatyczne zatwierdzanie. Zatwierdzaj kolejne kroki, gdy Bob realizuje plan.
Przejrzyj wygenerowaną aplikację
Gdy implementacja jest gotowa, przejrzyj wygenerowany kod. Ponieważ dane wyjściowe Boba mają charakter probabilistyczny, styl kodu i wewnętrzne nazwy mogą różnić się od przykładów pokazanych tutaj. Aplikacja składa się z następujących części.
Modele danych. Bob generuje dwa modele Pydantic: jeden dla ciała żądania przy tworzeniu zadania i jeden dla przechowywanego zadania. Model tworzenia wymusza regułę długości, którą dodałeś podczas planowania:
class TaskCreate(BaseModel):
task_name: Annotated[str, Field(min_length=1, max_length=200)]
class Task(BaseModel):
id: int
task_name: strŚcieżki endpointów i kody statusu odpowiadają wymaganiom, które podałeś Bobowi, ale nazwy klas modeli i układ plików mogą się różnić. Ten samouczek zakłada modele Task i TaskCreate. Dostosuj kolejne prompty, jeśli Bob wybrał inne nazwy.
In-memory data store. Bob przechowuje zadania w pustej liście Pythona i przypisuje każdemu nowemu zadaniu rosnące id:
tasks: list[dict] = []
id_counter = 0Operacje API. Aplikacja udostępnia następujące endpointy:
GET /tasksPOST /tasksDELETE /tasks/{task_id}
POST /tasks przyjmuje tylko task_name w ciele żądania i zwraca 201 z utworzonym zadaniem. DELETE /tasks/{task_id} zwraca 204 w przypadku powodzenia i 404, gdy żadne zadanie nie ma podanego task_id.
Zależności. Bob generuje plik requirements.txt zawierający FastAPI, Uvicorn i Pydantic.
Kontener. Bob generuje Dockerfile, który instaluje zależności i uruchamia API na porcie 8000 z Uvicornem.
Kontrakt HTTP odpowiada promptowi z wymaganiami, w tym metodom, ścieżkom i kodom statusu. Poniższe kroki weryfikacji mają zastosowanie w takiej formie, w jakiej są napisane.
Dodaj endpoint za pomocą literate coding
Użyj trybu literate coding, aby dodać endpoint aktualizacji bezpośrednio z instrukcji w języku naturalnym w edytorze, bez przełączania się do okna czatu.
Tryb literate coding generuje kod z instrukcji w języku naturalnym napisanych bezpośrednio w edytorze.
Otwórz plik aplikacji
Otwórz plik main.py wygenerowany przez Boba i umieść kursor w pustym wierszu na końcu pliku, po ostatnim handlerze route.
Aktywuj tryb literate coding
Naciśnij Command + I na Macu lub Ctrl + I na Windows i Linux. Możesz też wybrać ikonę różdżki na pasku narzędzi edytora.
Napisz instrukcję
Wpisz następującą instrukcję w pustym wierszu. Wyświetla się ona podświetlona innym kolorem niż reszta kodu.
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 wywnioskuje nazwę parametru, model żądania i obsługę błędów z otaczającego kodu, więc podajesz tylko metodę i ścieżkę.
Wygeneruj i zaakceptuj kod
Kliknij Generate lub naciśnij Command + Enter na Macu albo Ctrl + Enter na Windows i Linux. Bob zastępuje twoją instrukcję implementacją i pokazuje diff inline.
Przejrzyj diff, a następnie kliknij Accept All, aby zastosować zmianę. Naciśnij ponownie Command + I na Macu lub Ctrl + I na Windows i Linux, aby wyjść z trybu literate coding.
Wyjaśnij, uruchom i zweryfikuj
Poproś Boba o wyjaśnienie implementacji, a następnie uruchom aplikację i sprawdź jej działanie.
Poproś Boba o wyjaśnienie kodu
Rozpocznij nowe okno kontekstowe za pomocą New task, a następnie wybierz Ask z menu trybów. Tryb Ask odpowiada na pytania i analizuje kod bez edytowania plików. Używaj go, gdy chcesz wyjaśnienia bez wprowadzania zmian.
Rozumienie wygenerowanego kodu jest ważną częścią programowania w parze z AI. Zapytaj Boba:
Explain the generated To-Do API.Bob może wyjaśnić architekturę aplikacji, przepływ danych, komponenty FastAPI, modele Pydantic, zachowanie endpointów i decyzje projektowe. Użyj wyjaśnienia, aby potwierdzić, że kod robi to, czego oczekujesz, zanim go zmienisz lub rozszerzysz.
Uruchom aplikację
Przełącz się z powrotem na tryb Agent, aby Bob mógł uruchamiać polecenia. Poproś Boba o zbudowanie i uruchomienie API w kontenerze:
Build the Docker image and run the container with port 8000 mapped to the host. Confirm the API is reachable.Bob uruchamia polecenia build i start i raportuje, gdy kontener działa.
Otwórz http://localhost:8000/docs w przeglądarce.
FastAPI udostępnia interaktywny Swagger UI pod adresem /docs. Użyj go, aby eksplorować każdy endpoint, sprawdzać schematy żądań i odpowiedzi oraz wykonywać wywołania API z poziomu przeglądarki.
Zweryfikuj API
Użyj Swagger UI pod adresem /docs, aby przetestować każdą operację. Dla każdego endpointu:
- Rozwiń jego wiersz i kliknij Try it out.
- Wpisz parametry ścieżki lub ciało żądania.
- Kliknij Execute.
- Sprawdź kod i treść Server response.
Dodaj zadanie
-
Rozwiń POST /tasks i kliknij Try it out.
-
Zastąp ciało żądania następującym:
{ "task_name": "My first API item!" } -
Kliknij Execute. Upewnij się, że kod odpowiedzi to
201, a treść odpowiedzi pokazuje utworzone zadanie z przypisanymid.
Pobierz zadania
- Rozwiń GET /tasks i kliknij Try it out.
- Kliknij Execute. Upewnij się, że kod odpowiedzi to
200, a treść odpowiedzi zawiera zadanieMy first API item!zidprzypisanym podczas dodawania.
Zaktualizuj zadanie
-
Rozwiń
PUT /tasks/{task_id}i kliknij Try it out. -
Wpisz
task_idzadania, które utworzyłeś. -
Zastąp ciało żądania następującym:
{ "task_name": "Build and ship a To-Do API" } -
Kliknij Execute. Upewnij się, że kod odpowiedzi to
200, a zwrócone zadanie pokazuje zaktualizowaną wartośćtask_name. -
Zmień
task_idna nieistniejącą wartość i ponownie kliknij Execute. Upewnij się, że kod odpowiedzi to404.
Usuń zadanie
- Rozwiń
DELETE /tasks/{task_id}i kliknij Try it out. - Wpisz
task_idzadania, które utworzyłeś, i kliknij Execute. Upewnij się, że kod odpowiedzi to204. - Rozwiń GET /tasks, kliknij Execute i upewnij się, że zadanie nie pojawia się już w odpowiedzi.
- Rozwiń ponownie
DELETE /tasks/{task_id}, wpisz ten samtask_idi kliknij Execute. Upewnij się, że kod odpowiedzi to404.
Implementacja spełnia pierwotne wymagania — w tym endpoint aktualizacji dodany za pomocą literate coding.
Popraw jakość kodu
Poproś Boba o przegląd wygenerowanego kodu pod kątem problemów z jakością, a następnie zastosuj zmiany, z którymi się zgadzasz. Ten krok używa Boba jako recenzenta, a nie tylko generatora kodu.
Poproś Boba o sugestie poprawek
Rozpocznij nowe okno kontekstowe za pomocą New task, a następnie wpisz:
Review the To-Do API and suggest improvements to code quality, error handling, and HTTP status codes.Bob identyfikuje braki, takie jak brakujący endpoint do pobrania pojedynczego zadania, in-memory store przechowujący zwykłe słowniki zamiast zwalidowanych modeli Task oraz id_counter na poziomie modułu, który trudno zresetować lub przetestować.
Zastosuj poprawki
Poproś Boba o zaimplementowanie sugestii, które chcesz zachować:
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.Przejrzyj proponowane zmiany i zatwierdź ich zastosowanie. Poproś Boba o przebudowanie obrazu i ponowne uruchomienie kontenera, a następnie powtórz kroki weryfikacji. Upewnij się, że GET /tasks/{task_id} zwraca 200 z zadaniem dla prawidłowego ID i 404 dla nieznanego ID, oraz że istniejące endpointy nadal działają jak wcześniej.
Wygeneruj testy i dokumentację
Poproś Boba o wygenerowanie zestawu testów i dokumentacji technicznej dla API.
Wygeneruj testy jednostkowe
Rozpocznij nowe okno kontekstowe za pomocą New task, a następnie zapytaj Boba:
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 dodaje zależności testowe pytest i httpx, buduje obraz, który je zawiera, uruchamia zestaw testów w kontenerze i raportuje wyniki. Uruchamianie testów w kontenerze oznacza, że nie potrzebujesz lokalnego środowiska Pythona. Przejrzyj i dopracuj wygenerowane testy.
Przeglądanie i utrzymywanie wygenerowanych testów pozostaje twoją odpowiedzialnością.
Wygeneruj dokumentację techniczną
Zapytaj Boba:
Generate technical documentation for this To-Do API.Bob może wygenerować przegląd aplikacji, opis architektury, podsumowania endpointów, przykłady żądań i odpowiedzi oraz instrukcje użytkowania. Ta dokumentacja uzupełnia dokumentację API generowaną automatycznie przez FastAPI.
Rozwiązywanie problemów
Skorzystaj z poniższych rozwiązań dla typowych problemów:
- Cannot connect to the Docker daemon: Uruchom Docker Desktop lub usługę Docker przed zbudowaniem obrazu.
- The container starts but
http://localhost:8000/docsdoes not load: Dockerfile wiąże API z127.0.0.1wewnątrz kontenera, co jest nieosiągalne przez opublikowany port. Upewnij się, że Dockerfile uruchamia Uvicorn z--host 0.0.0.0, a następnie przebuduj obraz. - Bind for 0.0.0.0:8000 failed: port is already allocated: Zatrzymaj proces korzystający z portu
8000lub zmapuj inny port hosta za pomocądocker run -d --name todo-api -p 8080:8000 todo-apii otwórzhttp://localhost:8080/docs. - The container name "/todo-api" is already in use: Uruchom
docker rm -f todo-api, a następnie ponownie uruchom kontener. - pytest is missing when the tests run: Obraz aplikacji nie zawiera zależności testowych. Poproś Boba o dodanie
pytestihttpxdo pliku dev requirements i zbudowanie osobnego obrazu testowego.
Sprzątanie
Zatrzymaj i usuń kontener, aby zwolnić port 8000:
Stop and remove the To-Do API and test container and image.API przechowuje zadania wyłącznie w pamięci, więc usunięcie kontenera usuwa wszystkie dane. Nie ma nic więcej do posprzątania.
Kolejne kroki
W tym samouczku zbudowałeś i zweryfikowałeś skonteneryzowane FastAPI To-Do API, pracując z Bobem na każdym etapie i przeglądając każdą zmianę przed jej zastosowaniem.
- Przejdź do Plan and implement complex features, aby zaplanować większe, wielowarstwowe zmiany.
- Zapoznaj się z Create a commit and pull request, aby przenieść wygenerowany kod z edytora do pull request.
FAQ
Czy muszę znać FastAPI? Nie. Bob generuje kod FastAPI i Pydantic i wyjaśnia go na żądanie. Wystarczy podstawowa znajomość Pythona i REST.
Dlaczego przełączać tryby między etapami? Tryby stosują zasadę najmniejszych uprawnień. Tryb Plan odczytuje kod i tworzy plan, ale niczego nie uruchamia; tryb Agent może edytować pliki i uruchamiać polecenia; tryb Ask odpowiada na pytania bez zmiany plików. Przełączanie dopasowuje możliwości Boba do bieżącego zadania.
Co jeśli Bob nada plikom lub modelom inne nazwy?
Kontrakt HTTP jest określony przez prompt z wymaganiami, więc ścieżki i kody statusu będą zgodne. Nazwy klas i układ plików mogą się różnić. Ten samouczek zakłada modele Task i TaskCreate; dostosuj kolejne prompty, jeśli Bob wybrał inne nazwy.
Dlaczego zaczynać nowe okno kontekstowe na każdym etapie?
Bob zapisuje plan w folderze plans, więc wcześniejsza rozmowa nie jest już potrzebna w kontekście. Czysty kontekst utrzymuje skupienie każdego etapu i kontroluje koszt tokenów.
Czy mogę wykonać ten samouczek bez Dockera? Technicznie możesz wykonać ten samouczek bez Dockera, ale będziesz musiał edytować plan i prompty do Boba.
Czy tryb Plan zmienia pliki? Nie. W trybie Plan Bob odczytuje twój kod i tworzy wyłącznie plan w formacie Markdown. Żaden kod aplikacji nie zmienia się, dopóki nie przełączysz się na tryb Agent.