这道题其实问的是,当用户说一半或者说不清楚的时候,[[Agent]]怎么把话接住、把事办成。本质上是个不确定性决策问题,不是简单填槽位。核心思路是三层递进:先搞清楚缺了什么,再猜用户可能想要什么,最后聪明地问出来。
先说第一层,对话状态追踪。我理解就是维护一张槽位表,记录哪些字段已经确认、哪些待确认、哪些完全缺失。每轮更新信念状态,比如用户说“转账”,金额和账户就是缺失的,但意图是明确的。这里有个关键点:要区分用户明确说的和我系统推断的,推断的要打置信度,不能混为一谈。
第二层,意图推断。模糊类型分几种:信息缺失、指代消解、话题跳跃。信息缺失最简单,按必填槽位优先级追问就行。指代消解比如“那个账单”,需要结合上下文[[实体链接]],或者用[[RAG]]从用户历史里召回。举个例子,用户说“那个理财”,系统不知道是哪个,但如果RAG检索到他最近的持仓记录,发现他刚买过一款“稳健理财”,就能推断大概率指这个。话题跳跃更麻烦,要检测意图切换信号,比如用户突然问“那我的信用卡呢”,这时候得判断是继续当前任务还是新开一个。
第三层,主动追问。不是所有缺失都问,触发条件有三个:关键槽位缺失、置信度低于阈值、而且不是终止意图。问题生成我倾向用模板加大模型微调,控制长度和选项数量,别给用户五个选项让他选。终止策略也得想好:用户明确说“就这样”、或者达到最大轮数、或者检测到放弃信号比如用户说“算了”。
RAG和Agent的协同,这里我重点讲。不是一次性检索,而是每轮根据当前状态动态构造查询。比如第一轮用户说“转账”,检索转账流程知识;第二轮用户补充“给张三转”,检索张三的账户信息。检索结果作为prompt里的context,标注来源,这样模型知道哪些是事实哪些是猜测。
落地时有个前提:金融场景合规优先。涉及金额、账户这种敏感字段,必须确认不能推测。比如用户说“帮我转点钱”,系统不能猜金额,必须追问“请问转多少”,而且要明确提醒“您确认转账1000元吗”。常见失败场景是,系统自以为是地填了默认值,用户没注意就确认了,后续出问题很麻烦。所以上线我会特别关注置信度阈值,低于某个值直接转人工,不强行猜。
还有一个延伸点:[[多模态]]输入。比如用户上传一张账单截图,系统需要先[[OCR]]识别文字,再结合RAG解析。这里有个坑,OCR可能出错,比如把数字“1”识别成“l”,所以RAG检索时要容忍拼写错误,或者用[[Embedding]]相似度匹配。这个方向我还在探索,比如怎么把OCR置信度和RAG检索分数联合起来做决策。
所以整体上,我更倾向于把意图补全看作一个动态决策过程,不是填完槽位就结束,而是每轮根据状态、置信度、风险来权衡。如果让我取舍,我会优先保证安全和准确,宁可多问一轮,也不替用户做决定。