找回密码
 立即注册
首页 业界区 安全 ESP32S3+IDF环境下websocket连接阿里百炼实时多模态大模 ...

ESP32S3+IDF环境下websocket连接阿里百炼实时多模态大模型

汇干环 3 天前
ESP32S3+IDF环境下websocket连接阿里百炼实时多模态大模型

首先贴一个阿里百炼实时多模态大模型的文档(找对这个文档花了我不少时间):
大模型服务平台百炼控制台
文档给出了一个 websocket python 示例,我们要做的是参考并移植到C环境下:
  1. # pip install websocket-client
  2. import json
  3. import websocket
  4. import os
  5. API_KEY=os.getenv("DASHSCOPE_API_KEY")
  6. API_URL = "wss://dashscope.aliyuncs.com/api-ws/v1/realtime?model=qwen-omni-turbo-realtime"
  7. headers = [
  8.     "Authorization: Bearer " + API_KEY
  9. ]
  10. def on_open(ws):
  11.     print(f"Connected to server: {API_URL}")
  12. def on_message(ws, message):
  13.     data = json.loads(message)
  14.     print("Received event:", json.dumps(data, indent=2))
  15. def on_error(ws, error):
  16.     print("Error:", error)
  17. ws = websocket.WebSocketApp(
  18.     API_URL,
  19.     header=headers,
  20.     on_open=on_open,
  21.     on_message=on_message,
  22.     on_error=on_error
  23. )
  24. ws.run_forever()
复制代码
根据这个示例,我们得出需要以下两个参数:
API_URL = "wss://dashscope.aliyuncs.com/api-ws/v1/realtime?model=qwen-omni-turbo-realtime"
headers = [ "Authorization: Bearer " + API_KEY]
所以改写进ESP32-idf环境:
  1. #include "esp_websocket_client.h"
  2. void websocket_event_handler(void *handler_args, esp_event_base_t base, int32_t event_id, void *event_data);
  3. void websocket_init(void)
  4. {
  5.     esp_websocket_client_config_t ws_cfg = {
  6.         .uri = "wss://dashscope.aliyuncs.com/api-ws/v1/realtime?model=qwen-omni-turbo-realtime",                  // 使用带鉴权参数的URL
  7.         .transport = WEBSOCKET_TRANSPORT_OVER_SSL,   // 明确使用SSL传输
  8.         .reconnect_timeout_ms = 10000,               // 重连超时设置
  9.     };
  10.     client = esp_websocket_client_init(&ws_cfg);
  11.     esp_websocket_client_append_header(client, "Authorization", "Bearer sk-XXXXXXXXXXXXXXXXXXXXXXXXXXXX");
  12.     esp_websocket_register_events(client, WEBSOCKET_EVENT_ANY, websocket_event_handler, NULL);
  13.     esp_websocket_client_start(client);
  14. }
  15. void websocket_event_handler(void *handler_args, esp_event_base_t base, int32_t event_id, void *event_data)
  16. {
  17.     esp_websocket_event_data_t *data = (esp_websocket_event_data_t *)event_data;
  18.     switch (event_id) {
  19.         case WEBSOCKET_EVENT_CONNECTED:
  20.             ESP_LOGI("WS", "连接成功");
  21.             vTaskDelay(4000 / portTICK_PERIOD_MS); // 延迟2秒再启动任务
  22.             break;
  23.         case WEBSOCKET_EVENT_DATA:
  24.             printf("收到数据: %s\n", (char*)data->data_ptr);
  25.             break;
  26.         case WEBSOCKET_EVENT_DISCONNECTED:
  27.             ESP_LOGI("WS", "连接断开,尝试重连...");
  28.             break;
  29.     }
  30. }
复制代码
连接成功后得到以下打印:
I (8740) WS: 连接成功
收到数据: {"event_id":"event_R6ALkF8t1bCgkkNymZvvT","type":"session.created","session":{"object":"realtime.session","model":"qwen-omni-turbo-realtime","modalities":["text","audio"],"instructions":"...model instructions here...","voice":"Chelsie","input_audio_format":"pcm16","output_audio_format":"pcm16","input_audio_transcription":{"model":"gummy-realtime-v1"},"turn_detection":{"type":"server_vad","threshold":0.5,"prefix_padding_ms":300,"silence_duration_ms":800,"create_response":true,"interrupt_response":true},"tools":[],"tool_choice":"auto","temperature":0.8,"max_response_output_tokens":"inf","id":"sess_CFP8GFog5dp8RGOrhoJY3"}}
连接成功!

来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
您需要登录后才可以回帖 登录 | 立即注册