Skip to content

Bug: OpenAI-compatible 审查模型 temperature 不可配置导致全部工具调用被保守拒绝 #235

Description

@RuoJi6

问题描述

在 Agent 审查模式中,将审查模型配置为 openai_compatible 并接入 GLM Coding Plan(经 OpenAI-compatible 代理)时,所有工具调用都会被审查模块拒绝;使用相同审查提示词切换到 Anthropic 协议后可正常完成审查。

排查后确认,OpenAI 审查请求被上游以 HTTP 400 拒绝,原因是该模型只接受 temperature: 0.6,而 CyberStrikeAI 的审查模型调用无法为此供应商配置/覆盖该参数。调用异常又被 fail-closed 逻辑转换为 reject,最终形成大量误拒绝。

环境

  • CyberStrikeAI:通过官方 upgrade.sh 更新到当时最新版本(2026-08-05)
  • 系统:Kali Linux,linux/arm64
  • 审查模式:Agent 审查模式
  • 主模型协议:OpenAI compatible
  • 审查模型协议(失败时):OpenAI compatible
  • 上游模型:GLM Coding Plan(通过本地 OpenAI-compatible 代理接入)

API Key、登录信息及真实凭据均已省略。

复现步骤

  1. 正常配置主模型并确认普通模型调用成功。
  2. 开启 Agent 审查模式。
  3. hitl.audit_model 配置为 openai_compatible,指向可正常访问的 OpenAI-compatible 地址和模型。
  4. 发起会触发任意工具调用的任务,例如只读查询、exec 或资产查询。
  5. 观察到所有工具调用均被拒绝,审查记录显示:
audit agent: LLM 调用失败,保守拒绝

服务端日志中的实际错误为:

OpenAI chat completion returned non-200
status: 400
body: {"error":{"message":"invalid temperature: only 0.6 is allowed for this model","type":"invalid_request_error"}}

对应工具包括 http-framework-testexecexecutequery_assetslist_project_facts 等,因此与特定工具参数无关。

  1. 保持审查提示词和任务不变,仅将审查模型切换为 Anthropic Messages 协议,审查立即恢复正常,能够返回 approve

预期行为

  • OpenAI-compatible 审查模型应允许配置 temperature,或者按供应商/模型要求覆盖该参数。
  • 审查 LLM 调用失败应与模型明确作出的 reject 区分展示,避免用户将协议或参数错误误认为安全拒绝。

实际行为

  • OpenAI-compatible 审查请求因 temperature 不兼容返回 HTTP 400。
  • 审查模型调用异常被统一转换为 reject,导致所有低风险工具调用被误拒绝。
  • 切换到 Anthropic 协议后问题消失。

建议修复

  1. hitl.audit_model 增加可选的生成参数,例如:
hitl:
  audit_model:
    provider: openai_compatible
    temperature: 0.6
  1. OpenAI 审查客户端应读取并传递该配置,而不是使用不可调整的默认值。
  2. 前端和审查日志区分以下状态:
    • 审查模型明确返回 reject
    • 审查模型 API 调用失败后触发 fail-closed
  3. 建议在错误详情中保留上游 HTTP 状态码和脱敏后的错误消息,便于定位模型兼容问题。

补充说明

此问题不影响普通 OpenAI-compatible 主模型调用;故障仅在 Agent 审查模型调用链中稳定复现。对照 Anthropic 协议成功,说明审查提示词及工具调用 JSON 本身可以正常处理。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions