Користите ThunderPhone из LiveKit Agents
Покрените ThunderPhone гласовног агента као модел у реалном времену (говор у говор) у сесији LiveKit Agents, уз LiveKit собе, SIP и телефонију око њега.
LiveKit Agents је оквир отвореног кода за гласовне агенте у реалном времену засноване на LiveKit собама. ThunderPhone се повезује као модел у реалном времену: оквир шаље звук учесника, ThunderPhone враћа глас агента, транскрипте и позиве функција, а LiveKit соба, SIP транкови и телефонија преносе звук. Препознавање говора, језички модел, глас, смењивање у разговору, 47 језика и алати раде на ThunderPhone.
Позиви обављени на овај начин појављују се у историји позива и наплаћују се по тарифи вашег производа по минуту, као и сваки други позив у реалном времену. Нема претплате нити ThunderPhone броја телефона.
Инсталирајте
pip install livekit-plugins-thunderphone
export THUNDERPHONE_API_KEY=sk_live_... # a secret API keyДодатак обавија LiveKit OpenAI Realtime модел, јер ThunderPhone
Realtime WebSocket користи исти протокол. Потребан
је livekit-agents 1.8 или новији.
Покрените сачуваног агента
Све што агент ради (упит, глас, механизам, језици, алати, поздрав, провере тишине) конфигурише се на ThunderPhone. Сесија само преноси звук.
from livekit.agents import Agent, AgentSession, JobContext, WorkerOptions, cli
from livekit.plugins import thunderphone
async def entrypoint(ctx: JobContext):
session = AgentSession(llm=thunderphone.RealtimeModel(agent_id=12))
await session.start(agent=Agent(instructions=""), room=ctx.room)
if __name__ == "__main__":
cli.run_app(WorkerOptions(entrypoint_fnc=entrypoint))Сачувани агент поздравља и покреће сопствене алате на ThunderPhone; упутства
и алати LiveKit Agent агента се не шаљу. Позив се завршава када
ThunderPhone агент прекине везу, а сесија се затвара заједно с њим.
Конфигуришите сесију у коду
Без agent_id, упутства и алати долазе из LiveKit Agent агента,
на исти начин као за OpenAI. product бира механизам, а voice бира
ThunderPhone глас.
from livekit.agents import Agent, AgentSession, RunContext, function_tool
from livekit.plugins import thunderphone
class Receptionist(Agent):
def __init__(self):
super().__init__(instructions="You are Acme Dental's receptionist. Be brief.")
@function_tool
async def check_availability(self, context: RunContext, date: str) -> dict:
"""Free appointment slots on a date."""
return {"slots": await calendar.free_slots(date)}
async def entrypoint(ctx: JobContext):
session = AgentSession(
llm=thunderphone.RealtimeModel(product="bolt", voice="olivia", language="es"),
)
await session.start(agent=Receptionist(), room=ctx.room)
await session.generate_reply() # the agent speaks firstThunderPhone закључава упутства и алате када позив почне, па
update_instructions, update_tools и предаје агента које их мењају
нису подржане током позива. Уграђене сесије усмерава клијент: агент говори
када позовете generate_reply() или када учесник заврши свој ред.
Опције
| Аргумент | Значење |
|---|---|
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 | Преносите фрагменте транскрипта позиваоца током изговарања (додатно се наплаћује). |
base_url | Замена крајње тачке, подразумевано wss://api.thunderphone.com/v1/realtime. |
Догађаји
ThunderPhone додаје догађаје платформе поврх протокола у реалном времену. Сесија их емитује:
@session.llm.session.on("thunderphone_call_ended") # or on the RealtimeSession you hold
def on_call_ended(event):
print("call ended:", event["reason"])RealtimeSession излаже call_id када је сесија активна. Користите га са
GET /v1/calls/{call_id} да бисте преузели снимак,
транскрипт и оцену након позива. Сваки други догађај call.* (пребацивање,
тастатура, игнорисан говор) стиже као thunderphone_call_event.
Ограничења
- Детекција смене говора је на страни сервера и увек је укључена; детекција смене говора
на страни оквира (
turn_detectionуAgentSession) се игнорише. - Упутства и алати не могу се мењати када позив започне.
- Звук је 16-битни моно PCM на 24 kHz у оба смера.
- Видео-кадрови се игноришу.