尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

从零搭建微信AI赛博伙伴:大模型接入、记忆管理与合规实践

从零搭建微信AI赛博伙伴:大模型接入、记忆管理与合规实践 去年刚开始想给微信接入 AI 的时候我还以为只是调一个接口那么简单。结果真正上手才发现从“会回复”到“真好用”之间隔着协议限制、上下文管理、防打扰设计、登录稳定性等一系列问题。网上教程很多但大多版本过时吃灰比跑通更常见。这篇博客会把我最终跑通的一套“赛博伙伴”方案完整拆开先讲清楚整体链路和技术选型再用可复现的代码实现一个会聊天、有记忆、能防打扰的微信机器人最后给出合规方案和排错清单。不管你是想给微信群加个 AI 助理还是想给自己做一个私人聊天伙伴都可以按这篇文章的思路一步步落地。1. 为什么会折腾两个月最终还是 AI 微信机器人1.1 最初想要的“赛博伙伴”是什么你想象中的“赛博伙伴”可能更像一个数字助理你半夜睡不着给它发一句“我有点焦虑”它能陪你聊几句你工作中突然想查一个知识点直接把问题丢给它你在群里看到转发的长文也希望能让机器人帮你总结。它的核心体验不是“被动回答问题”而是像朋友一样常驻在微信里随叫随到。要实现这个东西本质上是一条链路消息接收层监听微信里收到的消息把文本提取出来。对话生成层把消息交给大模型由模型生成回复。消息发送层把模型回复的内容发回微信。记忆与状态层保存多轮对话上下文让机器人能记住你们刚才聊了什么。前面两层是最容易跑的难点通常在后面两层以及如何让这套链路稳定、不吵、不犯错。1.2 微信机器人的完整工作流程用一张图来理解整体流程好友 / 群聊消息 ↓ 微信机器人事件监听 ↓ 判断是否触发私聊直接触发群聊需要或命中关键词 ↓ 读取会话历史 ↓ 调用大模型 API 生成回复 ↓ 保存上下文发送回复这里的每一步都有坑消息触发条件如果不加判断机器人会变成一个“刷屏机器”上下文如果不限制长度调用 API 的成本和耗时都会飙升发送频率如果不限流也可能被平台判定异常。1.3 我踩过的坑与最终方案折腾两个月绝大部分时间其实不是花在写代码上而是花在排查“为什么跑不起来”上旧教程的登录协议已经失效扫码后直接登录失败。不同版本微信机器人的 API 差异很大照着旧代码抄事件名都对不上。大模型接口接好了但多轮对话后模型越聊越“失忆”上下文管理完全没做。机器人放在群里每个消息都回复直接把群聊刷屏最后被朋友踢出群。最终跑通的方案是机器人框架Wechaty消息收发用个人微信 Web 协议做开发验证。大模型接入通过 OpenAI 兼容接口调用国内大模型 API。工程结构环境变量管理配置、独立模块处理 LLM 调用、内存存储会话上下文。合规兜底生产环境推荐走企业微信自建应用或公众号不依赖非官方协议。下面我会按这个方案完整展开。2. 方案选型个人号、公众号、还是企业微信2.1 个人微信方案的优缺点个人微信机器人给我最大的感受是“一个人玩非常舒服”。你可以用自己的私人号或者专门注册一个小号手机扫码登录后这个机器人就像你的微信好友一样存在。私聊、群聊、发送文件、接收消息都可以做没有任何官方审核门槛。但代价也很明显——这类方案大多不是微信官方开放的接口而是基于 Web 协议或者 Hook 方案二次封装出来的。它的稳定性受限于微信版本和账号状态很可能哪天登录协议失效或者账号被限制登录。所以我对个人号机器人一贯的态度是适合个人学习、技术实验、给自己做小工具不建议在公司业务或对外场景里依赖它。2.2 官方渠道方案对比如果你需要一个满足生产要求的微信 AI 机器人我更推荐下面这些官方渠道方案消息收发能力成本适用场景企业微信群机器人 Webhook只能主动推送不能接收消息免费入群添加即可告警通知、定时日报、消息广播企业微信自建应用可以接收成员消息并回复需要企业主体配置回调公司内部 AI 助手、客服机器人微信公众号 / 订阅号可以接收用户消息并回复部分接口需要认证对外客服、内容服务、品牌互动其中企业微信群机器人最简单适合做“单向推送”企业微信自建应用适合做“双向对话”但配置相对复杂公众号则适合把 AI 能力开放给外部用户。2.3 本文实战路线怎么选考虑到大多数读者做这个项目是为了学习、自用或者技术演示我会在核心实战部分用个人微信方案把整条链路跑通因为它的开发效率最高不需要企业资质也没有复杂的回调加解密。但我不会只写这一种方案。实现完成后我会单独用一节介绍合规路线尤其是企业微信自建应用怎么从回调里接收消息、转发给大模型、再回复给用户。这样你拿到手以后可以根据自己的场景选择。3. 环境准备与项目初始化3.1 运行时和依赖在开始之前先把环境准备好Node.js 18 或更高版本个人微信机器人推荐用 Node.js 生态框架支持最完整。npm 或 yarn。一个微信号建议用不常用的小号。一个大模型 API Key国内可使用 DeepSeek 等提供 OpenAI 兼容接口的服务。另外需要说明不同 Wechaty 版本之间接口差异比较大本文示例以 Wechaty 4.x 的通用写法为准。你安装后如果发现 API 略有不同以官方文档为准。3.2 创建项目目录先创建一个项目目录并初始化 package.jsonmkdir wechat-ai-buddy cd wechat-ai-buddy npm init -y接着安装依赖npm install wechaty qrcode-terminal openai dotenv这里简单解释一下每个依赖的作用wechaty负责微信消息的接收和发送。qrcode-terminal把登录二维码输出到终端方便扫码。openaiOpenAI 官方 Node.js SDK用来调用大模型接口。dotenv管理环境变量避免把 API Key 硬编码在代码里。3.3 配置文件与环境变量在项目根目录创建.env文件# 大模型相关配置 LLM_API_KEYsk-xxxxxxxxxxxxxxxx LLM_BASE_URLhttps://api.deepseek.com LLM_MODELdeepseek-chat LLM_TEMPERATURE0.7 LLM_MAX_TOKENS1000 # 机器人名字和触发词 BOT_NAME小赛 TRIGGER_KEYWORD小赛再创建.gitignore防止把密钥提交到仓库node_modules/ .env *.log我习惯把项目结构拆成这样wechat-ai-buddy/ ├── .env ├── .gitignore ├── package.json └── src/ ├── index.js # 入口文件机器人生命周期和消息回调 ├── llm.js # 大模型调用模块 ├── memory.js # 会话上下文管理 ├── config.js # 环境变量读取 └── scheduler.js # 定时任务模块按模块拆分的好处是后续你想换模型、加数据库、增加指令逻辑不需要改动入口文件。4. 先跑通最小闭环接收消息并回复4.1 初始化微信机器人先写一个最基础的机器人入口目标只有一个能够扫码登录并且监听消息事件。创建src/index.jsimport { WechatyBuilder } from wechaty; import { ScanStatus } from wechaty; import QrcodeTerminal from qrcode-terminal; const bot WechatyBuilder.build({ name: ai-buddy, puppet: wechaty-puppet-wechat, }); bot.on(scan, (qrcode, status) { if (status ScanStatus.Waiting || status ScanStatus.Timeout) { QrcodeTerminal.generate(qrcode, { small: true }); console.log(请使用微信扫码登录); } }); bot.on(login, (user) { console.log(登录成功${user.name()}); }); bot.on(logout, (user) { console.log(已退出登录${user.name()}); }); bot.on(message, async (message) { // 自己发出去的消息直接忽略否则容易死循环 if (message.self()) return; const text message.text(); console.log(收到消息${text}); const room message.room(); if (room) { // 群聊里先只打印日志不做回复 console.log(群聊消息来自${room.topic()}); return; } // 私聊先复读原文验证双向通信是否正常 await message.say(我收到了${text}); }); bot.start() .then(() console.log(微信机器人已启动)) .catch((error) console.error(启动失败, error));这里要注意项目使用了 ES Module 写法需要在package.json里加一行{ type: module }不过更简单的方式是安装nodemon做开发热重载npm install -D nodemon然后在package.json的scripts里加上{ scripts: { dev: nodemon src/index.js } }4.2 扫码登录运行下面命令启动npm run dev终端会打印一个二维码用微信扫码并确认登录。登录成功后日志会输出你的微信昵称。这时候从别的微信给你这个号发一条“你好”终端会打印出消息内容并且你的号会自动回复“我收到了你好”。到这里最小闭环已经成立了。消息能进来也能发出去接下来需要把 AI 接进来。4.3 小闭环的局限这个阶段还不能叫“赛博伙伴”因为它只是机械复读。但它的意义在于帮我们验证了三件事机器人可以稳定登录。消息事件可以正常触发。发送回复的通道是通的。后续所有功能都基于这个闭环扩展把“复读文本”替换成“调用大模型生成文本”逻辑就完成了。5. 接入大模型让机器人真正会聊天5.1 使用 OpenAI 兼容接口现在的大模型服务大多提供 OpenAI 兼容接口这意味着我们不需要额外引入复杂的 SDK直接用openai这个 npm 包把baseURL指向目标服务就行。创建src/config.js统一读取环境变量import dotenv from dotenv; dotenv.config(); export const config { llmApiKey: process.env.LLM_API_KEY, llmBaseUrl: process.env.LLM_BASE_URL || https://api.deepseek.com, llmModel: process.env.LLM_MODEL || deepseek-chat, llmTemperature: parseFloat(process.env.LLM_TEMPERATURE || 0.7), llmMaxTokens: parseInt(process.env.LLM_MAX_TOKENS || 1000, 10), botName: process.env.BOT_NAME || 小赛, triggerKeyword: process.env.TRIGGER_KEYWORD || 小赛, };5.2 构造对话函数创建src/llm.jsimport OpenAI from openai; import { config } from ./config.js; let client; function getClient() { if (!client) { client new OpenAI({ apiKey: config.llmApiKey, baseURL: config.llmBaseUrl, timeout: 30000, maxRetries: 2, }); } return client; } export async function chatWithLLM(messages) { const completion await getClient().chat.completions.create({ model: config.llmModel, messages, temperature: config.llmTemperature, max_tokens: config.llmMaxTokens, }); return completion.choices[0].message.content; }这个模块被设计成只负责一件事接收消息数组返回模型生成的文本。不关心消息来自微信还是网页不关心上下文怎么保存。模块化之后后面想换模型只需要改config.js或这个函数内部实现。5.3 修改消息回调接下来把src/index.js里的复读逻辑替换成调用大模型import { WechatyBuilder } from wechaty; import { ScanStatus } from wechaty; import QrcodeTerminal from qrcode-terminal; import { chatWithLLM } from ./llm.js; import { config } from ./config.js; import { appendMessage, getHistory, resetHistory, clearExpired } from ./memory.js; const bot WechatyBuilder.build({ name: ai-buddy, puppet: wechaty-puppet-wechat, }); const systemPrompt 你现在是一个生活在微信里的赛博伙伴名字叫${config.botName}。 你性格耐心、幽默、有好奇心。 回答要求 1. 表达口语化不使用过于正式的语言。 2. 默认回答控制在200字以内。 3. 不讨论违法、暴力、色情等敏感内容。 4. 如果用户问你不确定的事实坦诚说不知道不要编造。 ; bot.on(scan, (qrcode, status) { if (status ScanStatus.Waiting || status ScanStatus.Timeout) { QrcodeTerminal.generate(qrcode, { small: true }); console.log(请使用微信扫码登录); } }); bot.on(login, (user) { console.log(登录成功${user.name()}); }); bot.on(message, async (message) { if (message.self()) return; const text message.text(); if (!text) return; const room message.room(); if (room) { const mentionSelf await message.mentionSelf(); const isTriggerByKeyword text.includes(config.triggerKeyword); if (!mentionSelf !isTriggerByKeyword) return; } // 私聊用联系人 id 做会话 key群聊用 群id发送者id let sessionId; if (room) { sessionId room_${room.id}_contact_${message.talker().id}; } else { sessionId contact_${message.talker().id}; } clearExpired(); const history getHistory(sessionId); const cleanText text.replace(new RegExp(${config.botName}, g), ).trim(); try { history.push({ role: user, content: cleanText }); const reply await chatWithLLM([{ role: system, content: systemPrompt }, ...history]); appendMessage(sessionId, { role: user, content: cleanText }); appendMessage(sessionId, { role: assistant, content: reply }); await message.say(reply); } catch (error) { console.error(AI 调用失败, error); await message.say(我刚刚愣了一下你再对我说一遍好不好); } }); bot.start() .then(() console.log(微信机器人已启动)) .catch((error) console.error(启动失败, error));这段代码里最关键的是try...catch。大模型接口可能因为网络问题、超时、额度不足等各种原因失败如果不做异常兜底机器人会直接崩溃用户发消息也没有任何反馈。我习惯在异常时让机器人回复一句温和的提示同时把错误打印到日志里。6. 让机器人更有“人格”角色设定与记忆6.1 上下文记忆的设计一个只会回答单轮问题的机器人并不“赛博”。让机器人像一个真实伙伴最重要的是它能记住你们刚才聊了什么。我在项目里实现了一个简单的内存会话管理模块。创建src/memory.jsconst sessions new Map(); const MAX_HISTORY 10; const SESSION_TTL 30 * 60 * 1000; export function getHistory(sessionId) { if (!sessions.has(sessionId)) { sessions.set(sessionId, { messages: [], updatedAt: Date.now(), }); } return sessions.get(sessionId).messages; } export function appendMessage(sessionId, message) { const session sessions.get(sessionId); if (!session) { sessions.set(sessionId, { messages: [message], updatedAt: Date.now(), }); return; } session.messages.push(message); session.updatedAt Date.now(); if (session.messages.length MAX_HISTORY) { session.messages.splice(0, session.messages.length - MAX_HISTORY); } } export function resetHistory(sessionId) { sessions.delete(sessionId); } export function clearExpired() { const now Date.now(); for (const [sessionId, session] of sessions.entries()) { if (now - session.updatedAt SESSION_TTL) { sessions.delete(sessionId); } } }设计要点有两个第一每个会话最多保留 10 条历史消息。原因是大模型接口对 token 数量有限制历史保留越多单次请求越慢、成本越高。保留最近 10 条已经足够让对话保持连贯。第二会话有过期时间。如果用户半小时没聊天再次对话时可以直接开启新话题避免旧的历史污染新对话。内存方案的局限是重启后记忆全部丢失。想长期记忆的话可以把 sessions 替换成 Redis 或数据库。对于个人玩具项目内存方案完全够用。6.2 角色系统提示词的写法大模型本身没有固定人格它的性格完全由系统提示词决定。所以写一个好的 system prompt 就等于给机器人做“人设”。我这里给一个建议模板你现在是一个生活在微信里的赛博伙伴名字叫小赛。 你性格耐心、幽默、有好奇心。 回答要求 1. 表达口语化不使用过于正式的语言。 2. 默认回答控制在200字以内。 3. 不讨论违法、暴力、色情等敏感内容。 4. 如果用户问你不确定的事实坦诚说不知道不要编造。不要只写“你是小赛”这样一句话。建议把回答的长度、风格、边界都写清楚。模型对具体约束的遵循程度远高于模糊要求。6.3 触发策略与防打扰机制机器人如果没有触发策略会在群里造成灾难。我在代码里做了两层控制第一层群聊消息必须满足“被”或者“包含机器人名字”才会回复。私聊则全部回复。这样机器人不会对群里每条消息都插嘴。第二层在回复前检查调用频率。创建src/limiter.jsconst lastReplyAt new Map(); export function isRateLimited(key, seconds 3) { const now Date.now(); const last lastReplyAt.get(key) || 0; if (now - last seconds * 1000) { return true; } lastReplyAt.set(key, now); return false; }然后在消息回调里加上限流判断import { isRateLimited } from ./limiter.js; // 在 try 前面插入 if (isRateLimited(sessionId, 3)) { return; }这样同一个会话在 3 秒内重复发消息机器人不会立刻响应可以有效减少对接口的无效调用。此外我还会维护一个黑名单列表。你可以把它放到.env或独立配置里const BLACKLIST process.env.BLACKLIST_IDS || ; const blackList new Set(BLACKLIST.split(,).filter(Boolean)); // 在消息回调开头 if (blackList.has(message.talker().id)) return;这套组合下来机器人既能在私聊里无压力陪聊又能在群里保持体面不会变成噪音制造机。7. 合规方向企业微信 / 公众号接入 AI7.1 企业微信群机器人 Webhook 的最小实现如果你只想要一个“能定时推送日报、告警信息到群”的单向机器人企业微信群机器人是目前最省事的官方方案。在群里添加一个自定义机器人后会得到一个 Webhook 地址形如https://qyapi.weixin.qq.com/cgi-bin/webhook/send?keyxxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx然后可以直接用 Node.js 发送消息const webhookUrl process.env.WECHAT_WEBHOOK_URL; async function sendToWechatGroup(content) { const response await fetch(webhookUrl, { method: POST, headers: { Content-Type: application/json, }, body: JSON.stringify({ msgtype: text, text: { content, }, }), }); const result await response.json(); if (result.errcode ! 0) { throw new Error(企业微信推送失败${result.errmsg}); } }注意这种机器人只能发消息不能接收群成员的消息所以它是“单向通知”场景的解决方案。常见用法是每天早上 9 点定时推送一份 AI 生成的早报或者当系统异常时推送告警。7.2 企业微信自建应用的完整思路如果你需要双向对话在企业微信官方体系内应该选择“自建应用”。实现思路是在企业微信管理后台创建自建应用拿到 AgentId 和 Secret。配置应用的“接收消息”回调 URL同时获得 Token 和 EncodingAESKey。用户在微信侧打开企业微信应用发送文本消息。企业微信服务器把用户消息 POST 到你配置的回调 URL。你的服务器验证签名、解密消息内容然后调用大模型获得回复。将回复通过被动回复消息接口返回给企业微信。服务端核心流程大概是这样的import express from express; const app express(); app.use(express.json()); app.use(express.urlencoded({ extended: true })); // 验证回调 URL 有效性 app.get(/wechat/callback, (req, res) { const { msg_signature, timestamp, nonce, echostr } req.query; // 企业微信会要求把 echostr 解密后原样返回这里需要调用官方加解密库 // 实际开发中要用 WXBizMsgCrypt 做验签和解密 res.send(echostr); }); // 接收用户消息 app.post(/wechat/callback, (req, res) { // 1. 从加密的请求体中解密出消息 // 2. 解析 XML得到 FromUserName用户id和 Content消息内容 // 3. 调用大模型接口生成回复 // 4. 调用企业微信的被动回复接口 res.send(success); }); app.listen(3000, () { console.log(企业微信回调服务启动); });这里我刻意省略了加解密细节因为企业微信的消息回调涉及官方WXBizMsgCrypt库不同语言版本 API 有差异。实际做的时候一定要去企业微信开放文档下载对应语言的加解密库按官方示例补全。7.3 公众号接入 AI 的取舍公众号是另一个官方渠道。订阅号或服务号都可以配置服务器地址用户给公众号发消息微信会把消息推送到你的服务器你的服务器处理后再调用客服消息接口回复。公众号方案的好处是面向外部用户适合做客服机器人缺点是部分接口需要认证服务号才有权限且回复接口有频率限制。如果你没有认证条件还是优先选择企业微信自建应用更稳妥。8. 常见问题与排查清单8.1 高频问题速查表问题现象常见原因解决思路扫码后一直登录失败微信账号不支持 Web 协议登录换不常用的小号确认微信版本改用其他协议或官方渠道二维码在终端显示乱码终端宽度不够字符被截断拉大终端窗口或改成保存二维码图片再扫码私聊能收到消息群聊不回复触发条件没满足确认群聊里是否机器人确认消息文本是否包含触发词机器人不回复报错超时大模型接口网络慢或超时参数太短打开控制台日志调大 timeout检查 API Key 额度多轮对话后回复质量变差上下文没有裁剪或超出 token 上限调小MAX_HISTORY改为只保留最近轮次必要时做摘要压缩机器人自己给自己发消息事件回调没有过滤自己检查是否调用message.self()做了过滤频率太高被平台限制短时间发送大量消息增加限流降低自动回复频率避免机器人在群里频繁发言8.2 我最常遇到的三个问题第一个是登录问题。个人微信的机器人方案最大的不确定性就在这里。不同协议对账号有不同的支持度同一个账号可能今天能登录明天就提示失败。这个没有特别好的解药最好的策略是准备两个小号轮换并且把关键功能尽量做成与登录状态无关的结构。第二个是上下文管理问题。如果你只保存所有历史消息不做裁剪一次对话最多几十轮之后就会触发 token 超限。我踩过的坑是把上下文数组越攒越大最终接口直接报错。解决办法就是强制限制历史轮次让旧消息自然“遗忘”。第三个是机器人刷屏。刚接入群聊时机器人对每条消息都响应几分钟就能把群消息数量刷到几十条。后来我才醒悟群聊场景的触发条件必须严格通常只响应“机器人”或明确指令。这个经验也是我建议每个开发微信机器人的朋友都要特别注意的。8.3 排查建议顺序如果你照着文章实现后仍然有问题建议按下面顺序排查看启动日志是否成功扫描、登录。发一条私聊消息看终端是否打印“收到消息”。私聊能收不能回检查发送逻辑和 AI 调用逻辑。群聊不回复检查触发条件。全部正常但偶尔崩溃检查异常处理和 API 调用日志。日志是最好的调试工具。我习惯在代码里加上带时间戳的日志而不是只console.log一个字符串。尤其在 AI 调用前后打印请求消息数量和回复内容长度对定位问题很有帮助。9. 最佳实践与工程建议9.1 不要把 API Key 写死在代码里这是最基本的一条。大模型 API 需要付费如果 Key 泄露可能造成经济损失。我把所有敏感配置都放在.env并确保.gitignore忽略它。如果你准备把项目开源还要在 README 中提供.env.example模板而不是直接公开真实 Key。9.2 尽量模块化不要把逻辑全塞进入口文件我第一次实现时把所有逻辑都写在index.js包括扫码、消息处理、AI 调用、上下文管理。到后面想加一个功能需要在几百行代码里找对应位置非常痛苦。后来我把它拆成llm.js、memory.js、limiter.js、config.js每个文件只做一件明确的事。这样代码量没有减少但可维护性提升很多。9.3 对消息做限流和黑白名单微信消息是即时触发的用户可能连续发很多条也可能有人在群里故意刷屏。没有限流的话AI 接口会被高频调用旅游式请求还会影响机器人的响应速度。我建议至少加三层防护全局限流同一个会话 3 到 5 秒内只能触发一次。关键词触发群聊中必须 或包含机器人名字。黑名单机制对指定联系人直接不响应。9.4 为 AI 调用失败做降级方案大模型接口毕竟是外部依赖不可能保证 100% 可用。我在实践中会把异常兜底分成两层第一层是重试。OpenAISDK 本身支持maxRetries我会设置为 2 次。第二层是降级回复。如果重试后仍然失败不要直接发空消息也不要让机器人崩溃。回复一句“我刚刚走神了请再说一次”这样的提示用户感知会好很多。9.5 添加定时任务让机器人更主动一个会主动找你的“赛博伙伴”会更鲜活。可以用node-cron实现定时任务比如每天早上推送一条天气和待办import cron from node-cron; cron.schedule(0 8 * * *, async () { const content await getDailyReport(); await sendToWechatGroup(content); });但注意个人微信机器人主动发消息的频率要控制好尤其是给好友或群聊发消息频率过高容易造成骚扰也可能触发平台限制。9.6 如果需要持久化记忆尽早引入数据库内存方案做 demo 没问题但每次重启后机器人就“失忆”了它会忘记所有好友的聊天历史。如果你想让机器人长期记住用户偏好建议把memory.js里的 Map 替换成 Redis 或 MongoDB。持久化之后你还能做更多功能比如根据用户历史记录定制回复风格或者统计每个用户的对话轮次。这些都会让项目变得更完整。9.7 严格遵守平台规则不用于骚扰和营销无论使用个人微信还是企业微信都要注意合规问题。个人微信方案不应被用于营销轰炸、诱导分享、群发广告等场景企业微信方案需要在官方权限范围内使用。合法授权、测试环境验证、控制频率和范围是对自己和用户负责的做法。10. 最后一点想法两个月折腾下来最大的感受是“把方案做简单比做得酷更重要”。一开始我总想加各种功能比如识别图片、语音转文字、自动总结群聊热点、接入知识库。但功能越多出错的概率越大到最后连最基础的稳定回复都没有保障。这个项目的最终版本其实很简单接收消息、调用大模型、发回回复加上一个角色设定、一份上下文记忆、一套防打扰机制。下一步你可以继续尝试的方向也很明确接入语音识别把语音消息转成文字再交给大模型。加入 RAG 知识库让机器人基于你自己的文档回答。接入多个模型按指令切换。做一个管理后台通过网页查看聊天记录和调整触发规则。如果你也想动手建议挑一个空闲小号先把最小闭环跑通再慢慢往上加功能。不要一上来就追求完美先让它“活”起来再让它“聪明”起来。祝你能早日拥有自己的赛博伙伴。
返回列表