From 4598370fd275635fd3883f4eb304d2e3767fa28f Mon Sep 17 00:00:00 2001 From: ooodc <549496103@qq.com> Date: Sat, 13 Jun 2026 14:12:09 +0800 Subject: [PATCH] =?UTF-8?q?fix(agent):=20=E4=BC=98=E5=8C=96=E7=AD=89?= =?UTF-8?q?=E5=BE=85=E5=B7=A5=E5=85=B7=E8=BE=93=E5=87=BA=E5=86=85=E5=AE=B9?= =?UTF-8?q?=E7=9A=84=E6=8F=90=E5=8F=96=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 跳过标记行、session_id元数据和空行 - 跳过提示行,提取提示行之后的实际内容 - 限制提取内容最多20行,防止消息过长 - 当提取内容为空时,使用默认提示消息 - 改善助手消息的显示内容格式 --- src/agent/agent_loop.rs | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/src/agent/agent_loop.rs b/src/agent/agent_loop.rs index 5f4eac0..c89b29e 100644 --- a/src/agent/agent_loop.rs +++ b/src/agent/agent_loop.rs @@ -1097,20 +1097,29 @@ impl AgentLoop { .zip(tool_results.iter()) .find(|(_, result)| result.state == ToolExecutionState::PendingUserAction) { - // 从工具输出中提取有意义的内容,跳过内部标记和元数据行 - let content_line = pending_result + // 从工具输出中提取有意义的终端内容 + // 跳过:标记行、session_id 元数据、空行、以及提示行(取提示行之后的实际内容) + let content: String = pending_result .output .lines() .map(|l| l.trim()) - .find(|line| { + .filter(|line| { !line.is_empty() && !line.starts_with("__PICOBOT_") && !line.starts_with("[session_id:") }) - .unwrap_or(DEFAULT_PENDING_ASSISTANT_MESSAGE); + .skip(1) // 跳过第一行(提示行,如"进程正在等待输入...") + .take(20) // 最多取 20 行避免过长 + .collect::>() + .join("\n"); + let display_content = if content.is_empty() { + DEFAULT_PENDING_ASSISTANT_MESSAGE + } else { + &content + }; let assistant_message = ChatMessage::assistant(format!( "{}\n\n当前等待中的工具: {}", - content_line, tool_call.name, + display_content, tool_call.name, )); emitted_messages.push(assistant_message.clone()); self.emit_live_tool_call_message(assistant_message.clone()).await;