update:1.修复大纲展开功能bug,按顺序展开 2.优化大纲细化UI展示,大纲设置为卷 3.实现角色关系修改功能 4.优化提示词避免出现过多特殊符号 5.优化向导页面的AI生产进度页面和灵感模式保持统一,支持重试 6.优化项目生成过长中断添加自动恢复逻辑
This commit is contained in:
@@ -112,61 +112,109 @@ class PromptService:
|
||||
"""提示词模板管理"""
|
||||
|
||||
# 世界构建提示词
|
||||
WORLD_BUILDING = """你是一位资深的世界观设计师(World-Building Architect)。你的任务是基于输入信息,构建一个高度原创、深度自洽、且充满戏剧冲突的小说世界观。
|
||||
WORLD_BUILDING = """你是一位资深的世界观设计师。基于以下输入信息,构建一个高度原创、深度自洽、充满戏剧冲突的小说世界观。
|
||||
|
||||
# 1. 输入信息
|
||||
# 输入信息
|
||||
书名:{title}
|
||||
主题:{theme}
|
||||
类型:{genre}
|
||||
|
||||
# 2. 核心指令(CRITICAL)
|
||||
* **去标签化**:严禁使用通用的“XX纪元”、“XX时代”、“XX年”作为时间背景的开头或核心描述。请直接描述世界所处的状态、技术水平或生存现状。
|
||||
* **动态演绎**:所有设定必须直接由输入的主题衍生而来。例如,如果是赛博朋克,不要只写“高科技”,要写“义体技术如何导致了贫民窟的特定生活方式”。
|
||||
* **拒绝陈词滥调**:避免使用宏大的空洞词汇,专注于具体的、可感知的细节。
|
||||
# 核心要求
|
||||
* **类型适配性**:世界观必须符合小说类型的特征,不要生成不匹配的设定
|
||||
* **主题贴合性**:时代背景要能有效支撑和体现小说主题
|
||||
* **原创性**:在类型框架内发挥创意,创造独特但合理的世界设定
|
||||
* **具象化**:避免空洞概念,用具体可感的细节描述世界
|
||||
* **逻辑自洽**:确保所有设定相互支撑,形成完整体系
|
||||
* **戏剧张力**:设定要能为故事冲突提供支撑
|
||||
|
||||
# 3. 世界构建框架
|
||||
请生成包含以下四个核心板块的JSON。请确保所有板块互为因果,逻辑严密。
|
||||
# 类型指导原则
|
||||
根据小说类型选择适当的设定风格:
|
||||
|
||||
**重要说明:每个字段的value必须是一个完整的文本字符串,将以下所有要点整合成连贯的段落描述,不要使用嵌套的JSON对象或数组。**
|
||||
**现代都市/言情/青春**:
|
||||
- 时间设定:当代现实社会(2020年代)或近未来(2030-2050年)
|
||||
- 避免使用:大崩解、纪元、末日、重生等宏大概念
|
||||
- 重点描述:具体的城市环境、社会现状、文化氛围
|
||||
- 例如:一线城市的竞争压力、职场文化、代际冲突、社交媒体影响等
|
||||
|
||||
1. **time_period (时间线与文明阶段)**:
|
||||
请将以下内容整合为一段完整的文字描述(300-500字):
|
||||
* 描述当前世界处于什么**发展阶段**(是毁灭边缘、新生萌芽、还是停滞不前?),**不要给这个阶段起名字**,而是描述其**特征**。
|
||||
* **历史转折点**:具体的事件(战争、发明、灾难),它如何直接导致了现在的局面?
|
||||
* **当下的核心矛盾**:时间流逝带来的具体焦虑是什么?(例如:资源枯竭的倒计时、某种信仰的崩塌)。
|
||||
2. **location (空间与生态环境)**:
|
||||
请将以下内容整合为一段完整的文字描述(300-500字):
|
||||
* **舞台特征**:描述主要故事发生的地理或空间环境(如:悬浮的破碎岛屿、被真菌覆盖的地铁网络)。
|
||||
* **环境与生存**:地理环境如何强迫居民改变了生活方式?(例如:因为引力失衡,建筑都是倒挂的)。
|
||||
* **标志性奇观**:一个能代表这个世界独特性的具体场景或建筑。
|
||||
3. **atmosphere (感官体验与基调)**:
|
||||
请将以下内容整合为一段完整的文字描述(300-500字):
|
||||
* **感官细节**:如果站在这个世界的街头,会**闻**到什么?**听**到什么?(不要只写"压抑",要写"空气中弥漫着铁锈和合成营养膏的酸味")。
|
||||
* **视觉美学**:描述具体的色彩倾向和光影质感。
|
||||
* **居民心态**:普通人普遍的心理状态(是麻木、狂热、还是某种特定的恐惧)。
|
||||
4. **rules (运作逻辑与禁忌)**:
|
||||
请将以下内容整合为一段完整的文字描述(300-500字):
|
||||
* **核心法则**:这个世界运行的底层逻辑(物理、魔法或科技)。**重点描述代价**(使用力量需要支付什么?)。
|
||||
* **权力架构**:谁掌握资源?他们通过什么手段维持控制(暴力、技术垄断、宗教洗脑)?
|
||||
* **红线禁忌**:这个社会绝对不能触碰的具体底线,以及违反后的直接后果。
|
||||
**历史/古代**:
|
||||
- 时间设定:明确的历史朝代或虚构但有历史感的古代社会
|
||||
- 避免使用:科技元素、未来概念
|
||||
- 重点描述:时代特征、礼教制度、阶级分化
|
||||
|
||||
# 4. 严格格式要求
|
||||
1. **绝对纯净JSON**:你的[唯一]输出必须是一个完整的JSON对象。输出必须以左花括号开始,并以右花括号结束。
|
||||
2. **禁止额外字符**:不要在JSON对象之前或之后包含任何说明文字、Markdown标记(如三个反引号加json)、注释或任何其他非JSON字符。
|
||||
3. **JSON内部文本规则**:在JSON的value字符串内部:
|
||||
* 严禁使用任何中文引号(""'')或英文引号来表示强调或引用。
|
||||
* 所有【专有名词】(如地点、人物、组织)应使用【】包裹。
|
||||
* 所有《作品》或《特殊概念》的标题应使用《》包裹。
|
||||
4. **JSON结构**:严格遵守`"key": "value"`的英文双引号结构,并使用下面指定的key。
|
||||
5. **内容密度**:每个字段的描述都必须【深入且详实】,提供至少5-7个具体的设定点或细节,整合为连贯的段落文本。
|
||||
6. **禁止嵌套结构**:value必须是纯文本字符串,绝对不能是JSON对象或数组,所有信息都要整合在一个字符串中。
|
||||
**玄幻/仙侠/修真**:
|
||||
- 时间设定:修炼文明的特定时期,可以有门派兴衰、修炼体系变革
|
||||
- 可以使用宏大设定,但要与修炼体系紧密结合
|
||||
- 重点描述:修炼规则、灵气环境、门派势力
|
||||
|
||||
{{
|
||||
"time_period": "(此处填写一段完整的文字描述,包含发展阶段特征、历史转折点、核心矛盾等内容,300-500字)",
|
||||
"location": "(此处填写一段完整的文字描述,包含舞台特征、环境与生存、标志性奇观等内容,300-500字)",
|
||||
"atmosphere": "(此处填写一段完整的文字描述,包含感官细节、视觉美学、居民心态等内容,300-500字)",
|
||||
"rules": "(此处填写一段完整的文字描述,包含核心法则、权力架构、红线禁忌等内容,300-500字)"
|
||||
}}"""
|
||||
**科幻**:
|
||||
- 时间设定:未来某个明确时期(如2150年、星际时代初期等)
|
||||
- 可以有文明转折,但要具体说明科技水平和社会形态
|
||||
- 避免空泛的纪元名称,多用具体的科技特征描述
|
||||
|
||||
**奇幻/魔法**:
|
||||
- 时间设定:魔法文明的特定阶段
|
||||
- 重点描述:魔法体系、种族关系、大陆格局
|
||||
|
||||
**悬疑/推理/惊悚**:
|
||||
- 时间设定:当代或历史某个时期
|
||||
- 重点描述:案件背景、社会环境、人际关系网
|
||||
|
||||
**军事/战争**:
|
||||
- 时间设定:战争时期的具体年代
|
||||
- 重点描述:战争形势、阵营对立、军事科技水平
|
||||
|
||||
# 设定尺度控制
|
||||
**切记:不要为所有类型都生成宏大的世界观!**
|
||||
|
||||
- 如果是现代都市题材,就写现实社会的某个城市、某个行业、某个阶层
|
||||
- 如果是校园青春,就写学校环境、学生生活、成长困境
|
||||
- 如果是职场言情,就写公司文化、行业特点、职业压力
|
||||
- 只有史诗级题材(玄幻、科幻、奇幻等)才需要宏大的世界观架构
|
||||
|
||||
# 输出要求
|
||||
生成包含以下四个字段的JSON对象,每个字段用300-500字的连贯段落描述:
|
||||
|
||||
1. **time_period**(时间背景与社会状态)
|
||||
- **重要**:根据类型和主题,设定合适规模的时间背景
|
||||
- 现代题材:描述当前社会的具体特征(如:2024年的北京,互联网行业高速发展...)
|
||||
- 历史题材:明确朝代和历史阶段(如:明朝嘉靖年间,海禁政策下的沿海地区...)
|
||||
- 幻想题材:描述文明发展阶段,但要具体而非空泛(如:大陆诸国林立的战国时代,而非"XX纪元")
|
||||
- 阐明时代核心矛盾和社会焦虑(要贴合主题)
|
||||
|
||||
2. **location**(空间环境与地理特征)
|
||||
- 描绘故事主要发生的空间环境(具体的城市、地区、场所)
|
||||
- 现代题材:具体城市名或城市类型(一线城市、沿海城市、内陆小城等)
|
||||
- 说明环境如何影响居民的生存方式
|
||||
- 刻画能代表世界独特性的标志性场景
|
||||
|
||||
3. **atmosphere**(感官体验与情感基调)
|
||||
- 描述身临其境的感官细节(视觉、听觉、嗅觉等)
|
||||
- 阐述世界的美学风格和色彩基调
|
||||
- 刻画居民普遍的心理状态和情绪氛围
|
||||
- **要与主题情感呼应**(如竞争焦虑、成长迷茫、爱情憧憬等)
|
||||
|
||||
4. **rules**(世界规则与社会结构)
|
||||
- 阐明世界运行的核心法则和底层逻辑
|
||||
- 现代题材:社会规则、行业潜规则、人际交往法则
|
||||
- 幻想题材:力量体系、社会等级、资源分配
|
||||
- 描述权力结构和利益格局
|
||||
- 揭示社会禁忌及违反后的后果
|
||||
|
||||
# 格式规范
|
||||
1. **纯JSON输出**:只输出JSON对象,以左花括号开始、右花括号结束
|
||||
2. **无额外标记**:不要包含markdown标记、代码块符号或任何说明文字
|
||||
3. **纯文本值**:每个字段值必须是完整的段落文本,不使用嵌套结构
|
||||
4. **无特殊符号**:文本中不使用引号、方括号等特殊符号包裹内容
|
||||
5. **丰富细节**:每个字段提供充实的原创内容,避免模板化表达
|
||||
|
||||
# 反面示例(避免这样的设定)
|
||||
❌ 不好的设定:故事设定在大崩解后的XX纪元、新世界秩序、文明重启...
|
||||
✅ 好的设定:故事设定在2024年的深圳,互联网创业浪潮下的年轻人...
|
||||
|
||||
❌ 不好的设定:升华纪元、共鸣指数、灵光纯度...(现代都市题材不要用这些)
|
||||
✅ 好的设定:通过高考分数、学历背景、家庭条件来衡量个人价值...(符合现实)
|
||||
|
||||
请根据输入的类型和主题,生成**规模适当、风格匹配**的世界观设定。"""
|
||||
|
||||
# 批量角色生成提示词
|
||||
CHARACTERS_BATCH_GENERATION = """你是一位专业的角色设定师。请根据以下世界观和要求,生成{count}个立体丰满的角色和组织:
|
||||
@@ -199,8 +247,8 @@ class PromptService:
|
||||
|
||||
**重要格式要求:**
|
||||
1. 只返回纯JSON数组格式,不要包含任何markdown标记、代码块标记或其他说明文字
|
||||
2. 不要在JSON字符串值中使用中文引号(""''),请使用英文引号或【】《》标记
|
||||
3. 专有名词和强调内容使用【】或《》,不要用引号
|
||||
2. JSON字符串值的内容描述中严禁使用任何特殊符号(包括中文引号、英文引号、方括号、书名号等)
|
||||
3. 所有专有名词、地点、人物、组织名称等直接书写,不使用任何符号包裹
|
||||
|
||||
请严格按照以下JSON数组格式返回(每个角色为数组中的一个对象):
|
||||
[
|
||||
@@ -279,7 +327,7 @@ class PromptService:
|
||||
1. 只返回纯JSON数组,不要有```json```这样的标记
|
||||
2. 数组中必须精确包含{count}个对象
|
||||
3. 不要引用任何本批次中不存在的角色或组织名称
|
||||
4. 文本描述中不要使用中文引号(""),改用【】或《》"""
|
||||
4. 所有内容描述中严禁使用任何特殊符号,包括但不限于中文引号、英文引号、方括号、书名号等"""
|
||||
|
||||
# 向导大纲生成提示词
|
||||
COMPLETE_OUTLINE_GENERATION = """你是一位经验丰富的小说作家和编剧。请根据以下信息生成完整的{chapter_count}章小说大纲:
|
||||
@@ -315,8 +363,8 @@ class PromptService:
|
||||
|
||||
**重要格式要求:**
|
||||
1. 只返回纯JSON数组格式,不要包含任何markdown标记、代码块标记或其他说明文字
|
||||
2. 不要在JSON字符串值中使用中文引号(""''),请使用【】或《》标记
|
||||
3. 专有名词、书名、事件名使用【】或《》
|
||||
2. JSON字符串值的内容描述中严禁使用任何特殊符号(包括中文引号、英文引号、方括号、书名号等)
|
||||
3. 所有专有名词、事件名等直接书写,不使用任何符号包裹
|
||||
|
||||
请严格按照以下JSON数组格式返回(共{chapter_count}个章节对象):
|
||||
[
|
||||
@@ -345,7 +393,7 @@ class PromptService:
|
||||
再次强调:
|
||||
1. 只返回纯JSON数组,不要有```json```这样的标记
|
||||
2. 数组中要包含{chapter_count}个章节对象
|
||||
3. 文本中不要使用中文引号(""),改用【】或《》"""
|
||||
3. 所有内容描述中严禁使用任何特殊符号"""
|
||||
|
||||
# 大纲续写提示词(记忆增强版)
|
||||
OUTLINE_CONTINUE_GENERATION = """你是一位经验丰富的小说作家和编剧。请基于以下信息续写小说大纲:
|
||||
@@ -396,8 +444,8 @@ class PromptService:
|
||||
|
||||
**重要格式要求:**
|
||||
1. 只返回纯JSON数组格式,不要包含任何markdown标记、代码块标记或其他说明文字
|
||||
2. 不要在JSON字符串值中使用中文引号(""''),请使用【】或《》
|
||||
3. 文本描述中的专有名词使用【】标记
|
||||
2. JSON字符串值的内容描述中严禁使用任何特殊符号(包括中文引号、英文引号、方括号、书名号等)
|
||||
3. 所有专有名词直接书写,不使用任何符号包裹
|
||||
|
||||
请严格按照以下JSON数组格式返回(共{chapter_count}个章节对象):
|
||||
[
|
||||
@@ -428,7 +476,7 @@ class PromptService:
|
||||
2. 数组中要包含{chapter_count}个章节对象
|
||||
3. 每个summary必须是100-200字的详细描述
|
||||
4. 确保字段结构与已有章节完全一致
|
||||
5. 文本中不要使用中文引号(""),改用【】或《》"""
|
||||
5. 所有内容描述中严禁使用任何特殊符号"""
|
||||
|
||||
# AI去味提示词(核心特色功能)
|
||||
AI_DENOISING = """你是一位追求自然写作风格的编辑。你的任务是将AI生成的文本改写得更像人类作家的手笔。
|
||||
@@ -593,8 +641,8 @@ class PromptService:
|
||||
|
||||
**重要格式要求:**
|
||||
1. 只返回纯JSON格式,不要包含任何markdown标记、代码块标记或其他说明文字
|
||||
2. 不要在JSON字符串值中使用中文引号(""''),改用【】或《》
|
||||
3. 专有名词和强调内容使用【】标记
|
||||
2. JSON字符串值的内容描述中严禁使用任何特殊符号(包括中文引号、英文引号、方括号、书名号等)
|
||||
3. 所有专有名词直接书写,不使用任何符号包裹
|
||||
|
||||
请严格按照以下JSON格式返回:
|
||||
{{
|
||||
@@ -609,7 +657,7 @@ class PromptService:
|
||||
|
||||
再次强调:
|
||||
1. 只返回纯JSON对象,不要有```json```这样的标记
|
||||
2. 文本中不要使用中文引号(""),改用【】或《》
|
||||
2. 所有内容描述中严禁使用任何特殊符号
|
||||
3. 不要有任何额外的文字说明"""
|
||||
|
||||
# 单个角色生成提示词
|
||||
@@ -655,8 +703,8 @@ class PromptService:
|
||||
|
||||
**重要格式要求:**
|
||||
1. 只返回纯JSON格式,不要包含任何markdown标记、代码块标记或其他说明文字
|
||||
2. 不要在JSON字符串值中使用中文引号(""''),改用【】或《》
|
||||
3. 文本描述中的专有名词使用【】标记
|
||||
2. JSON字符串值的内容描述中严禁使用任何特殊符号(包括中文引号、英文引号、方括号、书名号等)
|
||||
3. 所有专有名词直接书写,不使用任何符号包裹
|
||||
|
||||
请严格按照以下JSON格式返回:
|
||||
{{
|
||||
@@ -714,7 +762,7 @@ class PromptService:
|
||||
|
||||
再次强调:
|
||||
1. 只返回纯JSON对象,不要有```json```这样的标记
|
||||
2. 文本中不要使用中文引号(""),改用【】或《》
|
||||
2. 所有内容描述中严禁使用任何特殊符号
|
||||
3. 不要有任何额外的文字说明"""
|
||||
|
||||
# 单个组织生成提示词
|
||||
@@ -765,8 +813,8 @@ class PromptService:
|
||||
|
||||
**重要格式要求:**
|
||||
1. 只返回纯JSON格式,不要包含任何markdown标记、代码块标记或其他说明文字
|
||||
2. 不要在JSON字符串值中使用中文引号(""''),改用【】或《》
|
||||
3. 文本描述中的专有名词使用【】标记
|
||||
2. JSON字符串值的内容描述中严禁使用任何特殊符号(包括中文引号、英文引号、方括号、书名号等)
|
||||
3. 所有专有名词直接书写,不使用任何符号包裹
|
||||
|
||||
请严格按照以下JSON格式返回:
|
||||
{{
|
||||
@@ -799,7 +847,7 @@ class PromptService:
|
||||
|
||||
再次强调:
|
||||
1. 只返回纯JSON对象,不要有```json```这样的标记
|
||||
2. 文本中不要使用中文引号(""),改用【】或《》
|
||||
2. 所有内容描述中严禁使用任何特殊符号
|
||||
3. 不要有任何额外的文字说明"""
|
||||
|
||||
# 大纲展开为多章节的提示词
|
||||
@@ -853,8 +901,8 @@ class PromptService:
|
||||
|
||||
**重要格式要求:**
|
||||
1. 只返回纯JSON数组格式,不要包含任何markdown标记、代码块标记或其他说明文字
|
||||
2. 不要在JSON字符串值中使用中文引号(""''),请使用【】或《》
|
||||
3. 文本描述中的专有名词使用【】标记
|
||||
2. JSON字符串值的内容描述中严禁使用任何特殊符号(包括中文引号、英文引号、方括号、书名号等)
|
||||
3. 所有专有名词直接书写,不使用任何符号包裹
|
||||
|
||||
请严格按照以下JSON数组格式输出:
|
||||
[
|
||||
@@ -875,7 +923,7 @@ class PromptService:
|
||||
1. 只返回纯JSON数组,不要有```json```这样的标记
|
||||
2. 数组中要包含{target_chapters}个章节对象
|
||||
3. 每个plot_summary必须是200-300字的详细描述
|
||||
4. 文本中不要使用中文引号(""),改用【】或《》"""
|
||||
4. 所有内容描述中严禁使用任何特殊符号"""
|
||||
|
||||
@staticmethod
|
||||
def format_prompt(template: str, **kwargs) -> str:
|
||||
|
||||
Reference in New Issue
Block a user