適用於:✅ Microsoft Fabric 中的 SQL 分析端點與資料倉儲
這很重要
這項功能目前處於預覽階段。
Fabric Data Warehouse 與 SQL 分析端點提供內建的 AI 功能,可用於直接在 SQL 查詢中分析、分類、摘要及轉換文字。 透過這些功能,你可以在不離開資料環境的情況下進行進階文字處理。 在這個教學中,學習如何使用 AI 函數來轉換文字。
| 功能 | Purpose | 語法範例 |
|---|---|---|
AI_ANALYZE_SENTIMENT |
偵測輸入文字的情感 | AI_ANALYZE_SENTIMENT(<text>) |
AI_CLASSIFY |
根據所提供的標籤分類文字 | AI_CLASSIFY(<text>, <class1>, <class2>, ...) |
AI_EXTRACT |
以 JSON 屬性形式擷取實體 | AI_EXTRACT(<text>, <class1>, <class2>, ...) |
AI_SUMMARIZE |
摘要文字 | AI_SUMMARIZE(<text>) |
AI_GENERATE_RESPONSE |
根據提示產生回應 | AI_GENERATE_RESPONSE(<prompt>[, <data>]) |
AI_TRANSLATE |
將輸入文字翻譯成指定的目標語言 | AI_TRANSLATE(<text>, <lang_code>) |
AI_FIX_GRAMMAR |
修正文法 | AI_FIX_GRAMMAR(<text>) |
這些函式會呼叫外部 AI API 來處理文字,這會影響查詢效能。 為了優化效率,避免在同一資料集的SELECT查詢中重複應用文字轉換。 相反地,應預先計算並具體化 AI 功能的結果,作為獨立欄位或中介表。
警告
如果 AI 模型無法處理文字,函式會回傳 NULL 。 常見原因包括:
- 負責任的 AI 規則會封鎖輸入文字中的不當內容。
- 輸入文字超過字符限制。 目前型號可支援最多 99 KB 的文字。
AI 功能的典型處理速度約為每秒 20 到 100 列。 如果遇到效能變慢,請將有問題的查詢報告為問題。
Prerequisites
- 若要使用 Fabric 中的內建 AI 端點來啟用 AI 功能,您的系統管理員必須啟用 Copilot 的租用戶切換以及透過 Azure OpenAI 支援的其他功能。
- 視您所在的位置而定,您可能需要啟用跨地理位置處理的租用戶設定。 深入瞭解 Azure OpenAI 服務的可用區域。
- 您需要付費的 Fabric 容量(F2 或更高版本,或任何 P 系列版本)。
- 你只能在 支援的區域使用 AI 功能。
請查看 AI 功能前置條件 以獲得更多先決條件。
分析情感
該AI_ANALYZE_SENTIMENT(text)函數會分析輸入text的情感,並回傳以下其中一個值:positive、negativemixed或neutral。
範例:
SELECT AI_ANALYZE_SENTIMENT('This hotel was great!') AS sentiment;
預期結果:positive
更多資訊請參見 AI_ANALYZE_SENTIMENT(Transact-SQL)。
分類文字
該 AI_CLASSIFY(text, class1, class2, ...) 函數將輸入 text 分類為所提供的類別之一。
範例:
SELECT AI_CLASSIFY('Room was dirty', 'service','dirt','food') AS classification;
預期結果:dirt
更多資訊請參閱 AI_CLASSIFY(Transact-SQL)。
從文字擷取實體
該 AI_EXTRACT(text, class1, class2, ...) 函式會根據指定的類別從輸入 text 中擷取實體。
範例:
SELECT AI_EXTRACT('Check-in was late and room dirty', 'sentiment','problem') AS extraction;
預期結果:{"sentiment":"Negative","problem":"Dirty room"}
更多資訊請參見 AI_EXTRACT(Transact-SQL)。
產生回應
該 AI_GENERATE_RESPONSE(prompt, data) 函數根據給定 prompt 且可選 data的 產生回應。
範例:
SELECT AI_GENERATE_RESPONSE('Reply in 20 words:', 'The room was noisy.') AS response;
預期結果: 「我們誠摯抱歉噪音造成的不便,並致力於加強隔音措施。」
更多資訊請參見 AI_GENERATE_RESPONSE(Transact-SQL)。
摘要文字
該 AI_SUMMARIZE(text) 函數將輸入 text 摘要成簡潔版本。
範例:
SELECT AI_SUMMARIZE('The hotel was clean and staff were friendly.') AS summary;
預期結果: 「飯店乾淨,員工友善。」
更多資訊請參見 AI_SUMMARIZE(Transact-SQL)。
翻譯文字
AI_TRANSLATE(text, lang_code) 函數可透過 text 將 lang_code 翻譯成指定的語言。
支援的語言代碼包括 de (德語)、(英語)、 enfr (法語)、 it (義大利語)、 es (西班牙語)、 el (希臘語)、 pl (波蘭語)、 sv (瑞典語)、 fi (芬蘭語)及 cs (捷克語)。
範例:
SELECT AI_TRANSLATE('The hotel was great','de') AS translation_de;
預期結果: 「這家飯店很棒。」
欲了解更多資訊,請參閱 AI_TRANSLATE(Transact-SQL)。
修正文法
該 AI_FIX_GRAMMAR(text) 函數修正輸入 text中的文法。
範例:
SELECT AI_FIX_GRAMMAR('Th room are clean and staff were nice') AS fixed_text;
預期結果: 「房間很乾淨,工作人員也很親切。」
更多資訊請參見 AI_FIX_GRAMMAR(Transact-SQL)。
處理錯誤
當處理文字時發生錯誤,AI 功能會回傳 NULL 。 錯誤可能由 負責任的 AI 安全檢查偵測到不允許內容、輸入超出令牌限制、短暫服務問題或其他處理失敗所引起。
預設情況下,AI 函式採用盡力而為的執行模型,並 NULL 回應失敗的請求。 此行為旨在防止影響單一資料列的錯誤導致整個查詢失敗。 當透過外部大型語言模型(LLM)處理數千列時,單一值的失敗不應阻止剩餘資料列的成功結果回傳。 此行為同時確保成功處理的請求不會遺失,也不需要重複。
檢查回傳 NULL的列,找出失敗原因,然後只重試那些特定值。
你可以在每次函式呼叫中指定 ON ERROR 子句,即可覆蓋預設行為:
-
NULL ON ERROR當函式無法處理某個值時,(預設)會回傳NULL。 -
ERROR ON ERROR若在任何函式呼叫中發生錯誤,整個查詢將失敗。 -
DEFAULT <value> ON ERROR回傳指定的預設值,而非NULL錯誤發生時。
以下範例展示了可用的錯誤處理選項:
SELECT
*,
AI_FIX_GRAMMAR(review_text NULL ON ERROR) AS fixed_text,
AI_EXTRACT(review_text, 'sentiment', 'problem' ERROR ON ERROR) AS info*
AI_CLASSIFY(review_text, 'service', 'dirt', 'food' DEFAULT 'Other' ON ERROR) AS classification
FROM hotel_reviews;
在此範例中:
-
AI_FIX_GRAMMAR對於無法處理的數值則是回傳NULL。 由於回傳NULL是預設的錯誤處理行為,因此該NULL ON ERROR子句是可選的。 -
AI_EXTRACT如果有任何儲存格遇到錯誤,則整個查詢都會失敗。 -
AI_CLASSIFY對於它無法分類的細胞會傳回Other。
備註
AI 功能可能會因多種原因回傳錯誤或效能低於預期:
- 在使用 AI 功能前,務必滿足所有必要的 條件 。 若缺少前置條件,函式會回傳錯誤。
- 若輸入文字無法被處理——例如超過標記限制、包含限制性或冒犯性內容,或違反服務政策——函式會回傳
NULL。 務必檢查回傳值是否為,NULL並在查詢、應用程式或資料處理流程中適當處理此情況。 - 效能取決於輸入大小、輸入複雜度及整體服務負載。 單一文字值通常在幾秒內完成,而較大批次則可達到約 10–30 個文字值每秒的吞吐量。 如果你持續感受到效能低於預期,可能是服務或設定問題影響了處理吞吐量。
如果您在 Fabric Data Warehouse 或 SQL 分析端點中遇到 AI 功能的問題:
- 透過 Microsoft 支援建立支援單,或
- 在Microsoft Fabric Data Warehouse子版的 AI 功能中,分享回饋、提問或討論社群問題。
Examples
答: 使用 AI 函式匯入資料並轉換文字欄位
此範例會將 Lakehouse 檔案的資料載入 hotel_reviews 倉庫中的資料表。
它從該 /Files 區塊中的檔案中選擇,然後應用 AI 功能來豐富資料:
CREATE TABLE HotelDW.dbo.hotel_reviews
AS
SELECT
city, latitude, longitude, name, reviews_rating, reviews_text,
AI_SUMMARIZE(reviews_text) AS reviews_summary,
AI_CLASSIFY( reviews_text, 'service', 'dirt', 'food', 'air conditioning', 'other') AS reviews_classification,
AI_ANALYZE_SENTIMENT(reviews_text) AS reviews_sentiment,
AI_TRANSLATE(reviews_text, 'de') AS reviews_text_de,
AI_TRANSLATE(reviews_text, 'es') AS reviews_text_es,
AI_TRANSLATE(reviews_text, 'fr') AS reviews_text_fr,
AI_TRANSLATE(reviews_text, 'it') AS reviews_text_it
FROM OPENROWSET( BULK '/Files/csv/hotel_reviews_demo.csv', DATA_SOURCE = 'TextLakehouse', HEADER_ROW = TRUE);
B. 使用 AI 功能更新文字欄
以下範例修正了欄位 reviews_text 中的文法錯誤:
UPDATE HotelDW.dbo.hotel_reviews
SET reviews_text = ISNULL(AI_FIX_GRAMMAR(reviews_text), reviews_text);
AI 函式如果發生錯誤可能會回傳NULL,因此避免用NULL覆蓋現有的值。
當 AI 函數無法回傳結果時,使用 ISNULL(<ai function>, <original value>) 這個模式來保留原始文字。
C. 從文字中擷取數值
在此範例中,函 AI_EXTRACT 式分析審查文本,並回傳包含屬性 sentiment、 time_reported、 和 problem的 JSON 物件。
OPENJSON函式接著解析這些 JSON,並將這些屬性映射到獨立欄位,方便查詢和分析。
此範例腳本會將擷取的值以獨立欄位插入目標資料表中。
INSERT INTO gold.hotel_reviews
SELECT sentiment, time_reported, problem
FROM hotel_reviews
CROSS APPLY
OPENJSON(
AI_EXTRACT(reviews_text, 'sentiment', 'time_reported', 'problem')
) WITH ( sentiment VARCHAR(1000), time_reported VARCHAR(100), problem VARCHAR(1000) );
該 AI_EXTRACT 函式會應用模糊的上下文規則,從文本中辨識並提取主題,無需手動解析或複雜的正則表達式。 此方法透過 AI 驅動的語意理解而非僵化模式匹配,簡化文本分析,使其更穩健且能適應自然語言變異。