feat(llm): 整章重写预检澄清 spec + 教条 clarify_rewrite(WFW-9 M2)
镜像 clarify_refine(仅 name/prompt 不同,复用 ClarifyDecision,不新增 schema): 新增 clarify_rewrite_spec(analyst 档、reads=()/writes=() 只读,不变量 #2/#3)+ 章级 教条 prompts/clarify_rewrite.md(segment→整章:判作者章级重写意见是否含糊)。注册进 SPECS/SCHEMA_CATALOG,自检数量 24→25,__init__ 导出,金标准仅新增 1 条哈希无漂移。
This commit is contained in:
@@ -5,6 +5,7 @@
|
||||
"character-gen": "e0f97a5d7bb622fdd7582cdeef85ba13b3f434b2633f4d22a8c6daeba48636bf",
|
||||
"characterization": "643988cb899a66472acb3e18709f3299d2025f9bda132c774ee26c589266b51f",
|
||||
"clarify_refine": "c2ed53c3a2d6c414c4ae5c92ead45634a56c47cd363a44f83ec1e020099480af",
|
||||
"clarify_rewrite": "381864a21bfa43fa295236be981580369b3d1cbbdeb72ee10dffe52957110232",
|
||||
"continue": "f1ce02be3b186fc966c89cf0d54ea57a400e91d435ea91f5722cb17e43d11763",
|
||||
"continuity": "1bdf9799bad9076e54de2023433ec7da7b559509d986392a0563dc1ee20cf4a1",
|
||||
"de-ai": "9ce3020cdd4b223cc4d13c289babd2811bbfece4b392711dcba4fd0301c87249",
|
||||
|
||||
@@ -11,11 +11,13 @@ from __future__ import annotations
|
||||
import pytest
|
||||
from pydantic import ValidationError
|
||||
from ww_agents import (
|
||||
SPECS,
|
||||
AgentSpec,
|
||||
ClarifyDecision,
|
||||
ClarifyOption,
|
||||
ClarifyQuestion,
|
||||
clarify_refine_spec,
|
||||
clarify_rewrite_spec,
|
||||
)
|
||||
|
||||
# ---- ClarifyDecision / ClarifyQuestion / ClarifyOption schema ----
|
||||
@@ -123,3 +125,43 @@ def test_clarify_refine_spec_is_agent_spec_and_immutable() -> None:
|
||||
assert isinstance(clarify_refine_spec, AgentSpec)
|
||||
with pytest.raises(ValidationError):
|
||||
clarify_refine_spec.tier = "writer"
|
||||
|
||||
|
||||
# ---- clarify_rewrite_spec 声明(WFW-9 M2:整章重写预检澄清,镜像 clarify_refine)----
|
||||
|
||||
|
||||
def test_clarify_rewrite_spec_is_analyst_tier() -> None:
|
||||
# 不变量 #2:整章含糊判别 + 反问构造用分析档,只声明 tier(不写 model)
|
||||
assert clarify_rewrite_spec.tier == "analyst"
|
||||
assert clarify_rewrite_spec.name == "clarify_rewrite"
|
||||
|
||||
|
||||
def test_clarify_rewrite_spec_is_read_only() -> None:
|
||||
# 不变量 #3:只读——不读库真相源(材料端点注入)、不写任何表
|
||||
assert clarify_rewrite_spec.reads == ()
|
||||
assert clarify_rewrite_spec.writes == ()
|
||||
|
||||
|
||||
def test_clarify_rewrite_spec_output_schema_reuses_clarify_decision() -> None:
|
||||
# 复用 ClarifyDecision(不新增 schema),与 refine 侧同构
|
||||
assert clarify_rewrite_spec.output_schema is ClarifyDecision
|
||||
|
||||
|
||||
def test_clarify_rewrite_spec_prompt_documents_constraints() -> None:
|
||||
# v1 硬上限 1 问 + 自由输入兜底 + 防循环须在教条里显式约束(与 refine 侧同纪律)
|
||||
prompt = clarify_rewrite_spec.system_prompt
|
||||
assert prompt # 非空
|
||||
assert "1 问" in prompt
|
||||
assert "自由输入" in prompt
|
||||
assert "防循环" in prompt
|
||||
|
||||
|
||||
def test_clarify_rewrite_spec_registered_in_specs() -> None:
|
||||
# 注册表同一实例(兼容期 *_spec 与 SPECS[name] 为同对象,不变量)
|
||||
assert SPECS["clarify_rewrite"] is clarify_rewrite_spec
|
||||
|
||||
|
||||
def test_clarify_rewrite_spec_is_agent_spec_and_immutable() -> None:
|
||||
assert isinstance(clarify_rewrite_spec, AgentSpec)
|
||||
with pytest.raises(ValidationError):
|
||||
clarify_rewrite_spec.tier = "writer"
|
||||
|
||||
@@ -52,8 +52,8 @@ def test_load_prompt_matches_golden(name: str) -> None:
|
||||
|
||||
|
||||
# ---- #1 注册表唯一性 ----
|
||||
def test_specs_registry_len_is_24() -> None:
|
||||
assert len(SPECS) == 24
|
||||
def test_specs_registry_len_is_25() -> None:
|
||||
assert len(SPECS) == 25
|
||||
# name 即 key,dict 已去重;逐项确认 key == spec.name(无错位)
|
||||
assert all(key == spec.name for key, spec in SPECS.items())
|
||||
|
||||
|
||||
Reference in New Issue
Block a user