ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

提示工程与Agentic AI实践:医疗随访效率翻倍的落地复盘

提示工程与Agentic AI实践:医疗随访效率翻倍的落地复盘

三个月前,我还真没想过,自己天天琢磨的提示工程和Agentic AI,最后会扎进医疗随访这个领域,而且效果会这么直接。项目结束时,随访中心的外呼效率翻了两倍多,不是吹出来的两倍,是拿后台数据和排班表说话的两倍。这篇东西不写那套虚的,就把我当时怎么拆解需求、怎么设计Agent、怎么写提示词、怎么踩坑填坑的全过程捋一遍,给同样在做AI应用落地的同行一个能直接参考的样本。

先说清楚这个项目解决的是什么问题:一家随访中心每天要面对大量术后康复、慢性病复查的患者,需要定期电话回访,记录恢复情况和用药反馈。过去这些电话全靠人工一个个拨,平均每个护士上下午满打满算也就能完成几十通有效随访,遇到患者不接、聊偏题、方言重,时间哗哗就没了。现在用Agentic AI把标准化的那部分对话全部接管,把患者的回复实时结构化存下来,只有碰上异常情况和复杂诉求才转人工。这一套跑通之后,单位时间内能有效处理的随访量直接上了一个大台阶。

如果你也想把大模型真正用到业务流程里,而不是停留在聊天机器人演示层面,这篇复盘值得看完。里面涉及到的方案设计、提示词模板、坑点记录,都是可以直接抄作业的。

1. 项目背景:随访这件事,到底卡在哪里

1.1 别小看随访,它是医疗机构里一座隐形的业务大山

很多人觉得随访不就是打个电话问两句吗?真不是。一家大型随访中心,每月承接的随访任务轻则几千条,重则上万条,覆盖术后感染监测、慢病用药周期、康复进度评估,每一种随访都有明确的表单项要填写。护士打电话时,一边要照本宣科按流程问,一边还要听懂患者的口语化描述,转身填到系统里。

我当时跑去随访中心蹲了半天,看到护士们的真实工作状态:工位上密密麻麻贴着话术单,打完一个电话要在系统里勾选十几二十个字段,遇到患者说自己"有点不舒服",就得追问具体是哪里不舒服、怎么不舒服、持续多久,这些信息全靠人工归纳后填表。一天下来,电话拨出去不少,真正有效完成的随访量其实有限。更麻烦的是,很多慢性病患者需要按月、按季度反复随访,同一批人不停地占用人力。

管理者最头疼的就是覆盖率。随访完成率有考核指标,但人力就那么多,长期加班不是办法。这个矛盾不解决,业务量稍微涨一点,整个随访中心就陷入疲于奔命的状态。

1.2 传统自动化方案为什么救不了这个场

随访数字化倒不是什么新鲜事,很多系统早有患者档案和随访计划,但这些系统只解决了"任务怎么派",没解决"对话怎么做"。

医院也试过简单的自动语音菜单,相当于那种"按1选查询,按2选挂号"的按键交互。患者对这种冰冷的交互方式天然抵触,尤其在描述身体感受时,根本没法用选项去套。也接过一些用规则模板写的问答脚本,设计了几十条分支,看上去挺完整,但患者的回答只要稍稍偏离预设路径,比如打电话时正在做饭随口说了句"我还在忙,等下再说",系统就懵了,只能反复重复同一个问题,患者烦躁地挂断,随访直接失败。

问题的根源在于:随访对话不是线性流程。患者会主动跳话题、反问、描述无关信息,甚至情绪激动地抱怨。传统的状态机规则能处理简单分支,但处理不了这种高度开放的自然语言输入。想要让机器真正承担随访工作,必须让它具备理解上下文、判断意图、灵活应变的能力,这正是Agentic AI能发挥价值的地方。

1.3 为什么这次选Agentic AI,而不是再调大模型接口

直接调大模型做对话其实也不难,难的是让它稳定地完成"随访"这个任务,而不是跟患者随便聊聊。

普通的大模型聊天有一个问题:每次对话都是平等的,模型没有"目标感"。你跟它说"你是一个随访助手,请问术后有没有发烧",它大概率能说出合适的话,但接下来的追问、记录、分支判断、异常识别,全都要靠提示词提前塞进去,要么塞得多了模型行为紊乱,要么塞得少了漏掉关键信息。

Agentic AI的本质差异在于:它不是一个问答引擎,而是一个能规划多步骤行动并持续执行的智能体。它可以被拆成多个角色,每个角色负责一个明确的子任务,有入口判断的、有信息提取的、有风险识别的,各司其职,通过一套工作流串起来。这种结构天然适合随访这种流程明确、节点清晰、需要多种能力的场景。

另外一个现实的考量是调试成本。如果只有一个巨大的Prompt试图包办所有事,任何一处的行为不对,都要在几千字里翻找原因,牵一发动全身。拆成多个Agent之后,每个Agent的提示词独立,单独测试、单独迭代,出问题能精准定位。这一点在后面实际开发中,帮我们省了太多时间。

2. 核心设计:四个Agent组成的随访工作流

2.1 职能拆解,先别急着写提示词

我拿到需求后的第一步,不是写提示词,而是把整个随访任务拆解成一个个动作。那时候的拆解原型,大致可以用一个表格来概括:

Agent角色主要职责人设定位
入口路由Agent判断随访阶段,引导对话流向前台接待员,搞清楚来者是谁、要办什么事
随访质控Agent检验患者回答是否有效、是否触发异常规则质检员,盯住回答中的危险信号
信息抽取Agent从自由口语中提取结构化的随访字段文书员,把话转成标准记录
移交决策Agent判断当前通话是否需要转人工坐席值班经理,拿不定主意就上报

拆完之后就会发现,天然存在一条处理流水线:电话接通后,入口路由Agent先判断这是哪一类随访任务,然后进入相应的提问流程;患者在回答过程中,信息抽取Agent实时工作,把口语内容转换成结构化字段;随访质控Agent在后台不断监听,一旦发现异常指标立即预警;最后移交决策Agent综合判断,是正常结束、还是转给人工处理。

这个拆法有一个额外的好处:每个Agent的上下文窗口需求不同。路由Agent只需要当前轮的意图;信息抽取Agent只需要最近几轮对话;而质控Agent需要全局信息做判断。拆开之后,各自的上下文都能精准裁剪,token消耗比一个大而全的Prompt低得多,响应速度也更快。

2.2 用状态机给对话上了轨道,不许AI自由发挥

拆好职能后,下一步是把对话流程固化成一张状态机图。我当时是按这类节点来设计的:开始、身份核实、随访问题逐个询问、异常情况确认、转人工分派、完成结束。

状态机存在的意义不是限制Agent发挥,而是提供骨架。每个状态对应一组可执行的Prompt规则,Agent在特定状态下只能沿着预设路径走,不能想聊什么聊什么。比如在"询问术后体温"这个状态,模型的任务就是围绕体温提问、追问异常值、记录结果;如果患者突然问"你们医院能开药吗",状态机不会让它顺着聊下去,而是引导到"转人工"分支去处理。

这样设计之后,调试的维度被极大地简化了。出问题的时候,问题一定是出现在某一个状态上,只要针对那个状态的Prompt做微调就行。效率的提升,其实有一半来自这种工程化约束,而不是完全依赖模型自己的能力。

2.3 为什么不用一个大Prompt包办所有事

我在这个项目里守住的另一个原则是:绝不让一个Prompt承担所有工作。前期我做过对比测试,把角色设定、随访流程、信息抽取规则、异常判断逻辑全部塞到一个Prompt里,在一小批真实脱敏对话上跑,失败率明显偏高。具体表现为:随访到中途模型开始忘掉原来的指令;对某些问题回答得过于模板化;字段抽取偶尔遗漏关键内容。

原因也不复杂,上下文越长,模型对早期指令的遵循度越差,尤其当对话内容与指令权重混在一起时,决策边界就会模糊。多个Agent各自维护短而聚焦的Prompt,相当于把几百条业务规则分配到多个专业岗位上,每个岗位只吃透自己那部分,准确率和稳定性都会好很多。

这种模式在团队协作上的优势也很明显:我是提示工程架构师,但我不用等大Prompt的全局改动,入口Agent和质控Agent可以完全独立地迭代,互不干扰。这让我们在后期优化效率指标时,能快速响应,不用陷入"牵一发动全身"的泥潭。

3. 提示词架构:真正让效率翻倍的,是工程化而非魔法

3.1 把提示词分成四个层次,不是写一段故事

这个项目的提示词架构,我按四个层次来组织:全局安全护栏(L0)、角色与话术(L1)、业务规则与流程分支(L2)、结构化输出(L3)。

L0是全系统底层指令,内容不随场景变化,包括禁止伤害性言论、禁止承认自己不是真人且误导患者、禁止擅自提供医疗建议、涉及生命安全时必须转人工。这些规则优先级最高,任何Agent的输出都必须先过这一层。

L1定义每个Agent的角色身份和说话风格。同样是医学问题,随访Agent要说人话,但不能忘记医疗场景的严肃性。我让人设带了一点"有耐心的医护助理"的感觉,用词偏温和、庄重,不用网络用语,不给患者造成轻浮感。

L2是具体业务逻辑,比如术后随访要问哪几个问题、在不同回答下走什么分支、什么情况判定为异常。这一层是最常迭代的,也是真正的业务核心。

L3负责的是输出格式,要求模型返回符合JSON Schema的结构化数据。这四个层次各自独立维护,任何修改都限定在某一层内,不会互相污染。

3.2 核心提示词模板拆解,可以直接抄的那种

下面把当时实际用的几类关键Prompt模板整理出来,遮掉具体的业务敏感信息,结构完全保留。

第一个是角色设定的基础模板:

你是一名医院随访中心的医护助理,服务于术后和慢性病患者的定期回访工作。 你的任务是基于标准随访表单,以口语化方式询问患者,并如实记录其反馈。 你的说话风格必须:简洁、温暖、专业,不使用网络用语,不评判患者的任何回答。 你不得自行诊断或推荐治疗方案,任何医学判断只能由该系统之外的执业医师完成。 当患者描述严重不适时,你应该给出关心回应,并第一时间触发转人工流程。

第二个是信息抽取的模板。这是我最看重的部分,因为抽取质量直接决定数据的可用性。关键是要给模型少而精的示例,医学上叫few-shot,不要给几十个,三五个有效示例就够了:

请从以下患者随访对话中,抽取指定的医学信息字段,并以JSON格式输出。 字段列表: - symptom_main(主诉症状,字符串) - pain_level(疼痛评分0-10,数字,无则填null) - temperature(体温数值,数字,无则填null) - wound_status(伤口情况,枚举:正常/红肿/渗液/裂开/未知) - medication_compliance(用药依从性,枚举:规律/偶尔/停药/未知) - doctor_visit_required(是否建议就医,布尔值) 要求: - 只抽取对话中明确出现的信息,未提及的字段一律填null,禁止臆测。 - 患者口语化的表达,请规范化后再填入字段,如“肚子疼”填写为“腹痛”。 - 如果对话涉及多种症状,symptom_main只取最影响患者生活的那一个。 示例1: 对话: "我这两天有点发烧,伤口那块倒还行,不太疼,就是晚上睡觉会出虚汗。" 输出: {"symptom_main": "发热", "pain_level": 2, "temperature": null, "wound_status": "正常", "medication_compliance": null, "doctor_visit_required": false} 示例2: 对话: "药我是天天按时吃的,就是早上量血压感觉还是有点高,现在吃的是那个白色的药片。" 输出: {"symptom_main": "血压偏高", "pain_level": null, "temperature": null, "wound_status": "未知", "medication_compliance": "规律", "doctor_visit_required": null} 现在处理这段对话: 对话: "{这里是语音转写后的患者原话}"

第三个是异常识别与移交决策的模板。这里我采用了红黄绿三色规则,逻辑更稳健:

你是随访质量监督员,负责判断当前患者状态是否需要移交人工坐席。 请阅读以下随访记录,给出四级风险评估: - green:一切正常,随访可以继续或正常结束。 - yellow:存在需要额外关注但尚不紧急的信息,应在后续随访中专门跟进。 - orange:存在需要回电或二次确认的情况,可以结束通话但要安排随访专员联系。 - red:存在紧急风险,必须立即转接人工坐席并提示记录重点。 风险因素包括(不限于): - 自述胸痛、呼吸困难、持续高热、大量出血,一并归为红。 - 术后切口红肿、渗液、裂开,或新出现剧烈疼痛,归为红或橙,以表述严重度为区分。 - 药物严重不良反应,如晕厥、严重腹泻、皮疹加重,归为红或橙。 - 情绪异常激动、有伤害自身的倾向,一律归为红。 请输出JSON格式:{"risk_level":"red/yellow/orange/green", "reason":"简洁的中文原因描述", "summary":"这次随访的关键信息摘要,不超过50字"}

3.3 结构化输出的命门:JSON Schema和容错机制

写Prompt让人输出JSON并不难,难的是让模型稳定地输出合法JSON。试过的人都知道,模型输出的JSON经常多一个逗号、少一个冒号、字段名串了字符。所以我在Prompot里除了要求输出JSON,还会在系统侧做三层容错。

第一,定义严格的JSON Schema并设定字段级约束,比如枚举值限定在几个选项内,数字限定范围,布尔值不允许写成字符串。第二,解析失败的时候自动重试一次,但告诉模型"上一次输出格式错误,请严格按JSON格式重新输出",而不是让它原样返回一遍。第三,如果连续三次解析失败,不继续耗时间,直接降级转人工处理。

这套容错机制上线后效果很明显,结构化数据的解析成功率从一开始的八成左右提升到了接近满分,被降级的人工通话也一直控制在一个稳定的低比例。记住:如果模型输出格式经常错,多半不是模型不行,而是你的容错机制不够完备。

4. 实操实录:从0到1落地的完整过程

4.1 上线前,先把安全和数据流程想清楚

医疗场景和普通场景不一样,有些底线必须提前立好,而不是等出了问题再补救。

第一件事是数据脱敏。用于开发测试的对话数据,必须把患者姓名、身份证号、手机号、家庭住址全部处理掉,做开发的时候大家都用编号指代,谁也看不到真实身份信息。第二件事是明确人机边界,系统在任何情况下都不允许给出诊断结论或用药建议,这是我在L0层写上并且反复测试过的高压线。第三件事是预案,比如AI通话中患者突然说出急诊类表述,必须立即转人工或者给出就医指引,绝对不能机械地继续走流程。

这些流程虽然不直接贡献效率指标,但没有它们,这个项目根本过不了业务部门的审查。医疗场景的项目,合规不是成本,是准入门槛。

4.2 先跑沙盒演练,把Prompt的边界摸清楚

正式接入真实随访之前,我先搭了一个沙盒环境,准备了四五十段模拟对话脚本,覆盖正常康复、轻微不适、中度异常、危重疑似、情绪激动、方言口音、沉默不语、答非所问等多种情况。

沙盒的价值在于把边界问题提前暴露出来。比如当我测试"患者在电话里突然沉默"这种场景时,发现路由Agent会陷入循环追问,每次都问同样的话,患者那边感觉非常差。后来专门加了一个状态:如果患者连续两次未给出有效回复,进入确认环节并转为人工回拨。

又比如测试方言口音时,语音转写出的文本可能不通顺,信息抽取Agent会漏掉关键字段。后来我在抽取Prompt里加了一条约定:即使转写文本存在明显语法问题或口语化表达,也要尝试理解语义,不得直接放弃。

沙盒演练跑完,我把发现的问题整理成一个问题清单,逐一修复后再进入灰度阶段。这个环节看起来耗时,实际上省了后面非常多的事。

4.3 灰度压测,把指标钉牢再放大流量

我采用的是渐进灰度策略。前两周只放20%的随访量到AI通道,但人工坐席100%实时监听过,每条AI通话的录音和结构化记录都有人抽查。这个阶段最重要的产出不是效率提升,而是建立信心:让随访中心的同事看到AI生成的结构化数据基本可用,他们需要处理的是少量异常移交,而不是大面积的翻工。

灰度期我把指标定义得特别细。不是简单看"接通率"和"通话时长",而是拆成了:有效随访完成率、结构化字段完整率、人工转接率、异常识别召回率、患者挂断率和投诉率。每个指标单独跟踪,每周复盘一次,针对性调整对应Agent的Prompt。

我记得很清楚,灰度第二周发现人工转接率偏高,排查后发现是质控Agent对"切口有少量渗液"这类中间状态判断过激,动不动就转红。后来在Prompt里补充了一条:少量渗液但无发热、无红肿蔓延时,以黄色级别记录并继续完成随访,只在患者主诉持续出血时才转红。调整之后人工转接率立刻回落了,但异常召回率没有明显下降,属于理想的修正方向。

4.4 效率数据实录:200%是怎么算出来的

项目上线稳定运行一个月后,我抽取了同一个周期的对比数据。为了方便说明,我用A周和B周代表改造前后的两个自然周期。A周是纯人工外呼,B周是AI外呼加人工兜底。两组的随访任务总数基本一致,随访类型占比也相同。

关键指标A周(纯人工)B周(AI+人工兜底)变化比例
有效随访量(条/工作日)约430条约1320条+206%
随访完成率62%78%+16个百分点
平均单条通话时长4分35秒3分12秒-30%
人工转接率——约18%常规兜底
结构化字段完整率人工填写大小不一99.2%数据可用性大幅提升

有效随访量从每天430条左右涨到1320条左右,换算一下确实超过了两倍。这个提升的来源要说明白,不是AI把每通电话打得更快,而是同时并行能力完全不同。人工护士一次只能服务一个患者,AI外呼可以多路并发,把标准化的内容全部自主完成,只把18%的问题转给人工。人工坐席的服务对象从"全员通吃"变成了"只处理高价值和疑难样本",人效自然就变了。

患者满意度数据也在跟踪,AI阶段的投诉率没有上升,患者挂断率略有波动但没超出可接受范围。有几个护士私下跟我说,转过来的对话记录比她们自己手填的还规整,省了太多整理精力。这些排序靠前的反馈,比那个200%的指标更让我觉得项目真的立住了。

5. 踩过的坑与排查技巧实录

5.1 方言和口音,差点让信息抽取全面崩盘

真实落地的第一道坎就是方言。某地患者老年人居多,方言口音重,语音转写模型输出的文本充斥着错别字和倒装句,信息抽取Agent经常把关键症状搞错。有一回患者说"心头闷得很",转写出来成了"新头发闷得很",结果字段里生成了一个莫名其妙的"新头发不适"。

排查方法很朴素:把所有转写错误样本导出来,去看共性规律。发现本地语音的"心头"被转写成不同字形的频率极高,我在信息抽取Prompt里专门加了一个常见方言词汇对照段,比如"心头=胸部/心口"、"脑壳=头部"、"拉肚子=腹泻"等,并要求模型优先参照对照表做规范化。再有就是调高转写置信度阈值,低于阈值的句子不抽取,直接进入人工复核。这两个措施配合,方言区样本的抽取准确率才慢慢回到正常线。

5.2 红灯过度触发,人工坐席被淹没

上线初期,质控Agent的异常识别特别灵敏,连"患者打了个喷嚏"都恨不得标个yellow。结果就是人工转接率一度飙到三成多,人工坐席忙不过来,排班全乱,违背了提效的初衷。

后来我把异常识别从单一规则改成多因素联合判断。单独一个轻微指标不触发升级,比如低热或者轻微咳嗽,先如实记录;只有两个以上指标同时异常,或者出现明确的危险关键词,才触发yellow或red。同时我加了一条关键约束:质控Agent参考对话的上下文来判断严重度,不能只因为某个词出现在对话里就拉响警报。改了之后,人工转接率降下来了,同时我盯了一周,真正有危险的病例没有一个漏掉的。

5.3 识别环境噪音,防止上下文被污染

还有一类坑藏在通话环境里。有患者接电话时正在看电视,转写文本里混入"本台记者报道""欢迎收看"这类电视音频,信息抽取Agent差点把电视新闻里的内容抽取成患者主诉。排查时看到一条不可思议的随访记录:患者主诉为"某地发生森林火灾",明显是转写混入了电视声音。

对策是在转写环节增加语音分离和信源过滤,并在抽取Prompt里补一条:只提取患者本人说出的与自身健康相关的表述,对话中出现的第三人称、新闻报道式内容不得作为主诉字段。这类问题不亲自踩一遍,很难提前想到,但它对数据质量的破坏性非常大。

5.4 常见问题速查表

我把这段时间踩坑的经验整理成一张速查表,方便类似项目遇到问题时快速定位:

症状可能原因排查与解决
字段抽取遗漏明显信息few-shot示例太少或示例与真实对话偏差大补3到5个与业务场景贴近的示例,不要堆砌
模型频繁输出非JSONschema定义不合理、输出格式约束不足收紧字段枚举类型,增加解析重试机制
患者转人工率过高异常判定规则过严、缺少上下文联合判断改为多因素联合判定,加yellow中间层级
患者投诉"AI不像人"角色话术过于机械,缺少共情表达调整角色Prompt,增加对患者情绪的回应要求
转写错字导致主诉错误方言口音、环境噪声信源污染增加方言词汇对照表,调高转写置信阈值
同一患者多次随访信息矛盾缺少跨对话的记忆与一致性校验增加历史随访摘要注入,提示Agent比对前后信息

6. 最后说几句实在话

做完这个项目我最大的体会是:提示工程架构师的工作重心,从来不在写提示词本身,而在定义任务边界、设计交互流程、建立反馈回路。真正让效率坐上火箭的,不是某一句神奇的指令,而是把大任务拆成小模块、用状态机约束行为、用结构化输出锁住质量、再配上一套扎实的容错和人工兜底机制。提示词只是这个工程体系里最后落笔的那一层。

跟着我复盘的逻辑去跑一遍,你会发现难的不是让AI开口说话,而是让它每次开口都做对的事。随访这个场景特殊性在于它关乎人的健康,所以我的原则始终是:AI负责效率,人工负责兜底,给患者的体验一定是专业和可靠的。这套思路,放在客服、运营、回访等同样需要大量人机协作的业务里,也完全可以平移。踩过的坑我都记录在上面了,希望你走得比我顺。

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进