云数据库 PostgreSQL AI Vibe Coding

这篇说说腾讯云 PostgreSQL 插件 tencentdb_ai 1.6 通过两种方式(直接注册混元模型或通过 TokenHub)注册嵌入模型实现自动向量化,并完整演示了从环境检查、模型注册、创建自动向量化任务到向量相似度检索的全流程操作与验证结果。 方式一(混元):使用 SecretId/SecretKey 认证,注册 hunyuan-embedding 模型,通过 INSERT/UPDATE 触发器自动为文本。

相关产品
云数据库 PostgreSQL 产品页,含版本规格、价格与购买入口。

注意:说明:

注意:环境:这篇所使用数据库版本为 PostgreSQL 17.10,插件为 tencentdb_ai 1.6。

一、概述

tencentdb_ai 1.6 支持两种方式注册嵌入模型来实现自动向量化:

 方式一:直接注册混元模型 方式二:通过 TokenHub 注册
认证方式 SecretId + SecretKey(TC3 签名) api_key(Bearer Token)
后端类型 backend_type = 'hunyuan' backend_type = 'tokenhub'
适用场景 已有混元模型的 SecretId/SecretKey 已迁移到 TokenHub 平台,统一 API Key 管理
模型示例 hunyuan-embedding(1024 维) kinfra-text-embedding-0.6b(1024 维)
是否需要申请凭证 需要混元密钥 需要 TokenHub API Key
当前环境实测 通过 通过

注意:环境预装的 auto 模型(backend_type=tokenhub)用于 ChatCompletions(LLM 对话),不支持 Embedding。如需使用 TokenHub 做自动向量化,须按方式二单独注册嵌入模型。

四、检查扩展是否可用

SELECT name, default_version, commentFROM pg_available_extensionsWHERE name IN ('tencentdb_ai', 'pgvector', 'pgmq', 'vector');

数据库原始返回:

name | default_version | installed_version | comment————–+—————–+——————-+—————————————————————- tencentdb_ai | 1.6 | | tencentdb_ai is an ai extension that allows your database to integrate AI capabilities, such as promt, embedding, etc. pgmq | 1.11.1 | | A lightweight message queue. Like AWS SQS and RSMQ but on Postgres. vector | 0.8.2 | | vector data type and ivfflat and hnsw access methods(3 rows)

结果说明:tencentdb_ai 1.6 / pgmq 1.11.1 / vector 0.8.2 均可用。

五、检查 shared_preload_libraries

SHOW shared_preload_libraries;

数据库原始返回:

shared_preload_libraries—————————————————————————————————————————————– pg_stat_statements,pg_stat_log,wal2json,decoderbufs,decoder_raw,pg_hint_plan,rds_server_handler,tencentdb_pwdcheck,auto_explain,pgaudit,tencentdb_ai(1 row)

结果说明:tencentdb_ai 已在 shared_preload_libraries 中,最后一个位置。

六、检查 autoembedding 相关 GUC 参数

SELECT name, setting, contextFROM pg_settingsWHERE name LIKE 'tencentdb_ai.autoembedding%'ORDER BY name;

数据库原始返回:

name | setting | context————————————————–+———-+——— tencentdb_ai.autoembedding_batch_size | 32 | sighup tencentdb_ai.autoembedding_database | postgres | sighup tencentdb_ai.autoembedding_max_input_bytes | 65536 | sighup tencentdb_ai.autoembedding_max_retry | 5 | sighup tencentdb_ai.autoembedding_naptime_ms | 5000 | sighup tencentdb_ai.autoembedding_retry_base_ms | 1000 | sighup tencentdb_ai.autoembedding_task_launch_jitter_ms | 10 | sighup tencentdb_ai.autoembedding_worker | on | sighup(8 rows)

结果说明:autoembedding_database = postgres,autoembedding_worker = on,全部默认值合理。

七、安装扩展

— 会自动安装 pgcrypto、vector、pgmqCREATE EXTENSION IF NOT EXISTS tencentdb_ai CASCADE;

数据库原始返回:

NOTICE: installing required extension "pgcrypto"NOTICE: installing required extension "vector"NOTICE: installing required extension "pgmq"WARNING: change unlogged table to logged table, If you want to use unlogged tables, please set tencentdb_log_unlogged_table to false.CREATE EXTENSION

结果说明:扩展安装成功,CASCADE 自动安装了 pgcrypto、vector、pgmq 三个依赖扩展。

八、检查 pgmq 队列

SELECT * FROM pgmq.list_queues();

数据库原始返回:

queue_name | is_partitioned | is_unlogged | created_at————————————-+—————-+————-+——————————- tencentdb_ai_autoembedding_incr | f | f | 2026-08-05 22:36:41.689961+08 tencentdb_ai_autoembedding_backfill | f | f | 2026-08-05 22:36:41.689961+08(2 rows)

结果说明:pgmq 自动创建了两个队列:tencentdb_ai_autoembedding_incr(增量)和 tencentdb_ai_autoembedding_backfill(存量)。

九、注册混元 Embedding 模型

注意:说明:

注意:这里填入 SecretId 和 SecretKey。

十、查看已注册模型

— 查看 model_list 表结构SELECT column_name, data_type FROM information_schema.columnsWHERE table_schema = 'tencentdb_ai' AND table_name = 'model_list'ORDER BY ordinal_position;– 查看已有模型SELECT * FROM tencentdb_ai.model_list;

数据库原始返回:

column_name | data_type—————–+———– model_name | name json_path | jsonpath secretid | bytea secretkey | bytea version | text region | text id_random | integer key_random | integer backend_type | text real_model_name | name api_key | bytea api_key_random | integer embedding_dim | integer(13 rows) model_name | json_path | secretid | secretkey | version | region | id_random | key_random | backend_type | real_model_name | api_key | api_key_random | embedding_dim————+————————————+———-+———–+———+——–+———–+————+————–+—————–+———+—————-+————— auto | $."choices"[0]."message"."content" | | | | | | | tokenhub | auto | | |(1 row)

结果说明:初始只有 auto 模型(tokenhub 后端,用于 ChatCompletions,非 Embedding)。需要注册混元嵌入专用模型。

十一、注册 hunyuan-embedding 模型

— 注册模型(最后一个参数 backend_type 默认值为 'hunyuan',可不传)SELECT tencentdb_ai.add_model('hunyuan-embedding', '2023-09-01', NULL, NULL);– 【在这里填入 SecretId】SELECT tencentdb_ai.update_model_attr( 'hunyuan-embedding', 'SecretId', '<你的SecretId>' — 替换为你的 SecretId);– 【在这里填入 SecretKey】SELECT tencentdb_ai.update_model_attr( 'hunyuan-embedding', 'SecretKey', '<你的SecretKey>' — 替换为你的 SecretKey);– 设置嵌入向量维度UPDATE tencentdb_ai.model_listSET embedding_dim = 1024WHERE model_name = 'hunyuan-embedding';– 验证模型配置SELECT model_name, backend_type, embedding_dimFROM tencentdb_ai.model_listWHERE model_name = 'hunyuan-embedding';

数据库原始返回:

add_model———–(1 row) update_model_attr——————-(1 row) update_model_attr——————-(1 row)UPDATE 1 model_name | backend_type | embedding_dim——————-+————–+————— hunyuan-embedding | hunyuan | 1024(1 row)

结果说明:混元 embedding 模型注册成功,backend_type = hunyuan,embedding_dim = 1024。

十二、创建测试表和数据

— 建表(必须有单列主键)DROP TABLE IF EXISTS kb_articles CASCADE;CREATE TABLE kb_articles ( id bigserial PRIMARY KEY, title text, content text);– 插入测试数据INSERT INTO kb_articles (title, content) VALUES ('PostgreSQL 简介', 'PostgreSQL 是一个功能强大的开源对象关系数据库系统,经过30多年的积极开发,在可靠性、功能稳健性和性能方面赢得了良好的声誉。'), ('向量数据库', '向量数据库是一种专门用于存储和检索高维向量的数据库系统,通过向量相似度计算实现语义搜索、推荐系统和RAG等AI应用。'), ('RAG 技术', '检索增强生成(RAG)是一种结合检索和生成能力的 AI 技术,通过从知识库中检索相关信息来增强大语言模型的回答质量。');– 验证写入SELECT 'Test data inserted: ' || count(*)::text FROM kb_articles;

数据库原始返回:

NOTICE: table "kb_articles" does not exist, skippingDROP TABLECREATE TABLEINSERT 0 3 ?column?———————– Test data inserted: 3(1 row)

结果说明:表创建成功,3 行测试数据写入。

十三、创建自动向量化任务

— 5.1 创建增量任务– 自动创建 content_embedding vector(1024) 列– 自动创建 INSERT AFTER + UPDATE BEFORE 触发器SELECT tencentdb_ai.add_incr_autoembedding_task( 'public', 'kb_articles', ARRAY['content'], 'hunyuan-embedding') AS incr_task_id;– 5.2 创建存量任务(回填历史数据)SELECT tencentdb_ai.add_backfill_autoembedding_task( 'public', 'kb_articles', ARRAY['content'], 'hunyuan-embedding') AS backfill_task_id;

数据库原始返回:

incr_task_id————– 1(1 row) backfill_task_id—————— 1(1 row)

结果说明:增量和存量任务均创建成功,task_id 均为 1。

十五、查看表结构

\\d kb_articles

数据库原始返回:

Table "public.kb_articles" Column | Type | Collation | Nullable | Default——————-+————–+———–+———-+—————————————– id | bigint | | not null | nextval('kb_articles_id_seq'::regclass) title | text | | | content | text | | | content_embedding | vector(1024) | | |Indexes: "kb_articles_pkey" PRIMARY KEY, btree (id)Triggers: tencentdb_ai_autoemb_ins_1 AFTER INSERT ON kb_articles FOR EACH ROW EXECUTE FUNCTION tencentdb_ai._autoembedding_enqueue_trigger(…) tencentdb_ai_autoemb_upd_1 BEFORE UPDATE OF content ON kb_articles FOR EACH ROW EXECUTE FUNCTION tencentdb_ai._autoembedding_enqueue_trigger(…)

结果说明:add_incr_autoembedding_task 自动创建了 content_embedding vector(1024) 列和两个触发器。

十六、查看触发器详情

SELECT trigger_name, event_manipulation, action_statementFROM information_schema.triggersWHERE event_object_table = 'kb_articles';

数据库原始返回:

trigger_name | event_manipulation | action_statement—————————-+——————–+———————————————————————————————————————— tencentdb_ai_autoemb_ins_1 | INSERT | EXECUTE FUNCTION tencentdb_ai._autoembedding_enqueue_trigger('1', '17136', 'content_embedding', 'content', '{}', 'id') tencentdb_ai_autoemb_upd_1 | UPDATE | EXECUTE FUNCTION tencentdb_ai._autoembedding_enqueue_trigger('1', '17136', 'content_embedding', 'content', '{}', 'id')(2 rows)

结果说明:INSERT AFTER 触发器 + UPDATE BEFORE OF content 触发器均已生效。

十七、查看任务状态

SELECT task_kind, task_id, table_name, target_column, status, backfill_state, pending, failed_countFROM tencentdb_ai.autoembedding_statusORDER BY task_id;

数据库原始返回:

task_kind | task_id | table_name | target_column | status | backfill_state | pending | failed_count———–+———+————-+——————-+———+—————-+———+————– incr | 1 | kb_articles | content_embedding | enabled | | 0 | 0 backfill | 1 | kb_articles | content_embedding | | not_started | 0 | 0(2 rows)

结果说明:视图可正常查询。⚠️ 存量任务 backfill_state = not_started,未自动开始(见 Bug 章节)。

十八、查看增量任务详情

SELECT table_name, relid, status FROM tencentdb_ai.autoembedding_incr_task;

数据库原始返回:

table_name | relid | status————-+——-+——— kb_articles | 17136 | enabled(1 row)

结果说明:增量任务状态为 enabled,relid = 17136。

20、INSERT 触发

— 插入新数据(在增量任务创建之后再插入)INSERT INTO kb_articles (title, content) VALUES ('嵌入模型', '嵌入模型是将文本转换为向量表示的机器学习模型,常见的嵌入模型包括BERT、GPT和混元嵌入等。');

数据库原始返回:

INSERT 0 1

验证步骤:

— 立即查 pending(应看到 pending = 1,表示已入队)SELECT task_kind, pending FROM tencentdb_ai.autoembedding_status;

数据库原始返回:

task_kind | pending———–+——— incr | 1 backfill | 0(2 rows)

结果说明:INSERT 触发后 pending = 1,消息已入队。

— 等待后台 worker 处理SELECT pg_sleep(5);

数据库原始返回:

pg_sleep———-(1 row)

— 检查向量是否生成(注意:前3行在任务创建前已存在,不会自动回填)SELECT id, title, content_embedding IS NOT NULL AS has_embedding, CASE WHEN content_embedding IS NOT NULL THEN vector_dims(content_embedding) ELSE NULL END AS dimsFROM kb_articlesORDER BY id;

数据库原始返回:

id | title | has_embedding | dims—-+—————–+—————+—— 1 | PostgreSQL 简介 | f | 2 | 向量数据库 | f | 3 | RAG 技术 | f | 4 | 嵌入模型 | t |(4 rows)

结果说明:id=4(任务创建后 INSERT 的行)向量生成成功。id=1~3 因在任务创建前已存在,未被增量触发器捕获,需要存量回填。

21、再次 INSERT 验证持续入队

INSERT INTO kb_articles (title, content) VALUES ('混元大模型', '腾讯混元大模型是腾讯自研的通用大语言模型,具备强大的自然语言理解和生成能力。');

数据库原始返回:

INSERT 0 1

— 立即查 pendingSELECT task_kind, pending FROM tencentdb_ai.autoembedding_status;

数据库原始返回:

task_kind | pending———–+——— incr | 1 backfill | 0(2 rows)

第二次 INSERT 也成功入队。

SELECT pg_sleep(5);SELECT task_kind, pending, failed_count FROM tencentdb_ai.autoembedding_status;SELECT id, title, content_embedding IS NOT NULL AS has_embeddingFROM kb_articles ORDER BY id;– 错误表SELECT * FROM tencentdb_ai.autoembedding_error ORDER BY created_at DESC LIMIT 5;

数据库原始返回:

pg_sleep———-(1 row) task_kind | pending | failed_count———–+———+————– incr | 0 | 0 backfill | 0 | 0(2 rows) id | title | has_embedding—-+—————–+————— 1 | PostgreSQL 简介 | f 2 | 向量数据库 | f 3 | RAG 技术 | f 4 | 嵌入模型 | t 5 | 混元大模型 | t(5 rows) error_id | msg_id | task_kind | task_id | row_id | error_code | error_message | detail | created_at———-+——–+———–+———+——–+————+—————+——–+————(0 rows)

结果说明:id=4、5 的 INSERT 路径全部成功,pending = 0、failed_count = 0、无错误记录。id=1~3 仍为 null(因缺少存量回填)。

22、向量维度验证

SELECT id, title, vector_dims(content_embedding) AS dims, length(content_embedding::text) AS text_lenFROM kb_articlesWHERE content_embedding IS NOT NULL;

数据库原始返回:

id | title | dims | text_len—-+————+——+———- 4 | 嵌入模型 | 1024 | 12727 5 | 混元大模型 | 1024 | 12779(2 rows)

结果说明:向量均为 1024 维,与模型配置一致。

23、UPDATE 触发(同时绕过存量回填 Bug,为 id=1~3 生成向量)

— 更新已有行,即使内容不变也会触发 UPDATE 触发器UPDATE kb_articles SET content = content WHERE id IN (1,2,3);

数据库原始返回:

UPDATE 3

— 立即查 pending(应为 3)SELECT task_kind, pending FROM tencentdb_ai.autoembedding_status;

数据库原始返回:

task_kind | pending———–+——— incr | 3 backfill | 0(2 rows)

pending = 3,三行均已入队。

SELECT pg_sleep(5);– 全量验证SELECT id, title, content_embedding IS NOT NULL AS has_embeddingFROM kb_articles ORDER BY id;

数据库原始返回:

pg_sleep———-(1 row) id | title | has_embedding—-+—————–+————— 1 | PostgreSQL 简介 | t 2 | 向量数据库 | t 3 | RAG 技术 | t 4 | 嵌入模型 | t 5 | 混元大模型 | t(5 rows)

结果说明:UPDATE 触发路径正常工作,id=1~3 通过 UPDATE 成功生成向量。全部 5 行 has_embedding = t。

25、仅两行时的相似度

SELECT id, title, content_embedding <=> ( SELECT content_embedding FROM kb_articles WHERE id = 4 ) AS distanceFROM kb_articlesWHERE content_embedding IS NOT NULLORDER BY distance;

数据库原始返回:

id | title | distance—-+————+——————— 4 | 嵌入模型 | 0 5 | 混元大模型 | 0.28689392595353047(2 rows)

结果说明:「嵌入模型」到自身的余弦距离为 0,到「混元大模型」的距离约 0.287,两者语义相近(都关于 AI 模型),符合预期。

26、全量相似度检索

SELECT id, title, content_embedding <=> ( SELECT content_embedding FROM kb_articles WHERE id = 1 ) AS distanceFROM kb_articlesWHERE content_embedding IS NOT NULLORDER BY distance;

数据库原始返回:

id | title | distance—-+—————–+——————— 1 | PostgreSQL 简介 | 0 2 | 向量数据库 | 0.2789466068930575 3 | RAG 技术 | 0.3563481692751316 4 | 嵌入模型 | 0.3840361738420558 5 | 混元大模型 | 0.40611747180705204(5 rows)

结果说明:「PostgreSQL 简介」与「向量数据库」语义距离最近(0.279,都是数据库领域),与「混元大模型」最远(0.406),排序合理。

28、什么是 TokenHub

TokenHub 是腾讯云统一的 AI 模型网关平台,提供统一的 API Key 管理和计费。在 tencentdb_ai 1.6 版本中,TokenHub 已支持 Embedding 接口(此前仅支持 ChatCompletions)。

使用 TokenHub 的优势:

·统一凭证管理:一个 API Key 管理所有模型(聊天 + 嵌入),无需分别管理 SecretId/SecretKey。

·认证方式简单:Bearer Token 认证,直接传 api_key 即可。

29、TokenHub Embedding 模型全览

TokenHub 平台共提供 4 款 Embedding 模型,分为文本向量和多模态向量两大类。所有模型均兼容 OpenAI Embeddings API 格式,接口地址:

·文本向量:POST https://tokenhub.tencentmaas.com/v1/embeddings

·多模态向量:POST https://tokenhub.tencentmaas.com/v1/embeddings/multimodal

认证方式:Authorization: Bearer <api_key>

30、文本向量模型(Text Embedding)

属性 kinfra-text-embedding-0.6b kinfra-text-embedding-4b
参数量 0.6B(6 亿) 4B(40 亿)
输出维度 1024 维 2560 维
上下文长度 32k tokens 32k tokens
支持语言 30+ 种:中、英、日、韩、法、德、俄、葡、西等 同左
推荐场景 大规模文本召回、延迟敏感、成本敏感 高质量文本检索、深层语义理解
典型任务 语义检索、相似度计算、文本聚类、文本分类、FAQ 匹配、智能问答、知识库检索 同左,精度更高

CMTEB 评测对比(数值越高越好):

评测指标 0.6b 4b 提升
Mean(Task) 综合得分 66.64 72.63 +9.0%
检索(Retrieval) 71.01 77.02 +8.5%
聚类(Clustering) 68.60 78.15 +13.9%
语义相似度(STS) 54.88 61.41 +11.9%
分类(Classification) 71.46 75.55 +5.7%
重排(Reranking) 64.16 68.26 +6.4%

31、多模态向量模型(Multimodal Embedding)

支持文本(text)、图片(image_url)、视频(video_url)三种模态的向量化。

属性 kinfra-vl-embedding-2b kinfra-vl-embedding-8b
参数量 2B(20 亿) 8B(80 亿)
输出维度 2048 维 4096 维
上下文长度 32k tokens 32k tokens
支持模态 文本 + 图片 + 视频 文本 + 图片 + 视频
支持语言 30+ 种主流语言 同左
推荐场景 多模态在线检索、视频检索、响应速度优先 高精度多模态检索、精度优先
典型任务 图文检索、视频检索、多模态语义匹配、图文互搜 同左,精度更高

多模态评测对比(数值越高越好):

评测任务 2b 8b 提升
MSCOCO 图搜文 0.70 0.76 +8.6%
VisualNews 图搜文 0.60 0.67 +11.7%
WebQA 0.87 0.90 +3.4%
VisDial 0.69 0.87 +26.1%
图文检索 mean 0.698 0.795 +13.9%
MMEB-V2 综合 69.82 75.26 +7.8%

多模态输入限制:

限制项 说明
图片格式 JPEG、PNG、WEBP、BMP、TIFF
图片像素范围 4,096(~64×64)~ 1,843,200(~1280×1440)
视频格式 MP4、AVI、MOV
视频总像素上限 7,864,320
视频最大采样帧数 64 帧
视频默认 fps 1.0
向量归一化 默认 L2 归一化
编码格式 仅支持 float

32、选型速查:什么场景用什么模型

你的需求 推荐模型 理由
中文知识库 / FAQ 检索,成本敏感,高并发 kinfra-text-embedding-0.6b 1024 维,轻量快速
多语言检索,需要深层语义理解,精度要求高 kinfra-text-embedding-4b 2560 维,CMTEB 综合 72.63
图文互搜(按文字搜图片、按图片搜文字) kinfra-vl-embedding-2b 2048 维,响应速度快
视频检索、高精度多模态匹配 kinfra-vl-embedding-8b 4096 维,MMEB-V2 综合 75.26
纯文本 + 未来可能扩展多模态 先注册 -0.6b 或 -4b,后续加多模态模型 一个表可绑定一个模型,多表可混用

33、注册 TokenHub Embedding 模型

注意:说明:

注意:与方式一的关键区别:

34、查看 model_list 表结构

SELECT column_name, data_type FROM information_schema.columnsWHERE table_schema = 'tencentdb_ai' AND table_name = 'model_list'ORDER BY ordinal_position;

数据库原始返回:

column_name | data_type—————–+———– model_name | name json_path | jsonpath secretid | bytea secretkey | bytea version | text region | text id_random | integer key_random | integer backend_type | text real_model_name | name api_key | bytea api_key_random | integer embedding_dim | integer(13 rows)

结果说明:TokenHub 需要的 api_key 列(bytea 加密存储)、backend_type 列、real_model_name 列均存在。

35、注册文本向量模型

— ===== 文本向量模型注册模板 =====– 关键参数:第5个参数 p_backend_type 必须显式传 'tokenhub'(默认值是 'hunyuan')– 第6个参数 real_model_name 为 TokenHub 上的实际模型名– 根据实际需求选择以下一个即可– 模型 A:轻量文本向量(1024 维,成本低,速度快)– 场景:中文知识库检索、FAQ 匹配、文本聚类分类SELECT tencentdb_ai.add_model( 'my-text-embed-0.6b', — 模型别名(自定义) NULL, NULL, NULL, — version, region, json_path(不需要) 'tokenhub', — backend_type:必须显式指定为 'tokenhub' 'kinfra-text-embedding-0.6b' — real_model_name);SELECT tencentdb_ai.update_model_attr('my-text-embed-0.6b', 'api_key', 'sk-tp-你的APIKey');UPDATE tencentdb_ai.model_list SET embedding_dim = 1024 WHERE model_name = 'my-text-embed-0.6b';– 模型 B:高精度文本向量(2560 维,精度高)– 场景:多语言深度语义检索、跨语言匹配、高质量语义理解SELECT tencentdb_ai.add_model( 'my-text-embed-4b', — 模型别名(自定义) NULL, NULL, NULL, 'tokenhub', 'kinfra-text-embedding-4b');SELECT tencentdb_ai.update_model_attr('my-text-embed-4b', 'api_key', 'sk-tp-你的APIKey');UPDATE tencentdb_ai.model_list SET embedding_dim = 2560 WHERE model_name = 'my-text-embed-4b';

36、注册多模态向量模型

— ===== 多模态向量模型注册模板 =====– 多模态模型支持 text(文本)、image_url(图片)、video_url(视频)三种输入– 用于图文互搜、视频语义检索等场景– 模型 C:轻量多模态(2048 维,响应速度快)– 场景:图文互搜、在线多模态检索SELECT tencentdb_ai.add_model( 'my-vl-embed-2b', — 模型别名(自定义) NULL, NULL, NULL, 'tokenhub', 'kinfra-vl-embedding-2b' — VL = Vision-Language(视觉-语言));SELECT tencentdb_ai.update_model_attr('my-vl-embed-2b', 'api_key', 'sk-tp-你的APIKey');UPDATE tencentdb_ai.model_list SET embedding_dim = 2048 WHERE model_name = 'my-vl-embed-2b';– 模型 D:高精度多模态(4096 维,精度最高)– 场景:视频检索、高精度多模态语义匹配SELECT tencentdb_ai.add_model( 'my-vl-embed-8b', — 模型别名(自定义) NULL, NULL, NULL, 'tokenhub', 'kinfra-vl-embedding-8b');SELECT tencentdb_ai.update_model_attr('my-vl-embed-8b', 'api_key', 'sk-tp-你的APIKey');UPDATE tencentdb_ai.model_list SET embedding_dim = 4096 WHERE model_name = 'my-vl-embed-8b';

37、注册验证(以 0.6b 文本模型为例)

— 验证注册结果SELECT model_name, backend_type, real_model_name, embedding_dim FROM tencentdb_ai.model_list;

数据库原始返回(已注册 tokenhub-embedding,别名指向 kinfra-text-embedding-0.6b):

model_name | backend_type | real_model_name | embedding_dim———————+————–+—————————-+————— auto | tokenhub | | -1 hunyuan-embedding | hunyuan | | 1024 tokenhub-embedding | tokenhub | kinfra-text-embedding-0.6b | 1024(3 rows)

结果说明:TokenHub 嵌入模型注册成功:

·backend_type = tokenhub(与方式一的 hunyuan 明显不同)

·real_model_name = kinfra-text-embedding-0.6b(TokenHub 上的实际模型)

·embedding_dim = 1024

凭证获取方式:TokenHub 控制台 → API 密钥管理

四种模型注册速查:

模型别名(自定义) real_model_name embedding_dim 类型
my-text-embed-0.6b kinfra-text-embedding-0.6b 1024 轻量文本
my-text-embed-4b kinfra-text-embedding-4b 2560 高精度文本
my-vl-embed-2b kinfra-vl-embedding-2b 2048 轻量多模态
my-vl-embed-8b kinfra-vl-embedding-8b 4096 高精度多模态

39、建表并插入数据

DROP TABLE IF EXISTS kb_articles_tokenhub CASCADE;CREATE TABLE kb_articles_tokenhub ( id bigserial PRIMARY KEY, title text, content text);INSERT INTO kb_articles_tokenhub (title, content) VALUES ('PostgreSQL 简介', 'PostgreSQL 是一个功能强大的开源对象关系数据库系统,经过30多年的积极开发。'), ('向量数据库', '向量数据库是一种专门用于存储和检索高维向量的数据库系统。'), ('AI 技术趋势', '人工智能技术在2026年迎来了新的发展浪潮,多模态大模型成为主流。');

数据库原始返回:

DROP TABLECREATE TABLEINSERT 0 3

40、创建增量任务

— 注意:model_name 使用的是注册时的别名 'tokenhub-embedding'SELECT tencentdb_ai.add_incr_autoembedding_task( 'public', 'kb_articles_tokenhub', ARRAY['content'], 'tokenhub-embedding' — 使用 TokenHub 注册的模型) AS incr_task_id;

数据库原始返回:

incr_task_id————– 4(1 row)

结果说明:增量任务创建成功,task_id = 4(与方式一完全相同的接口)。

41、验证表结构和触发器

\\d kb_articles_tokenhub

数据库原始返回:

Table "public.kb_articles_tokenhub" Column | Type | Collation | Nullable | Default——————-+————–+———–+———-+————————————————– id | bigint | | not null | nextval('kb_articles_tokenhub_id_seq'::regclass) title | text | | | content | text | | | content_embedding | vector(1024) | | |Indexes: "kb_articles_tokenhub_pkey" PRIMARY KEY, btree (id)Triggers: tencentdb_ai_autoemb_ins_4 AFTER INSERT ON kb_articles_tokenhub FOR EACH ROW EXECUTE FUNCTION tencentdb_ai._autoembedding_enqueue_trigger('4', '17167', …) tencentdb_ai_autoemb_upd_4 BEFORE UPDATE OF content ON kb_articles_tokenhub FOR EACH ROW EXECUTE FUNCTION tencentdb_ai._autoembedding_enqueue_trigger('4', '17167', …)

结果说明:表结构和触发器与方式一完全一致,content_embedding vector(1024) 列 + INSERT/UDPATE 触发器均自动创建。

42、查看任务状态

SELECT task_kind, task_id, table_name, model_name, statusFROM tencentdb_ai.autoembedding_statusORDER BY task_id;

数据库原始返回:

task_kind | task_id | table_name | model_name | status———–+———+———————-+———————+——— incr | 1 | kb_articles | hunyuan-embedding | enabled backfill | 1 | kb_articles | hunyuan-embedding | incr | 4 | kb_articles_tokenhub | tokenhub-embedding | enabled(3 rows)

结果说明:TokenHub 任务(task_id=4)与混元任务(task_id=1)并存,两种方式可同时使用。

44、INSERT 触发入队

— 插入新数据,触发器自动入队INSERT INTO kb_articles_tokenhub (title, content) VALUES ('混元大模型', '腾讯混元大模型是腾讯自研的通用大语言模型,具备强大的自然语言理解和生成能力。');

数据库原始返回:

INSERT 0 1

— 查看 pendingSELECT task_kind, task_id, table_name, model_name, pendingFROM tencentdb_ai.autoembedding_status ORDER BY task_id;

数据库原始返回:

task_kind | task_id | table_name | model_name | pending———–+———+———————-+——————-+——— incr | 1 | kb_articles | hunyuan-embedding | 0 backfill | 1 | kb_articles | hunyuan-embedding | 0 incr | 5 | kb_articles_tokenhub | tokenhub-embed | 1(3 rows)

结果说明:INSERT 触发成功,pending = 1,消息已入队。

45、Worker 消费并生成向量

— 等待 worker 处理SELECT pg_sleep(10);– pending 状态SELECT task_kind, task_id, pending, failed_countFROM tencentdb_ai.autoembedding_status ORDER BY task_id;– 向量结果SELECT id, title, content_embedding IS NOT NULL AS has_embedding, CASE WHEN content_embedding IS NOT NULL THEN vector_dims(content_embedding)::text ELSE 'NULL' END AS dimsFROM kb_articles_tokenhub ORDER BY id;– 错误记录SELECT * FROM tencentdb_ai.autoembedding_error WHERE task_id = 5 ORDER BY created_at DESC LIMIT 5;

数据库原始返回:

pg_sleep———-(1 row) task_kind | task_id | pending | failed_count———–+———+———+————– incr | 1 | 0 | 0 backfill | 1 | 0 | 0 incr | 5 | 0 | 0(3 rows) id | title | has_embedding | dims—-+—————–+—————+—— 1 | PostgreSQL 简介 | f | NULL 2 | 向量数据库 | f | NULL 3 | RAG 技术 | f | NULL 4 | 混元大模型 | t | 1024(4 rows) error_id | msg_id | task_kind | task_id | row_id | error_code | error_message | detail | created_at———-+——–+———–+———+——–+————+—————+——–+————(0 rows)

结果说明:TokenHub Embedding 向量生成成功!pending = 0,failed_count = 0,无错误。id=4 的向量维度为 1024。

46、UPDATE 回填历史数据

— 更新已有行触发 UPDATE 触发器回填向量UPDATE kb_articles_tokenhub SET content = content WHERE id IN (1,2,3);

数据库原始返回:

UPDATE 3

— 查 pending(应为 3)SELECT task_kind, pending FROM tencentdb_ai.autoembedding_status WHERE task_id = 5;

数据库原始返回:

task_kind | pending———–+——— incr | 3(1 row)

pending = 3,三行均已入队。

SELECT pg_sleep(8);– 全量向量 + 维度SELECT id, title, content_embedding IS NOT NULL AS has_embedding, CASE WHEN content_embedding IS NOT NULL THEN vector_dims(content_embedding)::text ELSE 'NULL' END AS dimsFROM kb_articles_tokenhub ORDER BY id;

数据库原始返回:

pg_sleep———-(1 row) id | title | has_embedding | dims—-+—————–+—————+—— 1 | PostgreSQL 简介 | t | 1024 2 | 向量数据库 | t | 1024 3 | RAG 技术 | t | 1024 4 | 混元大模型 | t | 1024(4 rows)

结果说明:全部 4 行向量生成完毕,均为 1024 维。

47、向量相似度检索

SELECT id, title, content_embedding <=> ( SELECT content_embedding FROM kb_articles_tokenhub WHERE id = 1 ) AS distanceFROM kb_articles_tokenhubWHERE content_embedding IS NOT NULLORDER BY distance;

数据库原始返回:

id | title | distance—-+—————–+——————– 1 | PostgreSQL 简介 | 0 2 | 向量数据库 | 0.5327960213665903 3 | RAG 技术 | 0.6819517300768105 4 | 混元大模型 | 0.710405861090913(4 rows)

结果说明:向量相似度检索正常。「PostgreSQL 简介」与「向量数据库」距离最近(0.533,数据库领域关联),检索结果合理。

选择建议:

·已有混元密钥 → 用方式一,最简单直接。

·已迁移到 TokenHub 平台 / 想统一管理所有 AI 模型凭证 → 用方式二。

·需要多模态能力(图文互搜、视频检索)→ 必须用方式二(TokenHub),混元不支持。

·两种方式可以共存,不同表可以用不同模型。

TokenHub 模型选型速查:

你的需求 选用模型 embedding_dim
中文知识库检索、FAQ 匹配,成本敏感 kinfra-text-embedding-0.6b 1024
多语言深度语义检索,精度要求高 kinfra-text-embedding-4b 2560
图文互搜,响应速度优先 kinfra-vl-embedding-2b 2048
视频检索、高精度多模态匹配 kinfra-vl-embedding-8b 4096

49、Worker 进程状态

SELECT pid, backend_type, state, query, query_start, state_changeFROM pg_stat_activityWHERE backend_type LIKE '%tencentdb_ai%';

数据库原始返回:

pid | backend_type | state | query | query_start | state_change——+———————————–+——–+————————————————————-+——————————-+—————————— 67832 | tencentdb_ai scheduler | | | | 67834 | tencentdb_ai autoembedding worker | active | SELECT tencentdb_ai._autoembedding_process_backfill_batch() | 2026-08-05 22:40:37.409162+08 | 2026-08-05 22:40:37.41009+08(2 rows)

结果说明:tencentdb_ai scheduler 和 tencentdb_ai autoembedding worker 两个后台进程均在运行。

50、错误表

SELECT * FROM tencentdb_ai.autoembedding_errorORDER BY created_at DESC LIMIT 10;

数据库原始返回:

error_id | msg_id | task_kind | task_id | row_id | error_code | error_message | detail | created_at———-+——–+———–+———+——–+————+—————+——–+————(0 rows)

结果说明:测试全程无错误记录,嵌入 API 调用全部成功。

赞 (0)
上一篇 4天前
下一篇 4天前