ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

让AI主动找人:Agent-Reach智能体架构设计与实践

让AI主动找人:Agent-Reach智能体架构设计与实践 我最早接触“Agent-Reach”这个名字是团队准备做一个人工客服系统的升级版。老板给的诉求很简单“让AI不仅会回答问题还得能主动找人办事。”这句话我们推演了整整一周最后沉淀下来的就是这套以多通道感知与触达为核心的Agent架构。你把这个词拆开看Agent是智能体Reach是触达。合在一起指的是一类“长着手脚”的AI——它不仅能理解用户说了什么还能主动发起对话、推送结果、调用外部工具、跨越不同平台去完成一件事。这和传统的“对话机器人”有本质区别。后者像前台接待等着用户来找前者像项目协调员会自己拿着工单去找人审批、去系统里捞数据、到点提醒你交周报。这篇文章我想用实际做项目的视角讲清楚Agent-Reach这类智能体是怎么搭建的、核心模块怎么拆、流量通道怎么管、以及最容易被忽视的那些坑。如果你正在做智能客服、私域运营机器人、企业内部流程助手或者任何需要AI“主动找人”的产品这篇文章应该能帮你少踩几个雷。1. 先理清为什么需要“触达”能力被动问答和主动触达的差距1.1 传统对话Agent的边界在哪市面上的大模型对话产品十有八九是“请求-响应”模式。用户发起对话模型出结果会话结束。这个模式处理FAQ、资料查询、内容生成都够用但是一旦遇到“事情没办完”的场景传统Agent就力不从心了。举个例子。用户向客服机器人提交了一个发票开票申请系统处理需要3分钟。传统做法是用户一直等着页面转圈或者留个手机号等销售人工联系。而Agent-Reach的做法是后台异步处理处理完后通过用户所在的渠道公众号、短信、邮件、APP推送主动把电子发票发过去再顺带问一句“还需要拆分报销吗”。这就是触达能力带来的体验差异。另一个典型场景在To B内部系统里。传统的审批流程是员工提交报销单钉钉机器人只负责在群里扔一条“您有新的审批待处理”。真正的决策人是项目经理但他可能100个群不看审批就卡住了。Agent-Reach的思路是如果检测到审批超时2小时Agent会自动换一个通道触达——先发IM消息没读就转邮件再没读就短信提醒甚至调度下一位备选审批人。这种“渐进式触达”是传统通知完全做不到的。1.2 “触达层”在智能体架构里处于什么位置如果把ChatGPT这类大模型比作大脑那触达层就相当于手、脚、嘴和神经系统。它负责把所有“思考结果”转成真实世界里的动作。Agent-Reach这个名字本质上强调的是这一整套动作系统而不只是模型本身。一个完整的Agent-Reach系统我习惯按三层去理解决策层大模型负责理解目标、拆解任务、决定“下一步该做什么”。调度层负责任务编排决定由哪个子模块执行、按什么顺序执行、要不要并行。触达层真正把“动作”发出去的地方包括发消息、调接口、写数据库、拨电话、发邮件、操作RPA机器人。很多团队做Agent遇到的最大瓶颈恰恰不是模型不够聪明而是触达层太弱。模型想得很美好但触达层连一个稳定的IM消息通道都跑不通整个Agent就废了。Agent-Reach这个命名的精妙之处在于它提醒你一个Agent的价值取决于它能触达多少资源、多少渠道、多少人。1.3 哪些业务场景最适合引入Agent-Reach从我这段时间的实操经验看以下三类场景最适合以Agent-Reach作为核心架构来改造第一外部用户服务类。比如电商售后、金融业务办理、医疗报告解读。这类场景用户分散在微信、APP、网页、电话、邮件等不同渠道Agent需要跨渠道“找到用户”主动同步进度和结果。第二企业内部协同类。比如报销审批、招聘流程跟进、值班提醒、跨部门任务分发。Agent可以盯住每一条卡住的流程主动催办、升级、汇报。第三信息聚合与分发类。比如舆情监控日报、竞品价格变动提醒、股价异动报警。Agent不是等用户来问“今天有什么新闻”而是每天固定时间把筛选好的信息以结构化摘要推送到用户所在的渠道。2. 核心架构拆解一个可落地的Agent-Reach系统由哪几部分组成2.1 会话编排引擎决定“谁在什么时候说什么”整个Agent-Reach系统中最先要设计的是会话编排引擎。它解决的不只是“理解用户说了什么”而是“当前这个任务需要跟多少人、在哪些渠道、按什么顺序交互相伴”。我推荐用一个轻量的状态机设计整个编排逻辑。每一个用户请求进入系统后会被映射成一个任务实例任务实例内部维护当前处于哪个阶段。比如阶段A信息收集等待用户补齐材料阶段B后台审核Agent主动推送“已收到预计5分钟出结果”阶段C结果触达通过用户预留的渠道发送报告阶段D满意度回访如果用户没有反对24小时后发一个问卷链接。状态机的好处是每个环节都是可挂起的。用户可能聊到一半就消失了但任务状态还留着触达层可以后续继续推进。这比用一条对话上下文硬撑整个流程要可靠得多。另外编排引擎还要带一个“超时看护器”。我做了个默认配置每个阶段停留超过设定时间比如30分钟或2小时Agent就要主动问一次用户“您还在吗/还需要继续办理吗”。这个设计能解决大量“用户不说话Agent就傻等”的低智商场景。2.2 多通道适配层统一封装微信、邮件、短信、语音多通道适配是Agent-Reach最核心的技术工作量。如果你把一个一个通道单独接入业务逻辑后期一定会被拖死。因为每个通道的接口风格、消息格式、限流规则、回调方式都不一样业务层如果直接对接底层通道光做异常处理就够写几千行代码。我采用的方式是定义一套统一的Message抽象层。不管底层是微信公众号、钉钉机器人、企业微信、Twilio短信、SendGrid邮件还是安卓推送业务侧只需要构造一个统一格式的OutboundMessage对象适配层负责把它翻译成各通道要求的格式并发送出去。重点关注这几个字段recipient_uid接收方的统一用户IDchannel_priority通道优先级列表message_type消息类型是纯文本、卡片、模板消息还是文件content_payload正文载荷expire_at消息有效期retry_policy发送失败时的重试策略引入统一适配层后新增一个通道的成本会从一周压缩到一天。你要做的只是写一个新的ChannelAdapter实现发送和回调解析两个方法然后注册进适配层即可。2.3 触达编排策略从“单点发送”到“多渠道阶梯式触达”Agent-Reach和普通通知系统的最大差异是它支持“阶梯式触达”策略。所谓阶梯就是按照优先级从高到低依次尝试不同通道直到用户确实看到消息。这套策略我建议以事件轮询器Event Scheduler为骨架实现。系统里有一个定时任务管理器每个任务实例都会注册一个或多个“待触达事件”。轮询器每秒扫一遍事件表发现到点的事件就触发触达流程。举例来说系统要触达一个用户“支付即将逾期”的提醒。触达策略如下第一阶梯站内信APP推送立即发送。实测中这种触达的已读率在30%左右已经够用的场景就到此为止。第二阶梯过了3小时仍无已读记录自动升级为微信公众号模板消息并附带一键还款链接。这个通道的打开率会高不少。第三阶梯距离截止时间还剩24小时系统认为用户可能很久不看消息自动转短信内容包含金额、截止时间和客服电话。第四阶梯最后4小时自动生成一条语音外呼任务由机器人电话通知本人。对逾期场景这一步压力最大但也最有效。这套策略的核心是“频率控制”和“渠道递进”而不是一股脑全渠道轰炸。我做过的调研里同时给用户发6个渠道的消息会直接导致投诉率飙升阶梯式触达反而投诉率下降了60%以上。3. 从0到1实战如何为Agent-Reach设计任务调度与主动触达机制3.1 任务队列与定时触发器的选型Agent-Reach的后端架构其实不太依赖高深的技术栈。只要保证两件事任务状态可靠定时触发准时。我在生产环境里用过两套方案简单说下适用场景。团队规模小、日触达量在几万条以内用Redis Cron就足够。Redis里存待办任务用ZSet按执行时间排序Cron每1分钟拉一次到期的任务丢进执行队列。这套方案的优点是部署成本几乎为零出了问题也好排查。日触达量超过几十万条、需要分布式调度、需要失败重试、需要任务依赖关系的建议上Celery或Temporal。我这里用的是Celery配合Redis作为broker结果后端用Django ORM。Celery的eta参数可以直接指定任务执行时间celery beat负责周期性任务非常贴合Agent-Reach的定时触达需求。核心代码逻辑大概长这样from celery import shared_task shared_task(bindTrue, max_retries3, default_retry_delay60) def send_outbound_message(self, recipient_uid, channel_list, payload): for channel_name in channel_list: adapter CHANNEL_REGISTRY.get(channel_name) if adapter is None: continue try: adapter.send(recipient_uid, payload) mark_delivery_status(recipient_uid, channel_name, SENT) return {status: success, channel: channel_name} except ChannelRateLimitExceeded: # 限流时换通道并延迟重试 raise self.retry(excValueError(rate_limited)) return {status: failed, reason: all_channels_failed}这里有几个细节要注意适配器发送失败时会抛出异常任务进入重试队列但如果你不限定max_retries限流导致的重试会无限叠加最终把broker塞爆。我把max_retries设为3重试间隔指数递增60s、120s、240s这样明显更稳妥。3.2 让Agent真正“主动”事件驱动与Poll模式的取舍“主动触达”听起来玄乎本质上是两种触发模式的配合第一种是事件驱动Webhook/回调。用户在某些系统里完成了某个操作系统立刻推送事件到Agent-ReachAgent根据事件类型决定要不要触达。比如用户一次性支付失败支付回调一进来Agent马上发一条安慰消息加操作指引。这种模式优点是实时性极高缺点是需要接入方提供稳定的回调能力。第二种是时序驱动Poll/定时轮询。Agent-Reach自己按固定节奏去查“有没有该办的事了”。比如每天早上9点拉一遍昨日未处理工单筛选超时的统一触达。这种模式适合没有实时事件源的场景。实战项目里我强烈建议两种模式共存。核心业务用事件驱动保证实时外围的例行检查用时序驱动防止漏事。Agent-Reach的“主动”就体现在这里它有自己的一套节奏不完全依赖外部系统触发。为支持时序驱动我设计了一个Trigger Config表。每行记录包含任务类型、执行周期Cron表达式、目标人群筛选条件、触达模板ID、最近执行时间。这个表让运营同学能可视化配置“每天几点催谁办什么事”不用动一行代码。3.3 用户画像与上下文记忆触达不“扰民”的关键触达功能如果做得太粗暴就是垃圾推送。业内管这个叫“interruptive UX”用户烦躁的直接原因。我的经验是给每个用户建一个轻量画像记录两个关键数据可触达时段和触达频率上限。可触达时段默认是每天10:00-12:00和14:00-20:00窥探用户历史打开记录后动态调整。频率上限默认每天不超过2条非关键消息紧急通知类不受限但会打上“紧急”标签。另外上下文记忆一定要用。用户上次聊到一半走了这次系统发消息得能接住上文。我在持久化层用一个UserMemory表存最近10轮对话摘要、当前任务状态、用户情绪标签基于LLM输出置信度判断。这套上下文让触达话术更自然而不是开口就问“您是谁”。4. 真实部署中的坑关于幂等、并发、限流与消息可达性的避坑经验4.1 防重同样的消息绝对不能发两次消息重复发送是触达系统最容易犯的低级错误。用户可能上一秒收到“您的订单已发货”下一秒又收到一模一样的一条信任感直接崩掉。根因主要出在三个方面用户多次点击提交按钮任务被分布式调度器重复拾取回调接口被第三方重试多次。我建议在入口层做幂等控制。每个外部事件分配一个全局唯一IDEvent ID进入系统后先去Redis查这个ID是否处理过处理过就直接忽略。这个Key我会设置48小时过期保证绝大多数窗口期内的重复请求都能被拦截。另外在DB层给任务表加一个唯一约束UNIQUE(event_type, event_id)。两层防护下来基本能做到零重复。我甚至建议连“触达内容”本身算个hash存起来万一真的发了至少别让内容一模一样。4.2 并发浪涌大促场景下消息通道直接被击穿电商大促、政府补贴申报这类场景短时间会涌入大量触达请求。我遇到过一次系统瞬间开3万个订单提醒任务结果短信通道被限流邮件队列直接堆积延迟了40分钟。用户的体验是支付成功了但货已经发出了提醒才到。我总结的防击穿方案有三招第一发送队列限流。每个通道单独配置TPS上限比如短信5条/秒微信模板消息20条/秒。超过上限的任务不要丢弃而是进入本地延迟队列平滑放量。第二负载降级。触达任务也分等级拒收通知这类高优先级的先进队列营销类推广大促的优先级降一级动态调整顺序。第三通道熔断。用一个连续失败计数器监控每个通道如果连续失败超过阈值比如50条立刻熔断该通道5分钟所有消息自动切到备用通道。这三招下来通道基本不会全挂。即使单通道被限流整体发送的成功率仍能维持在95%以上。4.3 已读回执与送达率看似简单但实际上影响触达策略阶梯式触达能不能有效执行依赖一个前提系统得知道用户到底“收到”没有。但是“送达”和“已读”是两个层级我被这事坑过。很多通道的“已读回执”并不可靠。企业微信可以拿到已读状态但公众号的模板消息只能拿到送达状态短信渠道更是只有“下发成功”无法知道用户是否点击了链接。如果只用送达状态去决定“要不要升级到下一阶梯”很容易误判。实操层面我建议区分三种状态送达Delivered、已读Read、已转化Converted。送达指网关确实下发了已读指客户端触发回读已转化指用户产生了目标行为点击链接、回复消息、完成支付。阶梯递进升级时优先以“已读”和“已转化”为准不要把“送达”当成“用户一定看到了”。某次活动我以为用户都对通知无感实际上送达率99%已读率只有60%中间差了40个百分点这直接导致好多用户接到了不必要的短信提醒。这个口径统一之后整个触达策略的精准度高了很多。4.4 消息疲劳度模型体验与运营效率的平衡讲一个可能被低估的设计每条消息进入系统之前都要过一次“疲劳度过滤器”。这个过滤器会计算用户过去7天收到的Agent-Reach推送总和、最近几天每天的独立触达次数、标签为“非关键”的消息占比。如果达到疲劳阈值这条普通通知会被延后到第二天上午发或者干脆合并到每日汇总消息里。听起来像是给自己找麻烦但实际测试中疲劳度控制对退订率和投诉率的影响极其显著。我做过一个对照组A组不加疲劳度控制B组加两周后B组的退订率比A组低了45%。在运营驱动型业务里触达越“克制”用户越愿意留下来。对Agent-Reach架构感兴趣的读者我建议把这个疲劳度模型放到优先级很高的位置最好在系统第一天设计时就带上。否则后面数据量起来后再加迁移成本非常高。5. 在多Agent协同场景下扩展从单兵触达到分布式触达网络5.1 主Agent与工具Agent的分层协作Agent-Reach进一步演化的方向是变成多Agent协同的结构。单个Agent处理复杂任务很快就会到能力上限更合理的是让主Agent统筹子Agent专职负责特定领域。我最近在做的架构里分了三类Agent业务Agent负责整个业务流程编排了解业务全局。它决定总体目标比如“帮用户完成理赔申请”。触达Agent只负责跟用户交互它的KPI是让消息准确、适时地送达并且拿到用户反馈。业务Agent把“触达用户”这个动作委托给它。工具Agent负责调用外部API、查订单系统、更新数据库。每个工具Agent只专注一个系统出错概率大幅降低。主Agent不直接调外部接口而是先做任务分解然后向下派单。这个思路本质上借鉴了分布式系统的服务拆分只是把模块换成了LLM驱动的子程序。好处很明显单个Agent的Prompt上下文变短了响应更快逻辑也更清晰。5.2 触达结果回流让Agent能感知自己的行为效果闭环是做Agent-Reach系统的分水岭。初级阶段Agent只是发消息发完结束进阶阶段Agent能收到“用户看了消息、点击了链接、完成了转化”的反馈然后动态调整下一轮触达策略。这个闭环我建议用事件总线实现。所有触达行为发送、送达、已读、点击、转化、退订都作为事件写入Kafka或Redis Stream。业务Agent可以订阅这些事件并根据事件内容调整后续动作。举个最简单的例子触达Agent发出了一条转人工服务的引导消息如果10分钟内有3个用户都在点击同一个“人工客服”按钮说明机器人回答可能不够好。Agent读到这批事件特征后会自动触发一个升级应对策略比如切换话术模板、接入更高级的模型、或者主动转移给人工坐席。这个能力不是靠“预设规则”而是靠足量的行为反馈数据触发的动态决策。5.3 跨组织触达“Reach”的边界延伸到系统之外聊到Reach这个词很多人会忽略它的“边界突破”含义跨系统、跨组织地触达协作对象。企业微信、钉钉、飞书都可以打通甚至你们对外部的供应商、客户系统只要是标准接口Agent-Reach理论上都能触达。实际项目中我做过一个跨组织的采购催办Agent每星期自动从ERP拉取待确认的采购订单如果超过48小时未确认自动通过企业微信联系供应商对接人如果再过24小时还没回复自动生成邮件发到对方企业邮箱并抄送我方采购经理。整个过程是Agent在对方没有主动查询的情况下找到正确的人、用正确的媒介、在正确的时间推进事务。这就是Agent-Reach真正的价值所在它把AI从“等用户找”的被动角色变成“主动协调资源”的推进角色。设计这套系统的时候我脑子里想的不是“做一个机器人客服”而是“做一个会办事的虚拟同事”。6. 安全合规与隐私边界触达能力越大责任越大6.1 数据触达的授权边界触达的前提是拥有用户的合法联系方式。在多数业务场景里这意味着用户协议或隐私政策里必须明确写明“我们可能会通过短信、邮件、应用推送等渠道向您发送与您的服务相关的通知”。这里容易踩坑的是跨渠道数据串联。比如你在微信渠道拿到了用户的OpenID又在另一个活动里拿到了手机号两条数据一Merge你这就能推送短信了。但合规上如果当初用户只授权了“微信接收活动通知”你直接发短信是违法的。实操中我始终坚持“按渠道按用途双重授权”的存储设计。每条触达通道的授权状态单独存没有授权就不能调用该通道。6.2 通过率与进黑名单的博弈各大平台对营销触达的管控越来越紧。微信公众号模板消息、短信通道都有严格的频次限制超了轻则限流重则封号。不遵守规则Reach能力再强也会一夜清零。三个保命建议第一消息内容必须带上退订方式短信回复T退订邮件带退订链接这是不同国家地区的通行的行业标准也是保护发信人信誉的基础。第二关键通道的发送量设置熔断保护一旦某通道当日发送量超过预设阈值比如5万条系统自动暂停并通知管理员审批。第三定期清理硬回弹hard bounce和高投诉用户。硬回弹是指收件人地址根本不存在这种地址会拉低整体发信信誉分必须自动隔离。6.3 消息可追溯与审计因为Agent-Reach承担的下游影响比较大消息内容、发送记录、接收状态这些数据必须做到可查询、可追溯。我建议消息发送记录保留至少180天内容包括消息唯一ID、发送通道、目标用户脱敏ID、内容哈希、发送时间、各环节状态时间戳、异常码。这些记录不仅是排查故障的依据万一出现用户投诉“收到了骚扰消息”或法务要求核实某条触达是否经过授权你也是能够有据可查的。没有审计日志合规问题出现时你连辩解的证据都没有。7. 我自己的落地体感与后续想做的实验整个Agent-Reach项目做下来我个人最深的体感是不要让“主动触达”变成“骚扰用户”的借口。技术上是完全能实现连环夺命call的但产品价值和用户口碑恰恰相反。真正有效的Reach是在用户最需要的时候用最合适的媒介递上最用的信息。克制是最难的。这套系统还有两个方向我打算继续完善一是接入语音大模型让Agent直接打语音电话跟用户对话而不是机械的按键式外呼二是做个性化触达话术的端到端优化用什么措辞、什么语气、发什么模板应该由用户的历史行为数据驱动自动生成A/B测试。另外想说的是Agent-Reach不是一个纯技术项目。它横跨产品、运营、客服和风控。做这类系统的人需要有很强的同理心替用户着想替运营着想也替法务着想。技术只是手段决策体现产品品味。希望这篇文章能让你在搭建自己的触达型Agent时少走我能想到的弯路。
返回列表