diff --git a/core/pydantic_ai_agent.py b/core/pydantic_ai_agent.py index a53e773..aeee2e7 100755 --- a/core/pydantic_ai_agent.py +++ b/core/pydantic_ai_agent.py @@ -418,6 +418,14 @@ class CustomerServiceAgent: """ 收图阶段回复默认走 AI 改写,失败时回退到固定模板。 """ + # 首张收图先承接“我看一下”,避免机械地立刻催“发完统一报价”。 + if scene == "collect_ack" and len(state.pending_image_urls) <= 1: + first_ack = [ + "收到了,我先看一下哈,稍等哈", + "这张我收到了,我先看下,等我一下哈", + "收到这张了,我先过一眼,稍等哈", + ] + return random.choice(first_ack) if not self.dynamic_collection_replies: return fallback try: diff --git a/tests/test_regression_pipeline.py b/tests/test_regression_pipeline.py index 19e73f5..6584352 100644 --- a/tests/test_regression_pipeline.py +++ b/tests/test_regression_pipeline.py @@ -364,6 +364,35 @@ class RegressionPipelineTest(unittest.IsolatedAsyncioTestCase): ) self.assertEqual(reply, "图片收到了,你继续发就行。") + async def test_first_image_ack_avoids_unified_quote_wording(self): + os.environ["AI_DYNAMIC_COLLECTION_REPLIES"] = "true" + agent = CustomerServiceAgent() + st = agent._get_conversation_state(self.customer_id) + st.pending_image_urls = ["https://img.alicdn.com/a.jpg"] + msg = CustomerMessage( + msg_id="m-first-ack", + acc_id="test_shop", + msg="https://img.alicdn.com/a.jpg", + from_id=self.customer_id, + from_name="t", + cy_id=self.customer_id, + acc_type="AliWorkbench", + msg_type=0, + cy_name="t", + goods_name="专业找图", + goods_order="", + ) + reply = await agent._render_collection_reply_with_ai( + message=msg, + state=st, + scene="collect_ack", + intent_hint="确认收到后先承接", + fallback="图片收到了,你继续发就行。", + ) + self.assertIn("稍等", reply) + self.assertNotIn("统一报价", reply) + self.assertNotIn("发完", reply) + async def test_map_inquiry_is_rejected(self): agent = CustomerServiceAgent() msg = CustomerMessage(