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) 。
配置
ai_function_credentials 设置。
用于创建包含提供商凭据的命名集合的示例语句:
ai_function_credentials 设置为当前会话或单次查询选择该集合:
ai_function_credentials 为空 (默认值) 时,会引发异常。
命名集合参数
| 参数 | 类型 | 默认值 | 描述 |
|---|---|---|---|
provider | String | — | 模型提供商。支持:'openai'、'anthropic'。请参见下方说明。 |
endpoint | String | — | API 端点 URL。 |
model | String | — | 模型名称 (例如 'gpt-4o-mini'、'text-embedding-3-small') 。 |
api_key | String | — | 提供商的身份验证密钥。可选:省略时不会发送身份验证请求头,因此可以将目标指向不需要身份验证的 OpenAI 兼容服务器。 |
max_tokens | UInt64 | 1024 | 每次 API 调用可输出的最大标记数。 |
api_version | String | — | API 版本字符串。Anthropic 使用此参数 ('2023-06-01') 。 |
将
provider 设为 'openai',并把 endpoint 指向你的服务,即可使用任何与 OpenAI 兼容的 API (例如 vLLM、Ollama、LiteLLM) 。查询级别设置
ai_function_credentials 设置决定。所有与 AI 相关的设置均列在 设置 中,前缀为 ai_function_。
在 DEFAULT 和 MATERIALIZED 列中使用
ai_function_credentials 设置,而不是在定义列时读取。collection 名称不会存储在列定义中:
allow_experimental_ai_functions 和 ai_function_credentials,并且执行求值的用户必须拥有该命名集合上的 GRANT NAMED COLLECTION 权限 (解析凭证时会执行一次 NAMED COLLECTION 访问检查) 。缺少其中任何一项都会引发异常 (SUPPORT_IS_DISABLED、空凭证错误或 ACCESS_DENIED) 。
DEFAULT 列会在 INSERT 时求值,因此这两个设置都必须在执行插入的会话或查询中设置:
MATERIALIZED 列会像 DEFAULT 列一样在 INSERT 时计算,也会因 ALTER TABLE ... MATERIALIZE COLUMN 之类的变更而重新计算。变更在用户会话之外运行,不会继承某个查询的 SETTINGS 子句,但会继承 settings profile 中的设置。要让由变更触发的重新计算成功完成,请在 settings profile 中同时设置这两个参数,并向表所有者授予 NAMED COLLECTION。
限制端点主机
endpoint URL 是服务器以自身身份连接的出站目标端,并可能 (如果已指定) 在请求头中携带该命名集合的 api_key。默认情况下,ClickHouse 允许连接任意主机。要将函数限制为一组特定的提供商,请在服务器配置中设置 remote_url_allow_hosts,例如:
支持的提供商
| 提供商 | provider 值 | 聊天功能 | 说明 |
|---|---|---|---|
| OpenAI | 'openai' | 是 | 默认提供商。 |
| Anthropic | 'anthropic' | 是 | 使用 /v1/messages 端点。 |
可观测性
| ProfileEvent | Description |
|---|---|
AIAPICalls | 向 AI 提供商发出的 HTTP 请求数。 |
AIInputTokens | 消耗的输入标记总数。 |
AIOutputTokens | 消耗的输出标记总数。 |
AIRowsProcessed | 获得结果的行数。 |
AIRowsSkipped | 被跳过的行数 (超出配额,或在 ai_function_throw_on_error = 0 时发生错误) 。 |
aiClassify
{"category": "..."} 形式的 JSON
对象返回时,会提取其中的标签并返回该标签字符串。
提供商凭据和配置取自 ai_function_credentials 设置指定的命名集合。
语法
AIClassify
参数
text— 待分类的文本。Stringcategories— 候选类别标签的常量列表。Array(String)temperature— 用于控制随机性的采样温度。默认值:0.0。Float64
ai_function_throw_on_error,则返回该列类型的默认值 (空字符串) 。String
示例
情感分类
Query
Response
Query
Response
aiEmbed
Array(Float32) 的形式返回结果向量。
在单个数据块的行内,输入会按批次分组,每个 HTTP 请求最多包含
ai_function_embedding_max_batch_size
个条目,以减少每次调用的额外开销。
提供商凭据和配置取自 ai_function_credentials 设置指定的命名集合。
可选的 dimensions 参数会在模型支持时 (例如 OpenAI 的 text-embedding-3-*)
请求返回指定大小的向量;否则将返回模型的原生大小。
语法
ai_function_throw_on_error,或者超出配额且禁用了 ai_function_throw_on_quota_exceeded,则返回空数组。Array(Float32)
示例
嵌入单个字符串
Query
Response
Query
Response
Query
Response
aiExtract
'主要诉求') ,也可以是如下形式的 JSON 编码 schema:'{"field_a": "字段 a 的描述", "field_b": "字段 b 的描述"}'。
在指令模式下,该函数会将提取出的值作为普通字符串返回;如果未找到任何内容,则返回空字符串。
在 schema 模式下,该函数返回一个 JSON 对象字符串,其键与所请求的 schema 一致;缺失字段为 null。
提供商凭据和配置取自 ai_function_credentials setting 指定的命名集合。
语法
AIExtract
参数
text— 要从中提取信息的文本。Stringinstruction_or_schema— 自由格式的提取指令,或用于描述待提取字段的常量 JSON 对象。const Stringtemperature— 用于控制随机性的采样温度。默认值:0.0。const Float64
ai_function_throw_on_error,则返回该列类型的默认值 (空字符串) 。String
示例
自由格式指令
Query
Response
Query
Response
aiGenerate
You are a helpful assistant. Provide a clear and concise response.
提供商凭据和配置取自 ai_function_credentials 设置指定的命名集合。
语法
AIGenerate
参数
prompt— 发送给模型的用户提示词或问题。Stringsystem_prompt— 可选的固定系统级指令,用于引导模型行为 (例如角色设定、输出格式) ,并会随每次提示词一同发送。Stringtemperature— 控制随机性的采样温度。默认:0.7。Float64
ai_function_throw_on_error,则返回列类型的默认值 (空字符串) 。String
示例
简单问题
Query
Response
Query
Response
Query
Response
aiTranslate
'保留技术术语不翻译') 。
提供商凭据和配置取自由 ai_function_credentials 设置指定的命名集合。
语法
AITranslate
参数
text— 要翻译的文本。Stringtarget_language— 目标语言名称或 BCP-47 代码 (例如'French'、'es-MX') 。Stringinstructions— 提供给翻译器的可选固定附加说明。Stringtemperature— 用于控制随机性的采样温度。默认值:0.3。Float64
ai_function_throw_on_error,则返回列类型的默认值 (空字符串) 。String
示例
翻译为法语
Query
Response
Query
Response