OpenAI实时API函数调用未执行问题求助
OpenAI实时API函数调用未执行问题求助
我现在遇到一个头疼的问题:已经正确定义并注册了函数,但OpenAI实时API(gpt-4o-realtime-preview-2024-10-01)完全不调用这些函数。AI助手能正常回应用户请求,但哪怕是最简单的测试函数也从来没被触发过。下面是我的环境、代码细节和症状,求大佬帮忙排查!
环境与基础配置
- 使用OpenAI Realtime API的WebSocket连接,模型版本为
gpt-4o-realtime-preview-2024-10-01 - 集成Twilio实现电话通话功能
- 后端基于Node.js/TypeScript开发
- 通过
session.update消息中的tools数组完成函数注册
测试函数定义
我先写了一个无参数的极简测试函数,用来验证调用逻辑:
functions.push({ schema: { name: "test_function", type: "function", description: "A simple test function that returns a greeting message", parameters: { type: "object", properties: {}, required: [], }, }, handler: async () => { return "Hello! This is a test function call response."; }, });
函数注册代码
函数是在发送给OpenAI的session配置中注册的,确保schema完全一致:
const config = session.saved_config || {}; jsonSend(session.modelConn, { type: "session.update", session: { modalities: ["text", "audio"], turn_detection: { type: "server_vad" }, voice: "alloy", input_audio_transcription: { model: "whisper-1" }, input_audio_format: "g711_ulaw", output_audio_format: "g711_ulaw", instructions: instructions, tools: [ { name: "test_function", type: "function", description: "A simple test function that returns a greeting message", parameters: { type: "object", properties: {}, required: [], }, } ], ...config, // 合并前端传来的session配置覆盖项 }, });
函数调用处理代码
我也实现了对应的事件监听逻辑,处理函数调用的响应:
case "response.output_item.done": { const { item } = event; if (item.type === "function_call") { handleFunctionCall(session, item) .then((output) => { if (session.modelConn) { jsonSend(session.modelConn, { type: "conversation.item.create", item: { type: "function_call_output", call_id: item.call_id, output: JSON.stringify(output), }, }); jsonSend(session.modelConn, { type: "response.create" }); } }) .catch((err) => { console.error(`Error handling function call for ${session.streamSid}:`, err); }); } break; }
核心症状
- AI助手能正常回应用户的普通文本/语音查询,对话流程完全正常
- 关键问题:完全没有函数调用的尝试:服务器从未收到过类型为
function_call的response.output_item.done事件 - 函数注册过程无报错,
session.update消息发送成功,OpenAI也返回了正常的响应 - 服务器日志仅记录正常对话内容,完全没有函数执行相关的日志
- 即使我明确向AI指令“调用test_function”,它也只会用自然语言回应,完全不触发函数调用逻辑
额外上下文
- 服务器在
localhost:8081上运行稳定 - 数据库连接正常,无异常报错
- Twilio集成工作正常,电话能正常建立和传输音频
- 音频流、语音转文字功能均正常,用户与助手的语音对话流畅
内容来源于stack exchange




