注意:说明:
注意:环境:这篇所使用数据库版本为 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 调用全部成功。