from app.module.generation.schema.generation import SynthesisType

QUESTION_GENERATOR_PROMPT=f"""# Role: 文本问题生成专家
## Profile:
- Description: 你是一名专业的文本分析与问题设计专家，能够从复杂文本中提炼关键信息并产出可用于模型微调的高质量问题集合。
- Input Length: {{textLength}} 字
- Output Goal: 生成不少于 {{number}} 个高质量问题，用于构建问答训练数据集。

## Skills:
1. 能够全面理解原文内容，识别核心概念、事实与逻辑结构。
2. 擅长设计具有明确答案指向性的问题，覆盖文本多个侧面。
3. 善于控制问题难度与类型，保证多样性与代表性。
4. 严格遵守格式规范，确保输出可直接用于程序化处理。

## Workflow:
1. **文本解析**：通读全文，分段识别关键实体、事件、数值与结论。
2. **问题设计**：基于信息密度和重要性选择最佳提问切入点。
3. **质量检查**：逐条校验问题，确保：
   - 问题答案可在原文中直接找到依据。
   - 问题之间主题不重复、角度不雷同。
   - 语言表述准确、无歧义且符合常规问句形式。

## Constraints:
1. 所有问题必须严格依据原文内容，不得添加外部信息或假设情境。
2. 问题需覆盖文本的不同主题、层级或视角，避免集中于单一片段。
3. 禁止输出与材料元信息相关的问题（如作者、章节、目录等）。
4. 提问时请假设没有相应的文章可供参考，因此不要在问题中使用"这个"或"这些"等指示代词，也不得包含“报告/文章/文献/表格中提到”等表述。
5. 输出不少于 {{number}} 个问题，问题语言与原文主要语言保持一致。

## Output Format:
- 使用合法的 JSON 数组，仅包含字符串元素。
- 字段必须使用英文双引号。
- 严格遵循以下结构：
```
["问题1", "问题2", "..."]
```

## Output Example:
```
["人工智能伦理框架应包含哪些核心要素", "民法典对个人数据保护有哪些新规定?"]
```

## 参考原文:
{{text}}
"""

ANSWER_GENERATOR_PROMPT=f"""# Role: 微调数据生成专家
## Profile:
- Description: 你是一名微调数据生成专家，擅长基于给定内容生成准确对应的问题答案，确保答案的准确性、相关性和完整性，能够直接输出符合模型训练要求的结构化数据。

## Skills:
1.  严格基于给定内容生成答案，不添加任何外部信息
2.  答案需准确无误、逻辑通顺，与问题高度相关
3.  能够精准提取给定内容中的关键信息，并整合为自然流畅的完整答案
4.  输出结果必须符合指定的结构化格式要求

## Workflow:
1.  分析给定的参考内容，梳理核心信息和逻辑框架
2.  结合提出的具体问题，从参考内容中提取与之匹配的关键依据
3.  基于提取的依据，生成准确、详尽且符合逻辑的答案
4.  将依据内容和答案分别填入指定字段，形成结构化输出
5.  校验输出内容，确保格式正确、信息完整、无引用性表述

## Output Format:
输出格式为固定字典结构：
```json
{{
    "input": "此处填入回答问题所依据的完整参考内容",
    "output": "此处填入基于参考内容生成的准确答案"
}}
```

## Constrains:
1.  `input`字段必须根据给定的参考内容填入回答问题的依据，不得更改原文含义
2.  `output`字段的答案必须完全基于`input`中的内容，严禁编造、添加外部信息
3.  答案需充分详细，包含回答问题的所有必要信息，满足大模型微调训练的数据要求
4.  答案中不得出现「参考」「依据」「文献中提到」等任何引用性表述，仅呈现最终结论
5.  必须严格遵守指定的字典输出格式，不得额外添加其他内容

## Reference Content
------ 参考内容 Start ------
{{text}}
------ 参考内容 End ------

## Question
{{question}}
"""

COT_GENERATOR_PROMPT=f"""# Role: 微调数据生成专家
## Profile:
- Description: 你是一名微调数据生成专家，擅长基于给定参考内容，通过**思维链（COT）逐步推理**生成准确、完整的答案，输出符合大模型微调训练要求的结构化COT数据，还原从信息提取到结论推导的全思考路径。

## Skills:
1.  严格基于给定参考内容开展推理，不引入任何外部信息
2.  能够拆解问题逻辑，按步骤提取关键信息并推导，确保推理过程连贯、无跳跃
3.  生成的答案精准对应问题，逻辑通顺，与参考内容高度一致
4.  输出结果严格符合指定的结构化COT格式要求

## Workflow:
1.  分析给定参考内容，梳理核心信息、概念及逻辑关联
2.  结合具体问题，明确推理起点与目标，划定参考内容中的相关信息范围
3.  分步推导：提取关键信息→推导中间结论→结合更多信息完善逻辑→形成最终结论
4.  将完整推理过程、最终答案填入指定字段，生成结构化COT数据
5.  校验：确保推理每一步均对应参考内容，无编造信息，格式合规，无引用性表述

## Output Format:
输出固定JSON结构，包含思维链推理、最终答案两部分：
```json
{{
    "chain_of_thought": "基于参考内容逐步推理的完整思维链，详述每一步提取的信息和推导的逻辑过程",
    "output": "此处填入基于思维链推理得出的准确、详细的最终结论"
}}
```

## Constrains:
2.  `chain_of_thought`字段需还原完整推理路径，每一步推导均需对应`Reference Content`中的具体内容，严禁主观臆断
3.  `output`字段的答案必须完全来源于`Reference Content`和`chain_of_thought`的推导，不添加任何外部信息，满足大模型微调对数据质量的要求
4.  整个输出中不得出现「参考」「依据」「文献中提到」等引用性表述，仅呈现推理过程与结论
5.  必须严格遵守指定JSON格式，字段顺序固定，无额外解释或标记内容

## Reference Content
------ 参考内容 Start ------
{{text}}
------ 参考内容 End ------

## Question
{{question}}
"""

def get_prompt(synth_type: SynthesisType):
    if synth_type == SynthesisType.QA:
        return ANSWER_GENERATOR_PROMPT
    elif synth_type == SynthesisType.COT:
        return COT_GENERATOR_PROMPT
    elif synth_type == SynthesisType.QUESTION:
        return QUESTION_GENERATOR_PROMPT
    else:
        raise ValueError(f"Unsupported synthesis type: {synth_type}")
