现在我正在努力如何在我的 NestJS 项目中运行的流式助手中实现函数调用。 如您所知,示例代码是这样的。
https://platform.openai.com/docs/assistants/overview?context=with-streaming
const run = openai.beta.threads.runs.createAndStream(thread.id, {
assistant_id: assistant.id
})
.on('textCreated', (text) => process.stdout.write('\nassistant > '))
.on('textDelta', (textDelta, snapshot) => process.stdout.write(textDelta.value))
.on('toolCallCreated', (toolCall) => process.stdout.write(`\nassistant > ${toolCall.type}\n\n`))
.on('toolCallDelta', (toolCallDelta, snapshot) => {
if (toolCallDelta.type === 'code_interpreter') {
if (toolCallDelta.code_interpreter.input) {
process.stdout.write(toolCallDelta.code_interpreter.input);
}
if (toolCallDelta.code_interpreter.outputs) {
process.stdout.write("\noutput >\n");
toolCallDelta.code_interpreter.outputs.forEach(output => {
if (output.type === "logs") {
process.stdout.write(`\n${output.logs}\n`);
}
});
}
}
});
它能够让流媒体工作以进行常规文本响应,但现在我陷入了函数调用。 我想了解 OpenAI 的 Nodejs SDK 的事件处理程序。 有没有人知道这件事?尤其是直播助手的函数调用?
调用的函数只是助手中定义的名称和一些参数。您需要通过检查名称和参数来手动处理该函数,如下所示:
.on('toolCallDelta', (toolCallDelta, snapshot) => {
if (toolCallDelta.type === 'function') {
if (toolCallDelta.function.name === 'getWeather') {
// process using your custom code and toolCallDelta.function.arguments, then submit the output back to the run
}
}
});