AI 関数を使用する (プレビュー)

適用対象:✅ Microsoft Fabric の SQL 分析エンドポイントおよびウェアハウス

Important

この機能は プレビュー段階です

Fabric Data Warehouse と SQL 分析エンドポイントには、SQL クエリ内でテキストを直接分析、分類、集計、変換するために使用できる組み込みの AI 関数が用意されています。 これらの関数を使用すると、データ環境を離れることなく高度なテキスト処理を実行できます。 このチュートリアルでは、AI 関数を使用してテキストを変換する方法について説明します。

Function 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 関数の結果を個別の列またはステージング テーブルとして事前計算して具体化します。

Warnung

AI モデルがテキストを処理できない場合、関数は NULL を返します。 よくあるのは次のような理由です。

  • 責任ある AI ルールは、入力テキスト内の不適切なコンテンツをブロックします。
  • 入力テキストがトークンの制限を超えています。 現在のモデルでは、最大 15 KB のテキストがサポートされています。

AI 関数の一般的な処理速度は、1 秒あたり 20 から 100 行です。 パフォーマンスが低下する場合は、問題のあるクエリを問題として報告してください。

Prerequisites

追加の 前提条件については、AI 関数の前提条件 を確認してください。

センチメントの分析

AI_ANALYZE_SENTIMENT(text)関数は、入力textからのセンチメントを分析し、positivenegativemixed、またはneutralのいずれかの値を返します。

Example:

SELECT AI_ANALYZE_SENTIMENT('This hotel was great!') AS sentiment;

予想される結果:positive

詳細については、 AI_ANALYZE_SENTIMENT (Transact-SQL) を参照してください。

テキストを分類する

AI_CLASSIFY(text, class1, class2, ...)関数は、入力textを指定されたカテゴリのいずれかに分類します。

Example:

SELECT AI_CLASSIFY('Room was dirty', 'service','dirt','food') AS classification;

予想される結果:dirt

詳細については、 AI_CLASSIFY (Transact-SQL) を参照してください。

テキストからエンティティを抽出する

AI_EXTRACT(text, class1, class2, ...)関数は、指定したクラスに基づいて入力textからエンティティを抽出します。

Example:

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に基づいて応答を生成します。

Example:

SELECT AI_GENERATE_RESPONSE('Reply in 20 words:', 'The room was noisy.') AS response;

予想される結果: 「騒音によるご不便をおかけして誠に申し訳ございません。防音対策の強化に努めます。

詳細については、「 AI_GENERATE_RESPONSE (Transact-SQL)」を参照してください。

テキストを要約する

AI_SUMMARIZE(text)関数は、入力textを簡潔なバージョンにまとめます。

Example:

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 (ドイツ語)、 en (英語)、 fr (フランス語)、 it (イタリア語)、 es (スペイン語)、 el (ギリシャ語)、 pl (ポーランド語)、 sv (スウェーデン語)、 fi (フィンランド語)、 cs (チェコ語) です。

Example:

SELECT AI_TRANSLATE('The hotel was great','de') AS translation_de;

予想される結果: 'Das Hotel war großartig.'

詳細については、「 AI_TRANSLATE (Transact-SQL)」を参照してください。

文法を修正する

AI_FIX_GRAMMAR(text)関数は、入力textの文法を修正します。

Example:

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 を返します。

Remarks

AI 関数は、エラーを返したり、予想よりも遅いパフォーマンスが発生したりする場合があります。これには、次のようないくつかの理由があります。

  • AI 関数を使用する前に、必要なすべての 前提条件を 満たしていることを確認します。 前提条件がない場合、関数はエラーを返します。
  • 入力テキストが処理できない場合 (たとえば、トークンの制限を超えている、制限付きまたは不快なコンテンツが含まれている、サービス ポリシーに違反するなど) 場合、関数は NULLを返します。 戻り値が NULL されているかどうかを常に確認し、クエリ、アプリケーション、またはデータ処理パイプラインでこのケースを適切に処理します。
  • パフォーマンスは、入力サイズ、入力の複雑さ、サービスの全体的な負荷によって異なります。 通常、個々のテキスト値は数秒以内に処理されますが、大きなバッチでは 1 秒あたり約 10 ~ 30 個のテキスト値のスループットを実現できます。 予想より低速なパフォーマンスが一貫して発生する場合は、処理スループットに影響するサービスまたは構成の問題が発生する可能性があります。

Fabric Data WarehouseやSQL分析エンドポイントでAI機能に問題が発生した場合:

例示

A. 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 で上書きしないようにします。

ISNULL(<ai function>, <original value>) パターンを使用して、AI 関数が結果を返さない場合に元のテキストを保持します。

C. テキストから値を抽出する

この例では、 AI_EXTRACT 関数はレビュー テキストを分析し、 sentimenttime_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 主導のセマンティック理解を使用してテキスト分析を簡略化し、自然言語のバリエーションにより堅牢で適応性を高めます。