Zmienne dynamiczne
Przekazuj wartości w czasie działania, by spersonalizować zachowanie agenta.
Zmienne dynamiczne pozwalają wstawiać wartości z czasu działania do wiadomości, promptów systemowych i narzędzi agenta. Dzięki temu możesz personalizować każdą rozmowę danymi użytkownika bez tworzenia wielu agentów.
Omówienie
Zmienne dynamiczne można wykorzystać w wielu elementach agenta:
- Promptach systemowych, by dostosować zachowanie i kontekst
- Pierwszych wiadomościach, by personalizować powitania
- Parametrach i nagłówkach narzędzi, by przekazywać dane użytkownika
Oto kilka przykładów, gdy zmienne dynamiczne są przydatne:
- Personalizowanie powitań imionami użytkowników
- Uwzględnianie danych konta w odpowiedziach
- Przekazywanie danych do wywołań narzędzi
- Dostosowywanie zachowania zależnie od pakietu subskrypcji
- Dostęp do informacji systemowych, takich jak ID rozmowy czy czas trwania połączenia
Zmienne dynamiczne obsługują trzy typy wartości:
Systemowe zmienne dynamiczne
Twój agent ma dostęp do wbudowanych zmiennych system__* w każdej rozmowie bez konfiguracji w czasie działania. Zmienne te mają zarezerwowany prefiks przestrzeni nazw system__ i aktualizują się automatycznie w trakcie rozmowy. Niestandardowe zmienne dynamiczne nie mogą używać prefiksu system__ ani zastępować zmiennych systemowych.
Zmienne oznaczone † zmieniają się między turami. Umieszczenie ich w tekście promptu może uniemożliwić cache’owanie promptu; alternatywy znajdziesz w sekcji Dobre praktyki.
Tożsamość agenta i rozmowy
Czas i strefa czasowa
Telefonia i wiadomości
Te zmienne są wypełniane, gdy mają zastosowanie w kanałach telefonicznych i wiadomości:
Stan rozmowy na turę
Format historii rozmowy
Zmienna system__conversation_history zawiera obiekt JSON o następującej strukturze:
Każdy wpis zawiera role ("user", "agent" lub "tool") oraz jedno z poniższych:
message: Treść tekstowa turytool_requests: Tablica wywołań narzędzi wykonanych przez agenta wraz z rozstrzygniętymi wartościami parametrówtool_results: Tablica odpowiedzi narzędzi
Jeśli wynik narzędzia lub parametr zawiera zagnieżdżoną historię rozmowy, zostaje zastąpiony symbolem zastępczym (np. [conversation_history (5 turns)]), aby uniknąć nieograniczonego rekurencyjnego rozwijania.
Ta zmienna przydaje się do przekazywania kontekstu rozmowy do narzędzi (np. webhooków lub niestandardowych LLM-ów) albo do uwzględniania historii rozmowy w promptach podagentów podczas przekazywania rozmowy.
Sekretne zmienne dynamiczne
Sekretne zmienne dynamiczne są wypełniane tak samo jak zwykłe zmienne dynamiczne, ale wskazują ElevenAgents, że powinny być używane wyłącznie w nagłówkach zmiennych dynamicznych i nigdy nie mogą być wysyłane do dostawcy LLM jako część promptu systemowego lub pierwszej wiadomości agenta.
Używaj sekretnych zmiennych dynamicznych do tokenów autoryzacji lub prywatnych ID, których nie należy wysyłać do LLM. Aby utworzyć sekretną zmienną dynamiczną, dodaj przed nią prefiks secret__.
Sekretne wartości są przechowywane po redakcji, więc API rozmów zwraca je jako <REDACTED>.
Webhooki transkrypcji po połączeniu dostarczają oryginalne wartości, więc upewnij się, że endpoint webhooka
obsługuje je jako sekrety. Nie używaj prefiksu secret__ dla wartości, które musisz odczytać z powrotem z
API rozmów. Przekaż je jako zwykłe zmienne dynamiczne albo przekaż niewrażliwy identyfikator i
odszukaj wrażliwą wartość we własnym systemie.
Aktualizowanie zmiennych dynamicznych z narzędzi
Wywołania narzędzi mogą tworzyć lub aktualizować zmienne dynamiczne, jeśli zwracają prawidłowy obiekt JSON. Aby określić, co należy wyodrębnić, ustaw ścieżki obiektów za pomocą notacji kropkowej. Jeśli pole lub ścieżka nie istnieje, nic nie zostanie zaktualizowane.
Przykład obiektu odpowiedzi i notacji kropkowej:
- Status odpowiada ścieżce:
response.status - E-mail pierwszego użytkownika w tablicy users odpowiada ścieżce:
response.users.0.email
Aby zaktualizować zmienną dynamiczną na e-mail pierwszego użytkownika, ustaw przypisanie w ten sposób.

Przypisania konfigurujesz w każdym narzędziu webhooka; zobacz przypisania narzędzi w dokumentacji API.
Przewodnik
Wymagania wstępne:
- Konto ElevenLabs
- Skonfigurowany agent ElevenAgents (aby go utworzyć, skorzystaj z krótkiego przewodnika)
Zdefiniuj zmienne dynamiczne w promptach
Dodaj zmienne, używając podwójnych nawiasów klamrowych {{variable_name}} w:
- Promptach systemowych
- Pierwszych wiadomościach
- Parametrach narzędzi


Zdefiniuj zmienne dynamiczne w narzędziach
Możesz też zdefiniować zmienne dynamiczne w konfiguracji narzędzia.
Aby utworzyć nową zmienną dynamiczną, ustaw typ wartości na Dynamic variable i kliknij przycisk +.


Ustaw symbole zastępcze
Skonfiguruj wartości domyślne do testowania bez przekazywania zmiennych w czasie działania.
Aktualizacja w panelu
Aktualizacja przez CLI
Aktualizacja przez API
Ustaw wartości domyślne dla każdej zmiennej dynamicznej w panelu agenta.

Przekaż zmienne w czasie działania
Podczas rozpoczynania rozmowy podaj zmienne dynamiczne w swoim kodzie:
Upewnij się, że masz zainstalowane najnowsze SDK.
Integracja z publiczną stroną rozmowy
Publiczna strona rozmowy obsługuje zmienne dynamiczne przez parametry URL, dzięki czemu możesz personalizować rozmowy podczas udostępniania linków do agentów. Jest to szczególnie przydatne przy osadzaniu spersonalizowanych agentów na stronach, w e-mailach lub kampaniach marketingowych.
Metody parametrów URL
Istnieją dwie metody przekazywania zmiennych dynamicznych do publicznej strony rozmowy:
Metoda 1: JSON zakodowany w Base64
Przekaż zmienne jako obiekt JSON zakodowany w Base64 za pomocą parametru vars:
Parametr vars zawiera JSON zakodowany w Base64:
Metoda 2: Pojedyncze parametry zapytania
Przekaż zmienne za pomocą parametrów zapytania z prefiksem var_:
Priorytet parametrów
Gdy obie metody są używane jednocześnie, pojedyncze parametry var_ mają pierwszeństwo przed zmiennymi zakodowanymi w Base64, aby uniknąć konfliktów:
W tym przykładzie user_name będzie mieć wartość "John" (z var_user_name) zamiast "Jane" (z vars zakodowanego w Base64).
Przykłady implementacji
Generowanie URL w JavaScript
Generowanie URL w Pythonie
Ręczne tworzenie URL
Dobre praktyki
Ustaw strefę czasową zamiast umieszczać bieżący czas w promptach
Zmienne w prompcie systemowym, węzłach workflow i procedurach są rozwiązywane w każdej turze. Jeśli wartość zmienia się między turami, prompt nie może być cache’owany, co zwiększa koszt i opóźnienie. {{system__time_utc}} i {{system__time_second}} zmieniają się w każdej turze; {{system__time}} i {{system__time_minute}} zmieniają się co minutę.
Aby podać agentowi bieżącą datę i godzinę, ustaw strefę czasową przyciskiem strefy czasowej w edytorze System Prompt (conversation_config.agent.prompt.timezone) zamiast umieszczać {{system__time}} lub {{system__time_utc}} w tekście promptu. Po ustawieniu strefy czasowej platforma dodaje bieżącą datę i godzinę poza cache’owanym prefiksem promptu, więc prompt systemowy pozostaje cache’owany między turami. Bez strefy czasowej agent nie otrzyma bieżącej daty i godziny.
Jeśli prompt wymaga daty lub godziny w tekście, połącz {{system__time_date}}, {{system__time_hour}} i {{system__timezone}} (na przykład Today is {{system__time_date}}, hour {{system__time_hour}} ({{system__timezone}})). Zmieniają się one najwyżej raz na godzinę.
Powiąż zmienne stanu na żywo z parametrami i nagłówkami narzędzi
Jeśli narzędzie potrzebuje wartości oznaczonej †, powiąż ją z parametrem lub nagłówkiem narzędzia zamiast umieszczać ją w prompcie. Parametry narzędzia są rozwiązywane tylko podczas wywołania narzędzia, więc nie wpływają na cache’owanie promptu. LLM widzi już rozmowę, dlatego {{system__conversation_history}} rzadko jest potrzebne w promptach.
Rozważ alternatywy dla liczników tur w promptach
Jeśli prompt sprawdza liczniki tur, takie jak {{system__agent_turns}}, rozważ poniższe alternatywy. Używaj first_message do statycznych powitań lub informacji na początku.
W przypadku zachowania przy pierwszej odpowiedzi możesz sformułować instrukcję wokół historii rozmowy (na przykład “On your first reply, when you have not yet greeted the caller…”). Polega to na tym, że LLM wykona instrukcję, więc przetestuj to z wybranym modelem i zachowaj licznik tur, jeśli wyniki są mniej niezawodne.
Jeśli licznik decyduje tylko o tym, kiedy rozgałęzić lub eskalować, warunek wyrażenia krawędzi workflow albo krok wyrażenia If w procedurze strukturalnej (np. system__agent_turns >= 5) może obsłużyć to poza promptem. Nie dotyczy to przypadków, w których LLM potrzebuje samej wartości.
Używaj secret__ tylko dla wartości, które pozostają w nagłówkach narzędzi
Dodaj prefiks secret__ do tokenów autoryzacji i kluczy API, aby można było powiązać je tylko z nagłówkami narzędzi i nigdy nie były wysyłane do LLM. Ponieważ wartości secret__ są redagowane jako <REDACTED> w API rozmów (webhooki transkrypcji po połączeniu nadal otrzymują oryginalne wartości), przekazuj wartości, które musisz odczytać z API rozmów, jako zwykłe zmienne dynamiczne albo przekaż niewrażliwy identyfikator i odszukaj wrażliwą wartość we własnym systemie.
Nie polegaj na system__user_id przy uwierzytelnianiu
system__user_id jest przekazywane przez klienta do śledzenia i analiz oraz nie jest weryfikowane przez ElevenAgents. Zweryfikuj tożsamość rozmówcy przez webhook rozpoczęcia rozmowy, podpisany token w zmiennej nagłówka secret__ albo wywołanie narzędzia weryfikacyjnego, zanim ujawnisz dane konta.
Skonfiguruj symbole zastępcze do testów i podglądów
Ustaw wartości domyślne w dynamic_variable_placeholders dla każdej niestandardowej zmiennej użytej w promptach, pierwszych wiadomościach i narzędziach. Podglądy rozmów w panelu i testy symulacyjne nie uruchamiają webhooków rozpoczęcia rozmowy, więc nieustawione zmienne podczas testów pozostają dosłownymi symbolami zastępczymi {{variable_name}}.
Rozwiązywanie problemów
Zmienne nie są zastępowane
Sprawdź, czy:
- Nazwy zmiennych są identyczne (wielkość liter ma znaczenie)
- Zmienne używają podwójnych nawiasów klamrowych:
{{variable_name}} - Zmienne są uwzględnione w obiekcie
dynamic_variables
Błędy typu
Upewnij się, że:
- Wartości zmiennych mają oczekiwany typ
- Wartości to wyłącznie ciągi znaków, liczby lub wartości logiczne