
    \i4                     4    S r SSKJrJrJrJr   " S S5      rg)u3  
阶段 Prompt 生成器

根据方向配置自动生成每个阶段的固定 Prompt 内容。
- 阶段 0（用户输入需求）：根据表单字段自动生成固定内容
- 其他阶段：系统指令为空，由用户通过扩展填充
- 全局规则：可配置的禁止事项、关键信息保持等
    )DictAnyListOptionalc                   `   \ rS rSrSrSrSSS.SSS.S	SS.S
SS.SSS.SSS.SSS.SSS.SSS.SSS.S.
rSSS.S	SS.S
SS.SSS.SSS.SSS.SSS.SSS.S.rSSS.S	SS.S
SS.SSS.SSS.SSS.SSS.SSS.S.rSSS.S	SS.S
SS.SSS.SSS.SSS.SSS.SSS.S.r	\\\\	S.r
\S\S\\\4   4S j5       r\ S'S\S\S\\\4   S\\\4   4S jj5       r\ S'S\S\\   S\\\4   S\\   4S  jj5       r\  S(S\S\\   S!\\\4   S"\S\4
S# jj5       r\S$\S!\\\4   S\4S% j5       rS&rg))StagePromptGenerator   u   阶段 Prompt 生成器u  ## 🚫 禁止事项

**禁止词汇**：
- "由于篇幅/时间/上下文限制" "直接进入" "快速实现" "跳过" "省略"

**禁止行为**：
- 跳过任何阶段（特别是质量检查阶段）
- 只输出标题而无实际内容
- 通过降低难度来解决技术问题

**✅ 你有无限的时间和空间，直接执行，不要解释**

---

## ⚠️ 关键信息保持

1. **题目名称**：一旦确定，后续所有文件必须使用相同名称
2. **利用链设计**：设计阶段的步骤必须在代码生成阶段完整实现
3. **关键 payload**：设计的 payload 必须与代码中的过滤逻辑兼容
4. **输出目录**：所有文件保存到 `output/{YYYYMMDD_HHMMSS}_{题目名称}/`

---u   用户输入需求u9  **选择顺序**：语言 → 难度 → 漏洞 → 场景

**第一步：选择语言**
可选：{{available_languages}}

**第二步：选择难度**
| 难度 | 允许漏洞数量 | writeup 总数 | 深度范围 |
|------|-------------|-------------|---------|
{{difficulty_table}}

**第三步：选择漏洞**（根据难度限制数量）

**第四步：选择场景**（如留言板、博客、OA系统）

**示例**：
```
语言：{{language}}
难度：{{difficulty}}（最多 {{max_knowledge}} 个漏洞）
漏洞：{{knowledge_points}}
场景：{{scene}}
```titlesystem_promptu   漏洞主次分类 u   学习与知识提取u   知识整理u   题目设计u   质量检查u   代码生成u   Docker 构建与测试u   exp 和 writeupu   成品输出)
0z0.512345678ur  **选择顺序**：难度 → 算法类型

**第一步：选择难度**
| 难度 | 允许知识点数量 | writeup 总数 |
|------|---------------|-------------|
{{difficulty_table}}

**第二步：选择算法类型**（根据难度限制数量）

**示例**：
```
难度：{{difficulty}}（最多 {{max_knowledge}} 个知识点）
算法：{{knowledge_points}}
```u   验证测试)r   r   r   r   r   r   r   r   u  **选择顺序**：难度 → 漏洞类型 → 保护机制

**第一步：选择难度**
| 难度 | 允许漏洞数量 | writeup 总数 |
|------|-------------|-------------|
{{difficulty_table}}

**第二步：选择漏洞类型**（根据难度限制数量）

**第三步：选择保护机制**（NX, ASLR, Canary, PIE 等）

**示例**：
```
难度：{{difficulty}}（最多 {{max_knowledge}} 个漏洞）
漏洞：{{knowledge_points}}
保护：{{protections}}
```u  **选择顺序**：难度 → 逆向类型 → 目标平台

**第一步：选择难度**
| 难度 | 允许知识点数量 | writeup 总数 |
|------|---------------|-------------|
{{difficulty_table}}

**第二步：选择逆向类型**（根据难度限制数量）

**第三步：选择目标平台**（Windows, Linux, Android 等）

**示例**：
```
难度：{{difficulty}}（最多 {{max_knowledge}} 个知识点）
类型：{{knowledge_points}}
平台：{{platform}}
```)webcryptopwnreversecategory_idreturnc                 L    U R                   R                  XR                  5      $ )u!   获取指定方向的阶段模板)CATEGORY_TEMPLATESgetWEB_STAGE_TEMPLATES)clsr   s     G   /Users/yu22x/Desktop/ddd_副本138/ctf/app/services/prompt/generator.pyget_stage_templates(StagePromptGenerator.get_stage_templates   s!     %%))+7N7NOO    Nstage_idconfigc                     U R                  U5      nUR                  USU 3SS.5      nUR                  SSU 35      UR                  SS5      S.$ )u   
生成指定阶段的 Prompt

Args:
    category_id: 方向 ID
    stage_id: 阶段 ID
    config: 方向配置（用于变量替换）
    
Returns:
    包含 title 和 system_prompt 的字典
   阶段 u   请完成本阶段的任务。r
   r   r   r   )r#   r   )r!   r   r&   r'   	templatestemplates         r"   generate_stage_prompt*StagePromptGenerator.generate_stage_prompt   se     ++K8	==xj)=,
  \\'WXJ+?@%\\/2>
 	
r%   stagesc                    / nU R                  U5      nU H  nUR                  SS5      nUR                  U0 5      nUR                  UUR                  SUR                  SSU 35      5      UR                  SS5      UR                  SS5      UR                  S	5      UR                  S
S5      UR                  SSUR                  SS5       S35      UR                  SS5      S.5        M     U$ )u   
为所有阶段生成 Prompt

Args:
    category_id: 方向 ID
    stages: 阶段列表
    config: 方向配置
    
Returns:
    包含 system_prompt 和 user_extension 的阶段列表
idr   namer   r)   outputrequiredT	conditionskip_forbiddenFr   u	   完成「u   」阶段的任务。user_extension)r0   r1   r2   r3   r4   r5   r   r6   )r#   r   append)	r!   r   r.   r'   resultr*   stager&   r+   s	            r"   generate_all_stages(StagePromptGenerator.generate_all_stages   s     ++K8	Eyyr*H }}Xr2HMM		&(,,w'(@T*UV))Hb1!IIj$7"YY{3"')),<e"D!)o599U[]_K`Jaav?w!x"')),<b"A	 		  r%   contextglobal_rulesc                 T   U=(       d    0 n/ nUR                  SUR                  5       5      nUR                  SU S35        UR                  S5        U(       a  UOU R                  nUR                  U5        UR                  S5        UR                  S5        UR                  S5        UR                  S5        U Hq  nUR                  S	S5      n	UR                  S
S5      n
UR                  SS5      nUR                  S5      (       a  SOSnUR                  SU	 SU
 SU SU S3	5        Ms     UR                  S5        UR                  S5        UR                  S5        UR                  S5        UR                  S5        [	        U5       GH  u  pUR                  S	S5      n	UR                  S
S5      n
UR                  SS5      nUR                  SS5      nUR                  SU	 SU
 S35        U(       a3  U R                  X5      nUR                  U5        UR                  S5        U(       a"  UR                  U5        UR                  S5        U(       d  U(       d  UR                  S5        U[        U5      S-
  :H  nU(       a  UR                  S5        UR                  S5        UR                  S5        UR                  S5        UR                  S5        UR                  S5        UR                  S5        UR                  S5        UR                  S5        UR                  S 5        UR                  S!5        UR                  S"5        UR                  S#5        UR                  S5        UR                  S5        GM     SR                  U5      $ )$u  
编译完整的 Prompt（固定部分 + 用户扩展）

Args:
    category_id: 方向 ID
    stages: 包含 user_extension 的阶段列表
    context: 变量上下文
    global_rules: 自定义全局规则（为空则使用默认）
    
Returns:
    完整的 Prompt 字符串
categoryu   # 🎯 CTF u    题目设计专家系统
uf   你是一位经验丰富的 CTF 题目设计专家，擅长从已有题目中学习并创新设计。
r   u   ## 🧩 任务流程
u"   | 阶段 | 名称 | 关键输出 |z|------|------|---------|r0   r1   r2   r5   u   ⚠️ 不可跳过z| z |  z |uA   **每个阶段开始时必须输出**：`阶段X：阶段名称`
u]   **注意**：阶段编号从1开始（阶段1、阶段2、阶段3...），不是从0开始。z---
r   r6   u
   ## 阶段 u   ：
u9   *（请在管理后台添加此阶段的详细指导）*
   u   ## ⚠️ 完成标记要求uU   **完成所有任务后，必须输出以下结束标记（这是强制要求）**：z```z## [CTF_GENERATION_COMPLETE]u   **重要说明**：uA   - 只有输出上述标记后，系统才会认为生成已完成u;   - 请在所有文件生成完成后，立即输出此标记uA   - 不要使用其他格式，必须严格按照上述格式输出)r   upperr7   GLOBAL_RULES_TEMPLATE	enumerate_render_variableslenjoin)r!   r   r.   r<   r=   linescategory_namerulesr9   r&   r1   r2   r3   idxr   r6   renderedis_last_stages                     r"   compile_full_prompt(StagePromptGenerator.compile_full_prompt
  s     -R  J0A0A0CD{=/1LMN~ !-#2K2KUR 	-.9:01Eyyr*H99VR(DYYx,F05		:J0K0K,QSHLL2hZs4&F81XJbIJ  	RYZRtuW $F+JCyyr*H99VR(D!IIor:M"YY'7<N LL:hZs4&;< 00HX&R  ^,R  !YZ !CK!O3MR ;<R tuR U#;<U#R 23`aZ[`aR LL!U ,X yyr%   r+   c                 <   ^ SSK nU4S jnUR                  SXA5      $ )u   替换模板中的变量r   Nc                    > U R                  S5      nTR                  USU S35      n[        U[        5      (       a  SR	                  S U 5       5      $ [        U5      $ )NrB   z{{z}}z, c              3   8   #    U  H  n[        U5      v   M     g 7fN)str).0vs     r"   	<genexpr>NStagePromptGenerator._render_variables.<locals>.replace_var.<locals>.<genexpr>o  s      7AQs   )groupr   
isinstancelistrH   rU   )matchvar_namevaluer<   s      r"   replace_var;StagePromptGenerator._render_variables.<locals>.replace_vark  sU    {{1~HKKD
$*?@E%&&yy 7 777u:r%   z\{\{(\w+)\}\})resub)r!   r+   r<   rb   r`   s     `  r"   rF   &StagePromptGenerator._render_variablesf  s!     		 vv&>>r%    rT   )NN)__name__
__module____qualname____firstlineno____doc__rD   r    CRYPTO_STAGE_TEMPLATESPWN_STAGE_TEMPLATESREVERSE_STAGE_TEMPLATESr   classmethodrU   r   r#   r   r,   r   r:   rO   rF   __static_attributes__re   r%   r"   r   r      s   !6 *
2 *

 -

 $

 $

 $

 $

 .

 '

 $
s=D *
" /D%;%;%;%;%;(2>1< *
( /D%;%;%;%;/"E(2>7B *
( /D%;%;%;%;%;(2>7@ #("*	 Pc Pd39o P P 7;
 
s 
&*38n
@DS#X
 
0 48c 4: #'S>=A$Z B 59/3Y c Y 4: Y $(cNY ),Y 8;Y  Y v ? ?tCH~ ?# ? ?r%   r   N)rj   typingr   r   r   r   r   re   r%   r"   <module>rq      s    - ,f? f?r%   