diff --git a/.gitignore b/.gitignore index e9c7a38..7ad9179 100644 --- a/.gitignore +++ b/.gitignore @@ -56,3 +56,4 @@ backend/xingbang_output/ backend/xingbang_evolution/ backend/diag_single_agent.py backend/run_full_workflow.py +backend/verify_offline.py diff --git a/backend/xingbang/agents.py b/backend/xingbang/agents.py index 2edecb2..df17504 100644 --- a/backend/xingbang/agents.py +++ b/backend/xingbang/agents.py @@ -114,8 +114,27 @@ class XingbangAgent: "system": self.spec.system_prompt[:500], "task": task[:300], }) - result = await agent.ainvoke({"messages": messages}) - final = self._extract_text(result) + import asyncio + max_retries = 4 + backoff = 5 # 初始等待秒 + last_err = None + for attempt in range(max_retries): + try: + result = await agent.ainvoke({"messages": messages}) + final = self._extract_text(result) + break + except Exception as e: # noqa + last_err = e + msg = str(e) + # 仅对 503/限流 重试 + if "503" in msg or "overloaded" in msg or "429" in msg: + if attempt < max_retries - 1: + await asyncio.sleep(backoff * (2 ** attempt)) + continue + else: + raise # 非限流错误立即失败 + else: + raise RuntimeError(f"网关过载重试后仍失败: {last_err}") # 保存产出到文件 file_path = None if self._output_dir: