1. 首页 > 技术教程 > 正文

AI Agent 自动整理选题库:从日志、搜索词和用户问题里找新文章

很多站长和内容运营都有这种体验:坐在电脑前憋了半天,选题库还是空的。其实最有价值的内容方向往往藏在你的服务器里——Nginx 访问日志里的 404 记录、站内搜索框里填满的奇怪关键词、还有后台收到的各种用户提问。把这些“数据废料”扔给 AI Agent,能自动整理成一份高价值的选题库。主机选这就带你用 n8n 和大模型,在 VPS 上搭建这套自动化工作流。

zhujixuan TASK 267

基于 n8n 部署 AI Agent 自动整理选题库

n8n 是目前 VPS 上搭建自动化工作流的首选工具,它不仅能连接各种 API,还能直接在服务器上执行脚本读取日志。我们用 Docker 部署 n8n,配合 DeepSeek 或 Ollama 本地模型,构建一个每天自动运行的选题挖掘 Agent。

#### Docker 部署 n8n 与环境配置

直接用 Docker Compose 管理最省心,方便后期挂载数据卷和配置环境变量。新建一个 `docker-compose.yml` 文件:

yaml
version: "3.8"
services:
n8n:
image: n8nio/n8n
restart: always
ports:
– "5678:5678"
environment:
– N8N_BASIC_AUTH_ACTIVE=true
– N8N_BASIC_AUTH_USER=admin
– N8N_BASIC_AUTH_PASSWORD=your_strong_password # 务必修改
– WEBHOOK_URL=https://your-domain.com/ # 配置反向代理后填入域名
volumes:
– n8n_data:/home/node/.n8n
– /var/log/nginx:/logs:ro # 只读挂载 Nginx 日志目录,关键点
volumes:
n8n_data:

启动服务:`docker-compose up -d`。这里有个细节,我们把宿主机的 `/var/log/nginx` 以只读模式挂载到了容器内。这样 n8n 内部的节点就能直接读取日志文件,而不用额外配置 SSH 或 FTP,安全性更高。

#### 编写脚本清洗原始日志数据

原始日志里充斥着静态资源请求、爬虫抓取和健康检查,直接丢给 AI 既浪费 Token 又干扰判断。我们需要在 n8n 里用“Execute Command”节点先清洗数据。

如果你想筛选出用户在站内搜索的关键词(假设搜索 URL 是 `/search?q=keyword`),可以用这条命令:

grep "/search?" /logs/access.log | awk -F'q=' '{print $2}' | awk '{print $1}' | sort | uniq -c | sort -rn | head -20

这条命令的逻辑很清晰:找到搜索请求,截取 `q=` 后面的参数,去重并按频率排序,只取前 20 个。对于挖掘 404 选题,把 grep 条件换成 `" 404 "` 即可,看看用户都在找什么找不到的页面。

#### 调优 Prompt 提升选题命中率

数据清洗完毕,就轮到 AI Agent 发挥作用了。在 n8n 中添加“OpenAI”或“HTTP Request”节点(如果调用 DeepSeek API)。System Prompt 决定了选题的质量,别写那种“请帮我分析”的废话,直接给规则:

你是一个拥有 10 年经验的技术主编。我会给你一份用户搜索词和 404 访问记录列表。
请根据这些数据,挖掘出 5 个最具潜力的技术文章选题。
要求:
1. 标题要包含具体的技术痛点,例如“Docker 部署失败”而不是“Docker 教程”。
2. 标题必须包含长尾关键词,利于 SEO。
3. 输出格式为 JSON:[{"title": "标题", "reason": "推荐理由", "keywords": ["关键词1", "关键词2"]}]。
4. 忽略掉明显的测试请求和爬虫特征词。

这种结构化的 Prompt 能让 Agent 直接输出可用的 JSON 数据,方便你存入数据库或通过 Webhook 发送到飞书/钉钉群。

接入用户问题与反馈数据流

除了日志,后台收到的工单和评论也是选题富矿。如果你的站点支持 Webhook 通知(如 WordPress 或有自定义后台),可以在 n8n 里创建一个 Webhook 节点接收数据。

为了防止 Agent 拿到用户的敏感信息(如邮箱、手机号),在把数据传给大模型之前,必须加一个“Code”节点做数据脱敏。

javascript
// 简单的脱敏逻辑示例
const text = $input.first().json.content;
const maskedText = text.replace(/([a-zA-Z0-9._-]+@[a-zA-Z0-9._-]+\.[a-zA-Z0-9._-]+)/gi, '[EMAIL_REDACTED]');
return { json: { content: maskedText } };

老鸟叮嘱:别让 Agent 把数据库跑崩

这套方案虽然好用,但有几个坑得提前踩平。

第一,日志文件可能很大。别让 Agent 每次都全量读取整个 `access.log`,那会把内存吃光。可以在 Cron 定时任务里,每天凌晨把昨天的日志单独切分出来一份 `access_yesterday.log`,Agent 只处理这份小文件。

第二,API 调用成本。如果你的站点流量很大,搜索词成千上万,全部丢给 API 费用不菲。建议在脚本阶段就做一层过滤,比如只统计搜索次数大于 3 次的关键词。

第三,隐私合规。日志里可能夹杂着 Referer 头里的敏感参数。虽然我们做了脱敏,但建议尽量在本地部署 Ollama 运行小参数模型(如 Llama 3 或 Qwen)来处理这些内网数据,别把原始日志直接传给公网 API。

FAQ

Q:这套工作流必须用 n8n 吗?可以用 Docker 部署 Python 脚本代替吗?
A:n8n 胜在可视化配置和快速迭代。如果你擅长 Python,完全可以用 Docker 起一个定时任务容器,用 LangChain 调用模型,逻辑是一样的,而且资源占用可能更低。

Q:本地 VPS 内存只有 2G,跑不动 Ollama 怎么办?
A:2G 内存确实跑不动本地大模型。建议调用 DeepSeek、Moonshot 等国产 API 的低成本模型,或者使用 OpenAI 的 `gpt-4o-mini`,处理文本分类和摘要任务非常便宜且速度快。

Q:如何处理 AI 生成的 JSON 格式错误?
A:大模型偶尔会抽风,JSON 结构不完整。在 n8n 的解析节点后,务必接一个“Error Trigger”或者 IF 分支,如果解析失败,自动把原始文本重发一次或记录到错误日志,别让整个流程卡死。

Q:除了 Nginx 日志,还能分析哪些数据源?
A:只要能文本化的数据都能分析。比如 Google Search Console 的导出报表、服务器监控报错日志、甚至是竞品的 RSS 更新记录。

这套自动化选题挖掘流程,本质上就是把运维数据转化为内容资产。只要脚本写好,每天早上醒来,Agent 就已经把昨天用户最关心的痛点整理成了待办列表,比拍脑袋想选题靠谱得多。

转载请注明出处:https://www.zhujixuan.com/jishujiaocheng/10243.html 商家投稿邮箱:zhujixuanblog@qq.com