跳到主要内容

使用大模型将数据嵌入到 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
文本嵌入
Cohereembed-english-v2.0
文本嵌入
HuggingFacesentence-transformers/all-MiniLM-L6-v2文本嵌入
OpenAItext-embedding-3-large
text-embedding-3-large
text-embedding-3-small
文本嵌入
LocalAItext-embedding-ada-002文本嵌入

CloudCanal 使用 Chat 模型结合通过 向量查询 的上下文进行推理,响应 API 的请求的问题,当前支持 Chat 模型如下:

平台模型名称用途
阿里云百炼(DashScope)qwq-plus
qwq-plus
推理(聊天)
DeepSeekdeepseek-chat
deepseek-chat
推理(聊天)
OpenAIgpt-4o
o1
o1-mini
o3-mini 等
推理(聊天)

操作步骤

本文使用 CloudCanal SshFile 数据源、阿里云 PostgreSQL 数据源、阿里云百炼平台(DashScope)的嵌入模型 text-embedding-v3 作为示例。

下载 CloudCanal

下载安装 CloudCanal 私有部署版本

添加数据源

  1. 准备数据源。

    1. 登录 阿里云百炼 并创建 API-KEY。
    2. 购买 阿里云 RDS for PostgreSQL
    3. 创建高权限账号并登录。
    4. 切换到需要建表的目标 schema (如public)。
    5. 执行以下 SQL 开启向量能力
    CREATE EXTENSION IF NOT EXISTS vector;
  2. 添加数据源

  3. 登录 CloudCanal 平台,点击 数据源管理 > 新增数据源

  4. 选择 阿里云 > 开放API > RDS for PostgreSQL,获取数据源并添加。如果未获取到数据源,可以尝试在 配置 > 第三方配置 更新阿里云 AccessKey 和 SecretKey。

  5. 选择 阿里云 > 手动填写 > DashScope 数据源,填写之前步骤获取的 API-KEY。

  6. 选择 自建 > SshFile 数据源,本例以 CloudCanal 文档为例:

    • 网络地址:填写目标文件所在机器和 SSH 端口(默认22)。
    • 账号密码:即登录目标机器的用户名、密码。
    • 参数 fileSuffixArray:填写 .md 以过滤出所有 markdown 文件。
    • 参数 dbsJson:复制默认值并修改 schema 值(即目标文件所在根目录)。
    [
    {
    "db":"cc_virtual_fs",
    "schemas":[
    {
    "schema":"/Users/johnli/source/cloudcanal-doc-v2",
    "tables":[]
    }
    ]
    }
    ]

创建任务

  1. 点击 同步任务 > 创建任务

  2. 选择源端数据源(SshFile)和目标数据库(PostgreSQL),并分别点击 测试连接

    信息

    如遇到测试连接长时间不返回,可以刷新页面重新选择。
    数据库连接信息错误或网络不通都可能造成该现象。

  3. 功能配置 页面,进行以下配置:

    1. 任务类型选择 全量迁移
    2. 任务规格选择默认 2 GB 即可。
  4. 表&action过滤 页面,进行以下配置:

    1. 选择需要定时数据迁移的文件,可同时选择多个。
    2. 点击 批量修改目标名称 > 统一表名 > 填写表名(如 file_vector),并确认,方便将不同文件向量化并写入同一个表。
  5. 数据处理 页面,进行以下配置:

    1. 配置大模型 > DashScope > 选择刚添加的大模型实例 > 选择某一个嵌入模型(如 text-embedding-v3)。
    2. 批量操作 > 大模型嵌入,选择需要嵌入的字段,并全选表。
  6. 创建确认 页面,点击 创建任务,开始运行。

验证效果

  1. 使用大模型对问题进行向量化。
    如问题为 CloudCanal 增量同步任务延迟是什么原因?应该怎么处理?,通过相同的嵌入模型对其进行向量化(本文中只能用代码,后续结合 CloudCanal RAG API 则可直接查询或推理)。

    [-0.03169125, 0.02366958, ..., -6.437579E-4, 0.03856428]
  2. 执行 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
  3. 使用返回的 __content 进行拼接组合成上下文,结合 Chat 模型完成推理(此案例使用阿里云 qwq_plus 模型)。

    增量同步延迟高的原因包括任务报错、源端无变更或心跳、目标写入性能不足、源端拉取数据慢。

    处理方法:
    1.检查异常监控和日志排除任务错误;
    2.若源端无增量则开启心跳或确认业务流量;
    3.流量大时调优参数(如减半ringBuffer和batchSize,加倍writeParallel);
    4.Hana任务需确保增量表结构自动演进并检查版本兼容性;
    5.网络或源端压力问题需优化基础设施。

总结

本文主要介绍使用 CloudCanal 全量迁移,通过大模型嵌入能力,将文档向量化后写入到 PostgreSQL 向量中,为业务构建 RAG 应用打下坚实基础。