From b7cd143b4c0e7a0cb788c1bad8f2ee273baa172d Mon Sep 17 00:00:00 2001 From: shaw Date: Sun, 12 Oct 2025 13:25:43 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8Dtemperature=E5=8F=82?= =?UTF-8?q?=E6=95=B0=E5=86=B2=E7=AA=81=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/services/droidRelayService.js | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/src/services/droidRelayService.js b/src/services/droidRelayService.js index 604aa10f..4cbe221c 100644 --- a/src/services/droidRelayService.js +++ b/src/services/droidRelayService.js @@ -977,6 +977,16 @@ class DroidRelayService { // Anthropic 端点:处理 thinking 字段 if (endpointType === 'anthropic') { + const hasTemperatureField = Object.prototype.hasOwnProperty.call(processedBody, 'temperature') + const hasValidTemperature = + processedBody.temperature !== undefined && processedBody.temperature !== null + const hasValidTopP = processedBody.top_p !== undefined && processedBody.top_p !== null + + if (hasValidTemperature && hasValidTopP) { + // Claude API 仅允许 temperature 或 top_p 其一,同时优先保留 temperature + delete processedBody.top_p + } + if (this.systemPrompt) { const promptBlock = { type: 'text', text: this.systemPrompt } if (Array.isArray(processedBody.system)) { @@ -1010,6 +1020,24 @@ class DroidRelayService { if ('thinking' in processedBody) { delete processedBody.thinking } + } else if ( + processedBody.thinking && + processedBody.thinking.type === 'enabled' && + hasTemperatureField + ) { + const parsedTemperature = + typeof processedBody.temperature === 'string' + ? parseFloat(processedBody.temperature) + : processedBody.temperature + + if (typeof parsedTemperature === 'number' && !Number.isNaN(parsedTemperature)) { + if (parsedTemperature <= 0) { + // 当开启 thinking 时,temperature 不允许为 0 + processedBody.temperature = 1 + } + } else { + delete processedBody.temperature + } } }