目的地只留地名,货物数量不再用箱型,未成交原因去掉艾特。

口语里逗号后面的品名和包装不再粘在目的地上;件数被抽成箱型时改用件数;群里艾特机器人不记进未成交原因。

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-09-24 16:17:23 +08:00
co-authored by Cursor
parent 4dfd756bcf
commit 37278aa0db
7 changed files with 119 additions and 9 deletions
+4
View File
@@ -157,6 +157,10 @@ class TestDealOutcome(unittest.TestCase):
self.assertEqual(harvest_inline_lost_reason("未成交,客户不想要了"), "客户不想要了")
self.assertEqual(harvest_inline_lost_reason("未成交:价格太高"), "价格太高")
self.assertEqual(harvest_inline_lost_reason("未成交原因客户不想要了"), "客户不想要了")
self.assertEqual(
harvest_inline_lost_reason("WO202609240010未成交,原因客户不需要了@询价小助手"),
"客户不需要了",
)
self.assertEqual(harvest_inline_lost_reason("未成交"), "")
self.assertEqual(harvest_inline_lost_reason("未成交吗"), "")
self.assertEqual(harvest_inline_lost_reason("成交"), "")
+24
View File
@@ -123,6 +123,30 @@ class OralExtractTests(unittest.TestCase):
self.assertEqual(bulk["facts"]["包装方式"], "散货")
self.assertNotIn("包装方式", bulk["missing"])
def test_place_stops_before_cargo_and_price(self) -> None:
"""目的地只留地名。后面的品名、包装、的价格不能粘在地名上。"""
from agent.schema.field_validate import validate_required_fields
check = validate_required_fields(
facts={
"目的港": "吉隆坡,普货,散货的价格",
"品名": "普货",
"包装方式": "散货",
"报价日期": "2026-09-29",
},
business_line="AIR",
)
self.assertEqual(check["facts"]["目的港"], "吉隆坡")
self.assertEqual(check["facts"]["品名"], "普货")
self.assertEqual(check["facts"]["包装方式"], "散货")
bare = validate_required_fields(
facts={"目的港": "洛杉矶,茶叶,纸箱的价格"},
business_line="AIR",
)
self.assertEqual(bare["facts"]["目的港"], "洛杉矶")
self.assertEqual(bare["facts"]["品名"], "茶叶")
self.assertEqual(bare["facts"]["包装方式"], "纸箱")
def test_fly_route_overwrites_stale_nkg_kul(self) -> None:
from agent.schema.field_validate import harvest_oral_measures
from agent.schema.tms_air_query import assemble_air_query
@@ -143,6 +143,23 @@ class SeaTextInquiryTests(unittest.TestCase):
self.assertEqual(check["facts"]["货量"], "15件")
self.assertNotIn("货量", check["missing"])
def test_container_shaped_cargo_qty_uses_pieces(self) -> None:
"""货量被抽成箱型时,改用件数。20件、15件同一条规则。"""
facts = {
"起运港": "广州港",
"目的港": "巴生港",
"品名": "机器设备",
"货量": "40HQ*1",
"件数": "20件",
"整柜或拼柜": "整柜",
"箱型箱量": "40HQ*1",
"贸易条款": "DOOR-DOOR",
"运输分类": "Port to Port",
}
check = validate_required_fields(facts=facts, business_line="SEA")
self.assertEqual(check["facts"]["货量"], "20件")
self.assertEqual(check["facts"]["箱型箱量"], "40HQ*1")
def test_sea_missing_container_only_asks_container(self) -> None:
facts = {
"起运港": "上海",