LiveKit ਅਤੇ FastAPI ਨਾਲ Real-Time Voice AI ਬਣਾਉਣਾ

Voice AI ਦਾ ਡੈਮੋ ਦਿਖਾਉਣਾ ਆਸਾਨ ਹੈ। ਪ੍ਰੋਡਕਸ਼ਨ ਲਈ Voice AI ਤਿਆਰ ਕਰਨਾ ਮੁਸ਼ਕਲ ਹੈ।

ਇੱਕ ਡੈਮੋ ਵਿੱਚ ਸਿਰਫ਼ ਇੱਕ ਹੀ happy path ਹੁੰਦਾ ਹੈ ਅਤੇ ਕੋਈ ਲੋਡ ਨਹੀਂ ਹੁੰਦਾ। ਪ੍ਰੋਡਕਸ਼ਨ ਵਿੱਚ jitter, ਯੂਜ਼ਰ ਦਖਲਅੰਦਾਜ਼ੀ (interruptions), ਰੀਕਨੈਕਟਸ ਅਤੇ ਪ੍ਰੋਵਾਈਡਰ ਦੀਆਂ ਅਸਫਲਤਾਵਾਂ ਹੁੰਦੀਆਂ ਹਨ। ਜੇਕਰ ਤੁਸੀਂ ਇਹਨਾਂ ਲਈ ਡਿਜ਼ਾਈਨ ਨਹੀਂ ਕਰਦੇ, ਤਾਂ ਤੁਹਾਡਾ AI ਰੋਬੋਟਿਕ ਲੱਗੇਗਾ।

ਇਹਨਾਂ ਸਿਸਟਮਾਂ ਨੂੰ ਬਣਾਉਣ ਲਈ ਸਿਰਫ਼ ਫਰੇਮਵਰਕ ਦੀਆਂ ਚਾਲਾਂ ਹੀ ਨਹੀਂ, ਸਗੋਂ ਇੱਕ ਸਮਾਰਟ ਆਰਕੀਟੈਕਚਰ ਦੀ ਲੋੜ ਹੁੰਦੀ ਹੈ। ਤੁਹਾਨੂੰ ਇਹ ਫੈਸਲਾ ਕਰਨਾ ਚਾਹੀਦਾ ਹੈ ਕਿ ਸਟੇਟ (state) ਕਿੱਥੇ ਰਹੇਗੀ ਅਤੇ ਲੇਟੈਂਸੀ (latency) ਕਿਵੇਂ ਵਧਦੀ ਹੈ।

ਇੱਕ ਮਜ਼ਬੂਤ Voice AI ਸਟੈਕ ਲਈ ਇਹਨਾਂ ਲੇਅਰਾਂ ਦੀ ਲੋੜ ਹੁੰਦੀ ਹੈ:

• Client: ਮਾਈਕ ਇਨਪੁਟ ਕੈਪਚਰ ਕਰਦਾ ਹੈ ਅਤੇ ਆਡੀਓ ਚਲਾਉਂਦਾ ਹੈ। • Voice session layer: Auth ਅਤੇ ਕਨੈਕਸ਼ਨ ਲਾਈਫਸਾਈਕਲ ਨੂੰ ਮੈਨੇਜ ਕਰਦਾ ਹੈ। • LiveKit room: ਲੋਅ-ਲੇਟੈਂਸੀ ਮੀਡੀਆ ਟ੍ਰਾਂਸਪੋਰਟ ਨੂੰ ਸੰਭਾਲਦਾ ਹੈ। • STT pipeline: ਬੋਲ ਨੂੰ ਟੈਕਸਟ ਵਿੱਚ ਬਦਲਦਾ ਹੈ। • LLM orchestration: ਪ੍ਰੋਂਪਟਸ ਅਤੇ ਟੂਲ ਕਾਲਸ ਨੂੰ ਮੈਨੇਜ ਕਰਦਾ ਹੈ। • TTS pipeline: ਟੈਕਸਟ ਨੂੰ ਆਡੀਓ ਵਜੋਂ ਵਾਪਸ ਸਟ੍ਰੀਮ ਕਰਦਾ ਹੈ। • Backend APIs: ਸਟੇਟ ਅਤੇ ਬਿਜ਼ਨਸ ਲੌਜਿਕ ਲਈ FastAPI ਸਰਵਿਸਿਜ਼। • Observability: ਲੇਟੈਂਸੀ ਨੂੰ ਟ੍ਰੈਕ ਕਰਨ ਲਈ ਮੈਟ੍ਰਿਕਸ ਅਤੇ ਲੌਗਸ।

ਲੇਅਰਾਂ ਨੂੰ ਸੁਤੰਤਰ (independent) ਰੱਖੋ। ਕਲਾਇੰਟ ਵਿੱਚ ਬਹੁਤ ਘੱਟ ਲੌਜਿਕ ਹੋਣਾ ਚਾਹੀਦਾ ਹੈ। ਇਸ ਨੂੰ ਸਿਰਫ਼ ਆਡੀਓ ਕੈਪਚਰ ਕਰਨੀ ਚਾਹੀਦੀ ਹੈ ਅਤੇ UI ਨੂੰ ਸੰਭਾਲਣਾ ਚਾਹੀਦਾ ਹੈ।

LiveKit ਲਈ ਛੋਟੇ ਸਮੇਂ ਵਾਲੇ (short-lived) ਟੋਕਨ ਬਣਾਉਣ ਲਈ FastAPI ਦੀ ਵਰਤੋਂ ਕਰੋ। ਇਹ ਰੂਮ ਦੀ ਪਹੁੰਚ ਨੂੰ ਸੁਰੱਖਿਅਤ ਰੱਖਦਾ ਹੈ। ਸੈਸ਼ਨ ਰਿਕਾਰਡ ਨੂੰ ਇੱਕ ਸਥਿਰ ID ਦੇ ਨਾਲ ਸਰਵਰ 'ਤੇ ਸਟੋਰ ਕਰੋ। ਯੂਜ਼ਰ ID, ਰੂਮ ID, ਅਤੇ ਮੌਜੂਦਾ ਸਟੇਟ ਨੂੰ ਟ੍ਰੈਕ ਕਰੋ। ਜਦੋਂ ਕੋਈ ਯੂਜ਼ਰ ਰੀਕਨੈਕਟ ਹੁੰਦਾ ਹੈ, ਤਾਂ ਬੈਕਐਂਡ ਤੁਰੰਤ ਕੰਟੈਕਸਟ (context) ਨੂੰ ਰਿਕਵਰ ਕਰ ਲੈਂਦਾ ਹੈ।

Voice AI ਲੇਟੈਂਸੀ ਦਾ ਖੇਡ ਹੈ। ਜੇਕਰ ਜਵਾਬ ਦੇਣ ਵਿੱਚ ਦੇਰੀ ਹੁੰਦੀ ਹੈ, ਤਾਂ ਯੂਜ਼ਰ ਦਖਲਅੰਦਾਜ਼ੀ ਕਰਦੇ ਹਨ।

ਹਰ ਪੜਾਅ ਲਈ ਲੇਟੈਂਸੀ ਬਜਟ ਸੈੱਟ ਕਰੋ:

  • STT ਲੇਟੈਂਸੀ
  • Orchestration ਲੇਟੈਂਸੀ
  • Tool call ਲੇਟੈਂਸੀ
  • TTS ਸ਼ੁਰੂ ਹੋਣ ਦਾ ਸਮਾਂ
  • ਪਹਿਲੇ ਆਡੀਓ ਬਾਈਟ ਤੱਕ ਦਾ ਸਮਾਂ

ਦਖਲਅੰਦਾਜ਼ੀ (interruptions) ਨੂੰ ਇੱਕ ਮੁੱਖ ਵਿਸ਼ੇਸ਼ਤਾ ਵਜੋਂ ਸਪੋਰਟ ਕਰੋ। ਜਦੋਂ ਕੋਈ ਯੂਜ਼ਰ ਬੋਲਦਾ ਹੈ, ਤਾਂ ਕਲਾਇੰਟ ਨੂੰ ਇੱਕ interrupt event ਭੇਜਣਾ ਚਾਹੀਦਾ ਹੈ। ਸਿਸਟਮ ਨੂੰ ਮੌਜੂਦਾ TTS ਸਟ੍ਰੀਮ ਨੂੰ ਰੱਦ ਕਰ ਦੇਣਾ ਚਾਹੀਦਾ ਹੈ ਅਤੇ ਜਵਾਬ ਨੂੰ interrupted ਵਜੋਂ ਮਾਰਕ ਕਰਨਾ ਚਾਹੀਦਾ ਹੈ। ਇਹ AI ਨੂੰ ਅਗਲੇ ਟਰਨ ਵਿੱਚ ਪੁਰਾਣਾ ਕੰਟੈਕਸਟ ਲੀਕ ਕਰਨ ਤੋਂ ਰੋਕਦਾ ਹੈ।

ਰੀਟ੍ਰਾਈਜ਼ (retries) ਨੂੰ ਸੁਰੱਖਿਅਤ ਬਣਾਓ। ਟੂਲ ਕਾਲਸ ਲਈ idempotency keys ਦੀ ਵਰਤੋਂ ਕਰੋ। ਇਹ ਯਕੀਨੀ ਬਣਾਉਂਦਾ ਹੈ ਕਿ ਜੇਕਰ ਕੋਈ ਰਿਕਵੈਸਟ ਫੇਲ ਹੋ ਜਾਂਦੀ ਹੈ ਅਤੇ ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕੀਤੀ ਜਾਂਦੀ ਹੈ, ਤਾਂ ਤੁਸੀਂ ਇੱਕੋ ਕਾਰਵਾਈ ਦੋ ਵਾਰ ਨਹੀਂ ਕਰਦੇ, ਜਿਵੇਂ ਕਿ ਗਾਹਕ ਨੂੰ ਦੋ ਵਾਰ ਚਾਰਜ ਕਰਨਾ।

ਉਹ ਮੈਟ੍ਰਿਕਸ ਟ੍ਰੈਕ ਕਰੋ ਜੋ ਯੂਜ਼ਰ ਅਨੁਭਵ ਲਈ ਮਹੱਤਵਪੂਰਨ ਹਨ:

  • End-to-end turn ਲੇਟੈਂਸੀ
  • ਪਹਿਲੇ ਆਡੀਓ ਬਾਈਟ ਤੱਕ ਦਾ ਸਮਾਂ
  • ਪ੍ਰਤੀ ਸੈਸ਼ਨ ਇੰਟਰਪਟ ਰੇਟ
  • ਰੀਕਨੈਕਟ ਫ੍ਰੀਕੁਐਂਸੀ

Voice AI ਸਿਰਫ਼ ਇੱਕ LLM ਸਮੱਸਿਆ ਨਹੀਂ ਹੈ। ਇਹ ਇੱਕ ਸਿਸਟਮ ਸਮੱਸਿਆ ਹੈ। ਇਸ ਵਿੱਚ ਨੈੱਟਵਰਕਿੰਗ, ਸਟੇਟ, ਸੁਰੱਖਿਆ, ਅਤੇ ਡਿਜ਼ਾਈਨ ਸ਼ਾਮਲ ਹਨ।

ਇੱਕ ਬੁਨਿਆਦ ਬਣਾਉਣ ਲਈ LiveKit ਅਤੇ FastAPI ਦੀ ਵਰਤੋਂ ਕਰੋ। ਅਨੁਮਾਨਿਤ ਕੰਟਰੈਕਟਸ (predictable contracts), ਸਪਸ਼ਟ ਸਟੇਟ (explicit state), ਅਤੇ ਘੱਟ ਤੋਂ ਘੱਟ ਲੇਟੈਂਸੀ ਲੂਪਸ 'ਤੇ ਧਿਆਨ ਕੇਂਦਰਿਤ ਕਰੋ। ਇਸ ਤਰ੍ਹਾਂ ਹੀ ਤੁਸੀਂ ਅਜਿਹਾ ਸਾਫਟਵੇਅਰ ਬਣਾ ਸਕਦੇ ਹੋ ਜੋ ਮਨੁੱਖੀ ਮਹਿਸੂਸ ਹੁੰਦਾ ਹੈ।

ਸਰੋਤ: https://dev.to/joshua_fields_0ecc952c450/building-real-time-voice-ai-applications-with-livekit-and-fastapi-pae

ਵਿਕਲਪਿਕ ਲਰਨਿੰਗ ਕਮਿਊਨਿਟੀ: https://t.me/GyaanSetuAi