Gemini Live API จะประมวลผลสตรีมเสียงหรือข้อความต่อเนื่องที่เรียกว่า เซสชัน คุณสามารถจัดการวงจรชีวิตของเซสชันได้ตั้งแต่การเริ่มต้นการเชื่อมต่อครั้งแรกไปจนถึงการสิ้นสุดอย่างราบรื่น
ขีดจำกัดของเซสชัน
สำหรับ Live API นั้น เซสชัน หมายถึงการเชื่อมต่อแบบถาวรที่ระบบจะสตรีมอินพุต และเอาต์พุตอย่างต่อเนื่องผ่านการเชื่อมต่อเดียวกัน
หากเซสชันเกินขีดจำกัด ข้อใดข้อหนึ่ง ต่อไปนี้ ระบบจะยกเลิกการเชื่อมต่อ
ระยะเวลาการเชื่อมต่อ จำกัดไว้ที่ประมาณ 10 นาที
ระยะเวลาเซสชัน จะขึ้นอยู่กับรูปแบบอินพุต
- เซสชันอินพุตแบบเสียงเท่านั้นจำกัดไว้ที่ 15 นาที
- อินพุตวิดีโอ + เสียงจำกัดไว้ที่ 2 นาที
หน้าต่างบริบทของเซสชัน จำกัดไว้ที่ 128,000 โทเค็น
คุณจะได้รับการแจ้งเตือน การสิ้นสุดก่อนที่การเชื่อมต่อจะสิ้นสุดลง ซึ่งจะช่วยให้คุณดำเนินการเพิ่มเติมได้
เริ่มเซสชัน
ดูคู่มือเริ่มต้นใช้งานสำหรับ Live API เพื่อดูข้อมูลโค้ดแบบเต็มที่แสดงวิธีเริ่มเซสชัน
อัปเดตระหว่างเซสชัน
โมเดล Live API รองรับความสามารถขั้นสูงต่อไปนี้สำหรับ การอัปเดตระหว่างเซสชัน:
อัปเดตคำแนะนำระบบ (สำหรับ Vertex AI Gemini API เท่านั้น)
เพิ่มการอัปเดตเนื้อหาแบบเพิ่มทีละส่วน
คุณสามารถเพิ่มการอัปเดตแบบเพิ่มทีละส่วนระหว่างเซสชันที่ใช้งานอยู่ได้ ใช้ฟีเจอร์นี้เพื่อส่งอินพุตข้อความ สร้างบริบทของเซสชัน หรือกู้คืนบริบทของเซสชัน
สำหรับบริบทที่ยาวขึ้น เราขอแนะนำให้ระบุข้อมูลสรุปข้อความเดียวเพื่อเพิ่มพื้นที่ว่างในหน้าต่างบริบทสำหรับการโต้ตอบในภายหลัง
สำหรับบริบทสั้นๆ คุณสามารถส่งการโต้ตอบแบบเลี้ยวต่อเลี้ยวเพื่อแสดงลำดับเหตุการณ์ที่แน่นอน เช่น ข้อมูลโค้ดด้านล่าง
Swift
// Define initial turns (history/context).
let turns: [ModelContent] = [
ModelContent(role: "user", parts: [TextPart("What is the capital of France?")]),
ModelContent(role: "model", parts: [TextPart("Paris")]),
]
// Send history, keeping the conversational turn OPEN (false).
await session.sendContent(turns, turnComplete: false)
// Define the new user query.
let newTurn: [ModelContent] = [
ModelContent(role: "user", parts: [TextPart("What is the capital of Germany?")]),
]
// Send the final query, CLOSING the turn (true) to trigger the model response.
await session.sendContent(newTurn, turnComplete: true)
Kotlin
Not yet supported for Android apps - check back soon!
Java
Not yet supported for Android apps - check back soon!
Web
const turns = [{ text: "Hello from the user!" }];
await session.send(
turns,
false // turnComplete: false
);
console.log("Sent history. Waiting for next input...");
// Define the new user query.
const newTurn [{ text: "And what is the capital of Germany?" }];
// Send the final query, CLOSING the turn (true) to trigger the model response.
await session.send(
newTurn,
true // turnComplete: true
);
console.log("Sent final query. Model response expected now.");
Dart
// Define initial turns (history/context).
final List turns = [
Content(
"user",
[Part.text("What is the capital of France?")],
),
Content(
"model",
[Part.text("Paris")],
),
];
// Send history, keeping the conversational turn OPEN (false).
await session.send(
input: turns,
turnComplete: false,
);
// Define the new user query.
final List newTurn = [
Content(
"user",
[Part.text("What is the capital of Germany?")],
),
];
// Send the final query, CLOSING the turn (true) to trigger the model response.
await session.send(
input: newTurn,
turnComplete: true,
);
Unity
// Define initial turns (history/context).
List turns = new List {
new ModelContent("user", new ModelContent.TextPart("What is the capital of France?") ),
new ModelContent("model", new ModelContent.TextPart("Paris") ),
};
// Send history, keeping the conversational turn OPEN (false).
foreach (ModelContent turn in turns)
{
await session.SendAsync(
content: turn,
turnComplete: false
);
}
// Define the new user query.
ModelContent newTurn = ModelContent.Text("What is the capital of Germany?");
// Send the final query, CLOSING the turn (true) to trigger the model response.
await session.SendAsync(
content: newTurn,
turnComplete: true
);
อัปเดตคำแนะนำระบบระหว่างเซสชัน
| ใช้ได้เฉพาะเมื่อใช้ Vertex AI Gemini API เป็น ผู้ให้บริการ API ของคุณ |
คุณสามารถอัปเดตคำแนะนำระบบระหว่างเซสชันที่ใช้งานอยู่ได้ ใช้ฟีเจอร์นี้เพื่อปรับการตอบสนองของโมเดล เช่น เปลี่ยนภาษาที่ใช้ตอบสนองหรือปรับโทน
หากต้องการอัปเดตคำแนะนำระบบระหว่างเซสชัน คุณสามารถส่งเนื้อหาข้อความที่มีบทบาท system ได้ คำแนะนำระบบที่อัปเดตแล้วจะมีผลตลอดระยะเวลาที่เหลือของเซสชัน
Swift
await session.sendContent(
[ModelContent(
role: "system",
parts: [TextPart("new system instruction")]
)],
turnComplete: false
)
Kotlin
Not yet supported for Android apps - check back soon!
Java
Not yet supported for Android apps - check back soon!
Web
Not yet supported for Web apps - check back soon!
Dart
try {
await _session.send(
input: Content(
'system',
[Part.text('new system instruction')],
),
turnComplete: false,
);
} catch (e) {
print('Failed to update system instructions: $e');
}
Unity
try
{
await session.SendAsync(
content: new ModelContent(
"system",
new ModelContent.TextPart("new system instruction")
),
turnComplete: false
);
}
catch (Exception e)
{
Debug.LogError($"Failed to update system instructions: {e.Message}");
}
ตรวจหาเวลาที่เซสชันกำลังจะสิ้นสุด
ระบบจะส่งการแจ้งเตือน การสิ้นสุด ไปยังไคลเอ็นต์
ตัวอย่างต่อไปนี้แสดงวิธีตรวจหาการสิ้นสุดเซสชันที่กำลังจะเกิดขึ้นโดยการฟังการแจ้งเตือน การสิ้นสุด
Swift
for try await response in session.responses {
switch response.payload {
case .goingAwayNotice(let goingAwayNotice):
// Prepare for the session to close soon
if let timeLeft = goingAwayNotice.timeLeft {
print("Server going away in \(timeLeft) seconds")
}
}
}
Kotlin
for (response in session.responses) {
when (val message = response.payload) {
is LiveServerGoAway -> {
// Prepare for the session to close soon
val remaining = message.timeLeft
logger.info("Server going away in $remaining")
}
}
}
Java
session.getResponses().forEach(response -> {
if (response.getPayload() instanceof LiveServerResponse.GoingAwayNotice) {
LiveServerResponse.GoingAwayNotice notice = (LiveServerResponse.GoingAwayNotice) response.getPayload();
// Prepare for the session to close soon
Duration timeLeft = notice.getTimeLeft();
}
});
Web
for await (const message of session.receive()) {
switch (message.type) {
...
case "goingAwayNotice":
console.log("Server going away. Time left:", message.timeLeft);
break;
}
}
Dart
Future _handleLiveServerMessage(LiveServerResponse response) async {
final message = response.message;
if (message is GoingAwayNotice) {
// Prepare for the session to close soon
developer.log('Server going away. Time left: ${message.timeLeft}');
}
}
Unity
foreach (var response in session.Responses) {
if (response.Payload is LiveSessionGoingAway notice) {
// Prepare for the session to close soon
TimeSpan timeLeft = notice.TimeLeft;
Debug.Log($"Server going away notice received. Remaining: {timeLeft}");
}
}