# 笔灵-AI小说生成 **Repository Path**: elfbobo_admin_admin/agent-novel ## Basic Information - **Project Name**: 笔灵-AI小说生成 - **Description**: AI 小说创作平台是一个基于大语言模型和 LangGraph 工作流引擎的智能小说创作系统。它通过 AI Agent 技术,将小说创作过程拆解为多个智能节点,实现从创意到成稿的全流程自动化辅助创作。 系统采用人机协作的方式,AI 负责生成内容,用户负责审核和调整,确保创作质量的同时大幅提升创作效率。 ⭐ 如果这个项目对你有帮助,欢迎 Star 支持! - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2026-05-14 - **Last Updated**: 2026-05-14 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 🎭 AI 小说创作平台 一个基于 AI 的智能小说创作平台,通过 LangGraph 工作流引擎和大语言模型,帮助用户从创意到成稿的全流程小说创作。 ## 📸 系统截图 ### 工作台 - 创作流程 ![工作台](images/ScreenShot_2026-04-19_192056_280.png) ### 元素提取与世界观生成 ![元素提取](images/ScreenShot_2026-04-19_192214_476.png) ### 编辑器 - 实时对话 ![编辑器](images/ScreenShot_2026-04-19_192406_480.png) ## ✨ 核心特性 ### 🤖 智能创作流程 - **元素提取**:从用户输入的主题中智能提取小说类型、题材标签、爽点类型、主角设定等核心元素 - **世界观生成**:基于提取的元素,自动构建完整的世界观设定(历史背景、地理环境、力量体系等) - **标题与简介**:生成吸引人的书名和简介 - **人物卡生成**:自动创建主角、配角等核心角色,包含外貌、性格、背景故事、能力等详细信息 - **章节规划**:根据小说类型和复杂度,提供多种章节规划方案 - **大纲生成**:生成详细的章节大纲,包含情节、冲突、伏笔设置 ### 💬 实时交互体验 - **SSE 流式输出**:AI 生成内容实时推送,提供流畅的打字机效果 - **多轮对话**:支持用户反馈和修改建议,AI 根据反馈调整生成内容 - **工具调用可视化**:实时展示 AI 调用数据库工具的状态(创建小说、保存元素等) - **审批流程**:每个创作阶段都需要用户确认,确保生成内容符合预期 ### 🎨 现代化界面 - **响应式设计**:支持桌面端和移动端 - **暗色模式**:护眼的深色主题 - **Markdown 渲染**:支持富文本展示,代码高亮 - **卡片式布局**:清晰的信息层级和视觉反馈 ## 🏗️ 技术架构 ### 系统分层架构 ``` ┌─────────────────────────────────────────────────────────────────┐ │ 前端层 (Frontend) │ │ React 19 + TypeScript + Vite + Ant Design + Zustand │ │ - 页面: LandingPage / WorkspacePage / EditorPage │ │ - 组件: Navbar / Sidebar / MessageRenderer / CharacterCard │ │ - Hooks: useSSE / useChatMessage / useResizablePanels │ │ - 状态: authStore / novelStore / flowStore │ └────────────────────────┬────────────────────────────────────────┘ │ HTTP / SSE ┌────────────────────────┴────────────────────────────────────────┐ │ API 层 (FastAPI) │ │ - /api/auth - 认证登录 │ │ - /api/chat - 聊天对话 │ │ - /api/flows - 创作流程 │ │ - /api/novel - 小说管理 │ │ - /api/sse - 实时推送 │ └────────────────────────┬────────────────────────────────────────┘ │ ┌────────────────────────┴────────────────────────────────────────┐ │ 业务逻辑层 (Services) │ │ - ChatMessageService - 消息管理 │ │ - SSEManager - 实时推送管理 │ │ - CreationFlowService - 流程编排 │ └────────────────────────┬────────────────────────────────────────┘ │ ┌────────────────────────┴────────────────────────────────────────┐ │ AI 引擎层 (LangGraph) │ │ │ │ 工作流节点 (Nodes): │ │ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │ │ │ 元素提取节点 │→│ 世界观生成 │→│ 标题生成 │ │ │ └──────────────┘ └──────────────┘ └──────────────┘ │ │ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │ │ │ 人物卡生成 │→│ 章节配置 │→│ 大纲生成 │ │ │ └──────────────┘ └──────────────┘ └──────────────┘ │ │ │ │ AI 工具 (Tools): │ │ - create_novel_record - 创建小说记录 │ │ - save_worldview_to_db - 保存世界观 (draft) │ │ - confirm_worldview - 确认世界观 (draft→confirmed) │ │ - update_novel_title - 更新标题 │ │ - save_characters_to_db - 保存人物卡 (draft) │ │ - delete_draft_characters - 删除草稿人物卡 │ │ │ │ LLM 模型: DeepSeek Chat / DeepSeek Reasoner │ └────────────────────────┬────────────────────────────────────────┘ │ ┌────────────────────────┴────────────────────────────────────────┐ │ 数据访问层 (Repositories) │ │ - NovelRepository - 小说数据访问 │ │ - WorldviewRepository - 世界观数据访问 │ │ - CharacterRepository - 人物卡数据访问 │ │ - FlowRepository - 流程数据访问 │ └────────────────────────┬────────────────────────────────────────┘ │ ┌────────────────────────┴────────────────────────────────────────┐ │ 数据存储层 (Storage) │ │ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │ │ │ PostgreSQL │ │ Redis │ │ LLM API │ │ │ │ 关系型数据库 │ │ 缓存/会话 │ │ AI 模型服务 │ │ │ └──────────────┘ └──────────────┘ └──────────────┘ │ └─────────────────────────────────────────────────────────────────┘ ``` ### 核心创作流程 ``` 用户输入主题 ↓ ┌─────────────────────────────────────────────────────────────┐ │ 1️⃣ 元素提取阶段 │ │ - AI 分析主题,提取小说类型、题材、爽点、主角设定等 │ │ - 输出: JSON 格式的元素数据 │ │ - 用户确认 → 继续 / 重新生成 │ └─────────────────────────────────────────────────────────────┘ ↓ 确认 ┌─────────────────────────────────────────────────────────────┐ │ 2️⃣ 世界观生成阶段 (draft 状态) │ │ - 工具调用: create_novel_record (创建小说) │ │ - 工具调用: save_novel_elements_to_db (保存元素) │ │ - AI 生成世界观 (历史、地理、力量体系、势力、规则) │ │ - 工具调用: save_worldview_to_db (保存世界观, status=draft)│ │ - 用户确认 → 继续 / 修改世界观 │ └─────────────────────────────────────────────────────────────┘ ↓ 确认 ┌─────────────────────────────────────────────────────────────┐ │ 3️⃣ 标题生成阶段 │ │ - 工具调用: confirm_worldview (确认世界观, draft→confirmed)│ │ - AI 生成书名和简介 │ │ - 工具调用: update_novel_title (保存标题) │ │ - 工具调用: update_novel_summary (保存简介) │ │ - 用户确认 → 继续 / 重新生成 │ └─────────────────────────────────────────────────────────────┘ ↓ 确认 ┌─────────────────────────────────────────────────────────────┐ │ 4️⃣ 人物卡生成阶段 (draft 状态) │ │ - 工具调用: delete_draft_characters (删除旧人物卡) │ │ - AI 生成 3-5 个核心角色 (主角、女主、配角等) │ │ - 工具调用: save_characters_to_db (保存人物卡, status=draft)│ │ - 用户确认 → 继续 / 重新生成 │ └─────────────────────────────────────────────────────────────┘ ↓ 确认 ┌─────────────────────────────────────────────────────────────┐ │ 5️⃣ 章节配置阶段 │ │ - AI 提供 3 种章节规划方案 (短篇/中篇/长篇) │ │ - 用户选择或自定义章节数和字数 │ └─────────────────────────────────────────────────────────────┘ ↓ 确认 ┌─────────────────────────────────────────────────────────────┐ │ 6️⃣ 大纲生成阶段 │ │ - AI 生成详细章节大纲 (标题、情节、冲突、伏笔) │ │ - 用户确认 → 完成 / 修改大纲 │ └─────────────────────────────────────────────────────────────┘ ↓ 创作完成 ``` ### 实时交互流程 ``` 前端 后端 LangGraph LLM 数据库 │ │ │ │ │ │ 1. 发送消息 │ │ │ │ │─────────────────────→│ │ │ │ │ │ 2. 启动工作流 │ │ │ │ │────────────────────────→│ │ │ │ │ │ 3. 调用 LLM │ │ │ │ │───────────────────→│ │ │ │ │ │ 4. 决定调用工具 │ │ │ │ 5. 返回 tool_calls│ │ │ │ │←───────────────────│ │ │ │ │ 6. 执行工具 │ │ │ │ │───────────────────────────────────────→│ │ 7. SSE 推送工具状态 │ │ │ │ │←─────────────────────│←────────────────────────│ │ │ │ "正在创建小说..." │ │ │ │ │ │ │ 8. 工具执行结果 │ │ │ │ │←───────────────────────────────────────│ │ │ │ 9. 继续对话 │ │ │ │ │───────────────────→│ │ │ │ │ │ 10. 生成内容 │ │ │ │ 11. 流式返回 │ │ │ │ │←───────────────────│ │ │ 12. SSE 流式推送内容 │ │ │ │ │←─────────────────────│←────────────────────────│ │ │ │ "世界观设定..." │ │ │ │ │ │ │ 13. 保存数据 │ │ │ │ │───────────────────────────────────────→│ │ 14. 显示完整内容 │ │ │ │ │ │ │ │ │ ``` ### 状态管理机制 **草稿状态管理 (Draft/Confirmed)** ``` 世界观 (Worldview) ├─ draft → 初次生成,用户可以修改 └─ confirmed → 用户确认后,进入下一阶段时自动确认 人物卡 (Character) ├─ draft → 初次生成,用户可以重新生成(会删除旧的) └─ confirmed → 用户确认后,状态更新 优势: ✅ 数据安全 - 自动保存草稿,防止数据丢失 ✅ 灵活迭代 - 支持多次重新生成 ✅ 状态清晰 - 明确区分草稿和已确认状态 ✅ 用户体验 - 实时反馈,操作透明 ``` ### 前端技术栈 - **React 19** + **TypeScript**:现代化的前端框架 - **Vite**:快速的构建工具 - **Ant Design**:企业级 UI 组件库 - **Zustand**:轻量级状态管理 - **React Router**:路由管理 - **Axios**:HTTP 客户端 - **React Markdown**:Markdown 渲染 ### 后端技术栈 - **FastAPI**:高性能的 Python Web 框架 - **LangGraph**:AI 工作流编排引擎 - **LangChain**:大语言模型应用框架 - **PostgreSQL**:关系型数据库 - **Redis**:缓存和会话管理 - **SQLAlchemy**:ORM 框架 - **Alembic**:数据库迁移工具 ### AI 能力 - **多模型支持**:支持 OpenAI、Anthropic、本地模型等 - **工具调用**:AI 可以自主调用数据库工具完成任务 - **流式生成**:支持 SSE 流式输出 - **状态管理**:基于 LangGraph 的状态机管理创作流程 ## 📦 项目结构 ``` agent-novel/ ├── client/ # 前端项目 │ ├── src/ │ │ ├── components/ # React 组件 │ │ ├── pages/ # 页面组件 │ │ ├── hooks/ # 自定义 Hooks │ │ ├── store/ # Zustand 状态管理 │ │ ├── lib/ # 工具库 │ │ ├── types/ # TypeScript 类型定义 │ │ └── styles/ # 样式文件 │ ├── public/ # 静态资源 │ └── package.json │ ├── server/ # 后端项目 │ ├── app/ │ │ ├── ai/ # AI 相关模块 │ │ │ ├── nodes/ # LangGraph 节点 │ │ │ ├── tools/ # AI 工具 │ │ │ ├── chains.py # LangChain 链 │ │ │ ├── graph.py # LangGraph 工作流 │ │ │ ├── prompts.py # 提示词模板 │ │ │ └── state.py # 状态定义 │ │ ├── api/ # API 路由 │ │ ├── core/ # 核心配置 │ │ ├── models/ # 数据库模型 │ │ ├── repositories/ # 数据访问层 │ │ ├── services/ # 业务逻辑层 │ │ └── main.py # 应用入口 │ ├── alembic/ # 数据库迁移 │ └── requirements.txt │ └── demo/ # 演示页面 ``` ## 🚀 快速开始 ### 环境要求 - Node.js >= 18 - Python >= 3.11 - PostgreSQL >= 14 - Redis >= 6 ### 1. 克隆项目 ```bash git clone cd agent-novel ``` ### 2. 配置后端 #### 安装依赖 ```bash cd server pip install -r requirements.txt ``` #### 配置环境变量 创建 `.env` 文件: ```bash cp .env.example .env ``` 编辑 `.env` 文件,配置以下内容: ```env # 数据库配置 DATABASE_URL=postgresql://user:password@localhost:5432/novel_db # Redis 配置 REDIS_URL=redis://localhost:6379/0 # AI 模型配置 OPENAI_API_KEY=your_openai_api_key OPENAI_BASE_URL=https://api.openai.com/v1 # JWT 配置 SECRET_KEY=your_secret_key ALGORITHM=HS256 ACCESS_TOKEN_EXPIRE_MINUTES=30 ``` #### 初始化数据库 ```bash # 创建数据库 createdb novel_db # 运行迁移 alembic upgrade head ``` #### 启动后端服务 ```bash python -m app.main # 或使用 uvicorn uvicorn app.main:app --reload --host 0.0.0.0 --port 8000 ``` 后端服务将运行在 `http://localhost:8000` ### 3. 配置前端 #### 安装依赖 ```bash cd client npm install ``` #### 配置环境变量 创建 `.env` 文件: ```env VITE_API_BASE_URL=http://localhost:8000 ``` #### 启动前端服务 ```bash npm run dev ``` 前端服务将运行在 `http://localhost:5173` ## 📖 使用指南 ### 1. 注册/登录 访问首页,点击"开始创作"按钮,注册或登录账号。 ### 2. 创建小说 1. 在工作台页面,输入小说主题(例如:"被迫进入无限恐怖游戏,男主在一个个高难度副本中求生") 2. 点击"开始创作" ### 3. 创作流程 系统将引导你完成以下步骤: #### 步骤 1:元素提取 - AI 分析你的主题,提取小说类型、题材、爽点等核心元素 - 你可以确认或要求修改 #### 步骤 2:世界观生成 - AI 基于元素生成完整的世界观设定 - 包括历史背景、地理环境、力量体系等 - 支持多轮对话调整 #### 步骤 3:标题与简介 - AI 生成吸引人的书名和简介 - 可以根据反馈重新生成 #### 步骤 4:人物卡生成 - AI 创建主角、配角等核心角色 - 每个角色包含详细的设定信息 #### 步骤 5:章节规划 - AI 提供多种章节规划方案 - 你可以选择或自定义章节数和字数 #### 步骤 6:大纲生成 - AI 生成详细的章节大纲 - 包含每章的情节、冲突、伏笔 ### 4. 编辑器 在编辑器页面,你可以: - 查看和编辑小说内容 - 查看人物卡 - 查看章节大纲 - 与 AI 对话调整内容 ## 🔧 API 文档 启动后端服务后,访问 `http://localhost:8000/docs` 查看完整的 API 文档(Swagger UI)。 ### 主要 API 端点 #### 认证 - `POST /api/auth/register` - 用户注册 - `POST /api/auth/login` - 用户登录 - `POST /api/auth/refresh` - 刷新 Token #### 创作流程 - `POST /api/flows/start_creation` - 开始创作流程 - `POST /api/flows/{flow_id}/execute` - 执行流程步骤 - `GET /api/flows/{flow_id}` - 获取流程状态 #### 聊天 - `POST /api/chat/sendMessage` - 发送消息给 AI - `GET /api/sse/novel/{flow_id}` - SSE 流式接收 AI 响应 #### 小说管理 - `GET /api/novel/list` - 获取小说列表 - `GET /api/novel/{novel_id}` - 获取小说详情 - `PUT /api/novel/{novel_id}` - 更新小说信息 ## 🎯 核心功能实现 ### LangGraph 工作流 系统使用 LangGraph 构建了一个状态机工作流: ```python # 工作流节点 extract_elements → generate_world_view → generate_title_summary → generate_characters → configure_chapters → generate_outline ``` 每个节点都支持: - 用户审批(approve/regenerate/modify) - 多轮对话 - 工具调用 - 流式输出 ### SSE 流式推送 使用 Server-Sent Events 实现实时推送: ```typescript // 前端订阅 SSE const eventSource = new EventSource(`/api/sse/novel/${flowId}`) eventSource.onmessage = (event) => { const data = JSON.parse(event.data) // 处理不同类型的消息 switch(data.type) { case 'agent_message': // AI 文本消息 case 'agent_action': // 工具调用状态 case 'stream_chunk': // 流式文本块 } } ``` ### 工具调用 AI 可以自主调用数据库工具: ```python # 定义工具 @tool async def create_novel_record(user_id: str, theme: str) -> dict: """创建小说记录""" # 实现逻辑 return {"novel_id": novel_id} # AI 自主决定何时调用 tools = [create_novel_record, save_novel_elements_to_db, ...] chain = llm.bind_tools(tools) ``` ## 🤝 贡献指南 欢迎提交 Issue 和 Pull Request! ### 开发流程 1. Fork 本仓库 2. 创建特性分支 (`git checkout -b feature/AmazingFeature`) 3. 提交更改 (`git commit -m 'Add some AmazingFeature'`) 4. 推送到分支 (`git push origin feature/AmazingFeature`) 5. 开启 Pull Request ### 代码规范 - 前端:遵循 ESLint 配置 - 后端:遵循 PEP 8 规范 - 提交信息:使用语义化提交(Conventional Commits) ## 📝 许可证 本项目采用 MIT 许可证。详见 [LICENSE](LICENSE) 文件。 ## 🙏 致谢 - [LangChain](https://github.com/langchain-ai/langchain) - AI 应用框架 - [LangGraph](https://github.com/langchain-ai/langgraph) - 工作流编排 - [FastAPI](https://fastapi.tiangolo.com/) - 现代 Web 框架 - [React](https://react.dev/) - 前端框架 - [Ant Design](https://ant.design/) - UI 组件库 ## 📧 联系方式 如有问题或建议,欢迎通过以下方式联系: - 提交 Issue - 发送邮件至:[your-email@example.com] --- ⭐ 如果这个项目对你有帮助,欢迎 Star!