陆运选项不全时改为复制填空清单,方便销售按编号回填。

停发填写样例图,同群只跟当前工单,重量体积统一为 KG/CBM。

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-09-23 17:10:13 +08:00
co-authored by Cursor
parent 2334524bb8
commit 378bb892b3
33 changed files with 1204 additions and 265 deletions
+19 -17
View File
@@ -11,6 +11,7 @@ if ROOT not in sys.path:
sys.path.insert(0, ROOT)
from agent.ledger.memory_ledger import MemoryLedger
from agent.policy import inquiry_copy as copy
from agent.policy.multi_segments import (
Segment,
classify_multi_text,
@@ -130,10 +131,11 @@ class SplitTests(unittest.TestCase):
ready, _, text = refresh_segments(outcome.segments)
self.assertFalse(ready)
self.assertIn("请确认并补充以下信息:", text)
self.assertIn("待补充:", text)
self.assertIn("品名:(如:茶叶)", text)
self.assertIn("货源地(非必填):(如:东莞)", text)
self.assertIn("贸易条款(非必填):(如:FOB)", text)
self.assertIn(copy.CLARIFY_PASTE_HINT, text)
self.assertIn("品名(必填):\n(如:茶叶)", text)
self.assertIn("货源地(非必填):\n(如:东莞)", text)
self.assertIn("贸易条款(非必填):\n(如:DDP、DAP、CIF、CIP)", text)
self.assertNotIn("品名:(如:茶叶)", text)
def test_port_to_port_fills_sea_class(self) -> None:
"""海运只缺运输分类时,回复 Port to Port 要写进该段,和单聊一样。"""
@@ -226,10 +228,10 @@ class SplitTests(unittest.TestCase):
]
ready, updated, text = refresh_segments(segs)
self.assertFalse(ready)
self.assertIn("线路类别(必填):可选择回复", text)
self.assertIn("国内长途/零担", text)
self.assertIn("线路类别(必填):", text)
self.assertIn("1.1国内长途/零担", text)
self.assertIn("国内城配/拖车/打包", text)
self.assertIn("运输分类(必填):可选择回复", text)
self.assertIn("运输分类(必填):", text)
self.assertIn("1.普件", text)
self.assertNotIn("始发站", text)
self.assertNotIn("请回复「确定」创建工单", text)
@@ -301,9 +303,9 @@ class FlowTests(unittest.TestCase):
return "ok"
def last_prompt(self) -> str:
"""样例图兜底会后发,取带段号或可选择回复的那条补问。"""
"""取带段号或复制填空清单的那条补问。"""
for text in reversed(self.replies):
if "段1" in text or "可选择回复" in text or "请回复「确定」" in text or "待补充" in text:
if "段1" in text or "Step1:" in text or "请回复「确定」" in text or "待补充" in text:
return text
return self.replies[-1] if self.replies else ""
@@ -313,8 +315,8 @@ class FlowTests(unittest.TestCase):
card = self.replies[-1]
self.assertIn("请确认并补充以下信息:", card)
self.assertIn("段2:空运", card)
self.assertIn("待补充:", card)
self.assertIn("包装类型:(如:", card)
self.assertIn(copy.CLARIFY_PASTE_HINT, card)
self.assertIn("包装类型(必填):\n(如:", card)
self.assertNotIn("TMS", card)
def test_clarify_reply_gets_a_followup(self) -> None:
@@ -377,7 +379,7 @@ class FlowTests(unittest.TestCase):
)
card = self.last_prompt()
self.assertEqual(phase, "clarify")
self.assertIn("线路类别(必填):可选择回复", card)
self.assertIn("线路类别(必填):", card)
self.assertIn("纽约港", card)
self.assertIn("巴生西港", card)
self.assertIn("机器设备", card)
@@ -393,8 +395,8 @@ class FlowTests(unittest.TestCase):
phase = self.flow.on_text(sender_id="sales", text=start, reply=self.reply)
self.assertEqual(phase, "clarify")
first = self.last_prompt()
self.assertIn("线路类别(必填):可选择回复", first)
self.assertIn("运输分类(必填):可选择回复", first)
self.assertIn("线路类别(必填):", first)
self.assertIn("运输分类(必填):", first)
self.assertNotIn("始发站", first)
phase = self.flow.on_text(
sender_id="sales",
@@ -411,7 +413,7 @@ class FlowTests(unittest.TestCase):
)
card = self.last_prompt()
self.assertEqual(phase, "clarify")
self.assertIn("线路类别(必填):可选择回复", card)
self.assertIn("线路类别(必填):", card)
self.assertNotIn("始发站", card)
self.assertNotIn("请回复「确定」创建工单", card)
@@ -466,8 +468,8 @@ class FlowTests(unittest.TestCase):
phase = self.flow.on_text(sender_id="sales", text=text, reply=self.reply)
self.assertEqual(phase, "clarify")
card = self.last_prompt()
self.assertIn("线路类别(必填):可选择回复", card)
self.assertIn("运输分类(必填):可选择回复", card)
self.assertIn("线路类别(必填):", card)
self.assertIn("运输分类(必填):", card)
self.assertNotIn("始发站", card)
self.assertNotIn("请回复「确定」创建工单", card)