8fa3d7a8d0
Co-Authored-By: Claude Code <noreply@anthropic.com>
70 lines
2.6 KiB
Python
70 lines
2.6 KiB
Python
"""提取/评估提示词建材化: 字段与占位符静态断言(Task 4)。"""
|
|
from app.services.ai_service import EVALUATOR_PROMPT, EXTRACTOR_PROMPT
|
|
|
|
# 建材字段清单(与 system.md "关注的信息"节口径一致)
|
|
PIPE_FIELDS = (
|
|
"意向品类", # HDPE给水管/PVC排水管/PPR…
|
|
"规格要求", # 自由文本保留客户原话
|
|
"标准要求", # ISO4427/ASTM/EN/SCH 单列
|
|
"采购数量",
|
|
"用途", # 给水/燃气/排污/灌溉…
|
|
"项目类型",
|
|
"目标国家", # email_service.send_lead_email 按此键取国家
|
|
"预算提及",
|
|
"联系方式",
|
|
)
|
|
|
|
# 汽车项目遗留字段——建材化后不得残留
|
|
AUTO_WORDS = ("车型", "意向品牌", "车况要求", "年份要求", "运输方式", "购车", "试驾")
|
|
|
|
|
|
def test_extractor_has_pipe_fields():
|
|
for field in PIPE_FIELDS:
|
|
assert field in EXTRACTOR_PROMPT, field
|
|
|
|
|
|
def test_extractor_no_auto_fields():
|
|
for word in AUTO_WORDS:
|
|
assert word not in EXTRACTOR_PROMPT, word
|
|
|
|
|
|
def test_extractor_spec_is_free_text():
|
|
# 规格要求 = 自由文本保留客户原话,不拆分不过度结构化
|
|
assert "原话" in EXTRACTOR_PROMPT
|
|
assert "不拆分" in EXTRACTOR_PROMPT
|
|
|
|
|
|
def test_extractor_standard_only_when_mentioned():
|
|
# 标准要求客户提到才记,不猜测
|
|
assert "客户提到才记" in EXTRACTOR_PROMPT
|
|
|
|
|
|
def test_extractor_placeholders_and_contact_contract_intact():
|
|
# 占位符(ai_service.replace 依赖)与联系方式四层合并的 extractor 层契约
|
|
assert "$existing_info" in EXTRACTOR_PROMPT
|
|
assert "$messages" in EXTRACTOR_PROMPT
|
|
assert '{"手机": "xxx", "WhatsApp": "xxx", "邮箱": "xxx", "微信": "xxx"}' in EXTRACTOR_PROMPT
|
|
assert "整条消息只有号码" in EXTRACTOR_PROMPT
|
|
|
|
|
|
def test_evaluator_keeps_three_levels_and_placeholders():
|
|
for level in ("interested", "not_interested", "pending"):
|
|
assert level in EVALUATOR_PROMPT, level
|
|
assert "$profile" in EVALUATOR_PROMPT
|
|
assert "$recent_messages" in EVALUATOR_PROMPT
|
|
# _normalize_evaluation 消费的输出字段
|
|
for key in ("intent_level", "reasoning", "contact_info", "info_sufficient"):
|
|
assert key in EVALUATOR_PROMPT, key
|
|
|
|
|
|
def test_evaluator_no_auto_fields():
|
|
for word in AUTO_WORDS:
|
|
assert word not in EVALUATOR_PROMPT, word
|
|
|
|
|
|
def test_evaluator_pipe_procurement_examples():
|
|
# 管道采购语义示例: 品类+规格+数量=interested; 泛泛浏览=pending; 无采购计划=not_interested
|
|
assert "采购需求" in EVALUATOR_PROMPT
|
|
assert "随便看看" in EVALUATOR_PROMPT # not_interested: 明确不买
|
|
assert "泛泛" in EVALUATOR_PROMPT # pending: 仅泛泛浏览
|