Integracja z Pipecat
Użyj pipeline’u Pipecat jako mózgu LLM dla Speech Engine.
Ten przewodnik pokazuje, jak używać Pipecat jako pipeline’u LLM w serwerze brain dla Speech Engine. Speech Engine obsługuje pętlę głosową — zamianę mowy na tekst, zarządzanie turami i zamianę tekstu na mowę — a Pipecat generuje tekst przez modułowy pipeline procesorów (wywołania LLM, RAG, wywołania funkcji, guardraile, filtry treści).
Ten przewodnik dotyczy tylko Pythona, ponieważ Pipecat jest frameworkiem Pythona po stronie serwera. Nie ma
odpowiednika dla Node dla procesorów pipeline’u; istnieje pakiet pipecat-client-js, ale jest to
klient przeglądarkowy komunikujący się z serwerem Pipecat, a nie narzędzie do budowania pipeline’ów w TypeScript.
Architektura
SDK Speech Engine działa jako zewnętrzna warstwa — jego callback on_transcript uruchamia się za każdym razem, gdy użytkownik skończy mówić. W callbacku budujesz pipeline Pipecat, przekazujesz historię rozmowy jako LLMContextFrame i streamujesz tekst z pipeline’u z powrotem do Speech Engine. ElevenLabs zamienia tekst na mowę i odtwarza ją użytkownikowi.
Pipeline Pipecat działa tylko przez czas jednej tury. Gdy pojawi się nowa transkrypcja, poprzedni pipeline jest anulowany przed uruchomieniem kolejnego — w ten sposób obsługa przerwań w Speech Engine trafia do pipeline’u.
Kiedy użyć tego wzorca
Pipecat sprawdza się, gdy brain potrzebuje czegoś więcej niż pojedynczego wywołania LLM:
- Modułowe procesory do generowania wspomaganego wyszukiwaniem, wywołań funkcji lub guardraili
- Middleware oparte na ramkach, które może sprawdzać, przekształcać lub blokować ruch na każdym etapie
- Fragmenty pipeline’u do ponownego użycia w wielu agentach
Jeśli twój brain to „transkrypcja na wejściu, wywołanie LLM na wyjściu”, prostszy będzie krótki przewodnik po Speech Engine. Sięgnij po Pipecat, gdy najważniejszy jest sam pipeline.
Wymagania
- Speech Engine. Utwórz go, korzystając z krótkiego przewodnika po Speech Engine.
- Python 3.10+ (wymagany przez
pipecat-ai). - Publiczny tunel HTTPS dla serwera brain (np. ngrok).
Zainstaluj zależności
pipecat-ai[openai] instaluje usługę OpenAI LLM. Jeśli wolisz innego dostawcę, zamień rozszerzenie na odpowiednie (anthropic, google itd.).
Zbuduj brain Pipecat
Brain składa się z dwóch części: procesora TextSink, który zapisuje streamowany tekst do asyncio.Queue, oraz korutyny run_pipecat_brain, która buduje pipeline na jedną turę i zwraca fragmenty jako iterator asynchroniczny.
Pipeline zawiera tylko usługę LLM i sink — bez procesorów STT ani TTS, ponieważ obsługuje je Speech Engine. LLMContextFrame to dane wejściowe, a fragmenty LLMTextFrame to dane wyjściowe.
run_pipecat_brain jest generatorem asynchronicznym. Każdy zwrócony fragment trafia prosto do Speech Engine, więc agent zaczyna mówić, zanim cała odpowiedź będzie gotowa.
Podłącz go do serwera Speech Engine
Metoda send_response w SDK Speech Engine przyjmuje string lub dowolny asynchroniczny iterowalny obiekt stringów, więc możesz przekazać bezpośrednio run_pipecat_brain(transcript). Przed przekazaniem ich do brain zamień obiekty ConversationMessage z Speech Engine na zwykłe dicty.
SDK Speech Engine anuluje zadanie poprzedniej tury, gdy pojawi się nowa transkrypcja. To anuluje generator asynchroniczny i bazowy PipelineTask przez blok try/finally w run_pipecat_brain.
Uruchom serwer
Połącz się ze Speech Engine z przeglądarki, używając tego samego endpointu tokena i kodu klienta co w krótkim przewodniku. Pipeline Pipecat działa po stronie serwera, a przeglądarka widzi zwykłą rozmowę ze Speech Engine.
Rozbuduj pipeline
Pipeline Pipecat obsługujący tylko tekst może zawierać dowolny procesor ramek, który działa na LLMTextFrame lub LLMContextFrame. Oto kilka częstych dodatków:
- Guardraile:
FrameProcessorumieszczony przed LLM, który sprawdzaLLMContextFrameoraz zastępuje lub blokuje niebezpieczny kontekst. - Wywołania funkcji: zarejestruj narzędzia w
OpenAILLMService, a Pipecat natywnie obsłuży ramki wywołań narzędzi. Końcowy tekst asystenta nadal trafia jakoLLMTextFrame. - Wielostopniowe rozumowanie: połącz dwie instancje
OpenAILLMService, z własnym procesorem między nimi, który przepisuje kontekst dla drugiego przebiegu. - Filtrowanie wyjścia:
FrameProcessorumieszczony po LLM, który sprawdza każdyLLMTextFramei odrzuca lub przepisuje niedozwolone treści, zanim dotrą doTextSink.
Kształt pipeline’u pozostaje taki sam — Pipeline([processor_a, llm, processor_b, sink]) — a run_pipecat_brain się nie zmienia.
Uwagi produkcyjne
- Bezpieczne anulowanie:
PipelineTask.cancel()może się zablokować, jeśli zostanie wywołane, zanim pipeline w pełni się uruchomi (pipecat-ai/pipecat#4276). Powyższy wzorzectry/finallyjest bezpieczny, ponieważcancel()uruchamia się dopiero po zakolejkowaniu co najmniej jednej ramki. - Prompt injection: wynik zamiany mowy na tekst to dane wejściowe użytkownika. Sprawdź lub znormalizuj transkrypcję przed przekazaniem jej do LLM, zwłaszcza jeśli procesor niższego poziomu używa tekstu w wywołaniach narzędzi lub zapytaniach do bazy danych.
- Uwierzytelnianie serwera brain: ustaw wspólny sekret w Speech Engine i sprawdzaj go na serwerze brain, aby zapobiec nieautoryzowanym połączeniom z endpointem
/ws: - Dostawca LLM:
pipecat-ai[openai]zawieraOpenAILLMService. W przypadku Anthropic zainstalujpipecat-ai[anthropic]i użyjAnthropicLLMService; reszta pipeline’u pozostaje bez zmian.