Skip to content

Yht20927/xiaohongshu-cli

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

36 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

📕 Xiaohongshu Comment CLI

小红书评论 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

🤖 AI 评论生成

两种生成方式

方式 命令 适用场景
生成预览(推荐) getReply 先生成→人工审核→满意后手动 post,安全可控
分析+生成 suggest analyze 分析评论情感/优先级,再批量生成回复建议
一键自动 suggest --auto 分析→生成→发布全自动(含人格轮换+随机延迟+浏览穿插)

使用 getReply 生成回复

# 生成笔记的顶级评论(以普通用户身份)
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 更安全可控。

7 种内置人格

人格 特征 示例
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 收到不完整的指令。


🎭 行为模拟(browse)

模拟浏览行为,让账号保持"既看又发"的均衡活跃节奏(账号保护措施,非规避检测):

# 随机搜索热门词 → 看 1-2 条笔记 → 偶尔点赞评论
node cli.js browse --max-notes 2 --like-chance 0.2

# 指定关键词浏览
node cli.js browse 穿搭 美食 --max-notes 3

suggest --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 补救。

AI 与分析

命令 用途 示例
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

反馈闭环(SQLite 记忆层)

命令 用途
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 — WebSocket
  • better-sqlite3 — SQLite
  • Chrome + Tampermonkey + 油猴脚本
  • (可选)OpenAI-compatible API key

🔧 疑难排解

Chrome 连接问题(Firefox 正常但 Chrome 无法连接)

现象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 扩展获得相应权限。

解决步骤

  1. 在 Chrome 中打开 Tampermonkey 扩展,确保 "允许访问文件网址" 已开启:

    • 打开 chrome://extensions/
    • 找到 Tampermonkey → 点击 详情
    • 开启 ✅ 允许访问文件网址(Allow access to file URLs)

    参考文档:https://www.tampermonkey.net/faq.php?q=Q209#Q209

  2. 确保油猴脚本的 @connect 权限已授权:

    • 打开 Tampermonkey 管理面板 → 找到 "Bridge: Xiaohongshu" 脚本
    • 切换到 设置 标签 → 用户连接(User connections)
    • 确认 127.0.0.1localhost 均为 允许(Allow)
  3. 刷新 xiaohongshu.com 页面,打开 F12 → Console,确认看到:

    [Bridge] ✓ Registered with Bridge Server
    
  4. 验证连接:node cli.js status

其他常见问题

现象 可能原因 解决
Unauthorized token 不匹配 检查 config.json 和油猴脚本中的 token 是否一致(或 localStorage xhs_bridge_token
小红书返回了 HTML 页面 登录态失效 刷新 xiaohongshu.com 并重新登录
Request timeout 浏览器未打开 xiaohongshu.com 确保已打开并登录小红书
写操作频繁失败 触发风控 等待 30 分钟后再试

📝 License & 免责声明

  • 代码许可:MIT License © 2026 Yht20927
  • 免责声明:DISCLAIMER.md(使用前必读,含责任归属、禁止用途、合规建议)

使用本项目即表示同意 MIT 许可与免责声明的全部条款。本项目涉及第三方平台自动化操作,用户须自行评估并承担合规风险,必要时咨询执业律师。

About

基于 Bridge Framework 的小红书全自动管理工具。搜索视频、爬取全量评论(含嵌套回复)、AI 智能回复、运营仪表盘。

Topics

Resources

License

Contributing

Security policy

Stars

13 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors