乐于分享
好东西不私藏

五、AI提数助手对话理解层设计:如何听懂用户的数据需求

五、AI提数助手对话理解层设计:如何听懂用户的数据需求

在前几篇文章里,我们已经把AI提数助手拆成了几个关键层次:

→ 交互入口层
→ 对话理解层
→ 业务语义层
→ 数据资产层
→ 查询生成层
→ 安全治理层
→ 查询执行层
→ 结果解释与反馈层

第四篇讲的是交互入口层,重点解决用户在哪里问、怎么问、结果怎么展示、如何追问和反馈。

这一篇进入第二层:对话理解层

一、对话理解层是AI提数助手的“语义入口”

如果说交互入口层负责承接用户输入,那么对话理解层负责把用户输入真正变成系统能处理的任务。它要回答几个核心问题:

用户想做什么?
用户要查什么数据?
条件是否完整?
当前问题是否继承上一轮?
有没有歧义?
是否需要澄清?
下一步应该进入哪条链路?

这层做不好,后面所有模块都会被带偏。
指标匹配、表字段定位、SQL生成、结果解释,看起来是后续问题,实际很多错误都源于最前面的对话理解。

举个例子:

帮我看一下上个月华南运营区各门店支付GMV排名,顺便导出Excel

这句话不是一个简单的“查询”意图。系统至少要识别:

用户表达
对话理解层需要解析出的结构
帮我看一下
数据查询/分析动作
上个月
时间槽位
华南运营区
地域过滤条件
各门店
分组维度
支付GMV
指标
排名
排序/排行任务
顺便导出Excel
后置动作

如果系统只输出:

{
  "intent": "query"
}

这个结果没有实际价值。后续模块依然不知道查什么、按什么维度、怎么排序、是否需要导出。
更合理的输出应该是:

{
  "primary_intent": "RANKING_QUERY",
  "secondary_intents": ["REPORT_EXPORT"],
  "metric": "支付GMV",
  "time": {
    "raw": "上个月",
    "type": "relative_month"
  },
  "filters": [
    {
      "field_type": "region",
      "operator": "=",
      "value": "华南",
      "raw": "华南运营区"
    }
  ],
  "dimensions": [
    {
      "name": "门店",
      "role": "group_by"
    }
  ],
  "sorting_ranking": {
    "type": "ranking",
    "order_by": "支付GMV",
    "direction": "DESC"
  },
  "post_actions": ["export_excel"]
}

企业级意图识别不是单一分类器,而应该是“多级路由 + 槽位抽取 + 置信度判断 + 兜底澄清”的体系;

对话理解层的核心,不是给用户问题贴一个意图标签,而是把自然语言问题转化为可执行、可校验、可追问、可路由的结构化查询任务。

二、对话理解层在整体架构中的位置

对话理解层处在交互入口层之后、业务语义层之前。
它接收的不是纯文本这么简单,而是一个带上下文的输入包。

1. 对话理解层的输入

一个成熟的对话理解层,输入至少包括:

+ 用户当前问题
+ 历史对话
+ 当前任务状态
+ 用户身份
+ 用户组织
+ 用户权限
+ 当前入口上下文
+ 当前报表/指标/业务对象上下文
+ 可用数据域
+ 可用工具链
+ 意图样例库
+ 多轮Case库

比如用户在BI报表页面问:

为什么下降?

如果只看当前句子,这句话无法理解。
但如果系统知道当前报表页面正在展示“华东区域域本月支付GMV趋势”,且当前图表中支付GMV环比下降,那么系统就可以判断:

用户意图:归因分析
指标:支付GMV
地区:华东区域
时间:本月
对比方式:环比
上下文来源:当前BI图表

这就是第四篇提到的“入口上下文”进入后端架构后的作用。

2. 对话理解层的输出

对话理解层的输出,不应该只是一个intent,而应该是一个标准化的语义任务对象
例如:

{
  "conversation": {
    "intent": "NEW_QUERY",
    "is_new_task": true,
    "context_operation": "start"
  },
  "task": {
    "query_type": "ranking_query",
    "business_domain": "sales",
    "primary_intent": "RANKING_QUERY",
    "secondary_intents": ["REPORT_EXPORT"]
  },
  "subject": {
    "type": "store",
    "raw": "门店",
    "normalized": null,
    "confidence": 0.86
  },
  "time": {
    "raw": "上个月",
    "type": "relative_month",
    "normalized": "2026-04",
    "calendar_range": {
      "start": "2026-04-01",
      "end": "2026-04-30"
    }
  },
  "metrics": [
    {
      "raw": "支付GMV",
      "name": "支付GMV",
      "role": "measure",
      "aggregation": "SUM"
    }
  ],
  "dimensions": [
    {
      "raw": "门店",
      "name": "门店",
      "role": "group_by"
    }
  ],
  "filters": [
    {
      "raw": "华南运营区",
      "field_type": "region",
      "operator": "=",
      "value": "华南"
    }
  ],
  "sorting_ranking": {
    "type": "ranking",
    "order_by": "支付GMV",
    "direction": "DESC"
  },
  "post_actions": ["export_excel"],
  "completeness": {
    "is_complete": true,
    "missing_slots": [],
    "next_action": "semantic_mapping"
  },
  "confidence": {
    "overall": 0.91,
    "intent": 0.94,
    "slots": 0.88
  },
  "rewrite_query": "查询上个月华南运营区各门店支付GMV排名,并导出Excel"
}

这个对象才是后续业务语义层、数据资产层和查询生成层真正能消费的内容。
对话理解层负责理解和结构化,不负责直接查数。

三、对话理解层到底要做哪些事情

对话理解层可以拆成一组稳定的技术任务。

模块
解决的问题
输出结果
意图识别
用户想做什么
查询、导出、趋势、对比、归因等
查询类型判断
进入哪条数据任务链路
metric/detail/trend/ranking/comparison
槽位抽取
完成任务需要哪些信息
时间、指标、维度、过滤条件等
时间解析
把上月、近30天标准化
日期范围、统计期、粒度
主体识别
查询围绕哪个对象
买家、商品、区域、类目、项目
指标识别
用户要看什么度量
支付GMV、买家数、投诉量等
输出字段识别
哪些字段只是展示字段
买家名、买家ID等
维度识别
按什么拆分或分组
收货城市、商品、类目、渠道
过滤条件解析
只看哪些范围
地区=华东区域、买家类型=政企
计算规则解析
怎么计算
同比、环比、占比、去重
排序排行解析
怎么排序
TOP10、最低、倒数
多意图处理
一个问题中多个动作
查询 + 导出 + 生成图表
上下文管理
是否继承上一轮
继承、修改、补充、切断
完备性判断
是否可以继续往下走
执行、确认、澄清
置信度判断
当前理解是否可靠
高置信、带确认、低置信澄清
状态机流转
当前任务处于哪里
SLOT_CHECKING、SQL_READY等

这不是“堆模块”。它们之间有明确的依赖关系。
一个合理链路应该是:

→ 安全/敏感预判断
→ 对话状态识别
→ 业务任务意图识别
→ 槽位抽取
→ 时间/主体/指标/维度标准化
→ 多轮上下文合并
→ 完备性判断
→ 置信度判断
→ 澄清或路由到下一层

对话理解层的目标可以概括为一句话:

把用户问题从“自然语言表达”整理成“可路由的任务、可校验的槽位、可继承的状态”。

四、意图体系设计:不是一个标签,而是任务路由

很多系统做意图识别时,会直接定义一批标签:

指标查询
明细查询
趋势分析
导出报表
闲聊

然后训练一个分类模型。这个方法能解决基础问题,但不够支撑企业级AI提数。原因有三个。
第一,用户问题经常不是单意图
第二,意图不仅决定“是什么问题”,还决定“下一步走哪条链路”
第三,对话过程中用户还会
确认、否定、修改、补充
,这些不是业务意图,而是对话状态意图。

所以AI提数的意图体系应该拆成两类:

+ 业务任务意图
+ 对话状态意图

1. 业务任务意图:决定调用哪条业务链路

意图编码
意图名称
说明
后续链路
METRIC_QUERY
指标查询
查询单个或多个指标数值
语义映射 → SQL
DETAIL_QUERY
明细查询
查询买家、订单、工单等明细
权限校验 → 明细查询
GROUP_QUERY
分组统计
按省、收货城市、商品等维度聚合
维度映射 → SQL
RANKING_QUERY
排名查询
TOP、最高、最低、倒数
排序规则 → SQL
TREND_QUERY
趋势查询
最近N月、按时间变化
时间序列查询
COMPARISON_QUERY
对比查询
同比、环比、区域对比
多时间/多对象查询
ATTRIBUTION_ANALYSIS
归因分析
为什么下降、原因是什么
多步查询/Agent
METADATA_QUESTION
口径/字段/表解释
指标怎么算、字段含义
指标/元数据知识库
REPORT_EXPORT
报表/结果导出
导出Excel、生成报表
导出任务/审批
PERMISSION_REQUEST
权限申请
申请数据权限
权限流程
UNSAFE_REQUEST
高风险/越权请求
敏感、越权、危险操作
拒答/审批
CHAT
闲聊/无关
非提数问题
引导回提数场景

这套体系不要追求一开始覆盖所有意图。早期可以从METRIC_QUERYDETAIL_QUERYGROUP_QUERYRANKING_QUERYTREND_QUERYCOMPARISON_QUERY这几类做起。

2. 对话状态意图:决定当前任务怎么推进

对话状态意图解决的是:

用户现在是在提出新问题?
还是在补充条件?
还是在修改上一轮?
还是在确认候选表字段?
还是在否定SQL?

推荐使用这套状态意图:CHATNEW_QUERYSLOT_FILLCONTINUE_QUERYMODIFY_QUERYCONFIRM_TABLE_FIELDREJECT_TABLE_FIELDCONFIRM_SQLREJECT_SQLRESET。文档中也给出了这些意图的系统动作,例如SLOT_FILL用于合并历史语义并重新检查槽位,REJECT_TABLE_FIELD用于带反馈重新选表字段,RESET用于清空当前任务上下文。

状态意图
用户表达示例
系统动作
NEW_QUERY
查一下华东区域上月支付GMV
新建查询任务
SLOT_FILL
就查上个月
补充缺失时间
CONTINUE_QUERY
按收货城市拆一下
继承上一轮,新增维度
MODIFY_QUERY
换成宽带新增
修改指标/商品
CONFIRM_TABLE_FIELD
这个表对
进入查询计划/SQL生成
REJECT_TABLE_FIELD
不是这张表
重新召回表字段
CONFIRM_SQL
SQL没问题
执行或结束
REJECT_SQL
这里条件不对
修正SQL
RESET
重新开始
清空上下文

这两类意图要同时存在。

业务任务意图:决定查什么、分析什么、导出什么
对话状态意图:决定当前任务如何继续推进

这就是AI提数助手和普通FAQ机器人的差别。

五、槽位体系设计:从自然语言到结构化查询要素

意图识别回答“用户想做什么”。槽位抽取回答“完成这件事需要哪些信息”。

在标准NLU系统里,实体通常表示话语中用于完成或识别意图的重要信息;复杂实体还可以继续拆成子实体,例如地址可以拆为街道、城市、省州、邮编等。对AI提数来说,槽位就是把用户问题转成结构化查询任务的关键桥梁。

1. 推荐槽位体系

AI提数场景建议采用下面这套Schema。

槽位
含义
说明
intent
对话状态意图
NEW_QUERY、SLOT_FILL、MODIFY_QUERY等
query_type
查询任务类型
指标、明细、趋势、排行、对比、归因
business_domain
业务域
市场、政企、支付GMV、买家、投诉、商品等
subject
查询主体
买家、商品、区域、类目、项目、组织
time
时间条件
原文 + 标准化时间
metrics
指标集合
支付GMV、买家数、投诉量、转化率等
output_fields
输出字段
买家标识、买家ID等非聚合字段
dimensions
统计维度
收货城市、商品、类目、买家类型、渠道
filters
过滤条件
区域=华东区域、买家类型=政企
calculation_rules
计算规则
同比、环比、占比、去重、增幅
aggregation
聚合方式
SUM、COUNT、AVG、COUNT_DISTINCT
sorting_ranking
排序排行
TOP10、倒数、最高、最低
granularity
统计粒度
日、月、季度、年、买家级、订单级
post_actions
后置动作
导出Excel、生成图表、订阅、报告
missing_slots
缺失槽位
需要澄清的信息
confidence
置信度
当前理解可信度
completeness
完备性
是否足够进入下一阶段
rewrite_query
标准化问题
改写后的业务查询表达

2. 主体对象必须类型化

AI提数里,subject非常关键。
用户不是抽象地“查数据”,而是围绕某类主体查:

买家
商品
区域
类目
项目
组织
工单
订单
门店
渠道

例如:

查一下要客支付GMV前十

这里“要客”不能只做成普通过滤词,它隐含主体类型是“买家”。
推荐输出:

{
  "subject": {
    "type": "customer",
    "subtype": "key_customer",
    "raw": "要客",
    "confidence": 0.89
  }
}

如果没有主体类型,后续业务语义层很难判断要去买家维表、商品维表、区域维表还是组织维表做映射。

3. metrics和output_fields必须区分

这是AI提数里非常容易出错的地方。
用户说:

导出买家标识、卖家码、支付GMV

这里:

支付GMV = 指标
买家标识  / 卖家码 = 输出字段

如果全部放到metrics里,后续SQL生成可能把买家码、卖家码当作可聚合指标,生成非常离谱的SQL。

推荐结构:

{
  "metrics": [
    {
      "name": "支付GMV",
      "role": "measure",
      "aggregation": "SUM"
    }
  ],
  "output_fields": [
    {
      "name": "买家标识",
      "role": "attribute"
    },
    {
      "name": "卖家码",
      "role": "identifier"
    }
  ]
}

这点在你上传的槽位设计中也被明确列为需要修正的问题:metrics需要区分“指标”和“输出字段”,否则卖家码、买家标识会被误当作可聚合指标。

4. time必须标准化

不能只输出:

{
  "time": "上个月"
}

因为“上个月”对SQL生成没有直接价值。
推荐输出:

{
  "time": {
    "raw": "上个月",
    "type": "relative_month",
    "normalized": "2026-04",
    "calendar_range": {
      "start": "2026-04-01",
      "end": "2026-04-30"
    },
    "billing_period": "202604",
    "requires_calendar_or_billing_confirm": false
  }
}

AI提数场景里的时间至少要支持:

- 自然日;
- 自然月;
- 统计月;
- 季度;
- 年;
- 最新一期;
- 近N天;
- 近N月;
- 同比基期;
- 环比基期;
- 多时间点对比。

如果时间不标准化,SQL生成就会反复出错。

5. filters必须结构化

不能输出:

{
  "filters": ["华南", "企业买家"]
}

应该输出:

{
  "filters": [
    {
      "raw": "华南运营区",
      "field_type": "region",
      "operator": "=",
      "value": "华南"
    },
    {
      "raw": "企业买家",
      "field_type": "buyer_type",
      "operator": "=",
      "value": "政企"
    }
  ]
}

结构化filter的价值是显性的。
它能让后续语义层知道“华南”要映射地域维度,“企业买家”要映射买家类型维度,而不是把它们都当成自由文本。

6. calculation_rules必须结构化

用户说:

看一下同比增长率

不能只记录:

{
  "calculation_rules": ["同比增长率"]
}

应该表达为:

{
  "calculation_rules": [
    {
      "type": "yoy_growth_rate",
      "base_period": "same_period_last_year",
      "formula": "(current - previous) / previous"
    }
  ]
}

同样,环比、占比、贡献度、去重、平均值、累计值、留存率、转化率,都要尽可能结构化。否则后面查询生成层无法判断是一次查询、两次查询,还是需要派生计算。

六、四类核心解析:时间、主体、指标、维度

在AI提数对话理解层里,有四类解析最关键:时间、主体、指标、维度。

这四类一旦错,SQL大概率也会错。

1. 时间解析

时间解析要同时处理原始表达和标准表达。
常见类型包括:

类型
示例
标准化结果
绝对年月
2025年4月
2025-04
日期范围
2025-04-01到2025-04-30
start/end
相对时间
上个月、近30天
根据当前日期转换
统计期
202504统计期
billing_period=202504
多时间点
2024年和2025年
多个period
对比时间
同比、环比
current + baseline
最新时间
最新一期
依赖数据更新时间

这里要特别注意“自然月”和“统计月”的差异。
经营分析系统里,“上个月”不一定等同于“上一个自然月”,有些场景要按统计期、结算周期、数据快照周期来解释。
所以时间槽位要允许携带:

{
  "calendar_range": {},
  "billing_period": "",
  "time_granularity": "",
  "time_semantics": "calendar_or_billing"
}

2. 主体解析

主体解析要解决:

用户到底围绕哪个业务对象查?

例如:

查企业买家支付GMV
查会员套餐商品办理量
查华东区域投诉量
查美妆类目企业服务商品支付GMV
查项目回款情况

这里的主体分别可能是:

- 买家;
- 商品;
- 地域;
- 类目;
- 项目。

主体解析不能只靠词典。因为很多词会同时出现在多个业务体系里。
例如“政企”既可能是买家类型,也可能是组织条线;
“企业服务商品”既可能是商品,也可能是业务标签;
“华东区域”既可能是行政区域,也可能是组织归属。

所以主体槽位要尽量输出候选:

{
  "subject": {
    "raw": "政企",
    "candidates": [
      {
        "type": "buyer_type",
        "value": "企业买家",
        "confidence": 0.83
      },
      {
        "type": "business_line",
        "value": "政企业务",
        "confidence": 0.62
      }
    ],
    "selected": "buyer_type"
  }
}

当候选置信度差距不大时,应进入澄清。

3. 指标解析

指标解析要解决:

用户想看的度量是什么?

指标可能是:

  • 标准指标:支付GMV、买家数、投诉量;
  • 别名指标:营收、出账、ARPU;
  • 派生指标:同比增长率、环比增幅;
  • 组合指标:支付GMV和买家数;
  • 模糊指标:经营情况、发展情况、运营效果。

对于标准指标,可以先抽取词面,再交给业务语义层做指标匹配。
对于派生指标,要同时抽取指标和计算规则。

例如:

看一下华东区域支付GMV同比增长率

应拆成:

{
  "metrics": [
    {
      "name": "支付GMV",
      "role": "measure"
    }
  ],
  "calculation_rules": [
    {
      "type": "yoy_growth_rate"
    }
  ]
}

不要把“支付GMV同比增长率”整体当成一个指标词,除非指标体系中确实存在该标准指标。

4. 维度解析

维度解析要解决:

按什么拆?
按什么分组?
按什么排名?

用户常见表达包括:

按收货城市拆
分商品看
各类目排名
每个月趋势
买家类型分布

维度解析要输出:

{
  "dimensions": [
    {
      "raw": "收货城市",
      "name": "收货城市",
      "role": "group_by",
      "granularity": "city"
    }
  ]
}

这里还要判断维度是否适配当前指标。
不是所有指标都支持所有维度。比如某些指标只有省级汇总,没有收货城市级明细;某些指标只能按月统计,不能按天统计。这部分判断会在业务语义层和数据资产层进一步完成,但对话理解层需要先把维度意图抽清楚。

七、多意图识别:一个问题可能对应多个任务

AI提数场景中,一个用户问题经常包含多个动作。
例如:

查一下上个月华南各门店支付GMV排名,导出Excel,并生成一个柱状图

这句话包含:

主任务:支付GMV排名查询
后置动作1:导出Excel
后置动作2:生成柱状图

如果系统只识别成RANKING_QUERY,就会漏掉导出和图表生成。
如果只识别成REPORT_EXPORT,又会漏掉核心查询。
推荐输出:

{
  "intents": [
    {
      "name": "RANKING_QUERY",
      "role": "primary"
    },
    {
      "name": "REPORT_EXPORT",
      "role": "post_action"
    },
    {
      "name": "CHART_GENERATION",
      "role": "post_action"
    }
  ]
}

多意图识别的关键不是把标签做多,而是要区分:

primary:决定主链路
secondary:影响任务补充
post_action:结果之后的动作
guardrail:安全/权限/敏感拦截

例如:

查一下所有买家买家手机号和交易明细,导出Excel

这里既有明细查询和导出,也有敏感字段风险。意图识别要输出高风险标记,后面才能进入权限和脱敏流程。
总之,多意图不能简单分类处理,需要支持主意图、次意图和后置动作等多个输出。

八、多轮上下文管理:继承、补充、修改、切断

对话理解层最难的部分之一,是多轮上下文。
真实用户不会每次都说完整问题。

用户:查一下华东区域新增买家
系统:返回结果
用户:按收货城市拆一下
用户:换成宽带
用户:只看TOP10
用户:和上个月比呢
用户:重新开始

这些短句单独看都不完整,但结合上下文就很清楚。

1. 上下文操作类型

操作类型
用户表达
系统动作
继承
按收货城市拆一下
继承指标、时间、地区
补充
就查上个月
补充缺失时间
修改
换成宽带新增
替换指标或商品
删除
不看企业买家了
删除过滤条件
扩展
再导出Excel
增加后置动作
切断
重新开始
清空任务上下文
新任务
再帮我查投诉量
判断是否开启新任务

2. 上下文对象建议

系统内部可以维护一个ConversationState

{
  "task_id": "task_001",
  "status": "TASK_DONE",
  "semantic_frame": {
    "metric": "会员套餐新增买家数",
    "time": "2026-04",
    "region": "华东区域",
    "dimensions": ["收货城市"],
    "filters": []
  },
  "last_sql": "...",
  "last_result_schema": ["city_name", "new_buyer_cnt"],
  "active_contexts": [
    {
      "type": "metric_query_context",
      "lifespan": 3
    }
  ]
}

3. 新旧意图切断策略

上下文不能无限继承。
无限继承会造成任务污染。
例如:

用户:查一下华东区域支付GMV
用户:按收货城市拆
用户:附近有什么好吃的

第三句明显不是继续查支付GMV,而是新话题或无关问题。
建议切断规则:

情况
策略
用户说“重新开始、取消、换个问题”
立即切断
新问题出现新指标且与旧任务无明显关系
倾向新任务
当前任务已完成且用户提出完整新查询
新任务
用户说“再、继续、按、只看、换成”
倾向继承
当前句缺少核心槽位但历史有明确槽位
倾向继承
业务域明显变化
倾向切断
历史上下文超过有效轮次
弱化或失效

多轮场景需要设计新旧意图切断策略,避免不同意图流程互相污染。

九、完备性判断:什么时候能继续往下走

不是所有用户问题都可以直接进入选表和SQL生成。
例如:

查一下支付GMV

这句话缺少很多信息:

时间?
地区?
GMV口径?
是否按组织权限默认?
是否需要分组?
输出表格还是图表?

如果直接查,风险很高。

1. 完备性判断维度

维度
判断内容
意图是否明确
是否知道用户要查数、导出、趋势、对比
指标是否明确
是否能匹配到候选指标
时间是否明确
是否有默认时间或用户指定时间
主体是否明确
是否知道查买家、商品、地区还是组织
维度是否明确
是否需要分组、排名、趋势
过滤条件是否完整
是否存在未解析条件
权限是否可能满足
是否明显越权
输出是否明确
表格、图表、Excel、摘要
风险是否可控
是否涉及敏感数据或大范围查询

2. 完备性输出

{
  "completeness": {
    "is_complete": false,
    "missing_slots": ["time", "metric_scope"],
    "blocking_slots": ["metric_scope"],
    "optional_slots": ["dimension"],
    "next_action": "clarify"
  }
}

注意这里要区分:

blocking_slots:不补不能执行
optional_slots:不补也能用默认值

例如:

  • 指标不明确通常是blocking;
  • 维度不明确可能是optional;
  • 时间缺失在某些场景可默认最近一个月,但要提示;
  • 明细导出涉及敏感字段时,权限审批是blocking。

3. 执行策略

可以设计三种执行策略:

完整且高置信:直接进入业务语义层
基本完整但有默认值:带提示执行
关键槽位缺失:澄清后再执行

完备性判断是“少犯错”的关键。
企业级AI提数不是追求每次都马上回答,而是该问清楚时必须问清楚。

十、低置信度判断与澄清机制

AI提数助手不能把所有不确定问题都硬查。可以采用置信度分层策略:高置信直接执行,中置信带确认执行,低置信反问澄清。 这个思路非常适合AI提数场景。

1. 推荐置信度策略

confidence >= 0.85:直接执行
0.60 <= confidence < 0.85:带确认执行
confidence < 0.60:反问澄清

这只是初始阈值,后续可以按场景调优。

2. 不同槽位可以有不同阈值

不要只看overall confidence。
不同槽位风险不同,阈值也应该不同。

槽位
风险
建议策略
指标
低置信必须澄清
时间
可默认但要提示
地区
中高
权限相关时必须确认
维度
可带确认
输出格式
可默认表格
导出动作
必须确认/审批
敏感字段
必须拦截或脱敏

3. 澄清问题要有候选项

不要问:

你想查什么?

这种问题太开放,用户负担大。
更好的方式:

“支付GMV”存在多个口径,请选择:
A. 支付GMV
B. 净支付金额
C. 财务确认支付GMV
D. 商品成交额

或者:

当前缺少时间范围,请选择:
A. 本月
B. 上月
C. 近30天
D. 自定义时间

澄清设计的原则是:

缺什么问什么
一次性补关键缺失项
优先给候选项
默认值必须透明
高风险口径必须确认
低风险条件可以默认

十一、状态机设计:把对话变成可控流程

大模型对话很容易变成自由聊天。 企业级AI提数必须把对话约束到可控流程中。这就需要状态机。

1. 推荐状态机

→ IDLE
→ CHAT / NEW_QUERY
→ SLOT_CHECKING
→ SLOT_FILLING
→ METADATA_RECALLING
→ METADATA_CONFIRMING
→ QUERY_PLAN_BUILDING
→ SQL_GENERATING
→ SQL_VALIDATING
→ SQL_READY
→ SQL_EXECUTING
→ RESULT_EXPLAINING
→ TASK_DONE

2. 关键状态说明

状态
含义
IDLE
空闲状态
SLOT_CHECKING
检查槽位完整性
SLOT_FILLING
等待用户补充
METADATA_RECALLING
进入表字段召回
METADATA_CONFIRMING
等待用户确认候选表字段
QUERY_PLAN_BUILDING
构建查询计划
SQL_GENERATING
生成SQL
SQL_VALIDATING
校验SQL
SQL_READY
SQL可执行
SQL_EXECUTING
查询执行中
RESULT_EXPLAINING
生成结果解释
TASK_DONE
当前任务完成

3. 特殊流转

用户动作
状态变化
用户补充条件
SLOT_FILLING → SLOT_CHECKING
用户否定表字段
METADATA_CONFIRMING → METADATA_RESELECTING
用户修改SQL
SQL_READY → SQL_REVISING
用户继续追问
TASK_DONE → CONTINUE_QUERY
用户重新开始
任意状态 → RESET → IDLE

状态机的价值是让系统知道“当前应该做什么”。
没有状态机,用户一句“这个不对”系统都不知道是表字段不对、SQL不对,还是结果解释不对。

Rasa的slot机制也体现了类似思想:NLU pipeline输出的intents和entities会和domain里定义的slot mappings匹配,满足映射后会设置slots,从而驱动后续对话行为。(rasa.com) 在AI提数里,我们也需要把抽取结果写入任务状态,再由状态机推动后续链路。

十二、技术路线:规则、模型、向量、LLM协同

对话理解层不适合押注单一技术路线。
只靠规则,泛化不够。
只靠BERT分类,复杂多意图和多轮上下文不够灵活。
只靠LLM,成本、延迟、稳定性和可控性都有问题。

为构建适合企业级生产的数据助手/智能客服/Agent平台,意图识别需要综合规则/关键词、传统机器学习、BERT微调、向量语义路由、LLM Prompt进行混合架构设计。

1. 推荐在线链路

→ 用户输入
→ 安全/敏感规则拦截
→ 高频规则识别
→ 向量语义路由
→ LLM复杂意图判断
→ 槽位抽取
→ Schema校验
→ 完备性判断
→ 澄清/执行

2. 各技术分工

技术
适合任务
规则/正则
安全拦截、高频固定意图、时间表达、敏感操作
FastText/BERT
中小规模意图分类、一级路由
CRF/BERT-CRF
实体识别、槽位抽取
向量检索
意图样例召回、Case召回、工具路由
LLM
复杂语义、多意图、多轮理解、结构化输出
RAG
业务表达、历史Case、意图样例增强
JSON Schema
输出格式校验
状态机
任务流转控制
规则引擎
完备性、澄清策略、权限预判

3. 推荐生产形态

生产系统可以分为两路:

轻链路:规则/缓存/向量路由 → 快速返回
重链路:LLM + RAG + Schema校验 → 处理复杂问题

例如:

  • “按收货城市拆一下”这种短追问,可以走上下文规则;
  • “导出昨天投诉明细”可以走规则 + 槽位模板;
  • “为什么华东区域支付GMV下降”需要LLM做任务理解;
  • “查一下上个月华南各门店支付GMV排名,顺便导出Excel”适合LLM结构化输出 + Schema校验;
  • “所有买家买家手机号导出”必须先被安全规则拦截。

这样的混合路线,比单纯LLM更稳,也比纯规则更灵活。

十三、四种实现方案的演进路径

可以把对话理解层的实现路径分成四个阶段:Prompt驱动、节点拆分、意图RAG、多轮RAG增强。

1. 方案A:Prompt驱动

一个LLM节点同时完成意图识别 + 槽位抽取

适合MVP阶段。
优点是快,成本低,能迅速验证商品闭环。
缺点也明显:意图变多后Prompt膨胀,不同意图互相干扰,输出稳定性下降。

适合:

意图少
业务简单
内部试用
快速验证

不适合:

高并发
强安全
多轮复杂任务
长期生产系统

2. 方案B:意图识别与槽位抽取节点拆分

先识别意图
→ 按意图路由到对应抽槽节点

适合业务扩展期。
优点是职责清晰,每个抽槽节点只处理自己的槽位,维护性更好。
缺点是链路变长,延迟增加,而且多轮上下文容易在节点间丢失。

适合:

意图数量中等
各意图槽位差异大
对维护性要求高

3. 方案C:前置意图RAG召回

用户输入
→ 召回相似意图表达
→ LLM判断最终意图

适合用户表达复杂、Bad Case需要快速修复的阶段。

优势是把一部分实时泛化变成“离线样例库 + 在线召回”。
线上出现识别错误,可以补充样例和Case,而不是每次都改Prompt或重新训练模型。

缺点是更适合单轮,短句追问如果没有上下文,检索效果会不稳定。

4. 方案D:合并节点 + 多轮RAG增强

多轮上下文组装
→ 召回相似Case
→ LLM一次性输出意图 + 槽位
→ 状态机推进

适合核心业务链路。
它的关键不是“所有东西都塞给LLM”,而是:

先压缩有效上下文
再召回相似多轮Case
再让LLM一次性完成意图和槽位
最后用Schema、规则和状态机校验输出

对AI提数助手来说,建议路线是:

MVP:方案A
业务扩展:方案B + 部分规则
泛化优化:方案C
核心生产:方案D + 状态机 + 反馈闭环

十四、输出Schema设计:对话理解层的标准交付物

对话理解层最终要交付一个标准Schema。
这个Schema不是为了好看,而是为了让后续模块稳定消费。

1. 推荐Schema

{
  "conversation": {
    "intent": "NEW_QUERY",
    "is_new_task": true,
    "context_operation": "start"
  },
  "task": {
    "query_type": "ranking_query",
    "business_domain": "sales",
    "primary_intent": "RANKING_QUERY",
    "secondary_intents": ["REPORT_EXPORT"]
  },
  "subject": {
    "type": "store",
    "raw": "门店",
    "normalized": null,
    "confidence": 0.86
  },
  "time": {
    "raw": "上个月",
    "type": "relative_month",
    "normalized": "2026-04",
    "calendar_range": {
      "start": "2026-04-01",
      "end": "2026-04-30"
    },
    "billing_period": "202604"
  },
  "metrics": [
    {
      "raw": "支付GMV",
      "name": "支付GMV",
      "role": "measure",
      "aggregation": "SUM",
      "confidence": 0.93
    }
  ],
  "output_fields": [],
  "dimensions": [
    {
      "raw": "门店",
      "name": "门店",
      "role": "group_by",
      "confidence": 0.88
    }
  ],
  "filters": [
    {
      "raw": "华南运营区",
      "field_type": "region",
      "operator": "=",
      "value": "华南",
      "confidence": 0.91
    }
  ],
  "calculation_rules": [],
  "sorting_ranking": {
    "type": "ranking",
    "order_by": "支付GMV",
    "direction": "DESC",
    "limit": null
  },
  "post_actions": ["export_excel"],
  "completeness": {
    "is_complete": true,
    "missing_slots": [],
    "blocking_slots": [],
    "optional_slots": [],
    "next_action": "semantic_mapping"
  },
  "confidence": {
    "overall": 0.91,
    "intent": 0.94,
    "slots": 0.88
  },
  "rewrite_query": "查询上个月华南运营区各门店支付GMV排名,并导出Excel"
}

2. Schema设计原则

建议遵守这些原则:

字段固定
类型明确
保留raw和normalized
每个关键槽位带confidence
metrics和output_fields分开
time必须标准化
filters必须结构化
calculation_rules必须可执行化
completeness必须输出
next_action必须明确

大模型输出再自然,如果不能稳定解析,就不能进入生产链路。
所以对话理解层一定要有JSON Schema校验、字段枚举、类型校验、缺失字段补齐、非法值修复机制。

十五、对话理解层和后端架构的衔接

对话理解层不能孤立设计。它要为后面几层服务。

1. 和业务语义层衔接

对话理解层输出:

支付GMV
门店
华南
上个月

业务语义层负责:

支付GMV → 标准指标
门店 → 门店维度/组织维度
华南 → 地域维度编码
上个月 → 自然月/统计月

也就是说,对话理解层只做“自然语言结构化”,不直接做最终指标口径决策。下一篇“业务语义层”相关文章会重点讲:如何把这些结构化槽位映射成企业标准指标、维度、口径和编码。

2. 和数据资产层衔接

对话理解层输出:

metrics + dimensions + filters + time

数据资产层负责:

召回表
召回字段
判断Join关系
推荐数据源
过滤无权限资产

3. 和查询生成层衔接

对话理解层输出结构化任务:

query_type
metrics
dimensions
filters
time
calculation_rules
sorting_ranking

查询生成层负责:

QueryPlan → SQL

4. 和交互入口层衔接

对话理解层输出:

missing_slots
confidence
clarification_options
risk_flags

交互入口层负责展示:

槽位确认卡
澄清卡
风险提示
权限申请入口

5. 和反馈闭环衔接

用户反馈:

不是支付GMV,是主营支付GMV

系统应沉淀到:

指标别名
同义词库
Case库
评测集
Prompt样例
语义层规则

这就是前后端、模型层、数据层的闭环。

十六、评测体系:怎么判断对话理解层做得好不好

对话理解层必须可评测。
不能只看“感觉能不能答”。

微软CLU的评估流程会在测试集上预测意图和实体,再和标注结果对比,并返回Precision、Recall、F1等指标;其评估API也会返回意图和实体的precision、recall、F1以及混淆矩阵。(Microsoft Learn)

AI提数助手也应该建立类似评测体系。

1. 意图识别指标

指标
含义
Accuracy
总体意图识别准确率
Precision
某意图预测为正时有多少是真的
Recall
某意图真实样本有多少被召回
F1
Precision和Recall的综合平衡
多意图准确率
多动作识别是否完整
新旧任务切换准确率
是否正确继承或切断上下文
澄清触发准确率
该澄清时是否澄清,不该澄清时是否误拦

2. 槽位抽取指标

指标
含义
槽位级Precision
抽出的槽位有多少正确
槽位级Recall
真实槽位有多少被抽出
槽位级F1
综合准确性
时间标准化准确率
上月、近30天、统计期转换是否正确
主体识别准确率
买家/商品/地区/类目识别是否正确
指标识别准确率
指标词是否识别正确
维度识别准确率
分组维度是否识别正确
filter结构化准确率
过滤条件是否结构化正确
output_fields识别准确率
输出字段是否和指标区分清楚

3. 端到端业务指标

指标
含义
SQL生成成功率
后续SQL是否成功生成
SQL执行成功率
SQL能否执行
结果采纳率
用户是否使用结果
用户纠错率
用户是否频繁修改理解结果
澄清后完成率
澄清是否推动任务完成
平均轮次
完成一个查询需要几轮
平均响应时间
识别和抽槽耗时
Bad Case修复周期
从发现到修复的时间
高频问题命中率
高频查询是否走稳定路径

对话理解层的评测不能只做离线分类准确率。
真正要看的是它是否能推动后续查询任务稳定完成。

十七、运营闭环:对话理解层需要长期运营

对话理解层不是一次性开发完就结束。
业务会变,指标会变,用户表达会变,组织结构会变,商品名称会变。
因此它必须长期运营。

1. 需要运营的资产

意图体系
槽位体系
同义词库
时间规则
主体词库
指标别名
维度枚举
多轮Case库
Bad Case库
评测集
Prompt模板
JSON Schema
澄清模板
状态机规则

2. Bad Case处理流程

推荐流程:

→ 线上失败问题
→ 标注失败原因
→ 分类为意图错 / 槽位错 / 上下文错 / 语义映射错
→ 修复规则、样例、Prompt或Case
→ 加入评测集
→ 回归测试
→ 发布上线

3. Bad Case分类

类型
示例
修复方式
意图错
“支付GMV下降多少”识别成归因
增加意图样例
槽位错
“要客”没有识别成买家类型
增加主体词库
时间错
“上统计期”解析成自然月
增加时间规则
维度错
“分公司”识别成收货城市
增加维度别名
上下文错
“按收货城市拆”未继承上一轮
优化状态机
多意图漏识别
漏掉“导出Excel”
增加post_action识别
误执行
低置信问题直接查了
调整阈值和澄清策略

4. 运营原则

高频Bad Case优先
高风险口径优先
核心指标优先
用户纠错必须沉淀
每次迭代必须回归评测
意图和槽位体系要版本化

这是对话理解层从“能跑”到“可运营”的关键。

十八、常见设计误区

1. 只做单标签intent分类

AI提数问题经常包含多意图、多动作。
单标签分类无法表达“查询 + 导出 + 图表 + 权限审批”。

2. 槽位只抽原文,不做标准化

抽出“上个月”没有意义,必须转换成自然月、统计期或日期范围。

3. 不区分指标和输出字段

把买家标识、卖家码当成指标,会直接影响SQL生成。

4. 没有完备性判断

槽位缺失时直接生成SQL,容易查错。

5. 没有低置信度澄清

不确定时强行执行,比查不到更危险。

6. 多轮上下文无限继承

上下文不切断,会造成任务污染。

7. 完全依赖LLM

LLM输出灵活,但生产系统需要规则、Schema、状态机和评测体系约束。你上传的设计文档也指出,LLM Prompt分类虽然语义理解强、适合复杂查询和多轮判断,但存在成本延迟高、输出不稳定、需要JSON Schema和校验器、高风险场景不能完全依赖LLM单点判断等问题。

十九、总结:对话理解层决定AI提数助手能不能真正听懂用户

AI提数助手的对话理解层,不是一个简单的NLU分类模块,也不是一个Prompt节点。
它是自然语言到结构化查询任务之间的关键转换层。
它要同时解决:

用户想做什么
查什么主体
看什么指标
按什么维度
限定什么时间
过滤哪些条件
是否要排序/对比/归因
是否要导出/生成图表/生成报告
是否继承上一轮
是否需要澄清
下一步进入哪条链路

最终输出不应该是:

{
  "intent": "query"
}

而应该是一个完整的语义任务对象:

+ conversation intent
+ task intent
+ subject
+ time
+ metrics
+ output fields
+ dimensions
+ filters
+ calculation rules
+ post actions
+ completeness
+ confidence
+ next action

从技术实现上,企业级AI提数助手的对话理解层应该采用混合架构:

+ 规则
+ 分类模型
+ 槽位抽取模型
+ 向量检索
+ LLM
+ RAG
+ JSON Schema
+ 状态机
+ 反馈闭环

大模型负责理解复杂表达,规则和状态机负责确定性控制,语义样例库和Case库负责持续优化,Schema负责工程稳定性,评测体系负责质量度量。
这层做扎实,后面的业务语义层、数据资产层、查询生成层才有稳定输入。
这层做不扎实,后面再强的Text-to-SQL也只能在错误语义上生成SQL。

下一篇顺着这个结构继续往下走,进入业务语义层设计:当对话理解层已经抽出了“支付GMV、华南、门店、上个月”之后,系统如何进一步把这些自然语言槽位映射成企业标准指标、维度编码、业务口径和推荐数据源。那一层,才是真正把“听懂用户”推进到“对齐企业数据标准”的关键。

一、AI提数和AI问数的本质:从自然语言到可信数据结果

二、AI问数、BI、自助分析的数据助手的对比区别

三、企业级AI提数助手架构设计:从自然语言到可信SQL执行

四、AI提数助手交互入口层设计:UI承接下的可信数据交互流程

基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-05-31 17:21:15 HTTP/1.1 GET : https://www.yeyulingfeng.com/a/688629.html
  2. 运行时间 : 0.203905s [ 吞吐率:4.90req/s ] 内存消耗:4,791.63kb 文件加载:145
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=5ec3fb5561633a13a1ee75e674074a2e
  1. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/public/index.php ( 0.79 KB )
  2. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/autoload.php ( 0.17 KB )
  3. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/composer/autoload_real.php ( 2.49 KB )
  4. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/composer/platform_check.php ( 0.90 KB )
  5. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/composer/ClassLoader.php ( 14.03 KB )
  6. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/composer/autoload_static.php ( 6.05 KB )
  7. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-helper/src/helper.php ( 8.34 KB )
  8. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-validate/src/helper.php ( 2.19 KB )
  9. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/ralouphie/getallheaders/src/getallheaders.php ( 1.60 KB )
  10. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/helper.php ( 1.47 KB )
  11. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/stubs/load_stubs.php ( 0.16 KB )
  12. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Exception.php ( 1.69 KB )
  13. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-container/src/Facade.php ( 2.71 KB )
  14. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/symfony/deprecation-contracts/function.php ( 0.99 KB )
  15. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/symfony/polyfill-mbstring/bootstrap.php ( 8.26 KB )
  16. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/symfony/polyfill-mbstring/bootstrap80.php ( 9.78 KB )
  17. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/symfony/var-dumper/Resources/functions/dump.php ( 1.49 KB )
  18. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-dumper/src/helper.php ( 0.18 KB )
  19. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/symfony/var-dumper/VarDumper.php ( 4.30 KB )
  20. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/guzzlehttp/guzzle/src/functions_include.php ( 0.16 KB )
  21. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/guzzlehttp/guzzle/src/functions.php ( 5.54 KB )
  22. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/App.php ( 15.30 KB )
  23. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-container/src/Container.php ( 15.76 KB )
  24. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/psr/container/src/ContainerInterface.php ( 1.02 KB )
  25. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/provider.php ( 0.19 KB )
  26. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Http.php ( 6.04 KB )
  27. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-helper/src/helper/Str.php ( 7.29 KB )
  28. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Env.php ( 4.68 KB )
  29. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/common.php ( 0.03 KB )
  30. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/helper.php ( 18.78 KB )
  31. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Config.php ( 5.54 KB )
  32. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/alipay.php ( 3.59 KB )
  33. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/facade/Env.php ( 1.67 KB )
  34. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/app.php ( 0.95 KB )
  35. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/cache.php ( 0.78 KB )
  36. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/console.php ( 0.23 KB )
  37. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/cookie.php ( 0.56 KB )
  38. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/database.php ( 2.48 KB )
  39. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/filesystem.php ( 0.61 KB )
  40. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/lang.php ( 0.91 KB )
  41. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/log.php ( 1.35 KB )
  42. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/middleware.php ( 0.19 KB )
  43. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/route.php ( 1.89 KB )
  44. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/session.php ( 0.57 KB )
  45. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/trace.php ( 0.34 KB )
  46. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/view.php ( 0.82 KB )
  47. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/event.php ( 0.25 KB )
  48. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Event.php ( 7.67 KB )
  49. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/service.php ( 0.13 KB )
  50. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/AppService.php ( 0.26 KB )
  51. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Service.php ( 1.64 KB )
  52. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Lang.php ( 7.35 KB )
  53. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/lang/zh-cn.php ( 13.70 KB )
  54. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/initializer/Error.php ( 3.31 KB )
  55. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/initializer/RegisterService.php ( 1.33 KB )
  56. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/services.php ( 0.14 KB )
  57. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/service/PaginatorService.php ( 1.52 KB )
  58. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/service/ValidateService.php ( 0.99 KB )
  59. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/service/ModelService.php ( 2.04 KB )
  60. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-trace/src/Service.php ( 0.77 KB )
  61. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Middleware.php ( 6.72 KB )
  62. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/initializer/BootService.php ( 0.77 KB )
  63. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/Paginator.php ( 11.86 KB )
  64. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-validate/src/Validate.php ( 63.20 KB )
  65. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/Model.php ( 23.55 KB )
  66. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/concern/Attribute.php ( 21.05 KB )
  67. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/concern/AutoWriteData.php ( 4.21 KB )
  68. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/concern/Conversion.php ( 6.44 KB )
  69. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/concern/DbConnect.php ( 5.16 KB )
  70. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/concern/ModelEvent.php ( 2.33 KB )
  71. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/concern/RelationShip.php ( 28.29 KB )
  72. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-helper/src/contract/Arrayable.php ( 0.09 KB )
  73. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-helper/src/contract/Jsonable.php ( 0.13 KB )
  74. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/contract/Modelable.php ( 0.09 KB )
  75. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Db.php ( 2.88 KB )
  76. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/DbManager.php ( 8.52 KB )
  77. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Log.php ( 6.28 KB )
  78. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Manager.php ( 3.92 KB )
  79. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/psr/log/src/LoggerTrait.php ( 2.69 KB )
  80. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/psr/log/src/LoggerInterface.php ( 2.71 KB )
  81. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Cache.php ( 4.92 KB )
  82. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/psr/simple-cache/src/CacheInterface.php ( 4.71 KB )
  83. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-helper/src/helper/Arr.php ( 16.63 KB )
  84. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/cache/driver/File.php ( 7.84 KB )
  85. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/cache/Driver.php ( 9.03 KB )
  86. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/contract/CacheHandlerInterface.php ( 1.99 KB )
  87. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/Request.php ( 0.09 KB )
  88. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Request.php ( 55.78 KB )
  89. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/middleware.php ( 0.25 KB )
  90. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Pipeline.php ( 2.61 KB )
  91. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-trace/src/TraceDebug.php ( 3.40 KB )
  92. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/middleware/SessionInit.php ( 1.94 KB )
  93. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Session.php ( 1.80 KB )
  94. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/session/driver/File.php ( 6.27 KB )
  95. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/contract/SessionHandlerInterface.php ( 0.87 KB )
  96. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/session/Store.php ( 7.12 KB )
  97. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Route.php ( 23.73 KB )
  98. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/RuleName.php ( 5.75 KB )
  99. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/Domain.php ( 2.53 KB )
  100. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/RuleGroup.php ( 22.43 KB )
  101. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/Rule.php ( 26.95 KB )
  102. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/RuleItem.php ( 9.78 KB )
  103. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/route/app.php ( 3.94 KB )
  104. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/facade/Route.php ( 4.70 KB )
  105. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/dispatch/Controller.php ( 4.74 KB )
  106. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/Dispatch.php ( 10.44 KB )
  107. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/controller/Index.php ( 9.87 KB )
  108. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/BaseController.php ( 2.05 KB )
  109. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/facade/Db.php ( 0.93 KB )
  110. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/connector/Mysql.php ( 5.44 KB )
  111. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/PDOConnection.php ( 52.47 KB )
  112. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/Connection.php ( 8.39 KB )
  113. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/ConnectionInterface.php ( 4.57 KB )
  114. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/builder/Mysql.php ( 16.58 KB )
  115. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/Builder.php ( 24.06 KB )
  116. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/BaseBuilder.php ( 27.50 KB )
  117. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/Query.php ( 15.71 KB )
  118. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/BaseQuery.php ( 45.13 KB )
  119. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/TimeFieldQuery.php ( 7.43 KB )
  120. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/AggregateQuery.php ( 3.26 KB )
  121. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/ModelRelationQuery.php ( 20.07 KB )
  122. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/ParamsBind.php ( 3.66 KB )
  123. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/ResultOperation.php ( 7.01 KB )
  124. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/WhereQuery.php ( 19.37 KB )
  125. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/JoinAndViewQuery.php ( 7.11 KB )
  126. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/TableFieldInfo.php ( 2.63 KB )
  127. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/Transaction.php ( 2.77 KB )
  128. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/log/driver/File.php ( 5.96 KB )
  129. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/contract/LogHandlerInterface.php ( 0.86 KB )
  130. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/log/Channel.php ( 3.89 KB )
  131. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/event/LogRecord.php ( 1.02 KB )
  132. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-helper/src/Collection.php ( 16.47 KB )
  133. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/facade/View.php ( 1.70 KB )
  134. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/View.php ( 4.39 KB )
  135. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/controller/Es.php ( 3.30 KB )
  136. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Response.php ( 8.81 KB )
  137. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/response/View.php ( 3.29 KB )
  138. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Cookie.php ( 6.06 KB )
  139. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-view/src/Think.php ( 8.38 KB )
  140. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/contract/TemplateHandlerInterface.php ( 1.60 KB )
  141. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-template/src/Template.php ( 46.61 KB )
  142. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-template/src/template/driver/File.php ( 2.41 KB )
  143. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-template/src/template/contract/DriverInterface.php ( 0.86 KB )
  144. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/runtime/temp/c935550e3e8a3a4c27dd94e439343fdf.php ( 31.50 KB )
  145. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-trace/src/Html.php ( 4.42 KB )
  1. CONNECT:[ UseTime:0.000997s ] mysql:host=127.0.0.1;port=3306;dbname=wenku;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.001377s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.000680s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.000612s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.001308s ]
  6. SELECT * FROM `set` [ RunTime:0.000470s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.001311s ]
  8. SELECT * FROM `article` WHERE `id` = 688629 LIMIT 1 [ RunTime:0.001376s ]
  9. UPDATE `article` SET `lasttime` = 1780219275 WHERE `id` = 688629 [ RunTime:0.004855s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 64 LIMIT 1 [ RunTime:0.000620s ]
  11. SELECT * FROM `article` WHERE `id` < 688629 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.001080s ]
  12. SELECT * FROM `article` WHERE `id` > 688629 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.000879s ]
  13. SELECT * FROM `article` WHERE `id` < 688629 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.001519s ]
  14. SELECT * FROM `article` WHERE `id` < 688629 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.001558s ]
  15. SELECT * FROM `article` WHERE `id` < 688629 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.001950s ]
0.207430s