Przejdź do głównej zawartości

Utwórz szablon potoku

Szablony potoków tworzy się w ustawieniach obszaru roboczego. Pozycja Potoki w pasku bocznym obszaru roboczego to kolejka uruchomień, a nie lista szablonów — nie ma tam akcji „utwórz szablon”.

Co oznacza każdy rodzaj kroku, każdy klucz treści i każde pole konfiguracji, opisuje dokumentacja referencyjna rodzajów kroków potoku.

  1. Przejdź do Ustawienia → Obszar roboczy → Szablony potoków (/workspaces/<workspace-id>/settings/pipelines).
  2. Naciśnij Nowy szablon.

Nie ma okna dialogowego z identyfikatorem. Edytor otwiera się od razu na przygotowanym szkielecie o nazwie Nowy potok, z automatycznie przydzielonym identyfikatorem (pipeline_1, potem pipeline_2, …). Kliknij tytuł w nagłówku, aby go zmienić.

Kanwa nie jest pusta: węzeł wejściowy Trigger, jeden węzeł agenta promptowego z etykietą Step oraz końcowy wartownik, który zamyka uruchomienie. Wartownik nie jest rysowany. Edytor przepina tego ukrytego wartownika na każde osiągalne ujście, więc praca dołączona po Step i tak się wykona.

Pasek boczny Biblioteka węzłów znajduje się na stałe po lewej stronie edytora. Filtruj go polem Szukaj węzłów i przeciągnij pozycję na kanwę — węzeł wyląduje tam, gdzie go upuścisz, bez połączenia przychodzącego.

Węzeł palety Rodzaj kroku Co robi
Bash script listen Uruchamia skrypt powłoki z podstawianiem {{state}}; agent nie jest wysyłany
Open conversation listen Otwiera jedną widoczną przestrzeń uruchomienia i jej checkout; węzły agentów dołączają do tego pokoju
Clone PR branch listen Odnajduje gałąź źródłową PR przez gh pr view i klonuje ją do katalogu uruchomienia
Post PR comment listen Publikuje scalone ustalenia w PR jako komentarz recenzji GitHub
Reviewer (prompt) listen Wysyła wyspecjalizowanego agenta recenzenta; wstrzymuje krok, aż agent zgłosi swój wynik
Consolidate (join) join Czeka na kilka gałęzi nadrzędnych, a następnie prosi agenta o scalenie ich wyników
Custom prompt listen Ogólny węzeł sterowany promptem, kierowany przez treść promptAgent
Post to space listen Wysyła wiadomość do przestrzeni wiadomości
Condition / switch (router) router Rozgałęzia przepływ według wartości stanu
If file exists (router) router Kieruje "true", gdy ścieżka istnieje pod klonem, w przeciwnym razie "false"
Any file exists (OR router) router Kieruje "true", gdy istnieje dowolna z wymienionych ścieżek
All conditions (AND router) router Kieruje "true" tylko wtedy, gdy istnieje każda z wymienionych ścieżek
Team dispatch listen Wysyła cały zespół i wstrzymuje krok, aż ten zakończy pracę
Approval gate listen Wstrzymuje przepływ w oczekiwaniu na decyzję o zatwierdzeniu
For each (map) forEach Renderuje prompt dla każdego elementu, a następnie wysyła agenta raz z tymi promptami połączonymi
Call sub-pipeline listen Uruchamia inny szablon jako zagnieżdżony krok
Clean up worktrees listen Usuwa nieaktualne izolowane drzewa robocze; deterministycznie, bez wysyłania agenta

Biblioteka grupuje je pod Przepływ i logika, Przegląd PR, Agenci, Wiadomości i Kod. Grupy Demo nie ma.

Każdy węzeł pracy ma na prawej krawędzi okrągły port wyjściowy. Przeciągnij z tego portu na inny węzeł, aby je połączyć. Wyzwalacze startowe działają tak samo: każdy ma własny port, więc połączenie z Harmonogram nie wychodzi również z Uruchomienie ręczne. Naciśnij Dodaj krok (+) tuż za węzłem, aby wstawić za nim typ. Najedź na środek istniejącej krawędzi i naciśnij ×, aby ją odłączyć.

Połączenia edytuje się też z węzła, który je odbiera:

  1. Wybierz węzeł podrzędny. Jego panel konfiguracji otworzy się po prawej.
  2. Przewiń do Triggers from i stuknij znacznik każdego węzła nadrzędnego, którego ten ma słuchać. Stuknięcie wybranego znacznika usuwa połączenie.
  3. Jeśli węzeł nadrzędny jest routerem, pod znacznikami pojawia się blok Klucze routingu z jednym polem Klucz routingu z <węzeł> na każdą krawędź routera. Wpisz klucz, na który ta krawędź się uruchamia — true lub false dla routerów „plik istnieje”, albo nazwę przypadku dla przełącznika.

Każdy węzeł wyzwalacza jest punktem wejścia. Węzeł może słuchać kilku elementów nadrzędnych (fan-in) i zasilać kilka elementów podrzędnych (fan-out), a graf musi pozostać acykliczny — nic w edytorze nie powstrzymuje przed połączeniem cyklu, więc sprawdź swoją pracę.

Końcowy wartownik jest odfiltrowany z kanwy, więc nie można go wybrać. Edytor przepina go na każde osiągalne ujście przy każdej zmianie grafu, więc praca dołączona po początkowym Step i tak się wykona. Pusty graf (wyzwalacz bez następników pracy) wymienia sam wyzwalacz, aby uruchomienie zakończyło się natychmiast.

Wybierz węzeł, aby otworzyć jego panel konfiguracji. To, które pola się pojawią, zależy od treści węzła.

Każdy węzeł ma Etykietę, Klucze wejściowe (oddzielone przecinkami klucze stanu odczytywane w czasie wykonania) oraz w sekcji Zaawansowane pole Reducer, Limit czasu (ms), Liczba ponownych prób, Kontynuuj, jeśli ten krok się nie powiedzie i Schemat wyjściowy (JSON). Węzły typu listen i join mogą też przełączać swój Rodzaj między tymi dwoma.

Dodaje selektor Repozytoria do sklonowania (które repozytoria obszaru roboczego wyewidencjonować; puste oznacza żadne), pole Nazwa przestrzeni oraz pole wyboru Otwórz w nim rozmowę. Gdy to pole jest zaznaczone, pole Nazwa rozmowy nazywa strumień, od którego pokój się otwiera. Węzły agentów dołączają do tego pokoju — nie otwierają własnego.

Dodaje Agent (którego agenta wysłać), Szablon promptu (użyj {{key}}, aby odnieść się do danych wejściowych lub wyników nadrzędnych) oraz Klucz wyjściowy.

Limit czasu (ms) jest podawany w milisekundach, a nie w sekundach — 900000 to 15 minut. Wpisanie 900 daje krokowi 0,9 sekundy.

Tryb rozmowy, w którym działa węzeł agenta promptowego, nie ma pola w edytorze na węźle agenta. Podróżuje w extras['mode'] (chat, plan lub review) na węźle Open conversation, który utworzył pokój (domyślnie review). Ustawienie go na kroku agenta jest ignorowane. Klucz jest dopasowywany dokładnie: każda inna pisownia jest po cichu ignorowana.

Dodaje pole Skrypt bash. Nie ma pól katalogu roboczego ani środowiska, bo żadne z nich nie jest konfigurowalne:

  • Każdy krok bash w uruchomieniu dzieli katalog roboczy <cc_root>/pipelines/<runId>/.
  • GITHUB_TOKEN jest wstrzykiwany z magazynu poświadczeń, więc gh i git clone https://x-access-token:$GITHUB_TOKEN@… działają bez dodatkowej konfiguracji.
  • Skrypt jest uruchamiany jako dosłowny plik wykonywalny bash, więc bash musi znajdować się w PATH hosta serwera. To kwestia systemu Windows.

Router ocenia warunek i zwraca klucz trasy; silnik uruchamia tylko tę krawędź podrzędną, której klucz trasy pasuje, a pozostałe gałęzie oznacza jako pominięte.

Wybranie routera zastępuje pole Klucz wyjściowy edytorem warunku. Wybierz jeden z jego czterech trybów:

  • Plik(i) istnieją — dowolny — kieruje "true", gdy istnieje dowolna z wymienionych ścieżek.
  • Pliki istnieją — wszystkie — kieruje "true" tylko wtedy, gdy istnieje każda z wymienionych ścieżek.
  • Porównanie — porównuje wartość stanu z literałem.
  • Przełącznik — kieruje według wartości klucza stanu, z przypadkiem domyślnym.

Następnie ustaw pasujące klucze tras na krawędziach wychodzących (zobacz Połącz węzły).

Grupy logiczne and / or / not są obsługiwane przez treść, ale nie można ich utworzyć z tego formularza — wymagają ręcznie napisanego drzewa predykatów pod extras.predicate. Pełny słownik predykatów i operatorów znajduje się w dokumentacji referencyjnej rodzajów kroków potoku.

Brak własnej konfiguracji: czeka na wszystkie swoje kroki nadrzędne.

Bramka wysyła agenta zatwierdzającego do ukrytej rozmowy z promptem bramki i wstrzymuje krok. Zatwierdzający uzyskuje Twoją decyzję w rozmowie i zgłasza ją przez submit_output jako { "decision": "approved" | "rejected", "reason": "..." }. Decyzja trafia pod klucz wyjściowy (domyślnie approval_decision), więc podrzędny router przełącznika może na niej rozgałęzić.

Ustaw Agent na zatwierdzającego, a Szablon promptu na pytanie bramki. Bramka rozwiązuje się przez submit_output jako { "decision": "approved" | "rejected", "reason": "..." }. Węzły Reviewer (prompt) zgłaszają w ten sam sposób.

Dodaje ID zespołu i Tryb wysyłania. Selektor oferuje dokładnie dwa tryby:

  • allParallel — jedno zadanie na członka, wstrzymuje krok, aż wszystkie się zakończą.
  • manager — wysyła lidera, który deleguje.

Każda inna zapisana wartość zachowuje się jak allParallel. Ustaw Reducer na append, aby zebrać wynik każdego członka w listę pod kluczem wyjściowym.

For each domyślnie iteruje po kluczu stanu items (extras.iterableKey / extras.itemKey na węźle). Renderuje swój prompt raz na element ({{item}} domyślnie) i wysyła agenta raz z tymi promptami połączonymi. Pusta kolekcja kończy się natychmiast z pustą listą. To nie jest jedno równoległe wysłanie na element.

Call sub-pipeline wstrzymuje krok, aż uruchomienie podrzędne osiągnie stan końcowy, a następnie scala jego stan końcowy pod kluczem wyjściowym (domyślnie subflow_result). Wskaż je przez extras.templateId. Szablon nie może wywołać samego siebie; nieudane lub anulowane uruchomienie podrzędne powoduje niepowodzenie kroku nadrzędnego, który następnie stosuje politykę ponownych prób i kontynuacji po niepowodzeniu tego kroku.

Zadeklaruj dane wejściowe i zezwól na ręczne uruchomienia

Dział zatytułowany „Zadeklaruj dane wejściowe i zezwól na ręczne uruchomienia”

Oba znajdują się za przyciskiem Ręczne uruchamianie w nagłówku edytora.

  1. Naciśnij Ręczne uruchamianie.
  2. Włącz Zezwól na ręczne uruchamianie. Ten przełącznik zapisuje się od razu — tworzy (lub usuwa) wiersz wyzwalacza manual, dzięki któremu szablon pojawia się na stronie uruchamiania.
  3. Ustaw Maks. równoległych uruchomień, jeśli chcesz limit (zostaw puste, aby nie ograniczać). Nadmiarowe uruchomienia czekają w stanie queued, aż zwolni się miejsce.
  4. Naciśnij Dodaj pole dla każdego pola formularza, które ma zbierać ręczne uruchomienie:
Pole Opis
Klucz Klucz stanu, pod którym zapisywana jest wartość; odwołaj się do niego jako {{key}}
Etykieta Etykieta wyświetlana (domyślnie klucz)
Typ Tekst, Tekst wielowierszowy, Liczba, Przełącznik, Lista wyboru, Repozytorium
Opcje Opcje oddzielone przecinkami, tylko dla Listy wyboru
Wartość domyślna Wartość wstępnie wypełniona
Tekst zastępczy Tekst podpowiedzi wewnątrz pustego pola
Tekst pomocy Tekst pomocniczy pod polem
Wymagane Czy formularz uruchomienia blokuje się przy pustej wartości

Pole Repozytorium renderuje selektor repozytoriów obszaru roboczego i zapisuje repo_id, repo_local_path, repo_full_name, a — gdy repozytorium ma zdalne GitHub — także repo_owner i repo_name do danych uruchomienia.

  1. Naciśnij Zapisz w oknie dialogowym. Zmiany pól wejściowych są zwijane do wersji roboczej; zostają zachowane, gdy zapiszesz szablon.
  1. Naciśnij Zapisz w nagłówku edytora. Do tego czasu nagłówek pokazuje „Niezapisane zmiany”.
  2. Wróć do Ustawienia → Obszar roboczy → Szablony potoków i sprawdź, czy przełącznik w wierszu szablonu jest włączony. Silnik odmawia uruchomienia wyłączonego szablonu, a wyłączony szablon nigdy nie pojawia się na stronie uruchamiania.
  3. Aby uruchamiał się automatycznie, przeciągnij wyzwalacz z biblioteki węzłów na kanwę — zobacz Skonfiguruj wyzwalacze potoków.