You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

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_callresponse.output_item.done事件
  • 函数注册过程无报错,session.update消息发送成功,OpenAI也返回了正常的响应
  • 服务器日志仅记录正常对话内容,完全没有函数执行相关的日志
  • 即使我明确向AI指令“调用test_function”,它也只会用自然语言回应,完全不触发函数调用逻辑

额外上下文

  • 服务器在localhost:8081上运行稳定
  • 数据库连接正常,无异常报错
  • Twilio集成工作正常,电话能正常建立和传输音频
  • 音频流、语音转文字功能均正常,用户与助手的语音对话流畅

内容来源于stack exchange

火山引擎 最新活动