itv_07_03_prompts.py 3.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. # scripts/manual_tests/itv_07_03_prompts.py
  2. # 07-03 实测:把每个 Prompt 用真实资质材料 / 评分项 / 答案 .format() 渲染出来,
  3. # 直观看到「最终送进 LLM 的文本长什么样」。纯离线,无需启动服务。
  4. # 运行:python scripts/manual_tests/itv_07_03_prompts.py
  5. from itv_fixtures import (section, TARGET_POSITION, QUALIFICATION_PROJECTS, ANSWER_SCRIPT)
  6. from backend.agents.defense.prompts import (
  7. SYSTEM_PROMPT, TECH_BASE_GENERATE_PROMPT, WARMUP_PROMPT,
  8. INTRO_EVAL_TECH_FIRST_PROMPT, TECH_BASE_PROMPT, PROJECT_PROMPT,
  9. CLOSING_PROMPT, STAGE_TRANSITION_PROMPTS,
  10. EVALUATE_THINK_PROMPT, EVALUATE_ANSWER_PROMPT, GENERATE_REPORT_PROMPT,
  11. )
  12. Q_TRANSFORMER = "请解释 Transformer 中自注意力机制的计算过程。"
  13. def show(name: str, rendered: str):
  14. print(f"\n----- {name} -----")
  15. print(rendered.strip())
  16. def main():
  17. section("① SYSTEM_PROMPT(注入每次 LLM 调用,固定评审专家角色)")
  18. show("SYSTEM_PROMPT", SYSTEM_PROMPT.format(position=TARGET_POSITION))
  19. section("② TECH_BASE_GENERATE_PROMPT(首轮让 LLM 动态出 8 道岗位题)")
  20. show("动态出题", TECH_BASE_GENERATE_PROMPT.format(position=TARGET_POSITION, count=8))
  21. section("③ WARMUP opening(开场白邀请自我介绍)")
  22. show("WARMUP[opening]", WARMUP_PROMPT["opening"].format(position=TARGET_POSITION))
  23. section("④ INTRO_EVAL_TECH_FIRST(评价自我介绍 + 出第一题,仅过渡轮用一次)")
  24. show("过渡专用", INTRO_EVAL_TECH_FIRST_PROMPT.format(
  25. intro=ANSWER_SCRIPT[0],
  26. position=TARGET_POSITION,
  27. first_question=Q_TRANSFORMER,
  28. ))
  29. section("⑤ TECH_BASE ask_with_feedback(上题反馈 + 出下一题,技术环节主流程)")
  30. show("ask_with_feedback", TECH_BASE_PROMPT["ask_with_feedback"].format(
  31. question=Q_TRANSFORMER,
  32. answer=ANSWER_SCRIPT[1],
  33. quality="excellent",
  34. next_question="过拟合和欠拟合分别是什么?如何缓解过拟合?",
  35. ))
  36. section("⑥ PROJECT new_project(深挖资质材料第一个项目,项目数据注入为内部参考)")
  37. proj = QUALIFICATION_PROJECTS[0]
  38. show("new_project", PROJECT_PROMPT["new_project"].format(
  39. project_name=proj["name"],
  40. project_role=proj["role"],
  41. tech_stack=", ".join(proj["tech_stack"]),
  42. highlights="\n".join(f"- {h}" for h in proj["highlights"]),
  43. description=proj["description"][:200],
  44. ))
  45. section("⑦ STAGE_TRANSITION_PROMPTS(静态过渡语,不调用 LLM)")
  46. print("可用的过渡键:", list(STAGE_TRANSITION_PROMPTS.keys()))
  47. for k, v in STAGE_TRANSITION_PROMPTS.items():
  48. print(f" [{k}] {v}")
  49. section("⑧ Think Tool 两步:EVALUATE_THINK(自由推理)→ EVALUATE_ANSWER(打标签)")
  50. show("第一步 EVALUATE_THINK", EVALUATE_THINK_PROMPT.format(
  51. question=Q_TRANSFORMER, answer=ANSWER_SCRIPT[1]))
  52. show("第二步 EVALUATE_ANSWER", EVALUATE_ANSWER_PROMPT.format(
  53. question=Q_TRANSFORMER, answer=ANSWER_SCRIPT[1]))
  54. section("⑨ GENERATE_REPORT(答辩结束生成五维度报告)")
  55. show("GENERATE_REPORT(节选前 400 字)", GENERATE_REPORT_PROMPT.format(
  56. position=TARGET_POSITION,
  57. total_turns=13,
  58. history_summary="(无历史摘要)",
  59. conversation="评审专家:... \n投标人:...",
  60. )[:400])
  61. section("✅ 07-03 全部 Prompt 渲染成功")
  62. if __name__ == "__main__":
  63. main()