⌨ 技术

手搓微信小程序AI回复接口

导语

最近萌生了一个好玩的想法:能不能在我们学校的图文社区小程序里,植入一个类似群聊机器人的“AI 助理”?只要有同学在评论区 @AI,它就能自动结合帖子上下文,利用大模型知识库给出高情商、有价值的解答。

经过几天的抓包拆解、踩坑与架构迭代,我最终用 Python 实现了一个纯事件驱动、带 SQLite 持久化记忆、且能自动规避风控的自动化挂机 Bot。本文将复盘整个开发过程,带你一窥小程序逆向与 AI 自动化结合的奇妙化学反应。

---

步骤一:抓包分析,摸清敌人的底细

要让脚本代替人类操作,第一步就是用抓包工具(如 Charles 或 Fiddler)对小程序的网络请求进行解密。经过一番梳理,我摸清了社区后台的四个核心 API 接口逻辑:

  1. 最新动态列表 (/article/article/lists2):这个接口极其关键。它按“最新回复”排序,只要我们高频监控这个接口的前几名,就能第一时间捕获到活跃的帖子。
  2. 帖子详情 (/article/article/info):传入帖子 ID,返回帖子的完整正文以及包含所有楼层的 comment_list。
  3. 回复帖子 (/article/article/comment):用于直接评论主帖。
  4. 回复评论 (楼中楼) (/article/article_comment/comment):这是我踩过的第一个大坑! 社区后端将“回帖”和“回评论”拆分成了两个完全不同的接口,不仅 URL 不同,传参也从 article_id 变成了 comment_id。

---

步骤二:打造 AI 大脑(接入百度千帆大模型)

拿到数据源后,下一步是给机器人注入灵魂。我选择了百度千帆 API(Coding Plan)来生成回复。

1. 应对 429 限流报错

在调试 API 时,由于频繁发起请求,我很快就遇到了经典的 429 Too Many Requests 限流报错。为了保证脚本的健壮性,必须在请求函数中加入重试与冷却机制(Retry & Cooldown)

当捕获到 429 状态码时,脚本会强制触发 time.sleep(10),让程序“冷静”一下再进行下一次循环,彻底告别程序崩溃。

2. Prompt 工程:解除知识封印与防幻觉

为了让大模型表现得像一个真实的“大学生课代表”,同时避免它胡说八道,我对 Prompt 进行了精细化雕琢。

核心逻辑是:将帖子正文与评论者的提问一并喂给大模型,让其优先从上下文找答案,找不到再调动自身知识库。

Plaintext

你现在是一个活跃在高校图文社区的大学生AI助理。有人在评论区艾特(@)了你。
请结合【帖子原话】以及【你的知识库】,针对层主的话进行精准解答。
要求:
1. 语气像真实的大学生,热情礼貌。
2. 【禁止不懂装懂】不知道就直说或提供情绪价值,坚决不输出虚假信息。
3. 瞄准问题:所属板块:{category} | 帖子原话:{post_content} | 层主提问:{content}

---

步骤三:构建持久化记忆库 (SQLite)

挂机脚本最怕的就是“复读机”行为(重复回复同一条评论)。仅仅用内存数组记录已回复的 ID 是不够的,一旦程序重启就会失忆。

为此,我引入了 Python 内置的 sqlite3。

每次发现在评论区有包含 @ 符号的留言,脚本在调用大模型前,都会先执行一次 SELECT 查询:

  • 如果在库里:说明已经回复过,静默跳过。
  • 如果不在库:调用大模型 -> 发送评论 -> 将 comment_id 以及 AI 生成的回复正文(reply_content)INSERT 存入本地数据库 bot_memory.db。

---

步骤四:极简且安全的单层轮询架构

为了防止微信小程序判定账号异常(防风控),我放弃了高频狂刷的危险做法,采用了一种极简的事件驱动型休眠架构

  1. 限制拉取范围:每轮循环只拉取 lists2 的前 5 个帖子,极大降低请求量。
  2. 拟人化延迟:在每次读取详情、调用模型、发送评论之间,均加入 random.uniform(2, 4) 的随机打字停顿。
  3. 大循环休眠:一轮查巡结束后,程序会强制 time.sleep(30)。
  4. 免责声明:在最终发送的字符串中,强制拼接 该评论由AI生成,请注意辨别 的尾缀,做到技术向善。

特别注意(Python 2 兼容踩坑):由于我的运行环境限制,代码最终被重构为 Python 2 完全兼容版。所有字符串均加上了 u"" 声明,且剔除了 Python 3 的 f-string,全部改用 .format(),以彻底规避头疼的 Unicode 编码报错。

结语

看着控制台里规律打印出的 🔍 触发响应! 和 🎉 成功发送!,成就感不言而喻。这不仅是一次对小程序抓包的成功探索,更是 AI 自动化改变内容社区交互方式的一次有趣实验。

技术本身没有边界,关键在于我们如何组合这些“积木”。你的社区里,是不是也缺一个全天候在线的 AI 助手呢?

评论区

共 0 条
🍃 还没有评论,沙发虚位以待~
🚇

穿越虫洞?

虫洞会把你随机传送到另一位陌生博主的网站——
可能是技术大佬,也可能是诗歌爱好者,开盲盒的时间到了。

森林精灵