tencentdb_ai 的前提是您已经创建完成了大版本为 PostgreSQL 14 - 18 的实例。不同内核版本提供的插件版本不同,请以实例中 SELECT extversion FROM pg_extension WHERE extname = 'tencentdb_ai'; 的实际结果为准。本文以插件1.6版本为例介绍全部功能。tencentdb_ai 插件(1.6版本)会通过 CASCADE 关联创建 pgcrypto、vector(pgvector)、pgmq 三个插件,请知悉。tencentdb_superuser 权限。backend_type 区分模型后端,注册模型时指定。当前共支持三种后端:后端 | 认证方式 | 状态 | 说明 |
tokenhub | Bearer api_key | 推荐使用 | 大模型服务平台 TokenHub,OpenAI 兼容协议。支持对话(ChatCompletions)与文本向量化(GetEmbedding)两类接口。 |
hunyuan | SecretId/SecretKey(TC3 签名) | 已弃用 | |
lkeap | SecretId/SecretKey(TC3 签名) | 已弃用 | 知识引擎原子能力旧接入方式(deepseek-v3、lke-text-embedding-v1、lke-reranker-base 等)。存量实例可继续使用,新实例请使用 tokenhub,迁移方法请参见 tencentdb_ai 模型后端迁移指南。 |
update_model_attr 配置模型级 api_key(加密存储),无需配置 SecretId/SecretKey。tencentdb_ai.http_timeout 调整 HTTP 超时。类别 | 支持情况 |
对话模型 | 支持 TokenHub 平台的语言模型与多模态理解模型(限纯文本对话),如 hy3、glm-5.2、deepseek-v4-flash、deepseek-v4-pro、glm-5v-turbo 等,完整列表请参见 TokenHub 模型列表。 |
向量模型 | kinfra-text-embedding-0.6b(1024维)、kinfra-text-embedding-4b(2560维)。 |
不支持 | 多模态向量模型(kinfra-vl-embedding-2b / 8b,调用协议与文本向量模型不同)、rerank 类模型(TokenHub 未提供)、图像 / 视频 / 3D / 语音生成类模型(插件无对应接口)。 |
add_model 函数定义如下:tencentdb_ai.add_model(p_model_name NAME,p_version TEXT,p_region TEXT,p_json_path JSONPATH,p_backend_type TEXT DEFAULT 'hunyuan',p_real_model_name NAME DEFAULT NULL);
hy3、glm-5.2、kinfra-text-embedding-0.6b 等。version,如该模型不需要 version 参数则可以不填写(tokenhub 后端不需要)。region,如该模型不需要 region 参数则可以不填写(tokenhub 后端不需要)。JSON 响应进行提取,相当于对模型输出调用 jsonb_path_query_first 函数。如果不指定该参数,默认原样输出模型的原始响应。tokenhub 聊天模型建议设为 '$.choices[0].message.content';通过 get_embedding 调用的 embedding 模型(不限后端)必须设为 NULL,否则 call_model 会先按 json_path 提取响应,get_embedding 将无法解析。tokenhub、hunyuan、lkeap。embedding_dim)不是 add_model 的参数。该维度契约供 autoembedding 使用,可由 tencentdb_superuser 执行 UPDATE tencentdb_ai.model_list SET embedding_dim = <维度> WHERE model_name = '<模型名>'; 设置,或在注册 autoembedding 任务时通过 options.vector_dim 指定。list_models 函数定义如下:tencentdb_ai.list_models(void);
tencentdb_ai.model_list 集合,包含 model_name、json_path、backend_type、real_model_name、embedding_dim、version、region 等列。SecretId/SecretKey/api_key 加密存储,id_random、key_random、api_key_random 为加密随机数,无需关注。update_model_attr 函数定义如下:tencentdb_ai.update_model_attr(model_name NAME,attr_name TEXT,attr_value TEXT);
version、region、json_path、SecretId、SecretKey、api_key、backend_type、real_model_name。其中 SecretId、SecretKey、api_key 会加密后存储。model_name、id_random、key_random、api_key_random 不允许修改。delete_model 函数定义如下:tencentdb_ai.delete_model(model_name NAME);
call_model 函数定义如下:tencentdb_ai.call_model(model_name NAME,common_params TEXT[],api_params TEXT[]);
ARRAY['Action: ChatCompletions', 'Version: 2023-09-01']。tokenhub 后端聊天传空数组,向量化传 ARRAY['Action: GetEmbedding'],其余 Action 不支持。ARRAY['"model": "glm-5.2"', '"messages": [{"role": "user", "content": "您好"}]', '"stream": false'],注意 "model" 字段需自行传入,call_model 不会自动补充。call_model 是模型调用的最底层函数,下文的固定场景接口均基于它封装(chat_completions 等会自动补充 "model" 字段)。推荐使用固定场景接口进行模型调用,仅在没有合适的场景接口时才直接使用 call_model。postgres=> SELECT tencentdb_ai.call_model('glm-5.2', ARRAY[]::TEXT[],ARRAY['"model": "glm-5.2"', '"messages": [{"role": "user", "content": "用一句话介绍 PostgreSQL"}]', '"stream": false']);raw_response-----------------------------------------------------------------------------------------------------------------------------------"PostgreSQL 是一款功能强大的开源对象关系型数据库,以其卓越的稳定性、高度的可扩展性以及对复杂查询和丰富数据类型的完美支持而闻名。"(1 row)
chat_completions 函数定义如下:tencentdb_ai.chat_completions(model_name NAME,content TEXT,args TEXT[] DEFAULT NULL);
postgres=> SELECT tencentdb_ai.chat_completions('glm-5.2', '你好,请用一句话介绍你自己');glm_answer----------------------------------------------------------------------------------------------------------"我是Z.ai训练的GLM大语言模型,能够回答问题、提供信息并与用户进行各类对话交流。"(1 row)
'$.choices[0].message.content'),返回值为提取后的 JSON 字符串文本(两侧带双引号);json_path 为 NULL 时返回模型原始响应。get_embedding 函数定义如下:tencentdb_ai.get_embedding(model_name NAME,content TEXT[]);
SETOF FLOAT8[][],每个输入对应一行向量。postgres=> SELECT array_length(e, 1) AS dim FROM tencentdb_ai.get_embedding('kinfra-text-embedding-0.6b', ARRAY['PostgreSQL 是一个开源关系型数据库']) AS e;dim------1024(1 row)
run_rerank 函数定义如下:tencentdb_ai.run_rerank(model_name NAME,query TEXT,documents TEXT[],args TEXT[] DEFAULT NULL);
run_rerank 仅支持 lkeap 后端模型(如 lke-reranker-base)。lkeap 后端已弃用;tokenhub 后端仅支持 ChatCompletions 与 GetEmbedding 两类接口,调用其他 Action 会被拒绝。image_to_text 函数定义如下:tencentdb_ai.image_to_text(model_name NAME,query TEXT,image TEXT,args TEXT[] DEFAULT NULL);
image_to_text 按 hunyuan 后端的多模态报文格式构造请求,仅支持 hunyuan 后端的视觉模型。hunyuan 后端已弃用;tokenhub 后端暂不支持该接口(会返回网关参数错误)。sentiment、summarize 函数定义如下:tencentdb_ai.sentiment(model_name NAME,content TEXT,args TEXT[] DEFAULT NULL);tencentdb_ai.summarize(model_name NAME,content TEXT,args TEXT[] DEFAULT NULL);
sentiment 以一词返回情感倾向(positive / negative / neutral / mixed),summarize 返回文本摘要。调用示例:postgres=> SELECT tencentdb_ai.sentiment('hy3', '今天天气真好,我特别开心');sentiment------------"positive"(1 row)postgres=> SELECT tencentdb_ai.summarize('hy3', 'PostgreSQL 是一个功能强大的开源对象关系数据库系统,拥有超过30年的开发历史,在可靠性、功能稳健性和性能方面赢得了良好声誉。');summarize----------------------------------------------------------------------------------------------------------"PostgreSQL 是一款开源的对象关系型数据库系统,有 30 多年开发历史,以可靠性、功能稳健和性能优异著称。"(1 row)
generate_text、generate_int、generate_double、generate_boolean 函数定义如下:tencentdb_ai.generate_text(model_name NAME, prompt TEXT, args TEXT[] DEFAULT NULL);tencentdb_ai.generate_int(model_name NAME, prompt TEXT, args TEXT[] DEFAULT NULL);tencentdb_ai.generate_double(model_name NAME, prompt TEXT, args TEXT[] DEFAULT NULL);tencentdb_ai.generate_boolean(model_name NAME, prompt TEXT, args TEXT[] DEFAULT NULL);
postgres=> SELECT tencentdb_ai.generate_int('hy3', '一百二十三加四百五十六等于多少');gen_int---------"579"(1 row)postgres=> SELECT tencentdb_ai.generate_boolean('hy3', 'PostgreSQL 是关系型数据库吗');gen_bool----------"true"(1 row)
generate_query 自动收集当前库的 schema 信息作为上下文,调用大模型生成 SQL。generate_query 函数定义如下:tencentdb_ai.generate_query(model_name NAME,nl_query TEXT,args TEXT[] DEFAULT NULL);
postgres=> SELECT tencentdb_ai.generate_query('hy3', '查询 users 表中年龄最大的用户姓名');nl2sql---------------------------------------------------------------SELECT u.name FROM public.users u ORDER BY u.age DESC LIMIT 1(1 row)
LIMIT 1000 保护(除非显式要求全量),并禁止访问 information_schema 与 pg_catalog。generate_query 内部使用,也可单独调用做 schema 探查):tencentdb_ai.get_database_tables():列出所有用户表及估算行数。tencentdb_ai.get_table_details(p_table_name TEXT, p_schema_name TEXT DEFAULT 'public'):返回表字段、类型、约束、主外键等信息。tencentdb_ai.get_table_indexes(p_table_name TEXT, p_schema_name TEXT DEFAULT 'public'):返回表的索引定义。tencentdb_ai.retrieve 与 tencentdb_ai.rag。详细说明请参见 tencentdb_ai RAG。postgres=> CREATE EXTENSION tencentdb_ai CASCADE;NOTICE: installing required extension "pgcrypto"NOTICE: installing required extension "vector"NOTICE: installing required extension "pgmq"CREATE EXTENSION
postgres=> SELECT tencentdb_ai.add_model('glm-5.2', NULL, NULL, '$.choices[0].message.content'::jsonpath, 'tokenhub');postgres=> SELECT tencentdb_ai.update_model_attr('glm-5.2', 'api_key', 'sk-********');postgres=> SELECT tencentdb_ai.add_model('kinfra-text-embedding-0.6b', NULL, NULL, NULL, 'tokenhub');postgres=> SELECT tencentdb_ai.update_model_attr('kinfra-text-embedding-0.6b', 'api_key', 'sk-********');
postgres=> SELECT tencentdb_ai.chat_completions('glm-5.2', '你好,请用一句话介绍你自己') AS answer;answer----------------------------------------------------------------------------------------------------------"我是Z.ai训练的GLM大语言模型,能够回答问题、提供信息并与用户进行各类对话交流。"(1 row)
get_embedding 返回 SETOF FLOAT8[][],每个输入文本对应一行向量。下面的示例统计返回向量的维度:postgres=> SELECT array_length(e, 1) AS dimFROM tencentdb_ai.get_embedding('kinfra-text-embedding-0.6b',ARRAY['PostgreSQL 是一个开源关系型数据库']) AS e;dim------1024(1 row)
vector 类型列,用于相似度检索、RAG 等场景。更多场景示例(RAG、自动向量列、NL2SQL 应用构建)请参见 使用 tencentdb_ai 调用大模型构建应用 与 tencentdb_ai RAG。文档反馈