Wersjonowanie agenta

Bezpiecznie eksperymentuj z konfiguracjami agenta, używając gałęzi, wersji i wdrażania ruchu

Wersjonowanie agenta pozwala eksperymentować z różnymi konfiguracjami agenta bez ryzyka dla konfiguracji produkcyjnej. Twórz odizolowane gałęzie, testuj zmiany i stopniowo wdrażaj aktualizacje przez procentowy podział ruchu.

Chcesz uruchomić testy A/B? Zobacz Eksperymenty, aby poznać zalecany workflow testowania zmian agenta na rzeczywistym ruchu.

Omówienie

System wersjonowania oferuje:

  • Niezmienne migawki konfiguracji agenta w dowolnym momencie
  • Odizolowane gałęzie do testowania zmian przed wdrożeniem
  • Podział ruchu, aby stopniowo wdrażać zmiany dla części użytkowników
  • Scalanie, aby przenosić zmiany z dowolnej gałęzi do każdej innej
  • Rebase, aby pobierać najnowsze zmiany z gałęzi głównej do gałęzi

Po włączeniu wersjonowania dla agenta nie można go wyłączyć. Weź to pod uwagę przed włączeniem wersjonowania w istniejących agentach.

Kluczowe pojęcia

Wersje

Wersja to niezmienna migawka konfiguracji agenta w określonym momencie. Każda wersja ma unikalne ID (format: agtvrsn_xxxx) i zawiera:

  • conversation_config - Prompt systemowy, ustawienia LLM, konfigurację głosu, narzędzia, bazę wiedzy
  • platform_settings - Wersjonowany podzbiór obejmujący ustawienia oceny, widgetu, zbierania danych i zabezpieczeń
  • workflow - Pełną definicję workflow z węzłami i krawędziami

Wersje są tworzone automatycznie, gdy zapisujesz zmiany w wersjonowanym agencie. Po utworzeniu wersji nie można jej zmodyfikować.

Gałęzie

Gałęzie to nazwane linie rozwoju, podobne do gałęzi git. Pozwalają pracować nad zmianami w izolacji przed scaleniem z powrotem do gałęzi głównej.

  • Każdy wersjonowany agent ma gałąź Main, której nie można usunąć ani zarchiwizować
  • Dodatkowe gałęzie można tworzyć z dowolnej wersji w dowolnej istniejącej gałęzi, nie tylko z main
  • Gałęzie można scalać z każdą inną gałęzią, a gałęzie inne niż main można rebazować na main, aby pobrać jej najnowsze zmiany
  • Każda gałąź ma: id (agtbrch_xxxx), nazwę, opis i listę wersji
  • Nazwy gałęzi mogą zawierać: litery, cyfry oraz () [] {} - / . (maks. 140 znaków)

Wdrażanie ruchu

Ruch można dzielić procentowo między wiele gałęzi, co umożliwia stopniowe wdrożenia i testy A/B.

  • Suma wartości procentowych musi zawsze wynosić dokładnie 100%
  • Kierowanie ruchu jest deterministyczne na podstawie ID rozmowy (ten sam użytkownik zawsze trafia do tej samej gałęzi)
  • Można archiwizować tylko niezarchiwizowane gałęzie z 0% ruchu

Szkice

Niezapisane zmiany są przechowywane jako szkice, dzięki czemu możesz pracować nad zmianami bez natychmiastowego tworzenia nowej wersji.

  • Szkice są na użytkownika i gałąź (każdy członek zespołu ma własny szkic)
  • Szkice są automatycznie odrzucane po zatwierdzeniu nowej wersji
  • Szkice są też odrzucane podczas scalania do gałęzi

Włączanie wersjonowania

Wersjonowanie jest opcjonalne i trzeba je włączyć ręcznie. Możesz je włączyć podczas tworzenia nowego agenta lub dla istniejącego agenta.

Po włączeniu nie można wyłączyć wersjonowania. To trwała zmiana w agencie.

Włączanie podczas tworzenia agenta

Otwórz agenta w panelu, przejdź do Ustawień i włącz wersjonowanie. Po włączeniu pojawi się karta Wersjonowanie, na której możesz zarządzać gałęziami, szkicami, wersjami i wdrażaniem ruchu.

Włączanie dla istniejącego agenta

Otwórz agenta w panelu, przejdź do Ustawień i włącz wersjonowanie.

Włączenie wersjonowania tworzy początkową gałąź „Main” z pierwszą wersją zawierającą aktualną konfigurację agenta.

Praca z gałęziami

Tworzenie gałęzi

Gałęzie można tworzyć z dowolnej wersji w dowolnej gałęzi, nie tylko z main. Opcjonalnie możesz uwzględnić zmiany konfiguracji, które zostaną zastosowane w początkowej wersji nowej gałęzi.

branch = client.conversational_ai.agents.branches.create(
agent_id="agent_7101k5zvyjhmfg983brhmhkd98n6",
parent_version_id="agtvrsn_xxxx",
name="experiment-v2",
description="Testing new prompt and voice settings"
)
print(f"Created branch: {branch.created_branch_id}")
print(f"Initial version: {branch.created_version_id}")

Lista gałęzi

branches = client.conversational_ai.agents.branches.list(
agent_id="agent_7101k5zvyjhmfg983brhmhkd98n6"
)
for branch in branches.branches:
print(f"{branch.name}: {branch.id}")

Pobieranie szczegółów gałęzi

branch = client.conversational_ai.agents.branches.get(
agent_id="agent_7101k5zvyjhmfg983brhmhkd98n6",
branch_id="agtbrch_xxxx"
)
print(f"Branch: {branch.name}")
print(f"Versions: {len(branch.versions)}")

Zatwierdzanie zmian

Gdy aktualizujesz agenta z włączonym wersjonowaniem, podaj branch_id, aby utworzyć nową wersję w tej gałęzi.

Otwórz kartę Wersjonowanie agenta, przejdź do docelowej gałęzi, zmień konfigurację i zapisz ją, aby utworzyć nową wersję.

Nowa wersja jest automatycznie tworzona w podanej gałęzi, a istniejący szkic tego użytkownika w tej gałęzi zostaje odrzucony.

Kierowanie ruchu

Użyj endpointu wdrożeń, aby rozdzielić ruch między gałęzie. Pozwala to na stopniowe wdrożenia i testy A/B.

deployment = client.conversational_ai.agents.deployments.create(
agent_id="agent_7101k5zvyjhmfg983brhmhkd98n6",
deployments=[
{"branch_id": "agtbrch_main", "percentage": 90},
{"branch_id": "agtbrch_xxxx", "percentage": 10}
]
)
Wszystkie wartości procentowe muszą sumować się dokładnie do 100%. W przeciwnym razie wdrożenie się nie powiedzie.

Kierowanie ruchem jest deterministyczne na podstawie ID rozmowy, dzięki czemu ten sam użytkownik konsekwentnie trafia do tej samej gałęzi w kolejnych sesjach.

Scalanie gałęzi

Gdy jesteś zadowolony ze zmian w gałęzi, scal je z inną gałęzią. Każdą niearchiwalną gałąź można scalić z dowolną inną niearchiwalną gałęzią, nie tylko z main.

Aby zmiany w gałęzi zostały sprawdzone przed scaleniem lub aby dotrzeć do gałęzi, do której nie masz uprawnień do zapisu, otwórz propozycję scalenia zamiast scalać bezpośrednio.

merge = client.conversational_ai.agents.branches.merge(
agent_id="agent_7101k5zvyjhmfg983brhmhkd98n6",
source_branch_id="agtbrch_xxxx",
target_branch_id="agtbrch_main",
archive_source_branch=True, # Default: true
force=False # Default: false
)

Scalanie:

  • Tworzy nową wersję w docelowej gałęzi z konfiguracją gałęzi źródłowej
  • Opcjonalnie archiwizuje gałąź źródłową (domyślne zachowanie)
  • Automatycznie przenosi ruch z gałęzi źródłowej do docelowej

Scalanie kończy się błędem no_new_changes_to_merge, jeśli gałąź źródłowa została utworzona z gałęzi docelowej (i nie ma commitów nowszych od niej), oraz błędem branch_already_merged, jeśli została już scalona z tą gałęzią docelową.

Rozwiązywanie konfliktów scalania

Jeśli ustawienie zostało zmienione zarówno w gałęzi źródłowej, jak i docelowej od ich rozdzielenia, domyślnie zachowana zostaje wartość z gałęzi aktualizowanej później. Ustaw force=True, aby zawsze użyć wartości z gałęzi źródłowej, niezależnie od znaczników czasu.

Przed zatwierdzeniem podejrzyj wynik scalenia, w tym pola, które zostałyby nadpisane:

preview = client.conversational_ai.agents.branches.preview_merge(
agent_id="agent_7101k5zvyjhmfg983brhmhkd98n6",
source_branch_id="agtbrch_xxxx",
target_branch_id="agtbrch_main",
force=False
)
print(preview.overridden_fields)
print(preview.conflicts)

Rebase gałęzi na main

Rebase pobiera najnowsze zmiany z gałęzi main do innej gałęzi, podobnie jak git rebase. Pozwala to aktualizować długo działającą gałąź względem main bez scalania z powrotem jej własnych zmian.

client.conversational_ai.agents.branches.rebase(
agent_id="agent_7101k5zvyjhmfg983brhmhkd98n6",
branch_id="agtbrch_xxxx"
)

Rebase:

  • Tworzy nową wersję w gałęzi, która zawiera najnowsze zmiany z main
  • Zachowuje własne zmiany gałęzi: jeśli ustawienie zmieniono zarówno w gałęzi, jak i w main, zawsze zachowana zostaje wartość z gałęzi
  • Kończy się błędem branch_already_up_to_date, jeśli gałąź zawiera już wszystkie zmiany z main

Rebase można wykonać tylko dla gałęzi innych niż main i tylko na main. Rebase samej gałęzi main zwraca błąd cannot_rebase_main.

Przed zatwierdzeniem podejrzyj wynik rebase:

preview = client.conversational_ai.agents.branches.preview_rebase(
agent_id="agent_7101k5zvyjhmfg983brhmhkd98n6",
branch_id="agtbrch_xxxx"
)
print(preview.overridden_fields)

Archiwizowanie gałęzi

Archiwizuj gałęzie, których już nie potrzebujesz. Dzięki temu lista gałęzi pozostaje uporządkowana.

client.conversational_ai.agents.branches.update(
agent_id="agent_7101k5zvyjhmfg983brhmhkd98n6",
branch_id="agtbrch_xxxx",
archived=True
)

Nie możesz zarchiwizować gałęzi, do której przypisano ruch. Usuń cały ruch przed archiwizacją.

Zarchiwizowane gałęzie możesz przywrócić, ustawiając archived=False.

Pobieranie konkretnych wersji

Możesz pobrać agenta w konkretnej wersji lub na końcu gałęzi.

Pobieranie agenta w konkretnej wersji

agent = client.conversational_ai.agents.get(
agent_id="agent_7101k5zvyjhmfg983brhmhkd98n6",
version_id="agtvrsn_xxxx"
)

Pobieranie agenta na końcu gałęzi

agent = client.conversational_ai.agents.get(
agent_id="agent_7101k5zvyjhmfg983brhmhkd98n6",
branch_id="agtbrch_xxxx"
)

Uwzględnianie zmian w szkicu

agent = client.conversational_ai.agents.get(
agent_id="agent_7101k5zvyjhmfg983brhmhkd98n6",
branch_id="agtbrch_xxxx",
include_draft=True
)

Ustawienia — informacje

Ustawienia wersjonowane

Te ustawienia mogą różnić się między wersjami i gałęziami:

KategoriaUstawienia
Konfiguracja rozmowyPrompt systemowy, osobowość agenta, wybór i parametry LLM, ustawienia głosu (model TTS, ID głosu), konfiguracja narzędzi, baza wiedzy, pierwsza wiadomość, ustawienia języka, wykrywanie tury, ustawienia przerwań
Wersjonowane ustawienia platformyevaluation - kryteria oceny, widget - wygląd i działanie widżetu, data_collection - wyodrębnianie danych strukturalnych, overrides - zastąpienia inicjowania rozmowy, workspace_overrides - konfiguracja webhooków, testing - konfiguracje testów, safety - zabezpieczenia (ustawienia IVC/non-IVC)
WorkflowPełna definicja workflow (węzły i krawędzie)

Ustawienia agenta

Te ustawienia są wspólne dla wszystkich wersji:

UstawienieOpis
name, tagsNazwa i tagi agenta (aktualizowane tylko przy zatwierdzaniu w gałęzi main)
authUstawienia uwierzytelniania i lista dozwolonych
call_limitsLimity współbieżności i dzienne
privacyUstawienia retencji i tryb bez retencji
banStatus blokady (tylko dla administratorów)

Zmiany nazwy i tagów w gałęziach innych niż main nie są zapisywane w agencie, dopóki nie zostaną scalone z main.

Dobre praktyki

1

Twórz testy przed utworzeniem gałęzi

Skonfiguruj automatyczne testy, które odzwierciedlają oczekiwane działanie przed utworzeniem nowej gałęzi. Zapewnia to punkt odniesienia i pomaga wcześnie wykrywać regresje podczas pracy nad eksperymentem.

2

Używaj opisowych nazw gałęzi

Wybieraj nazwy gałęzi, które jasno określają cel eksperymentu. Dodaj nazwę funkcji, hipotezę lub numer zgłoszenia, aby łatwo się do nich odwoływać (np. feature/new-greeting-flow lub experiment/shorter-responses).

3

Dokumentuj cele gałęzi

W polu opisu gałęzi wyjaśnij testowaną hipotezę, metryki określające sukces oraz zależności i kwestie do uwzględnienia. Ułatwia to członkom zespołu zrozumienie aktywnych eksperymentów.

4

Używaj szkiców dla pracy w toku

Często zapisuj szkice podczas wprowadzania zmian. Zachowasz w ten sposób pracę bez tworzenia niepotrzebnych wersji. Zatwierdzaj zmiany tylko wtedy, gdy jesteś gotowy na testy lub wdrożenie.

5

Zacznij od małego udziału ruchu

Przy wdrażaniu nowej gałęzi zacznij od 5–10% ruchu. Ogranicza to skutki ewentualnych problemów, a jednocześnie dostarcza wartościowych danych.

6

Monitoruj kluczowe metryki przed zwiększeniem ruchu

Użyj panelu analitycznego, aby porównać wydajność gałęzi. Sprawdzaj wskaźniki ukończenia połączeń, średni czas rozmowy, wyniki oceny sukcesu i wskaźniki wykonania narzędzi. Zwiększaj ruch tylko wtedy, gdy metryki osiągają lub przewyższają poziom bazowy gałęzi main.

7

Zwiększaj ruch stopniowo

Zwiększaj ruch etapami (10% → 25% → 50% → 100%), gdy rośnie twoja pewność. Takie podejście minimalizuje ryzyko, jednocześnie potwierdzając wydajność na każdym etapie.

8

Nie utrzymuj gałęzi zbyt długo

Szybko scalaj udane eksperymenty, aby uniknąć rozbieżności konfiguracji. W przypadku gałęzi, które muszą pozostać otwarte dłużej, okresowo wykonuj na nich rebase na main, aby nie rozeszły się zbyt daleko i nie stały się trudniejsze do scalenia.

Kolejne kroki