Appearance
🍠 小红书选题 Agent:我怎么用 Agent 帮自己选出下一篇爆款
📌 这篇适合谁
- 在小红书/公众号做内容但选题全靠"感觉"的创作者
- 想做一个真实有用的 Agent 项目练手的开发者
- 学完 ReAct + Tool Use 想找一个落地场景的 Lv2 毕业生
- 对"AI 辅助内容创作"感兴趣但不知道从哪切入的人
这是案例库的第一篇。不是概念介绍——是我自己真实在用的工具。
我是🍋AI小柠檬,小红书 AI 教育博主。这个 Agent 是我给自己做的——每周用它生成选题池,从里面挑 2-3 个写。上线后我的选题命中率(发出去互动量 > 平均值)从 30% 提升到 65%。
写在前面:为什么选题是内容创作最值得自动化的环节 🎯
⚠️ 我踩过的坑
2025 年我刚开始做小红书时,选题完全靠"我觉得这个话题有人看"。结果:
- 花 3 小时写的深度技术文,点赞 12
- 随手发的一条吐槽"LangChain 文档太烂了",点赞 800+
不是内容质量不行,是选题方向错了。 用户不搜你写的关键词,你写得再好也没人看到。
后来我开始手动分析爆款:打开小红书搜"AI Agent",翻前 50 条笔记,记录标题模式、互动数据、发布时间。每次花 2 小时。
2 小时 × 每周 1 次 × 一年 = 100+ 小时花在"翻别人的笔记"上。
这就是典型的"重复、有规律、不需要创造力"的任务——Agent 的完美猎物。
1️⃣ 这个 Agent 做什么、不做什么 📦
💡 核心定位
只做选题分析,不做内容生成。 Agent 告诉你"写什么话题、用什么角度、标题怎么起",但不帮你写正文。
✅ Agent 做的事
| 步骤 | 具体动作 | 输出 |
|---|---|---|
| 1. 热点抓取 | 搜索目标领域近 7 天的高互动笔记 | 原始数据列表 |
| 2. 模式分析 | 提取标题结构、关键词、封面类型 | 爆款模式报告 |
| 3. 差异化选题 | 基于模式 + 你的定位生成选题建议 | 10 个选题(含标题、角度、预期数据) |
| 4. 排序打分 | 按"热度 × 差异化 × 你能写"三维打分 | 优先级排序 |
❌ Agent 不做的事
- 不生成正文(正文是创作者的核心价值)
- 不自动发布(发布需要人工审核封面和排版)
- 不保证爆款(提高概率,不保证结果)
2️⃣ 技术架构:ReAct + 三个工具 🏗
💡 一句话理解
一个 ReAct Agent + 三个工具(搜索、分析、生成)。不需要 Multi-Agent,不需要 LangGraph——单 Agent + Function Calling 就够。
架构图
用户输入: "AI Agent 教育" 领域
↓
┌─────────────────────────────────┐
│ ReAct Agent │
│ (System Prompt: 选题分析师) │
│ │
│ Tool 1: search_trending() │ ← 搜索近 7 天高互动笔记
│ Tool 2: analyze_patterns() │ ← 提取爆款模式
│ Tool 3: generate_topics() │ ← 生成差异化选题
└─────────────────────────────────┘
↓
输出: 10 个选题建议(标题 + 角度 + 评分)为什么不用 Multi-Agent
这个任务是线性流程:搜索 → 分析 → 生成。没有分支、没有并行、没有需要讨论的决策点。用 Multi-Agent 是过度设计。
判断标准:如果任务可以用"先做 A,再做 B,最后做 C"描述清楚,单 Agent 就够。Multi-Agent 是给"需要不同角色讨论/并行处理/互相校验"的场景准备的。
3️⃣ 核心代码:完整可跑版本 💻
Step 1:定义工具
python
import json
import httpx
from datetime import datetime, timedelta
from langchain_core.tools import tool
@tool
def search_trending(keyword: str, days: int = 7) -> str:
"""搜索小红书近 N 天指定关键词的高互动笔记。
返回标题、点赞数、收藏数、评论数、发布时间。"""
# 方案 A:用第三方数据平台 API(新红数据/千瓜数据)
# 方案 B:用 SerpAPI 的小红书搜索(海外可用)
# 方案 C:自建爬虫(不推荐,反爬严格)
# 这里用 SerpAPI 示例(需要 API Key)
params = {
"engine": "xiaohongshu",
"q": keyword,
"api_key": "YOUR_SERPAPI_KEY",
"sort": "likes", # 按点赞排序
"time_range": f"{days}d",
}
# 实际项目中替换为真实 API 调用
# response = httpx.get("https://serpapi.com/search", params=params)
# 模拟返回数据(开发阶段用)
mock_results = [
{"title": "AI Agent 入门:3 天搞懂 ReAct 原理", "likes": 2341, "collects": 892, "comments": 156, "date": "2026-05-08"},
{"title": "别再只会调 API 了!手写一个 Agent 只要 50 行", "likes": 1876, "collects": 723, "comments": 98, "date": "2026-05-07"},
{"title": "面试官问我 Agent 和 ChatBot 的区别,我愣住了", "likes": 3102, "collects": 1205, "comments": 234, "date": "2026-05-06"},
{"title": "LangGraph vs AutoGen vs CrewAI 选哪个?一张图说清楚", "likes": 1543, "collects": 678, "comments": 87, "date": "2026-05-09"},
{"title": "我用 Agent 自动写周报,老板以为我加班了", "likes": 4521, "collects": 1893, "comments": 312, "date": "2026-05-05"},
]
return json.dumps(mock_results, ensure_ascii=False)
@tool
def analyze_patterns(notes_json: str) -> str:
"""分析一批笔记的爆款模式。
输入:笔记列表 JSON。输出:标题模式、关键词、互动规律。"""
notes = json.loads(notes_json)
# 标题模式分析
patterns = {
"数字开头": 0,
"疑问句": 0,
"对比式": 0,
"故事式": 0,
"否定式": 0,
}
keywords = {}
total_engagement = []
for note in notes:
title = note["title"]
engagement = note["likes"] + note["collects"] + note["comments"]
total_engagement.append(engagement)
# 简单模式匹配(生产环境用 LLM 做更精准的分类)
if any(c.isdigit() for c in title[:3]):
patterns["数字开头"] += 1
if "?" in title or "吗" in title:
patterns["疑问句"] += 1
if "vs" in title.lower() or "还是" in title:
patterns["对比式"] += 1
if "我" in title:
patterns["故事式"] += 1
if "别" in title or "不要" in title or "不" in title[:5]:
patterns["否定式"] += 1
# 关键词提取(简化版)
for word in ["Agent", "AI", "LangChain", "面试", "入门", "实战"]:
if word.lower() in title.lower():
keywords[word] = keywords.get(word, 0) + 1
avg_engagement = sum(total_engagement) / len(total_engagement) if total_engagement else 0
analysis = {
"sample_size": len(notes),
"avg_engagement": round(avg_engagement),
"title_patterns": patterns,
"hot_keywords": dict(sorted(keywords.items(), key=lambda x: -x[1])[:5]),
"insight": "故事式(第一人称经历)和否定式(打破认知)标题互动最高",
}
return json.dumps(analysis, ensure_ascii=False)
@tool
def generate_topics(
analysis_json: str,
my_positioning: str = "AI Agent 教育博主,复旦+大厂背景,教小白学 Agent"
) -> str:
"""基于爆款分析结果 + 博主定位,生成 10 个差异化选题建议。
每个选题包含:标题、角度、预期互动、难度。"""
analysis = json.loads(analysis_json)
# 实际项目中这一步交给 LLM 做(更灵活)
# 这里展示结构化输出的格式
topics = [
{
"title": "我面试了 20 个'会 LangChain'的人,只有 3 个真懂 Agent",
"angle": "面试官视角 + 故事式 + 打破认知",
"why": "结合故事式和否定式两种高互动模式",
"difficulty": "中(需要真实面试经历素材)",
"expected_engagement": "2000-4000",
},
{
"title": "Agent 开发 3 个月,我走过的 5 个弯路(附正确路线)",
"angle": "个人经历复盘 + 数字开头 + 实用价值",
"why": "故事式 + 数字开头双重模式叠加",
"difficulty": "低(整理自己的学习经历)",
"expected_engagement": "1500-3000",
},
{
"title": "别学 LangChain 了,2026 年 Agent 框架只推荐这一个",
"angle": "否定式 + 推荐 + 时效性",
"why": "否定式标题 + 明确推荐 = 高争议高互动",
"difficulty": "高(需要框架深度对比的底气)",
"expected_engagement": "3000-5000",
},
]
return json.dumps(topics[:10], ensure_ascii=False, indent=2)Step 2:组装 Agent
python
from langchain_openai import ChatOpenAI
from langgraph.prebuilt import create_react_agent
# 工具列表
tools = [search_trending, analyze_patterns, generate_topics]
# System Prompt —— 这是 Agent 的"人格"
SYSTEM_PROMPT = """你是一个小红书选题分析师。你的任务是帮助博主找到高互动潜力的选题。
工作流程:
1. 先用 search_trending 搜索目标领域的近期爆款
2. 用 analyze_patterns 分析爆款的标题模式和关键词
3. 用 generate_topics 基于分析结果生成差异化选题
注意事项:
- 选题必须有差异化角度,不是简单复制爆款标题
- 考虑博主的定位和能力范围
- 每个选题要说明"为什么这个角度能火"
- 优先推荐"博主有真实经历可写"的选题
"""
# 创建 Agent
llm = ChatOpenAI(model="gpt-4o", temperature=0.3)
agent = create_react_agent(llm, tools, prompt=SYSTEM_PROMPT)
# 运行
result = agent.invoke({
"messages": [("user", "帮我分析'AI Agent'领域的选题,我的定位是 AI 教育博主")]
})
print(result["messages"][-1].content)Step 3:输出示例
📊 选题分析报告
【数据基础】近 7 天 "AI Agent" 领域 Top 50 笔记分析
- 平均互动量:2,677(点赞+收藏+评论)
- 高互动标题模式:故事式 40%、否定式 25%、数字开头 20%
【推荐选题 Top 3】
1️⃣ "我面试了 20 个'会 LangChain'的人,只有 3 个真懂 Agent"
角度:面试官视角揭秘
预期互动:2000-4000
⭐ 推荐理由:你有真实面试经历,故事式+否定式双模式
2️⃣ "Agent 开发 3 个月,我走过的 5 个弯路"
角度:个人复盘+避坑指南
预期互动:1500-3000
⭐ 推荐理由:低难度高产出,整理已有经历即可
3️⃣ "别学 LangChain 了,2026 年只推荐这一个框架"
角度:争议性推荐
预期互动:3000-5000
⭐ 推荐理由:否定式标题天然高争议,但需要你有框架对比的底气
...(共 10 个选题)4️⃣ 数据源选型:小红书数据从哪来 📡
⚠️ 这是整个项目最难的一步
小红书反爬非常严格。直接爬会被封号、封 IP。不要自己写爬虫。
📊 四种数据获取方案
| 方案 | 成本 | 数据质量 | 合规性 | 推荐度 |
|---|---|---|---|---|
| 新红数据 API | ¥299/月起 | ⭐⭐⭐⭐⭐ | ✅ 合规 | ⭐⭐⭐⭐⭐ |
| 千瓜数据 API | ¥199/月起 | ⭐⭐⭐⭐ | ✅ 合规 | ⭐⭐⭐⭐ |
| SerpAPI | $50/月 | ⭐⭐⭐ | ✅ 合规 | ⭐⭐⭐ |
| 自建爬虫 | 免费 | ⭐⭐ | ❌ 违规风险 | ❌ |
我的选择:新红数据。贵但稳定,数据维度全(标题、正文、标签、互动数据、粉丝画像),有官方 API 文档。
预算有限的替代方案:手动导出。每周花 15 分钟在小红书搜索页手动记录 Top 20 笔记的标题和互动数据到 Excel,然后让 Agent 分析 Excel。不优雅但免费。
5️⃣ 生产化:从 Demo 到每周真实使用 🔧
我的实际使用流程
每周日晚 → 运行 Agent → 生成 10 个选题 → 人工挑 3 个 → 周一到周三各写一篇生产化需要加的东西
| 补丁 | 为什么需要 | 实现方式 |
|---|---|---|
| 历史去重 | 不要推荐你已经写过的话题 | 维护一个"已写选题"列表,Agent 生成时排除 |
| 时效性过滤 | 3 天前的热点可能已经过时 | search_trending 只取 3 天内数据 |
| 个人数据反馈 | 你发过的笔记哪些火了,反哺选题模型 | 每周把自己笔记的互动数据喂给 Agent |
| 定时运行 | 不用每次手动触发 | cron job 每周日 20:00 自动运行,结果发到微信/飞书 |
历史去重的实现
python
import json
from pathlib import Path
HISTORY_FILE = "topic_history.json"
def load_history() -> list[str]:
if Path(HISTORY_FILE).exists():
return json.loads(Path(HISTORY_FILE).read_text())
return []
def save_topic(title: str):
history = load_history()
history.append(title)
Path(HISTORY_FILE).write_text(json.dumps(history, ensure_ascii=False))
def is_duplicate(title: str, threshold: float = 0.8) -> bool:
"""用简单的关键词重叠率判断是否重复"""
history = load_history()
title_words = set(title)
for past_title in history:
past_words = set(past_title)
overlap = len(title_words & past_words) / max(len(title_words), 1)
if overlap > threshold:
return True
return False6️⃣ 效果验证:上线前后的数据对比 📊
我的真实数据(2025.09 - 2026.03)
| 指标 | 使用前(纯靠感觉) | 使用后(Agent 辅助选题) |
|---|---|---|
| 每周选题耗时 | 2 小时 | 15 分钟(运行 + 人工筛选) |
| 选题命中率 | 30%(互动 > 平均值) | 65% |
| 月均爆款数 | 0-1 篇 | 2-3 篇 |
| 内容方向 | 随机发散 | 聚焦 3 个高互动赛道 |
关键发现:Agent 最大的价值不是"帮你想标题"——是帮你看到你自己看不到的数据规律。比如我一直以为"技术深度文"是我的优势,但数据显示"面试经历分享"的互动量是技术文的 3 倍。
7️⃣ 常见坑与修复 🚨
| 坑 | 症状 | 修复 |
|---|---|---|
| 选题同质化 | Agent 每次推荐的选题都差不多 | 在 Prompt 里加"必须和上周推荐的不同" + 传入历史选题 |
| 数据时效性 | 推荐的话题已经过了热度窗口 | 只用 3 天内数据,不用 7 天 |
| 脱离定位 | Agent 推荐了你写不了的话题 | 在 Prompt 里明确写"我的能力边界是 X" |
| 标题党倾向 | Agent 生成的标题过于夸张 | 加约束"标题必须有实质内容支撑,不能纯标题党" |
| 忽略平台规则 | 推荐了可能被限流的敏感词 | 维护一个"小红书敏感词列表",生成后过滤 |
8️⃣ 扩展方向:从选题到内容全链路 🚀
这个 Agent 只是内容创作链路的第一环。后续可以扩展:
选题 Agent → 大纲 Agent → 配图建议 Agent → 标题 A/B 测试 Agent → 发布时间推荐 Agent但不要一次全做。先把选题 Agent 用 3 个月,验证有效,再扩展下一环。
🎯 为什么不一步到位
我见过太多人做"全自动内容生成系统"——从选题到发布全自动。结果:
- 内容质量不可控
- 账号被判定为营销号限流
- 粉丝能看出来是 AI 写的,取关
Agent 辅助创作 ≠ Agent 替代创作。 选题可以自动化,但正文必须是你自己写的——这是你和粉丝之间信任的基础。
🎓 总结
🎯 一句话总结
小红书选题 Agent = ReAct 单 Agent + 搜索/分析/生成三个工具。数据源用第三方平台 API,不要自己爬。核心价值不是"帮你想标题",是"帮你看到数据规律"。选题可以自动化,正文不行。
💡 自测题
- 为什么这个场景用单 Agent 就够,不需要 Multi-Agent?
- 小红书数据获取有哪几种方案?为什么不推荐自建爬虫?
- 选题 Agent 的三个工具分别解决什么问题?
- 生产化需要加哪些"补丁"?为什么需要历史去重?
- 为什么说"Agent 辅助选题"而不是"Agent 自动生成内容"?
答不上来的,回头再读一遍对应章节 ✍️
📌 转载声明
本文为🍋AI小柠檬原创。 转载请注明来源,付费产品包内禁止转载。