diff --git a/src/renderer/src/config/models.ts b/src/renderer/src/config/models.ts index 015e8ad0..230701bd 100644 --- a/src/renderer/src/config/models.ts +++ b/src/renderer/src/config/models.ts @@ -2220,6 +2220,13 @@ export function isSupportedReasoningEffortModel(model?: Model): boolean { return false } +export function isGrokModel(model?: Model): boolean { + if (!model) { + return false + } + return model.id.includes('grok') +} + export function isGrokReasoningModel(model?: Model): boolean { if (!model) { return false diff --git a/src/renderer/src/providers/AiProvider/OpenAIProvider.ts b/src/renderer/src/providers/AiProvider/OpenAIProvider.ts index b78bf2c1..518bedc0 100644 --- a/src/renderer/src/providers/AiProvider/OpenAIProvider.ts +++ b/src/renderer/src/providers/AiProvider/OpenAIProvider.ts @@ -1,6 +1,7 @@ import { DEFAULT_MAX_TOKENS } from '@renderer/config/constant' import { getOpenAIWebSearchParams, + isGrokModel, isGrokReasoningModel, isHunyuanSearchModel, isOpenAIoSeries, @@ -382,9 +383,13 @@ export default class OpenAIProvider extends BaseProvider { const { signal } = abortController await this.checkIsCopilot() - const reqMessages: ChatCompletionMessageParam[] = [systemMessage, ...userMessages].filter( - Boolean - ) as ChatCompletionMessageParam[] + // Grok 模型要求每条消息都不能为空,所以当是 Grok 模型且 systemMessage 内容为空时不发送 systemMessage + let reqMessages: ChatCompletionMessageParam[] + if (isGrokModel(model) && !systemMessage.content) { + reqMessages = [...userMessages] + } else { + reqMessages = [systemMessage, ...userMessages].filter(Boolean) as ChatCompletionMessageParam[] + } const toolResponses: MCPToolResponse[] = [] let firstChunk = true