惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

D
Docker
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Last Week in AI
Last Week in AI
博客园_首页
Microsoft Security Blog
Microsoft Security Blog
Blog — PlanetScale
Blog — PlanetScale
M
MIT News - Artificial intelligence
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
A
About on SuperTechFans
aimingoo的专栏
aimingoo的专栏
V
Visual Studio Blog
Jina AI
Jina AI
N
Netflix TechBlog - Medium
量子位
博客园 - 三生石上(FineUI控件)
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
I
InfoQ
J
Java Code Geeks
T
Tailwind CSS Blog
博客园 - 司徒正美
Stack Overflow Blog
Stack Overflow Blog
阮一峰的网络日志
阮一峰的网络日志
Engineering at Meta
Engineering at Meta
腾讯CDC

又耳笔记

用AI挣钱之AI建站:二维码生成器工具 用AI挣钱之AI建站:https://markdowntopdf.top Cloudflare Workers实战番外一:用Static Assets托管网站,告别传统方案 Cloudflare Workers实战(五):不止JavaScript,拥抱Python与Rust Cloudflare Workers实战(四):托管和分发静态文件 Cloudflare Workers实战(三):实现认证、重定向与缓存 Cloudflare Workers实战(二):动态修改后端响应 Cloudflare Workers实战(一):随心所欲操作客户端请求 Cloudflare workers不完全指南 水果风波:信任的代价 用Python将PDF文件转换成图片 rust网络框架Pingora源码阅读3 rust网络框架Pingora源码阅读2 rust网络框架Pingora源码阅读1 Pingora快速入门教程1之总览 Rust模板引擎askama快速入门引擎 使用Loco快速搭建自己的后台系统 用Rust发一封图文并茂的邮件 Rust小项目: 写一个简单的恶意流量阻断器 Rust小项目: 写一个简单的网页爬虫 Rust命令行库Clap快速入门教程 Rust小项目:用Rust写一个端口扫描器 Rust真全栈开发快速入门 rust声明宏快速入门教程 Rust文本处理快速入门教程 RUST web框架axum快速入门教程6之测试 白嫖免费的Rust在线运行时shuttle RUST web框架axum快速入门教程5之中间件 用Rust来做以太坊开发5之事件日志及签名 《英语语法分解大全》读后感
使用n8n创作短篇小说
About 又耳宁 关于技术与股票的一些零碎想法 · 2025-05-20 · via 又耳笔记

需要提前说明的是,本人不会使用本工作流用来写小说并投稿只是用于研究目的,因为写小说这个工作流感觉不简单也不算太复杂,适合用来深入n8n的使用。

会点进这篇文章的人应该都知道n8n是一个开源的工作流自动化平台吧?总的来说,它是一个可以通过配置工作流来实现自动化任务的平台,比如自动化发送邮件、自动化回复邮件等各种可以使用电脑完成的事情, 这些其实通过写程序脚本也能完成, 但是自己写脚本稍微比较烦人的一点是需要去研究各种接口和服务, 而n8n比较突出的一点是集成了各种节点(插件), 这样使用起来就比较方便,不用自己去看各种接口怎么配置,可以从已有的节点中挑选顺手的工具, 而且还有庞大的社区插件可以使用, 这也是我选择n8n而不是dify的原因。

安装n8n

安装有两种办法,这个参考官方文档就行,这里简单概括一下

使用npm安装

使用docker安装

一定要创建一个volume呀, 不然n8n的数据就没办法持久化了

docker volume create n8n_data

docker run -it --rm --name n8n -p 5678:5678 -v n8n_data:/home/node/.n8n docker.n8n.io/n8nio/n8n

创建工作流

在创建工作流之前,我们首先需要规划一下整个工作流的逻辑。 众所周知的大多数模型都是有输出限制的,比如DeepSeek一般是4096个Token, 差不多3000个汉字左右(似乎实际使用中, 只有2000个汉字左右), 所以我们需要把小说内容生成分成若干个章节, 然后根据大纲和每章的章节安排来生成每章的小说内容,最后将这些内容组合在一起就可以了。

当然啦,还有号称可以输出超级长文本和有超级上下文的AI模型,这里就不考虑了, 因为我也没有测试过,而且本文的目的也主要是研究怎么使用n8n,而不是真的为了来产生垃圾小说和污染互联网。

我的规划如下

  1. 根据用户输入,使用DeepSeek生成标题,大纲,章节安排等
  2. 将生成的章节安排通过Loop over items节点来循环生成每章的小说内容
  3. 将生成的小说内容组合在一起, 并发送到用户的邮箱中

n8n支持很多的AI模型, 比如DeepSeek, GPT, Gemini(有免费调用额度, 国内使用需要绕一下)等, 这里我使用的是DeepSeek, 因为DeepSeek的输出比较符合我的预期

配置完成后的效果图如下 n8n-workflow

整个工作流可以分为上下两个部分

  • 生成内容
  • 发送内容

生成内容的部分, 依次使用了以下节点

  • 手动出发节点
  • Set节点,用来设置小说主题
  • AI Agent节点,用来生成标题,大纲,章节安排等
  • Split Out节点,选择对应的章节列表字段,转换成一个列表给后面的Loop over items节点使用
  • Loop over items节点,用来循环生成每章的小说安排
  • AI Agent节点,用来生成每章的小说内容

发送内容的部分, 依次使用了以下节点

  • Code节点,用来将生成的小说内容组合在一起
  • Email节点,用来发送邮件

其实可以使用chat trigger

配置AI Agent

第一个Agent的主要注意点是我们需要让ai输出对应的输出格式,这样我们后续才方便遍历章节安排。 点击下图的"required specific output format"按钮,激活之后,agent节点下面就会过一个"+“号 output-format

点击”+“号,就可以配置输出格式了, 这里我配置的输出格式如下

{
	"大纲": "California",
	"章节列表": [{
      "index": 0,
      "description": ""
    }],
    "标题":""
}

效果如下 output-parser

使用中文作为字段名也挺好的。

第二个Ai Agent就不需要指定输出格式了,因为输出就一个文本

DeepSeek的模型配置并不复杂,要配置的选项就一个api key,所以找到deepseek官网充值点钱然后创建一个api key就行。

配置邮箱

不同的邮箱使用可能会有一些差异,我这里使用的是qq邮箱。 要注意的是,在邮箱凭证中填写的邮箱密码不是qq密码,而是qq邮箱生成的一个授权码,我们需要开通对应邮箱的"POP3/IMAP/SMTP/Exchange/CardDAV 服务”, 开通这个服务还需要手机验证,具体的操作方法可以问问百度或者AI,这里就不赘述了。

使用代码聚合内容

我比较习惯使用Python, 所以使用以下代码来聚合最终的内容

# Loop over input items and add a new field called 'myNewField' to the JSON of each one
data = ""
length = len(_input.all())

for index, item in enumerate(_input.all()):
  if index == length - 1:
    data += item.json.output
  else:
    data += (item.json.output + "\n" + "------")
  
return {"data": data}

测试小技巧

测试工作流很简单,点一下"test workflow"就行,但是调用AI Agent可能需要钱或者很慢,所以我们可以在点击"Test App"之后将结果Pin一下,这样后面的节点就可以使用前面Pin住的节点的数据,会快很多。

邮件效果

email

公网访问

公网访问有很多种方式的啦,比如搞一台有公网ip的服务器,或者使用ngrok或者frp之类的工具内网穿透一下, 这里就不赘述了, 有兴趣的可以自己去了解一下。

这里主要介绍cloudflare的tunnel的使用, 前提是你要有一个域名哈,域名你可以买一个最便宜的或者申请一个免费的域名,我就是用的免费的域名,自己用的话完全够用。

设置tunnel

假设你已经有了cloudflare的账户及域名。 那么你可以到"Zero Trust" -> “网络” -> “Tunnels"创建一个tunnel(隧道) 点击创建隧道之后,根据提示一步步操作就行,我使用的是Cloudflared命令连接隧道。

最后就是配置公网域名映射,我的配置如下 public-hostname

通过这个域名就能访问你内网的服务啦,而且还是https协议的。

使用免费的Gemini接口

如果你有一个代理,并且通过这个代理能拿到Gemini的API Key的话,那么你可以在上一部公网访问的基础上,使用nginx或者caddy之类的web服务器在本地来代理Gemini的API,再通过cloudflare的tunnel转接一下,这样就可以使用免费的Gemini接口了。

我使用的caddy,配置如下

https://你的域名 {
    log {
        output file /var/log/caddy.gemini.log {
                roll_size 100mb
                roll_keep 5
                roll_keep_for 720h
        }
    }
    reverse_proxy https://generativelanguage.googleapis.com {
        header_up Host generativelanguage.googleapis.com
        header_up X-Forwarded-Proto {scheme}
        header_up X-Forwarded-For {remote}
    }
}

工作流文件

本文的n8n的工作流文件内容放在 https://github.com/youerning/blog/blob/master/n8n/novel-workflow.json 了,有兴趣可以自己下载下来看看

总结

个人认为,使用诸如n8n这样的工作流平台要要比自己维护脚本要方便一些,特别是n8n集成了超级多的插件或者说节点之后就用起来很爽,跟代码比起来肯定不够灵活,但是作为工作流平台我觉得已经超级方便了,而且使用大模型也非常的方便