test_prompt_quality.py 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. from __future__ import annotations
  2. from agent import get_preset
  3. from script_build_host.agents.presets import register_script_presets
  4. from script_build_host.agents.prompts import (
  5. COMPARISON_WORKER_PROMPT,
  6. COMPOSE_WORKER_PROMPT,
  7. DIRECTION_WORKER_PROMPT,
  8. ELEMENT_SET_WORKER_PROMPT,
  9. EVIDENCE_RETRIEVAL_WORKER_PROMPT,
  10. PARAGRAPH_WORKER_PROMPT,
  11. PLANNER_PROMPT,
  12. ROOT_VALIDATOR_PROMPT,
  13. SCRIPT_CANDIDATE_VALIDATOR_PROMPT,
  14. STRUCTURE_WORKER_PROMPT,
  15. script_build_prompt_manifest,
  16. )
  17. def test_logical_retrieval_prompt_keeps_provider_choice_host_owned() -> None:
  18. manifest = {str(item["preset"]): item for item in script_build_prompt_manifest()}
  19. frozen = manifest["script_evidence_retrieval_worker"]
  20. assert frozen["source_id"] == "evidence_retrieval_worker.md"
  21. assert frozen["content"] == EVIDENCE_RETRIEVAL_WORKER_PROMPT
  22. assert "RetrievalPipeline" in EVIDENCE_RETRIEVAL_WORKER_PROMPT
  23. assert "不由模型选择" in EVIDENCE_RETRIEVAL_WORKER_PROMPT
  24. register_script_presets()
  25. assert (
  26. get_preset("script_evidence_retrieval_worker").system_prompt
  27. == EVIDENCE_RETRIEVAL_WORKER_PROMPT
  28. )
  29. def test_creative_prompts_preserve_quality_and_convergence_contracts() -> None:
  30. assert "前期可探索不同的真实路径" in PLANNER_PROMPT
  31. assert "只处理最主要的缺陷簇" in PLANNER_PROMPT
  32. assert "受众可感知结果" in DIRECTION_WORKER_PROMPT
  33. assert "不预写 Phase 2" in DIRECTION_WORKER_PROMPT
  34. assert "段落方案" in DIRECTION_WORKER_PROMPT
  35. assert "不是完成的正文" in STRUCTURE_WORKER_PROMPT
  36. assert "不可随意互换" in STRUCTURE_WORKER_PROMPT
  37. assert "受众最终能直接看到" in PARAGRAPH_WORKER_PROMPT
  38. assert "不是提纲、创作说明" in PARAGRAPH_WORKER_PROMPT
  39. assert "只是抽象评价" in ELEMENT_SET_WORKER_PROMPT
  40. assert "先按完全相同的 criteria 独立评价" in COMPARISON_WORKER_PROMPT
  41. assert "不在 Compose 阶段补写或润色" in COMPOSE_WORKER_PROMPT
  42. def test_validator_prompts_require_audience_visible_semantic_evidence() -> None:
  43. dimensions = (
  44. "D1 Goal 实现",
  45. "D2 具体可执行",
  46. "D3 结构叙事",
  47. "D4 元素一致",
  48. "D5 主题与 persona",
  49. "D6 信息与事实",
  50. )
  51. for dimension in dimensions:
  52. assert dimension in SCRIPT_CANDIDATE_VALIDATOR_PROMPT
  53. assert "标签、自述和 Artifact URI 本身都不能证明内容质量" in (
  54. SCRIPT_CANDIDATE_VALIDATOR_PROMPT
  55. )
  56. assert "真实受众的阅读顺序" in ROOT_VALIDATOR_PROMPT
  57. assert "空 evidence、空正文、零独立 Element 或零 Link" in ROOT_VALIDATOR_PROMPT