ByteNoteByteNote

字节笔记本

2026年8月29日

ai-goofish-monitor:盯闲鱼的 AI 代理

API中转
¥120

闲鱼上想蹲到一台成色对、价格对的机器,最累的是反复刷搜索页。Usagi-org 开源的 ai-goofish-monitor 用 Playwright 盯关键词,再用带图片能力的模型看商品图和描述,觉得对了再推通知。后台是一套 Web UI,多任务、多账号、代理轮换都在里面配。仓库 MIT,约 1.4 万 star。2026 年 6 月已经归档,不再收 PR,代码还能 clone,GHCR 镜像也还在。

下面按「Docker 拉起来 → 导入闲鱼登录态 → 建第一个任务 → 接到通知」写一遍。请遵守闲鱼用户协议,别把请求打得太勤。

它实际在干什么

主服务是 FastAPI(src.app),按你点的按钮或 Cron 拉起一个或多个监控进程。单条任务大致是:

  1. 选账号和代理
  2. 用关键词搜闲鱼
  3. 发现新商品就抓详情、卖家信息和图片
  4. 调多模态模型判断「推不推」
  5. 推荐的发通知,全部结果写进 SQLite

数据主库是 data/app.sqlite3,任务、结果、价格历史都在里面。登录 cookie 仍落在 state/,提示词在 prompts/,日志在 logs/。第一次从旧版升级时,会尝试把 config.jsonjsonl/price_history/ 导进来。

筛选不只是关键词。任务还可以限定价格区间、是否包邮、新发布时长,以及省 / 市 / 区。区域筛得很狠,先验证市场时建议留空。

Docker 部署

官方推荐容器。镜像已内置 Chromium,宿主机不用再装浏览器。

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

用编辑器打开 .env,最少填这三项(模型必须能看图):

bash
OPENAI_API_KEY=sk-...
OPENAI_BASE_URL=https://api.openai.com/v1/
OPENAI_MODEL_NAME=gpt-4o

接口走 OpenAI 兼容协议即可。国内网关、ModelScope、自建 vLLM 把 OPENAI_BASE_URL 改成对应地址。示例文件默认指向 ModelScope 上的 XiaomiMiMo/MiMo-V2-Flash,换成你手里真正能看图的模型。

Web UI 默认账号是 admin / admin123,生产环境务必改 WEB_USERNAMEWEB_PASSWORD。Docker 里 RUN_HEADLESS 保持 true

然后:

bash
docker compose up -d
docker compose logs -f app

默认打开 http://127.0.0.1:8000。改了 SERVER_PORT 时,同步改 docker-compose.yaml 的端口映射。

拉不动 ghcr.io/usagi-org/ai-goofish:latest 时,README 给了一条南京大学镜像的绕法:先 docker pull ghcr.nju.edu.cn/usagi-org/ai-goofish:latest,再 tag 回官方名字后 docker compose up -d

持久化目录主要是:

  • data/:SQLite
  • state/:闲鱼登录态
  • prompts/logs/images/

更新镜像:docker compose pull && docker compose up -d

导入闲鱼登录态

没登录态,爬虫进不去真实搜索结果。官方做法是用 Chrome 扩展导出 cookie JSON,再贴进 Web UI 的「闲鱼账号管理」。

扩展在 Chrome 网上应用店,名字是 Xianyu Login State Extractor,ID 为 eidlpfjiodpigmfcahkmlenhppfklcoa。用已经登录闲鱼的浏览器导出,粘贴到后台。文件会存成 state/acc_1.json 这类路径。

每个任务可以绑一个账号,也可以不绑,交给系统挑。多账号加上代理池,主要是给风控和失败重试用的:连续失败会换号或换代理,超过 TASK_FAILURE_THRESHOLD(默认 3 次)会自动暂停,默认停一天,避免 cookie 失效后还在狂刷。

登录态会过期。日志页按任务拆运行过程,cookie 失效、被风控、模型调用失败都能在那儿对。

建第一个任务

回到「任务管理」。两种创建方式:

关键词判断。 填关键词规则、价格、是否只要新发布。提交后立刻生成任务,不经过模型写标准。适合规则已经很清楚的东西,比如「MacBook Air M3,5000 到 7500,只要包邮」。

AI 判断。 用自然语言写「详细需求」,后台先异步生成分析标准(会弹出进度窗),再创建任务。适合描述成色、配件、避雷项这类不好写成关键词的条件。这是后台 job:POST /api/tasks/generatedecision_mode=ai 时返回 202,前端再轮询 GET /api/tasks/generate-jobs/{job_id}

两种任务都可以再加 Cron,做成定时扫,不必一直挂着实时刷。

第一次建议:一个关键词任务、区域留空、价格区间写死、先只开 ntfy 或 Telegram。跑通一轮、确认推送和结果页都有数据,再加 AI 标准和区域。

接到通知

通知渠道任选一个即可:

  • ntfy(NTFY_TOPIC_URL
  • Bark(BARK_URL,iOS 方便)
  • 企业微信机器人(WX_BOT_URL
  • Telegram(TELEGRAM_BOT_TOKENTELEGRAM_CHAT_ID,可选 TELEGRAM_API_BASE_URL 反代)
  • Gotify
  • 通用 Webhook(方法、Header、Query、Body 都能模板化)

模型推荐的商品才会推。没推荐的也会进 SQLite,结果页能翻、能导出。

本机不走 Docker

环境是 Python 3.10+ 和 Node.js(README 验证过 Node 20.18.3),还要 Playwright 的 Chromium。

先按 README 装好 Playwright 和浏览器,再执行仓库根目录的启动脚本。它会检查前置条件、装依赖、构建前端并拉起后端。

也可以前后端分开:后端跑 FastAPI / uvicorn(默认 8000),前端在 web-ui 里用 Vite 开发服务器,并把接口路径代理到后端。

LOGIN_IS_EDGE 只影响本机浏览器通道。Docker 镜像没有 Edge,容器里固定用 Chromium。

用之前心里要有数

  1. 仓库已归档。 2026 年 6 月起只读。闲鱼改页面结构时,选择器可能失效,要自己 fork 修,或看社区 fork。
  2. 模型必须能看图。 只配文本模型,分析商品图那一步会空转或报错。不支持 json_object 的模型,把 ENABLE_RESPONSE_FORMAT 设成 false。
  3. 登录态是你自己的 cookie。 别把 state 目录提交进 git,也别把 Web UI 暴露到公网还不改默认密码。
  4. 频率和协议。 README 写了:遵守闲鱼用户协议和 robots.txt,请求别太密,账号可能被限制。当学习项目用,别拿它做批量骚扰或绕过平台规则的事。
  5. 代理。 PROXY_URL 只给 AI 请求用。爬虫侧的代理池是另一套:PROXY_ROTATION_ENABLED、PROXY_POOL,以及 per_task 或 on_failure 两种轮换模式。

适合已经有闲鱼账号、想把蹲货从人工刷新改成定时扫描的人。不适合想要一个免登录、免模型 key、点一下就能用的现成服务。归档之后它更像一份还能跑的快照,不是还在演进的产品。

相关链接

分享: