Files
arboris-novel/docs/novel_workflow.md
2025-10-21 09:51:27 +08:00

7.5 KiB
Raw Permalink Blame History

Arboris 长篇小说自动化流水线说明

本文档描述 Arboris 在「从概念到章节成稿」过程中的完整自动化流程、涉及的提示词、上下文载荷与模型参数。


1. 总体流程概览

项目创建 → 概念对话 → 蓝图生成/编辑 → 章节生成 → 版本评审/选择
     ↑                                            ↓
  (持续迭代) ← 手动编辑 ← 向量入库 ← 摘要提取 ← RAG 检索支撑下一章

关键能力由以下组件协作完成:

阶段 主要接口 提示词 ID 模型温度 说明
概念对话 POST /api/novels/{id}/concept/converse concept(附带 JSON schema 指令) 0.8 引导用户梳理世界观与剧情要素
蓝图生成 POST /api/novels/{id}/blueprint/generate screenwriting 0.3 基于概念对话整理正式蓝图
章节生成 POST /api/writer/novels/{id}/chapters/generate writing 0.9 结合蓝图、前情摘要与 RAG 结果生成章节草稿
章节评审 POST /api/writer/novels/{id}/chapters/evaluate evaluation 0.3 对全部候选版本给出改进建议
摘要提取 调用 LLMService.get_summary(生成/编辑/选择时触发) extraction 0.15 对最终正文提炼真实摘要

所有提示词原文保存在 backend/prompts/ 目录,可由 Prompt 管理界面动态更新。


2. 阶段详解

2.1 概念阶段Concept Converse

  • 入口POST /api/novels/{project_id}/concept/converse
  • 上下文
    • 历史概念对话(数据库 NovelConversation 表)
    • 用户本轮输入JSON
  • 提示词concept + JSON_RESPONSE_INSTRUCTION(强制返回结构化 JSON
  • LLM 参数:温度 0.8,超时 240 秒
  • 输出ConverseResponse,包含 AI 建议、UI 控件描述以及对话状态;当 is_complete 为真时,允许进入蓝图阶段。

2.2 蓝图生成Blueprint

  • 入口POST /api/novels/{project_id}/blueprint/generate
  • 上下文
    • 概念对话中成功解析的用户/助手消息(提取自存档 JSON
  • 提示词screenwriting
  • LLM 参数:温度 0.3,超时 480 秒
  • 输出:结构化蓝图 JSON映射到 NovelBlueprint(世界观、角色、章节纲要等)
  • 后续
    • PATCH /api/novels/{project_id}/blueprint 可局部修改蓝图
    • save_blueprint 路径用于手动覆盖生成结果

2.3 章节生成Writer.GenerateChapter

  • 入口POST /api/writer/novels/{project_id}/chapters/generate,请求体 GenerateChapterRequest
  • 上下文组装
    1. 蓝图:剔除章节细节字段(章节摘要、对话、角色动态等),仅保留世界观框架。
    2. 已完成章节摘要:逐章真实摘要;若缺失则调用 get_summaryextraction 提示词生成。
    3. 上一章桥接:上一章真实摘要 + 正文末尾 500 字。
    4. RAG 检索结果(由 ChapterContextService 提供):
      • 查询向量来源:章节标题 + 纲要摘要 + 可选写作指令 → LLMService.get_embedding
      • 文本来源:VectorStoreService.query_chunks/query_summaries(若数据库不支持向量函数,则回退到应用层余弦距离排序)
      • 默认 Top-K正文片段 5 条、章节摘要 3 条(可通过环境变量调整)
    5. 写作提示词writing
  • LLM 参数:温度 0.9,超时 600 秒,候选版本数默认为 3可通过系统配置或环境变量覆盖
  • 输出章节候选版本数组JSON写入 ChapterVersionChapter 状态设置为 generating

注意:章节上下文生成失败(如无向量库)时,流程会降级为“蓝图 + 历史摘要”模式继续执行。

2.4 章节版本选择 / 手动编辑

  • 选择版本POST /api/writer/novels/{project_id}/chapters/select

    • 选定后调用 get_summary(温度 0.15)生成真实摘要
    • 触发 ChapterIngestionService.ingest_chapter 切分正文、摘要并写入向量库
  • 手动编辑POST /api/writer/novels/{project_id}/chapters/edit

    • 更新正文、重算摘要
    • 同样触发向量入库,以覆盖旧 chunk

2.5 章节评审Evaluation

  • 入口POST /api/writer/novels/{project_id}/chapters/evaluate
  • 上下文
    • 蓝图(完整结构)
    • 当前章节全部版本内容(按创建时间排序)
  • 提示词evaluation
  • LLM 参数:温度 0.3,超时 360 秒
  • 输出:评审报告文本,写入 ChapterEvaluation

2.6 摘要提取Summary Extraction

  • 触发点
    • 章节自动生成阶段(“前情摘要缺失”场景)
    • 章节版本确认
    • 手动编辑保存
  • 调用LLMService.get_summary
  • 提示词extraction
  • LLM 参数:温度 0.15(默认 0.2,在调用处覆盖),超时 180 秒
  • 目标:为后续章节生成提供真实摘要,避免使用纲要内容。

3. 向量化与 RAG 细节

3.1 切分策略

  • 默认使用 LangChain RecursiveCharacterTextSplitter
    • chunk_size = settings.vector_chunk_size(默认 480
    • chunk_overlap = min(settings.vector_chunk_overlap, chunk_size // 2)(默认 120
    • 分隔符优先级:双换行 > 单换行 > 句号/问号/感叹号 > 逗号 > 空格 ➜ 确保靠近语义边界
  • 若未安装对应依赖,则回退到内置段落 + 标点切分算法,配合日志提示。
  • 摘要文本也使用同一套流程(通常为单条向量)。

3.2 向量存储

  • 后端服务VectorStoreService
  • 存储实现libsql可本地 file:,亦可云端),需手动配置 VECTOR_DB_URL
  • 表结构
    • rag_chunks(正文分块):idproject_idchapter_numberchunk_indexchapter_titlecontentembeddingmetadata
    • rag_summaries(章节摘要):idproject_idchapter_numbertitlesummaryembedding
  • 检索策略
    • 优先使用 libsql 的 vector_distance_cosine;若未启用,回退到 Python 端计算余弦距离(排序后截取 Top-K
    • 查询向量由 LLMService.get_embedding 生成,支持 OpenAI 与 Ollama通过 EMBEDDING_PROVIDER 切换)。

3.3 向量生命周期

  • 插入/更新:章节版本被确认或编辑保存后,先删除旧向量,再批量写入最新正文/摘要分块。
  • 删除delete_chapters 接口会同步清理向量库,防止后续 RAG 读到过期内容。
  • 日志:向量 service 与 ingestion service 会在关键阶段输出日志(初始化、切分数量、写入成功/失败),便于排查。

4. 运行依赖与配置总览

配置项 说明 默认/来源
OPENAI_* 默认生成模型配置 .env 或系统配置表
EMBEDDING_PROVIDER 嵌入提供方(openai / ollama .env
EMBEDDING_MODEL / OLLAMA_EMBEDDING_MODEL 具体嵌入模型名 .env
VECTOR_DB_URL libsql 数据库地址(支持 file: .env
VECTOR_TOP_K_CHUNKS / VECTOR_TOP_K_SUMMARIES 检索数量 .env / 系统配置
WRITER_CHAPTER_VERSION_COUNT 章节候选版本数 系统配置 / 环境变量

确保在部署环境中提前安装新依赖:

pip install -r backend/requirements.txt

如需进一步开发,请配合此文档查看对应模块的实现文件(backend/app/services/*backend/app/api/routers/*backend/prompts/*),保持提示词与代码逻辑的一致性。