为什么你的 AI Agent Harness Engineering 总是“听不懂人话”?意图识别与槽位填充的优化实战

发布时间:2026/6/15 5:38:10

为什么你的 AI Agent Harness Engineering 总是“听不懂人话”?意图识别与槽位填充的优化实战 为什么你的 AI Agent Harness Engineering 总是“听不懂人话”意图识别与槽位填充的优化实战1. 引入与连接从“鸡同鸭讲”到“心领神会”的跨越之路1.1 核心概念在正式开始之前我们先快速锚定几个贯穿全文的关键词——这些词将是我们构建知识金字塔的“第一块砖”AI Agent Harness EngineeringAI 驾驭工程区别于“AI 模型训练”的纯算法工作它是将预训练/微调后的 NLP 模块、语音处理模块、工具调用模块、记忆模块等拼装、调试、优化成可落地的、能稳定处理复杂场景的 Agent的工程学科本文聚焦其中语义理解层的核心落地环节——意图识别与槽位填充的“驾驭/调优”而非“从零搭建模型架构”。语义理解Natural Language Understanding, NLUAgent 的“耳朵大脑初步翻译器”把人类的自然语言口语/书面语转化为 Agent 能“懂”的结构化指令结构化语义表示核心输出就是意图槽位。意图识别Intent Recognition, IRNLU 的第一步——判断用户“想做什么”。比如“帮我订明天上海虹桥到北京大兴的早班经济舱”的意图是“订机票”“明天天气怎么样”的意图是“查询天气”。槽位填充Slot Filling, SFNLU 的第二步——提取用户“怎么做/做什么的必要条件”。比如上例中的槽位可能是出发城市上海虹桥、到达城市北京大兴、日期明天、舱位经济舱、时段早班。1.2 问题背景“鸡同鸭讲”是 AI Agent 落地的第一杀手1.2.1 真实场景的“血泪故事”假设你花了3个月时间用市面上最火的大语言模型比如 GPT-4o mini、Claude 3 Haiku、Llama 3 8B搭建了一个社区养老护理员助手 Agent功能包括查询老人信息、预约上门服务、记录护理日志、申请紧急药品补给、联系家属。初期你用公司的测试用例测了1000条准确率高达95%——你觉得“稳了”开始推给社区里的3名资深护理员试用。结果第1天就收到了一堆投诉护理员小李说“我输入‘给张阿婆今天上午测血糖的记录备注一下她最近有点头晕’Agent 给我弹出来‘请选择老人姓名、服务类型’的空表单——备注哪去了”意图识别正确是“记录护理日志”但槽位漏了“血糖记录备注”护理员老王说“昨天给李阿公预约了上门理发想改到今天下午三点——输入‘李阿公昨天约的上门理发能不能换到今天下午三点’Agent 居然识别成‘预约上门理发’又给我开了个新预约”意图识别错误把“修改预约”当成了“预约”护理员张姐说“输入‘紧急申请维生素D滴剂张阿婆住在阳光小区3号楼2单元501’Agent 居然要求我填‘药品名称全称’——我已经说‘维生素D滴剂’了啊还有它居然把‘阳光小区’当成了‘老人姓名’”槽位识别错误实体类型冲突你连夜翻了测试用例——原来测试用例全是你写的“标准句式”“查询李阿公的基本信息”“预约明天上午十点张阿婆的上门擦背”“申请李阿公的维生素D滴剂紧急补给”而真实场景中的护理员说话有省略、倒装、口语化、背景信息前置后置混乱、表述冗余但关键信息明确夹杂、意图交叉或隐含——这些都是你的“完美测试用例”没覆盖到的1.2.2 行业数据语义理解的“及格线”有多难根据Gartner 2024年 AI Agent 落地报告全球目前已上线的 AI Agent 中语义理解准确率低于70%的占比高达68%——这些 Agent 要么根本无法落地要么只能处理极简单的“一问一答”“标准指令”场景完全发挥不出 Agent 的“智能助手”价值。在落地失败的 Agent 中语义理解问题占比超过50%——远超“工具调用不稳定”“记忆模块失效”“回复生成不符合规范”等问题。语义理解准确率每提升10%Agent 的用户满意度提升35%Agent 的使用频率提升42%——可以说语义理解是 AI Agent 落地的“第一道门槛”也是“第一道价值护城河”。1.3 问题描述Agent 真的“听不懂人话”吗它的“认知盲区”在哪里很多开发者遇到上面的问题时第一反应是“换个更大的模型”“花更多钱做全量微调”——但事实证明这往往是“性价比最低的解决方案”更大的模型确实能提升通用语义理解能力但垂直领域的专业术语、垂直场景的特定表述逻辑、垂直用户的口语化习惯大模型并没有足够的“针对性训练数据”——全量微调成本太高Llama 3 70B 全量微调一次的 GPU 成本可能超过100万美元而且可能会“遗忘”大模型的通用能力。更重要的是语义理解的问题很多时候不是模型的“能力问题”而是你的“驾驭问题”——比如意图体系设计得太模糊/太冗余、槽位定义得太随意/太复杂、数据清洗和标注做得太粗糙、Prompt Engineering提示词工程做得太烂、没有做意图冲突消解和槽位实体对齐、没有持续做 A/B 测试和迭代优化。所以Agent 不是真的“听不懂人话”而是你“没有给它一套能正确翻译人话的规则没有给它足够的‘人话’训练样本没有给它一套持续纠错的机制”——这就是本文要解决的核心问题如何通过“可落地的、高性价比的工程化方法”而非“盲目堆算力堆模型”优化你的意图识别与槽位填充系统让你的 AI Agent 真正“听懂人话”1.4 问题解决本文的核心方法论与学习路径本文将采用“工程优先模型辅助”的 AI Agent 驾驭工程方法论聚焦垂直场景下的语义理解优化通用场景下的语义理解优化主要靠大模型本身工程化空间较小核心内容分为以下7个模块概念地图与语义理解基础架构先建立对语义理解系统的“整体认知”——了解意图识别与槽位填充的关系、了解当前主流的语义理解技术架构规则引擎→传统机器学习→预训练模型微调→Prompt Tuning→RAG微调→大模型端到端生成、了解每种技术架构的“适用边界”——这是选择优化方案的基础。意图体系设计从“拍脑袋”到“体系化”的第一步意图识别错误80%的问题出在“意图体系设计得不好”——本模块将教你如何“用工程化的方法设计意图体系”如何从业务场景中“挖掘意图”、如何“分类和层级化意图”、如何“定义意图的边界和触发条件”、如何“处理意图冲突和隐含意图”。槽位体系设计把“用户的碎碎念”转化为“结构化数据”槽位填充错误70%的问题出在“槽位定义得不好”——本模块将教你如何“设计可落地的槽位体系”如何从业务规则中“挖掘槽位”、如何“分类槽位必填槽位、可选槽位、计算槽位、自定义槽位”、如何“定义槽位的实体类型通用实体、自定义实体、枚举实体、模糊实体”、如何“处理槽位冲突和槽位省略/冗余”。数据工程语义理解优化的“燃料”——没有好数据一切都是空谈数据是 AI 模型的“粮食”也是工程化调优的“基础”——本模块将教你如何“做垂直场景下的语义理解数据工程”如何“从业务日志中“挖掘真实的用户语料”、如何“清洗和去重语料”、如何“规范标注意图和槽位标注规范标注工具标注质量控制”、如何“数据增强低成本生成高质量的训练/测试语料”。Prompt Engineering 轻量级微调驾驭大模型的“两大神器”现在主流的垂直场景语义理解优化都是“Prompt Engineering 为主轻量级微调LoRA、QLoRA、Adapter为辅”——本模块将教你如何“写好意图识别与槽位填充的 Prompt”、如何“做轻量级微调环境搭建数据准备训练配置评估部署”、如何“把 Prompt Engineering 和轻量级微调结合起来”。工程化调优与持续迭代让语义理解系统“越来越聪明”语义理解优化不是“一劳永逸”的——业务场景在变用户的表述习惯在变所以你需要“一套持续调优的机制”——本模块将教你如何“做意图识别与槽位填充的评估准确率、召回率、F1值、槽位填充准确率、槽位召回率、整体语义理解准确率”、如何“做 A/B 测试对比不同优化方案的效果”、如何“做错误分析找出语义理解错误的根本原因”、如何“做持续迭代根据错误分析结果优化意图体系、槽位体系、数据、Prompt、模型”。实战项目从零到一优化一个“社区养老护理员助手 Agent”的语义理解系统本模块将把前面所有的知识整合起来通过一个真实的垂直场景实战项目教你“如何一步步优化语义理解系统”——包括项目背景、环境安装、意图体系设计、槽位体系设计、数据工程、Prompt Engineering、轻量级微调、评估、错误分析、持续迭代。1.5 学习价值与应用场景预览1.5.1 学习价值读完本文并完成实战项目后你将获得以下能力工程化思维能从“业务落地”的角度而非“纯算法”的角度思考语义理解问题。体系化设计能力能设计出“边界清晰、层级合理、可扩展”的意图体系和槽位体系。数据工程能力能从业务日志中挖掘真实语料能清洗、标注、增强语义理解数据。大模型驾驭能力能写好意图识别与槽位填充的 Prompt能做轻量级微调LoRA、QLoRA。持续迭代能力能做语义理解系统的评估、A/B 测试、错误分析、持续优化。1.5.2 应用场景本文的知识和方法可以应用于所有需要自然语言理解的垂直场景 AI Agent比如客服机器人电商客服、银行客服、运营商客服、政务客服。生活服务助手外卖助手、打车助手、酒店预订助手、机票预订助手、旅游助手。企业内部助手员工考勤助手、报销助手、会议室预订助手、知识库查询助手。教育助手作业批改助手、知识点查询助手、课程预约助手、答疑助手。医疗健康助手挂号助手、问诊助手、药品查询助手、健康监测助手就是本文的实战项目场景。1.6 边界与外延在正式开始之前我们先明确本文的边界与外延——避免读者产生误解1.6.1 边界本文不讨论从零搭建意图识别与槽位填充的模型架构比如 BiLSTM-CRF、BERT-CRF 的原理和实现——这些属于“纯算法”的内容网上有很多优质的教程。本文不讨论语音识别ASR和语音合成TTS的优化——虽然 ASR 的准确率会影响 NLU 的效果但 ASR 属于另一个独立的领域本文聚焦 NLU 本身的优化。本文不讨论端到端大模型生成结构化语义表示的“极致方案”——比如直接用 GPT-4o 生成 JSON 格式的意图槽位虽然这种方案的通用能力很强但成本很高每次调用都要花钱、延迟很高大模型推理需要时间、可控性很差可能会生成不符合规范的 JSON——本文聚焦“成本低、延迟低、可控性强、适合垂直场景落地”的方案规则引擎Prompt Engineering轻量级微调。本文聚焦垂直场景下的语义理解优化——通用场景下的语义理解优化主要靠大模型本身工程化空间较小。1.6.2 外延本文提到的工程化方法可以延伸到“其他 NLP 任务的优化”——比如文本分类、命名实体识别、关系抽取、文本摘要等。本文提到的持续迭代机制可以延伸到“整个 AI Agent 的优化”——比如工具调用优化、记忆模块优化、回复生成优化等。2. 概念地图与语义理解基础架构建立对“翻译系统”的整体认知2.1 核心概念在深入学习优化方法之前我们先完善一下语义理解的“核心概念库”——这些词将是我们后面所有讨论的“基础词汇”2.1.1 结构化语义表示Structured Semantic Representation, SSRNLU 的最终输出把人类的自然语言转化为 Agent 能“懂”的“计算机语言”——常见的 SSR 格式有意图槽位对最简单、最常用的 SSR 格式比如{intent:预约上门服务,slots:{老人姓名:张阿婆,服务类型:测血糖,服务时间:2024-06-15 09:00,备注:最近有点头晕}}AMRAbstract Meaning Representation抽象意义表示一种更复杂的、基于图的 SSR 格式能表示更复杂的语义关系比如因果关系、并列关系、否定关系——但 AMR 的标注成本很高落地难度较大本文不讨论。RDFResource Description Framework资源描述框架一种基于语义网的 SSR 格式主要用于知识图谱的查询——本文不讨论。2.1.2 意图类型根据业务复杂度和表述清晰度我们可以把意图分为以下几种类型单一明确意图用户只说一件事表述非常清晰没有歧义——比如“帮我订明天上海虹桥到北京大兴的早班经济舱”。单一隐含意图用户只说一件事但表述比较含蓄需要结合上下文或业务知识才能判断——比如“明天我要去北京出差”隐含意图可能是“查询明天上海到北京的机票”“查询明天上海到北京的高铁”“查询北京的酒店”——需要结合上下文判断。多重明确意图用户同时说多件事每件事的表述都很清晰——比如“帮我订明天上海虹桥到北京大兴的早班经济舱再订一下北京大兴机场附近的如家快捷酒店”。多重隐含意图用户同时说多件事每件事的表述都比较含蓄——比如“明天我要去北京出差后天回来家里没人”隐含意图可能是“订机票订酒店预约上门喂猫”——需要结合上下文和用户画像判断。2.1.3 槽位类型根据业务规则和用户表述习惯我们可以把槽位分为以下几种类型必填槽位Required Slot完成用户意图所必须的信息——如果用户没有提供Agent 必须追问——比如“订机票”的必填槽位是“出发城市”“到达城市”“日期”。可选槽位Optional Slot完成用户意图所不是必须的信息——如果用户提供了Agent 就使用如果用户没有提供Agent 就使用默认值——比如“订机票”的可选槽位是“舱位”“时段”“航空公司”。计算槽位Calculated Slot不需要用户提供Agent 可以通过其他槽位或业务规则计算出来的信息——比如“订机票”的计算槽位是“出发日期的星期几”“到达时间与出发时间的差值”。追问槽位Follow-up Slot当用户提供的信息不够明确时Agent 可以追问的信息——比如“老人姓名”是“李阿公”还是“张阿公”“服务时间”是“明天上午”还是“明天下午”2.1.4 实体类型根据实体的来源和定义方式我们可以把实体槽位的值分为以下几种类型通用实体General Entity大模型或开源 NER 工具比如 SpaCy、NLTK、HanLP已经预训练好的实体——比如“人名”“地名”“时间”“日期”“数字”“货币”。枚举实体Enumerated Entity可以用有限的枚举值定义的实体——比如“舱位”的枚举值是“经济舱”“商务舱”“头等舱”“服务类型”的枚举值是“测血糖”“量血压”“上门擦背”“上门理发”“紧急药品补给”。自定义正则实体Custom Regex Entity可以用正则表达式定义的实体——比如“身份证号”“手机号”“邮箱地址”“药品批准文号”。自定义模糊实体Custom Fuzzy Entity无法用有限的枚举值或正则表达式定义的实体——比如“社区养老护理员助手 Agent”中的“药品名称”可能有很多种药品而且用户的表述可能不规范——比如“维生素D滴剂”可能被用户说成“VD滴剂”“维生素D”“阿婆的VD”。2.2 问题背景为什么要先了解语义理解的技术架构很多开发者遇到语义理解问题时第一反应是“换个大模型”——但事实证明不同的技术架构有不同的适用边界如果你选择了错误的技术架构就算你用了 GPT-4o也可能无法解决你的问题比如你的业务场景是“处理极简单的、标准句式的、低并发的指令”比如“打开空调”“关闭电视”“调亮灯光”——那么规则引擎就是“性价比最高的方案”根本不需要用大模型。比如你的业务场景是“处理中等复杂度的、有一定语料积累的、中高并发的指令”比如“电商客服机器人处理退货退款、查询订单、修改地址”——那么传统机器学习模型比如 SVM、XGBoost 做意图识别CRF 做槽位填充或预训练模型轻量级微调比如 BERT-base 微调做意图识别BERT-base-CRF 微调做槽位填充就是“性价比最高的方案”。比如你的业务场景是“处理高复杂度的、语料积累较少的、低并发的指令”比如“法律咨询助手处理复杂的合同纠纷、劳动争议”——那么Prompt Engineering 大模型比如 GPT-4o mini、Claude 3 Haiku就是“性价比最高的方案”。比如你的业务场景是“处理极高复杂度的、有一定语料积累的、中高并发的指令”比如“银行客服机器人处理复杂的贷款申请、信用卡分期、投资理财咨询”——那么Prompt Engineering 轻量级微调 规则引擎做兜底和验证就是“性价比最高的方案”。所以先了解语义理解的技术架构和适用边界是选择优化方案的第一步——也是最重要的一步。2.3 问题描述语义理解的技术架构有哪些每种架构的“优劣势”和“适用边界”是什么语义理解的技术架构经历了四个阶段的演变规则引擎阶段→传统机器学习阶段→预训练模型阶段→大模型阶段——下面我们分别介绍每种架构的“核心原理”“优劣势”“适用边界”。2.3.1 第一阶段规则引擎Rule-based NLU核心原理规则引擎是最早的语义理解技术架构——它的核心原理是“人工编写规则”意图识别规则比如“如果用户的输入中包含‘订机票’‘买机票’‘预订机票’‘订飞机票’等关键词那么意图就是‘订机票’”。槽位填充规则比如“如果用户的输入中包含‘从A到B’那么A就是‘出发城市’B就是‘到达城市’如果用户的输入中包含‘明天’‘后天’‘下周一’等时间关键词那么就用正则表达式或时间解析库比如 dateutil、arrow、moment解析成标准的日期格式”。直观示例与演示假设我们为“社区养老护理员助手 Agent”编写了以下规则# 意图识别规则关键词匹配intent_rules{查询老人信息:[查询,老人信息,基本信息,看看,阿婆,阿公],预约上门服务:[预约,上门,服务,测血糖,量血压,擦背,理发],修改预约:[修改,改,换,调整,预约],取消预约:[取消,删除,不要,预约],记录护理日志:[记录,日志,护理,备注],申请紧急药品补给:[申请,紧急,药品,补给,维生素D,降压药,降糖药]}# 槽位填充规则关键词匹配正则表达式时间解析importrefromdateutil.parserimportparsefromdateutil.relativedeltaimportrelativedeltadefparse_time(text):try:# 先尝试直接解析dtparse(text,fuzzyTrue)# 如果解析出来的年份是当前年份之前的就加1年ifdt.yeardatetime.now().year:dtrelativedelta(years1)returndt.strftime(%Y-%m-%d %H:%M)except:returnNonedefparse_slot(text,slot_name):ifslot_name老人姓名:# 简单的关键词匹配实际场景中可以用 NER 工具names[张阿婆,李阿公,王阿婆,赵阿公]fornameinnames:ifnameintext:returnnamereturnNoneelifslot_name服务类型:# 枚举实体匹配service_types[测血糖,量血压,上门擦背,上门理发,紧急药品补给]forservice_typeinservice_types:ifservice_typeintext:returnservice_typereturnNoneelifslot_name服务时间:# 时间解析returnparse_time(text)elifslot_name药品名称:# 枚举实体匹配实际场景中可以用自定义模糊实体medicines[维生素D滴剂,降压药,降糖药,感冒药,消炎药]formedicineinmedicines:ifmedicineintext:returnmedicinereturnNoneelifslot_name备注:# 简单的提取实际场景中可以用依存句法分析if备注intext:returntext.split(备注)[-1].strip()returnNoneelse:returnNone现在我们用规则引擎测试一下之前护理员投诉的三条语料第一条语料“给张阿婆今天上午测血糖的记录备注一下她最近有点头晕”意图识别匹配到了“记录”“日志”“护理”“备注”所以意图是“记录护理日志”正确。槽位填充老人姓名匹配到了“张阿婆”正确。备注匹配到了“备注”后面的内容“她最近有点头晕”正确。哦我们的规则里“记录护理日志”的必填槽位还有“护理类型”和“护理时间”——但我们的规则里没有定义“护理类型”的提取规则也没有定义“护理时间”的提取规则这条语料里的“今天上午测血糖”其实包含了“护理时间”和“护理类型”——所以规则引擎会漏填槽位。第二条语料“李阿公昨天约的上门理发能不能换到今天下午三点”意图识别同时匹配到了“修改”“改”“换”“预约”和“预约”“上门”“服务”“理发”——规则引擎不知道该选哪个意图冲突——如果我们的规则是“先匹配到的意图优先”那么可能会识别成“预约上门服务”错误。第三条语料“紧急申请维生素D滴剂张阿婆住在阳光小区3号楼2单元501”意图识别匹配到了“申请”“紧急”“药品”“补给”“维生素D”所以意图是“申请紧急药品补给”正确。槽位填充药品名称匹配到了“维生素D滴剂”正确。老人姓名我们的规则是“遍历所有枚举的人名找到第一个匹配的”——但这条语料里没有枚举的人名哦张阿婆是枚举的——但如果用户说的是“住在阳光小区3号楼2单元501的张阿婆”或者“李阿婆”不在枚举列表里规则引擎就会匹配错误或匹配不到。哦我们的规则里“申请紧急药品补给”的必填槽位还有“老人住址”——但我们的规则里没有定义“老人住址”的提取规则——所以规则引擎会漏填槽位。优劣势与适用边界优势劣势适用边界1. 成本极低不需要数据不需要模型只需要人工编写规则。2. 可控性极强100%知道规则引擎为什么会这么判断。3. 延迟极低规则匹配的速度非常快。4. 适用于处理极简单的、标准句式的指令。1. 无法处理隐含意图和多重意图。2. 无法处理口语化、省略、倒装、冗余的表述。3. 规则的维护成本极高业务场景每变一次规则就要改一次用户的表述习惯每变一次规则就要改一次意图和槽位每增加一个规则就要加一堆。4. 规则的覆盖范围有限人工不可能写出所有可能的规则。5. 无法处理模糊实体。1. 智能家居控制比如“打开空调”“关闭电视”“调亮灯光”。2. 极简单的问答系统比如“今天是星期几”“明天天气怎么样”——但这里的“明天天气怎么样”其实可以用第三方天气 API 直接解析时间和地点。3. 大模型或机器学习模型的“兜底方案”比如当大模型或机器学习模型的置信度低于某个阈值时就用规则引擎处理。4. 大模型或机器学习模型的“验证方案”比如当大模型或机器学习模型生成的结构化语义表示不符合业务规则时就用规则引擎修正或拒绝。2.3.2 第二阶段传统机器学习Traditional Machine Learning, TML核心原理传统机器学习架构是规则引擎的升级版——它的核心原理是“用数据训练模型让模型自动学习规则”意图识别通常被视为文本分类任务——常用的模型有朴素贝叶斯Naive Bayes、支持向量机SVM、随机森林Random Forest、XGBoost、LightGBM、CatBoost。槽位填充通常被视为序列标注任务——常用的模型有隐马尔可夫模型HMM、条件随机场CRF、最大熵马尔可夫模型MEMM。直观示例与演示假设我们为“社区养老护理员助手 Agent”的“预约上门服务”意图识别任务收集了100条标注好的训练语料训练语料标注意图帮我预约张阿婆明天上午的测血糖预约上门服务李阿公后天下午要量血压预约上门服务给王阿婆约个下周一的上门擦背预约上门服务赵阿公想明天上午理发预约上门服务张阿婆的基本信息是什么查询老人信息李阿公昨天约的测血糖能不能改到今天下午修改预约……然后我们用 TF-IDF 做特征提取用 SVM 做意图识别模型——训练好之后我们测试一下之前护理员投诉的第二条语料“李阿公昨天约的上门理发能不能换到今天下午三点”。SVM 模型会计算这条语料属于每个意图的置信度预约上门服务0.3修改预约0.6取消预约0.05查询老人信息0.03记录护理日志0.01申请紧急药品补给0.01因为“修改预约”的置信度最高0.6所以 SVM 模型会识别成“修改预约”正确——比规则引擎好多了但如果我们测试一下这条语料“李阿公最近头发有点长了”隐含意图是“预约上门理发”——SVM 模型可能会识别成“查询老人信息”错误因为这条语料里没有“预约”“上门”“理发”等关键词。优劣势与适用边界优势劣势适用边界1. 比规则引擎的覆盖范围广可以自动学习一些人工没有想到的规则。2. 可以处理一些口语化、省略、倒装的表述如果训练语料里有足够的样本。3. 比规则引擎的维护成本低业务场景或用户表述习惯变化时只需要添加新的训练语料重新训练模型即可——不需要修改大量的规则。4. 延迟较低传统机器学习模型的推理速度比大模型快得多。1. 需要大量的标注好的训练语料通常每个意图需要至少100-500条标注好的训练语料——标注成本较高。2. 特征工程的难度较大需要人工设计特征——比如 TF-IDF、N-gram、词性标注、依存句法分析等——特征设计得不好模型的准确率会很低。3. 无法处理隐含意图和多重意图除非训练语料里有足够的样本而且模型的设计比较复杂。4. 无法处理模糊实体除非用自定义的知识库做辅助。5. 泛化能力较差只能处理训练语料覆盖的场景——如果遇到训练语料里没有的场景模型的准确率会急剧下降。1. 中等复杂度的、有一定语料积累的、中高并发的场景比如“电商客服机器人处理退货退款、查询订单、修改地址”——这些场景通常有大量的历史客服日志可以用来做训练语料。2. 对延迟要求较高的场景比如“实时客服机器人”——大模型的推理延迟可能超过1秒而传统机器学习模型的推理延迟通常在100毫秒以内。3. 对成本要求较高的场景传统机器学习模型的训练和推理成本都比大模型低得多。2.3.3 第三阶段预训练模型Pre-trained Language Model, PLM核心原理预训练模型架构是传统机器学习架构的升级版——它的核心原理是“用海量的无标注文本预训练一个‘通用语言理解模型’然后用少量的标注好的垂直场景文本微调这个模型让模型适应垂直场景”意图识别通常被视为文本分类任务——常用的模型有BERT、RoBERTa、ALBERT、ELECTRA、DeBERTa。槽位填充通常被视为序列标注任务——常用的模型有BERT-CRF、RoBERTa-CRF、ALBERT-CRF。联合意图识别与槽位填充近年来越来越多的研究人员开始研究“联合意图识别与槽位填充模型”——因为意图识别和槽位填充是两个高度相关的任务比如“订机票”的意图通常会有“出发城市”“到达城市”“日期”等槽位而“查询天气”的意图通常会有“地点”“日期”等槽位——联合模型可以利用两个任务之间的相关性提高整体的准确率——常用的模型有JointBERT、Slot-Gated Model、Bi-Model。直观示例与演示假设我们为“社区养老护理员助手 Agent”的“联合意图识别与槽位填充”任务收集了50条标注好的训练语料比传统机器学习模型少得多训练语料标注意图标注槽位帮我预约张阿婆明天上午的测血糖预约上门服务老人姓名张阿婆服务时间2024-06-15 09:00服务类型测血糖李阿公最近头发有点长了预约上门服务老人姓名李阿公服务类型上门理发李阿公昨天约的上门理发能不能换到今天下午三点修改预约老人姓名李阿公原服务时间2024-06-14 14:00新服务时间2024-06-15 15:00服务类型上门理发………然后我们用 Hugging Face 的 Transformers 库加载预训练好的bert-base-chinese模型用 JointBERT 做联合意图识别与槽位填充模型——训练好之后我们测试一下之前护理员投诉的三条语料第一条语料“给张阿婆今天上午测血糖的记录备注一下她最近有点头晕”意图识别“记录护理日志”正确。槽位填充老人姓名张阿婆护理时间2024-06-15 09:00护理类型测血糖备注她最近有点头晕正确——比规则引擎好多了第二条语料“李阿公昨天约的上门理发能不能换到今天下午三点”意图识别“修改预约”正确。槽位填充老人姓名李阿公原服务时间2024-06-14 10:00假设新服务时间2024-06-15 15:00服务类型上门理发正确——比规则引擎好多了第三条语料“紧急申请维生素D滴剂张阿婆住在阳光小区3号楼2单元501”意图识别“申请紧急药品补给”正确。槽位填充药品名称维生素D滴剂老人姓名张阿婆老人住址阳光小区3号楼2单元501正确——比规则引擎好多了然后我们测试一下这条隐含意图的语料“李阿公最近头发有点长了”——JointBERT 模型会识别成“预约上门服务”槽位填充“老人姓名李阿公服务类型上门理发”正确——比传统机器学习模型好多了优劣势与适用边界优势劣势适用边界1. 泛化能力极强可以处理训练语料里没有的场景——因为预训练模型已经学习了海量的通用语言知识。2. 特征工程的难度极低不需要人工设计特征——预训练模型会自动学习特征。3. 需要的标注好的训练语料极少通常每个意图需要至少10-100条标注好的训练语料——比传统机器学习模型少10倍以上。4. 可以处理隐含意图、多重意图、口语化、省略、倒装、冗余的表述如果训练语料里有足够的样本。5. 可以处理模糊实体如果用自定义的知识库做辅助或者训练语料里有足够的样本。6. 联合模型可以利用意图识别和槽位填充之间的相关性提高整体的准确率。1. 比传统机器学习模型的训练和推理成本高预训练模型的参数通常在1亿以上——需要 GPU 才能训练和推理。2. 比规则引擎的可控性差很难知道预训练模型为什么会这么判断——黑盒问题。3. 比规则引擎的延迟高预训练模型的推理延迟通常在100-500毫秒之间——比规则引擎慢但比大模型快。4. 全量微调的成本极高预训练模型的参数通常在1亿以上——全量微调一次的 GPU 成本可能超过1万美元——所以通常采用“轻量级微调”比如 LoRA、QLoRA、Adapter。1. 中高复杂度的、语料积累较少的、中高并发的场景比如“社区养老护理员助手 Agent”——这些场景通常没有大量的历史语料但可以用少量的标注好的语料微调预训练模型。2. 对泛化能力要求较高的场景比如“用户的表述习惯变化较快的场景”。3. 对特征工程要求较低的场景比如“没有 NLP 专家的团队”。2.3.4 第四阶段大模型Large Language Model, LLM核心原理大模型架构是预训练模型架构的升级版——它的核心原理是“用万亿级的无标注文本预训练一个‘通用人工智能模型’然后用 Prompt Engineering提示词工程引导模型完成垂直场景的语义理解任务或者用少量的标注好的垂直场景文本做轻量级微调比如 LoRA、QLoRA让模型适应垂直场景”意图识别与槽位填充通常被视为文本生成任务——让大模型直接生成 JSON 格式的结构化语义表示或者让大模型生成“意图槽位对”的自然语言描述然后用正则表达式或其他工具解析成结构化语义表示。Prompt Engineering是大模型架构的核心——通过写好的提示词引导大模型完成语义理解任务——常用的 Prompt Engineering 技巧有Few-shot Learning少样本学习、Chain-of-Thought思维链、Role Prompting角色提示、Format Prompting格式提示、Constraints Prompting约束提示。直观示例与演示假设我们为“社区养老护理员助手 Agent”写了以下 Few-shot Learning 的 Prompt你是一个专业的社区养老护理员助手你的任务是把护理员的自然语言输入转化为 JSON 格式的结构化语义表示。 ### 结构化语义表示的格式要求 - intent必须是以下意图之一[查询老人信息, 预约上门服务, 修改预约, 取消预约, 记录护理日志, 申请紧急药品补给, 其他]。 - slots必须是一个 JSON 对象包含当前意图的所有可能的槽位——如果用户没有提供某个槽位的值就用 null 填充如果用户提供了某个槽位的值就用字符串填充。 - 查询老人信息的槽位[老人姓名, 老人身份证号, 老人住址]。 - 预约上门服务的槽位[老人姓名, 服务类型, 服务时间, 备注]。 - 修改预约的槽位[老人姓名, 原服务时间, 新服务时间, 服务类型, 备注]。 - 取消预约的槽位[老人姓名, 服务时间, 服务类型]。 - 记录护理日志的槽位[老人姓名, 护理时间, 护理类型, 备注]。 - 申请紧急药品补给的槽位[老人姓名, 药品名称, 药品规格, 老人住址, 备注]。 - 其他的槽位[]。 ### 少样本示例 #### 示例1 输入帮我预约张阿婆明天上午的测血糖 输出 { intent: 预约上门服务, slots: { 老人姓名: 张阿婆, 服务类型: 测血糖, 服务时间: 2024-06-15 09:00, 备注: null } } #### 示例2 输入李阿公最近头发有点长了 输出 { intent: 预约上门服务, slots: { 老人姓名: 李阿公, 服务类型: 上门理发, service_time: null, 备注: null } } #### 示例3 输入李阿公昨天约的上门理发能不能换到今天下午三点 输出 { intent: 修改预约, slots: { 老人姓名: 李阿公, 原服务时间: 2024-06-14 10:00, 新服务时间: 2024-06-15 15:00, 服务类型: 上门理发, 备注: null } } #### 示例4 输入给张阿婆今天上午测血糖的记录备注一下她最近有点头晕 输出 { intent: 记录护理日志, slots: { 老人姓名: 张阿婆, 护理时间: 2024-06-15 09:00, 护理类型: 测血糖, 备注: 她最近有点头晕 } } #### 示例5 输入紧急申请维生素D滴剂张阿婆住在阳光小区3号楼2单元501 输出 { intent: 申请紧急药品补给, slots: { 老人姓名: 张阿婆, 药品名称: 维生素D滴剂, 药品规格: null, 老人住址: 阳光小区3号楼2单元501, 备注: null } } ### 现在请处理以下输入 输入{user_input} 输出然后我们用 GPT-4o mini 测试一下之前护理员投诉的三条语料——准确率应该是100%然后我们测试一下这条多重隐含意图

相关新闻