Skip to content

修复 OpenAI 工具调用多轮消息的结构化 content 兼容问题#663

Open
Li2718 wants to merge 1 commit intoztxz16:masterfrom
Li2718:fix-openai-tool-content
Open

修复 OpenAI 工具调用多轮消息的结构化 content 兼容问题#663
Li2718 wants to merge 1 commit intoztxz16:masterfrom
Li2718:fix-openai-tool-content

Conversation

@Li2718
Copy link
Copy Markdown
Contributor

@Li2718 Li2718 commented Apr 21, 2026

问题背景

  • 当前 OpenAI 兼容接口在工具调用多轮场景下,对消息结构的兼容不完整
  • 当客户端传入这类常见消息时,会在请求解析阶段报 Complex input not supported yet
  • 具体有两层问题:
    • tool 消息中的对象型 content 不被接受
    • ChatCompletionRequest.messages 的类型定义过窄,连现有 test/api/openai.py 中使用的 assistant.content = None / tool.content = { ... } 这类形态也无法兼容

修改内容

  • 放宽 ChatCompletionRequest.messages 的消息类型定义,使其能够接收现有 OpenAI 工具调用多轮消息结构
  • 在 OpenAI parser 中兼容 role=toolcontent 为对象的情况,将其序列化为 JSON 字符串继续处理
  • 保持其他角色的原有解析口径不变,不额外扩大兼容范围

验证

  • 使用本地最小复现验证:
    • tool.content 为字符串时可正常通过
    • tool.content 为对象时修复前会报错,修复后可正常通过
    • user.content 为对象时仍保持不支持,避免误放宽
  • 使用构造的 ChatCompletionRequest 跑通 create_chat_completion(...),确认以下消息结构现在可以正常进入处理流程:
    • assistant.content = None
    • assistant.tool_calls = [...]
    • tool.content = { ... }

Issue

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant