确定运输方式前的多句询价带到所选方式并按该方式抽字段;成交已定后放舱不再推跟进,未成交原因不再被当成新询价。
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -144,6 +144,33 @@ def harvest_sea_trade_terms(text: str, facts: dict[str, str] | None = None) -> d
|
||||
return merged
|
||||
|
||||
|
||||
# 补问举例让销售直接回这两个词。整句只有其中一个才记成贸易条款,长句里的港到港仍给运输分类。
|
||||
_SHORT_SEA_TRADE_REPLY = re.compile(
|
||||
r"^\s*(门到门|港到港|door\s*to\s*door|door-to-door|d2d)\s*[.。!!??]?\s*$",
|
||||
re.IGNORECASE,
|
||||
)
|
||||
|
||||
|
||||
def short_sea_trade_reply(text: str) -> str:
|
||||
"""
|
||||
销售整句只回门到门或港到港时,收成贸易条款。
|
||||
|
||||
举例行不算。长句里没写这两个词时,不能从这里编出一个条款。
|
||||
返回「门到门」或「港到港」;对不上返回空串。
|
||||
"""
|
||||
cleaned = _without_clarify_examples(text or "").strip()
|
||||
hit = _SHORT_SEA_TRADE_REPLY.match(cleaned)
|
||||
if not hit:
|
||||
return ""
|
||||
raw = (hit.group(1) or "").strip()
|
||||
folded = re.sub(r"[\s-]+", "", raw).lower()
|
||||
if raw == "港到港":
|
||||
return "港到港"
|
||||
if raw == "门到门" or folded in {"doortodoor", "d2d"}:
|
||||
return "门到门"
|
||||
return ""
|
||||
|
||||
|
||||
def drop_invented_door_trade_terms(text: str, facts: dict[str, str] | None = None) -> dict[str, str]:
|
||||
"""
|
||||
丢掉冒充贸易条款的「门到门」。
|
||||
@@ -169,6 +196,20 @@ def drop_invented_door_trade_terms(text: str, facts: dict[str, str] | None = Non
|
||||
return merged
|
||||
|
||||
|
||||
def apply_spoken_sea_trade_reply(text: str, facts: dict[str, str] | None = None) -> dict[str, str]:
|
||||
"""
|
||||
先丢掉模型冒充的门到门,再收下销售整句回复的门到门或港到港。
|
||||
|
||||
测服 2026-10-03:补问举例是门到门、港到港,销售回「门到门」仍被当成没填,并提示参数提取不全。
|
||||
原话没出现这两个词时,旧草稿里的门到门继续丢掉。返回新 dict。
|
||||
"""
|
||||
merged = drop_invented_door_trade_terms(text, facts)
|
||||
spoken = short_sea_trade_reply(text)
|
||||
if spoken:
|
||||
merged["贸易条款"] = spoken
|
||||
return merged
|
||||
|
||||
|
||||
def sea_class_prompt() -> str:
|
||||
"""缺运输分类时只列两项,不再追问「其他是什么」。"""
|
||||
return "运输分类(必填):请回复 Port to Port 或 其他。"
|
||||
|
||||
Reference in New Issue
Block a user