Live API هي واجهة برمجة تطبيقات مستندة إلى الحالة تستخدِم WebSockets. في هذا القسم، ستجد تفاصيل إضافية حول واجهة برمجة التطبيقات WebSockets API.
الجلسات
يُنشئ اتصال WebSocket جلسة بين العميل وخادم Gemini. بعد أن يبدأ العميل عملية اتصال جديدة، يمكن للجلسة تبادل الرسائل مع الخادم لإجراء ما يلي:
- أرسِل نصًا أو محتوى صوتيًا أو فيديو إلى خادم Gemini.
- تلقّي طلبات مكالمات صوتية أو نصية أو طلبات وظائف من خادم Gemini
اتصال WebSocket
لبدء جلسة، عليك الاتصال بنقطة نهاية websocket هذه:
wss://generativelanguage.googleapis.com/ws/google.ai.generativelanguage.v1beta.GenerativeService.BidiGenerateContent
إعداد الجلسة
تضبط الرسالة الأولية بعد الاتصال إعدادات الجلسة، والتي تشمل النموذج ومَعلمات الإنشاء وتعليمات النظام والأدوات.
يمكنك تغيير مَعلمات الضبط باستثناء النموذج أثناء الجلسة.
راجِع المثال التالي على الإعداد. يُرجى العِلم أنّ طريقة كتابة الاسم في حِزم SDK قد تختلف. يمكنك الاطّلاع على خيارات ضبط حزمة تطوير البرامج (SDK) لنظام التشغيل Python هنا.
{
"model": string,
"generationConfig": {
"candidateCount": integer,
"maxOutputTokens": integer,
"temperature": number,
"topP": number,
"topK": integer,
"presencePenalty": number,
"frequencyPenalty": number,
"responseModalities": [string],
"speechConfig": object,
"mediaResolution": object
},
"systemInstruction": string,
"tools": [object]
}
لمزيد من المعلومات حول حقل واجهة برمجة التطبيقات، يُرجى الاطّلاع على generationConfig.
إرسال الرسائل
لتبادل الرسائل عبر اتصال WebSocket، على العميل إرسال عنصر JSON عبر اتصال WebSocket مفتوح. يجب أن يتضمّن عنصر JSON حقلًا واحدًا بالضبط من مجموعة العناصر التالية:
{
"setup": BidiGenerateContentSetup,
"clientContent": BidiGenerateContentClientContent,
"realtimeInput": BidiGenerateContentRealtimeInput,
"toolResponse": BidiGenerateContentToolResponse
}
رسائل العملاء المتوافقة
يمكنك الاطّلاع على رسائل العملاء المتوافقة في الجدول التالي:
الرسالة | الوصف |
---|---|
BidiGenerateContentSetup |
إعدادات الجلسة التي سيتم إرسالها في الرسالة الأولى |
BidiGenerateContentClientContent |
تعديل محتوى متزايد للمحادثة الحالية يتم إرساله من العميل |
BidiGenerateContentRealtimeInput |
إدخال صوت أو فيديو أو نص في الوقت الفعلي |
BidiGenerateContentToolResponse |
استجابة لطلب ToolCallMessage تم تلقّيه من الخادم |
تلقي الرسائل
لتلقّي الرسائل من Gemini، انتظِر حدث WebSocket "message"، ثم قسِّم النتيجة وفقًا لتعريف رسائل الخادم المتوافقة.
يُرجى الاطّلاع على ما يلي:
async with client.aio.live.connect(model='...', config=config) as session:
await session.send(input='Hello world!', end_of_turn=True)
async for message in session.receive():
print(message)
قد تحتوي رسائل الخادم على حقل usageMetadata
، ولكنها ستشمل
بخلاف ذلك حقلًا واحدًا بالضبط من الحقول الأخرى من
BidiGenerateContentServerMessage
الرسالة. (لا يتم التعبير عن اتحاد messageType
بتنسيق JSON، لذا سيظهر الحقل
في أعلى مستوى من الرسالة).
الرسائل والأحداث
ActivityEnd
لا يحتوي هذا النوع على أي حقول.
يشير إلى نهاية نشاط المستخدِم.
ActivityHandling
الطرق المختلفة لمعالجة نشاط المستخدم
عمليات التعداد | |
---|---|
ACTIVITY_HANDLING_UNSPECIFIED |
إذا لم يتم تحديد قيمة، يكون السلوك التلقائي هو START_OF_ACTIVITY_INTERRUPTS . |
START_OF_ACTIVITY_INTERRUPTS |
إذا كانت القيمة "صحيح"، سيؤدي بدء النشاط إلى مقاطعة استجابة النموذج (يُعرف ذلك أيضًا باسم "المقاطعة"). سيتم قطع ردّ النموذج الحالي في لحظة المقاطعة. هذا هو السلوك التلقائي. |
NO_INTERRUPTION |
لن يتم إيقاف استجابة النموذج. |
ActivityStart
لا يحتوي هذا النوع على أي حقول.
يُستخدَم لتحديد بداية نشاط المستخدِم.
AudioTranscriptionConfig
لا يحتوي هذا النوع على أي حقول.
إعدادات تحويل الصوت إلى نص
AutomaticActivityDetection
لضبط الرصد التلقائي للنشاط
الحقول | |
---|---|
disabled |
اختياريّ. في حال تفعيل هذا الخيار (الإعداد التلقائي)، يتم احتساب إدخال الصوت والنص كنشاط. في حال إيقافه، على العميل إرسال إشارات النشاط. |
startOfSpeechSensitivity |
اختياريّ. يحدِّد مدى احتمالية رصد الكلام. |
prefixPaddingMs |
اختياريّ. المدة المطلوبة للكلام الذي تم رصده قبل بدء تسجيله وكلما انخفضت هذه القيمة، زادت حساسية رصد بداية الكلام وأصبح بإمكانه التعرّف على الكلام الأقصر. ومع ذلك، يؤدي ذلك أيضًا إلى زيادة احتمالية ظهور نتائج إيجابية خاطئة. |
endOfSpeechSensitivity |
اختياريّ. يحدِّد مدى احتمالية انتهاء الكلام الذي تم رصده. |
silenceDurationMs |
اختياريّ. المدة المطلوبة لرصد المحتوى غير الكلامي (مثل الصمت) قبل تسجيل نهاية الكلام وكلما زادت هذه القيمة، زادت فواصل الكلام التي يمكن أن تحدث بدون مقاطعة نشاط المستخدم، ولكن سيؤدي ذلك إلى زيادة وقت استجابة النموذج. |
BidiGenerateContentClientContent
تعديل متزايد للمحادثة الحالية يتم إرساله من العميل يتم إلحاق كل المحتوى هنا بسجلّ المحادثات بدون قيد أو شرط، ويتم استخدامه كجزء من الطلب الذي يوجّهه النموذج لإنشاء المحتوى.
ستؤدي رسالة هنا إلى إيقاف أي عملية حالية لإنشاء نموذج.
الحقول | |
---|---|
turns[] |
اختياريّ. المحتوى الذي تم إلحاقه بالمحادثة الحالية مع النموذج بالنسبة إلى طلبات البحث التي تتضمّن جولة واحدة، يكون هذا مثيلًا واحدًا. بالنسبة إلى طلبات البحث التي تتضمّن عدّة أدوار، هذا حقل متكرّر يحتوي على سجلّ المحادثة وآخر طلب. |
turnComplete |
اختياريّ. إذا كانت القيمة صحيحة، يعني ذلك أنّه يجب بدء إنشاء محتوى الخادم بالطلب المتراكم حاليًا. بخلاف ذلك، ينتظر الخادم رسائل إضافية قبل بدء عملية الإنشاء. |
BidiGenerateContentRealtimeInput
بيانات المستخدم التي يتم إرسالها في الوقت الفعلي
يتم التعامل مع الوسائط المختلفة (الصوت والفيديو والنص) على أنّها أحداث بث متزامنة. لا يمكن ضمان ترتيب المحتوى في هذه القنوات.
يختلف هذا الإجراء عن BidiGenerateContentClientContent
في بضع طرق:
- يمكن إرسالها باستمرار بدون انقطاع لإنشاء النماذج.
- إذا كانت هناك حاجة إلى خلط البيانات المتداخلة في
BidiGenerateContentClientContent
وBidiGenerateContentRealtimeInput
، يحاول الخادم تحسينها للحصول على أفضل استجابة، ولكن لا تتوفّر أي ضمانات. - لا يتم تحديد نهاية المقطع الختامي صراحةً، بل يتم استنتاجها من نشاط المستخدم (على سبيل المثال، نهاية الكلام).
- حتى قبل نهاية المحادثة، تتم معالجة البيانات بشكل تدريجي لتحسين بدء الاستجابة من النموذج بسرعة.
الحقول | |
---|---|
mediaChunks[] |
اختياريّ. بيانات وحدات البايت المضمّنة لإدخال الوسائط لا تتوفّر عناوين تم إيقاف هذه القيمة نهائيًا: استخدِم إحدى القيم |
audio |
اختياريّ. وتشكل هذه العناصر بثّ إدخال الصوت في الوقت الفعلي. |
video |
اختياريّ. وتشكل هذه الإطارات بث إدخال الفيديو في الوقت الفعلي. |
activityStart |
اختياريّ. يُستخدَم لتحديد بدء نشاط المستخدِم. لا يمكن إرسال هذا الإشعار إلا إذا تم إيقاف ميزة رصد النشاط التلقائي (أي من جهة الخادم). |
activityEnd |
اختياريّ. يشير إلى نهاية نشاط المستخدِم. لا يمكن إرسال هذا الإشعار إلا إذا تم إيقاف ميزة رصد النشاط التلقائي (أي من جهة الخادم). |
audioStreamEnd |
اختياريّ. يشير ذلك إلى أنّ بث الصوت قد انتهى، مثلاً بسبب إيقاف الميكروفون. من المفترض ألا يتم إرسال هذا الإشعار إلا عند تفعيل ميزة "رصد النشاط تلقائيًا" (وهي الإعداد التلقائي). يمكن للعميل إعادة فتح البث من خلال إرسال رسالة صوتية. |
text |
اختياريّ. وتشكل هذه الرسائل بث إدخال النصوص في الوقت الفعلي. |
BidiGenerateContentServerContent
تعديل متزايد للخادم ينشئه النموذج استجابةً لرسائل العميل
يتم إنشاء المحتوى في أسرع وقت ممكن، وليس في الوقت الفعلي. يمكن للعملاء اختيار تخزين المحتوى مؤقتًا وتشغيله في الوقت الفعلي.
الحقول | |
---|---|
generationComplete |
النتائج فقط. إذا كانت القيمة "true"، يعني ذلك أنّه قد اكتمل إنشاء النموذج. عند انقطاع النموذج أثناء إنشاء النموذج، لن تظهر رسالة generation_complete في الخطوة المتقطّعة، بل ستظهر رسالة interrupted > turn_complete. عندما يفترض النموذج تشغيل الفيديو في الوقت الفعلي، سيحدث تأخير بين generation_complete وturn_complete بسبب انتظار النموذج لإنهاء التشغيل. |
turnComplete |
النتائج فقط. إذا كانت القيمة صحيحة، يعني ذلك أنّ النموذج قد أكمل دوره. ولن يبدأ إنشاء المحتوى إلا استجابةً لرسائل العميل الإضافية. |
interrupted |
النتائج فقط. إذا كان صحيحًا، يشير ذلك إلى أنّ رسالة عميل قد قاطعت إنشاء النموذج الحالي. إذا كان العميل يشغّل المحتوى في الوقت الفعلي، هذا مؤشر جيد لإيقاف قائمة التشغيل الحالية وإفراغها. |
groundingMetadata |
النتائج فقط. البيانات الوصفية الأساسية للمحتوى الذي تم إنشاؤه |
outputTranscription |
النتائج فقط. عرض النص المُحوَّل من الصوت يتم إرسال نص المكالمة بشكل مستقل عن رسائل الخادم الأخرى، ولا يمكن ضمان ترتيبه، لا سيما بين |
modelTurn |
النتائج فقط. المحتوى الذي أنشأه النموذج كجزء من المحادثة الحالية مع المستخدم |
BidiGenerateContentServerMessage
رسالة الردّ على طلب BidiGenerateContent
الحقول | |
---|---|
usageMetadata |
النتائج فقط. البيانات الوصفية حول الاستخدام للاستجابات |
حقل الربط messageType نوع الرسالة يمكن أن يكون messageType واحدًا فقط مما يلي: |
|
setupComplete |
النتائج فقط. يتم إرسالها استجابةً لرسالة |
serverContent |
النتائج فقط. المحتوى الذي ينشئه النموذج استجابةً لرسائل العملاء |
toolCall |
النتائج فقط. اطلب من العميل تنفيذ |
toolCallCancellation |
النتائج فقط. إشعار للعميل بأنّه يجب إلغاء |
goAway |
النتائج فقط. إشعار بأنّ الاتصال بالخادم سيتم إلغاؤه قريبًا |
sessionResumptionUpdate |
النتائج فقط. تعديل حالة استئناف الجلسة |
BidiGenerateContentSetup
الرسالة التي سيتم إرسالها في أول (وأول مرة فقط) BidiGenerateContentClientMessage
. يحتوي على الإعدادات التي سيتم تطبيقها طوال مدة طلب بيانات RPC لبث الوسائط.
على العملاء الانتظار إلى أن تصلهم رسالة BidiGenerateContentSetupComplete
قبل إرسال أي رسائل إضافية.
الحقول | |
---|---|
model |
مطلوب. اسم مورد النموذج. ويُستخدَم هذا الرمز كمعرّف للنموذج. التنسيق: |
generationConfig |
اختياريّ. إعدادات الإنشاء الحقول التالية غير متوافقة:
|
systemInstruction |
اختياريّ. قدّم المستخدم تعليمات النظام للنموذج. ملاحظة: يجب استخدام النص فقط في الأجزاء، وسيتم عرض المحتوى في كل جزء في فقرة منفصلة. |
tools[] |
اختياريّ. قائمة
|
realtimeInputConfig |
اختياريّ. لضبط طريقة التعامل مع الإدخال في الوقت الفعلي |
sessionResumption |
اختياريّ. لضبط آلية استئناف الجلسة في حال تضمينها، سيُرسِل الخادم |
contextWindowCompression |
اختياريّ. لضبط آلية ضغط نافذة السياق في حال تضمين هذا الخيار، سيقلّل الخادم تلقائيًا حجم السياق عندما يتجاوز الطول الذي تم ضبطه. |
outputAudioTranscription |
اختياريّ. في حال ضبط هذا الخيار، يتم تفعيل ميزة تحويل الصوت إلى نص لإخراج الصوت من النموذج. يتم ضبط النص المكتوب بما يتوافق مع رمز اللغة المحدّد للصوت الذي يتم إخراجه، في حال ضبطه. |
BidiGenerateContentSetupComplete
لا يحتوي هذا النوع على أي حقول.
تم إرسالها استجابةً لرسالة BidiGenerateContentSetup
من العميل.
BidiGenerateContentToolCall
اطلب من العميل تنفيذ functionCalls
وإرجاع الردود مع id
المطابقة.
الحقول | |
---|---|
functionCalls[] |
النتائج فقط. استدعاء الدالة المطلوب تنفيذه |
BidiGenerateContentToolCallCancellation
إشعار للعميل بأنّه يجب إلغاء ToolCallMessage
الذي تم إصداره سابقًا مع id
المحدّدة إذا كانت هناك آثار جانبية لهذه طلبات الأداة، قد يحاول العملاء التراجع عن طلبات الأداة. لا تظهر هذه الرسالة إلا في الحالات التي يقاطع فيها العملاء دورات الخادم.
الحقول | |
---|---|
ids[] |
النتائج فقط. أرقام تعريف طلبات الأداة المطلوب إلغاؤها |
BidiGenerateContentToolResponse
استجابة أنشأها العميل لطلب ToolCall
تم تلقّيه من الخادم تتم مطابقة كائنات FunctionResponse
الفردية مع كائنات FunctionCall
ذات الصلة من خلال حقل id
.
يُرجى العلم أنّه في طلبات البيانات أحادية الاتجاه وطلبات البيانات من خلال البث من الخادم لواجهات برمجة التطبيقات GenerateContent، يتمّ استدعاء الدالة من خلال تبادل أجزاء Content
، بينما في طلبات البيانات من خلال البث من الخادم لواجهات برمجة التطبيقات GenerateContent، يتمّ استدعاء الدالة من خلال هذه المجموعة المخصّصة من الرسائل.
الحقول | |
---|---|
functionResponses[] |
اختياريّ. الردّ على طلبات الدالة |
BidiGenerateContentTranscription
تحويل الصوت إلى نص (إدخال أو إخراج)
الحقول | |
---|---|
text |
نص تحويل الصوت إلى نص |
ContextWindowCompressionConfig
تفعّل ميزة "ضغط نافذة السياق"، وهي آلية لإدارة نافذة سياق النموذج كي لا تتجاوز طولًا معيّنًا.
الحقول | |
---|---|
حقل الربط compressionMechanism آلية ضغط نافذة السياق المستخدَمة يمكن أن يكون compressionMechanism واحدًا فقط مما يلي: |
|
slidingWindow |
آلية نافذة منزلقة |
triggerTokens |
عدد الرموز (قبل تنفيذ دورة) المطلوبة لبدء عملية ضغط نافذة السياق ويمكن استخدام هذا الخيار لموازنة الجودة مع وقت الاستجابة، لأنّ فترات السياق الأقصر قد تؤدي إلى استجابة أسرع من النماذج. ومع ذلك، ستؤدي أي عملية ضغط إلى زيادة مؤقتة في وقت الاستجابة، لذا يجب عدم تفعيلها بشكل متكرر. في حال عدم ضبط هذا المَعلم، تكون القيمة التلقائية هي% 80 من الحد الأقصى لفترة السياق في النموذج. ويبقى% 20 لطلب المستخدم أو ردّ النموذج التالي. |
EndSensitivity
يحدّد كيفية رصد نهاية الكلام.
عمليات التعداد | |
---|---|
END_SENSITIVITY_UNSPECIFIED |
القيمة التلقائية هي END_SENSITIVITY_HIGH. |
END_SENSITIVITY_HIGH |
تنتهي عملية التعرّف التلقائي على الكلام بشكلٍ متكرّر. |
END_SENSITIVITY_LOW |
تنتهي عملية التعرّف التلقائي على الكلام بمعدل أقل. |
GoAway
إشعار بأنّ الاتصال بالخادم سيتم إلغاؤه قريبًا
الحقول | |
---|---|
timeLeft |
الوقت المتبقّي قبل إنهاء الاتصال بحالة "تم إلغاء الاتصال" ولن تقلّ هذه المدة مطلقًا عن الحدّ الأدنى الخاص بالنموذج، والذي سيتم تحديده مع حدود معدّل النموذج. |
RealtimeInputConfig
لضبط سلوك الإدخال في الوقت الفعلي في BidiGenerateContent
الحقول | |
---|---|
automaticActivityDetection |
اختياريّ. في حال عدم ضبط الإعداد، يتم تفعيل ميزة "اكتشاف النشاط التلقائي" تلقائيًا. إذا كانت ميزة "اكتشاف الصوت التلقائي" غير مفعّلة، على العميل إرسال إشارات النشاط. |
activityHandling |
اختياريّ. يحدِّد تأثير النشاط. |
turnCoverage |
اختياريّ. لتحديد الإدخالات التي يتم تضمينها في دور المستخدم |
SessionResumptionConfig
إعدادات استئناف الجلسة
يتم تضمين هذه الرسالة في إعدادات الجلسة على النحو التالي: BidiGenerateContentSetup.sessionResumption
. في حال ضبطه، سيرسل الخادم SessionResumptionUpdate
رسالة.
الحقول | |
---|---|
handle |
الاسم المعرِّف لجلسة سابقة. وفي حال عدم توفّر جلسة، يتم إنشاء جلسة جديدة. تأتي أسماء الجلسات من قيم |
SessionResumptionUpdate
تعديل حالة استئناف الجلسة
لا يتم إرسالها إلا إذا تم ضبط BidiGenerateContentSetup.sessionResumption
.
الحقول | |
---|---|
newHandle |
اسم معرِّف جديد يمثّل حالة يمكن استئنافها فارغة إذا كان |
resumable |
صحيح إذا كان يمكن استئناف الجلسة الحالية في هذه المرحلة. لا يمكن استئناف التسجيل في بعض نقاط الجلسة. على سبيل المثال، عندما ينفِّذ النموذج استدعاءات الدوالّ أو ينشئ. سيؤدي استئناف الجلسة (باستخدام رمز أمان جلسة سابق) في هذه الحالة إلى فقدان بعض البيانات. وفي هذه الحالات، ستكون |
SlidingWindow
تعمل طريقة SlidingWindow من خلال تجاهل المحتوى في بداية نافذة السياق. سيبدأ السياق الناتج دائمًا في بداية دور USER. ستظل تعليمات النظام وأي BidiGenerateContentSetup.prefixTurns
في بداية النتيجة دائمًا.
الحقول | |
---|---|
targetTokens |
العدد المستهدَف من الرموز المميّزة المطلوب الاحتفاظ بها القيمة التلقائية هي trigger_tokens/2. يؤدي تجاهل أجزاء من نافذة السياق إلى زيادة مؤقتة في وقت الاستجابة، لذا يجب معايرة هذه القيمة لتجنُّب عمليات الضغط المتكررة. |
StartSensitivity
يحدِّد كيفية رصد بداية الكلام.
عمليات التعداد | |
---|---|
START_SENSITIVITY_UNSPECIFIED |
القيمة التلقائية هي START_SENSITIVITY_HIGH. |
START_SENSITIVITY_HIGH |
سيرصد التعرّف التلقائي بداية الكلام بشكلٍ متكرّر. |
START_SENSITIVITY_LOW |
سيرصد التعرّف التلقائي بداية الكلام بمعدل أقل. |
TurnCoverage
خيارات حول الإدخالات التي يتم تضمينها في دور المستخدم
عمليات التعداد | |
---|---|
TURN_COVERAGE_UNSPECIFIED |
إذا لم يتم تحديد قيمة، يكون السلوك التلقائي هو TURN_INCLUDES_ONLY_ACTIVITY . |
TURN_INCLUDES_ONLY_ACTIVITY |
لا يتضمّن دور المستخدمين سوى النشاط منذ الدور الأخير، باستثناء الفترات التي لم يتم فيها التفاعل (مثل فترة الصمت في البث الصوتي). هذا هو السلوك التلقائي. |
TURN_INCLUDES_ALL_INPUT |
يتضمّن دور المستخدمين جميع الإدخالات في الوقت الفعلي منذ الدور الأخير، بما في ذلك حالات عدم النشاط (مثل الصمت في بث الصوت). |
UsageMetadata
البيانات الوصفية حول الاستخدام للاستجابات
الحقول | |
---|---|
promptTokenCount |
النتائج فقط. عدد الرموز المميّزة في الطلب عند ضبط القيمة |
cachedContentTokenCount |
عدد الرموز المميّزة في الجزء المخزّن مؤقتًا من الطلب (المحتوى المخزّن مؤقتًا) |
responseTokenCount |
النتائج فقط. إجمالي عدد الرموز المميّزة في جميع الردود المُحتمَلة التي تم إنشاؤها |
toolUsePromptTokenCount |
النتائج فقط. عدد الرموز المميّزة المتوفّرة في طلبات استخدام الأداة |
thoughtsTokenCount |
النتائج فقط. عدد الرموز المميّزة للأفكار في نماذج التفكير |
totalTokenCount |
النتائج فقط. إجمالي عدد الرموز المميّزة لطلب الإنشاء (الطلب + المرشحون للردّ) |
promptTokensDetails[] |
النتائج فقط. قائمة بالوضعيات التي تمت معالجتها في إدخال الطلب |
cacheTokensDetails[] |
النتائج فقط. قائمة بأشكال المحتوى المخزّن مؤقتًا في إدخال الطلب |
responseTokensDetails[] |
النتائج فقط. قائمة بالوسائط التي تم عرضها في الاستجابة |
toolUsePromptTokensDetails[] |
النتائج فقط. قائمة بالوسائط التي تمت معالجتها لإدخال طلبات استخدام الأداة |
مزيد من المعلومات عن الأنواع الشائعة
لمزيد من المعلومات عن أنواع موارد واجهة برمجة التطبيقات الشائعة الاستخدام Blob
،
Content
، وFunctionCall
، وFunctionResponse
، وGenerationConfig
،
GroundingMetadata
، وModalityTokenCount
، وTool
، يُرجى الاطّلاع على
إنشاء المحتوى.