API Trực tiếp là một API có trạng thái sử dụng WebSockets. Trong phần này, bạn sẽ tìm thấy thêm thông tin chi tiết về API WebSockets.
Phiên
Kết nối WebSocket thiết lập một phiên giữa ứng dụng và máy chủ Gemini. Sau khi ứng dụng khởi tạo một kết nối mới, phiên có thể trao đổi thông báo với máy chủ để:
- Gửi văn bản, âm thanh hoặc video đến máy chủ Gemini.
- Nhận yêu cầu gọi âm thanh, văn bản hoặc hàm từ máy chủ Gemini.
Kết nối WebSocket
Để bắt đầu một phiên, hãy kết nối với điểm cuối websocket này:
wss://generativelanguage.googleapis.com/ws/google.ai.generativelanguage.v1beta.GenerativeService.BidiGenerateContent
Cấu hình phiên
Thông báo ban đầu sau khi kết nối sẽ thiết lập cấu hình phiên, bao gồm mô hình, tham số tạo, hướng dẫn hệ thống và các công cụ.
Bạn có thể thay đổi các tham số cấu hình ngoại trừ mô hình trong phiên.
Hãy xem cấu hình mẫu sau. Xin lưu ý rằng cách viết hoa tên trong SDK có thể khác nhau. Bạn có thể tra cứu các tuỳ chọn cấu hình SDK Python tại đây.
{
"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]
}
Để biết thêm thông tin về trường API, hãy xem generationConfig.
Gửi tin nhắn
Để trao đổi thông điệp qua kết nối WebSocket, ứng dụng phải gửi một đối tượng JSON qua kết nối WebSocket đang mở. Đối tượng JSON phải có chính xác một trường trong tập hợp đối tượng sau:
{
"setup": BidiGenerateContentSetup,
"clientContent": BidiGenerateContentClientContent,
"realtimeInput": BidiGenerateContentRealtimeInput,
"toolResponse": BidiGenerateContentToolResponse
}
Tin nhắn ứng dụng được hỗ trợ
Xem các thông báo ứng dụng được hỗ trợ trong bảng sau:
Thông điệp | Mô tả |
---|---|
BidiGenerateContentSetup |
Cấu hình phiên sẽ được gửi trong thông báo đầu tiên |
BidiGenerateContentClientContent |
Nội dung cập nhật gia tăng của cuộc trò chuyện hiện tại do ứng dụng gửi |
BidiGenerateContentRealtimeInput |
Nhập âm thanh, video hoặc văn bản theo thời gian thực |
BidiGenerateContentToolResponse |
Phản hồi ToolCallMessage nhận được từ máy chủ |
Nhận tin nhắn
Để nhận thông báo từ Gemini, hãy theo dõi sự kiện "message" (thông báo) của WebSocket, sau đó phân tích cú pháp kết quả theo định nghĩa của thông báo máy chủ được hỗ trợ.
Xem các mục sau đây:
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)
Thông báo của máy chủ có thể có trường usageMetadata
, nhưng sẽ bao gồm chính xác một trong các trường khác của thông báo BidiGenerateContentServerMessage
. (Kết hợp messageType
không được biểu thị bằng JSON nên trường này sẽ xuất hiện ở cấp cao nhất của thông báo.)
Tin nhắn và sự kiện
ActivityEnd
Loại này không có trường nào.
Đánh dấu thời điểm kết thúc hoạt động của người dùng.
ActivityHandling
Các cách xử lý hoạt động của người dùng.
Enum | |
---|---|
ACTIVITY_HANDLING_UNSPECIFIED |
Nếu không chỉ định, hành vi mặc định sẽ là START_OF_ACTIVITY_INTERRUPTS . |
START_OF_ACTIVITY_INTERRUPTS |
Nếu đúng, hoạt động bắt đầu sẽ làm gián đoạn phản hồi của mô hình (còn gọi là "barge in"). Phản hồi hiện tại của mô hình sẽ bị cắt bỏ tại thời điểm bị gián đoạn. Đây là hành vi mặc định. |
NO_INTERRUPTION |
Phản hồi của mô hình sẽ không bị gián đoạn. |
ActivityStart
Loại này không có trường nào.
Đánh dấu thời điểm bắt đầu hoạt động của người dùng.
AudioTranscriptionConfig
Loại này không có trường nào.
Cấu hình bản chép lời âm thanh.
AutomaticActivityDetection
Định cấu hình tính năng tự động phát hiện hoạt động.
Trường | |
---|---|
disabled |
Không bắt buộc. Nếu được bật (mặc định), hoạt động nhập liệu bằng giọng nói và văn bản được phát hiện sẽ được tính là hoạt động. Nếu bị tắt, ứng dụng phải gửi tín hiệu hoạt động. |
startOfSpeechSensitivity |
Không bắt buộc. Xác định khả năng phát hiện lời nói. |
prefixPaddingMs |
Không bắt buộc. Thời lượng bắt buộc của lời nói được phát hiện trước khi bắt đầu lời nói được xác nhận. Giá trị này càng thấp thì tính năng phát hiện bắt đầu lời nói càng nhạy và có thể nhận dạng được lời nói ngắn hơn. Tuy nhiên, điều này cũng làm tăng khả năng có kết quả dương tính giả. |
endOfSpeechSensitivity |
Không bắt buộc. Xác định khả năng lời nói được phát hiện đã kết thúc. |
silenceDurationMs |
Không bắt buộc. Thời lượng bắt buộc của nội dung không phải lời nói được phát hiện (ví dụ: im lặng) trước khi kết thúc lời nói. Giá trị này càng lớn thì khoảng thời gian không có lời nói càng dài mà không làm gián đoạn hoạt động của người dùng, nhưng điều này sẽ làm tăng độ trễ của mô hình. |
BidiGenerateContentClientContent
Nội dung cập nhật gia tăng của cuộc trò chuyện hiện tại do ứng dụng gửi. Tất cả nội dung ở đây được thêm vào nhật ký cuộc trò chuyện một cách vô điều kiện và được dùng làm một phần của câu lệnh cho mô hình để tạo nội dung.
Thông báo tại đây sẽ làm gián đoạn mọi hoạt động tạo mô hình hiện tại.
Trường | |
---|---|
turns[] |
Không bắt buộc. Nội dung được thêm vào cuộc trò chuyện hiện tại với mô hình. Đối với truy vấn một lượt, đây là một thực thể duy nhất. Đối với các truy vấn nhiều lượt, đây là trường lặp lại chứa nhật ký trò chuyện và yêu cầu mới nhất. |
turnComplete |
Không bắt buộc. Nếu đúng, hãy cho biết rằng quá trình tạo nội dung máy chủ sẽ bắt đầu bằng lời nhắc hiện đã tích luỹ. Nếu không, máy chủ sẽ chờ thêm thông báo trước khi bắt đầu tạo. |
BidiGenerateContentRealtimeInput
Dữ liệu do người dùng nhập được gửi theo thời gian thực.
Các phương thức khác nhau (âm thanh, video và văn bản) được xử lý dưới dạng luồng đồng thời. Chúng tôi không đảm bảo thứ tự của các luồng này.
Phương thức này khác với BidiGenerateContentClientContent
ở một số điểm:
- Có thể gửi liên tục mà không bị gián đoạn để tạo mô hình.
- Nếu cần kết hợp dữ liệu được xen kẽ trên
BidiGenerateContentClientContent
vàBidiGenerateContentRealtimeInput
, máy chủ sẽ cố gắng tối ưu hoá để phản hồi tốt nhất, nhưng không có gì đảm bảo. - Điểm kết thúc lượt nói không được chỉ định rõ ràng, mà thay vào đó là bắt nguồn từ hoạt động của người dùng (ví dụ: kết thúc lời nói).
- Ngay cả trước khi kết thúc lượt, dữ liệu vẫn được xử lý tăng dần để tối ưu hoá việc bắt đầu nhanh phản hồi từ mô hình.
Trường | |
---|---|
mediaChunks[] |
Không bắt buộc. Dữ liệu byte nội tuyến cho dữ liệu đầu vào đa phương tiện. Không hỗ trợ nhiều KHÔNG DÙNG NỮA: Thay vào đó, hãy sử dụng một trong các |
audio |
Không bắt buộc. Các gói này tạo thành luồng đầu vào âm thanh theo thời gian thực. |
video |
Không bắt buộc. Các khung hình này tạo thành luồng đầu vào video theo thời gian thực. |
activityStart |
Không bắt buộc. Đánh dấu thời điểm bắt đầu hoạt động của người dùng. Bạn chỉ có thể gửi thông báo này nếu tính năng phát hiện hoạt động tự động (tức là phía máy chủ) bị tắt. |
activityEnd |
Không bắt buộc. Đánh dấu thời điểm kết thúc hoạt động của người dùng. Bạn chỉ có thể gửi thông báo này nếu tính năng phát hiện hoạt động tự động (tức là phía máy chủ) bị tắt. |
audioStreamEnd |
Không bắt buộc. Cho biết luồng âm thanh đã kết thúc, ví dụ: do micrô bị tắt. Bạn chỉ nên gửi thông báo này khi bật tính năng tự động phát hiện hoạt động (đây là chế độ mặc định). Ứng dụng khách có thể mở lại luồng bằng cách gửi tin nhắn âm thanh. |
text |
Không bắt buộc. Các dòng này tạo thành luồng nhập văn bản theo thời gian thực. |
BidiGenerateContentServerContent
Nội dung cập nhật máy chủ gia tăng do mô hình tạo ra để phản hồi thông báo của ứng dụng khách.
Nội dung được tạo nhanh nhất có thể chứ không phải theo thời gian thực. Ứng dụng có thể chọn lưu vào bộ đệm và phát theo thời gian thực.
Trường | |
---|---|
generationComplete |
Chỉ có đầu ra. Nếu là true, cho biết mô hình đã tạo xong. Khi mô hình bị gián đoạn trong khi tạo, sẽ không có thông báo "generation_complete" trong lượt bị gián đoạn, mà sẽ chuyển sang "interrupted > turn_complete". Khi mô hình giả định phát trực tiếp, sẽ có độ trễ giữa generation_complete và turn_complete do mô hình chờ quá trình phát kết thúc. |
turnComplete |
Chỉ có đầu ra. Nếu là true, cho biết mô hình đã hoàn tất lượt của mình. Quá trình tạo sẽ chỉ bắt đầu khi phản hồi các thông báo khác của ứng dụng. |
interrupted |
Chỉ có đầu ra. Nếu đúng, cho biết một thông báo của ứng dụng đã làm gián đoạn quá trình tạo mô hình hiện tại. Nếu ứng dụng đang phát nội dung theo thời gian thực, thì đây là tín hiệu tốt để dừng và làm trống hàng đợi phát hiện tại. |
groundingMetadata |
Chỉ có đầu ra. Siêu dữ liệu cơ sở cho nội dung được tạo. |
outputTranscription |
Chỉ có đầu ra. Xuất bản chép lời âm thanh. Bản chép lời được gửi độc lập với các thông báo khác của máy chủ và không có thứ tự nào được đảm bảo, đặc biệt là không có thứ tự nào giữa |
modelTurn |
Chỉ có đầu ra. Nội dung mà mô hình đã tạo trong cuộc trò chuyện hiện tại với người dùng. |
BidiGenerateContentServerMessage
Thông báo phản hồi cho lệnh gọi BidiGenerateContent.
Trường | |
---|---|
usageMetadata |
Chỉ có đầu ra. Siêu dữ liệu về cách sử dụng(các) phản hồi. |
Trường hợp hợp nhất messageType . Loại thông báo. messageType chỉ có thể là một trong những giá trị sau: |
|
setupComplete |
Chỉ có đầu ra. Được gửi để phản hồi một thông báo |
serverContent |
Chỉ có đầu ra. Nội dung do mô hình tạo ra để phản hồi tin nhắn của ứng dụng khách. |
toolCall |
Chỉ có đầu ra. Yêu cầu ứng dụng khách thực thi |
toolCallCancellation |
Chỉ có đầu ra. Thông báo cho ứng dụng khách rằng |
goAway |
Chỉ có đầu ra. Thông báo cho biết máy chủ sắp ngắt kết nối. |
sessionResumptionUpdate |
Chỉ có đầu ra. Cập nhật trạng thái tiếp tục phiên. |
BidiGenerateContentSetup
Thông báo sẽ được gửi trong BidiGenerateContentClientMessage
đầu tiên (và chỉ trong BidiGenerateContentClientMessage
đầu tiên). Chứa cấu hình sẽ áp dụng trong suốt thời gian của RPC truyền trực tuyến.
Ứng dụng nên đợi thông báo BidiGenerateContentSetupComplete
trước khi gửi thêm thông báo.
Trường | |
---|---|
model |
Bắt buộc. Tên tài nguyên của mô hình. Đây là mã nhận dạng để Mô hình sử dụng. Định dạng |
generationConfig |
Không bắt buộc. Cấu hình tạo. Các trường sau đây không được hỗ trợ:
|
systemInstruction |
Không bắt buộc. Người dùng đã cung cấp hướng dẫn hệ thống cho mô hình. Lưu ý: Chỉ nên sử dụng văn bản trong các phần và nội dung trong mỗi phần sẽ nằm trong một đoạn riêng. |
tools[] |
Không bắt buộc. Danh sách
|
realtimeInputConfig |
Không bắt buộc. Định cấu hình cách xử lý dữ liệu đầu vào theo thời gian thực. |
sessionResumption |
Không bắt buộc. Định cấu hình cơ chế tiếp tục phiên. Nếu có, máy chủ sẽ gửi thông báo |
contextWindowCompression |
Không bắt buộc. Định cấu hình cơ chế nén cửa sổ ngữ cảnh. Nếu có, máy chủ sẽ tự động giảm kích thước của ngữ cảnh khi ngữ cảnh đó vượt quá độ dài đã định cấu hình. |
outputAudioTranscription |
Không bắt buộc. Nếu được đặt, sẽ bật tính năng chép lời đầu ra âm thanh của mô hình. Bản chép lời sẽ phù hợp với mã ngôn ngữ được chỉ định cho âm thanh đầu ra, nếu bạn đã định cấu hình. |
BidiGenerateContentSetupComplete
Loại này không có trường nào.
Được gửi để phản hồi một thông báo BidiGenerateContentSetup
từ ứng dụng khách.
BidiGenerateContentToolCall
Yêu cầu ứng dụng khách thực thi functionCalls
và trả về các phản hồi bằng id
phù hợp.
Trường | |
---|---|
functionCalls[] |
Chỉ có đầu ra. Lệnh gọi hàm sẽ được thực thi. |
BidiGenerateContentToolCallCancellation
Thông báo cho ứng dụng khách rằng ToolCallMessage
đã phát hành trước đó với các id
được chỉ định không được thực thi và phải bị huỷ. Nếu có hiệu ứng phụ đối với các lệnh gọi công cụ đó, ứng dụng có thể cố gắng huỷ các lệnh gọi công cụ. Thông báo này chỉ xảy ra trong trường hợp ứng dụng khách làm gián đoạn lượt chuyển đổi máy chủ.
Trường | |
---|---|
ids[] |
Chỉ có đầu ra. Mã của các lệnh gọi công cụ cần huỷ. |
BidiGenerateContentToolResponse
Phản hồi do ứng dụng tạo cho một ToolCall
nhận được từ máy chủ. Các đối tượng FunctionResponse
riêng lẻ được so khớp với các đối tượng FunctionCall
tương ứng theo trường id
.
Xin lưu ý rằng trong API Tạo nội dung một chiều và API Tạo nội dung truyền trực tuyến qua máy chủ, việc gọi hàm diễn ra bằng cách trao đổi các phần Content
, trong khi trong API Tạo nội dung hai chiều, việc gọi hàm diễn ra qua các nhóm thông báo chuyên dụng này.
Trường | |
---|---|
functionResponses[] |
Không bắt buộc. Phản hồi cho các lệnh gọi hàm. |
BidiGenerateContentTranscription
Bản chép lời âm thanh (đầu vào hoặc đầu ra).
Trường | |
---|---|
text |
Văn bản chép lời. |
ContextWindowCompressionConfig
Bật tính năng nén cửa sổ ngữ cảnh — một cơ chế để quản lý cửa sổ ngữ cảnh của mô hình sao cho không vượt quá một độ dài nhất định.
Trường | |
---|---|
Trường hợp hợp nhất compressionMechanism . Cơ chế nén cửa sổ ngữ cảnh được sử dụng. compressionMechanism chỉ có thể là một trong những giá trị sau: |
|
slidingWindow |
Cơ chế cửa sổ trượt. |
triggerTokens |
Số lượng mã thông báo (trước khi chạy một lượt) cần thiết để kích hoạt quá trình nén cửa sổ ngữ cảnh. Bạn có thể dùng thông tin này để cân bằng chất lượng với độ trễ vì cửa sổ ngữ cảnh ngắn hơn có thể giúp mô hình phản hồi nhanh hơn. Tuy nhiên, mọi thao tác nén sẽ làm tăng độ trễ tạm thời, vì vậy, bạn không nên kích hoạt các thao tác này thường xuyên. Nếu bạn không đặt, giá trị mặc định sẽ là 80% giới hạn cửa sổ ngữ cảnh của mô hình. Điều này sẽ để lại 20% cho yêu cầu/phản hồi mô hình tiếp theo của người dùng. |
EndSensitivity
Xác định cách phát hiện điểm kết thúc lời nói.
Enum | |
---|---|
END_SENSITIVITY_UNSPECIFIED |
Giá trị mặc định là END_SENSITIVITY_HIGH. |
END_SENSITIVITY_HIGH |
Tính năng tự động phát hiện kết thúc lời nói thường xuyên hơn. |
END_SENSITIVITY_LOW |
Tính năng tự động phát hiện ít kết thúc lời nói hơn. |
GoAway
Thông báo cho biết máy chủ sắp ngắt kết nối.
Trường | |
---|---|
timeLeft |
Thời gian còn lại trước khi kết nối bị chấm dứt là ABORTED (BỊ HUỶ). Thời lượng này sẽ không bao giờ nhỏ hơn thời lượng tối thiểu dành riêng cho mô hình. Thời lượng này sẽ được chỉ định cùng với giới hạn tốc độ cho mô hình. |
RealtimeInputConfig
Định cấu hình hành vi nhập theo thời gian thực trong BidiGenerateContent
.
Trường | |
---|---|
automaticActivityDetection |
Không bắt buộc. Nếu bạn không đặt, tính năng tự động phát hiện hoạt động sẽ được bật theo mặc định. Nếu tính năng phát hiện giọng nói tự động bị tắt, thì ứng dụng phải gửi tín hiệu hoạt động. |
activityHandling |
Không bắt buộc. Xác định hiệu ứng của hoạt động. |
turnCoverage |
Không bắt buộc. Xác định dữ liệu đầu vào nào có trong lượt của người dùng. |
SessionResumptionConfig
Cấu hình tiếp tục phiên.
Thông báo này được đưa vào cấu hình phiên dưới dạng BidiGenerateContentSetup.sessionResumption
. Nếu được định cấu hình, máy chủ sẽ gửi thông báo SessionResumptionUpdate
.
Trường | |
---|---|
handle |
Tên người dùng của một phiên trước đó. Nếu không có, một phiên mới sẽ được tạo. Tên phiên hoạt động đến từ các giá trị |
SessionResumptionUpdate
Cập nhật trạng thái tiếp tục phiên.
Chỉ gửi nếu bạn đã đặt BidiGenerateContentSetup.sessionResumption
.
Trường | |
---|---|
newHandle |
Tên người dùng mới đại diện cho trạng thái có thể tiếp tục. Trống nếu |
resumable |
Đúng nếu có thể tiếp tục phiên hiện tại tại thời điểm này. Không thể tiếp tục ở một số điểm trong phiên. Ví dụ: khi mô hình đang thực thi lệnh gọi hàm hoặc tạo. Việc tiếp tục phiên (sử dụng mã thông báo phiên trước đó) ở trạng thái như vậy sẽ dẫn đến việc mất một số dữ liệu. Trong những trường hợp này, |
SlidingWindow
Phương thức SlidingWindow hoạt động bằng cách loại bỏ nội dung ở đầu cửa sổ ngữ cảnh. Ngữ cảnh thu được sẽ luôn bắt đầu từ đầu lượt của vai trò NGƯỜI DÙNG. Hướng dẫn hệ thống và mọi BidiGenerateContentSetup.prefixTurns
sẽ luôn nằm ở đầu kết quả.
Trường | |
---|---|
targetTokens |
Số lượng mã thông báo mục tiêu cần giữ lại. Giá trị mặc định là trigger_tokens/2. Việc loại bỏ các phần của cửa sổ ngữ cảnh sẽ làm tăng độ trễ tạm thời, vì vậy, bạn nên điều chỉnh giá trị này để tránh các thao tác nén thường xuyên. |
StartSensitivity
Xác định cách phát hiện thời điểm bắt đầu lời nói.
Enum | |
---|---|
START_SENSITIVITY_UNSPECIFIED |
Giá trị mặc định là START_SENSITIVITY_HIGH. |
START_SENSITIVITY_HIGH |
Tính năng phát hiện tự động sẽ phát hiện điểm bắt đầu lời nói thường xuyên hơn. |
START_SENSITIVITY_LOW |
Tính năng tự động phát hiện sẽ phát hiện ít trường hợp bắt đầu lời nói hơn. |
TurnCoverage
Các tuỳ chọn về dữ liệu đầu vào được đưa vào lượt của người dùng.
Enum | |
---|---|
TURN_COVERAGE_UNSPECIFIED |
Nếu không chỉ định, hành vi mặc định sẽ là TURN_INCLUDES_ONLY_ACTIVITY . |
TURN_INCLUDES_ONLY_ACTIVITY |
Lượt của người dùng chỉ bao gồm hoạt động kể từ lượt trước, ngoại trừ thời gian không hoạt động (ví dụ: không có âm thanh trên luồng âm thanh). Đây là hành vi mặc định. |
TURN_INCLUDES_ALL_INPUT |
Lượt của người dùng bao gồm tất cả dữ liệu đầu vào theo thời gian thực kể từ lượt trước, bao gồm cả thời gian không hoạt động (ví dụ: không có âm thanh trên luồng âm thanh). |
UsageMetadata
Siêu dữ liệu về mức sử dụng của(các) phản hồi.
Trường | |
---|---|
promptTokenCount |
Chỉ có đầu ra. Số lượng mã thông báo trong lời nhắc. Khi bạn đặt |
cachedContentTokenCount |
Số lượng mã thông báo trong phần lời nhắc được lưu vào bộ nhớ đệm (nội dung được lưu vào bộ nhớ đệm) |
responseTokenCount |
Chỉ có đầu ra. Tổng số mã thông báo trên tất cả các đề xuất phản hồi được tạo. |
toolUsePromptTokenCount |
Chỉ có đầu ra. Số lượng mã thông báo có trong(các) lời nhắc sử dụng công cụ. |
thoughtsTokenCount |
Chỉ có đầu ra. Số lượng mã thông báo suy nghĩ cho các mô hình suy nghĩ. |
totalTokenCount |
Chỉ có đầu ra. Tổng số mã thông báo cho yêu cầu tạo (lời nhắc + đề xuất phản hồi). |
promptTokensDetails[] |
Chỉ có đầu ra. Danh sách các phương thức đã được xử lý trong dữ liệu đầu vào của yêu cầu. |
cacheTokensDetails[] |
Chỉ có đầu ra. Danh sách phương thức của nội dung được lưu vào bộ nhớ đệm trong dữ liệu đầu vào của yêu cầu. |
responseTokensDetails[] |
Chỉ có đầu ra. Danh sách phương thức được trả về trong phản hồi. |
toolUsePromptTokensDetails[] |
Chỉ có đầu ra. Danh sách các phương thức đã được xử lý cho dữ liệu đầu vào yêu cầu sử dụng công cụ. |
Thông tin khác về các loại phổ biến
Để biết thêm thông tin về các loại tài nguyên API thường dùng Blob
, Content
, FunctionCall
, FunctionResponse
, GenerationConfig
, GroundingMetadata
, ModalityTokenCount
và Tool
, hãy xem phần Tạo nội dung.