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_max_retries) ,并采用指数退避 (ai_function_retry_initial_delay_ms) 。
配置
aiGenerate、aiClassify、aiExtract、aiTranslate) 定义一个命名集合,而为 aiEmbed 函数定义另一个,因为它们需要不同的端点,通常也会使用不同的模型。
以下是创建包含提供商凭据的命名集合的示例语句:一个用于聊天端点,另一个用于 embedding 端点:
命名集合参数
将
provider 设为 'openai',并把 endpoint 指向你的服务,即可使用任何与 OpenAI 兼容的 API (例如 vLLM、Ollama、LiteLLM) 。选择凭据
- 参数映射中的
credentials键 (如果存在) ; - 否则,使用适用的默认凭据设置:
- 文本函数 (
aiGenerate、aiClassify、aiExtract、aiTranslate) 使用ai_function_text_default_credentials; aiEmbed使用ai_function_embedding_default_credentials。
- 文本函数 (
参数映射
Map(String, String) 参数映射。所有值都必须是字符串 (数字也要加引号,例如 '0.2') 。未知键会被拒绝。已提供的键会覆盖对应的命名集合值;未提供的键则回退到命名集合 (对于 model/max_tokens) 或内置默认值。例外情况是 aiEmbed,它将 model 作为必需的位置参数 (aiEmbed(text, model[, params])) 传入;如果改为在参数映射或命名集合中设置,则会报错。
以下参数是所有 AI 函数通用的:
各个函数还接受额外的函数专用参数 (例如
max_tokens、temperature、system_prompt、instructions 和 dimensions) 。有关每个函数支持的参数及其默认值,请参阅下方各函数的参考说明。
查询级别设置
ai_function_。
限制端点主机
endpoint URL 是服务器以自身身份连接的出站目标端,并可能 (如果已指定) 在请求头中携带该命名集合的 api_key。默认情况下,ClickHouse 允许连接任意主机。要将函数限制为一组特定的提供商,请在服务器配置中设置 remote_url_allow_hosts,例如:
传输安全 (HTTP 与 HTTPS)
endpoint URL 的 scheme 决定。请求载荷本身没有应用层加密;传输中数据的保护完全取决于所使用的 scheme:
https://— 连接使用 TLS。请求体 (输入文本、提示词) 以及请求头中的api_key都会在传输过程中加密,并且会验证提供商的证书。对于任何远程提供商,都应使用此方式。http://— 连接不加密。请求体和api_key会以明文发送。仅应在私网中的可信提供商上使用此方式 (例如本地的vLLM或Ollama实例) 。
http:// 端点会被接受,并以未加密方式发送数据。目前还没有会拒绝明文 AI 端点的服务端设置——remote_url_allow_hosts 仅限制目标 host,不会检查 URL scheme,因此指向允许 host 的 http:// 端点仍然可以通过。要确保传输加密,请将 命名集合 配置为使用 https:// 端点。
请注意,无论哪种情况,TLS 终止后提供商都会以明文接收输入数据;TLS 仅保护 服务器 与提供商之间网络路径上的数据。
支持的提供商
可观测性
查询这些事件:
aiClassify
{"category": "..."} 形式的 JSON
对象返回时,会提取其中的标签并返回该标签字符串。
凭据 (一个用于指定提供商、模型、端点,以及可选的 API 密钥的命名集合)
取自可选参数映射中的 credentials 键,或者在该映射省略此项时,
取自 ai_function_text_default_credentials 设置。
语法
AIClassify
参数
text— 待分类的文本。Stringcategories— 候选类别标签的常量列表。Array(String)params— 可选的常量Map(String, String)参数映射。函数特定键包括:temperature(用于控制随机性的采样温度;默认值0.0) 、max_tokens(每次调用的最大输出标记数;默认值1024) 。通用参数credentials和model同样适用 (参见 AI 函数) 。Map(String, String)
ai_function_throw_on_error,则返回该列类型的默认值 (空字符串) 。String
示例
情感分类
Query
Response
Query
aiEmbed
Array(Float32) 形式返回结果向量。
在单个数据块内,输入会按批次分组,每个 HTTP 请求最多包含
ai_function_embedding_max_batch_size
个条目,以减少每次调用的额外开销。
凭据 (一个指定提供商、端点以及可选 API key 的命名集合)
取自参数映射中的 credentials 键;如果映射中省略了该键,则使用
ai_function_embedding_default_credentials 设置。请注意,aiEmbed 使用的是一个
独立于文本函数的默认凭据设置,因为嵌入端点与聊天端点不同。
model 是必需的位置参数 (一个常量 String) 。与文本函数不同,
aiEmbed 不会从命名集合或参数映射中读取 model。如果某个命名集合
定义了 model,则会被拒绝,而不会被静默忽略。
可选的 dimensions 参数在模型支持时 (例如 OpenAI’s text-embedding-3-*)
会请求返回指定大小的向量;否则将返回该模型的原生大小。
语法
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
'主要诉求') ,也可以是如下形式的 JSON 编码 schema:'{"field_a": "字段 a 的描述", "field_b": "字段 b 的描述"}'。
在指令模式下,该函数会将提取出的值作为普通字符串返回;如果未找到任何内容,则返回空字符串。
在 schema 模式下,该函数返回一个 JSON 对象字符串,其键与所请求的 schema 一致;缺失字段为 null。
凭据 (用于指定提供商、模型、端点以及可选 API 密钥的命名集合)
取自可选参数映射中的 credentials 键;如果映射中未提供,
则取自 ai_function_text_default_credentials 设置。
语法
AIExtract
参数
text— 要从中提取信息的文本。Stringinstruction_or_schema— 自由格式的提取指令,或用于描述待提取字段的常量 JSON 对象。const Stringparams— 可选的常量Map(String, String)参数映射。函数特定键包括:temperature(用于控制随机性的采样温度;默认值0.0) ,max_tokens(每次调用的最大输出标记数;默认值1024) 。通用参数credentials和model也适用 (参见 AI Functions) 。Map(String, String)
ai_function_throw_on_error,则返回该列类型的默认值 (空字符串) 。String
示例
自由格式指令
Query
Response
Query
aiGenerate
credentials 键;如果该映射中未提供,则取自
ai_function_text_default_credentials 设置。
可选参数映射还可设置 system_prompt (用于引导模型行为的指令,
例如语气、格式、角色) 、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(每次调用可生成的最大输出标记数;默认值为1024) 、system_prompt(用于引导模型行为的常量系统级指令;默认值为通用助手提示词) 。通用参数credentials和model也同样适用 (参见 AI 函数) 。Map(String, String)
ai_function_throw_on_error 被禁用,则返回该列类型的默认值 (空字符串) 。String
示例
简单问题
Query
Response
Query
Query
aiTranslate
instructions 键传入额外的风格或语言变体说明 (例如:'保留技术术语不翻译') 。
凭据 (一个命名集合,用于指定提供商、模型、端点,以及可选的 API 密钥)
取自可选参数映射中的 credentials 键;如果该映射中未提供此项,
则取自 ai_function_text_default_credentials 设置。
语法
AITranslate
参数
text— 要翻译的文本。Stringtarget_language— 目标语言名称或 BCP-47 代码 (例如'French'、'es-MX') 。Stringparams— 可选的常量Map(String, String)参数映射。此函数特有的键包括:temperature(控制随机性的采样温度;默认值为0.3) 、max_tokens(每次调用可生成的最大输出标记数;默认值为1024) 、instructions(给翻译器的附加风格或方言说明) 。通用参数credentials和model同样适用 (参见 AI 函数) 。Map(String, String)
ai_function_throw_on_error 被禁用,则返回列类型的默认值 (空字符串) 。String
示例
翻译成法语
Query
Response
Query