首页/新闻资讯/正文详情

让业务同事用说话查数据:一个取数 Agent 的四层架构与核心代码

发布时间:2026/9/24 19:39:15 来源:云帆数科 栏目:资讯中心
让业务同事用说话查数据:一个取数 Agent 的四层架构与核心代码
把 Text2SQL 接到聊天框里第一版通常跑不顺。原因不是 SQL 生成不准而是真实对话里的问题从来不是单轮的「那华东呢」——上一轮的指标和时间段要继承下来「按这个口径再算一遍去年」——口径指的是哪一条得记住「这两个数怎么差这么多」——要能自己回去查口径定义区域经理和总部问同一个问题看到的行范围必须不同单轮 Text2SQL 只解决一句话翻译成 SQL上面四件事一件都不管。要撑住业务场景得把它放进 Agent 架构里。一、四层架构用户提问 → 意图路由 判定这是问数 / 问口径 / 改条件 / 闲聊 → 槽位与上下文 补齐指标、时间、维度、过滤条件处理指代 → 工具编排 选工具查指标字典 / 生成并执行 SQL / 画图 → 答案生成 数字 口径说明 可展开的 SQL缺信息就反问四层各司其职任何一层可独立替换。逐层给代码。二、意图路由先分清他在问什么把问口径改条件混进问数流程是系统答非所问的主要来源。先做分类ROUTER 判断用户意图只输出一个标签 - QUERY_METRIC 要一个数字含追问、换维度、换时间 - ASK_DEFINITION 问某个指标怎么算、口径是什么 - REVISE 修改上一轮的条件 - CHITCHAT 与取数无关 对话历史 {history} 用户{utterance} ASK_DEFINITION直接走字典检索不生成 SQLREVISE走增量改槽位不重新解析整句。分类对了后面才简单。三、槽位与上下文让「那华东呢」能成立每一轮把解析结果沉淀成一个槽位对象下一轮先继承再覆盖class Slots(dict): 指标 / 时间 / 维度 / 过滤条件 / 口径版本 def merge(self, new: dict): for k, v in new.items(): if v __INHERIT__: # 本轮没说沿用上一轮 continue if v __DROP__: # 明确去掉某个条件 self.pop(k, None) continue self[k] v return self def missing(self) - list: return [k for k in (metric, time_range) if k not in self]指代消解放在解析之前做把「那华东呢」先改写成一个完整问句再交给解析。改写比在 Prompt 里塞历史会话更稳也能避免上下文越滚越长。上下文只保留最近三轮的槽位快照不要塞整段对话原文——长上下文既贵又干扰模型判断。四、工具编排三个工具够用TOOLS [ {name: lookup_metric, desc: 查指标字典返回指标名、计算表达式、过滤条件、口径版本, args: {metric_name: string}}, {name: run_sql, desc: 执行只读 SQL返回结果集最多 500 行, args: {sql: string}}, {name: render_chart, desc: 把结果集渲染成折线图或柱状图, args: {rows: array, chart_type: string}}, ]主循环用 ReAct但限制轮次建议 3 轮超了就转人工def agent_loop(utterance, slots, ctx, max_steps3): intent classify(ROUTER, ctx.history, utterance) if intent ASK_DEFINITION: return lookup_metric(extract_metric(utterance)) for step in range(max_steps): slots slots.merge(parse(utterance, slots)) if slots.missing(): # 缺关键信息反问而不是猜 return ask_back(slots.missing()) metric lookup_metric(slots[metric]) # 先查口径再生成 SQL sql generate_sql(slots, metric) rows run_with_repair(sql, ctx.conn) # 校验与自纠错见上一篇 if rows is not None: return answer(rows, metric, sql) # 数字 口径 SQL 一起给 return handoff_to_human(utterance, slots)lookup_metric必须在generate_sql之前调用——先确认口径再谈取数。顺序反了就会出现SQL 能跑、数字是错的这种最难发现的问题。五、权限下推过滤条件不能靠模型自觉行级权限绝对不能指望模型在 Prompt 里记得加。正确做法是在 SQL 生成之后、执行之前由中间层强制注入def apply_rls(sql: str, user: User) - str: scope user.data_scope # 如 {region: [华东], bu: [零售]} return inject_filters(sql, scope, allowlistUSER_TABLES[user.role])配合只读数据库账号、单次查询超时、返回结果行数上限、全量审计日志。这四件是安全底线任何一件缺失都不该上线。六、人机边界三种情况必须交回给人槽位补齐后仍缺关键信息、自纠错超过两轮、结果为空但问句不该为空。宁可反问一句不要给一个编出来的数字——业务一旦信错一次这套系统就没人再用了。七、两个经验回归集要按对话建不按单句建。真实场景里 60% 以上是追问只测单句会高估能力。建议建 30 组多轮对话每组三到五轮覆盖换维度、换时间、改口径、反问澄清。成本可控。路由和改写用小模型SQL 生成和答案生成用大模型整体开销能降一半以上准确率基本不掉。把意图路由、槽位继承、工具编排、权限下推串起来之后业务同事在聊天框里问一句就能拿到带口径说明的数字。广瞬科技的 AI 客户经营系统中「对话问数」即按这套架构实现支持多轮追问与按角色的数据范围控制。本文方案由广瞬科技数据智能团队整理官网 www.ginstant.cn。

相关推荐

百度网盘直链解析与下载加速:网页扩展与工具选型实战
百度网盘直链解析与下载加速:网页扩展与工具选型实战

1. 百度网盘直链解析的核心逻辑与场景拆解1.1 为什么直链解析一直是刚需百度网盘作为国内用户基数最大的个人云存储服务之一,长期承担着文件备份、资料分享、软件分发等角色。但免费账户的下载速度限制,让很多人在下载大体积文件时体验很差。一个几GB的安… · 2026/9/24 19:39:02

Kafka面试核心考点与实战排查全解析
Kafka面试核心考点与实战排查全解析

"427的Kafka面经汇总"也不知道是哪位同行把自己的面试复盘整理成了一份叫"427的Kafka面经汇总"的资料,最近在好几个技术社群里都看到有人转,内容确实有货。我在中间件这行干了也有年头了,Kafka从0.8时代一直用到现在的3.… · 2026/9/24 19:39:02

从零设计数据库:SchoolDB四张核心表DDL建表语句全解析
从零设计数据库:SchoolDB四张核心表DDL建表语句全解析

开头部分,我先直接聊点实际的。数据库设计这个事,网上讲“增删改查”的教程一抓一大把,但真到了要你从零落库的时候,很多人会在最简单的起点上卡住:这几张表到底怎么建?字段类型怎么选?约束加不… · 2026/9/24 19:39:02

AI文档中台落地实战:从中间件架构到公文合同智能化
AI文档中台落地实战:从中间件架构到公文合同智能化

接手企业数字化建设这几年,我最大的体会是:文档处理是所有业务系统都绕不开、却又最容易被低估的一环。尤其是公文和合同这两类典型的高价值文档,它们格式要求严格、术语密度高、审批链路长,而且出错代价极高。过去我们尝试过让业… · 2026/9/24 20:19:42

C++20 Concepts详解:告别模板报错天书,让约束清晰可读
C++20 Concepts详解:告别模板报错天书,让约束清晰可读

1. 模板报错为什么像天书:先从最痛的地方说我写模板写了几年,最不愿意面对的从来不是模板本身,而是模板实例化失败时那一整屏飘红的编译错误。明明只是把一个不该传进来的类型传给了模板,编译器却能头也不回地钻进标准库内部&… · 2026/9/24 20:19:42

qwen3.8-max接入Windsurf完整教程:从API配置到思考模式与网关实战
qwen3.8-max接入Windsurf完整教程:从API配置到思考模式与网关实战

把 qwen3.8-max 接进 Windsurf,这件事我前前后后折腾了一个下午,踩了三个大坑才跑通。今天把完整过程写成这篇保姆级教程,从 dashscope 的 API 配置、Windsurf 侧的自定义模型接入,到思考模式的几个隐蔽问题,再附带一套… · 2026/9/24 20:19:42

一周搭建带记忆的科研助手:Agent Memory实战指南
一周搭建带记忆的科研助手:Agent Memory实战指南

1. 项目概述:为什么要给Agent装"记忆"先说一个我自己踩过的坑。去年我在做一个自动整理文献的Agent,初版功能很齐全——能读PDF、能提取摘要、能根据关键词生成综述。但用了一周我就发现问题了:每次对话它都像失忆了一样。今天告诉… · 2026/9/24 20:19:42

多平台分发工具团队协作功能对比:四款工具权限管理分析
多平台分发工具团队协作功能对比:四款工具权限管理分析

做新媒体矩阵运营这些年,我见过太多团队选多平台分发工具只看发布速度,忽略了团队协作里的权限管理,最后踩了误操作、数据泄露的坑。权限管理看似是后台小功能,实则直接决定账号安全、协作效率与合规底线。今天就拿四款业内常用的… · 2026/9/24 20:19:42

AI Agent安全工程:模型行为风险、对齐与可控性实践
AI Agent安全工程:模型行为风险、对齐与可控性实践

AI Agent安全工程做到第三篇,我想聊一个最容易被忽视、也最让团队头疼的环节:模型本身。前两篇我们处理的是外部问题——权限边界、工具滥用、提示词注入,这些都还属于"敌人从外面攻进来"的范畴。但真正把Agent放到生产环境里跑过一… · 2026/9/24 20:19:35

基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程
基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程

简介:这是一套面向计算机、人工智能、自动化等专业学生与教师的毕业设计级项目资源,围绕YOLOv8实现渔船作业监控系统,可用于毕设、课程设计、大作业或项目立项演示。压缩包共97个文件,约24.21MB,以70个Python源码文件为… · 2026/9/24 0:00:13

1D-CNN时间序列建模实战:从Conv1d原理到工业落地
1D-CNN时间序列建模实战:从Conv1d原理到工业落地

简介:面向时间序列数据建模的一维卷积神经网络完整实现,适合深度学习入门者及需要快速验证时序模型的研究者,能够从音频、文本、传感器或股价等序列中挖掘局部特征与时间依赖。压缩包体积很小,只有3KB,内含3个Python脚… · 2026/9/24 0:00:26

柔软的L:汉语语流中被忽视的舌肌张力控制
柔软的L:汉语语流中被忽视的舌肌张力控制

1. 这个“L”不是字母表里的L,而是舌尖上的L最近在几个方言群和语音教学社群里,反复看到有人发一句:“也说字母L:柔软的长舌”。初看以为是英语发音课笔记,点开才发现全是方言爱好者、播音系学生、语言康复师甚至戏曲演… · 2026/9/24 0:00:44

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码