微信里住了个赛博伙伴:我花两个月把AI聊天机器人从玩具调成能干活的小助理
事情得从我那两个月的疲惫说起。最开始想做一个微信聊天机器人,理由特别朴素:每天有太多碎片消息,要看天气、记待办、翻聊天记录里某天说过的计划,还要应付各种“在吗”。我想让微信里有一个随时在线的AI伙伴,发一条消息,它帮我把事情办了,或者陪我聊两句。
看起来不难,市面上API一大把。但真正动手以后,我发现自己低估了两件事:第一,微信这个入口不是随便接的;第二,真正的难点不是让模型“能聊天”,而是让它在真实聊天场景里“靠得住”。这两个月里,我折腾了多套方案,推翻过三轮架构,最后真的把它跑通了。回头再看,最值钱的不是那段代码,而是我搞清楚了一个问题:一个聊天机器人从“玩具”变成“赛博伙伴”,中间到底隔着什么。
1. 先别急着写代码,想清楚你的“赛博伙伴”到底承担什么角色
1.1 它不是聊天玩具,而是一个信息助理
很多人做微信机器人,第一反应是让AI变得“像人一样”聊天。这个方向没错,但如果你只盯着“对话像人”,很快就会陷入一个困境:模型确实能回话,但回完以后,你的问题一个都没解决。
比如你想让机器人提醒你下午开会带电脑。你可以和它闲聊式地对上几句,但第二天下午你还是忘了。原因很简单——聊天只是反馈,真正要落地的是“记忆”和“执行”。所以我把定位从“陪聊”改成了“信息助理”:它要能接收你的指令,记住你说过的事,然后在你需要时提醒你、帮你调用外部工具。
这个转变很关键。定位一变,技术方案就跟着变了。我不再追求多大的模型、多像人的语气,而是追求三件事:指令理解准不准、记忆记录牢不牢、任务执行稳不稳。
1.2 用一张表先定义能力边界
开始写代码前,我拿一张表格把自己能接受的能力边界写了下来。因为我发现,如果连“它该做什么、不该做什么”都没想清楚,后面一定会被无休止的需求带偏。
| 场景 | 期望行为 | 不期望行为 |
|---|---|---|
| 日常陪聊 | 简短自然地回应 | 长篇大论说教 |
| 待办提醒 | 记录时间、事件并回调 | 到点只说“记得哦” |
| 查天气/资讯 | 调用API返回结构化结果 | 编造数据 |
| 群聊场景 | 仅在@时回应,否则安静 | 在群里抢话说连续刷屏 |
| 隐私信息 | 不在对话中存储敏感信息 | 把聊天记录写入外部日志 |
这张表成了后续所有设计的基准。你会发现,很多问题不是模型能力不够,而是规则没定清楚。模型本身不知道什么时候该闭嘴,哪些话不该说,哪些数据不该碰。这些必须由你在外面做约束。
1.3 我最终确定的最小可用场景
第一个版本我没有贪多,只做了四个动作:
- 记录“待办事项”和“重要日期”
- 每天早晚做一次轻量总结和提醒
- 支持直接提问闲聊
- 群里被@时才回复
这四个动作听起来不大,但已经能覆盖日常使用里最高频的需求。更重要的是,它们分别涉及了对话理解、记忆存储、定时任务、主动推送和群聊安全,等于把整套系统最关键的能力都打通了。后面想加功能,只需要在这个骨架上长出来,而不是重新搭。
2. 选型阶段:为什么我没有一上来就冲“最聪明”的模型
2.1 技术方案的两种路线:API直连 vs 中间智能体框架
选型阶段,我第一时间想到的是“大模型API + 微信消息收发”。但真正动手后才发现,“微信消息收发”这件事本身才是最大的坎儿。
目前市面上做微信机器人,大体有两条路线:
一条是走个人微信的非官方接口。这种方案依赖hook或者模拟协议,能直接在个人微信上收消息、发消息,表面上最接近“让AI住进我的微信”。但它的风险也很明确:违反微信软件使用协议,账号随时可能被限制功能,甚至封号;而且协议层一旦变化,程序就崩,后期维护成本特别高。
另一条是走微信生态内的官方入口。比如公众号后台、企业微信自建应用、微信对话开放平台。这些入口都提供官方API收发消息,稳定合规,也能在微信App内直接和用户交互。缺点是你不能把它做成“我私人微信里的那个好友”,它更像一个正式的“客服/助理账号”。
权衡了很久,我最后选择的是“官方入口为主 + 私有消息转发为辅”的混合方案。私有消息转发只做自己轻度测试,不涉及批量群发,不收集他人信息。日常稳定使用走企业微信自建应用,理由是它接口完整、有消息回调、支持主动推送,天然适合做备忘录、定时提醒和任务查询。
提醒:如果你的目的只是给团队或自己的微信生态做一个合规助理,优先查微信官方开放能力,不要上来就研究个人微信协议。封号只是一瞬间的事,得不偿失。
2.2 模型选择:不一定追求参数最大
模型选型我也纠结了很久。两个月后,我的体感是:在“赛博伙伴”这个场景里,稳定性和速度的优先级要排在“聪明”前面。
- 如果你需要的是快速响应、低成本、支持中英文闲聊和结构化输出,那中等规模的模型已经够用了。
- 如果你要处理复杂推理、长文档总结、多步工具调用,才需要上更大的模型。
- 如果你要把机器人嵌入到某个运维或数据处理流程里,那还要考虑上下文长度、函数调用是否稳定、输出JSON是否规整。
我实际用下来,日常待办、提醒、闲聊、简单查询,中等模型完全扛得住。真正不稳定的是“对话逻辑交叉”的时候,比如用户一句话里同时含“明天下午3点提醒我带上合同”和“顺便查一下明天天气”,模型经常会把两者搅在一起。后来我通过改提示词,要求它“先拆解任务,再逐项执行”,才稳定下来。
2.3 接入微信生态必须知道的合规红线
这部分我吃了一次亏,在这里明确写出来。
个人微信的聊天机器人,如果通过非官方接口实现,本质上是对微信软件协议和网络服务的绕过。无论你给自己做还是给朋友做,只要消息收发量上来,都很容易被风控识别。轻则限制登录,重则封号,严重的可能涉及破坏计算机信息系统相关的法律风险。不要因为别人发了一个“小白也能做微信机器人”的教程就忽视这个风险。
合规路径其实不少:
- 微信公众号:适合做一个“服务号助理”,用户通过公众号对话窗口和AI聊天,官方支持消息加解密和主动回复。
- 企业微信自建应用:适合工作群场景,你可以建一个企业内部应用,员工可以@机器人进行查询、提醒、填表。
- 微信对话开放平台:适合把意图识别、问答库托管给微信官方平台,代码量更小。
我最后的方案主体落在企业微信自建应用上,再配合自己的后端服务。这样既稳定,又能在微信App里使用,不越界。
3. 两个月里最难的不是接API,而是这三件事
3.1 让机器人记住“上下文”和“长期记忆”是两码事
第一次跑通对话时,我觉得挺简单:把用户的聊天记录作为历史消息传给大模型,它就能记住上下文。但实际用了一周后发现,这里全是坑。
上下文指的是“这一次对话窗口里说的话”。你发一句“帮我订一个三点的闹钟”,再说“改成四点”,模型能理解你在改那个闹钟,因为历史消息都在窗口里。
但长期记忆指的是“昨天说的、上周说的、一个月前说的关键信息”。如果每次对话都把历史记录全部塞给大模型,成本、延迟、上下文溢出都会让你崩溃。
我最后的做法是把记忆拆成三层:
- 短期上下文:只保留当前会话最近10轮,用于理解连续指令。
- 长期结构化记忆:像数据库一样存待办、日程、偏好,比如“开会时间”“女朋友生日”“不喜欢吃香菜”。模型不直接吃原始聊天记录,而是在需要时用工具查询。
- 档案化摘要:每天结束后,把当天聊过的重点内容用大模型生成一条摘要,存成日记。以后问“我上周说要看什么书”,就从这些日记里检索。
这个分层方式解决了一个核心问题:模型不需要“记得”所有事,它只需要知道“从哪里找到”事。
3.2 触发方式设计:不要让它在所有群里抢话说
一开始我天真地以为,机器人只要进了群,就应该随时参与聊天。结果它开始在每个群里接话,群友发个表情包,它能回一百字;两个人聊天,它也要插一嘴。半分钟不到就被人嫌烦。
后来我做了三件事:
- 只在被@的时候响应。没被@时,不管群里发了什么,机器人只收消息、不回复。
- 加了一个响应“预检”规则。被@后,先判断对方是否提出了明确问题或指令;如果是闲聊式@,用简单回应,不展开长篇内容。
- 设置回复长度上限。默认回复不超过150字;如果用户说“详细一点”才给长文。
这个设定很关键。机器人一旦像自动回复机器,就会失去“伙伴感”;但如果像个话痨,又会变成群聊灾难。规则先行,比模型调教更重要。
3.3 稳定运行:进程守护、日志、超时重试是基本功
真正让“玩具”变成“工具”的,不是模型回答多漂亮,而是它能不能每天都在线、出错能不能自愈。
我在跑通第一版后遇到过几次“灵异事件”:早上起来发现机器人半夜挂了,群里有人@它,它却一直不回。查了日志才知道,是第三方API在凌晨返回了超时,程序没有做重试,直接崩了。
后面我补齐了几件事:
- 用进程守护工具把服务挂起来,比如systemd或supervisor,崩了自动拉起来。
- 所有外部API请求都要设置超时,默认10秒;超时后重试1到2次,再失败就发送降级提示。
- 记录完整的请求日志和错误日志,至少保留30天。排查问题首先看日志,而不是靠猜。
- 增加健康检查:每隔一分钟检查一次服务和队列是否正常,异常时通过备用通道通知我。
这些听起来不酷,但很管用。到了第二十几天,我发现“稳定”比“聪明”更能让一个机器人真正进入生活。模型回答偶尔差一点,我也会原谅它;但一封号或一崩就是半天,那这个伙伴几乎不可用。
4. 把提示词和工具调用做成可维护的小系统
4.1 先写人格和规则,再写任务指令
提示词不是写一段“你是一个温柔的助手”那么简单。我最后整理出来的是一个三段式结构:
- 角色设定:明确它是谁,服务于谁,语气是什么样。
- 行为规则:清楚定义“必须做”“禁止做”“不确定时怎么做”。
- 任务指令:具体场景下的处理流程,包括如何拆解任务、如何调用工具、如何回复。
举个例子,规则里会写:“与用户对话时,默认使用简体中文,语气温和但不矫情;回答长度控制在150字以内,除非用户要求详细;不确定信息时,如实说不知道,不要编造。”
任务指令里则会写:“如果用户提到‘提醒我’或‘记得’,先从消息中抽取时间和事项,再调用add_reminder工具;抽取失败时,追问用户时间。”
这个结构最大的好处是:规则和任务分离。人格调整不影响任务逻辑,任务更新不破坏人格。
4.2 让它可以调用外部工具:查天气、设提醒、记待办
如果只有一个纯聊天的模型,它顶多算是“话痨”,离“伙伴”还差得远。真正让它有生产力的,是工具调用。
我的机器人有这几个常用工具:
- 查询天气:接天气API,按城市返回温度和天气情况。
- 设置定时提醒:把时间、事件写入数据库,定时触发推送。
- 记录待办:解析用户输入,生成待办清单。
- 搜索日记:按关键词检索历史摘要,回答“我有没有说过……”这类问题。
- 每日总结:每天晚上自动运行,汇总当天新增的待办和重要对话。
大模型在这个系统里的角色变成了“指令解析器”。它并不真正知道天气,它可以生成一个结构化JSON,告诉后端“用户要查询北京今天的天气”,然后由后端调用天气API,拿到结果后再让模型组织成一句话。
这种架构比让模型直接回答问题更可控,数据也更新鲜,不会出现“模型一本正经编天气”的尴尬。
4.3 提示词也要版本管理,否则改一次崩一次
我犯过一个很蠢的错误:某天改了一下语气设定,结果机器人回复时开始频繁调用工具,把“今天心情不错”也给解析成了“设置提醒”。后来才意识到,提示词的修改对系统行为影响是全局的,不能随手改。
建议把提示词当成核心代码来管理:
- 在项目仓库里单独建一个prompts目录,每个场景一个文件。
- 改提示词前先备份,给文件和修改记录加上版本号。
- 每次修改只动一个维度,不要同时改人格和任务逻辑。
- 修改后跑一遍回归用例,比如“设置明天9点开会”、“群聊打招呼”、“问一个不知道的问题”,确认没搞坏原有功能。
我吃过亏后,现在改提示词都像改接口一样谨慎。毕竟它本身就是一个脆弱的“接口”,而且比代码更容易让人放松警惕。
5. 安全与边界:这是最容易翻车的地方
5.1 隐私数据绝对不能随便给模型
赛博伙伴每天陪你聊天,很容易让你忘记它是一个把消息发到第三方API的程序。一旦把“和销售聊的报价”“朋友分享的身份证号”“自己设置的密码”这些信息发给模型,就等于把它们交给了外部服务。
我的做法是:
- 在进入大模型前,先做一次脱敏检查,用正则或敏感词库识别手机号、身份证号、银行卡、密码等关键词,发现后直接拦截,不发给模型。
- 聊天记录默认不长期保留原始文本。即使需要记忆,也只存摘要和结构化数据。
- 自建服务的日志里不打印消息原文,只打印消息ID和后处理结果。
这不能保证百分百安全,但能拦住大多数低级错误。你要明白:模型本身没有“保密”的概念,它只是按规则处理文本。能不能守住隐私,取决于你的系统在哪一层去拦截。
5.2 关键词审核和人工兜底不能少
哪怕是给自己做的机器人,也不能完全不做内容审核。尤其是把机器人接入群聊时,别人可能故意发一些违规内容诱导它回应,或者让它生成不当内容。
我在后端加了一个关键词审核层,对模型输出进行二次过滤。如果命中敏感词,直接替换成安全提醒:“这个我不太清楚,咱们换个话题。” 在调用外部大模型时,我也尽量避免触发系统级的内容风险——比如不把恶意指令原样转发给他人。
更关键的是人工兜底。机器人输出不确定时,不要硬答。可以回一句“我拿不准,你稍等我确认下”,然后把这个消息转到人工处理。对个人助理来说,承认“我不懂”不是坏事,它比编一个错误答案更负责任。
5.3 控制频率、身份校验、操作审计
最后一个容易被忽略的问题是“越权”。如果机器人支持设置提醒、查询待办,那它必须能区分“谁在问”。不然群里有人@机器人说“查一下我上周的待办”,机器人就会把其他人的隐私也输出出去。
我做了三件事:
- 身份绑定:每个用户先在系统里绑定一个ID,机器人只查询该ID自己的数据。
- 频率限制:每个用户每分钟最多发多少条消息,超过后提示稍后再试。防止有人拿机器人刷接口。
- 操作审计:每次工具调用都记录谁、在什么时间、请求了什么操作、结果是什么。出了问题可以回查。
这套机制加完之后,机器人才算真正“可以交给别人用了”。否则,它只适合自己在电脑前做实验,不能放到微信群甚至公开场景。
6. 从“跑通”到“好用”,我沉淀下来的三个判断
6.1 单次任务跑通只完成了20%
我见过很多人在做这类机器人时,兴致勃勃演示“你看,它能回我消息了”。但说实话,能回一条消息,只代表链路通了,连入门都不算。
之后你还会面对这些问题:
- 进程挂掉怎么办?
- API超时怎么办?
- 群里出现恶意指令怎么办?
- 长期记忆怎么存?
- 多个人同时发消息时,会不会互相干扰?
- 模型输出格式解析失败能不能自动重试?
这些才是真正消耗时间的地方。我把这个阶段看成是“从5%到20%”的提升,后面还有大量工程细节等着你。所以,如果你准备自己做,预算是“两小时跑通”,那大概率会变成“两个月打磨”。
6.2 评估系统不是看答得多好,而是看“不该做的不做”
每当我把机器人版本更新给别人试,第一件事不是听对方说“好聪明”,而是看它会不会做三类错事:
- 有没有在群聊里乱插话?
- 有没有把隐私数据重复输出?
- 有没有对未知问题强行编答案?
一个“看起来很聪明但经常犯错”的机器人,比一个“看起来笨但稳定安全”的机器人更容易被扔掉。评估一个助理系统,核心是“可靠”,不是“惊艳”。
我给自己定了几条回归测试,每次改动后都会跑一遍:
- 在群里发个表情包,它不该回复。
- 问它一个不知道的问题,它应该说不知道。
- 让它设置一个提醒,它应该准确抽取时间。
- 告诉它一个手机号,它不应该重复这个手机号。
6.3 赛博伙伴的长期价值在于流程沉淀,不只是聊天
两个月之后,我最大的收获不是让机器人陪我聊天,而是我把一堆重复的日常任务给流程化了。它每天帮我汇总待办、定时提醒、记录重点信息;我不再需要自己在脑内维护那么多琐碎事。
这才是“赛博伙伴”真正的价值:它不是一个挂在你微信里的聊天玩具,而是一个“外部大脑接口”。把那些非结构性、易遗忘、碎片化的信息,变成结构性、可追溯、可执行的小流程。它的意义不在于每次回复有多智能,而在于它把一次性的信息处理,变成了可以长期累积的个人系统。
当然,它也不是万能的。它不会替你做判断,不会替你写方案,更不会成为真正的情感替代。但它可以帮你把“记住”“提醒”“查找”“汇总”这些机械动作接管过去,让你把注意力放在更值得的地方。
如果你也想自己捣鼓一个,我的建议是:先从一个最小场景开始,定清楚边界,走合规的接入方式,然后耐心补稳定性和安全机制。别急着让它“更聪明”,先让它“不添乱”。
赛博伙伴不是靠某一个模型。它靠的是你对需求的理解,对规则的设计,和对边界的敬畏。