فهرست منبع

工具:增加结构化终止运行协议

扩展 ToolResult,允许工具显式声明 terminate_run 和 result_summary。ToolRegistry 将运行控制字段与普通业务文本分离返回,为 submit_attempt、submit_validation 在保存 Tool Message 后可靠结束 Agent Loop 提供基础。
SamLee 4 روز پیش
والد
کامیت
d04fc170d5
2فایلهای تغییر یافته به همراه10 افزوده شده و 1 حذف شده
  1. 2 0
      agent/agent/tools/models.py
  2. 8 1
      agent/agent/tools/registry.py

+ 2 - 0
agent/agent/tools/models.py

@@ -36,6 +36,8 @@ class ToolResult:
 	# 状态标志
 	truncated: bool = False  # 输出是否被截断
 	error: Optional[str] = None  # 错误信息(如果执行失败)
+	terminate_run: bool = False  # terminal tool:保存结果后结束当前 Agent Loop
+	result_summary: Optional[str] = None  # terminal tool 写入 Trace 的结构化摘要
 
 	# 附件支持(用于浏览器自动化等场景)
 	attachments: List[str] = field(default_factory=list)  # 文件路径列表

+ 8 - 1
agent/agent/tools/registry.py

@@ -333,6 +333,13 @@ class ToolRegistry:
 			if isinstance(result, ToolResult):
 				ret = {"text": result.to_llm_message()}
 
+				# Runner 消费的控制字段与业务文本分离,不能靠解析 output 猜测终止。
+				if result.terminate_run:
+					ret["_control"] = {
+						"terminate_run": True,
+						"result_summary": result.result_summary or result.long_term_memory or result.output,
+					}
+
 				# 保留images
 				if result.images:
 					ret["images"] = result.images
@@ -341,7 +348,7 @@ class ToolRegistry:
 				if result.tool_usage:
 					ret["tool_usage"] = result.tool_usage
 
-				# 向后兼容:只有text时返回字符串
+				# 向后兼容:只有 text 时返回字符串;有控制信息时必须保留 dict。
 				if len(ret) == 1:
 					return ret["text"]
 				return ret