diff --git a/daily/agent_workflow.py b/daily/agent_workflow.py index 01b0d6f..0cb05d5 100644 --- a/daily/agent_workflow.py +++ b/daily/agent_workflow.py @@ -125,10 +125,20 @@ def run_agent_workflow( trends = analyze_trends(llm_input, date_str=date_str) if not trends: return None - return write_wecom_report( + md = write_wecom_report( llm_input, trends, date_str=date_str, time_str=time_str, updated=updated, ) + if md is None: + logger.warning("Agent Step2 首次失败,重试一次") + md = write_wecom_report( + llm_input, + trends, + date_str=date_str, + time_str=time_str, + updated=updated, + ) + return md diff --git a/tests/test_agent_workflow.py b/tests/test_agent_workflow.py index 9a25171..76882bd 100644 --- a/tests/test_agent_workflow.py +++ b/tests/test_agent_workflow.py @@ -53,3 +53,33 @@ def test_write_wecom_report_extracts_markdown_block(monkeypatch): assert md is not None assert md.startswith("📰") assert "正文" in md + + +def test_run_agent_workflow_retries_step2(monkeypatch): + import daily.agent_workflow as agent + + calls = {"n": 0} + + def fake_llm(system, user): + if '"trends"' in user: + calls["n"] += 1 + if calls["n"] == 1: + raise RuntimeError("Bridge request timed out") + return "📰 **早报 · 2026-07-03**\n\n重试成功" + return json.dumps( + {"headline": "h", "opening": "o", "themes": [], "top_picks": [], "signals": []}, + ensure_ascii=False, + ) + + monkeypatch.setattr(agent, "llm_chat", fake_llm) + + md = agent.run_agent_workflow( + {"date": "2026-07-03"}, + date_str="2026-07-03", + time_str="09:30 (UTC+8)", + updated="2026-07-02", + ) + + assert md is not None + assert "重试成功" in md + assert calls["n"] == 2