AI架构师不是CTO替补,而是PM的‘超能力折叠’:Prompt工程×体验设计×系统权衡

引子:一个失败的“智能客服升级”现场 上周五下午,某电商客服中台会议室里空气凝固。PM在大屏上划出一条刺眼的红色曲线——上线72小时后,“智能意图识别准确率”从基线81.3%跌至69.1%,投诉量环比激增22%。后台日志显示,近40%的用户在输入“截图发你了”“语音转的字不对”“上次那个蓝色的”后,系统直接返回“未识别到有效订单信息”,触发人工强插。 复盘会上,技术同学快速列出“根因”: Prompt仅有一版通用 system message:“你是一个专业客服助手,请友好、准确地回答用户问题。” 前端未做输入清洗:OCR截屏文字含乱码(如“订単号:A8X#2F”)、ASR转写错字率高达18%(“退货”→“退或”、“京东”→“京冻”); 模型选型盲目:为“够用又省钱”,选用7B开源模型本地部署,但未压测真实链路——实测首字延迟(Time to First Token)P95达2.8s,用户平均等待3.2秒后二次点击,造成重复请求风暴。 真正的断点不在代码,而在角色真空:没人负责定义“当用户说‘那个’时,模型该追问还是该猜?”;没人校准“前端加载动画时长是否匹配LLM实际思考节奏”;更没人拍板:“为把首响压到1.5s内,是否接受语法纠错F1值下降0.03?”——这已不是API调用问题,而是语义契约、体验节奏与系统权衡三重能力的协同缺失。 Prompt工程:不是写提示词,而是构建可验证的语义契约 Prompt不是给模型下命令,而是和它签一份带SLA的协作协议:明确输入容错边界、状态记忆规则、输出结构契约,以及越界时的兜底动作。 以电商售后高频模糊请求“我要退货但没订单号”为例,我们放弃单轮泛化Prompt,改用三层防御式设计: Few-shot示例强制对齐语义(含噪声鲁棒性); JSON Schema硬约束输出字段(避免自由发挥); Guardrail Prompt拦截歧义(如用户说“上次买的那个蓝色的”,禁止提取SKU,必须触发追问)。 # OpenAI Function Calling v2 模板(精简版) system_prompt = """ 你是一个电商售后助手,严格按以下规则执行: 1. 输入可能含OCR错字、ASR乱码、指代模糊(如"那个"、"之前"),需主动澄清; 2. 输出必须为合法JSON,符合下方schema; 3. 若无法从输入确定订单号/商品ID/时间范围,字段置null并设置need_clarify=true; 4. 禁止虚构任何信息(如自行补全订单号、猜测SKU)。 """ functions = [{ "name": "submit_return_request", "parameters": { "type": "object", "properties": { "order_id": {"type": "string", "description": "纯数字订单号,长度12-16位,若无则为null"}, "sku_id": {"type": "string", "description": "商品编码,若指代模糊则为null"}, "reason": {"type": "string", "enum": ["质量问题", "发错货", "不想要了", "其他"]}, "need_clarify": {"type": "boolean", "description": "是否需用户补充信息"} }, "required": ["order_id", "sku_id", "reason", "need_clarify"] } }] 输入 模型输出(bad case) 修正后输出 “上次买的那个蓝色的,快递还没拆,要退” {"order_id":"20240512XXXX","sku_id":"SKU-BLUE-001",...} ❌(虚构) {"order_id":null,"sku_id":null,"reason":"不想要了","need_clarify":true} ✅ AB测试结果:结构化输出成功率从63%跃升至91%,人工兜底率下降40%。Prompt的终极目标不是让模型“更聪明”,而是让它“更守约”。 ...

February 21, 2026 · 智通