ai-goofish-monitor:用 AI 自动盯闲鱼商品的开源监控系统

ai-goofish-monitor 是 Usagi-org 开源的闲鱼商品监控系统,基于 Playwright 和 AI 实现多任务实时/定时监控,提供 Web 管理界面、AI 商品分析、多账号与代理轮换、通知推送和 Docker 部署能力。

ai-goofish-monitor 是 Usagi-org 开源的闲鱼商品监控系统。

它的目标很明确:把闲鱼搜索、筛选、商品分析、结果记录和通知推送自动化,帮助用户从大量二手商品里更快找到符合条件的目标。项目基于 Playwright 做页面自动化,再接入支持图片输入的 AI 模型,对商品信息做进一步判断。

项目地址:https://github.com/Usagi-org/ai-goofish-monitor

先说结论

ai-goofish-monitor 更像一个“闲鱼采购情报面板”,而不是简单的关键词提醒脚本。

它有几个明显特点:

  • 有完整 Web 管理界面,可以管理任务、账号、AI 标准、日志和结果。
  • 支持多任务并发,每个任务可以配置关键词、价格、筛选条件和 AI Prompt。
  • 使用 Playwright 抓取闲鱼页面,适合处理需要登录态和页面交互的场景。
  • 使用 AI 判断商品是否符合需求,不只依赖关键词匹配。
  • 支持 ntfy.sh、企业微信、Bark、Telegram、Webhook 等通知渠道。
  • 支持 Cron 定时任务、多账号管理、代理轮换、失败重试和 Docker 部署。

它适合经常在闲鱼找特定商品的人,比如二手数码、摄影器材、显卡、硬盘、游戏机、乐器、家电和收藏品。但它也不是“自动捡漏神器”。闲鱼搜索结果本身会变化,账号登录态可能失效,平台风控也会影响自动化稳定性。使用时更应该把它当成辅助筛选工具,而不是完全替代人工判断。

它解决什么问题

在闲鱼上找二手商品,经常有几个痛点:

  • 商品太多,手动翻很累。
  • 标题和描述不规范,关键词很容易漏掉或误判。
  • 好价格出现时间短,发现太晚就没了。
  • 同一个商品可能有多个地区、价格、成色和卖家差异。
  • 低价商品里混着配件、损坏品、翻新货和诱导性标题。
  • 想持续盯多个关键词时,手动搜索很难坚持。

普通关键词提醒只能解决一部分问题。比如你搜索“ThinkPad X1”,可能会混入配件、坏屏、空盒、拆机件;你搜索“索尼 A7C”,又可能遇到镜头套装、租赁信息、标题党和价格异常。

ai-goofish-monitor 的思路是:先用自动化把候选商品抓出来,再交给 AI 按你的需求做二次判断,最后把值得关注的结果推送给你。

核心功能

项目 README 里列出的核心能力比较完整:

  • Web 可视化管理:任务管理、账号管理、AI 标准编辑、运行日志、结果浏览。
  • AI 驱动:支持自然语言创建任务,并用多模态模型分析商品。
  • 多任务并发:不同任务可以独立配置关键词、价格、筛选条件和 AI Prompt。
  • 高级筛选:支持包邮、新发布时间范围、省 / 市 / 区三级区域筛选。
  • 即时通知:支持 ntfy.sh、企业微信、Bark、Telegram、Webhook 等多渠道。
  • 定时调度:支持 Cron 配置周期性任务。
  • 账号与代理轮换:多账号管理、任务绑定账号、代理池轮换与失败重试。
  • Docker 部署:支持容器化部署。

这些能力组合起来,覆盖了从“创建监控任务”到“收到命中提醒”的完整链路。

工作流是什么样

一个典型流程大概是这样:

  1. 部署服务并打开 Web UI。
  2. 导入闲鱼账号登录态。
  3. 创建监控任务。
  4. 设置关键词、价格区间、地区、新发布范围等筛选条件。
  5. 编写或让 AI 生成判断标准。
  6. 任务按实时或定时方式运行。
  7. Playwright 打开页面并抓取商品信息。
  8. AI 根据标题、描述、图片和 Prompt 判断是否符合需求。
  9. 命中结果写入 SQLite。
  10. 系统通过配置的通知渠道推送结果。
  11. 用户在 Web UI 里查看结果、日志和价格历史。

这个流程里,AI 的价值主要在第 8 步。它可以理解“我想要成色好、价格合理、不要配件、不要维修机、最好同城自提”这类自然语言条件,比单纯关键词规则灵活。

Docker 部署

项目推荐使用 Docker 部署:

1
2
3
4
5
6
git clone https://github.com/Usagi-org/ai-goofish-monitor && cd ai-goofish-monitor
cp .env.example .env
vim .env
docker compose up -d
docker compose logs -f app
docker compose down

默认 Web UI 地址是:

1
http://127.0.0.1:8000

官方镜像地址是:

1
ghcr.io/usagi-org/ai-goofish:latest

如果镜像访问慢,README 里也给了加速镜像示例:

1
2
3
docker pull ghcr.nju.edu.cn/usagi-org/ai-goofish:latest
docker tag ghcr.nju.edu.cn/usagi-org/ai-goofish:latest ghcr.io/usagi-org/ai-goofish:latest
docker compose up -d

Docker 镜像已内置 Chromium,不需要宿主机额外安装浏览器。默认持久化目录包括:

  • data/:SQLite 主存储,保存任务、结果和价格历史。
  • state/:登录状态 cookie 文件。
  • prompts/:任务提示词。
  • logs/:运行日志。
  • images/:商品图片和任务临时图片目录。

如果修改了 .env 里的 SERVER_PORT,也要同步调整 docker-compose.yaml 的端口映射。

最少配置

项目的最少配置主要围绕 AI 模型和 Web UI 登录:

1
2
3
4
5
OPENAI_API_KEY=your_api_key
OPENAI_BASE_URL=your_openai_compatible_base_url
OPENAI_MODEL_NAME=your_multimodal_model
WEB_USERNAME=admin
WEB_PASSWORD=change_me

其中前三项是 AI 模型接入必填项:

  • OPENAI_API_KEY:模型 API Key。
  • OPENAI_BASE_URL:OpenAI 兼容接口地址。
  • OPENAI_MODEL_NAME:支持图片输入的模型名称。

WEB_USERNAMEWEB_PASSWORD 用于 Web UI 登录。README 提到默认账号密码是 admin/admin123,生产环境必须修改。

第一次使用

第一次使用时,流程大致是:

  1. 打开 http://127.0.0.1:8000
  2. 登录 Web UI。
  3. 进入“闲鱼账号管理”。
  4. 使用项目提供的 Chrome 扩展导出闲鱼登录态 JSON。
  5. 把登录态粘贴到系统里。
  6. 登录态文件会保存到 state/,例如 state/acc_1.json
  7. 回到“任务管理”,创建任务并绑定账号。
  8. 运行任务并查看结果。

这里最关键的是登录态。由于闲鱼并不是开放给第三方随意抓取的标准 API,项目需要用浏览器登录状态来模拟正常页面访问。登录态失效、风控、验证码、账号异常都会影响任务运行。

AI 任务和关键词任务

项目支持两类任务创建方式。

第一类是 AI判断

你可以填写“详细需求”,提交后系统会异步生成分析标准。适合需求比较复杂的场景,例如:

  • 只要主机本体,不要配件。
  • 价格明显低于市场价才提醒。
  • 成色要好,描述里不能有进水、维修、暗病。
  • 优先同城,能面交更好。
  • 图片里要能看到序列号、包装或关键配件。

第二类是 关键词判断

它更接近传统规则监控:根据关键词、价格、地区等条件直接创建任务,不经过 AI 生成流程。适合规则简单、误报可以接受的场景。

实际使用中可以混合使用:关键词负责初筛,AI 负责减少误报。

Web UI 能做什么

Web UI 是这个项目区别于普通脚本的重要部分。

任务管理页可以配置:

  • AI 创建任务。
  • 关键词规则。
  • 价格范围。
  • 新发布范围。
  • 区域筛选。
  • 账号绑定。
  • 定时规则。

账号管理页可以:

  • 导入闲鱼账号登录态。
  • 更新登录态。
  • 删除账号。
  • 为任务指定账号。
  • 让系统自动选择账号。

结果和日志页可以:

  • 查看命中商品。
  • 导出结果。
  • 查询历史记录。
  • 查看任务运行过程。
  • 排查登录态失效、风控和 AI 调用问题。

系统设置页可以:

  • 查看系统状态。
  • 编辑 Prompt。
  • 调整代理和轮换配置。

对于长期监控来说,Web UI 很关键。否则任务一多,配置、日志、结果和通知都会变得难维护。

数据存储

项目当前在线主存储使用 SQLite,默认路径是:

1
data/app.sqlite3

Docker 默认把 SQLite 主库挂载到:

1
./data:/app/data

应用启动时会自动建库建表,并尝试从旧的 config.jsonjsonl/price_history/ 导入一次历史数据。

需要注意的是,state/prompts/logs/images/ 仍然是文件系统目录,不在 SQLite 中。商品图片会临时保存到类似下面的目录:

1
images/task_images_<task_name>/

任务结束后默认会清理。

这种结构比较适合个人或小团队部署:SQLite 足够轻,迁移也简单;文件目录保留登录态、图片和日志,排查问题更直观。

通知渠道

项目支持多种通知渠道,常见配置包括:

  • NTFY_TOPIC_URL
  • GOTIFY_URL / GOTIFY_TOKEN
  • BARK_URL
  • WX_BOT_URL
  • TELEGRAM_BOT_TOKEN / TELEGRAM_CHAT_ID / TELEGRAM_API_BASE_URL
  • WEBHOOK_*

通知是这类工具的核心体验。监控系统如果只把结果写进后台,用户仍然需要反复打开页面查看;有推送之后,命中商品才能在第一时间触达。

更实用的配置方式是按商品价值分层:

  • 普通关键词命中只写入后台。
  • AI 高置信度结果推送到手机。
  • 高价值商品推送到企业微信或 Telegram。
  • 调试阶段开启更多日志,稳定后减少噪音。

开发者运行

如果不使用 Docker,本地开发需要:

  • Python 3.10+
  • Node.js + npm
  • Playwright CLI
  • Chromium 或 Chrome / Edge 浏览器

基础命令:

1
2
3
git clone https://github.com/Usagi-org/ai-goofish-monitor
cd ai-goofish-monitor
cp .env.example .env

一键启动:

1
2
chmod +x start.sh
./start.sh

start.sh 会检查 Playwright CLI 和浏览器条件,自动安装依赖、构建前端、复制构建产物并启动后端。

手动启动后端:

1
python -m src.app

或者:

1
uvicorn src.app:app --host 0.0.0.0 --port 8000 --reload

前端开发:

1
2
3
cd web-ui
npm install
npm run dev

测试和构建:

1
2
PYTEST_DISABLE_PLUGIN_AUTOLOAD=1 pytest
cd web-ui && npm run build

适合哪些人

ai-goofish-monitor 适合这些用户:

  • 经常在闲鱼蹲特定型号商品的人。
  • 想监控二手数码、摄影器材、游戏设备、硬件配件的人。
  • 想把“关键词搜索 + 人工筛选”自动化的人。
  • 有 OpenAI 兼容模型 API,并愿意为 AI 判断支付调用成本的人。
  • 熟悉 Docker 或基本命令行部署的人。
  • 需要把命中结果推送到手机、企业微信或 Telegram 的用户。

它不太适合这些情况:

  • 完全不懂部署,只想要一个即开即用 App。
  • 不愿意处理登录态、验证码和账号风控。
  • 需要官方授权、强合规的数据接口。
  • 想大规模高频抓取平台数据。
  • 希望 AI 自动判断交易风险并替你下单。

使用风险和边界

这类工具一定要注意边界。

第一,遵守平台规则。

闲鱼有自己的服务条款、风控策略和账号安全机制。自动化访问可能触发限制。不要高频抓取,不要绕过风控,不要把它用于骚扰卖家、批量采集隐私或破坏平台秩序。

第二,保护账号登录态。

state/ 里保存的是登录状态 cookie 文件。它本质上等同于账号访问凭据,不能提交到 Git 仓库,也不要放到不可信服务器上。服务器如果暴露在公网,Web UI 必须修改默认密码,并建议放在 VPN、反向代理鉴权或内网之后。

第三,AI 判断不是事实保证。

AI 可以帮你减少误报,但不能保证商品真实、卖家可信、价格合理或交易安全。最终仍然要人工看商品详情、卖家评价、聊天记录、发货方式和支付流程。

第四,注意成本。

如果每个候选商品都交给多模态模型分析,调用成本可能很快上升。建议先用关键词、价格和区域做强筛选,再把少量候选交给 AI。

第五,注意隐私。

商品截图、聊天相关内容、账号状态和通知内容都可能包含敏感信息。通知 Webhook、日志目录和数据库都要妥善保护。

和普通脚本的差别

普通闲鱼监控脚本通常只做三件事:

  1. 搜索关键词。
  2. 判断价格。
  3. 发通知。

ai-goofish-monitor 更进一步:

  • 用 Web UI 管理任务和账号。
  • 用 AI Prompt 表达复杂购买标准。
  • 用多模态模型看商品图和描述。
  • 用 SQLite 保存结果和价格历史。
  • 用日志页排查任务失败原因。
  • 用代理轮换和多账号机制提高稳定性。
  • 用定时任务支持长期运行。

也正因为功能更多,它的部署和维护成本更高。对普通用户来说,Docker 部署是最省事的方式;对开发者来说,Web UI、FastAPI、Playwright、SQLite 这套结构也比较容易二次开发。

可以怎么用

比较实用的使用方式是从小任务开始。

比如你想找一台二手相机,可以先创建一个任务:

  • 关键词:A7C索尼 A7C
  • 价格范围:按市场价设置上限
  • 区域:优先本省或同城
  • 新发布范围:最近一天或最近几小时
  • AI 标准:排除单镜头、排除维修机、排除明显配件、关注快门数和成色
  • 通知:只推送 AI 判断通过的结果

稳定运行后,再逐步增加任务数量。不要一开始就上几十个关键词、多个账号和高频 Cron。先看登录态稳定性、误报率、AI 成本和通知噪音,再调参数。

总结

ai-goofish-monitor 把闲鱼监控从“关键词脚本”推进到了“可管理的 AI 监控系统”。它用 Playwright 处理页面自动化,用 AI 处理复杂判断,用 Web UI 管理任务和结果,用 SQLite 保存数据,再通过多种通知渠道把结果推送出来。

它最适合个人或小团队做特定商品监控,尤其是二手数码、硬件、摄影器材这类价格波动大、发布时间敏感、描述噪音多的品类。

但它也需要谨慎使用:登录态要保护,默认密码要改,抓取频率要克制,AI 结果要人工复核,平台规则和隐私边界不能忽视。把它当成辅助筛选工具,它会很有价值;把它当成全自动交易系统,就容易高估它的能力。

参考链接:

记录并分享
使用 Hugo 构建
主题 StackJimmy 设计