开发者社区> 问答> 正文

阿里语音AI为什么等所有消息都收到了才能执行websocket 而不是每收到一个消息就执行?

阿里语音AI为什么等所有消息都收到了才能执行websocket 而不是每收到一个消息就执行?
for response in responses: data={"finish_reason":response.output.choices[0]['finish_reason'],'content':response.output.choices[0]['message']['content']} print(data) await websocket.send(json.dumps(data))
这是流式返回内容,我希望每流的内容通过websocket发送给前端,但是测试流的内容都收完了才发送给前端。怎么通过websocket或者其他发送给前端呢?

展开
收起
嘟嘟嘟嘟嘟嘟 2024-01-05 07:58:12 54 0
3 条回答
写回答
取消 提交回答
  • 面对过去,不要迷离;面对未来,不必彷徨;活在今天,你只要把自己完全展示给别人看。

    这是因为在您的代码中,您使用了for response in responses:循环来处理每个响应。这意味着您需要等待所有响应都处理完毕后,才会执行发送websocket的操作。

    如果您希望每收到一个消息就执行websocket发送操作,您可以使用异步编程来实现。以下是一个示例:

    import asyncio
    import websockets
    import json
    
    async def send_data(websocket, data):
        await websocket.send(json.dumps(data))
    
    async def process_response(response):
        data = {"finish_reason": response.output.choices[0]['finish_reason'], 'content': response.output.choices[0]['message']['content']}
        print(data)
        await send_data(websocket, data)
    
    async def main():
        async with websockets.connect('ws://your-websocket-url') as websocket:
            for response in responses:
                await process_response(response)
    
    asyncio.run(main())
    

    在这个示例中,我们定义了一个异步函数process_response来处理每个响应,并在处理完一个响应后立即发送websocket数据。然后,我们在main函数中使用asyncio.run()来运行整个程序。这样,每次收到一个响应时,都会立即执行websocket发送操作。

    2024-01-06 12:40:20
    赞同 展开评论 打赏
  • 这是因为在这段代码中,responses 是一个生成器对象,它只会在需要时生成新的元素。当你使用 for response in responses: 循环时,它会等待每个 response 被处理完毕才会继续下一个 response。这就是为什么你需要等待所有消息都收到才能执行 websocket 的原因。

    如果你想要在每收到一个消息就执行 websocket,你可以将生成器转换为列表,这样你就可以一次性获取所有的 response。但是请注意,这可能会消耗大量的内存,如果你的 responses 非常大的话。

    以下是修改后的代码:

    responses_list = list(responses)
    for response in responses_list:
        data={"finish_reason":response.output.choices[0]['finish_reason'],'content':response.output.choices[0]['message']['content']}
        print(data)
        await websocket.send(json.dumps(data))
    

    但是,如果你只是想要在每收到一个消息就发送给前端,你可能需要重新设计你的程序,使其能够在接收到新的消息时立即处理并发送给前端。

    2024-01-05 09:04:37
    赞同 展开评论 打赏
  • 我们是流式返回的,您这边可以参考下 我们的node js 的sdk 我们目前没有前端的示例。此回答整理自钉群“阿里语音AI【6群】”

    2024-01-05 08:19:16
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
2023云栖大会:PolarDB for AI 立即下载
2023云栖大会:Lindorm一站式AI数据平台实战 立即下载
释放算力潜能加速应用构建Serverless为AI创新提速 立即下载