Timescale/pgai 向量化快速入门指南
pgai Helper functions for AI workflows 项目地址: https://gitcode.com/gh_mirrors/pg/pgai
前言
在现代数据应用中,向量搜索已成为实现语义搜索、推荐系统和AI应用的核心技术。Timescale/pgai项目通过其向量化(vectorizer)功能,为PostgreSQL用户提供了简单高效的向量嵌入解决方案。本文将详细介绍如何利用pgai的向量化功能,在自托管环境中快速搭建基于Ollama的文本嵌入系统。
环境准备
开发环境配置
我们需要搭建一个包含以下组件的本地开发环境:
- PostgreSQL数据库:使用TimescaleDB扩展版本,并预装pgai扩展
- 向量化工作器:负责处理数据并生成向量嵌入
- 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:
环境启动步骤
-
首先启动数据库服务:
docker compose up -d db
-
安装pgai扩展:
docker compose run --rm --entrypoint "python -m pgai install -d postgres://postgres:postgres@db:5432/postgres" vectorizer-worker
-
启动所有服务:
docker compose up -d
创建并运行向量化器
数据库初始化
连接到数据库后,执行以下操作:
-
启用pgai扩展:
CREATE EXTENSION IF NOT EXISTS ai CASCADE;
-
创建示例数据表:
CREATE TABLE blog ( id SERIAL PRIMARY KEY, title TEXT, authors TEXT, contents TEXT, metadata JSONB );
-
插入示例数据:
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向量化器的工作原理可以分为几个关键阶段:
- 数据监听:工作器持续监控指定表的数据变化
- 文本提取:从配置的列中提取文本内容
- 嵌入生成:通过Ollama服务调用指定的嵌入模型生成向量
- 向量存储:将生成的向量存储在目标表中
- 索引构建:自动为向量列创建适当的索引以支持高效搜索
应用场景扩展
除了基础的语义搜索,pgai向量化器还可用于:
- 推荐系统:基于内容相似性推荐文章
- 问答系统:构建RAG(检索增强生成)应用
- 内容聚类:发现文本数据中的潜在主题
- 异常检测:识别与常规内容差异较大的文档
性能优化建议
- 批量处理:对于大量数据,考虑分批处理
- 模型选择:根据需求平衡模型精度和性能
- 索引优化:对于大规模数据集,考虑使用专门的向量索引
- 资源分配:根据数据量调整工作器资源
结语
通过pgai的向量化功能,开发者可以轻松地将先进的向量搜索能力集成到PostgreSQL应用中。本文展示了从环境搭建到实际应用的完整流程,希望能帮助您快速上手这一强大工具。随着AI技术的不断发展,向量数据库和语义搜索将成为数据应用的重要组成部分,pgai为这一趋势提供了简单可靠的解决方案。
pgai Helper functions for AI workflows 项目地址: https://gitcode.com/gh_mirrors/pg/pgai
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考