update:1.优化 AI 流式生成和进度显示系统 2.新增写作风格系统提示词支持 3.灵感模式功能增强,支持灵感重写 4.设置页面功能扩展,新增Gemini适配器 5.提示词模板系统优化,调整灵感模式提示词

This commit is contained in:
xiamuceer
2025-12-28 19:35:23 +08:00
parent f32e51b594
commit 89848e2258
40 changed files with 2752 additions and 1824 deletions
@@ -0,0 +1,177 @@
"""初始化SQLite预置数据
Revision ID: a1b2c3d4e5f6
Revises: fbeb1038c728
Create Date: 2025-12-27 08:56:00.000000
"""
from typing import Sequence, Union
from alembic import op
import sqlalchemy as sa
from sqlalchemy import table, column, String, Integer, Text
# revision identifiers, used by Alembic.
revision: str = 'a1b2c3d4e5f6'
down_revision: Union[str, None] = 'fbeb1038c728'
branch_labels: Union[str, Sequence[str], None] = None
depends_on: Union[str, Sequence[str], None] = None
def upgrade() -> None:
"""插入预置数据"""
# ==================== 1. 插入关系类型数据 ====================
relationship_types_table = table(
'relationship_types',
column('name', String),
column('category', String),
column('reverse_name', String),
column('intimacy_range', String),
column('icon', String),
column('description', Text),
)
relationship_types_data = [
# 家庭关系
{"name": "父亲", "category": "family", "reverse_name": "子女", "intimacy_range": "high", "icon": "👨", "description": "父子/父女关系"},
{"name": "母亲", "category": "family", "reverse_name": "子女", "intimacy_range": "high", "icon": "👩", "description": "母子/母女关系"},
{"name": "兄弟", "category": "family", "reverse_name": "兄弟", "intimacy_range": "high", "icon": "👬", "description": "兄弟关系"},
{"name": "姐妹", "category": "family", "reverse_name": "姐妹", "intimacy_range": "high", "icon": "👭", "description": "姐妹关系"},
{"name": "子女", "category": "family", "reverse_name": "父母", "intimacy_range": "high", "icon": "👶", "description": "子女关系"},
{"name": "配偶", "category": "family", "reverse_name": "配偶", "intimacy_range": "high", "icon": "💑", "description": "夫妻关系"},
{"name": "恋人", "category": "family", "reverse_name": "恋人", "intimacy_range": "high", "icon": "💕", "description": "恋爱关系"},
# 社交关系
{"name": "师父", "category": "social", "reverse_name": "徒弟", "intimacy_range": "high", "icon": "🎓", "description": "师徒关系(师父视角)"},
{"name": "徒弟", "category": "social", "reverse_name": "师父", "intimacy_range": "high", "icon": "📚", "description": "师徒关系(徒弟视角)"},
{"name": "朋友", "category": "social", "reverse_name": "朋友", "intimacy_range": "medium", "icon": "🤝", "description": "朋友关系"},
{"name": "同学", "category": "social", "reverse_name": "同学", "intimacy_range": "medium", "icon": "🎒", "description": "同学关系"},
{"name": "邻居", "category": "social", "reverse_name": "邻居", "intimacy_range": "low", "icon": "🏘️", "description": "邻居关系"},
{"name": "知己", "category": "social", "reverse_name": "知己", "intimacy_range": "high", "icon": "💙", "description": "知心好友"},
# 职业关系
{"name": "上司", "category": "professional", "reverse_name": "下属", "intimacy_range": "low", "icon": "👔", "description": "上下级关系(上司视角)"},
{"name": "下属", "category": "professional", "reverse_name": "上司", "intimacy_range": "low", "icon": "💼", "description": "上下级关系(下属视角)"},
{"name": "同事", "category": "professional", "reverse_name": "同事", "intimacy_range": "medium", "icon": "🤵", "description": "同事关系"},
{"name": "合作伙伴", "category": "professional", "reverse_name": "合作伙伴", "intimacy_range": "medium", "icon": "🤜🤛", "description": "合作关系"},
# 敌对关系
{"name": "敌人", "category": "hostile", "reverse_name": "敌人", "intimacy_range": "low", "icon": "⚔️", "description": "敌对关系"},
{"name": "仇人", "category": "hostile", "reverse_name": "仇人", "intimacy_range": "low", "icon": "💢", "description": "仇恨关系"},
{"name": "竞争对手", "category": "hostile", "reverse_name": "竞争对手", "intimacy_range": "low", "icon": "🎯", "description": "竞争关系"},
{"name": "宿敌", "category": "hostile", "reverse_name": "宿敌", "intimacy_range": "low", "icon": "", "description": "宿命之敌"},
]
op.bulk_insert(relationship_types_table, relationship_types_data)
print(f"✅ SQLite: 已插入 {len(relationship_types_data)} 条关系类型数据")
# ==================== 2. 插入全局写作风格预设 ====================
writing_styles_table = table(
'writing_styles',
column('user_id', String),
column('name', String),
column('style_type', String),
column('preset_id', String),
column('description', Text),
column('prompt_content', Text),
column('order_index', Integer),
)
writing_styles_data = [
{
"user_id": None, # NULL 表示全局预设
"name": "自然流畅",
"style_type": "preset",
"preset_id": "natural",
"description": "自然流畅的叙事风格,适合现代都市、现实题材",
"prompt_content": """写作风格要求:
1. 语言简洁明快,贴近现代口语
2. 多用短句,节奏流畅
3. 注重情感细节的自然流露
4. 避免过度修饰和复杂句式""",
"order_index": 1
},
{
"user_id": None,
"name": "古典优雅",
"style_type": "preset",
"preset_id": "classical",
"description": "古典文雅的写作风格,适合古装、仙侠题材",
"prompt_content": """写作风格要求:
1. 使用文言、半文言或典雅的白话
2. 适当运用古典诗词意象
3. 注重意境营造和韵味
4. 对话和描写保持古典美感""",
"order_index": 2
},
{
"user_id": None,
"name": "现代简约",
"style_type": "preset",
"preset_id": "modern",
"description": "现代简约风格,适合轻小说、网文快节奏叙事",
"prompt_content": """写作风格要求:
1. 语言直白简练,信息密度高
2. 多用对话推进情节
3. 避免冗长描写,突出关键动作
4. 节奏明快,适合快速阅读""",
"order_index": 3
},
{
"user_id": None,
"name": "文艺细腻",
"style_type": "preset",
"preset_id": "literary",
"description": "文艺细腻风格,注重心理描写和氛围营造",
"prompt_content": """写作风格要求:
1. 注重心理活动和情感细节
2. 善用环境描写烘托氛围
3. 语言优美,富有文学性
4. 适当使用比喻、象征等修辞手法""",
"order_index": 4
},
{
"user_id": None,
"name": "紧张悬疑",
"style_type": "preset",
"preset_id": "suspense",
"description": "紧张悬疑风格,适合推理、惊悚题材",
"prompt_content": """写作风格要求:
1. 营造紧张压迫的氛围
2. 多用短句加快节奏
3. 善于设置悬念和伏笔
4. 注重细节描写,为推理埋下线索""",
"order_index": 5
},
{
"user_id": None,
"name": "幽默诙谐",
"style_type": "preset",
"preset_id": "humorous",
"description": "幽默诙谐风格,适合轻松搞笑题材",
"prompt_content": """写作风格要求:
1. 语言活泼风趣,善用俏皮话
2. 注重对话的喜剧效果
3. 适当夸张和反转制造笑点
4. 保持轻松愉快的基调""",
"order_index": 6
},
]
op.bulk_insert(writing_styles_table, writing_styles_data)
print(f"✅ SQLite: 已插入 {len(writing_styles_data)} 条全局写作风格预设")
def downgrade() -> None:
"""删除预置数据"""
# 删除写作风格预设(只删除全局预设)
op.execute("DELETE FROM writing_styles WHERE user_id IS NULL")
print("✅ SQLite: 已删除全局写作风格预设")
# 删除关系类型
op.execute("DELETE FROM relationship_types")
print("✅ SQLite: 已删除关系类型数据")
@@ -0,0 +1,34 @@
"""添加system_prompt字段到settings表
Revision ID: 7899f8d4d839
Revises: a1b2c3d4e5f6
Create Date: 2025-12-27 17:00:35.440551
"""
from typing import Sequence, Union
from alembic import op
import sqlalchemy as sa
# revision identifiers, used by Alembic.
revision: str = '7899f8d4d839'
down_revision: Union[str, None] = 'a1b2c3d4e5f6'
branch_labels: Union[str, Sequence[str], None] = None
depends_on: Union[str, Sequence[str], None] = None
def upgrade() -> None:
# ### commands auto generated by Alembic - please adjust! ###
with op.batch_alter_table('settings', schema=None) as batch_op:
batch_op.add_column(sa.Column('system_prompt', sa.Text(), nullable=True, comment='系统级别提示词,每次AI调用都会使用'))
# ### end Alembic commands ###
def downgrade() -> None:
# ### commands auto generated by Alembic - please adjust! ###
with op.batch_alter_table('settings', schema=None) as batch_op:
batch_op.drop_column('system_prompt')
# ### end Alembic commands ###