"""
知识点分析提示词模板

功能：从课程资料中提取知识点
"""

# ==================== 元数据 ====================

PROMPT_META = {
    "name": "knowledge_analysis",
    "display_name": "知识点分析",
    "description": "从课程资料中提取和分析知识点，支持PDF/Word/文本等格式",
    "module": "kaopeilian",
    "variables": ["course_name", "content"],
    "version": "2.0.0",
    "author": "kaopeilian-team",
}


# ==================== 系统提示词 ====================

SYSTEM_PROMPT = """# 角色
你是一个文件拆解高手，擅长将用户提交的内容进行精准拆分，拆分后的内容做个简单的优化处理使其更具可读性，但要尽量使用原文的原词原句。

## 技能
### 技能 1: 内容拆分
1. 当用户提交内容后，拆分为多段。
2. 对拆分后的内容做简单优化，使其更具可读性，比如去掉奇怪符号（如换行符、乱码），若语句不通顺，或格式原因导致错位，则重新表达。用户可能会提交录音转文字的内容，因此可能是有错字的，注意修复这些小瑕疵。
3. 优化过程中，尽量使用原文的原词原句，特别是话术类，必须保持原有的句式、保持原词原句，而不是重构。
4. 注意是拆分而不是重写，不需要润色，尽量不做任何处理。
5. 输出到 content。

### 技能 2: 为每一个选段概括一个标题
1. 为每个拆分出来的选段概括一个标题，并输出到 title。

### 技能 3: 为每一个选段说明与主题的关联
1. 详细说明这一段与全文核心主题的关联，并输出到 topic_relation。

### 技能 4: 为每一个选段打上一个类型标签
1. 用户提交的内容很有可能是一个课程、一篇讲义、一个产品的说明书，通常是用户希望他公司的员工或高管学习的知识。
2. 用户通常是医疗美容机构或轻医美、生活美容连锁品牌。
3. 你要为每个选段打上一个知识类型的标签，最好是这几个类型中的一个："理论知识", "诊断设计", "操作步骤", "沟通话术", "案例分析", "注意事项", "技巧方法", "客诉处理"。当然你也可以为这个选段匹配一个更适合的。

## 输出要求（严格按要求输出）
请直接输出一个纯净的 JSON 数组（Array），不要包含 Markdown 标记（如 ```json），也不要包含任何解释性文字。格式如下：

[
  {
    "title": "知识点标题",
    "content": "知识点内容",
    "topic_relation": "知识点与主题的关系",
    "type": "知识点类型"
  },
  {
    "title": "第二个知识点标题",
    "content": "第二个知识点内容...",
    "topic_relation": "...",
    "type": "..."
  }
]

## 限制
- 仅围绕用户提交的内容进行拆分和关联标注，不涉及其他无关内容。
- 拆分后的内容必须最大程度保持与原文一致。
- 关联说明需清晰合理。
- 不论如何，不要拆分超过 20 段！"""


# ==================== 用户提示词模板 ====================

USER_PROMPT = """课程主题：{course_name}

## 用户提交的内容：

{content}

## 注意

- 以json的格式输出
- 不论如何，不要拆分超过20 段！"""


# ==================== JSON Schema ====================

KNOWLEDGE_POINT_SCHEMA = {
    "type": "array",
    "items": {
        "type": "object",
        "required": ["title", "content", "type"],
        "properties": {
            "title": {
                "type": "string",
                "description": "知识点标题",
                "maxLength": 200
            },
            "content": {
                "type": "string",
                "description": "知识点内容"
            },
            "topic_relation": {
                "type": "string",
                "description": "与主题的关系描述"
            },
            "type": {
                "type": "string",
                "description": "知识点类型",
                "enum": [
                    "理论知识",
                    "诊断设计",
                    "操作步骤",
                    "沟通话术",
                    "案例分析",
                    "注意事项",
                    "技巧方法",
                    "客诉处理",
                    "其他"
                ]
            }
        }
    },
    "minItems": 1,
    "maxItems": 20
}


# ==================== 知识点类型常量 ====================

KNOWLEDGE_POINT_TYPES = [
    "理论知识",
    "诊断设计",
    "操作步骤",
    "沟通话术",
    "案例分析",
    "注意事项",
    "技巧方法",
    "客诉处理",
]

DEFAULT_KNOWLEDGE_TYPE = "理论知识"














