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