用 AI Functions 构建智能客服工单处理管道

客户支持是企业和客户之间最直接的纽带。每张工单不仅是需要解决的问题,更是产品改进的信号。支持团队的核心工作是理解、优先处理和路由这些工单,同时从中提取业务洞察。

但规模大了以后,传统方案开始失效。基于规则的路由在自然语言面前很脆弱——用户写"登录不了"和"我账号登不上去"可能是同一个问题,但规则引擎看到的是完全不同的字符串。自建 ML 管道则需要把数据搬到外部系统、维护推理基础设施、等待数据科学团队的排期。两种方式都增加了延迟和运维成本。

云器 Lakehouse AI Functions 提供了一条不同的路径:将大语言模型作为 SQL 函数直接带到数据所在的位置。分类、情感打分、建议生成全部在数据平台上完成,数据不需要离开 Lakehouse,不需要管理外部 API,不需要等待数据科学团队。


技术栈

本文的管道使用以下 AI Functions:

  • AI_CLASSIFY
    AI_CLASSIFY
    — 接收文本和分类标签列表,自动将工单路由到正确类别。你定义标签,模型做匹配。
  • AI_TRANSCRIBE
    AI_TRANSCRIBE
    — 将存储在 Volume 中的通话录音转写成文本。音频不离开平台基础设施。
  • AI_COMPLETE
    AI_COMPLETE
    — 通用 LLM 补全函数,本文用它做两件事:连续数值情感打分和生成运营建议。
  • AI_EXTRACT
    AI_EXTRACT
    — 从非结构化文本中提取结构化信息,用于自动提取工单关键字段。

动态表(Dynamic Table)将整个过程编排为一个声明式管道,自动增量刷新。无需调度器、无需 Airflow DAG、无需 cron job。

alt text


六步构建智能客服管道

第一步:接入多渠道工单

所有渠道的工单汇聚到一张表中,结构尽量精简:

CREATE TABLE raw_tickets ( ticket_id BIGINT, channel STRING, -- 'email', 'chat', 'phone', 'social' raw_text STRING, -- 文本内容(邮件/聊天记录/社交帖子) audio_path STRING, -- 仅 phone 渠道:Volume 中的音频文件路径 created_at TIMESTAMP );

第二步:转写通话录音

电话渠道的音频文件通过

AI_TRANSCRIBE
AI_TRANSCRIBE
自动转写为文本。一通电话转写后,在管道中看起来和邮件工单没有区别:

UPDATE raw_tickets SET raw_text = AI_TRANSCRIBE( GET_PRESIGNED_URL(USER VOLUME, audio_path, 36000) ) WHERE channel = 'phone' AND raw_text IS NULL;

第三步:分类工单

AI_CLASSIFY
AI_CLASSIFY
接收工单文本和分类标签列表,语义匹配最合适的类别。用户写的是"API 一直报超时我都被踢出来了",系统自动路由到"系统缺陷:API 超时"——即使这些词并不在标签文本中精确出现:

SELECT ticket_id, AI_CLASSIFY( raw_text, ARRAY('系统缺陷:API超时', '账号权限:SSO登录', '计费问题:升级扣费', '功能建议', '通用咨询'), JSON '{"output.behavior": "raw_string"}' ) AS category FROM raw_tickets;

第四步:数值情感打分

AI_SENTIMENT
AI_SENTIMENT
返回
positive
positive
/
negative
negative
/
neutral
neutral
/
mixed
mixed
标签。但如果需要更精细的连续数值(比如 -1.0 到 +1.0),可以用
AI_COMPLETE
AI_COMPLETE
自定义 prompt:

SELECT ticket_id, AI_COMPLETE( CONCAT('请对以下工单的情感进行打分,返回 -1.0 到 +1.0 之间的数值(-1=非常不满,0=中性,+1=非常满意),只返回数字。工单内容:', raw_text), JSON '{"output.behavior": "raw_string"}' ) AS sentiment_score FROM raw_tickets;

output.behavior=raw_string
output.behavior=raw_string
确保返回纯文本数值而非 JSON 包裹,方便下游
TRY_TO_DOUBLE
TRY_TO_DOUBLE
转换。

第五步:生成运营建议

运营建议是支持主管直接参考的内容,一个模糊的建议会侵蚀信任。

AI_COMPLETE
AI_COMPLETE
在此扮演高级分析角色——它阅读已分类和打分的工单,给出可操作的建议:

WITH weekly_stats AS ( SELECT category, COUNT(*) AS volume, ROUND(AVG(TRY_CAST(sentiment_score AS DOUBLE)), 2) AS avg_sentiment FROM enriched_tickets WHERE created_at >= DATEADD('day', -7, CURRENT_TIMESTAMP()) GROUP BY category ) SELECT category, volume, avg_sentiment, AI_COMPLETE( CONCAT('你是一名客服运营主管。以下是过去一周的工单统计数据:\n', '类别:', category, '\n', '数量:', volume, '\n', '平均情感分:', avg_sentiment, '\n', '请给出 2-3 条具体、可执行的改进建议。返回格式:每条建议用换行分隔。'), JSON '{"output.behavior": "raw_string"}' ) AS recommendations FROM weekly_stats;

第六步:动态表编排

将所有处理步骤合并为一张动态表。动态表声明式定义转换逻辑,系统自动增量刷新:

CREATE DYNAMIC TABLE enriched_tickets REFRESH INTERVAL 30 MINUTE AS SELECT ticket_id, channel, raw_text, created_at, AI_CLASSIFY( raw_text, ARRAY('系统缺陷:API超时', '账号权限:SSO登录', '计费问题:升级扣费', '功能建议', '通用咨询'), JSON '{"output.behavior": "raw_string"}' ) AS category, AI_COMPLETE( CONCAT('请对以下工单的情感进行打分,返回 -1.0 到 +1.0 之间的数值,只返回数字。工单:', raw_text), JSON '{"output.behavior": "raw_string"}' ) AS sentiment_score FROM raw_tickets;


运营看板效果

经过上述步骤处理后,运营团队可以直接查询分析结果:

问题类别平均情感分工单量运营建议
系统缺陷:API超时-0.85(非常不满)1,240升级 L2 工程处理;在状态页自动发布公告
账号权限:SSO登录-0.60(较不满)890优化密码重置流程;建议开发一键登录组件
计费问题:升级扣费-0.20(略有不满)450编写标准化计费说明话术供 L1 客服使用
功能建议+0.70(正面)3,100录入 Product Board;支持优先级低但产品价值高

整条管道从数据接入到看板展示,全部在 SQL 中完成。


最佳实践

数据隐私与 AI_TRANSCRIBE

通话录音转写是整个管道中风险最高的环节。建议:

  • 确认客户同意条款涵盖 AI 转写场景
  • 转写后由人工决定原始录音的保留或删除策略
  • 音频文件全程在 Volume 中处理,不经过第三方 API

PII 脱敏处理

工单中常包含敏感个人信息。推荐的处理顺序:

  1. 先分类打分,再脱敏 — 分类和情感分析需要原始文本才能准确
  2. 脱敏后再展示 — 用
    AI_MASK
    AI_MASK
    识别并替换姓名、电话、邮箱等信息
  3. 列级别权限控制 — 对脱敏前的原始列设置数据 masking 策略

SELECT ticket_id, AI_MASK(raw_text, ARRAY('姓名', '电话', '邮箱', '地址'), JSON '{"output.behavior": "raw_string"}') AS masked_text FROM enriched_tickets;

人工兜底策略

AI 辅助应始终保留人工审核通道:

  • AI_CLASSIFY
    AI_CLASSIFY
    置信度较低的工单添加
    confidence_flag
    confidence_flag
    标记
  • AI 建议仅作为参考,自动执行前需人工确认
  • 每周随机抽检 5% 的分类结果,持续跟踪准确率

成本优化

不同任务匹配不同模型配置:

任务建议原因
工单分类
AI_CLASSIFY
AI_CLASSIFY
(省略 model)
内置优化,配置工作区默认模型即可
数值情感打分
AI_COMPLETE
AI_COMPLETE
+
raw_string
raw_string
自定义 prompt 灵活控制输出格式
运营建议生成
AI_COMPLETE
AI_COMPLETE
+ 工作区默认模型
推理密集型任务,使用较强模型
大规模流水线开启
task.concurrency
task.concurrency
批量处理时提升吞吐量,建议值 4~8

质量评估

  • 准备 50~100 条已标注的测试工单
  • 以分类准确率 85%+ 为目标
  • 每次调整 prompt 或切换模型后重新评估
  • 定期检查情感打分与实际情况的相关性

model 参数配置方式

所有 AI Functions 的 model 参数现在可以省略——系统自动使用工作区默认模型。

新工作区(2026 年 9 月起):创建时打开 "启用 AI Function" 开关,系统自动配置模型。

现有工作区:可通过以下方式配置默认模型:

-- 会话级别 SET(仅当前 session 生效) SET cz.sql.ai.complete.default.model=conn_bailian:qwen/qwen3.6-flash; -- 工作区级别 ALTER WORKSPACE(对所有 session 生效) ALTER WORKSPACE <workspace_name> SET PROPERTIES ( 'cz.sql.ai.complete.default.model' = 'conn_bailian:qwen/qwen3.6-flash' );

调试和测试时也可通过 options 中的

task.concurrency
task.concurrency
控制并发度,通过
output.behavior
output.behavior
控制输出格式。


动手试一试

人工分类工单是对支持团队的一种隐性税——L1 客服每多花一分钟判断工单类型,就少一分钟解决实际问题。

以下 SQL 生成 5 条模拟工单并一键完成分类和情感打分:

-- 生成模拟工单 → 分类 → 情感打分 WITH fake_tickets(ticket_id, topic) AS ( SELECT 1, 'API超时问题' UNION ALL SELECT 2, '账号登录失败' UNION ALL SELECT 3, '计费扣费不对' UNION ALL SELECT 4, '功能建议' UNION ALL SELECT 5, '产品咨询' ), generated AS ( SELECT ticket_id, AI_COMPLETE( CONCAT('生成一段客服工单文本,关于SaaS产品的', topic, '的问题'), JSON '{"output.behavior": "raw_string", "task.concurrency": "4"}' ) AS ticket_text FROM fake_tickets ) SELECT ticket_id, LEFT(ticket_text, 80) AS ticket_abstract, AI_CLASSIFY( ticket_text, ARRAY('系统缺陷:API超时', '账号权限:SSO登录', '计费问题:升级扣费', '功能建议', '通用咨询'), JSON '{"output.behavior": "raw_string"}' ) AS category, TRY_CAST(AI_COMPLETE( CONCAT('请对以下工单情感打分,范围 -1.0 到 +1.0,只返回数字:', ticket_text), JSON '{"output.behavior": "raw_string"}' ) AS DOUBLE) AS sentiment FROM generated ORDER BY ticket_id;

管道搭建完成后,建议从以下方向持续优化:

  • 调整分类标签的粒度和名称,观察准确率变化
  • output.behavior
    output.behavior
    切换输出格式,适配下游系统
  • 在动态表的基础上叠加实时异常告警
  • 将脱敏后的聚合数据接入 BI 系统

本文所有示例均可在云器 Lakehouse 中直接运行。AI Functions 的具体参数说明和更多使用场景,请参阅各函数文档。

联系我们
预约咨询
微信咨询
电话咨询
邮件咨询