小红书评论 CLI 工具。基于 Bridge Framework(Bridge Server + 油猴脚本),支持笔记搜索、评论获取、AI 人格化回复、行为模拟、数据仪表盘。
核心亮点:内置可配置的操作节奏控制 — 人格化回复 + 随机延迟 + 浏览穿插 + server 端写节流,作为账号保护措施(不保证避免限流,详见 DISCLAIMER)。
完整声明见
DISCLAIMER.md。摘要:
- 本项目与小红书(xiaohongshu.com)无任何关联,未获其授权或认可。"小红书"商标为相应权利人所有。
- 本工具仅供用户本人在其自己的账号上使用,用于回复评论、互动、管理自己的账号活动。不得用于操作他人账号、刷量、网络水军、虚假宣传等违法或违规用途。
- 用户对自身使用行为及后果(含账号被封、数据丢失、法律责任)承担全部责任,作者不承担任何责任。
- 本项目按"现状"提供,不保证使用后不会触发平台风控/封号,不担保功能可用性。
- 使用本工具即视为已阅读并同意
DISCLAIMER.md全部内容。
| 功能 | 说明 |
|---|---|
| 🔍 笔记搜索 | 关键词搜索笔记,支持增量获取 |
| 💬 评论获取 | 获取评论及嵌套回复,--new 增量拉取 |
| 🤖 AI 人格化回复 | 7 种人格自动轮换,避免"AI 味" |
| 🎭 行为模拟 | 模拟真实浏览(搜索→看笔记→点赞),穿插在发布流程中 |
| ⏱️ 随机延迟 | 发布间隔 45-180s 随机 + 疲劳累加,可配置操作节奏 |
| 🛡️ 风控断路器 | 10 分钟内 post 失败 ≥3 次自动暂停 |
| 📊 数据仪表盘 | 本地 HTML 可视化 |
| 💾 持久化记忆 | SQLite 存储评论、语料、失败模式 |
npm install
# 1. 复制配置
cp config.example.json config.json
# 编辑 config.json:自定义 bridge.token(勿用默认值,见 SECURITY.md);llm.api_key 优先用环境变量
# 2. 启动 Bridge Server
node server.js
# 3. Chrome 安装油猴脚本 scripts/xiaohongshu.user.js
# ⚠️ Chrome 用户:需先在 Tampermonkey 中启用"允许访问文件网址"
# 详见下方「疑难排解」→ Chrome 连接问题
# 打开 xiaohongshu.com 并登录
# 在浏览器控制台设置与 config.json 一致的 bridge token(脚本从 localStorage 读取):
# localStorage.setItem('xhs_bridge_token', '<你的 token>')
# 4. 验证连接
node cli.js status
# 5. 开始使用
node cli.js my
node cli.js search "穿搭"
node cli.js get <note_id> --page 1 --depth 1
node cli.js suggest <note_id> --auto| 方式 | 命令 | 适用场景 |
|---|---|---|
| 生成预览(推荐) | getReply |
先生成→人工审核→满意后手动 post,安全可控 |
| 分析+生成 | suggest |
先 analyze 分析评论情感/优先级,再批量生成回复建议 |
| 一键自动 | suggest --auto |
分析→生成→发布全自动(含人格轮换+随机延迟+浏览穿插) |
# 生成笔记的顶级评论(以普通用户身份)
node cli.js getReply <note_id> --count 3
# 生成对特定评论的回复(以博主身份)
node cli.js getReply <note_id> <cid>
# 批量生成回复(笔记下所有未回复评论)
node cli.js getReply <note_id> --batch
# 指定人格生成
node cli.js getReply <note_id> --persona casual_friend
# 交互式审核(生成→编辑→选择发布)
node cli.js getReply <note_id> <cid> --interactive推荐工作流:先用
getReply生成回复预览 → 审核质量 → 满意后用node cli.js post <note_id> "回复内容" --reply-to <cid>手动发布。这比suggest --auto更安全可控。
| 人格 | 特征 | 示例 |
|---|---|---|
| casual 朋友 | 口语短句,1-2 个 emoji | "哈哈哈这也太真实了😂" |
| 好奇提问型 | 以问句为主,真诚追问 | "这个是在哪里买的呀?" |
| 经验分享型 | "我之前也..." | "我之前试过,确实不错" |
| 热情追捧型 | 感叹号+emoji,情绪化 | "啊啊啊这个绝了!!" |
| 温和探讨型 | "我觉得..."委婉补充 | "说得挺有道理的,不过..." |
| 轻松幽默型 | 玩梗、自嘲、夸张 | "我的手:我会了 我的脑:不你不会" |
| 简短反应型 | 极简,3-15 字 | "真实👍" "马住了" |
使用示例:
# getReply:生成回复预览(不发布,推荐日常使用)
node cli.js getReply <note_id> --count 3 # 生成 3 条候选评论
node cli.js getReply <note_id> <cid> # 回复特定评论
node cli.js getReply <note_id> --batch # 批量回复所有未回复评论
# suggest:分析 + 生成 + 可选自动发布
node cli.js suggest <note_id> # 生成建议(不发布)
node cli.js suggest <note_id> --auto # 自动发布(含人格轮换+延迟+浏览)
node cli.js suggest <note_id> --fast # 调试模式(跳过所有延迟)AI 回复的质量取决于提示词(Prompt)。本项目提示词模板位于 prompts/ 目录,可自由修改以适配不同的回复风格:
prompts/
├── comment.md # 顶级评论生成模板(以普通用户身份评论笔记)
├── reply.md # 单条回复模板(以博主身份回复评论者)
└── replies-batch.md # 批量回复模板(一次生成多条回复)
模板格式:每个 .md 文件分为 === SYSTEM === 和 === USER === 两部分,使用 {{PLACEHOLDER}} 占位符注入运行时数据。
常见自定义场景:
# 1. 调整回复策略(修改 reply.md 中的策略分类)
# 例如:添加新的评论类型("求助型"→ 给具体操作步骤)
vim prompts/reply.md
# 2. 修改人格模板(修改 lib/personas.js 中的 promptPrefix/forbiddenWords/examples)
vim lib/personas.js
# 3. 调整全局回复风格(修改 reply-strategy.md,会被 suggest 命令自动加载)
vim reply-strategy.md
# 4. 验证模板格式是否正确
node cli.js validate-prompts模板占位符说明:
| 占位符 | 来源 | 说明 |
|---|---|---|
{{NOTE_BLOCK}} |
笔记缓存(标题/正文/标签) | 笔记内容上下文 |
{{COMMENT_TEXT}} |
目标评论原文 | 需要回复的用户评论 |
{{PERSONA_PROMPT}} |
lib/personas.js |
当前人格的风格指令 |
{{SCOPED_BLOCK}} |
SQLite 记忆层 | 历史成功语料 + 失败避雷 + 禁复用清单 |
{{IMAGE_HINT}} |
笔记配图 | 视觉模型可用时的图片提示 |
{{COUNT_HINT}} |
--count N 参数 |
生成 N 条不同评论的指令 |
提示:修改模板后务必运行
node cli.js validate-prompts校验格式。修改personas.js后建议用getReply --count 3测试生成效果。模板中的占位符如果拼写错误会原样保留在 prompt 中(如{{TYPO}}),导致 LLM 收到不完整的指令。
模拟浏览行为,让账号保持"既看又发"的均衡活跃节奏(账号保护措施,非规避检测):
# 随机搜索热门词 → 看 1-2 条笔记 → 偶尔点赞评论
node cli.js browse --max-notes 2 --like-chance 0.2
# 指定关键词浏览
node cli.js browse 穿搭 美食 --max-notes 3suggest --auto 已内置 browse 穿插:每发约 5 条评论自动穿插一次浏览+点赞。
| 命令 | 用途 | 示例 |
|---|---|---|
my |
我的笔记列表 | node cli.js my |
user-notes |
查看某用户的作品列表 | node cli.js user-notes <uid> --count 30 |
search |
搜索笔记 | node cli.js search "关键词" --count 5 |
get |
获取评论 | node cli.js get <id> --page 1 --depth 1 |
post |
发表评论/回复 | node cli.js post <id> "内容" --reply-to <cid> |
like |
点赞评论 | node cli.js like <id> <cid> |
delete |
删除评论 | node cli.js delete <id> <cid> |
查看某用户作品(配合 search):
search结果含uid+xsec_token,会自动按 uid 缓存 token;随后直接node cli.js user-notes <uid>即可,无需手动传 token。干净会话下多数用户无需 token;触发风控(461)时再--token <xsec_token> --source pc_note|pc_feed补救。
| 命令 | 用途 | 示例 |
|---|---|---|
getReply |
AI 生成回复文本(推荐,不发布) | node cli.js getReply <id> --count 3 |
analyze |
AI 分析评论情感/优先级 | node cli.js analyze <id> |
suggest |
AI 分析+生成回复(可选自动发布) | node cli.js suggest <id> --auto |
browse |
模拟浏览行为 | node cli.js browse --max-notes 2 |
dashboard |
数据仪表盘 HTML | node cli.js dashboard |
validate-prompts |
校验提示词模板格式 | node cli.js validate-prompts |
| 命令 | 用途 |
|---|---|
replied |
已回复 cid 列表 |
corpus search/recent/stats |
回复语料库 |
failures |
失败模式 top 10 |
dedup |
查重护栏 |
config.json(从 config.example.json 复制):
{
"bridge": {
"host": "127.0.0.1",
"port": 19424,
"token": "your-bridge-token"
},
"llm": {
"api_key": "sk-...",
"base_url": "https://api.openai.com/v1",
"model": "gpt-4o-mini",
"max_tokens": 4096,
"timeout_ms": 60000,
"max_retries": 3
}
}环境变量(优先级更高,推荐用于密钥,避免把 api_key 写进 config.json 后误提交):
export OPENAI_API_KEY="sk-..."
export OPENAI_BASE_URL="https://..."
export OPENAI_MODEL="gpt-4o-mini"
⚠️ bridge.token必须自定义且唯一,bridge默认仅监听127.0.0.1不得暴露公网。详见SECURITY.md。
CLI (cli.js) → HTTP/WS → Bridge Server (:19424) → 油猴脚本 → 页面 axios → 小红书 API
签名安全:油猴脚本劫持页面 webpack axios 实例,所有签名(x-s/x-s-common/x-t)由官方前端自动注入。
账号保护模块(降低限流风险):
lib/jitter.js— 人类行为延迟工具库lib/personas.js— 7 种人格模板池lib/commands/browse.js— 模拟浏览行为
以下设计目的是提供可配置的操作节奏控制,作为账号保护措施(不保证避免限流,详见 DISCLAIMER)。
| 维度 | 对策 |
|---|---|
| 写操作过快 | Bridge Server 服务端 per-site 强制 ≥40s 随机间隔(router.js _enforceThrottle),物理上无法快于下限 |
| 发布节奏固定 | suggest --auto 发布间隔 45-180s 随机 + 疲劳累加 |
| 内容模板化 | 7 种人格自动轮换 + AI 特征词黑名单 + 接地指令(回复必须基于评论原文) |
| 只发不看 | 每发 ~5 条穿插 browse 浏览+点赞 |
| 请求模式固定 | search sort 参数 90/10 随机切换 |
| 重复内容 | reply_corpus UNIQUE 去重 + LLM 重写 |
| 回复不接地 | suggestReplies 硬要求评论原文 text + post 接地闸门(reply-to 的 cid 必须已在评论记忆中) |
| 高频失败 | 10 分钟窗口断路器(非累计值) |
xiaohongshu-cli/
├── cli.js # CLI 入口
├── server.js # Bridge Server
├── config.json # 配置
├── lib/
│ ├── commands/ # 命令模块
│ │ ├── get.js # 获取评论
│ │ ├── post.js # 发表评论
│ │ ├── getReply.js # AI 回复生成(ReplyEngine)
│ │ ├── suggest.js # AI 分析+回复建议(含人格化+随机延迟)
│ │ ├── browse.js # 模拟浏览行为
│ │ ├── search.js # 搜索笔记
│ │ ├── user-notes.js # 查看某用户作品(配合 search 自动复用 token)
│ │ └── ...
│ ├── memory/ # SQLite 持久化记忆层
│ ├── reply-engine/ # ReplyEngine 独立评论生成模块
│ ├── personas.js # 7 种人格模板池
│ ├── jitter.js # 人类行为延迟工具库
│ ├── llm.js # LLM 封装(OpenAI/Anthropic 双格式)
│ └── ...
├── prompts/ # 🎨 提示词模板(可自定义)
│ ├── comment.md # 顶级评论生成模板
│ ├── reply.md # 单条回复模板
│ └── replies-batch.md # 批量回复模板
├── scripts/
│ └── xiaohongshu.user.js # 油猴脚本
├── storage/
│ └── xiaohongshu.db # SQLite 数据库
├── reply-strategy.md # 回复策略模板
├── SKILL.md # Agent 技能文档
└── README.md # 本文档
- Node.js 18+
ws— WebSocketbetter-sqlite3— SQLite- Chrome + Tampermonkey + 油猴脚本
- (可选)OpenAI-compatible API key
现象:node cli.js status 显示无连接,或命令报错 Bridge Server 未启动 / Request timeout,但 Bridge Server 确实在运行,且 Firefox 浏览器连接正常。
原因:Chrome 的 Private Network Access(PNA)安全策略会阻止公网站点(xiaohongshu.com)访问本地地址(127.0.0.1)。油猴脚本通过 GM_xmlhttpRequest 绕过此限制,但需要 Tampermonkey 扩展获得相应权限。
解决步骤:
-
在 Chrome 中打开 Tampermonkey 扩展,确保 "允许访问文件网址" 已开启:
- 打开
chrome://extensions/ - 找到 Tampermonkey → 点击 详情
- 开启 ✅ 允许访问文件网址(Allow access to file URLs)
- 打开
-
确保油猴脚本的
@connect权限已授权:- 打开 Tampermonkey 管理面板 → 找到 "Bridge: Xiaohongshu" 脚本
- 切换到 设置 标签 → 用户连接(User connections)
- 确认
127.0.0.1和localhost均为 允许(Allow)
-
刷新
xiaohongshu.com页面,打开 F12 → Console,确认看到:[Bridge] ✓ Registered with Bridge Server -
验证连接:
node cli.js status
| 现象 | 可能原因 | 解决 |
|---|---|---|
Unauthorized |
token 不匹配 | 检查 config.json 和油猴脚本中的 token 是否一致(或 localStorage xhs_bridge_token) |
小红书返回了 HTML 页面 |
登录态失效 | 刷新 xiaohongshu.com 并重新登录 |
Request timeout |
浏览器未打开 xiaohongshu.com | 确保已打开并登录小红书 |
| 写操作频繁失败 | 触发风控 | 等待 30 分钟后再试 |
- 代码许可:MIT License © 2026 Yht20927
- 免责声明:
DISCLAIMER.md(使用前必读,含责任归属、禁止用途、合规建议)
使用本项目即表示同意 MIT 许可与免责声明的全部条款。本项目涉及第三方平台自动化操作,用户须自行评估并承担合规风险,必要时咨询执业律师。