|
|
@@ -35,6 +35,7 @@ NORMALIZE = load_prompt("normalize_scope") # ③前:作用域值名词化
|
|
|
GATE_HOW_ADMIT = load_prompt("gate_how_admit") # ②.5 有序性闸:判"真流水线"
|
|
|
GATE_HOW_REFUTE = load_prompt("gate_how_refute") # ②.5:挑"假how(离散构成硬串)"
|
|
|
GATE_HOW_TIEBREAK = load_prompt("gate_how_tiebreak") # ②.5:分歧裁决(边界倾向假how)
|
|
|
+GATE_WHY_REFUTE = load_prompt("gate_why_refute") # ②.7 why 轻闸:单票 refute(废话/实为what/实为how)
|
|
|
|
|
|
# ① 窄表确定性兜底:只放无歧义裸动作动词(绝不放 营造/引导/表达 等名词语素)
|
|
|
_STRIP_VERBS = ("寻找", "定位", "推导", "核验", "提取", "挖掘", "捕捉",
|
|
|
@@ -226,6 +227,32 @@ def fix_fake_hows(knowledges: list[dict]) -> list[dict]:
|
|
|
return out
|
|
|
|
|
|
|
|
|
+# ---------- ②.7 why 轻闸:单票 refute(废话→drop;实为what/how→标 inferred 保留,不丢内容)----------
|
|
|
+def drop_fake_whys(knowledges: list[dict]) -> list[dict]:
|
|
|
+ out = []
|
|
|
+ for k in knowledges:
|
|
|
+ if k.get("type") == "why":
|
|
|
+ payload = json.dumps({"主张": k.get("主张"),
|
|
|
+ "支撑": [{"小标题": b.get("小标题"), "内容": b.get("内容")}
|
|
|
+ for b in k.get("支撑", [])]}, ensure_ascii=False)
|
|
|
+ try:
|
|
|
+ r = chat_json(GATE_WHY_REFUTE, payload, timeout=90)
|
|
|
+ not_why, verdict, reason = bool(r.get("not_why")), r.get("verdict", ""), r.get("reason", "")
|
|
|
+ except Exception:
|
|
|
+ not_why, verdict, reason = False, "", "API错误→保留" # 兜底:保留,避免误杀
|
|
|
+ if not_why:
|
|
|
+ if verdict == "废话": # 正确的废话:无复用价值,直接 drop
|
|
|
+ print(f" ②.7 why闸:drop 废话「{k.get('title')}」({reason})")
|
|
|
+ continue
|
|
|
+ if verdict in ("实为what", "实为how"): # 误分类:保留但标 inferred,待人工看,不丢内容
|
|
|
+ k["inferred"] = True
|
|
|
+ k["inferred_reason"] = f"why闸疑似{verdict}:{reason}"
|
|
|
+ print(f" ②.7 why闸:标记「{k.get('title')}」({verdict}:{reason})")
|
|
|
+ # 其它(not_why 与 verdict 自相矛盾/空)→ 保守保留、不扣帽子
|
|
|
+ out.append(k)
|
|
|
+ return out
|
|
|
+
|
|
|
+
|
|
|
# ---------- ③ 作用域候选 + 定位 ----------
|
|
|
def _slim(knowledges: list[dict]) -> list[dict]:
|
|
|
slim = []
|
|
|
@@ -418,7 +445,7 @@ def main() -> None:
|
|
|
posts_out.append({**meta, "no_knowledge": True, "knowledges": []})
|
|
|
continue
|
|
|
print(f" ① 读懂 {len(read)} 字({media['type']})· ①.5 闸:创作({gate_why})")
|
|
|
- knowledges = fix_fake_hows(shape(post, read)) # ② 拆颗 → ②.5 假how根治(假how重拆为 what/why)
|
|
|
+ knowledges = drop_fake_whys(fix_fake_hows(shape(post, read))) # ② 拆颗 → ②.5 假how根治 → ②.7 why轻闸
|
|
|
how_ids = {k.get("id") for k in knowledges if k.get("type") == "how"}
|
|
|
how_titles = {k.get("id"): k.get("title") for k in knowledges if k.get("type") == "how"}
|
|
|
for k in knowledges:
|