|
|
@@ -1,7 +1,10 @@
|
|
|
-"""创作 query 筛选器:调用 acquisition/query_filter.txt(LLM 只做 keep/排除),批量判一组 query。
|
|
|
+"""创作 query 筛选器:调用 acquisition/query_filter.txt,批量判一组 query。
|
|
|
|
|
|
-命中 A–E 任一即排除:A 语义不通 / B 题材本身 / C 制作工具 / D 应试学术公务政企 / E 作品素材。
|
|
|
-返回与输入等长的 [{keep: bool, reason: str}]。供 build_creation_demo、filter_multiaxis 等共用。
|
|
|
+模型对每条 query 打两项:语义合法性 valid(0-10) + 创作相关性 relevant(bool)。
|
|
|
+最终保留 keep = valid ≥ VALID_MIN 且 relevant —— 阈值放代码里(好调,不改提示词)。
|
|
|
+ · valid:词组合本身说不说得通(机械正交易产生的废话短语在此淘汰)。
|
|
|
+ · relevant:搜回来是否和创作知识相关(三把尺=设计决策vs工艺/可迁移/业务阶段;再排 制作/题材本身/应试政企/作品)。
|
|
|
+返回与输入等长的 [{keep, valid, relevant, reason}]。供 build_creation_demo、filter_multiaxis 等共用。
|
|
|
"""
|
|
|
from __future__ import annotations
|
|
|
|
|
|
@@ -13,6 +16,7 @@ import httpx
|
|
|
from core.config import Settings
|
|
|
|
|
|
PROMPT = Path(__file__).resolve().parent / "query_filter.txt"
|
|
|
+VALID_MIN = 6 # 语义合法性阈值:valid ≥ 此值才算说得通;调这里即可松紧
|
|
|
|
|
|
|
|
|
def filter_queries(queries: list[str], settings: Settings, *, batch: int = 40) -> list[dict]:
|
|
|
@@ -40,7 +44,17 @@ def _filter_batch(queries: list[str], settings: Settings) -> list[dict]:
|
|
|
data = json.loads(txt)
|
|
|
arr = data if isinstance(data, list) else next((v for v in data.values() if isinstance(v, list)), [])
|
|
|
by = {d.get("idx"): d for d in arr if isinstance(d, dict)}
|
|
|
- return [{"keep": bool(by.get(i, {}).get("keep", True)),
|
|
|
- "reason": str(by.get(i, {}).get("reason", ""))[:50]} for i in range(len(queries))]
|
|
|
+ out = []
|
|
|
+ for i in range(len(queries)):
|
|
|
+ d = by.get(i, {})
|
|
|
+ try:
|
|
|
+ valid = int(d.get("valid", 10))
|
|
|
+ except (TypeError, ValueError):
|
|
|
+ valid = 10
|
|
|
+ relevant = bool(d.get("relevant", True))
|
|
|
+ out.append({"keep": valid >= VALID_MIN and relevant, # 阈值在代码里判
|
|
|
+ "valid": valid, "relevant": relevant,
|
|
|
+ "reason": str(d.get("reason", ""))[:50]})
|
|
|
+ return out
|
|
|
except Exception as exc:
|
|
|
- return [{"keep": True, "reason": f"筛选失败:{str(exc)[:30]}"} for _ in queries]
|
|
|
+ return [{"keep": True, "valid": 10, "relevant": True, "reason": f"筛选失败:{str(exc)[:30]}"} for _ in queries]
|