做过指标智能问数系统的同学都知道——能让系统听懂“上周浙江地区销售额同比多少?”这样的自然语言提问,并自动生成 SQL 拿到结果,已经很不容易,而且生成的数据和解析结果往往也会出现不准确的情况。
指标智能问数系统通常依赖于 LLM 将用户的自然语言(NL)查询(如:“上周浙江地区销售额同比多少”)转换为可执行的 SQL 或 API 调用。其核心挑战在于:
语义理解歧义:业务指标名称复杂、存在简称或同义词。
上下文依赖:复杂的问数涉及多轮对话和上下文追踪。
问数系统始终停留在“被问”的阶段——不会反思,也不会进步。
于是,我们想让它变得更聪明。让模型从每一次点赞点踩中学习,用 few-shot 的方式“自我进化”。
有时候模型答得很准,用户开心地点个 👍;
有时候模型理解偏了,用户点个 👎;
目标很简单:不改模型、不调参,只靠用户反馈,让模型回答得越来越准。于是,我们引入了 Few-shot 机制。可以把它理解成一种“模仿学习”:
问答链路:
关键点在于中间的几步:
Feedback 接口: 收集 {query, answer, feedback_type} 数据;
样本库(Dataset): 把反馈写入向量数据库(我们用的是 Milvus,也可用 ES);
Few-shot 检索: 每次问新问题前,从库里找出相似问题的“好/坏例子”;
Prompt 构建: 把这些例子拼进提示词里,影响大模型的回答逻辑。
于是,一个“自学习”的闭环就这样形成了。
我们存下的每条反馈结构:
字段 | 含义 |
query | 用户提问 |
answer | 系统当时回答 |
feedback_type | 点赞/点踩 |
reason | 点踩原因(如“指标不匹配”) |
embedding | 语义向量 |
然后,每次用户提问时,系统会:
(1)用向量检索找到相似问题;
(2)从历史样本中选出最相关的 few-shot 例子;
(3)拼出一个“带示范”的 Prompt。
这样一来,模型就能“看到”什么是好的回答、什么是容易出错的回答,进而在新的问答中学会取长补短。
这种基于用户反馈的 Few-shot 优化方案,在企业内部测试中取得了显著成效:
指标 | 无反馈优化 | 有 Few-shot 反馈 |
指标匹配准确率 | 82.1% | 93.4% |
重复出错率 | 17% | 5% |
系统开始具备“少量示例就能改正自己”的能力。
那为什么 「Few-shot」 比 「微调」 更香?
优势维度 | Few-shot 机制 | 传统微调 (Fine-tuning) |
模型本体 | 保持不动,无需重训。 | 需大量数据重新训练/部署。 |
知识注入 | 实时、动态地通过 Prompt 注入。 | 知识固化在模型权重中,更新慢。 |
成本/周期 | 极低、实时生效。 | 高、周期长。 |
Few-shot 机制不是重新教模型“会游泳”,而是告诉它“谁的游泳姿势更好”,以及“刚才别人溺水的地方别再下去”。它让用户反馈实时转化为知识,赋予了模型“记忆力”。
目前,系统已经支持:
接下来,我们打算从下面两个路径继续优化:
添加了点赞和点踩之后系统从“我问你答” 到“我问你学”,每一次点赞点踩,都是系统学习进化的一步。而我们要做的,就是让它越问越聪明。
如对智能指标 AIMetrics 产品中的智能问数感兴趣,欢迎扫描下方二维码获取《指标+AI数智应用白皮书》!