diff --git a/core/main_terminal_parts/context.py b/core/main_terminal_parts/context.py index fa496e7..151e3d8 100644 --- a/core/main_terminal_parts/context.py +++ b/core/main_terminal_parts/context.py @@ -289,9 +289,11 @@ class MainTerminalContextMixin: "role": conv["role"], "content": conv["content"] } - reasoning = conv.get("reasoning_content") - if reasoning: - message["reasoning_content"] = reasoning + # 对于思考模式(如 DeepSeek thinking),assistant 历史消息中的 + # reasoning_content 即使为空字符串也需要原样回传,否则下一轮可能被 + # API 判定为“未回传 reasoning_content”并返回 400。 + if "reasoning_content" in conv: + message["reasoning_content"] = conv.get("reasoning_content", "") # 如果有工具调用信息,添加到消息中 tool_calls = conv.get("tool_calls") or [] if tool_calls and self._tool_calls_followed_by_tools(conversation, idx, tool_calls): diff --git a/server/chat_flow_task_main.py b/server/chat_flow_task_main.py index 4088987..fa851a9 100644 --- a/server/chat_flow_task_main.py +++ b/server/chat_flow_task_main.py @@ -1200,10 +1200,10 @@ async def handle_task_with_sender( assistant_message = { "role": "assistant", "content": assistant_content, - "tool_calls": tool_calls + "tool_calls": tool_calls, + # thinking 模式下,reasoning_content 需要原样回传;即使该轮为空字符串也保留字段 + "reasoning_content": current_thinking or "", } - if current_thinking: - assistant_message["reasoning_content"] = current_thinking messages.append(assistant_message) if assistant_content or current_thinking or tool_calls: @@ -1211,7 +1211,7 @@ async def handle_task_with_sender( "assistant", assistant_content, tool_calls=tool_calls if tool_calls else None, - reasoning_content=current_thinking or None + reasoning_content=current_thinking or "" ) # 为下一轮迭代重置流状态标志,但保留 full_response 供上面保存使用