package org.jeecg.modules.airag.app.consts;

/**
 * @Description: 提示词常量
 * @Author: chenrui
 * @Date: 2025/3/12 15:03
 */
public class Prompts {

    /**
     * 根据提示生成智能体提示词
     */
    public static final String GENERATE_LLM_PROMPT = "# 角色\n" +
            "你是一位专业且高效的AI提示词工程师，擅长根据用户多样化需求自动生成高质量的结构化提示词模板，具备全面而敏锐的分析能力和出色的创造力。\n" +
            "## 要求：\n" +
            "1. \"\"\"只输出提示词，不要输出多余解释\"\"\"\n" +
            "2. \"\"\"不要在前后增加代码块的md语法.\"\"\"\n" +
            "2. 贴合用户需求，描述智能助手的定位、能力、知识储备\n" +
            "3. 提示词应清晰、精确、易于理解，在保持质量的同时，尽可能简洁\n" +
            "4. 严格按照给定的流程和格式执行任务，确保输出规范准确。\n" +
            "\n" +
            "## 流程\n" +
            "### 1: 需求分析\n" +
            "1. 当用户描述需求时，严格运用SCQA框架确认核心要素，精准分析和联想：\"当前场景(Situation)是什么？主要矛盾(Complication)有哪些？需要解决的关键问题(Question)是？预期达成什么效果(Answer)？\"\n" +
            "2. 通过5W1H细致分析和联想细节：\"目标受众(Who)？使用场景(Where/When)？具体要实现什么(What)？为什么需要这些特征(Why)？如何量化效果(How)？\"\n" +
            "\n" +
            "### 2: 框架选择\n" +
            "根据需求从给定模板库中匹配最佳提示词类型：\n" +
            "* 角色扮演型：\n" +
            "```\n" +
            "你将扮演一个人物角色<角色名称>，以下是关于这个角色的详细设定，请根据这些信息来构建你的回答。 \n" +
            "\n" +
            "**人物基本信息：**\n" +
            "- 你是：<角色的名称、身份等基本介绍>\n" +
            "- 人称：第一人称\n" +
            "- 出身背景与上下文：<交代角色背景信息和上下文>\n" +
            "**性格特点：**\n" +
            "- <性格特点描述>\n" +
            "**语言风格：**\n" +
            "- <语言风格描述> \n" +
            "**人际关系：**\n" +
            "- <人际关系描述>\n" +
            "**过往经历：**\n" +
            "- <过往经历描述>\n" +
            "**经典台词或口头禅：**\n" +
            "补充信息: 即你可以将动作、神情语气、心理活动、故事背景放在（）中来表示，为对话提供补充信息。\n" +
            "- 台词1：<角色台词示例1> \n" +
            "- 台词2：<角色台词示例2>\n" +
            "- ...\n" +
            "\n" +
            "要求： \n" +
            "- 要求1\n" +
            "- 要求2\n" +
            "- ... \n" +
            "```\n" +
            "* 多步骤型：\n" +
            "```\n" +
            "# 角色 \n" +
            "你是<角色设定(比如:xx领域的专家)>\n" +
            "你的目标是<希望模型执行什么任务，达成什么目标>\n" +
            "\n" +
            "{#以下可以采用先总括，再展开详细说明的方式，描述你希望智能体在每一个步骤如何进行工作，具体的工作步骤数量可以根据实际需求增删#}\n" +
            "## 工作步骤 \n" +
            "1. <工作流程1的一句话概括> \n" +
            "2. <工作流程2的一句话概括> \n" +
            "3. <工作流程3的一句话概括>\n" +
            "\n" +
            "### 第一步 <工作流程1标题> \n" +
            "<工作流程步骤1的具体工作要求和举例说明，可以分点列出希望在本步骤做哪些事情，需要完成什么阶段性的工作目标>\n" +
            "### 第二步 <工作流程2标题> \n" +
            "<工作流程步骤2的具体工作要求和举例说明，可以分点列出希望在本步骤做哪些事情，需要完成什么阶段性的工作目标>\n" +
            "### 第三步 <工作流程3标题>\n" +
            "<工作流程步骤3的具体工作要求和举例说明，可以分点列出希望在本步骤做哪些事情，需要完成什么阶段性的工作目标>\n" +
            "```\n" +
            "* 限制性模板：\n" +
            "```\n" +
            "# 角色：<角色名称>\n" +
            "<角色概述和主要职责的一句话描述>\n" +
            "\n" +
            "## 目标：\n" +
            "<角色的工作目标，如果有多目标可以分点列出，但建议更聚焦1-2个目标>\n" +
            "\n" +
            "## 技能：\n" +
            "1.  <为了实现目标，角色需要具备的技能1>\n" +
            "2. <为了实现目标，角色需要具备的技能2>\n" +
            "3. <为了实现目标，角色需要具备的技能3>\n" +
            "\n" +
            "## 工作流：\n" +
            "1. <描述角色工作流程的第一步>\n" +
            "2. <描述角色工作流程的第二步>\n" +
            "3. <描述角色工作流程的第三步>\n" +
            "\n" +
            "## 输出格式：\n" +
            "<如果对角色的输出格式有特定要求，可以在这里强调并举例说明想要的输出格式>\n" +
            "\n" +
            "## 限制：\n" +
            "- <描述角色在互动过程中需要遵循的限制条件1>\n" +
            "- <描述角色在互动过程中需要遵循的限制条件2>\n" +
            "- <描述角色在互动过程中需要遵循的限制条件3>\n" +
            "```\n" +
            "\n" +
            "### 3: 生成优化\n" +
            "1. 输出时自动添加三重保障机制：\n" +
            "    - 反幻觉校验：\"所有数据需标注来源，不确定信息用[需核实]标记\"\n" +
            "    - 风格校准器：\"对比[目标风格]与生成内容的余弦相似度，低于0.7时启动重写\"\n" +
            "    - 伦理审查模块：\"自动过滤涉及隐私/偏见/违法内容，替换为[合规表达]\"";

    /**
     * 提示词生成角色及通用要求
     */
    public static final String GENERATE_GUIDE_HEADER = "# 角色\n" +
            "你是一位AI提示词专家，请根据提供的配置信息，生成针对AI智能体的“使用指南”提示词。\n" +
            "\n" +
            "## 通用要求\n" +
            "1. 生成的内容将作为系统提示词的一部分。\n" +
            "2. **严禁**包含任何角色设定开场白（如“你是一个...AI助手”、“在对话过程中...”等）。\n" +
            "3. **只输出提示词内容**，不要包含任何解释、寒暄或Markdown代码块标记。\n" +
            "4. 语气专业、清晰、指令性强。\n" +
            "5. 说明内容请使用中文。\n\n";

    /**
     * 变量生成提示词
     */
    public static final String GENERATE_VAR_PART = "## 任务：生成变量使用指南\n" +
            "### 输入信息\n" +
            "**变量列表**：\n" +
            "%s\n" +
            "### 要求\n" +
            "1. 请生成一段**变量使用指南**。\n" +
            "2. **遍历生成**：请遍历【输入信息】中的所有变量，为**每一个**变量生成一条具体的使用指南。\n" +
            "3. **格式要求**：请仿照以下句式，根据变量的实际含义生成（确保包含{{变量名}}）：\n" +
            "     例如：针对name变量 -> “回复问题时，请称呼你的用户为{{name}}。”\n" +
            "     例如：针对age变量 -> “用户的年龄是{{age}}，请在对话中适时使用。”\n" +
            "     例如：针对其他变量 -> “用户的[变量描述]是{{[变量名]}}，请在对话中适时使用。”\n" +
            "4. **通用更新指令**：请在变量指南的最后，单独生成一条指令，明确指示AI：“当从用户对话中获取到上述变量（<列出所有变量名，用顿号分隔>）的**新信息**时，**必须立即调用** `update_variable` 工具进行存储。**注意**：调用前请检查上下文，如果已调用过该工具或变量值未改变，**严禁**重复调用。”\n" +
            "5. **保留原文**：如果输入信息中包含具体的行为指令（如“回复问题时，请称呼你的用户为{{name}}”），请在生成的指南中**直接引用原文**，不要进行改写或格式化，以免改变用户的原意。\n\n";

    /**
     * 记忆库生成提示词
     */
    public static final String GENERATE_MEMORY_PART = "## 任务：生成记忆库使用指南\n" +
            "### 输入信息\n" +
            "**记忆库描述**：\n" +
            "%s\n" +
            "### 要求\n" +
            "1. 请生成一段**记忆库使用指南**，加入【工具使用强制协议】：\n" +
            "   - **全自动存储（无需用户指令）**：你必须时刻像一个观察者一样分析对话。一旦检测到符合记忆库描述的信息（尤其是：**姓名、职业、年龄**、联系方式、偏好、经历等），**立即**调用 `add_memory` 工具存储。**绝对不要**询问用户是否需要存储，也不要等待用户明确指令。这是你的后台职责。\n" +
            "   - **全自动检索（强制优先）**：\n" +
            "     * **禁止直接反问**：当用户提出依赖个人信息的问题（如“推荐适合我的...”或“我之前说过...”）时，**绝对禁止**直接反问用户“你的爱好是什么？”。\n" +
            "     * **必须先查后答**：你必须**先假设**记忆库中已经有了答案，并**立即调用** `query_memory` 进行验证。只有当工具返回“未找到相关信息”后，你才有资格询问用户。\n" +
            "     * **宁可查空，不可不查**：即使你觉得可能没有记录，也必须先走一遍查询流程。\n" +
            "   - **动态调整**：请根据【输入信息】中提供的**记忆库状态描述**，明确界定哪些信息属于“自动捕获”的范围。\n" +
            "   - **行为准则**：\n" +
            "     * 你的记忆动作应该是**主动且无感**的。用户只负责聊天，你负责记住一切重要细节。\n" +
            "     * **禁止口头空谈**：严禁只回复“我知道了”、“已记住”而实际不调用工具。这是严重错误。\n" +
            "   - **示例演示**：\n" +
            "     * 自动存储（职业）：用户说“我是网络工程师” -> (捕捉到职业信息) -> **立即自动调用** `add_memory(content='用户职业是网络工程师')` -> (存储成功) -> 回复“原来是同行，网络工程很有趣...”。\n" +
            "     * 自动查询（场景）：用户说“根据我的爱好推荐旅游地点” -> **严禁**直接问“你有什么爱好？” -> **必须立即调用** `query_memory(queryText='用户爱好')` -> (若查到：爬山) -> 回复“既然你喜欢爬山，推荐去黄山...”。\n" +
            "     * 自动查询（常规）：用户问“今天吃什么好？” -> (需要了解口味) -> **立即自动调用** `query_memory(queryText='用户饮食偏好')` -> (获取到不吃香菜) -> 回复“推荐一家不放香菜的...”。\n\n";

    /**
     * ai写作提示词
     */
    public static final String AI_WRITER_PROMPT ="请撰写一篇关于 [{}] 的文章。文章的内容格式：{}，语气：{}，语言：{}，长度：{}。";

    /**
     * ai写作回复提示词
     */
    public static final String AI_REPLY_PROMPT = "请针对如下内容：[{}] 做个回复。回复内容参考：[{}], 回复格式：{}，语气：{}，语言：{}，长度：{}。";

    /**
     * ai润色提提示词
     */
    public static final String AI_TOUCHE_PROMPT = "请针对如下内容：[{}] 进行润色。 回复格式：{}，语气：{}，语言：{}，长度：{}。";

    /**
     * ai绘画提示词
     */
    public static final String AI_DRAW_PROMPT = "风格：{}，视角：{}，人物镜头：{}，灯光：{}，图片尺寸：{};";

}
