חזרה לבלוג

בניתי דמו עם NVIDIA Nemotron 3 VoiceChat

קיבלתי גישה מוקדמת למודל הקולי full-duplex של NVIDIA, הרצתי אותו על A100 דרך Brev ובניתי עם Claude Code סביבת הערכה בדפדפן.

nvidia nemotron voice-ai full-duplex claude-code brev

בשבוע שעבר התחלתי לחקור יותר את החומרה והתשתיות של NVIDIA, אחרי שקראתי על חומרת RTX שמיועדת להרצת AI מקומית על מחשבים אישיים.

תוך כדי שגלשתי באתר של NVIDIA גיליתי את Nemotron 3 VoiceChat, מודל voice-to-voice ב־early access שתומך ב־full duplex. ביקשתי גישה כי, למה לא?

אחרי כמה ימים NVIDIA שלחו לי הזמנה.

כמובן שהייתי חייבת לבנות איתו משהו.

בניית הדמו

השתמשתי ב־NVIDIA API key שלי וביקשתי מ־Claude Code לקרוא את התיעוד ולעזור לי לבנות סביבת הערכה בדפדפן. יצרנו כמה personas עם system prompts שונים, כך שאפשר לבחור תרחיש ולדבר ישירות עם המודל. אחרי זה הוספנו גם custom prompt שאפשר לעדכן בזמן אמת מתוך הדפדפן.

כדי להריץ את המודל צריך GPU, אז השתמשתי ב־NVIDIA Brev כדי להקים את התשתית הנדרשת. Claude Code עזר בכל ההקמה דרך הכלים וה־APIs של NVIDIA, והתוצאה הייתה אפליקציית web עובדת שבה אפשר לבחור תרחיש ולנהל שיחת קול בזמן אמת עם המודל.

המודל רץ על A100-80GB ב־Brev, בזמן שאפליקציית ה־web רצה על המחשב שלי. חיברתי ביניהם דרך SSH tunnel, כך שה־endpoint של ה־GPU אף פעם לא היה חשוף לציבור.

משפחת Nemotron

Nemotron היא משפחה של מודלים שנבנו לתפקידים שונים:

  • Nemotron Nano — מודל קטן ויעיל יותר לאייג’נטים ייעודיים.
  • Nemotron Super — מודל גדול יותר ל־reasoning, תכנון ומערכות multi-agent.
  • Nemotron Ultra — המודל הגדול ביותר, שמותאם למשימות reasoning קשות.
  • Nemotron VoiceChat — מודל שמותאם לשיחות קוליות טבעיות בזמן אמת.

VoiceChat הוא לא פשוט Nemotron Ultra שהוסיפו לו קול. זה מודל נפרד שנבנה במיוחד לשיחות speech-to-speech.

מה מיוחד ב־full duplex

סוכנים קוליים מסורתיים בדרך כלל מחברים שלושה שלבים נפרדים:

דיבור → ASR → טקסט מוכן → text LLM → תשובה מוכנה → TTS → דיבור

ASR הוא automatic speech recognition, כלומר speech-to-text. כל שלב מחכה שהשלב הקודם יסתיים, והאפליקציה צריכה לחבר ולתאם בין שלושת השירותים.

מודל full-duplex עובד אחרת:

אודיו נכנס ברצף → מודל דיבור מאוחד שעובד ב־streaming → אודיו יוצא ברצף

VoiceChat עדיין מכיל יכולות של זיהוי דיבור, שפה ויצירת דיבור. ההבדל הוא שהן עובדות יחד כארכיטקטורת streaming אחת, במקום שלושה שירותים נפרדים שמעבירים ביניהם טקסט מוכן.

המודל יכול לעבד חתיכות קטנות של אודיו בזמן שהוא מייצר דיבור. זה מאפשר לו להקשיב ולדבר במקביל, ולכן גם להתמודד עם הפרעות, חפיפה בין הדוברים ו־turn-taking טבעי יותר.

החוויה

לפני זה התנסיתי ב־Gemini Live API וב־Realtime API של OpenAI.

Gemini Live די טוב. OpenAI Realtime חזק במיוחד כי הוא משלב שיחה קולית טבעית עם reasoning טוב ו־tool calling.

Nemotron VoiceChat יצר שיחות זורמות בצורה מפתיעה. היה מעניין לדבר עם מודל שרץ בתוך קונטיינר על GPU שהקמתי בעצמי, במקום פשוט לקרוא ל־API מתארח.

השיחות זרמו טוב, למרות שלפעמים היו אי־התאמות בזמן הפרעות. להתמודד עם הפרעות ולהחליט בדיוק מתי לדבר ומתי לשתוק הן עדיין מהבעיות הקשות ביותר ב־voice AI בזמן אמת.

היכולת שהכי חסרה כרגע היא tool calling. בלעדיה קשה להשתמש במודל באפליקציות אמיתיות. NVIDIA מכירים בכך שהיכולת עדיין לא זמינה. מכיוון שהמודל עדיין ב־early access, אני מצפה שזה ישתפר.

מה בנינו

  • Mock server שתואם לפרוטוקול, ומאפשר לפתח את רוב האפליקציה בלי לשלם על GPU.
  • כדי לעבור בין ה־mock למודל האמיתי צריך לשנות רק environment variable אחד.
  • סביבת הערכה שמודדת את הזמן עד לאודיו הראשון, מציגה את שני ה־transcripts, מקליטה את האודיו של הסוכן ומייצאת את נתוני השיחה.
  • כמה personas דרך system prompts: שיחה חופשית, קליטת מטופל, פקידת קבלה, מאמן לראיונות עבודה ומאמן כוח.
  • אפשרות ל־custom prompt דינמי שאפשר לעדכן בזמן אמת מתוך הדפדפן.
  • המודל האמיתי רץ על NVIDIA Brev A100-80GB, בעלות של בערך $1.98 לשעת הרצה.
  • חיבור SSH tunnel בין המחשב שלי ל־Brev, כך שה־GPU endpoint אף פעם לא היה חשוף לציבור.

באגים ואתגרים

כרגיל, לקבל גישה היה החלק הקל. לגרום לכל החלקים לעבוד יחד היה החלק המעניין יותר.

  • פורמט אודיו לא נכון יצר קול משובש. המודל ציפה לאודיו ב־24kHz, וההגדרה המקורית פשוט לא עבדה.
  • Chrome השעה את ה־audio context. המיקרופון נראה פעיל, אבל שום אודיו לא הגיע למודל עד שהפעלנו אותו מפורשות.
  • המודל לא יכול לברך ראשון. הגרסה הנוכחית מגיבה רק אחרי שהיא מקבלת דיבור מהמשתמש.
  • הפרעות הן קשות. Full duplex מאפשר הפרעה, אבל לא הופך את ה־turn-taking למושלם אוטומטית.
  • גם שקט יכול לבלבל. שידור רציף של המיקרופון גרם לפעמים ל־transcripts של משפטים שהמשתמש בכלל לא אמר.

הבעיות האלה נתנו לי הבנה טובה יותר של מה הופך מודלים קוליים לקשים. לייצר תשובה טובה בקול זה רק חלק מהבעיה. המודל גם צריך לשמוע נכון, להבין תזמון, להחליט מתי המשתמש סיים, להגיב להפרעות ולדעת מתי לא לדבר.

מה למדתי

בניית האפליקציה הייתה חוויה מעולה.

היא נתנה לי הבנה הרבה יותר טובה של מודלי full-duplex, תשתיות GPU, streaming audio והאתגרים שצריך לפתור כדי ששיחה תרגיש טבעית.

היא גם הראתה לי צד נוסף של NVIDIA. התחלתי מקריאה על חומרה להרצת AI מקומית, ובסוף השתמשתי באותו פרויקט ב־model registry של NVIDIA, תשתיות קונטיינרים, GPU דרך Brev ומודל דיבור ב־early access.