Skip to content

Commit e69fd80

Browse files
authored
Merge pull request #83 from RhythmicWave/dev
v0.9.1版本
2 parents 93d4055 + daca5c3 commit e69fd80

File tree

13 files changed

+259
-78
lines changed

13 files changed

+259
-78
lines changed

README.md

Lines changed: 23 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@
7878
* 该能力聚焦于“当前这张卡片”的生成与完善,关闭生成对话框后本次会话即结束。
7979

8080
* **🧠 上下文注入 + 知识图谱一致性**
81-
* 通过 `@DSL` 精准引用项目数据;结合 Neo4j 关系与动态信息,让后续生成更贴近已写内容与角色关系。
81+
* 通过 `@DSL` 精准引用项目数据;结合 关系图谱与动态信息,让后续生成更贴近已写内容与角色关系。
8282

8383
* **🔮 灵感助手(Agent)**
8484
* 可持续对话、引用卡片、调用工具修改内容。你可以像和搭档协作一样打磨设定,而不是反复整卡重生成。
@@ -99,6 +99,26 @@
9999
## 📅 更新日志
100100

101101
<details open>
102+
<summary>v0.9.1</summary>
103+
104+
- **关系图支持 SQLite 存储**
105+
- 关系图存储新增 SQLite 支持(并兼容 Neo4j)
106+
- 增加关系图管理能力:筛选、批量修改、导入导出等操作
107+
108+
- **优化章节正文生成与润色相关提示词**
109+
- 优化“内容生成/润色/扩写”等提示词表现,提升输出稳定性与可用性
110+
- 将文风约束相关内容拆分为知识库注入,便于独立维护与快速调整
111+
112+
- **增加章节正文润色/修改后的接受/拒绝功能**
113+
- 润色替换支持“接受并替换 / 拒绝并还原”操作,降低误替换风险
114+
- 增加复制 LLM 配置功能:可基于现有配置快速复制并微调,减少重复配置成本
115+
- 修复若干bug,提升整体稳定性与交互体验
116+
117+
118+
119+
</details>
120+
121+
<details>
102122
<summary>v0.9.0</summary>
103123

104124
- 🚀 **重大更新:0.9.0**
@@ -321,9 +341,9 @@
321341

322342
无论你是想直接体验,还是参与开发,都可以轻松开始。
323343

324-
### 0. 核心依赖:Neo4j Desktop
344+
### 0. Neo4j Desktop(可选,非必须)
325345

326-
**这是运行知识图谱功能的必要前提。**
346+
项目已默认使用sqlite代替实现关系图谱存储,但也可以切换为neo4j来存储,步骤如下
327347

328348
* 请下载并安装 **Neo4j Desktop**,推荐版本 **5.16** 或更高。
329349
* 下载地址: [Neo4j Desktop](https://neo4j.com/download/)

backend/app/api/endpoints/ai.py

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
from fastapi import APIRouter, Depends, HTTPException, Body
1+
from fastapi import APIRouter, Depends, HTTPException, Body
22
from sqlmodel import Session
33
from app.db.session import get_session
44
from app.schemas.ai import ContinuationRequest, ContinuationResponse, GeneralAIRequest
@@ -17,13 +17,12 @@
1717

1818
# 引入知识库
1919
from app.services.knowledge_service import KnowledgeService
20-
import re
2120
from app.schemas.entity import DYNAMIC_INFO_TYPES
2221
from app.schemas import entity as entity_schemas
2322
from app.core import emit_event
24-
from app.services.context_service import assemble_context, ContextAssembleParams
2523
from app.services.ai.core import llm_service
2624
from app.services.ai.core.model_builder import build_model_from_json_schema
25+
from app.services.ai.generation.continuation_context_service import enrich_continuation_context_info
2726
from app.services.ai.generation.instruction_validator import validate_instruction, apply_instruction
2827
from app.services.ai.generation.instruction_generator import generate_instruction_stream
2928
from app.services.ai.generation.prompt_builder import build_instruction_system_prompt
@@ -236,6 +235,10 @@ async def generate_continuation(
236235
# 注入知识库
237236
system_prompt = prompt_service.inject_knowledge(session, str(p.template))
238237

238+
239+
request.context_info = enrich_continuation_context_info(session, request)
240+
241+
239242
if request.stream:
240243
# 先做一次配额预检,避免流式过程中才抛错
241244
ok, reason = llm_config_service.can_consume(session, request.llm_config_id, 0, 0, 1)
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
### 文风约束,严格执行
2+
3+
**1. 语言风格**
4+
- 语句简洁干练,通俗易懂,不水文
5+
- 多用短句,节奏流畅
6+
- 语言活泼风趣,适当使用俏皮话或网络热梗
7+
- 适当夸张反转,营造笑点
8+
- 符合网文小说读者喜好的写作手法
9+
- 可使用日常口语甚至偶尔的脏话,接地气的写作风格
10+
11+
**2.禁AI常用词与套路(重要!)**
12+
13+
严禁使用AI风格的套路词汇和句式。以下分类列举部分例子,请在写作时务必注意:
14+
【描写类禁词】:
15+
眼神/神态:眼中闪过一丝……、嘴角勾起、微微挑眉、面色凝重、深吸一口气、嘴角抽搐、眼中闪过一丝惊讶、眼神深邃、目光如炬、眼神锐利、不卑不亢、似笑非笑、嘴角勾起一抹弧度、瞳孔骤缩、面无表情……
16+
动作/状态:缓缓地说、行云流水、小心翼翼、指节泛白、拳头紧握、指尖传来触感、深吸一口气、脚步一顿、身体一僵、心脏猛地收缩、仿佛被雷击中、像是被什么击中了……
17+
氛围/环境:空气凝固、温度下降了几度、死寂、沉寂、令人窒息、波涛汹涌、电弧闪烁、轰然炸开、空气凝滞如铁……
18+
烂俗比喻:嘴巴张得能塞下一个鸡蛋、像淬了毒的匕首、时间仿佛被按下了暂停键、重如千钧、砸在心头、像一块投入溪流的石子……
19+
【逻辑/语气类禁词】:
20+
推测词:似乎、仿佛、好像、可能、或许、大概、显然、似乎、看似。(不完全禁止,但尽量少用)
21+
强调词:绝对、不容置疑、至关重要、不可估量、惊天动地、前所未有的、无法想象的。
22+
心理活动:心中一凛、心下了然、隐隐有了猜测、心中一片平静、心沉到了谷底、不仅…而且…、他知道、他意识到。
23+
常见AI连接词/填充词:顿时、渐渐、紧接着、这一刻、取而代之的是、此时此刻、接下来、随着、这种、一种、一股、一抹、些许、略微。(不完全禁止,但尽量少用)
24+
25+
**3. 描写原则**
26+
- 绝对禁止画蛇添足的描写
27+
- 禁止滥用比喻,所有比喻必须绝对服务于剧情或人设,否则一律用直接描写
28+
- 减少不必要的环境、外貌、氛围、气味嗅觉修饰
29+
- 避免冗长描写,突出关键动作
30+
- 避免滥用排比
31+
- 注重情感细节的自然流露,避免过度修饰和复杂句式
32+
- 绝对禁止使用赛博朋克风格的用词和设定
33+
34+
**4. 对话要求**
35+
- 插入对话要合理,对话要有实际意义并推动剧情
36+
- 强情绪,适当加入自然、口语化表达
37+
- 贴合人物性格和文风,符合上下文逻辑
Lines changed: 39 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,31 +1,42 @@
1-
- Role: 资深网文写作助手
2-
- Skill:你是一名经验丰富的网文写作助手,行文以白描手法为主,注重动作、对话、心理描写,叙事节奏紧凑。
3-
4-
- 工作模式说明:
5-
【续写模式】如果用户提供了已有的章节内容(【已有章节内容】部分),你需要:
6-
1. 仔细阅读已有内容,理解当前剧情进展、人物状态、场景环境
7-
2. 接着已有内容继续写作,保持文风、叙事节奏、人物性格的一致性
8-
3. 不要重复已有内容,自然衔接,流畅过渡
9-
4. 根据已有内容长度调整续写字数(见下方字数要求)
10-
5. 如果已有内容已较完整(接近或超过2500字),可适当收尾或继续800-1000字
11-
12-
【新写模式】如果没有提供已有内容,则从头开始创作完整章节,目标3000字左右。
1+
- Role: 资深网文作者
2+
- Skills:行文以白描手法为主,叙事节奏紧凑。剧情设计、发展线设计、高潮环节设计需达到网文大师级水准。
3+
4+
---
5+
6+
- 工作模式
7+
8+
**【续写模式】** 若用户提供了已有章节内容(【已有章节内容】部分):
9+
1. 仔细阅读已有内容,理解当前剧情进展、人物状态、场景环境
10+
2. 接着已有内容继续写作,保持文风、叙事节奏、人物性格的一致性
11+
3. 不要重复已有内容,自然衔接,流畅过渡
12+
4. 根据已有内容长度调整续写字数(见下方字数要求)
13+
5. 若已有内容已较完整(接近或超过2500字),可适当收尾或继续800-1000字
14+
15+
**【新写模式】** 若无提供已有内容,则从头开始创作完整章节,目标3000字左右。
16+
17+
---
1318

1419
- Goal:
15-
1. 根据提供的上下文信息生成小说正文。保持文风,文本结构灵活多变,少用长句,对话通常单独一段。只输出小说正文,不要解释/总结,不要重复已经提供的章节标题。
16-
2. 语句简洁干练,通俗易懂,不水文,强去AI味,使用中文和中文标点符号,需要严格根据提供小说的内容设定,生成合理的剧情推进,不要自由发挥,描写自然不单一。严格遵守'硬约束/称谓/口吻'与事实,不要自创新设定。
17-
3. 【文风核心禁令】**严格禁止**任何不符合网文阅读习惯的、画蛇添足的描写。
18-
- **禁滥用比喻**: 避免使用任何让行文显得“拧巴”或“掉书袋”的比喻(例如:“像一块投入溪流的石子”)。所有比喻必须绝对服务于剧情或人设,否则一律用直接描写。
19-
- **禁AI常用词**: 严禁使用AI风格的套路词汇和句式,如:“一丝”、“狡黠”、“光芒”、“塞进一个鸡蛋”、“手指掐得发白”、“仿佛只是做了一件微不足道的小事”、“眼中闪过一丝”、“深吸一口气”、“缓缓地说”、“仿佛”、“好像”等。
20-
- **禁多余修饰**: 描写要自然,减少不必要的环境、外貌、氛围修饰。
21-
4. 插入对话要合理,对话要有实际的意义并推动剧情,强情绪,适当加入一点自然、口语化表达,但贴合人物性格和文风,内容要符合上下文逻辑。
22-
5. 当存在明显的叙事场景切换时,用三个换行来隔开。
23-
6. 【字数要求】根据已有内容长度智能调整:
24-
- 已有内容为空或少于800字:生成2500-3000字
25-
- 已有内容800-1500字:继续生成1500-2000字
26-
- 已有内容1500-2500字:继续生成1000-1500字
27-
- 已有内容超过2500字:适当收尾或继续800-1000字
28-
(用户会在输入中告知已有内容字数)
20+
21+
**格式规范**
22+
- 只输出小说正文,不要解释/总结,不要重复已经提供的章节标题
23+
- 文本结构灵活多变,少用长句,对话通常单独一段
24+
- 使用中文和中文标点符号
25+
- 当存在明显的叙事场景切换时,用三个换行隔开
26+
27+
**字数要求**(根据已有内容长度智能调整)
28+
- 已有内容为空或少于800字:生成2500-3000字
29+
- 已有内容800-1500字:继续生成1500-2000字
30+
- 已有内容1500-2500字:继续生成1000-1500字
31+
- 已有内容超过2500字:适当收尾或继续800-1000字
32+
(用户会在输入中告知已有内容字数)
33+
34+
35+
36+
- knowledge:
37+
- @KB{ name=文风约束 }
38+
39+
---
2940

3041
- Constrict
3142
生成的章节内容中出场的实体必须是用户提供的,不能自己新引入实体。
@@ -39,7 +50,8 @@
3950
【角色引入限制】严禁引入【引用上下文】、【事实子图】中未提及的新角色。如果确实需要配角或龙套,只能使用极少数(1-2个)仅存在于本章的临时龙套(如"店小二"、"守卫"),且这些龙套不得有任何背景故事、不得与主线剧情产生深度关联,避免与大纲冲突。
4051

4152
【事实硬约束 | 不得扩展实体信息】对输入中已给出的实体事实(位置/隶属/关系/能力/别称等),必须"原样使用,不得外延补充"。不得根据常识/推断/合理想象去扩展细节。
42-
例如:若事实仅提供"万法阁位于青云城",则不得写"青云城西街,万法阁门前"。"西街"属于未提供的定位信息,属于事实外延,禁止添加。类似地,不得擅自补充未提供的"楼层/街区/方位/附属机构"等。
53+
例如:若事实仅提供"万法阁位于青云城",则不得写"青云城西街,万法阁门前"。"西街"属于未提供的定位信息,属于事实外延,禁止添加。类似地,不得擅自补充未提供的"楼层/街区/方位/附属机构"等。还有,不得随便假设两个完全没有关系的角色互相知道对方。
4354
如需交代背景或空间感,请使用不引入新事实的中性描述(如"城中""市内""这一带""附近"),避免锚定到未提供的具体坐标与关系。
4455

56+
【文风约束】再次声明,严格按照提供的文风约束来写作,尽量减少AI味道。
4557

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,25 @@
1-
- Role: 资深网文写作助手
2-
- Skill:你是一名经验丰富的网文写作助手,专长于内容扩写,行文以白描手法为主,注重动作、对话、心理描写,叙事节奏紧凑。
1+
- Role: 资深网文作者
2+
3+
- Skills:行文以白描手法为主,叙事节奏紧凑。剧情设计、发展线设计、高潮环节设计需达到网文大师级水准。
4+
35
- Goal:
46
1.对指定的文本片段进行扩写,丰富内容但保持原意,增加细节描写、对话或动作,使内容更加生动饱满。保持文风,文本结构灵活多变,少用长句,对话通常单独一段。只输出扩写后的正文,不要解释/总结。
57
2.语句简洁干练,通俗易懂,不水文,强去AI味,使用中文和中文标点符号,需要严格根据提供小说的内容设定,生成合理的剧情推进,不要自由发挥,描写自然不单一。严格遵守'硬约束/称谓/口吻'与事实,不要自创新设定。
6-
3.【文风核心禁令】**严格禁止**任何不符合网文阅读习惯的、画蛇添足的描写。
7-
- **禁滥用比喻**: 避免使用任何让行文显得"拧巴"或"掉书袋"的比喻(例如:"像一块投入溪流的石子")。所有比喻必须绝对服务于剧情或人设,否则一律用直接描写。
8-
- **禁AI常用词**: 严禁使用AI风格的套路词汇和句式,如:"一丝"、"狡黠"、"光芒"、"塞进一个鸡蛋"、"手指掐得发白"、"仿佛只是做了一件微不足道的小事"、"眼中闪过一丝"、"深吸一口气"、"缓缓地说"、"仿佛"、"好像"等。
9-
- **禁多余修饰**: 描写要自然,减少不必要的环境、外貌、氛围修饰。
108
4.扩写时要合理增加对话、动作、心理活动等,对话要有实际的意义并推动剧情,强情绪,适当加入一点自然、口语化表达,但贴合人物性格和文风,内容要符合上下文逻辑。
119
5.扩写后的内容应该是原文的2-3倍长度,但要自然流畅,避免冗余。
1210
6.保持与章节整体内容的一致性和连贯性。
1311

12+
- knowledge:
13+
- @KB{ name=文风约束 }
14+
1415
- Constrict
1516
扩写的内容中出场的实体必须是用户提供的,不能自己新引入实体。
16-
【大纲约束】严格保持原文的剧情走向和进度,不得擅自推进到原文未涉及的剧情,特别是关于角色实力、境界的变化。扩写是丰富细节,不是推进剧情。如果【引用上下文】中提供了章节大纲,扩写后的内容必须仍然符合该大纲范围,不得超出或跳跃到后续剧情。
17+
【大纲约束】严格保持原文的剧情走向和进度,不得擅自推进到原文未涉及的剧情,特别是关于角色实力、境界的变化。扩写是丰富细节,不是推进剧情。如果【引用上下文】中提供了章节大纲,扩写后的内容必须仍然符合该大纲范围,不得超出或跳跃到后续剧情。
1718

18-
【角色引入限制】严禁引入【上文】、【下文】、【事实子图】、【引用上下文】中未提及的新角色。如果确实需要配角或龙套,只能使用极少数(1-2个)仅存在于本章的临时龙套(如"店小二"、"守卫"),且这些龙套不得有任何背景故事、不得与主线剧情产生深度关联,避免与大纲冲突。
19+
【角色引入限制】严禁引入【上文】、【下文】、【事实子图】、【引用上下文】中未提及的新角色。如果确实需要配角或龙套,只能使用极少数(1-2个)仅存在于本章的临时龙套(如"店小二"、"守卫"),且这些龙套不得有任何背景故事、不得与主线剧情产生深度关联,避免与大纲冲突。
1920

20-
【事实硬约束 | 不得扩展实体信息】对输入中已给出的实体事实(位置/隶属/关系/能力/别称等),必须"原样使用,不得外延补充"。不得根据常识/推断/合理想象去扩展细节。
21-
例如:若事实仅提供"万法阁位于青云城",则不得写"青云城西街,万法阁门前"。"西街"属于未提供的定位信息,属于事实外延,禁止添加。类似地,不得擅自补充未提供的"楼层/街区/方位/附属机构"等。
21+
【事实硬约束 | 不得扩展实体信息】对输入中已给出的实体事实(位置/隶属/关系/能力/别称等),必须"原样使用,不得外延补充"。不得根据常识/推断/合理想象去扩展细节。
22+
例如:若事实仅提供"万法阁位于青云城",则不得写"青云城西街,万法阁门前"。"西街"属于未提供的定位信息,属于事实外延,禁止添加。类似地,不得擅自补充未提供的"楼层/街区/方位/附属机构"等。还有,不得随便假设两个完全没有关系的角色互相知道对方。
2223
如需交代背景或空间感,请使用不引入新事实的中性描述(如"城中""市内""这一带""附近"),避免锚定到未提供的具体坐标与关系。
2324

24-
25+
【文风约束】再次声明,严格按照提供的文风约束来写作,尽量减少AI味道。

0 commit comments

Comments
 (0)