本文以金融行業文本分析為例,介紹如何使用 StarRocks AI Function 在 SQL 層面直接完成情感分析、智能分類、資訊抽取和 PII 脫敏等任務,無需將資料匯出到外部系統處理。
情境概述
在金融行業中,大量業務決策依賴對文本資料的快速理解——客戶投訴工單需要情感判別、監管公告需要合規分類、研報需要關鍵資訊抽取、客戶資料需要 PII 脫敏。傳統方案需要將資料匯出到外部 NLP 系統處理後再寫回,鏈路長、延遲高、資料安全風險大。
StarRocks AI Function 讓這一切在 SQL 層面直接完成——無需資料出庫,無需外部服務編排,一條 SQL 即可對結構化表中的文字欄位進行情感分析、智能分類、資訊抽取和脫敏處理。
核心能力
本實踐主要使用以下 AI 內建函數:
函數 | 功能 | 金融情境應用 |
| 情感分析 | 客戶回函/輿情監控 |
| 文本分類 | 工單分類/監管公告分類 |
| 資訊抽取 | 合約關鍵要素提取 |
| PII 脫敏 | 客戶資訊合規處理 |
| 文本摘要 | 研報/公告摘要 |
| 語義過濾 | 風險文本篩查 |
| 自訂分析 | 複雜金融推理 |
方案優勢
資料不出庫:所有 AI 處理在 StarRocks 引擎內完成,無需將敏感金融資料匯出到外部系統。
純 SQL 操作:分析師無需學習 Python/Java,用熟悉的 SQL 即可完成 AI 分析。
批量處理能力:可對百萬級文本記錄批量執行 AI 函數,支援 ETL 管線整合。
與分析查詢無縫結合:AI 函數結果可直接參与 GROUP BY、JOIN、視窗函數等分析操作。
方案流程
整個方案分為三個階段:
資料準備:將金融文本資料(客戶工單、監管公告、合約文本等)存入 StarRocks 表中。
AI 文本處理:通過 SQL 調用 AI Function 對文本進行情感分析、分類、抽取、脫敏等處理,全程資料不出庫。
分析決策:將 AI 處理結果與 SQL 彙總分析結合,產生情感分布、分類統計、合約要素表等業務洞察,支援報表和看板展示。
準備工作
環境要求
EMR Serverless StarRocks 2.1.1及以上版本。
已開通AI 中心。
資料準備
本實踐類比金融情境中的三類典型文本資料,建立樣本表並寫入樣本資料。
客戶服務工單表
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);最佳實務建議
建議 | 說明 |
優先使用專用函數 |
|
批量處理用 INSERT INTO SELECT | 避免逐行調用 AI 函數,批量寫入結果表後再查詢 |
結果持久化 | 對不變文本的 AI 分析結果應寫入結果表或物化視圖,避免重複計算 |
ai_filter 用於預篩 | 先用 |
注意 Token 消耗 | 長文本(如合約全文)單次調用 Token 較高,可先 |
分類標籤標準化 |
|
總結
StarRocks AI Function 為金融行業提供了一條"資料不出庫"的文本智能分析路徑。通過 ai_sentiment、ai_classify、ai_extract、ai_redact、ai_filter 等專用函數,企業可以在 SQL 層面直接完成客戶情感分析、工單智能分類、合約要素抽取、PII 合規脫敏等核心業務情境——無需搭建外部 NLP 服務,無需資料匯出,與 StarRocks 的高效能分析引擎無縫整合。