fix: Agent 步骤上限优化——max_steps 20→40(多步任务如打开抖音搜索),system prompt 加收敛规范(无进展 6 步主动停止总结),超限时无工具收尾请求让模型给有意义总结(不再机械提示);web 超时 600→900s

This commit is contained in:
2026-09-04 13:23:04 +08:00
parent ce4e5464b9
commit 44cab88546
3 changed files with 26 additions and 3 deletions
+24 -1
View File
@@ -32,6 +32,8 @@ SYSTEM_PROMPT = """你是手机自动化控制助手。你通过工具实时操
5. 每次关键操作后再次 de_screenshot 验证结果,直到完成用户目标
6. 完成或失败时用中文总结:做了什么、当前状态、需要用户注意的事项
7. 设备不可用/操作失败时如实报告错误,不要臆测成功
8. 效率:界面未变化时不要重复截图/点击同一位置;每步都要推进目标;
若连续 6 步无进展(截图内容未变/操作无效),停止并总结原因,不要空转
可用工具清单将由系统提供。"""
@@ -214,7 +216,28 @@ class Agent:
# 无工具调用:本轮即最终回答
return full_content
return "(达到最大步骤数未完成,请检查操作是否卡在循环)"
# 步骤超限:不带工具让模型做最终总结(避免机械提示,给用户有意义的结论)
try:
_log.warning("达到最大步骤数,请求模型收尾总结")
saved_tools = self.tools_schema
self.tools_schema = []
self.messages.append({"role": "user",
"content": "已达最大操作步骤数,请立即用中文总结:"
"已完成的部分、当前设备状态、未能完成的原因与下一步建议。"
"不要调用任何工具。"})
parts = []
async for chunk in self._chat_stream():
delta = (chunk.get("choices") or [{}])[0].get("delta") or {}
text = delta.get("content")
if text:
parts.append(text)
if on_delta:
on_delta(text, "content")
self.tools_schema = saved_tools
summary = "".join(parts)
return summary or "(已达步骤上限,模型未能生成总结)"
except Exception as e:
return f"(已达最大步骤数,且收尾总结失败: {e})"
# ---------- 非流式(CLI) ----------
async def run(self, prompt: str, serial: str = "") -> str:
+1 -1
View File
@@ -23,7 +23,7 @@ class AgentSettings:
default_serial = _env("AGENT_DEFAULT_SERIAL", "")
# Agent 循环上限与请求超时
max_steps = int(_env("AGENT_MAX_STEPS", "20"))
max_steps = int(_env("AGENT_MAX_STEPS", "40"))
request_timeout = float(_env("AGENT_TIMEOUT", "120"))
# system prompt 语言
+1 -1
View File
@@ -201,7 +201,7 @@ def _agent_thread(run_id, prompt, serial, cfg):
on_delta=on_delta, on_tool=on_tool)
# 整体超时保护:卡死时结束,释放单实例
answer = asyncio.run(asyncio.wait_for(_execute(), timeout=600))
answer = asyncio.run(asyncio.wait_for(_execute(), timeout=900))
with _lock:
_run["state"] = "done"
_run["answer"] = answer