239 lines
6.3 KiB
Markdown
239 lines
6.3 KiB
Markdown
# 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 |