ThunderPhone 2.0 је стигао.Све подешавате сами, већ од 2 цента/мин.Прочитајте објаву

Connect tools & data

Користите ThunderPhone из Pipecat-а

Покрените ThunderPhone гласовног агента као услугу говор-у-говор унутар Pipecat цевовода, са сопственим транспортом и телефонијом.

Pipecat је оквир отвореног кода за изградњу гласовних агената од састављивих услуга. ThunderPhone се интегрише као LLM услуга за говор у говор: Pipecat шаље звук позиваоца, ThunderPhone враћа глас агента, транскрипте и позиве функција, а Pipecat пренос (Daily, LiveKit, Twilio, WebRTC, локални микрофон) преноси звук. Препознавање говора, језички модел, глас, смењивање у разговору, 47 језика и алати раде на ThunderPhone-у.

Позиви обављени на овај начин појављују се у историји позива и наплаћују се по цени по минуту Вашег производа као и сваки други позив у реалном времену. Не постоји претплата нити је укључен ThunderPhone телефонски број.

Инсталирајте

pip install pipecat-thunderphone
export THUNDERPHONE_API_KEY=sk_live_...   # a secret API key

Пакет обавија Pipecat-ову OpenAI Realtime услугу, јер ThunderPhone-ов Realtime WebSocket користи исти протокол. Потребан је pipecat-ai 1.8 или новији.

Покрените сачуваног агента

Све што агент ради (упутство, глас, погон, језици, алати, поздрав, провере тишине) конфигурише се на ThunderPhone-у. Цевовод само преноси звук.

from pipecat.pipeline.pipeline import Pipeline
from pipecat.pipeline.worker import PipelineParams, PipelineWorker
from pipecat.processors.aggregators.llm_context import LLMContext
from pipecat.processors.aggregators.llm_response_universal import LLMContextAggregatorPair
from pipecat_thunderphone import ThunderPhoneRealtimeLLMService
 
llm = ThunderPhoneRealtimeLLMService(agent_id=12)
 
context = LLMContext()
aggregators = LLMContextAggregatorPair(context)
pipeline = Pipeline([
    transport.input(),
    aggregators.user(),
    llm,
    aggregators.assistant(),
    transport.output(),
])
worker = PipelineWorker(pipeline, params=PipelineParams(allow_interruptions=True))

Сачувани агент самостално започиње позив према сопственом распореду, па услуга не захтева почетни одговор од Pipecat-а. Проследите greet_on_connect=True ако га ипак желите.

Конфигуришите сесију у линији

Без agent_id, упутства и алати долазе из Pipecat контекста, на исти начин као за OpenAI. product бира погон, а voice бира ThunderPhone глас.

from pipecat.adapters.schemas.function_schema import FunctionSchema
from pipecat.adapters.schemas.tools_schema import ToolsSchema
from pipecat.services.llm_service import FunctionCallParams
 
llm = ThunderPhoneRealtimeLLMService(product="bolt", voice="olivia", language="es")
 
async def check_availability(params: FunctionCallParams):
    slots = await calendar.free_slots(params.arguments["date"])
    await params.result_callback({"slots": slots})
 
llm.register_function("check_availability", check_availability)
 
context = LLMContext(
    messages=[{"role": "system", "content": "You are Acme Dental's receptionist."}],
    tools=ToolsSchema(standard_tools=[
        FunctionSchema(
            name="check_availability",
            description="Free appointment slots on a date",
            properties={"date": {"type": "string"}},
            required=["date"],
        )
    ]),
)

Сесијама у линији управља клијент: агент говори први јер Pipecat захтева одговор када контекст стигне и остаје тих током тишине осим ако не додате поруку или не затражите други одговор.

Опције

АргументЗначење
api_keyТајни кључ (sk_live_...). Подразумевано је THUNDERPHONE_API_KEY.
agent_idПокрените сачуваног агента. Узајамно се искључује са product и voice.
productМеханизам за уграђене сесије: spark, bolt или storm.
voiceНазив ThunderPhone гласа за уграђене сесије.
languageНазнака примарног језика за уграђене сесије, нпр. es.
from_number, to_numberБројеви за евидентирање у позиву када процес обрађује телефонску линију.
live_transcriptsСтримујте делове транскрипта позиваоца током изговора (додатно се наплаћује).
greet_on_connectЗатражите први одговор чим сесија буде спремна.
end_task_on_call_endedПошаљите EndWorkerFrame када ThunderPhone заврши позив (подразумевано укључено).

Догађаји

ThunderPhone додаје догађаје платформе поврх протокола у реалном времену. Услуга их испоручује обрађивачима:

@llm.event_handler("on_call_ended")
async def on_call_ended(service, event):
    print("call ended:", event["reason"], "call id:", service.call_id)

service.call_id се поставља када сесија постане активна. Користите га са GET /v1/calls/{call_id} да бисте преузели снимак, транскрипт и оцену након позива.

Ограничења

  • Детекција смене говора се извршава на серверу и увек је укључена; смене које покреће Pipecat (turn_detection=False) нису подржане.
  • Функције регистроване у услузи извршавају се само за уграђене сесије. Сачувани агент извршава сопствене алате у ThunderPhone-у.
  • Аудио је 16-битни моно PCM на 24 kHz у оба смера.
  • Видео-кадрови се занемарују.