AI 関数は Experimental です。有効にするには
allow_experimental_ai_functions を設定してください。AI 関数は予測不能な出力を返す場合があります。結果は、プロンプトの品質と使用するモデルに大きく依存します。- クォータの適用: トークン (
ai_function_max_input_tokens_per_query,ai_function_max_output_tokens_per_query) および API 呼び出し (ai_function_max_api_calls_per_query) に対するクエリ単位の上限。 - バックオフ付き再試行: 一時的な障害は、指数バックオフ (
ai_function_retry_initial_delay_ms) を使用して再試行 (ai_function_max_retries) されます。
Configuration
aiGenerate、aiClassify、aiFilter、aiExtract、aiTranslate、aiRedact) で使用する 名前付きコレクション と、異なるエンドポイントが必要で通常は異なるモデルを使用する埋め込み関数 (aiEmbed、aiSimilarity) で使用する 名前付きコレクション を、別々に定義したい場合があります。
プロバイダーの認証情報を含む 名前付きコレクション を作成するための例のステートメントを以下に示します。1 つはチャット用エンドポイント、もう 1 つは埋め込み用エンドポイントです。
名前付きコレクションのパラメータ
provider = 'openai' を設定し、endpoint を利用するサービスに向けることで、任意の OpenAI 互換 API (例: vLLM、Ollama、LiteLLM) を使用できます。認証情報の選択
名前付きコレクション を次の順序で特定します。
- 存在する場合は、パラメータマップの
credentialsキー。 - それ以外の場合は、該当するデフォルト認証情報の設定。
- テキスト関数 (
aiGenerate、aiClassify、aiFilter、aiExtract、aiTranslate、aiRedact) ではai_function_text_default_credentials。 - 埋め込み関数 (
aiEmbed、aiSimilarity) ではai_function_embedding_default_credentials。
- テキスト関数 (
UInt8 を返し、WHERE 句で直接使用できる aiFilter を使って、自然言語の条件で行をフィルタリングします。
パラメータマップ
Map(String, String) のパラメータマップを受け取れます。すべての値は文字列です (数値も '0.2' のようにクォートしてください) 。不明なキーは受け付けられません。指定されたキーは、対応する 名前付きコレクション の値を上書きします。指定されていないキーは、名前付きコレクション (model/max_tokens の場合) または組み込みのデフォルト値が使われます。例外は埋め込み関数 (aiEmbed、aiSimilarity) で、model を必須の位置引数として受け取り (例: aiEmbed(text, model[, params])、aiSimilarity(text1, text2, model[, params]))、代わりにパラメータマップや 名前付きコレクション に設定するとエラーになります。これは再現可能な埋め込みを保証するためです。
以下のパラメータは、すべての AI 関数に共通です。
各関数は、これに加えて関数固有の追加パラメータ (
max_tokens、temperature、system_prompt、instructions、dimensions など) を受け付けます。受け付けるパラメータとそのデフォルト値については、以下の各関数のリファレンスを参照してください。
クエリレベルの設定
ai_function_ プレフィックスで Settings に一覧表示されています。
エンドポイントホストの制限
endpoint URL は、サーバーが自身の identity で接続する送信先であり、リクエストヘッダーに 名前付きコレクション の api_key を (指定されている場合に) 含めて送信する可能性があります。デフォルトでは、ClickHouse はすべてのホストへの接続を許可します。関数を特定の provider 群のみに制限するには、サーバー設定で remote_url_allow_hosts を設定します。例:
転送のセキュリティ (HTTP と HTTPS)
endpoint URL のスキームのみによって決まります。リクエストのペイロード自体がアプリケーションレベルで暗号化されることはなく、転送中データの保護はスキームに完全に依存します。
https://— 接続に TLS が使用されます。リクエストボディ (入力テキスト、プロンプト) と、リクエストヘッダー内のapi_keyは転送中に暗号化され、プロバイダー の certificate も検証されます。リモートの プロバイダー には必ずこちらを使用してください。http://— 接続は暗号化されません。リクエストボディとapi_keyは平文で送信されます。これは、private network 上の信頼できる プロバイダー (例: ローカルのvLLMまたはOllamaインスタンス) に対してのみ使用してください。
endpoint を拒否します。host がループバックでない HTTPS 以外のエンドポイント は例外を発生させます。ループバック host (localhost、127.0.0.0/8、::1) は対象外のため、ローカルの http://localhost モデル server はそのまま動作します。リモート host で平文の http:// エンドポイント を許可するには、ai_function_allow_insecure_endpoint を 1 に設定します。この check は remote_url_allow_hosts とは独立しています。この設定は host の allowlist であり、URL スキームは検査しないため、許可された host を指す http:// エンドポイント は引き続き許可されます。
いずれの場合も、プロバイダー は TLS 終端後の入力データを平文で受け取る点に注意してください。TLS が保護するのは、server と プロバイダー の間のネットワーク経路上のデータのみです。
サポートされているプロバイダー
オブザーバビリティ
これらのイベントをクエリします。
aiClassify
credentials キーから取得されるか、その map で省略されている場合は ai_function_text_default_credentials 設定から取得されます。
構文
AIClassify
引数
text— 分類するテキスト。Stringcategories— 候補となるカテゴリラベルの定数リスト。Array(String)params— オプションの定数Map(String, String)パラメータ。関数固有のキー:temperature(ランダム性を制御するサンプリング温度。デフォルト0.0)、max_tokens(1 回の呼び出しあたりの最大出力トークン数。デフォルト1024)。共通パラメータcredentialsとmodelも適用されます (AI 関数 を参照)。Map(String, String)
ai_function_throw_on_error が無効になっている場合はカラム型のデフォルト値 (空文字列) 。String
例
感情を分類
Query
Response
Query
aiEmbed
Array(Float32) として返します。
1つの block 内の行については、呼び出しごとのオーバーヘッドを減らすため、入力は
1回の HTTP リクエスト あたり最大
ai_function_embedding_max_batch_size
エントリの batches にグループ化されます。
認証情報 (プロバイダー、エンドポイント、必要に応じて API key を指定する 名前付きコレクション)
は、パラメータマップ の credentials キーから取得されるか、
map で省略されている場合は ai_function_embedding_default_credentials 設定から取得されます。aiEmbed では
テキスト関数とは別のデフォルト認証情報設定が使われる点に注意してください。これは、埋め込み用エンドポイントが
chat エンドポイント とは異なるためです。
model は必須の位置引数 (定数の String) です。テキスト関数とは異なり、
aiEmbed は 名前付きコレクション や パラメータマップ から model を読み取りません。model を定義する 名前付きコレクション は、
拒否されます。
オプションの dimensions パラメータ は、モデルが対応している場合 (たとえば OpenAI’s text-embedding-3-*) 、
指定したサイズのベクトルを要求します。対応していない場合は、モデル本来のサイズが返されます。
構文
AIEmbed
引数
text— 埋め込み対象のテキスト。Stringmodel— 埋め込みモデル名。const Stringparams— 省略可能な定数Map(String, String)パラメータ。関数固有のキー:dimensions(出力ベクトルの目標次元数。0または省略時はモデルのネイティブのサイズを意味します) 。共通パラメータcredentialsも使用できます (AI 関数 を参照) 。Map(String, String)
ai_function_throw_on_error が無効になっている場合、あるいは ai_function_throw_on_quota_exceeded が無効になっている状態でクォータを超過した場合は、空の配列を返します。Array(Float32)
例
単一の文字列を埋め込む (ai_function_embedding_default_credentials が設定されている場合、credentials は省略できます)
Query
Query
Query
aiExtract
'主な訴え') または
'{"field_a": "field a の説明", "field_b": "field b の説明"}' の形式の JSON エンコードされたスキーマを指定できます。
指示モードでは、この関数は抽出した値をプレーンな文字列として返し、何も見つからなかった場合は空文字列を返します。
スキーマモードでは、この関数は要求されたスキーマに対応するキーを持つ JSON オブジェクト文字列を返します。存在しないフィールドは null になります。
認証情報 (プロバイダー、model、エンドポイント、および必要に応じて API key を指定する 名前付きコレクション)
は、省略可能な パラメータマップ の credentials キーから取得されるか、
map で省略されている場合は ai_function_text_default_credentials setting から取得されます。
構文
AIExtract
引数
text— 情報を抽出するテキスト。Stringinstruction_or_schema— 自由形式の抽出指示、または抽出するフィールドを記述した定数の JSONオブジェクト。const Stringparams— オプションの定数Map(String, String)パラメーター。関数固有のキー:temperature(ランダム性を制御するサンプリング温度。デフォルト0.0)、max_tokens(1 回の呼び出しあたりの最大出力トークン数。デフォルト1024)。共通パラメーターであるcredentialsとmodelも適用されます (AI 関数 を参照)。Map(String, String)
ai_function_throw_on_error が無効になっている場合は、カラム型のデフォルト値 (空文字列) を返します。String
例
自由形式の指示
Query
Response
Query
aiFilter
WHERE、PREWHERE、JOIN ... ON で使用できるブール値 (UInt8) を返します。
この関数は、モデルに小文字の true または false のみで応答するよう求めます。失敗したリクエスト (ai_function_throw_on_error が無効な場合) および認識できない応答は 0 にマッピングされるため、行は除外されます。
警告: aiFilter の結果を無批判に信用しないでください。LLM ベースの述語は不正確であったり、一貫性を欠いたりする可能性があります。偽陽性や偽陰性が許容される場合にのみ使用してください。
認証情報 (provider、model、endpoint、および必要に応じて API key を指定する 名前付きコレクション) は、任意の パラメータマップ の credentials キーから取得されます。このキーが map で省略されている場合は、ai_function_text_default_credentials 設定から取得されます。
注: JOIN ... ON で aiFilter を使用すると、候補ペアごとに LLM が一度評価されるため、コストが高くなる可能性があります。
構文
AIFilter
引数
text— 評価対象のテキスト。Stringcondition— テキストが満たす必要がある、定数の自然言語条件。Stringparams— 任意の定数Map(String, String)型パラメータ。関数固有のキー:temperature(ランダム性を制御するサンプリング温度、デフォルトは0.0) 、max_tokens(呼び出しあたりの最大出力トークン数、デフォルトは1024) 。共通パラメータのcredentialsとmodelも適用されます (AI 関数を参照) 。Map(String, String)
1、それ以外の場合は 0。リクエストが失敗し、ai_function_throw_on_error が無効の場合は、デフォルト値 (0) を返します。UInt8
例
怒りを含むレビューをフィルタリングする
Query
Query
aiGenerate
credentials キーから取得されるか、
パラメータマップで省略されている場合は ai_function_text_default_credentials 設定から取得されます。
任意のパラメータマップでは、system_prompt (モデルの
動作 (例: tone、format、role) を導く指示) 、temperature、max_tokens、model も設定できます。system_prompt が
設定されていない場合のデフォルト値は次のとおりです: You are a helpful assistant. Provide a clear and concise response.
構文
AIGenerate
引数
prompt— モデルに送信する、ユーザーのプロンプトまたは質問。Stringparams— 省略可能な定数Map(String, String)パラメータ。関数固有のキーは次のとおりです:temperature(ランダム性を制御するサンプリング温度。デフォルトは0.7) 、max_tokens(1 回の呼び出しで生成できる最大トークン数。デフォルトは1024) 、system_prompt(モデルの振る舞いを導く定数のシステムレベル命令。デフォルトは汎用的なアシスタント用プロンプト) 。共通パラメータのcredentialsとmodelも利用できます (AI 関数 を参照) 。Map(String, String)
ai_function_throw_on_error が無効になっている場合は、カラム型のデフォルト値 (空文字列) が返されます。String
例
単純な質問
Query
Response
Query
Query
aiRedact
[REDACTED]、replacement
parameter で設定可能) に置き換えられます。categories Array は、マスキングする PII の種類を制限します。空の Array を指定した場合は、
一般的なカテゴリ (名前、メールアドレス、電話番号、住所、クレジットカード、IP アドレス) からなるデフォルトのセットにフォールバックします。
aiRedact は、検出された PII span のみを変更するようモデルに指示しますが、周囲のテキストの保持は
ベストエフォートであり、モデルが変更する可能性があります (上記の警告を参照) 。タブ、
改行、復帰以外の制御文字もリクエスト前にスペースへ正規化されるため、これらを含む入力では出力が
バイト単位で同一にはなりません。
aiRedact は PII を置き換えた入力テキスト全体を返すため、出力は入力とほぼ同じ長さになります。
max_tokens (デフォルトは 1024) を、トークン単位の入力長より大きく設定してください。上限が低すぎて切り詰められた応答は
不完全になります。
構文
AIRedact
引数
text— マスキング対象のテキスト。Stringcategories— マスキングする PII カテゴリの定数リスト (例:['name', 'ssn', 'credit_card']) 。空の配列を指定すると、一般的なカテゴリ (名前、メールアドレス、電話番号、住所、クレジットカード、IP アドレス) のデフォルトセットが使用されます。Array(String)params— 任意の定数Map(String, String)パラメータ。関数固有のキー:temperature(ランダム性を制御するサンプリング温度、デフォルト0.0) 、max_tokens(呼び出しごとの最大出力トークン数、デフォルト1024—aiRedactはテキスト全体を返すため、入力のトークン数より大きい値に設定してください。そうしないと、応答が切り詰められて不完全になる可能性があります) 、replacement(検出された各 PII span を置き換えるトークン、デフォルト[REDACTED]) 。共通パラメータのcredentialsとmodelも適用されます (AI 関数を参照) 。Map(String, String)
ai_function_throw_on_error が無効の場合は、カラム型のデフォルト値 (空文字列) 。String
例
特定のカテゴリをマスキングする
Query
Response
Query
aiSimilarity
-1 のスコアは
反対方向の埋め込みベクトルに与えられ、意味的には、スコアが -1 に近いテキストは意味が反対であることを示します。
0 のスコアはベクトルが直交している、つまり意味的に無関係であることを示します。最後に、1 のスコアは
埋め込みベクトルが同じ方向を向いていることを意味し、スコアが 1 に近いテキストは
意味が類似しています。これは、同じ埋め込みに対する cosineDistance の補数です
(aiSimilarity = 1 - cosineDistance(embedding1, embedding2)) 。
バッチ処理、認証情報、dimensions パラメータは aiEmbed と同じであり、
ai_function_embedding_default_credentials のデフォルト認証情報設定も含まれます。
aiEmbed と同様に、model は必須の位置引数 (定数の String) であり、名前付きコレクションや
パラメータマップからは読み取られません。
構文
AISimilarity
引数
text1— 1つ目のテキスト。Stringtext2— 2つ目のテキスト。Stringmodel— 埋め込みモデル名。const Stringparams— 任意の定数Map(String, String)型パラメータ。関数固有のキー:dimensions(埋め込みの目標次元数。0または省略した場合はモデル本来の次元数) 。共通パラメータcredentialsも適用されます (AI 関数を参照) 。Map(String, String)
[-1, 1] のコサイン類似度。いずれかのテキストが NULL または空の場合、埋め込みリクエストが失敗し ai_function_throw_on_error が無効な場合、または ai_function_throw_on_quota_exceeded が無効な状態でクォータを超過した場合は NULL。Nullable(Float32)
例
2つの文字列を比較 (ai_function_embedding_default_credentials 設定が指定されている場合、credentials は省略できます)
Query
Query
Query
aiTranslate
instructions キーで渡すことができます (例: '技術用語は翻訳しない') 。
認証情報 (provider、model、endpoint、および必要に応じて API key を指定する 名前付きコレクション)
は、省略可能なパラメータマップの credentials キーから取得され、マップでこれが省略されている場合は
ai_function_text_default_credentials 設定から取得されます。
構文
AITranslate
引数
text— 翻訳するテキスト。Stringtarget_language— 対象言語名または BCP-47 コード (例:'French','es-MX') 。Stringparams— 省略可能な定数Map(String, String)パラメータ。関数固有のキー:temperature(ランダム性を制御するサンプリング温度。デフォルトは0.3) 、max_tokens(1 回の呼び出しで生成される出力トークンの最大数。デフォルトは1024) 、instructions(翻訳向けの追加のスタイルまたは方言に関する指示) 。共通パラメータのcredentialsとmodelも使用できます (AI 関数 を参照) 。Map(String, String)
ai_function_throw_on_error が無効な場合は、カラム型のデフォルト値 (空文字列) を返します。 String
例
フランス語に翻訳
Query
Response
Query