fix(agent): 优化等待工具输出内容的提取逻辑
- 跳过标记行、session_id元数据和空行 - 跳过提示行,提取提示行之后的实际内容 - 限制提取内容最多20行,防止消息过长 - 当提取内容为空时,使用默认提示消息 - 改善助手消息的显示内容格式
This commit is contained in:
parent
229221aab1
commit
640829ce52
@ -1097,15 +1097,29 @@ impl AgentLoop {
|
||||
.zip(tool_results.iter())
|
||||
.find(|(_, result)| result.state == ToolExecutionState::PendingUserAction)
|
||||
{
|
||||
let assistant_message = ChatMessage::assistant(format!(
|
||||
"{}\n\n当前等待中的工具: {}",
|
||||
pending_result
|
||||
// 从工具输出中提取有意义的终端内容
|
||||
// 跳过:标记行、session_id 元数据、空行、以及提示行(取提示行之后的实际内容)
|
||||
let content: String = pending_result
|
||||
.output
|
||||
.lines()
|
||||
.next()
|
||||
.filter(|line| !line.trim().is_empty())
|
||||
.unwrap_or(DEFAULT_PENDING_ASSISTANT_MESSAGE),
|
||||
tool_call.name,
|
||||
.map(|l| l.trim())
|
||||
.filter(|line| {
|
||||
!line.is_empty()
|
||||
&& !line.starts_with("__PICOBOT_")
|
||||
&& !line.starts_with("[session_id:")
|
||||
})
|
||||
.skip(1) // 跳过第一行(提示行,如"进程正在等待输入...")
|
||||
.take(20) // 最多取 20 行避免过长
|
||||
.collect::<Vec<_>>()
|
||||
.join("\n");
|
||||
let display_content = if content.is_empty() {
|
||||
DEFAULT_PENDING_ASSISTANT_MESSAGE
|
||||
} else {
|
||||
&content
|
||||
};
|
||||
let assistant_message = ChatMessage::assistant(format!(
|
||||
"{}\n\n当前等待中的工具: {}",
|
||||
display_content, tool_call.name,
|
||||
));
|
||||
emitted_messages.push(assistant_message.clone());
|
||||
self.emit_live_tool_call_message(assistant_message.clone()).await;
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user