AGTCloud API Docs
Hướng dẫnAPI ReferenceTích hợp và tài nguyênCập nhật và hỗ trợ
Tương tác thời gian thực

OpenAI Realtime

Xử lý văn bản, âm thanh và lệnh gọi hàm theo thời gian thực qua Realtime WebSocket.

OpenAI Realtime sử dụng kết nối liên tục và sự kiện hai chiều để xử lý văn bản, âm thanh và lệnh gọi hàm theo thời gian thực. Máy khách gửi sự kiện phiên, bộ đệm âm thanh, mục hội thoại và điều khiển phản hồi; máy chủ liên tục trả về trạng thái phiên, văn bản chuyển đổi từ giọng nói, văn bản, âm thanh, tham số hàm và sự kiện lỗi.

Trang này sử dụng WebSocket làm phương thức kết nối chính. Khi kết nối, thay MODEL_ID bằng ID mô hình khả dụng với tài khoản hiện tại và hỗ trợ Realtime.

Các tình huống điển hình gồm hội thoại giọng nói thời gian thực, chuyển giọng nói cuộc họp thành văn bản và trợ lý giọng nói, dịch thời gian thực, chuyển giọng nói thành văn bản, tương tác mã nguồn thời gian thực và tích hợp thời gian thực phía máy chủ. Kết nối có thể truyền cả văn bản lẫn âm thanh và xử lý VAD, gọi hàm cùng cập nhật trạng thái qua sự kiện.

WSS
wss://api.agtcloud.cn/v1/realtime?model=MODEL_ID

Xác thực và kết nối

Xác thực WebSocket

Ứng dụng phía máy chủ thiết lập kết nối WSS bằng Bearer API Key và gửi Header Realtime Beta trong yêu cầu bắt tay.

MụcGiá trị
Địa chỉ kết nốiwss://api.agtcloud.cn/v1/realtime?model=MODEL_ID
AuthorizationBearer your-api-key
OpenAI-Betarealtime=v1

Chỉ sử dụng API Key dài hạn trên máy chủ đáng tin cậy; không đưa khóa vào trình duyệt, gói ứng dụng di động hoặc kho mã công khai. Mọi kết nối nên dùng HTTPS/WSS.

Token tạm thời

Khi máy khách kết nối, máy chủ đáng tin cậy có thể tạo trước một token tạm thời có hiệu lực một phút và chỉ dùng cho một kết nối.

POST https://api.agtcloud.cn/v1/realtime/sessions
Content-Type: application/json
Authorization: Bearer your-api-key

{
  "model": "MODEL_ID",
  "voice": "verse"
}

Quy trình kết nối

Trong quy trình WebSocket chính, máy chủ trực tiếp thiết lập kết nối bằng API Key; sau khi bắt tay thành công, gửi sự kiện máy khách và nhận sự kiện máy chủ trên cùng kết nối.

Trong quy trình WebRTC, máy khách trước tiên yêu cầu token tạm thời từ máy chủ ứng dụng của mình. Máy chủ ứng dụng gọi API phiên để tạo token; sau đó máy khách tạo SDP Offer, gửi tới điểm cuối Realtime và nhận SDP Answer, rồi trao đổi sự kiện JSON qua kênh dữ liệu oai-events.

Ví dụ kết nối WebSocket

Các ví dụ dưới đây trình bày Node.js, Python, gửi và nhận sự kiện. Sau khi kết nối, máy khách gửi sự kiện JSON và máy chủ cũng liên tục trả về kết quả dưới dạng sự kiện JSON.

WSSKết nối WebSocket và trao đổi sự kiện
import WebSocket from 'ws';

const ws = new WebSocket('wss://api.agtcloud.cn/v1/realtime?model=MODEL_ID', {
  headers: {
    Authorization: 'Bearer your-api-key',
    'OpenAI-Beta': 'realtime=v1',
  },
});

ws.on('open', () => {
  console.log('Đã kết nối với máy chủ.');
});

ws.on('message', (message) => {
  console.log(JSON.parse(message.toString()));
});

Hướng dẫn tích hợp WebRTC

Hiện khuyến nghị sử dụng WebSocket. Trước khi dùng WebRTC, hãy xác nhận mô hình mục tiêu có hỗ trợ hay không; các ví dụ sau trình bày cấu trúc kết nối cơ bản với token tạm thời, SDP, luồng âm thanh và kênh dữ liệu.

Phiên, âm thanh và hội thoại

Realtime hỗ trợ hội thoại chỉ có văn bản, giọng nói hoặc kết hợp cả hai. Cấu hình phiên có thể bao gồm định dạng âm thanh đầu vào và đầu ra, giọng nói, nhiệt độ, độ dài đầu ra tối đa, công cụ và tham số VAD.

  • Định dạng âm thanh đầu vào và đầu ra: pcm16, g711_ulaw, g711_alaw.
  • Các lựa chọn giọng nói trong ví dụ: alloy, echo, shimmer.
  • Cấu hình VAD gồm ngưỡng, khoảng âm thanh đệm trước giọng nói và thời gian im lặng.
  • Hội thoại tiến triển thông qua phiên, mục hội thoại, phần nội dung và sự kiện phản hồi.

Xem các trường sự kiện cụ thể trong trình duyệt sự kiện bên dưới; tham số và miền giá trị dùng chung được tập hợp trong “Kiểu dùng chung”.

Tham khảo sự kiện

Chọn sự kiện để xem định nghĩa trường và ví dụ JSON. Có thể chuyển hướng sự kiện, lọc theo danh mục hoặc tìm tên sự kiện.

Sự kiện phía ứng dụng khách · Phiên

session.update

Cập nhật cấu hình mặc định của phiên.

TrườngKiểuBắt buộcMô tảVí dụ
event_idchuỗiKhôngMã định danh sự kiện do máy khách tạoevent_123
typechuỗiKhôngLoại sự kiệnsession.update
modalitiesmảng chuỗiKhôngCác loại phương thức mà mô hình có thể phản hồi["text", "audio"]
instructionschuỗiKhôngChỉ dẫn hệ thống được đặt trước khi gọi mô hình"Hãy trả lời ngắn gọn và chính xác."
voicechuỗiKhôngGiọng nói mà mô hình sử dụngalloy、echo、shimmer
input_audio_formatchuỗiKhôngĐịnh dạng âm thanh đầu vàopcm16、g711_ulaw、g711_alaw
output_audio_formatchuỗiKhôngĐịnh dạng âm thanh đầu rapcm16、g711_ulaw、g711_alaw
input_audio_transcription.modelchuỗiKhôngMô hình dùng để chuyển giọng nói thành văn bảnwhisper-1
turn_detection.typechuỗiKhôngLoại phát hiện giọng nóiserver_vad
turn_detection.thresholdsốKhôngNgưỡng kích hoạt VAD (0.0-1.0)0.8
turn_detection.prefix_padding_mssố nguyênKhôngThời lượng âm thanh được giữ trước khi giọng nói bắt đầu500
turn_detection.silence_duration_mssố nguyênKhôngThời gian im lặng để xác định giọng nói đã kết thúc1000
toolsmảngKhôngDanh sách công cụ có sẵn cho mô hình[]
tool_choicechuỗiKhôngCách mô hình chọn công cụauto/none/required
temperaturesốKhôngNhiệt độ lấy mẫu của mô hình0.8
max_output_tokenschuỗi/số nguyênKhôngSố token tối đa cho một phản hồi"inf"/4096
Ví dụ JSON
{
  "event_id": "event_123",
  "type": "session.update",
  "modalities": [
    "text",
    "audio"
  ],
  "instructions": "Hãy trả lời ngắn gọn và chính xác.",
  "voice": "alloy",
  "input_audio_format": "pcm16",
  "output_audio_format": "pcm16",
  "input_audio_transcription": {
    "model": "whisper-1"
  },
  "turn_detection": {
    "type": "server_vad",
    "threshold": 0.8,
    "prefix_padding_ms": 500,
    "silence_duration_ms": 1000
  },
  "tools": [],
  "tool_choice": "auto",
  "temperature": 0.8,
  "max_output_tokens": "inf"
}

Kiểu dùng chung

Các phần thu gọn sau tập hợp bảng tham số cho giới hạn tốc độ, gọi hàm, âm thanh, VAD, công cụ, mô hình, sự kiện, phiên, mục hội thoại, nội dung, phản hồi, chuyển giọng nói thành văn bản, luồng âm thanh và WebRTC.

Tham số sự kiện giới hạn tốc độ4 trường
TrườngKiểuBắt buộcMô tảGiá trị tùy chọn hoặc ví dụ
namechuỗiCóTên giới hạnVí dụ: requests_per_min
limitsố nguyênCóGiá trị giới hạnVí dụ: 60
remainingsố nguyênCóDung lượng còn lạiVí dụ: 45
reset_secondssố nguyênCóThời gian đặt lại (giây)Ví dụ: 35
Tham số gọi hàm4 trường
TrườngKiểuBắt buộcMô tảGiá trị tùy chọn hoặc ví dụ
typechuỗiCóLoại hàmVí dụ: function
namechuỗiCóTên hàmVí dụ: get_weather
descriptionchuỗiKhôngMô tả hàmVí dụ: Get the current weather
parametersđối tượngCóĐịnh nghĩa tham số hàmVí dụ: {"type": "object", "properties": {...}}
Tham số định dạng âm thanh4 trường
TrườngKiểuBắt buộcMô tảGiá trị tùy chọn hoặc ví dụ
sample_ratesố nguyên—Tần số lấy mẫuGiá trị hợp lệ: 8000, 16000, 24000, 44100, 48000
channelssố nguyên—Số kênhGiá trị hợp lệ: 1 (đơn kênh), 2 (âm thanh nổi)
bits_per_samplesố nguyên—Số bit mỗi mẫuGiá trị hợp lệ: 16 (pcm16), 8 (g711)
encodingchuỗi—Phương thức mã hóaGiá trị hợp lệ: pcm16, g711_ulaw, g711_alaw
Tham số phát hiện giọng nói3 trường
TrườngKiểuBắt buộcMô tảGiá trị tùy chọn hoặc ví dụ
thresholdsố thực—Ngưỡng kích hoạt VADMặc định: 0.5; phạm vi: 0.0-1.0
prefix_padding_mssố nguyên—Khoảng âm thanh đệm trước giọng nói (mili giây)Mặc định: 500; phạm vi: 0-5000
silence_duration_mssố nguyên—Thời gian phát hiện im lặng (mili giây)Mặc định: 1000; phạm vi: 100-10000
Tham số lựa chọn công cụ2 trường
TrườngKiểuBắt buộcMô tảGiá trị tùy chọn hoặc ví dụ
tool_choicechuỗi—Cách chọn công cụGiá trị hợp lệ: auto, none, required
toolsmảng—Danh sách công cụ có sẵnGiá trị hợp lệ: [{type, name, description, parameters}]
Tham số cấu hình mô hình4 trường
TrườngKiểuBắt buộcMô tảGiá trị tùy chọn hoặc ví dụ
temperaturesố thực—Nhiệt độ lấy mẫuPhạm vi/giá trị hợp lệ: 0.0-2.0; mặc định: 1.0
max_output_tokenssố nguyên/chuỗi—Độ dài đầu ra tối đaPhạm vi/giá trị hợp lệ: 1-4096/"inf"; mặc định: "inf"
modalitiesmảng chuỗi—Phương thức phản hồiPhạm vi/giá trị hợp lệ: ["text", "audio"]; mặc định: ["text"]
voicechuỗi—Loại giọng nóiPhạm vi/giá trị hợp lệ: alloy, echo, shimmer; mặc định: alloy
Tham số chung của sự kiện3 trường
TrườngKiểuBắt buộcMô tảGiá trị tùy chọn hoặc ví dụ
event_idchuỗiCóMã định danh duy nhất của sự kiệnVí dụ: event_123
typechuỗiCóLoại sự kiệnVí dụ: session.update
timestampsố nguyênKhôngDấu thời gian của sự kiện (mili giây)Ví dụ: 1677649363000
Tham số trạng thái phiên3 trường
TrườngKiểuBắt buộcMô tảGiá trị tùy chọn hoặc ví dụ
statuschuỗi—Trạng thái phiênGiá trị hợp lệ: active, ended, error
errorđối tượng—Thông tin lỗiGiá trị hợp lệ: {"type": "error_type", "message": "error message"}
metadatađối tượng—Siêu dữ liệu phiênGiá trị hợp lệ: {"client_id": "web", "session_type": "chat"}
Tham số trạng thái mục hội thoại3 trường
TrườngKiểuBắt buộcMô tảGiá trị tùy chọn hoặc ví dụ
statuschuỗi—Trạng thái mục hội thoạiGiá trị hợp lệ: completed, in_progress, incomplete
rolechuỗi—Vai trò người gửiGiá trị hợp lệ: user, assistant, system
typechuỗi—Loại mục hội thoạiGiá trị hợp lệ: message, function_call, function_call_output
Tham số loại nội dung3 trường
TrườngKiểuBắt buộcMô tảGiá trị tùy chọn hoặc ví dụ
typechuỗi—Loại nội dungGiá trị hợp lệ: text, audio, transcript
formatchuỗi—Định dạng nội dungGiá trị hợp lệ: plain, markdown, html
encodingchuỗi—Phương thức mã hóaGiá trị hợp lệ: utf-8, base64
Tham số trạng thái phản hồi3 trường
TrườngKiểuBắt buộcMô tảGiá trị tùy chọn hoặc ví dụ
statuschuỗi—Trạng thái phản hồiGiá trị hợp lệ: completed, cancelled, failed, incomplete
status_detailsđối tượng—Chi tiết trạng tháiGiá trị hợp lệ: {"reason": "user_cancelled"}
usageđối tượng—Thống kê sử dụngGiá trị hợp lệ: {"total_tokens": 50, "input_tokens": 20, "output_tokens": 30}
Tham số chuyển giọng nói thành văn bản4 trường
TrườngKiểuBắt buộcMô tảGiá trị tùy chọn hoặc ví dụ
enabledboolean—Có bật chuyển giọng nói thành văn bản hay khôngVí dụ: true
modelchuỗi—Mô hình chuyển giọng nói thành văn bảnVí dụ: whisper-1
languagechuỗi—Ngôn ngữ chuyển giọng nói thành văn bảnVí dụ: en, zh, auto
promptchuỗi—Gợi ý chuyển giọng nói thành văn bảnVí dụ: "Transcript of a conversation"
Tham số luồng âm thanh3 trường
TrườngKiểuBắt buộcMô tảGiá trị tùy chọn hoặc ví dụ
chunk_sizesố nguyên—Kích thước khối âm thanh (byte)Giá trị hợp lệ: 1024, 2048, 4096
latencychuỗi—Chế độ độ trễGiá trị hợp lệ: low, balanced, high
compressionchuỗi—Phương thức nénGiá trị hợp lệ: none, opus, mp3
Tham số cấu hình WebRTC3 trường
TrườngKiểuBắt buộcMô tảGiá trị tùy chọn hoặc ví dụ
ice_serversmảng—Danh sách máy chủ ICEMặc định: [{"urls": "stun:stun.l.google.com:19302"}]
audio_constraintsđối tượng—Ràng buộc âm thanhMặc định: {"echoCancellation": true}
connection_timeoutsố nguyên—Thời gian chờ kết nối (mili giây)Mặc định: 30000

Xử lý lỗi và khôi phục

Lỗi Realtime thường thuộc bốn nhóm: kết nối, xác thực, âm thanh hoặc phiên:

LoạiNguyên nhân thường gặpHướng xử lý
Lỗi kết nốiMất mạng, bắt tay thất bại hoặc cấu hình kết nối saiKiểm tra địa chỉ WSS, mạng và yêu cầu bắt tay; giới hạn số lần kết nối lại
Lỗi xác thựcAPI Key không hợp lệ, token tạm thời hết hạn hoặc không khớp địa chỉ APICập nhật thông tin xác thực và bảo đảm API Key khớp địa chỉ API của yêu cầu
Lỗi âm thanhQuyền thiết bị, định dạng không được hỗ trợ hoặc bộ mã hóa/giải mã không khớpKiểm tra quyền thiết bị, tần số lấy mẫu và mã hóa, rồi thiết lập lại luồng âm thanh
Lỗi phiênPhiên hết thời gian, giới hạn đồng thời hoặc trạng thái sự kiện không nhất quánLưu sự kiện lỗi, tạo lại phiên và chuyển sang API không thời gian thực nếu cần

Chiến lược khôi phục có thể bao gồm tự động kết nối lại, khôi phục phiên, thử lại có giới hạn và giảm chức năng. Khi có lỗi, ưu tiên đọc sự kiện error, lưu event_id, error.type, error.code, error.message cùng thông tin sự kiện liên quan, rồi quyết định có gửi lại hay không.