Files
ai_novel/README.md
2025-07-16 01:08:03 +08:00

239 lines
6.3 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# AI Novel Writer Agent
一个基于LangChain的AI小说编写器支持多种LLM供应商能够按照章节结构自动生成完整小说。
## 特性
- 🤖 支持多种LLM供应商OpenAI、OpenRouter、Ollama等
- 📚 按小章节逐步生成小说内容
- 📝 自动生成章节总结并更新目录
- 🔧 灵活的配置系统
- 🎨 美观的命令行界面
- 📖 支持完整小说编译
## 安装
使用uv安装推荐
```bash
git clone <repository-url>
cd ai-novel
uv sync
```
或使用pip
```bash
pip install -e .
```
## 快速开始
### 1. 创建项目目录
```bash
# 创建项目目录
mkdir my-novel
cd my-novel
# 创建必要文件
# 编辑以下文件:
# - 梗概大纲.md - 小说的故事梗概和大纲
# - 章节目录.yaml - 详细的章节结构
```
### 2. 编辑项目文件
在项目目录中创建:
- `梗概大纲.md` - 小说的故事梗概和大纲
- `章节目录.yaml` - 详细的章节结构
### 3. 创建配置文件
```bash
ai-novel init-config config.yaml
```
编辑配置文件设置项目目录和API密钥
```yaml
project_dir: "my-novel" # 指定项目目录
novelist_llm:
type: "openai" # 或 "openai_compatible", "ollama"
model: "gpt-4"
api_key: "your-api-key-here"
temperature: 0.7
max_tokens: 3000
summarizer_llm:
type: "openai"
model: "gpt-3.5-turbo"
api_key: "your-api-key-here"
temperature: 0.3
max_tokens: 500
```
### 4. 生成小说
生成完整小说:
```bash
ai-novel generate --config config.yaml
```
生成特定部分:
```bash
# 生成第1部分
ai-novel generate --config config.yaml --part 1
# 生成第1部分第2章
ai-novel generate --config config.yaml --part 1 --chapter 2
# 生成第1部分第2章第3节
ai-novel generate --config config.yaml --part 1 --chapter 2 --section 3
```
## 配置
### 环境变量
可以通过环境变量设置API密钥
```bash
export OPENAI_API_KEY="your-openai-key"
export OPENROUTER_API_KEY="your-openrouter-key"
export OLLAMA_BASE_URL="http://localhost:11434"
```
### 提示词配置
可以通过 `prompt_config` 部分配置提示词的行为:
```yaml
prompt_config:
previous_chapters_count: 2 # 提示词中包含前n章节的完整内容
writing_style: "现代科幻小说风格,语言简洁明快,注重科技细节描写和人物心理刻画,营造紧张悬疑的氛围。" # 文风描述
```
**配置说明:**
**`previous_chapters_count`**: 控制在生成新章节时,提示词中包含多少个前面章节的完整内容
- `0`: 不包含任何前面章节的内容
- `1`: 只包含前1个章节的内容
- `2`: 包含前2个章节的内容默认值
- `3+`: 包含前n个章节的内容
- 负数: 包含所有前面章节的内容
**`writing_style`**: 描述期望的小说文风和写作风格
- 这个描述会被添加到系统提示词中指导LLM按照指定风格创作
- 可以包含语言风格、叙述方式、情节节奏、人物刻画等要求
- 支持详细的文风描述,如"古典文学风格"、"现代都市风格"、"悬疑推理风格"等
**文风配置示例:**
```yaml
# 古典武侠风格
writing_style: "古典武侠小说风格,文言文与白话文结合,注重意境营造和武功描写,人物对话古雅,情节跌宕起伏。"
# 现代都市风格
writing_style: "现代都市小说风格,语言贴近生活,对话真实自然,注重心理描写和情感细节,节奏明快。"
# 悬疑推理风格
writing_style: "悬疑推理小说风格,语言简练精准,注重线索铺设和逻辑推理,营造紧张神秘的氛围。"
```
这些配置可以帮助你:
- 控制提示词的长度减少token消耗
- 调整上下文的丰富程度
- 定制小说的写作风格和文学特色
- 适应不同模型的上下文长度限制
### LLM供应商配置
#### OpenAI
```yaml
project_dir: "my-novel"
# 提示词配置
prompt_config:
previous_chapters_count: 2 # 提示词中包含前n章节的完整内容
writing_style: "现代科幻小说风格,语言简洁明快,注重科技细节描写和人物心理刻画,营造紧张悬疑的氛围。"
novelist_llm:
type: "openai"
model: "gpt-4"
api_key: "sk-..."
temperature: 0.7
max_tokens: 3000
```
#### OpenRouter
```yaml
project_dir: "my-novel"
# 提示词配置
prompt_config:
previous_chapters_count: 2 # 提示词中包含前n章节的完整内容
writing_style: "现代科幻小说风格,语言简洁明快,注重科技细节描写和人物心理刻画,营造紧张悬疑的氛围。"
novelist_llm:
type: "openai_compatible"
model: "anthropic/claude-3-haiku"
api_key: "sk-or-..."
base_url: "https://openrouter.ai/api/v1"
temperature: 0.7
max_tokens: 3000
```
#### Ollama
```yaml
project_dir: "my-novel"
# 提示词配置
prompt_config:
previous_chapters_count: 2 # 提示词中包含前n章节的完整内容
writing_style: "现代科幻小说风格,语言简洁明快,注重科技细节描写和人物心理刻画,营造紧张悬疑的氛围。"
novelist_llm:
type: "ollama"
model: "llama3.1"
base_url: "http://localhost:11434"
temperature: 0.7
```
## 项目结构
```
ai-novel/ # 主项目目录
├── config.yaml # 配置文件
└── my-novel/ # 小说项目目录由config.yaml中project_dir指定
├── 梗概大纲.md # 小说梗概和大纲
├── 章节目录.yaml # 章节结构定义
├── chapters/ # 生成的章节文件
│ ├── part_1_火种纪元/
│ │ ├── chapter_1_金乌升起.md
│ │ └── section_1_1.md
│ └── ...
└── 光锥牢笼——从聚变之火到热寂回响.md # 完整小说
```
## 工作流程
1. **读取项目文件**:加载梗概大纲和章节结构
2. **构建提示词**:包含系统提示、故事梗概、章节目录、前文内容
3. **生成章节**LLM按小节生成内容
4. **生成总结**另一个LLM生成章节总结
5. **更新目录**:将总结添加到章节目录中
6. **编译小说**:将所有章节合并为完整小说
## 命令行接口
```bash
ai-novel --help # 显示帮助
ai-novel init-project <path> # 初始化新项目
ai-novel init-config <path> # 创建示例配置
ai-novel generate --config <config> [options] # 生成小说内容
```
## 许可证
MIT License