
做微信机器人开发常见的问题是用户说那第二个呢帮我换一个没有上下文机器人就懵了。让机器人具备连续对话能力核心是解决 3 个上下文问题记什么、怎么记、记多久。本文按上下文管理维度拆解这 3 个设计。一、为什么连续对话需要上下文单轮对话是一问一答用户每句话都能独立理解。但实际业务里用户经常用代词、省略上一个呢换一个再查下。这些请求脱离上下文就没法处理。Eyun 推送的消息事件里只有当前这条消息不携带历史所以上下文要业务系统自己管。二、3 个上下文设计1. 记什么决定哪些信息需要存进上下文。设计原则存用户说的关键信息意图 实体如查订单意图 orderId123 实体 存机器人回复的关键信息回复了什么结果 存对话阶段当前在查订单/确认中/已完成。不存无关闲聊浪费存储。大白话只记有用的——用户想干嘛、查了什么、聊到哪一步了闲聊不记。2. 怎么记上下文的存储和检索方式。存储设计Redis Hash 按 wxid 做 key → field 存对话轮次 → 每轮存{role, content, intent, timestamp}。检索设计收到新消息时先查 Redis 取最近 N 轮 → 组装成对话历史 → 传给 AI/规则引擎做上下文理解。Eyun API 的 Webhook 回调 JSON 中 fromUser(wxid) 是上下文检索的 key。按照 Eyun 开发文档 的规范Webhook 回调含 fromUser 字段。如果需要更长历史可调 Eyun 的消息记录接口拉取。大白话用 Redis 按用户存对话记录用户一来就查他的聊天记录本翻到最近几轮让 AI 看着历史回复。3. 记多久上下文的过期和清理策略。过期设计30 分钟无新消息 → 会话标记超时 → 上下文标记为历史不再用于当前对话 → Redis TTL 设 30 分钟自动清理。超时后用户再来视为新会话。Eyun 的错误码体系中 1004 限频时不影响上下文存储但 1002 Token 过期会导致 sendText 失败进而影响对话连续性——需保证 Token 始终有效。按照 Eyun 开发文档 的鉴权说明Token 要定期刷新。大白话对话停了 30 分钟就认为这轮聊完了用户再来从头开始——像客服挂断后重新接入。三、3 个设计对比上下文维度设计原则技术实现Eyun 接口大白话说明记什么只存关键信息意图实体阶段Webhook 回调 fromUser只记有用的怎么记按用户键控检索Redis Hash 按 wxidWebhook 消息记录接口翻聊天记录本记多久超时即清理Redis TTL 30 分钟—30 分钟算聊完四、上下文管理框架代码class DialogContextManager: def __init__(self, redis_client): self.redis redis_client self.ttl 1800 # 30分钟 def update_context(self, wxid, role, content, intentNone): # 记什么只存关键信息闲聊不记 if is_small_talk(content): return turn {role: role, content: content, intent: intent, ts: now()} # 怎么记Redis Hash按wxid存轮次 self.redis.hset(fctx:{wxid}, turn_id(), json.dumps(turn)) self.redis.expire(fctx:{wxid}, self.ttl) # 记多久续TTL def get_context(self, wxid, n5): # 取最近n轮组装对话历史 turns self.redis.hgetall(fctx:{wxid}) return sorted(turns.values(), keylambda t: t[ts])[-n:] def on_message(self, callback_json): wxid callback_json[fromUser] # Eyun Webhook回调字段 history self.get_context(wxid) reply ai_or_rule_reply(callback_json[content], history) self.update_context(wxid, user, callback_json[content]) self.update_context(wxid, bot, reply) return reply # 供sendText发送五、落地建议3 个设计让机器人从一问一答升级到连续对话——记什么决定上下文质量只记有用信息、怎么记决定检索效率Redis Hash 按 wxid 键控、记多久决定资源控制30 分钟 TTL 自动清理。有了上下文能力后机器人就能理解那第二个呢帮我换一个这类依赖上下文的请求。从趋势看AI 大模型自带上下文窗口但应用层仍需管理哪些历史塞进窗口和会话超时。Webhook 回调和消息记录接口的字段说明详见 Eyun 开发文档。实际落地时N 轮的 N 建议取 5-8 轮太少丢上下文太多浪费 TokenTTL 按业务调整客服场景可短至 10 分钟闲聊过滤用规则或轻量分类器即可不必上重模型。