NodeJS 确定OpenAI聊天完成是否执行函数调用或生成消息

khbbv19g  于 2023-08-04  发布在  Node.js
关注(0)|答案(1)|浏览(123)

bounty还有3天到期。回答此问题可获得+50声望奖励。jeznag正在寻找一个答案从一个有信誉的来源

我目前在NestJS应用程序中有一个聊天功能,它使用openai createChatCompletion API根据用户输入生成消息,并将响应流回客户端。随着function calls添加到openai API功能中,我希望可选地执行将记录保存在我的DB中的函数调用,并且在保存之后,我希望生成另一条消息并将响应流传输到客户端。当没有生成函数调用时,我只想像现在这样标准地处理生成的消息。
问题是,我必须在聊天完成的API调用中指定是否应该流传输响应,但我只希望在它不返回函数调用时流传输响应。
感谢任何关于我如何在发送响应之前确定是否会生成函数调用或消息的建议。

nue99wik

nue99wik1#

如果您将stream参数设置为true,聊天完成将流式处理函数调用,您可以在此blog中看到。
你想要的是只有在它不是一个函数调用的时候才能让它流。目前还没有参数允许任何类似的聊天。但也有潜在的变通办法。
对于解决方法,它部分取决于您的容错能力和确切的细节,因为您并不完全知道模型将如何响应。
你有几个不同的选择。如果你的函数调用次数有限(4),你可以尝试使用stop参数,它允许你设置4个模型将停止的序列。将序列设置为函数调用。当函数调用弹出时,你抓住它,执行你的函数,然后回到另一个流调用。也有方法interrupt a stream你可以流,直到你看到一个函数调用,然后中断,并做同样的如上所述。
如果这些解决方案不起作用,您可以将函数调用的流参数默认为false,但当用户知道不太可能有一个时,他们可以传入参数true(反之亦然),但这可能会搞砸。
你也可以尝试预测它,有不同的方法来做到这一点(关键词,一个额外的ai/ml模型),但让它预测是否会有一个函数调用,并确定你要通过的路径。但这偶尔也会出错。
如果你有特定的容错能力(比如你可以不每次都流,但你不能流函数调用),这可能会影响你的设计。对于这种情况,您可能不需要流。

相关问题