Agenci głosowi GPT-Live-1: sesje, tryby delegowania oraz rzeczywiste koszty połączeń telefonicznych.
Praktyczny przewodnik po modelu głosowym pełnodupleksem OpenAI: jak przebiega sesja, odpowiedzi w porównaniu z delegowaniem zadań przez klienta, szczegółowa szacunkowa kosztorys oraz pułapki w dokumentacji.
Źródła: How to Use GPT-Live-1: Build a Voice Agent That Listens While It Talks
Każdy, kto kiedykolwiek dzwonił do restauracji i trafił na bota głosowego, zna ten moment. Mówisz coś, następuje pauza, a potem bot zaczyna odpowiadać na pytanie, które zadałeś pięć sekund wcześniej, dokładnie wtedy, gdy próbujesz się poprawić. Większość ludzi ostatecznie naciska 0, aby porozmawiać z człowiekiem.
Ten niezręczny rytm jest wbudowany w standardowy projekt. Klasyczny bot głosowy czeka, aż przestaniesz mówić, konwertuje dźwięk na tekst, przetwarza informacje, konwertuje odpowiedź z powrotem na mowę i odtwarza ją. Nikt nie może przemówić głośniej od drugiej osoby.
GPT-Live-1 to próba OpenAI stworzenia czegoś innego. Jest to model stojący za ChatGPT Voice, dostępny przez API, który słucha jednocześnie z mówieniem. Na tej stronie omówiono, co odróżnia go od innych rozwiązań, jak przebiega sesja, w jaki sposób przekazuje trudne pytania modelowi backendowemu oraz ile kosztowałaby mała linia telefoniczna.
Czym jest GPT-Live-1
To model głosowy pełnoduplekstowy. Pełnoduplekstowość oznacza, że obie strony mogą mówić jednocześnie, tak jak podczas zwykłej rozmowy telefonicznej. Jeśli dzwoniący przerwie, mówiąc „właściwie, niech będzie czterech osób”, model zatrzyma się, dostosuje się i będzie kontynuował.
Model ten również pozostawia intensywne przetwarzanie informacji komuś innemu. Ilekroć jakieś żądanie wymaga realnego wysiłku – czy to wyszukiwanie, sprawdzanie w systemie rezerwacji, czy dokładne rozumowanie – zadanie trafia do oddzielnego modelu backendowego. Materiały promocyjne OpenAI wskazują na opóźnienie przy zmianie roli wynoszące około 0,8 sekundy, co jest lepszym wynikiem niż około 1,4 sekundy w przypadku poprzedniego modelu głosowego. Należy to traktować jako dane dostawcy.
Praktyczną konsekwencją jest to, że funkcja głosowa i funkcja analityczna stają się odrębnymi zadaniami. Głos zajmuje się rozmową, natomiast backend zajmuje się rozumowaniem i narzędziami.
Delegacja: głos, który mówi, i mózg, który myśli
To przekazywanie obowiązków to to, co OpenAI nazywa delegacją. Ciągle, w ułamkach sekundy, model głosowy decyduje, czy pozostać w ciszy i słuchać, przestać mówić, czy przekazać zadanie do serwera tła. Rozmowa nigdy się nie zatrzymuje podczas wykonywania tego zadania, ponieważ głos może szybko powiedzieć „pozwól mi sprawdzić” i kontynuować rozmowę.
Wyobraźmy sobie osobę dzwoniącą do restauracji, aby zapytać, czy o 19:30 w piątek jest wolny stolik dla czterech osób. Model mówi „pozwól mi sprawdzić”, wysyła prośbę o sprawdzenie dostępności do serwera tła i informuje dzwoniącego o wyniku po jego powrocie.
To rozdzielenie rozwiązuje również jeden istotny problem. Zgodnie z informacjami na stronie dotyczącej modelu, wiedza modelu głosowego kończy się 31 lipca 2025 roku, więc wszelkie aktualne informacje muszą i tak pochodzić z serwera tła.
Rozpoczęcie sesji głosowej
Opcje połączenia to WebRTC dla aplikacji w przeglądarce, WebSockets do odbierania dźwięku z serwera oraz telefonia SIP do korzystania z prawdziwych numerów telefonów. Niezależnie od wyboru, wydarzenia mają podobny wygląd, dlatego poniższe kroki odnoszą się do nich.
Krok 1: przechowywanie klucza API na serwerze
Trzymaj klucz z dala od przeglądarek. Twój własny, zaufany serwer tworzy sesję, podczas gdy przeglądarka zajmuje się jedynie mikrofonem i głośnikiem. Potrzebny jest płatny konto, ponieważ wersja darmowa nie jest obsługiwana, a limity przepustowości odnoszą się do jednoczesnych sesji na żywo i wzrastają wraz z poziomem Twojego użytkowania.
Krok 2: rozpoczęcie sesji
Gdy już się połączysz, wysyłasz pojedyncze wydarzenie session.start zawierające Twoje ustawienia.
{
"type": "session.start",
"session": {
"model": "gpt-live-1",
"instructions": "Be concise and ask before taking an external action.",
"audio": { "output": { "voice": "marin" } },
"delegation": { "type": "client" }
}
}
To jedno wydarzenie wybiera model, dostarcza instrukcje, wybiera głos i określa, kto wykonuje pracę w tle. Poczekaj z mówieniem, aż zostanie zwrócone session.started. Model, instrukcje i głos są zamrożone po rozpoczęciu sesji, więc późniejsze zasady są dodawane za pomocą session.instructions.append zamiast zastępować oryginalny tekst.
Krok 3: transmisja audio w obie strony
Dzięki WebRTC przeglądarka zajmuje się dźwiękiem. Przez WebSockets wysyłasz małe fragmenty w ramach zdarzeń session.input_audio.append. Format jest ściśle określony: surowy mono 16-bitowy PCM, zakodowany w formacie Base64, bez nagłówka WAV, przy częstotliwości próbkowania ustawionej przy uruchomieniu (standardowo 24 kHz). Głos modelu jest zwracany w ten sam sposób, w ramach zdarzeń session.output_audio.delta. Jeśli Twój dźwięk źródłowy używa innej częstotliwości próbkowania, musisz go sam przeskalować, ponieważ zmiana ustawień formatu nie przekształca Twoich bajtów.
Krok 4: odczytanie transkrypcji
Tekst na żywo od obu stron przychodzi w postaci zdarzeń session.input_transcript.delta i session.output_transcript.delta. Nie ma zdarzenia „koniec kolejki”, ponieważ obie strony mogą mówić jednocześnie. Jeśli Twoja aplikacja wymaga uporządkowanych sekcji do zapisu, grupuj fragmenty po swojej stronie.
Krok 5: czyste zamknięcie
Wyślij session.close i czytaj dalej, aż pojawi się session.closed. To ostatnie zdarzenie zawiera dane o zużyciu, na podstawie których będzie naliczana opłata. Jeśli połączenie zostanie przerwane przed jego nadejściem, nie otrzymasz potwierdzenia zużycia, co ma znaczenie przy weryfikacji rachunku.
Krokiem, który ludzie najczęściej zapominają, jest czwarty – tworzenie czytelnych fragmentów tekstu z notatek transkrypcji.
Przekazywanie zadań do backendu
Tutaj GPT-Live-1 przestaje być przyjemnym głosem i staje się przydatnym agentem. Podczas rozpoczynania sesji wybierany jest jeden z dwóch trybów delegacji, a nie można go zmienić w trakcie. Aby to zrobić, należy rozpocząć nową sesję.
Opcja A: Delegacja odpowiedzi
Określasz model Responses, do którego powinien się zwracać głos, oraz narzędzia, których może używać. Konfiguracja znajduje się w obiekcie sesji obok nazwy modelu.
"delegation": {
"type": "responses",
"responses": {
"model": "gpt-5.5",
"instructions": "Use tools when current information is required.",
"tools": [{ "type": "web_search" }],
"tool_choice": "auto"
}
}
Od tego momentu pytanie dzwoniącego, które wymaga wyszukiwania, jest obsługiwane przez serwer, a wynik jest wprowadzany do trwającej rozmowy. Funkcje niestandardowe są inne – funkcja taka jak check_table nie jest wykonywana przez serwer. Twoja aplikacja otrzymuje połączenie, je przetwarza, zwraca wynik, a następnie informuje serwer o kontynuacji.
Wyobraź sobie, że dzwoniący pyta, czy w piątkowy wieczór będzie padać deszcz, ponieważ grupa może usiąść na zewnątrz. Serwer przeprowadza wyszukiwanie w internecie, system głosowy mówi, że po szóstej spodziewany jest lekki deszcz, więc lepiej być w pomieszczeniach, a dzwoniący nie musi znosić długiej ciszy.
Opcja B: delegacja na stronie klienta
Tutaj twoja własna aplikacja pełni rolę serwera. Gdy model potrzebuje pomocy, otrzymujesz zdarzenie session.delegation.created zawierające identyfikator. Wykonujesz pracę na swój sposób i wysyłasz odpowiedź z tym samym identyfikatorem.
{
"type": "session.commentary.append",
"delegation_id": "item_delegation_123",
"content": "Table for 4 is confirmed at 7:30 pm Friday."
}
Wiadomość komentarzowa oznacza, że model powinien przeczytać tekst na głos. Jeśli model ma coś wiedzieć po cichu, zamiast tego używa się session.thinking.append. Każda wiadomość może zawierać około 500 tokenów. W zasadzie obsługa klienta może przekazać zadanie do frameworku agentów według własnego wyboru, choć taka kombinacja wymaga osobistych testów przed jej użyciem.
Rozsądnym podejściem jest rozpoczęcie od zarządzanej delegacji odpowiedzi, a przechodzenie do delegacji klienta w momencie, gdy potrzebujesz większej kontroli nad uprawnieniami, potwierdzeniami lub samym procesem pracy.
Jakie to kosztuje
Słuchawka kosztuje 0,05 dolara za minutę, a opłata naliczana jest co sekundę. To daje 3 dolary na godzinę lub 72 dolary dziennie za linię czynną przez całą dobę. Modele i narzędzia backendowe są naliczane oddzielnie, więc rzeczywista suma zależy od częstotliwości, z jaką połączenia potrzebują pomocy.
Przykład obliczeń, przy użyciu założonych liczb:
- Załóżmy, że linia telefoniczna restauracji otrzymuje 2 000 połączeń miesięcznie, z których każde trwa około 3 minut. To 6 000 minut, więc sama komunikacja głosowa kosztuje 6 000 razy 0,05 dolara, czyli 300 dolarów.
- Następnie załóżmy, że przy każdym połączeniu następuje dwie przekazywania informacji, z których każde obejmuje około 3 000 tokenów wejściowych i 300 tokenów wyjściowych, przy czym koszt serwera wynosi 10 dolarów za milion tokenów wejściowych i 50 dolarów za milion tokenów wyjściowych. Jedno przekazanie informacji kosztuje 0,03 dolara plus 0,015 dolara, czyli 0,045 dolara. Dwa takie przekazania kosztują 0,09 dolara za połączenie, więc 2 000 połączeń daje łącznie 180 dolarów.
- Łączna kwota wynosi około 480 dolarów miesięcznie, czyli mniej więcej 24 centy za połączenie.
Liczby tokenów oraz stawki serwera to szacunki dla prostego procesu rezerwacji, dlatego przed zaufaniem im warto zmierzyć swój własny ruch. Część związana z komunikacją głosową jest przewidywalna, natomiast to część związana z serwerem wymaga szczególnej uwagi.
Szczegóły pomijane w postach uruchomieniowych
Przerwanie połączenia nie anuluje wykonywanej pracy
Zgodnie z dokumentacją, przerwanie mowy asystenta nie zatrzymuje automatycznie pracy w tle. Osoba dzwoniąca, która mówi „nie ma sprawy”, może nadal otrzymać wyniki wyszukiwania lub rezerwację, chyba że twoja aplikacja to zatrzyma. Jest to nieszkodliwe w przypadku sprawdzania pogody, ale poważne w sytuacji, gdy najpierw powiedziano „zarezerwuj to”, a potem „czekaj, nie”.
Otrzymane informacje nie są słyszane
Dodanie wyniku powoduje otrzymanie potwierdzenia, ale to nie oznacza, że model rzeczywiście to wypowiedział ani że ktoś to usłyszał. Zakończenie odpowiedzi w tle to jedno zdarzenie, a usłyszenie jej przez dzwoniącego – zupełnie inne. W przypadku czegokolwiek, co wymaga potwierdzenia, na przykład godziny rezerwacji, sprawdź tekst w transkrypcji wyjściowej.
Liczby z badań benchmarkowych różnią się w zależności od źródła
Ujawnione wyniki testów modelu w zadań związanych z obsługą klienta różnią się pomiędzy własnymi publikacjami OpenAI a doniesieniami prasowymi. W obu przypadkach wzrost wydajności w porównaniu z starszym modelem jest znaczny, ale są to wyniki dostarczone przez producenta, a niezależne testy są rzadkie. Historie klientów, takie jak relacja firmy zajmującej się nauką języków o znacznie mniejszej liczbie przerw podczas chwil zastanowienia uczących się, to jedynie anegdoty, a nie badania.
Ciszy nie można ufać, by przechowywać sekrety
Cokolwiek trafi do pamięci poprzez session.thinking.append, może nadal wpływać na późniejsze wypowiedzi. Unikaj umieszczania w niej numerów kont i prywatnych notatek.
Kiedy to się sprawdza, a kiedy nie
Podoba się to do:
- Linii telefonicznych służących do rezerwacji, zamówień i prostej obsługi klienta
- Aplikacji edukacyjnych, w których użytkownicy zatrzymują się i zastanawiają między zdaniami
- Zespołów, które chcą zastąpić złożony układ trzech oddzielnych modeli jednym rozwiązaniem
Warto dwukrotnie się zastanowić nad:
- Telefoniami, w których jedna błędna akcja ma duże konsekwencje, np. płatnościami
- Produktami, które wymagają natychmiastowego użycia spersonalizowanych głosów marki, ponieważ przechodzą one przez oddzielny proces zatwierdzenia
- Wszystkim, co wymaga danych wizualnych lub wideo, których model nie akceptuje
Ryzykownym podejściem jest pozwalanie serwerowi potwierdzić rezerwację natychmiast po tym, jak rozmówca powie „brzmi dobrze”, bez sprawdzenia później, co dokładnie powiedział. Bezpieczniejszym rozwiązaniem jest odczytanie potwierdzenia, oczekiwanie na wyraźną odpowiedź twierdzącą oraz anulowanie bieżących zadań w aplikacji, jeśli rozmówca zmieni zdanie. Choć głos może być doskonały, to to Twoja aplikacja musi zapewnić odpowiednie kontrole bezpieczeństwa.
Główne punkty
- Rozmówcy mogą przerywać lub zmieniać temat w trakcie wypowiedzi, ponieważ model nadal słucha podczas rozmowy.
- Zadania wymagające zaawansowanej obróbki trafiają do modelu na serwerze, niezależnie od tego, czy jest to system OpenAI, czy Twoja własna aplikacja.
- Każda sesja składa się z pięciu kroków: rozpoczęcie, oczekiwanie na
session.started, transmisja dźwięku, zebranie kolejnych wypowiedzi z fragmentów transkrypcji oraz czyste zakończenie. - Korzystanie z funkcji głosowej kosztuje 0,05 dolara za minutę, co przy 2000 połączeniach miesięcznie daje koszt około 480 dolarów przy lekkim backendzie, w oparciu o powyższe założenia.
- Przerwanie rozmowy przez dzwoniącego powoduje kontynuację pracy backendu, więc twoja aplikacja musi sama radzić sobie z sytuacją „czekaj, nie”.