全部产品
Search
文档中心

开源大数据平台E-MapReduce:AI Function最佳实践

更新时间:Sep 16, 2026

本文以金融行业文本分析为例,介绍如何使用 StarRocks AI Function 在 SQL 层面直接完成情感分析、智能分类、信息抽取和 PII 脱敏等任务,无需将数据导出到外部系统处理。

场景概述

在金融行业中,大量业务决策依赖对文本数据的快速理解——客户投诉工单需要情感判别、监管公告需要合规分类、研报需要关键信息抽取、客户资料需要 PII 脱敏。传统方案需要将数据导出到外部 NLP 系统处理后再写回,链路长、延迟高、数据安全风险大。

StarRocks AI Function 让这一切在 SQL 层面直接完成——无需数据出库,无需外部服务编排,一条 SQL 即可对结构化表中的文本字段进行情感分析、智能分类、信息抽取和脱敏处理。

核心能力

本实践主要使用以下 AI 内建函数:

函数

功能

金融场景应用

ai_sentiment(text)

情感分析

客户反馈/舆情监控

ai_classify(text, categories)

文本分类

工单分类/监管公告分类

ai_extract(text, labels)

信息抽取

合同关键要素提取

ai_redact(text)

PII 脱敏

客户信息合规处理

ai_summarize(text)

文本摘要

研报/公告摘要

ai_filter(text, condition)

语义过滤

风险文本筛查

ai_complete(prompt, instruction)

自定义分析

复杂金融推理

方案优势

  • 数据不出库:所有 AI 处理在 StarRocks 引擎内完成,无需将敏感金融数据导出到外部系统。

  • 纯 SQL 操作:分析师无需学习 Python/Java,用熟悉的 SQL 即可完成 AI 分析。

  • 批量处理能力:可对百万级文本记录批量执行 AI 函数,支持 ETL 管线集成。

  • 与分析查询无缝结合:AI 函数结果可直接参与 GROUP BY、JOIN、窗口函数等分析操作。

方案流程

整个方案分为三个阶段:

  1. 数据准备:将金融文本数据(客户工单、监管公告、合同文本等)存入 StarRocks 表中。

  2. AI 文本处理:通过 SQL 调用 AI Function 对文本进行情感分析、分类、抽取、脱敏等处理,全程数据不出库。

  3. 分析决策:将 AI 处理结果与 SQL 聚合分析结合,生成情感分布、分类统计、合同要素表等业务洞察,支持报表和看板展示。

准备工作

环境要求

  • EMR Serverless StarRocks 2.1.1及以上版本。

  • 已开通AI Function。

数据准备

本实践模拟金融场景中的三类典型文本数据,创建示例表并写入样本数据。

客户服务工单表

CREATE TABLE fin_customer_tickets (
    ticket_id       BIGINT,
    customer_id     VARCHAR(20),
    channel         VARCHAR(10)    COMMENT '渠道:app/web/phone/branch',
    product_type    VARCHAR(20)    COMMENT '产品类型:credit_card/loan/deposit/fund/insurance',
    ticket_text     VARCHAR(65533) COMMENT '工单内容',
    created_at      DATETIME
)
DUPLICATE KEY(ticket_id)
DISTRIBUTED BY HASH(ticket_id) BUCKETS 8;
INSERT INTO fin_customer_tickets VALUES
(1001, 'C20240001', 'app', 'credit_card',
 '你们这个信用卡账单又出错了!上个月明明还了8000块,结果账单显示还欠5000,这是第三次了!再搞不定我就要投诉到银保监了!', '2026-05-01 09:15:00'),
(1002, 'C20240002', 'phone', 'loan',
 '想咨询一下房贷提前还款的流程,需要准备哪些材料?还有提前还款有没有违约金?', '2026-05-01 10:30:00'),
(1003, 'C20240003', 'web', 'fund',
 '你们推荐的那个稳健型基金,一个月亏了15%,这叫稳健?我要求赔偿!基金经理是不是在乱操作?', '2026-05-01 11:45:00'),
(1004, 'C20240004', 'app', 'deposit',
 '大额存单到期自动续存的功能很方便,利率也还行,比之前高了0.1个百分点,整体体验不错', '2026-05-01 14:00:00'),
(1005, 'C20240005', 'branch', 'insurance',
 '保险理赔太慢了,住院花了3万块,提交材料都两个月了还没给结果。催了好几次客服就说在审核中。', '2026-05-01 15:20:00'),
(1006, 'C20240006', 'app', 'credit_card',
 '刚开通的白金卡权益不错,机场贵宾厅很舒服,积分兑换也比较划算,推荐给朋友了', '2026-05-01 16:00:00'),
(1007, 'C20240007', 'phone', 'loan',
 '车贷每月还款日能不能改一下?现在是5号扣款,但我工资15号才发,每个月都很紧张', '2026-05-02 09:00:00'),
(1008, 'C20240008', 'web', 'fund',
 '定投了半年的指数基金,收益还可以,目前年化大概8%左右,准备继续持有', '2026-05-02 10:15:00');

监管公告与新闻表

CREATE TABLE fin_regulatory_news (
    news_id         BIGINT,
    source          VARCHAR(50)    COMMENT '来源机构',
    publish_date    DATE,
    title           VARCHAR(500),
    content         VARCHAR(65533) COMMENT '正文内容'
)
DUPLICATE KEY(news_id)
DISTRIBUTED BY HASH(news_id) BUCKETS 4;
INSERT INTO fin_regulatory_news VALUES
(2001, '中国人民银行', '2026-04-28',
 '关于加强金融消费者权益保护工作的通知',
 '为进一步加强金融消费者权益保护,规范金融机构经营行为,根据《中华人民共和国消费者权益保护法》等法律法规,现就有关事项通知如下:一、金融机构应当建立健全消费者权益保护工作机制,设立专门部门或岗位负责消费者权益保护工作。二、金融机构在营销宣传、产品销售过程中,应当充分揭示产品风险,不得进行虚假或引人误解的宣传。三、金融机构应当畅通投诉渠道,及时处理消费者投诉,处理时限不得超过15个工作日。'),
(2002, '中国银保监会', '2026-04-25',
 '关于规范信贷资金用途的监管要求',
 '近期检查发现部分银行信贷资金违规流入房地产市场和股票市场。现要求:各银行业金融机构应加强贷后管理,确保信贷资金用于约定用途。对于经营性贷款,应核实借款人真实经营需求,防止资金挪用。违规机构将面临监管处罚,包括但不限于罚款、限制业务范围等措施。'),
(2003, '中国证监会', '2026-04-20',
 '关于进一步规范上市公司信息披露的若干意见',
 '为提升上市公司信息披露质量,保护投资者合法权益,现提出以下意见:上市公司应当真实、准确、完整、及时地披露信息,不得有虚假记载、误导性陈述或者重大遗漏。鼓励上市公司自愿披露与投资者决策相关的信息,提高信息透明度。'),
(2004, '中国人民银行', '2026-04-15',
 '2026年第一季度货币政策执行报告',
 '2026年第一季度,稳健的货币政策精准有力。3月末,广义货币M2余额同比增长8.2%。人民币贷款余额同比增长10.5%,社会融资规模存量同比增长9.8%。利率市场化改革持续推进,企业贷款利率保持在较低水平。下一阶段将继续实施稳健的货币政策,保持流动性合理充裕。');

合同/协议文本表

CREATE TABLE fin_contracts (
    contract_id     VARCHAR(30),
    contract_type   VARCHAR(20)   COMMENT '合同类型:loan/guarantee/pledge',
    party_a         VARCHAR(200),
    party_b         VARCHAR(200),
    contract_text   VARCHAR(65533) COMMENT '合同关键条款'
)
DUPLICATE KEY(contract_id)
DISTRIBUTED BY HASH(contract_id) BUCKETS 4;
INSERT INTO fin_contracts VALUES
('LOAN-2026-0001', 'loan', '某某银行股份有限公司杭州分行', '杭州星辰科技有限公司',
 '贷款金额:人民币伍佰万元整(¥5,000,000.00)。贷款期限:自2026年1月15日起至2027年1月14日止,共计12个月。贷款利率:按照LPR加60个基点执行,即年利率4.15%。还款方式:等额本息,每月20日为还款日。违约条款:借款人未按时还款的,应按逾期金额每日万分之五支付罚息。担保方式:以借款人名下位于杭州市西湖区XX路XX号房产提供抵押担保。'),
('LOAN-2026-0002', 'loan', '某某银行股份有限公司上海分行', '上海锦绣贸易有限公司',
 '贷款金额:人民币壹仟万元整(¥10,000,000.00)。贷款期限:自2026年3月1日起至2028年2月28日止,共计24个月。贷款利率:固定利率年4.35%。还款方式:先息后本,每季度末支付利息,到期一次性归还本金。违约条款:借款人连续三期未还息或挪用贷款资金的,贷款人有权宣布贷款提前到期。担保方式:由上海锦绣集团有限公司提供连带责任保证担保。'),
('GUAR-2026-0001', 'guarantee', '某某银行股份有限公司杭州分行', '浙江鑫达实业集团有限公司',
 '保证方式:连带责任保证。保证范围:主债权本金人民币伍佰万元及利息、罚息、违约金、实现债权的费用。保证期间:自主债务履行期限届满之日起两年。保证人声明:保证人具有完全民事行为能力,愿意以其全部资产为上述债务提供连带责任保证。联系人:张伟,电话:1381234****,身份证号:330102199001010000。');

场景一:客户工单智能分析

情感分析——识别客户情绪

快速判断每条工单的客户情绪,优先处理负面反馈:

SELECT
    ticket_id,
    product_type,
    ai_sentiment(ticket_text) AS sentiment,
    LEFT(ticket_text, 40) AS preview
FROM fin_customer_tickets
ORDER BY ticket_id;

结果示例:

ticket_id

product_type

sentiment

preview

1001

credit_card

negative

你们这个信用卡账单又出错了!上个月明明还了8000块...

1002

loan

neutral

想咨询一下房贷提前还款的流程,需要准备哪些材料...

1003

fund

negative

你们推荐的那个稳健型基金,一个月亏了15%,这叫稳健...

1004

deposit

positive

大额存单到期自动续存的功能很方便,利率也还行...

1005

insurance

negative

保险理赔太慢了,住院花了3万块,提交材料都两个月了...

1006

credit_card

positive

刚开通的白金卡权益不错,机场贵宾厅很舒服...

工单智能分类——按业务类型自动归类

将自由文本工单自动归入预定义的业务类别:

SELECT
    ticket_id,
    ai_classify(
        ticket_text,
        ARRAY['账单争议', '业务咨询', '投诉建议', '产品体验', '理赔纠纷']
    ) AS category,
    ai_sentiment(ticket_text) AS sentiment
FROM fin_customer_tickets;

情感分布分析——按产品维度聚合

将 AI 分析结果直接与 SQL 聚合分析结合:

SELECT
    product_type,
    ai_sentiment(ticket_text) AS sentiment,
    COUNT(*) AS ticket_count
FROM fin_customer_tickets
GROUP BY product_type, ai_sentiment(ticket_text)
ORDER BY product_type, ticket_count DESC;

结果示例:

product_type

sentiment

ticket_count

credit_card

negative

1

credit_card

positive

1

fund

negative

1

fund

positive

1

insurance

negative

1

loan

neutral

2

deposit

positive

1

语义过滤——筛查高风险工单

使用 ai_filter 在 WHERE 子句中按语义条件过滤,找出涉及监管投诉风险的工单:

SELECT
    ticket_id,
    product_type,
    ticket_text,
    ai_sentiment(ticket_text) AS sentiment
FROM fin_customer_tickets
WHERE ai_filter(ticket_text, '客户威胁要向监管机构投诉或要求赔偿');

ai_filter 返回 BOOLEAN,可直接用于 WHERE 子句,实现"用自然语言写过滤条件"。

场景二:监管公告智能分类与摘要

公告分类

对监管公告按监管领域自动分类:

SELECT
    news_id,
    source,
    title,
    ai_classify(
        content,
        ARRAY['消费者保护', '信贷监管', '信息披露', '货币政策', '反洗钱', '市场准入']
    ) AS reg_category
FROM fin_regulatory_news;

公告摘要

为长篇公告生成简短摘要,便于管理层快速浏览:

SELECT
    news_id,
    title,
    ai_summarize(content) AS summary
FROM fin_regulatory_news
WHERE publish_date >= '2026-04-01';

合规影响分析

使用 ai_complete 进行更深层次的业务分析——判断公告对本行业务的影响:

SELECT
    news_id,
    title,
    ai_complete(
        content,
        '你是一名银行合规分析师。请分析这条监管公告对商业银行零售业务的具体影响,列出需要整改的要点,限100字以内。'
    ) AS compliance_impact
FROM fin_regulatory_news
WHERE ai_filter(content, '涉及银行业务合规要求或处罚措施');

场景三:合同关键信息抽取

合同要素提取

从合同文本中自动抽取结构化的关键信息:

SELECT
    contract_id,
    contract_type,
    ai_extract(
        contract_text,
        ARRAY['贷款金额', '贷款期限', '年利率', '还款方式', '担保方式', '违约条款']
    ) AS key_elements
FROM fin_contracts
WHERE contract_type = 'loan';

结果示例(JSON 格式):

{
  "贷款金额": "人民币伍佰万元整(¥5,000,000.00)",
  "贷款期限": "2026年1月15日至2027年1月14日,共计12个月",
  "年利率": "LPR加60个基点,即4.15%",
  "还款方式": "等额本息,每月20日还款",
  "担保方式": "杭州市西湖区房产抵押担保",
  "违约条款": "逾期按每日万分之五支付罚息"
}

合同 PII 脱敏

对包含个人敏感信息的合同文本进行脱敏处理,满足数据合规要求:

SELECT
    contract_id,
    ai_redact(contract_text) AS redacted_text
FROM fin_contracts
WHERE contract_type = 'guarantee';

脱敏效果:

原文:联系人:张伟,电话:13812345678,身份证号:330102199001010000
脱敏后:联系人:张**,电话:138****5678,身份证号:330102********0000

合同风险评估

结合 ai_extract 和 ai_complete 构建合同风险评估管线:

WITH contract_elements AS (
    SELECT
        contract_id,
        party_a,
        party_b,
        contract_text,
        ai_extract(
            contract_text,
            ARRAY['贷款金额', '年利率', '担保方式', '违约条款']
        ) AS elements
    FROM fin_contracts
    WHERE contract_type = 'loan'
)
SELECT
    contract_id,
    party_b,
    elements,
    ai_complete(
        CONCAT('合同要素:', CAST(elements AS VARCHAR), '\n\n合同原文:', contract_text),
        '你是信贷风控专家。请基于合同要素评估该笔贷款的风险等级(低/中/高),并给出主要风险点,限80字。'
    ) AS risk_assessment
FROM contract_elements;

场景四:综合分析管线

客户 360 文本分析看板

将多个 AI 函数组合,构建客户反馈的多维分析视图:

SELECT
    ticket_id,
    customer_id,
    product_type,
    channel,
    ai_sentiment(ticket_text)  AS sentiment,
    ai_classify(
        ticket_text,
        ARRAY['账单争议', '业务咨询', '投诉建议', '产品体验', '理赔纠纷']
    ) AS category,
    ai_extract(
        ticket_text,
        ARRAY['涉及金额', '诉求']
    ) AS key_info,
    ai_summarize(ticket_text)  AS summary
FROM fin_customer_tickets
WHERE created_at >= '2026-05-01';

基于 AI 分析结果构建物化视图

将 AI 分析结果持久化,避免重复计算:

CREATE MATERIALIZED VIEW mv_ticket_analysis AS
SELECT
    ticket_id,
    customer_id,
    product_type,
    channel,
    created_at,
    ai_sentiment(ticket_text) AS sentiment,
    ai_classify(
        ticket_text,
        ARRAY['账单争议', '业务咨询', '投诉建议', '产品体验', '理赔纠纷']
    ) AS category
FROM fin_customer_tickets;

后续查询直接基于物化视图,无需重复调用 AI 函数:

SELECT
    DATE(created_at) AS dt,
    product_type,
    COUNT(*) AS negative_tickets
FROM mv_ticket_analysis
WHERE sentiment = 'negative'
GROUP BY DATE(created_at), product_type
ORDER BY dt, negative_tickets DESC;

ETL 管线集成:INSERT INTO SELECT

将 AI 处理结果写入下游分析表,构建完整的数据加工管线:

-- 创建分析结果表
CREATE TABLE fin_ticket_analysis_result (
    ticket_id       BIGINT,
    customer_id     VARCHAR(20),
    product_type    VARCHAR(20),
    sentiment       VARCHAR(20),
    category        JSON,
    key_info        JSON,
    summary         VARCHAR(65533),
    analyzed_at     DATETIME DEFAULT CURRENT_TIMESTAMP
)
DUPLICATE KEY(ticket_id)
DISTRIBUTED BY HASH(ticket_id) BUCKETS 4;
-- 批量 AI 分析并写入结果表
INSERT INTO fin_ticket_analysis_result
    (ticket_id, customer_id, product_type, sentiment, category, key_info, summary)
SELECT
    ticket_id,
    customer_id,
    product_type,
    ai_sentiment(ticket_text),
    ai_classify(ticket_text, ARRAY['账单争议', '业务咨询', '投诉建议', '产品体验', '理赔纠纷']),
    ai_extract(ticket_text, ARRAY['涉及金额', '诉求']),
    ai_summarize(ticket_text)
FROM fin_customer_tickets
WHERE ticket_id NOT IN (SELECT ticket_id FROM fin_ticket_analysis_result);

最佳实践建议

建议

说明

优先使用专用函数

ai_sentiment 比 ai_complete('分析情感...') 更快、更稳定、成本更低

批量处理用 INSERT INTO SELECT

避免逐行调用 AI 函数,批量写入结果表后再查询

结果持久化

对不变文本的 AI 分析结果应写入结果表或物化视图,避免重复计算

ai_filter 用于预筛

先用 ai_filter 缩小范围,再对筛选后的小结果集调用重量级函数

注意 Token 消耗

长文本(如合同全文)单次调用 Token 较高,可先 ai_summarize 再分析

分类标签标准化

ai_classify 的 categories 参数建议使用业务统一的标签体系

总结

StarRocks AI Function 为金融行业提供了一条"数据不出库"的文本智能分析路径。通过 ai_sentiment、ai_classify、ai_extract、ai_redact、ai_filter 等专用函数,企业可以在 SQL 层面直接完成客户情感分析、工单智能分类、合同要素抽取、PII 合规脱敏等核心业务场景——无需搭建外部 NLP 服务,无需数据导出,与 StarRocks 的高性能分析引擎无缝集成。