fix(customer-service): 追问适当性结论时不能丢掉产品名
实测三连问:「季季盈90天起投多少」→「C1 客户能买它吗」→「那我能买它吗」,
第三问转人工。原因是 _topic_of 不认识适当性回答的格式——它那一行是
"南方季季盈90天为 R2(中低风险),与您当前的风险测评结果不匹配…",
既没有冒号也不是标题行,于是被判成"取不出主语",第三问就失去了指代对象。
补上这种格式:产品名在"为 R{1-5}"之前,且必须在冒号判断**之前**匹配(那一行没有冒号)。
以"为 R2"开头的行说明前面没有产品名,返回空串,而不是把等级本身当成主语。
修好后第三问给出与第二问一致的结论,这是对的:裁决是确定性的,同一个客户问同一只
产品,结论就该一样。新增两条单测钉住这两种情形。
This commit is contained in:
@@ -402,6 +402,13 @@ class CustomerServiceAgent(BaseAgent):
|
||||
"""
|
||||
first = next((line.strip() for line in answer.splitlines() if line.strip()), "")
|
||||
first = first.lstrip("#").strip()
|
||||
# 适当性回答的首行是「{产品名}为 R2(中低风险),与您当前的风险测评结果不匹配…」,
|
||||
# 产品名在"为 R"之前。这一条必须在冒号判断**之前**:那一行里没有冒号。
|
||||
for level in range(1, 6):
|
||||
index = first.find(f"为 R{level}")
|
||||
if index >= 0:
|
||||
candidate = first[:index].strip()
|
||||
return candidate if 0 < len(candidate) <= 20 else ""
|
||||
topic = first.split(":", 1)[0].strip() if ":" in first else first
|
||||
# FAQ 型回答的首行是"问:C1 客户能买什么产品?",冒号前只有一个"问"字;
|
||||
# 拿它当主语只会把检索词污染成"问 那它风险高吗"。
|
||||
|
||||
Reference in New Issue
Block a user