使用大模型将数据嵌入到 PostgreSQL 向量
简述
本文主要介绍使用 CloudCanal 全量迁移,通过大模型嵌入能力,将文档向量化后写入到 PostgreSQL vector 中,为 RAG 能力做前置工作。
相对比其他方案,此功能具备以下几个特点:
- 零代码、零命令行,使用便捷
- 支持多种文件、数据源来源(SSH、OSS、S3、PostgreSQL)和目标向量数据库(PostgreSQL)
- 可快速切换大模型 API 平台和模型,衡量模型质量
技术点
支持的大模型
CloudCanal 支持的大模型分为两类,一类为 Embeding ,即数据向量化,也是本文所用的主要模型。另外一类为 Chat 模型,即推理模型,是我们 RAG API 使用的模型(会在另外一篇文章中说明)。
CloudCanal 使用 Embeding 模型对来源数据进行向量化,当前支持的嵌入模型如下:
平台 | 模型 | 用途 |
---|---|---|
阿里云百炼(DashScope) | text-embedding-v3 text-embedding-v2 text-embedding-v1 | 文本嵌入 |
Cohere | embed-english-v2.0 | 文本嵌入 |
HuggingFace | sentence-transformers/all-MiniLM-L6-v2 | 文本嵌入 |
OpenAI | text-embedding-3-large text-embedding-3-large text-embedding-3-small | 文本嵌入 |
LocalAI | text-embedding-ada-002 | 文本嵌入 |
CloudCanal 使用 Chat 模型结合通过 向量查询 的上下文进行推理,响应 API 的请求的问题,当前支持 Chat 模型如下:
平台 | 模型名称 | 用途 |
---|---|---|
阿里云百炼(DashScope) | qwq-plus qwq-plus | 推理(聊天) |
DeepSeek | deepseek-chat deepseek-chat | 推理(聊天) |
OpenAI | gpt-4o o1 o1-mini o3-mini 等 | 推理(聊天) |
操作步骤
本文使用 CloudCanal SshFile 数据源、阿里云 PostgreSQL 数据源、阿里云百炼平台(DashScope)的嵌入模型 text-embedding-v3 作为示例。
下载 CloudCanal
下载安装 CloudCanal 私有部署版本。
添加数据源
准备数据源。
- 登录 阿里云百炼 并创建 API-KEY。
- 购买 阿里云 RDS for PostgreSQL。
- 创建高权限账号并登录。
- 切换到需要建表的目标 schema (如
public
)。 - 执行以下 SQL 开启向量能力。
CREATE EXTENSION IF NOT EXISTS vector;
添加数据源
登录 CloudCanal 平台,点击 数据源管理 > 新增数据源。
选择 阿里云 > 开放API > RDS for PostgreSQL,获取数据源并添加。如果未获取到数据源,可以尝试在 配置 > 第三方配置 更新阿里云 AccessKey 和 SecretKey。
选择 阿里云 > 手动填写 > DashScope 数据源,填写之前步骤获取的 API-KEY。
选择 自建 > SshFile 数据源,本例以 CloudCanal 文档为例:
- 网络地址:填写目标文件所在机器和 SSH 端口(默认22)。
- 账号密码:即登录目标机器的用户名、密码。
- 参数 fileSuffixArray:填写
.md
以过滤出所有 markdown 文件。 - 参数 dbsJson:复制默认值并修改 schema 值(即目标文件所在根目录)。
[
{
"db":"cc_virtual_fs",
"schemas":[
{
"schema":"/Users/johnli/source/cloudcanal-doc-v2",
"tables":[]
}
]
}
]
创建任务
点击 同步任务 > 创建任务。
选择源端数据源(SshFile)和目标数据库(PostgreSQL),并分别点击 测试连接。
信息如遇到测试连接长时间不返回,可以刷新页面重新选择。
数据库连接信息错误或网络不通都可能造成该现象。在 功能配置 页面,进行以下配置:
- 任务类型选择 全量迁移。
- 任务规格选择默认 2 GB 即可。
在 表&action过滤 页面,进行以下配置:
- 选择需要定时数据迁移的文件,可同时选择多个。
- 点击 批量修改目标名称 > 统一表名 > 填写表名(如 file_vector),并确认,方便将不同文件向量化并写入同一个表。
在 数据处理 页面,进行以下配置:
- 配置大模型 > DashScope > 选择刚添加的大模型实例 > 选择某一个嵌入模型(如 text-embedding-v3)。
- 批量操作 > 大模型嵌入,选择需要嵌入的字段,并全选表。
在 创建确认 页面,点击 创建任务,开始运行。
验证效果
使用大模型对问题进行向量化。
如问题为CloudCanal 增量同步任务延迟是什么原因?应该怎么处理?
,通过相同的嵌入模型对其进行向量化(本文中只能用代码,后续结合 CloudCanal RAG API 则可直接查询或推理)。[-0.03169125, 0.02366958, ..., -6.437579E-4, 0.03856428]
执行 SQL 语句获取上下文和对应的原始文件。
SELECT (2 - (__vector <=> '[-0.03169125, 0.02366958, ..., -6.437579E-4, 0.03856428]')) / 2 AS score, __content,__cc_src_file
FROM public.file_vector WHERE round(cast(float8 (__vector <=> '[-0.03169125, 0.02366958, ..., -6.437579E-4, 0.03856428]') as numeric), 8) <= round(2 - 2 * 0.6, 8)
ORDER BY __vector <=> '[-0.03169125, 0.02366958, ..., -6.437579E-4, 0.03856428]' LIMIT 10输出结果,此处只打印
__cc_src_file
字段,且按照相关性分数由高到低返回前 10 条记录。/Users/johnli/source/cloudcanal-doc-v2/docs/faq/solve_incre_task_delay.md:0.95078015
/Users/johnli/source/cloudcanal-doc-v2/docs/blog/tech_share/016_hana_change_data_capture_optimize.md:0.89463025
/Users/johnli/source/cloudcanal-doc-v2/docs/bestPractice/time_schedule_full.md:0.8841969
/Users/johnli/source/cloudcanal-doc-v2/docs/blog/data_sync_sample/031_biz_ob_sub.md:0.87750447
/Users/johnli/source/cloudcanal-doc-v2/docs/faq/performance_optimization.md:0.87465495
/Users/johnli/source/cloudcanal-doc-v2/docs/blog/data_sync_sample/043_redis_redis_sync.md:0.8742793
/Users/johnli/source/cloudcanal-doc-v2/docs/operation/job_manage/create_job/create_full_incre_task.md:0.8737336
/Users/johnli/source/cloudcanal-doc-v2/docs/blog/tech_share/012_hana_change_data_capture.md:0.87199974
/Users/johnli/source/cloudcanal-doc-v2/docs/blog/tech_share/012_hana_change_data_capture.md:0.86868525
/Users/johnli/source/cloudcanal-doc-v2/docs/blog/data_sync_sample/018_oceanbase_source_sync.md:0.86807317使用返回的
__content
进行拼接组合成上下文,结合 Chat 模型完成推理(此案例使用阿里云 qwq_plus 模型)。增量同步延迟高的原因包括任务报错、源端无变更或心跳、目标写入性能不足、源端拉取数据慢。
处理方法:
1.检查异常监控和日志排除任务错误;
2.若源端无增量则开启心跳或确认业务流量;
3.流量大时调优参数(如减半ringBuffer和batchSize,加倍writeParallel);
4.Hana任务需确保增量表结构自动演进并检查版本兼容性;
5.网络或源端压力问题需优化基础设施。
总结
本文主要介绍使用 CloudCanal 全量迁移,通过大模型嵌入能力,将文档向量化后写入到 PostgreSQL 向量中,为业务构建 RAG 应用打下坚实基础。