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

Connect tools & data

Користите 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 first

ThunderPhone закључава упутства и алате када позив почне, па 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 у оба смера.
  • Видео-кадрови се игноришу.