一、面试题目面试官AI Agent 中如何做用户意图识别、关键参数自动补全遇到用户模糊、残缺、不明确需求时Agent 标准处理流程和落地方案是什么二、知识储备1. 核心概念意图识别从用户自然语言中精准判断用户想做什么如查天气、订票、数据分析、生成报表把口语化需求映射到预定义业务意图 / 工具能力。参数补全识别出意图后自动提取必填参数、选填参数缺失则主动追问有歧义则澄清有默认值则自动填充。模糊需求用户表述笼统、信息不全、目标不清晰、多意图混杂、语义歧义Agent 不能瞎猜乱执行要先澄清、再明确、后执行。2. Agent 意图识别三种实现方案方案 1Prompt 规则式轻量首选把所有意图列表 描述 触发话术写进系统提示词让 LLM 直接输出结构化意图结果。优点开发快、无需训练、小体量 Agent 够用缺点意图多了容易混淆量大精度下降方案 2小模型分类工业常用部署轻量分类模型文本分类专门做意图预判输出意图 ID。优点速度快、成本低、高并发稳定缺点需要标注少量样本方案 3向量语义匹配海量意图把每个意图做描述 Embedding用户问句向量化语义相似度匹配最接近意图。优点支持海量意图、新增不用改代码、泛化强缺点依赖向量库、计算略有开销方案 4Function Calling 原生意图识别把每个能力封装成 FunctionLLM 选哪个函数 识别出对应意图。现在主流 Agent 都是这套函数即意图。3. 参数提取与自动补全标准流程① 定义意图 Schema每个意图提前约定必填参数、选填参数参数类型、枚举、格式、示例默认值、追问话术② LLM 实体抽取从用户语句中自动提取城市、时间、人数、金额、文件名称等。③ 参数校验校验类型、范围、枚举合规性。④ 缺失参数主动追问缺哪个问哪个不一次性全问渐进式澄清。⑤ 有歧义参数双向确认例如 “明天” 是哪一天、“北京” 北京全城还是北京朝阳区。⑥ 有默认值自动填充非必填缺省时自动给默认不用打扰用户。4. 模糊需求的标准处理流程面试必背用户需求模糊 / 残缺 / 太笼统 / 多意图混杂Agent 遵循 5 步标准流程第 1 步意图歧义收敛先判断单一意图、多意图、无明确意图。第 2 步信息缺失检测对照当前意图 Schema检查必填参数缺哪些。第 3 步结构化渐进式追问一次只问一个关键问题不连环轰炸保持对话自然。第 4 步给出可选选项约束用户不让用户自由乱输入给出选项让用户选择降低理解难度。例你想查北京天气还是上海天气第 5 步确认目标后再执行把整理好的意图 完整参数复述给用户确认同意再执行避免做错。5. 工程落地最佳实践意图与工具绑定一个意图对应一个工具函数便于维护。统一参数 Schema 规范所有意图共用一套参数校验器。多轮上下文关联追问后记住用户回答自动回填参数。禁止模型自行脑补必填参数缺失必须追问不许瞎猜。多意图拆分一句话多个需求自动拆解成多个子任务依次处理。意图置信度阈值低于阈值不强行判定直接反问用户 “没理解请说明白一点”。三、破局之道面试高阶表述Agent 意图识别本质是把自然语言需求映射到可执行业务能力参数补全是结构化约束下的信息抽取与闭环追问。模糊需求不能让模型自由发挥、不能脑补参数必须走歧义收敛→缺失检测→渐进追问→选项约束→确认执行的标准化流程。工程上优先采用Function Calling 语义向量匹配 统一参数 Schema 校验组合方案既能快速开发又能保证高识别准确率同时通过多轮上下文记忆实现参数自动回填让 Agent 面对用户模糊需求时不跑偏、不瞎执行、体验自然流畅。四、代码实现Python 版本# 1. 定义意图参数结构 intent_schema { query_weather: { desc: 查询天气, required: [city], optional: [date], default: {date: 今天} } } class IntentParamAgent: def __init__(self): self.current_intent None self.params {} # 意图识别模拟LLM结构化输出 def recognize_intent(self, user_query): if 天气 in user_query: return query_weather return None # 参数抽取 def extract_param(self, user_query): params {} if 北京 in user_query: params[city] 北京 return params # 检查缺失必填参数 def get_missing_param(self, intent, params): req intent_schema[intent][required] return [k for k in req if k not in params] # 处理模糊需求主流程 def handle_fuzzy_query(self, user_query): # 1. 意图识别 intent self.recognize_intent(user_query) if not intent: return 没理解你的需求请说明你想做什么 self.current_intent intent # 2. 参数抽取 self.params.update(self.extract_param(user_query)) # 3. 检查缺失 missing self.get_missing_param(intent, self.params) if missing: return f请告诉我 {missing[0]} 信息 # 4. 补默认值 for k,v in intent_schema[intent][default].items(): if k not in self.params: self.params[k] v # 5. 可以执行 return f确认为你查询 {self.params[city]} {self.params[date]} 天气是否执行JavaScript 版本const intentSchema { query_weather: { desc: 查询天气, required: [city], optional: [date], default: { date: 今天 } } }; class IntentParamAgent { constructor() { this.currentIntent null; this.params {}; } recognizeIntent(query) { if (query.includes(天气)) return query_weather; return null; } extractParam(query) { let p {}; if (query.includes(北京)) p.city 北京; return p; } getMissingParam(intent, params) { let req intentSchema[intent].required; return req.filter(k !params[k]); } handleFuzzyQuery(userQuery) { // 意图识别 let intent this.recognizeIntent(userQuery); if (!intent) return 没理解你的需求请补充说明; this.currentIntent intent; // 参数抽取 let p this.extractParam(userQuery); this.params {...this.params, ...p}; // 缺失检查 let missing this.getMissingParam(intent, this.params); if (missing.length 0) { return 请告诉我 ${missing[0]} 信息; } // 填充默认 let def intentSchema[intent].default; for(let k in def) { if(!this.params[k]) this.params[k] def[k]; } return 确认为你查询${this.params.city}${this.params.date}天气是否执行; } }