Timescale/pgai 向量化快速入门指南

Timescale/pgai 向量化快速入门指南

pgai Helper functions for AI workflows pgai 项目地址: https://gitcode.com/gh_mirrors/pg/pgai

前言

在现代数据应用中,向量搜索已成为实现语义搜索、推荐系统和AI应用的核心技术。Timescale/pgai项目通过其向量化(vectorizer)功能,为PostgreSQL用户提供了简单高效的向量嵌入解决方案。本文将详细介绍如何利用pgai的向量化功能,在自托管环境中快速搭建基于Ollama的文本嵌入系统。

环境准备

开发环境配置

我们需要搭建一个包含以下组件的本地开发环境:

  1. PostgreSQL数据库:使用TimescaleDB扩展版本,并预装pgai扩展
  2. 向量化工作器:负责处理数据并生成向量嵌入
  3. Ollama服务:用于托管嵌入模型和大型语言模型

使用Docker Compose可以轻松实现这一环境搭建:

name: pgai 
services:
  db:
    image: timescale/timescaledb-ha:pg17
    environment:
      POSTGRES_PASSWORD: postgres
    ports:
      - "5432:5432"
    volumes:
      - data:/home/postgres/pgdata/data
  vectorizer-worker:
    image: timescale/pgai-vectorizer-worker:latest
    environment:
      PGAI_VECTORIZER_WORKER_DB_URL: postgres://postgres:postgres@db:5432/postgres
      OLLAMA_HOST: http://ollama:11434
    command: [ "--poll-interval", "5s" ]
  ollama:
    image: ollama/ollama
volumes:
  data:

环境启动步骤

  1. 首先启动数据库服务:

    docker compose up -d db
    
  2. 安装pgai扩展:

    docker compose run --rm --entrypoint "python -m pgai install -d postgres://postgres:postgres@db:5432/postgres" vectorizer-worker
    
  3. 启动所有服务:

    docker compose up -d
    

创建并运行向量化器

数据库初始化

连接到数据库后,执行以下操作:

  1. 启用pgai扩展:

    CREATE EXTENSION IF NOT EXISTS ai CASCADE;
    
  2. 创建示例数据表:

    CREATE TABLE blog (
        id SERIAL PRIMARY KEY,
        title TEXT,
        authors TEXT,
        contents TEXT,
        metadata JSONB
    );
    
  3. 插入示例数据:

    INSERT INTO blog (title, authors, contents, metadata)
    VALUES
    ('Getting Started with PostgreSQL', 'John Doe', 'PostgreSQL is a powerful, open source object-relational database system...', '{"tags": ["database", "postgresql", "beginner"], "read_time": 5, "published_date": "2024-03-15"}'),
    -- 其他示例数据...
    

配置向量化器

创建向量化器是核心步骤,它将自动处理表中的数据并生成向量嵌入:

SELECT ai.create_vectorizer(
     'blog'::regclass,
     loading => ai.loading_column('contents'),
     embedding => ai.embedding_ollama('nomic-embed-text', 768),
     destination => ai.destination_table('blog_contents_embeddings')
);

参数说明:

  • loading:指定从哪个列加载文本数据
  • embedding:配置使用的嵌入模型和维度
  • destination:指定存储嵌入向量的目标表

监控处理过程

可以通过查看工作器日志来监控处理进度:

docker compose logs -f vectorizer-worker

正常运行时,您将看到类似如下的日志输出:

vectorizer-worker-1 | 2024-10-23 12:56:36 [info] running vectorizer vectorizer_id=1

语义搜索实践

向量化完成后,我们可以进行语义搜索:

SELECT
    chunk,
    embedding <=> ai.ollama_embed('nomic-embed-text', 'good food', host => 'http://ollama:11434') as distance
FROM blog_contents_embeddings
ORDER BY distance
LIMIT 10;

搜索结果示例:

| 内容摘要 | 距离值 | |---------|--------| | 保持健康饮食对忙碌的专业人士来说可能具有挑战性... | 0.5030 | | PostgreSQL是一个强大的开源对象关系数据库系统... | 0.5868 |

距离值越小表示语义相似度越高。

技术原理深入

pgai向量化器的工作原理可以分为几个关键阶段:

  1. 数据监听:工作器持续监控指定表的数据变化
  2. 文本提取:从配置的列中提取文本内容
  3. 嵌入生成:通过Ollama服务调用指定的嵌入模型生成向量
  4. 向量存储:将生成的向量存储在目标表中
  5. 索引构建:自动为向量列创建适当的索引以支持高效搜索

应用场景扩展

除了基础的语义搜索,pgai向量化器还可用于:

  1. 推荐系统:基于内容相似性推荐文章
  2. 问答系统:构建RAG(检索增强生成)应用
  3. 内容聚类:发现文本数据中的潜在主题
  4. 异常检测:识别与常规内容差异较大的文档

性能优化建议

  1. 批量处理:对于大量数据,考虑分批处理
  2. 模型选择:根据需求平衡模型精度和性能
  3. 索引优化:对于大规模数据集,考虑使用专门的向量索引
  4. 资源分配:根据数据量调整工作器资源

结语

通过pgai的向量化功能,开发者可以轻松地将先进的向量搜索能力集成到PostgreSQL应用中。本文展示了从环境搭建到实际应用的完整流程,希望能帮助您快速上手这一强大工具。随着AI技术的不断发展,向量数据库和语义搜索将成为数据应用的重要组成部分,pgai为这一趋势提供了简单可靠的解决方案。

pgai Helper functions for AI workflows pgai 项目地址: https://gitcode.com/gh_mirrors/pg/pgai

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

郎轶诺

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值