Zmienne dynamiczne
Przekazuj wartości w czasie działania, aby dopasować zachowanie agenta.
Zmienne dynamiczne pozwalają wstawiać wartości z czasu działania do wiadomości agenta, promptów systemowych i narzędzi. Dzięki temu możesz personalizować każdą rozmowę danymi konkretnego użytkownika bez tworzenia wielu agentów.
Omówienie
Zmienne dynamiczne można stosować w wielu elementach agenta:
- Promptach systemowych, aby dostosować zachowanie i kontekst
- Pierwszych wiadomościach, aby personalizować powitania
- Parametrach i nagłówkach narzędzi, aby przekazywać dane konkretnego użytkownika
Oto kilka przykładów zastosowania zmiennych dynamicznych:
- Personalizacja powitań imionami użytkowników
- Uwzględnianie danych konta w odpowiedziach
- Przekazywanie danych do wywołań narzędzi
- Dostosowanie zachowania do poziomu subskrypcji
- Dostęp do informacji systemowych, takich jak ID rozmowy lub czas jej trwania
Zmienna dynamiczna może zawierać dowolną wartość JSON:
Gdy lista lub obiekt zostaną wstawione do promptu, adresu URL lub innego szablonu tekstu, są dodawane jako tekst JSON. Parametr narzędzia powiązany ze zmienną listową otrzymuje samą listę.
Zmienne dynamiczne są zwracane bez zmian w API szczegółów rozmowy oraz w webhookach po rozmowie, w tym zmienne system__ opisane poniżej. Analizuj dynamic_variables jako mapę wartości JSON. Nie odrzucaj nieznanych kluczy ani typów wartości, ponieważ możemy dodać nowe zmienne system__.
Systemowe zmienne dynamiczne
Twój agent ma dostęp do wbudowanych zmiennych system__* w każdej rozmowie bez konfiguracji w czasie działania. Te zmienne mają zastrzeżony prefiks przestrzeni nazw system__ i aktualizują się automatycznie w trakcie rozmowy. Własne zmienne dynamiczne nie mogą używać prefiksu system__ ani nadpisywać zmiennych systemowych.
Zmienne oznaczone † zmieniają się między turami. Umieszczenie ich w tekście promptu może uniemożliwić cachowanie promptu; alternatywy znajdziesz w sekcji Dobre praktyki.
Tożsamość agenta i rozmowy
Czas i strefa czasowa
Telefonia i wiadomości
Te zmienne są uzupełniane, gdy mają zastosowanie w kanałach telefonicznych i wiadomości:
Stan rozmowy dla każdej tury
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 pól:
message: Treść tekstowa turytool_requests: Tablica wywołań narzędzi wykonanych przez agenta z rozpoznanymi 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, takich jak webhooki lub własne LLM-y, albo do uwzględniania historii rozmowy w promptach podagentów podczas przekazywania rozmowy.
Przesłane pliki
system__uploaded_file_ids zawiera ID plików dołączonych przez użytkownika na czacie, na przykład w widżecie lub WhatsAppie. Aktualizuje się w każdej turze, więc plik dołączony w bieżącej wiadomości jest już na liście, gdy agent wywołuje narzędzie.
Aby przetworzyć załącznik, gdy rozmowa nadal trwa, powiąż listę z parametrem tablicowym narzędzia serwerowego wraz z system__conversation_id. Jeśli agent wywoła narzędzie, zanim użytkownik dołączy plik, parametr otrzyma pustą listę.
Twój serwer pobiera następnie każdy plik za pomocą klucza API:
Odpowiedzią jest oryginalny plik z jego Content-Type (na przykład image/jpeg lub application/pdf). ID pliku, który nie należy do rozmowy, zwraca 404. Ostatnie ID na liście oznacza najnowszy przesłany plik.
Tajne zmienne dynamiczne
Tajne zmienne dynamiczne są uzupełniane tak samo jak zwykłe zmienne dynamiczne, ale informują ElevenAgents, że należy ich używać tylko w nagłówkach zmiennych dynamicznych i nigdy nie wysyłać do dostawcy LLM jako części promptu systemowego ani pierwszej wiadomości agenta.
Używaj tajnych zmiennych dynamicznych dla tokenów uwierzytelniania lub prywatnych ID, których nie należy wysyłać do LLM. Aby utworzyć tajną zmienną dynamiczną, dodaj prefiks secret__.
Tajne wartości są przechowywane po redakcji, dlatego API rozmów zwraca je jako <REDACTED>.
Webhooki transkrypcji po rozmowie dostarczają oryginalne wartości, więc upewnij się, że Twój endpoint webhooka
traktuje je jak sekrety. Nie używaj prefiksu secret__ dla wartości, które musisz odczytać z
API rozmów. Przekaż je jako zwykłe zmienne dynamiczne albo przekaż niewrażliwy identyfikator i
wyszukaj 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 zwrócą prawidłowy obiekt JSON. Aby określić, co należy wyodrębnić, ustaw ścieżki obiektów w 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ą tak, by zawierała e-mail pierwszego użytkownika, ustaw przypisanie w ten sposób.

Przypisania konfiguruje się dla każdego narzędzia webhooka; zobacz przypisania narzędzi w dokumentacji API.
Przewodnik
Wymagania wstępne:
- Konto ElevenLabs
- Skonfigurowany agent ElevenAgents (aby go utworzyć, postępuj zgodnie z krótkim przewodnikiem)
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 wartości 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
Przy rozpoczynaniu rozmowy podaj zmienne dynamiczne w kodzie:
Upewnij się, że masz zainstalowaną najnowszą wersję 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 agenta. Jest to szczególnie przydatne przy osadzaniu spersonalizowanych agentów na stronach internetowych, w e-mailach lub kampaniach marketingowych.
Metody parametrów URL
Są dwa sposoby 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: Osobne parametry zapytania
Przekaż zmienne za pomocą parametrów zapytania z prefiksem var_:
Priorytet parametrów
Gdy obie metody są używane jednocześnie, osobne 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 dodawać bieżący czas do promptów
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 zostać zapisany w cache, 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 aktualną 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. Gdy ustawisz strefę czasową, platforma dodaje aktualną datę i godzinę poza zapisaną w cache częścią promptu, więc twój prompt systemowy pozostaje w cache między turami. Bez strefy czasowej agent nie otrzymuje aktualnej daty ani godziny.
Jeśli twój prompt wymaga daty lub godziny w tekście, połącz {{system__time_date}}, {{system__time_hour}} i {{system__timezone}} (na przykład Dziś jest {{system__time_date}}, godzina {{system__time_hour}} ({{system__timezone}})). Zmieniają się one najwyżej raz na godzinę.
Przypisuj zmienne bieżącego stanu do parametrów narzędzi i nagłówków
Jeśli narzędzie potrzebuje wartości oznaczonej †, przypisz ją do parametru narzędzia lub nagłówka zamiast umieszczać ją w prompcie. Parametry narzędzia są rozwiązywane tylko przy wywołaniu narzędzia, więc nie wpływają na cache promptu. LLM już widzi rozmowę, więc {{system__conversation_history}} rzadko jest potrzebne w promptach.
Rozważ alternatywy dla liczników tur w promptach
Jeśli twój prompt sprawdza liczniki tur, takie jak {{system__agent_turns}}, rozważ te alternatywy. Użyj first_message do statycznych powitań lub informacji na początku rozmowy.
W przypadku zachowania przy pierwszej odpowiedzi możesz sformułować instrukcję wokół historii rozmowy (na przykład “W pierwszej odpowiedzi, gdy nie powitałeś jeszcze rozmówcy…”). Zależy to od tego, czy LLM zastosuje się do instrukcji, więc przetestuj to ze swoim modelem i zachowaj licznik tur, jeśli wyniki są mniej wiarygodne.
Jeśli licznik decyduje tylko o rozgałęzieniu lub eskalacji, warunek wyrażenia krawędzi workflow albo wyrażenie kroku If w procedurze strukturalnej If step expression (takie jak system__agent_turns >= 5) może obsłużyć to poza promptem. Nie obejmuje to przypadków, w których LLM potrzebuje samej wartości.
Używaj secret__ tylko dla wartości pozostających w nagłówkach narzędzi
Dodaj prefiks secret__ do tokenów uwierzytelniających i kluczy API, aby można było przypisać je tylko do nagłówków narzędzi i aby nigdy nie były wysyłane do LLM. Ponieważ wartości secret__ są maskowane jako <REDACTED> w API rozmów (webhooki transkrypcji po rozmowie nadal otrzymują oryginalne wartości), wartości, które chcesz odczytać z API rozmów, przekazuj jako zwykłe zmienne dynamiczne albo przekaż niewrażliwy identyfikator i wyszukaj wrażliwą wartość we własnym systemie.
Nie polegaj na system__user_id do uwierzytelniania
system__user_id jest przekazywane przez klienta do śledzenia i analityki i nie jest weryfikowane przez ElevenAgents. Zweryfikuj tożsamość rozmówcy przez webhook inicjowania rozmowy, podpisany token w zmiennej nagłówka secret__ lub wywołanie narzędzia weryfikacyjnego przed udostępnieniem danych konta.
Skonfiguruj wartości zastępcze do testów i podglądów
Ustaw wartości domyślne w dynamic_variable_placeholders dla każdej niestandardowej zmiennej używanej w promptach, pierwszych wiadomościach i narzędziach. Podglądy rozmów w panelu i testy symulacyjne nie uruchamiają webhooków inicjowania rozmowy, więc nieustawione zmienne podczas testów pozostają dosłownymi wartościami zastępczymi {{variable_name}}.
Rozwiązywanie problemów
Zmienne nie są zastępowane
Sprawdź, czy:
- Nazwy zmiennych są identyczne (z uwzględnieniem wielkości liter)
- Zmienne używają podwójnych nawiasów klamrowych:
{{variable_name}} - Zmienne są zawarte w obiekcie
dynamic_variables
Błędy typów
Upewnij się, że:
- Wartości zmiennych mają oczekiwany typ
- Wartości są wyłącznie ciągami znaków, liczbami lub wartościami logicznymi