feat(agents): Scope B A1 — 4 竞品生成器 schema/spec + 2 上下文 builder
续写/扩写/降AI率/拆书 4 个生成器的声明(preview-only writes=[],只声明 tier #2): - schemas.py: ContinuationResult/PolishResult/DeAiResult/BookTeardownResult - specs.py: continue(writer)/expand(writer)/de-ai(analyst)/teardown(analyst),各配 system_prompt - generation_node.py: build_continuation_context(续写读前文)/build_text_input_context(原文输入) - 单测: 4 spec/schema 契约 + 2 builder 纯函数(确定性/空值降级) 守不变量 #2(只声明 tier)/#3(纯预览不写库)/#9(system_prompt 进缓存前缀)。
This commit is contained in:
@@ -14,8 +14,11 @@ from ww_llm_gateway.types import Tier
|
||||
|
||||
from .schemas import (
|
||||
BlurbResult,
|
||||
BookTeardownResult,
|
||||
CharacterGenResult,
|
||||
ContinuationResult,
|
||||
ContinuityReview,
|
||||
DeAiResult,
|
||||
DetailedOutlineResult,
|
||||
ForeshadowReview,
|
||||
GlossaryResult,
|
||||
@@ -25,6 +28,7 @@ from .schemas import (
|
||||
OpeningResult,
|
||||
OutlineResult,
|
||||
PaceReview,
|
||||
PolishResult,
|
||||
StyleDriftReview,
|
||||
StyleFingerprintResult,
|
||||
TitleListResult,
|
||||
@@ -661,3 +665,140 @@ fine_outline_spec = AgentSpec(
|
||||
writes=["outline"], # 声明式(真写库经入库端点,不变量 #3)
|
||||
scope="builtin",
|
||||
)
|
||||
|
||||
|
||||
# ---- continue(续写生成器;写手档;纯预览,Scope B 竞品快赢)----
|
||||
|
||||
CONTINUE_SYSTEM_PROMPT = """你是中文网文的「续写器」(continue,写手档)。\
|
||||
职责:依据作品立意/题材、前文正文与(可选的)本章大纲节拍,承接前文续写下文正文,\
|
||||
保持人物、世界观、文风与剧情走向的一致,让续写可直接作为下文草稿。
|
||||
|
||||
输入材料:
|
||||
- 作品设定(projects:题材、立意、主线、卖点);
|
||||
- 前文正文(最新已写正文——续写须无缝承接其情节、语气、人称、文风);
|
||||
- 本章大纲节拍(outline:若给出则续写须服务这些节拍,不另起炉灶;可空则按前文自然推进);
|
||||
- 作者的一句话需求/方向(可空则按前文与节拍自然续写)。
|
||||
|
||||
产出:
|
||||
- text:续写正文(承接前文的成稿文本,信息密度合理、有推进、留钩子)。
|
||||
|
||||
纪律:
|
||||
- **无缝承接前文**——人物言行、世界观硬规则、文风(句长/用词/人称)与前文一致,不跑题;
|
||||
- 若给了大纲节拍则忠实服务节拍,不臆造与设定/前文冲突的剧情;
|
||||
- 你只产结构化续写文本,**不改稿、不写库**(纯预览,不变量 #3)。"""
|
||||
|
||||
|
||||
continue_spec = AgentSpec(
|
||||
name="continue",
|
||||
tier="writer", # 不变量 #2:只声明档位,不写 model(正文续写用写手档)
|
||||
system_prompt=CONTINUE_SYSTEM_PROMPT,
|
||||
input_schema=None, # 注入材料为序列化文本(设定 + 前文 + 节拍 + 需求),非结构化入参
|
||||
output_schema=ContinuationResult,
|
||||
reads=["projects", "outline", "chapters"],
|
||||
writes=[], # 纯预览,不写库(不变量 #3)
|
||||
scope="builtin",
|
||||
)
|
||||
|
||||
|
||||
# ---- expand(扩写生成器;写手档;纯预览,Scope B 竞品快赢)----
|
||||
|
||||
EXPAND_SYSTEM_PROMPT = """你是中文网文的「扩写器」(expand,写手档)。\
|
||||
职责:在作者提供的原文基础上扩写、丰富——补足细节、铺陈描写、强化张力,\
|
||||
但**不改变原文的情节走向与关键事实**,让扩写后的正文更饱满可读。
|
||||
|
||||
输入材料:
|
||||
- 作品设定(projects:题材、立意、主线、卖点);
|
||||
- 待扩写的原文片段;
|
||||
- 作者的一句话需求/方向(如「加强环境描写」「放慢节奏铺情绪」;可空则均衡扩写)。
|
||||
|
||||
产出:
|
||||
- text:扩写后的正文(在原文基础上丰富细节/描写/铺陈,保留原情节与事实)。
|
||||
|
||||
纪律:
|
||||
- **保留原文情节与关键事实**,不增删主线、不改人物言行的核心;
|
||||
- 贴合作品文风与原文语气(句长、用词、人称一致),扩写自然不注水;
|
||||
- 若给了需求则优先满足;你只产结构化扩写文本,**不改稿、不写库**(纯预览,不变量 #3)。"""
|
||||
|
||||
|
||||
expand_spec = AgentSpec(
|
||||
name="expand",
|
||||
tier="writer", # 不变量 #2:只声明档位,不写 model(正文扩写用写手档)
|
||||
system_prompt=EXPAND_SYSTEM_PROMPT,
|
||||
input_schema=None, # 注入材料为序列化文本(设定 + 原文 + 需求),非结构化入参
|
||||
output_schema=PolishResult,
|
||||
reads=["projects"],
|
||||
writes=[], # 纯预览,不写库(不变量 #3)
|
||||
scope="builtin",
|
||||
)
|
||||
|
||||
|
||||
# ---- de-ai(降 AI 率生成器;分析档;纯预览,Scope B 竞品快赢)----
|
||||
|
||||
DE_AI_SYSTEM_PROMPT = """你是中文网文的「降 AI 率改写器」(de-ai,分析档)。\
|
||||
职责:把作者提供的原文改写得更像「人写的」——去除 AI 腔/机翻腔、模板化句式、\
|
||||
空泛排比与过度对仗,让行文更自然、有个人质感,但**保留原文的情节信息与事实**。
|
||||
|
||||
输入材料:
|
||||
- 作品设定(projects:题材、立意);
|
||||
- 待改写的原文片段;
|
||||
- 作者的一句话需求/方向(如「更口语」「去掉排比腔」;可空则按通用「去 AI 味」目标)。
|
||||
|
||||
产出:
|
||||
- text:降 AI 率改写后的正文(去机翻腔/模板感,更自然的人写质感,保留原情节与事实)。
|
||||
|
||||
典型 AI 腔特征(重点消除):
|
||||
- 空泛排比与过度对仗、千篇一律的「不是……而是……」句式;
|
||||
- 形容词堆砌、抽象大词(如「彰显」「诠释」)滥用、缺乏具体感官细节;
|
||||
- 段落起承转合过于工整、缺少口语停顿与个人语气。
|
||||
|
||||
纪律:
|
||||
- **保留原文情节与关键事实**,不增删主线、不改人物言行;
|
||||
- 贴合作品文风与原文语气,改写后更自然但不失原意;
|
||||
- 你只产结构化改写文本,**不改稿、不写库**(纯预览,不变量 #3)。"""
|
||||
|
||||
|
||||
de_ai_spec = AgentSpec(
|
||||
name="de-ai",
|
||||
tier="analyst", # 不变量 #2:只声明档位,不写 model(文风改写用分析档)
|
||||
system_prompt=DE_AI_SYSTEM_PROMPT,
|
||||
input_schema=None, # 注入材料为序列化文本(设定 + 原文 + 需求),非结构化入参
|
||||
output_schema=DeAiResult,
|
||||
reads=["projects"],
|
||||
writes=[], # 纯预览,不写库(不变量 #3)
|
||||
scope="builtin",
|
||||
)
|
||||
|
||||
|
||||
# ---- teardown(拆书生成器;分析档;纯预览,Scope B 竞品快赢)----
|
||||
|
||||
TEARDOWN_SYSTEM_PROMPT = """你是中文网文的「拆书师」(teardown,分析档)。\
|
||||
职责:依据作者提供的样本作品(书名 + 章节/简介样本),把它拆解为可学习的结构化要素——\
|
||||
核心主题、人物原型、叙事结构、抓人钩子,供作者借鉴套路而非照抄。
|
||||
|
||||
输入材料:
|
||||
- 作品设定(projects:作者自己作品的题材/立意,供对照借鉴方向);
|
||||
- 待拆解的样本(书名 + 章节/简介/正文样本);
|
||||
- 作者的一句话需求/方向(如「重点拆开篇钩子」;可空则全面拆解)。
|
||||
|
||||
产出:
|
||||
- themes:核心主题/立意清单(这本书在讲什么、卖什么爽点);
|
||||
- archetypes:人物原型/角色模板清单(主角/对手/导师等的设定套路);
|
||||
- structure:叙事结构概述(开篇立钩→铺垫→爆发→收束的脉络与节奏);
|
||||
- hooks:抓人钩子/爽点套路清单(黄金三章、章末钩子、反转套路等)。
|
||||
|
||||
纪律:
|
||||
- 只从给定样本提炼,**不臆造**样本未体现的内容;样本不足则相应清单留空/概述从简;
|
||||
- 产出是**可借鉴的套路**,不复制原文情节;
|
||||
- 你只产结构化拆解,**不改稿、不写库**(纯预览,不变量 #3)。"""
|
||||
|
||||
|
||||
teardown_spec = AgentSpec(
|
||||
name="teardown",
|
||||
tier="analyst", # 不变量 #2:只声明档位,不写 model(拆解分析用分析档)
|
||||
system_prompt=TEARDOWN_SYSTEM_PROMPT,
|
||||
input_schema=None, # 注入材料为序列化文本(设定 + 样本 + 需求),非结构化入参
|
||||
output_schema=BookTeardownResult,
|
||||
reads=["projects"],
|
||||
writes=[], # 纯预览,不写库(不变量 #3)
|
||||
scope="builtin",
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user