
2025旅行api集成指南:頂級技巧與api推薦
在將實時 API 集成到應用程序之前,了解 API 支持的事件類型至關重要。以下是與本文示例相關的主要事件類型,完整列表可以參考 OpenAI API 文檔。
會話事件表示客戶端與服務器的整個交互過程,允許設置和更新對話中的參數。以下是一個會話對象的示例:
{
"session_id": "example_session",
"parameters": {
"voice": "en-US",
"input_format": "audio",
"output_format": "text",
"instructions": "Translate to English",
"tools": []
}
}
通過 session.update
事件將上述 JSON 對象發送到實時 API,可以設置默認參數,例如語音類型、輸入輸出格式和可用工具等。然而,在使用過程中,我發現以下兩個屬性會導致調用失敗:
input_audio_transcription
max_output_tokens
建議在調用前移除這些屬性,以避免會話調用失敗。
對話事件用于管理客戶端與服務器之間的通信。最常用的事件是 conversation.item.create
,它可以向對話中添加新項目。例如:
function_call
項目function_call_output
項目服務器會通過 conversation.item.created
或 conventions.created
響應這些事件。
服務器通過語音活動檢測(VAD)處理傳入的音頻,并在語音結束時生成響應。如果通過客戶端 API 手動創建會話項,則需要通過 response.create
事件觸發服務器響應。
以下是常見的響應事件類型:
response.created
:通知響應開始生成。response.text.delta
:文本響應的一部分。response.text.done
:完整文本響應已生成。response.audio.delta
:音頻響應的一部分,包含 Base64 編碼的音頻數據。response.audio.done
:音頻生成完成。為了實現實時語音交互,我將應用程序分為兩部分:
以下是 WebSocket 連接的主要邏輯:
輔助函數的核心功能包括:
session.update
對象的 tools
屬性中。conversation.item.create
對象,并通過 response.create
事件觸發響應。以下是一個解析響應事件的示例代碼:
async def _send_to_client(self, websocket: WebSocket, openai_ws: WebSocketClientProtocol) -> None:
...
audio_payload = base64.b64encode(base64.b64decode(response['delta'])).decode('utf-8')
audio_delta = {
"event": "media",
"media": {
"payload": audio_payload
}
}
# 將音頻增量發送到客戶端
await websocket.send_json(audio_delta)
...
在完成上述功能后,可以將其集成到 FastAPI 應用中。我在 WebSocket 服務器中設置了一個路由,允許用戶連接以發送和接收語音消息。
FastAPI 的 WebSocket API 非常適合此場景,因為其對象(如 WebSocket
)是 JSON 可序列化的,并且可以直接用于路由。
以下是實現的關鍵步驟:
_receive_from_client
函數期望的格式發送。通過以上步驟,您可以構建一個支持語音的 Python FastAPI 應用程序,并實現與 OpenAI 實時 API 的交互。雖然目前實時 API 的成本較高,但其強大的功能為語音應用開發提供了無限可能。
如果您對本文介紹的功能感興趣,可以訪問 mahilo 項目 GitHub 倉庫 查看完整代碼。希望本文能為您的開發提供幫助,祝您編碼愉快!
原文鏈接: https://medium.com/thedeephub/building-a-voice-enabled-python-fastapi-app-using-openais-realtime-api-bfdf2947c3e4