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:
@@ -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"
|
||||
|
||||
Reference in New Issue
Block a user