使用Timescale/pgai在PostgreSQL中构建AI应用指南
pgai Helper functions for AI workflows 项目地址: https://gitcode.com/gh_mirrors/pg/pgai
概述
Timescale/pgai是一个PostgreSQL扩展,它将强大的AI功能直接集成到数据库中。通过pgai,开发者可以在熟悉的SQL环境中实现向量搜索、语义检索和生成式AI应用,同时保持PostgreSQL原有的可靠性、可扩展性和ACID特性。
核心功能
1. 向量嵌入自动生成与同步
pgai的向量化器(Vectorizer)功能可以自动为数据库中的文本数据创建向量嵌入,并保持这些嵌入与原始数据的同步。这一过程完全自动化,开发者只需通过简单的SQL命令即可完成设置:
SELECT ai.create_vectorizer(
'wiki'::regclass,
embedding => ai.embedding_ollama('all-minilm', 384),
chunking => ai.chunking_recursive_character_text_splitter('text'),
destination => ai.destination_table('wiki_embeddings')
);
这种自动同步机制意味着当原始数据发生变化时,相关的向量嵌入会自动更新,无需人工干预。
2. 语义搜索能力
pgai支持基于向量嵌入的语义搜索,能够理解查询的语义而不仅仅是关键词匹配。例如,搜索"光的特性"可以返回包含相关概念但不一定包含这些确切词汇的结果:
SELECT title, chunk
FROM wiki_embeddings
ORDER BY embedding <=> ai.ollama_embed('all-minilm', 'properties of light')
LIMIT 1;
3. 检索增强生成(RAG)
pgai支持直接在SQL中实现RAG流程,使大型语言模型(LLM)能够基于数据库中的内容生成回答:
CREATE OR REPLACE FUNCTION generate_rag_response(query_text TEXT)
RETURNS TEXT AS $$
DECLARE
context_chunks TEXT;
response JSONB;
BEGIN
-- 执行语义搜索获取相关内容
SELECT string_agg(title || ': ' || chunk, E'\n') INTO context_chunks
FROM (
SELECT title, chunk
FROM wiki_embeddings
ORDER BY embedding <=> ai.ollama_embed('all-minilm', query_text)
LIMIT 3
) AS relevant_posts;
-- 使用LLM生成回答
select ai.ollama_generate('tinyllama',
query_text || E'\nUse the following context to respond.\n' || context_chunks) INTO response;
RETURN response->>'response';
END;
$$ LANGUAGE plpgsql;
快速入门
1. 环境准备
使用Docker快速搭建包含pgai和Ollama的环境:
- 下载docker-compose配置文件
- 启动服务:
docker compose up -d
- 下载所需模型:
docker compose exec ollama ollama pull all-minilm
2. 数据准备
从Hugging Face加载数据集到PostgreSQL:
CREATE TABLE wiki (
id TEXT PRIMARY KEY,
url TEXT,
title TEXT,
text TEXT
);
SELECT ai.load_dataset('wikimedia/wikipedia', '20231101.en',
table_name=>'wiki', batch_size=>5, max_batches=>1, if_table_exists=>'append');
3. 创建向量化器
为文本列创建向量嵌入:
SELECT ai.create_vectorizer(
'wiki'::regclass,
embedding => ai.embedding_ollama('all-minilm', 384),
chunking => ai.chunking_recursive_character_text_splitter('text'),
destination => ai.destination_table('wiki_embeddings')
);
4. 执行语义搜索
SELECT title, chunk
FROM wiki_embeddings
ORDER BY embedding <=> ai.ollama_embed('all-minilm', 'AI tools')
LIMIT 1;
高级应用
1. 数据分类与摘要
利用pgai的模型调用功能,可以直接在SQL中对数据进行分类或生成摘要:
SELECT answer->>'response' as summary
FROM ai.ollama_generate('tinyllama',
'Summarize the following: '|| (SELECT text FROM wiki WHERE title like 'pgai%')) as answer;
2. Python集成
对于更复杂的应用场景,可以通过Python与pgai交互:
import psycopg
from pgvector.psycopg import register_vector
def get_relevant_chunks(cur, embedding, limit=1):
query = """
SELECT title, chunk
FROM wiki_embeddings
ORDER BY embedding <=> %s::vector
LIMIT %s
"""
cur.execute(query, (embedding, limit))
return cur.fetchall()
性能优化建议
- 对于大规模向量搜索,建议结合使用pgvectorscale扩展
- 根据数据特点选择合适的chunking策略
- 生产环境中考虑使用GPU加速的Ollama实例
- 定期监控向量化器状态:
SELECT * FROM ai.vectorizer_status
适用场景
pgai特别适合以下应用场景:
- 知识库问答系统
- 内容推荐引擎
- 文档智能检索
- 客户支持自动化
- 数据分析与洞察生成
通过将AI能力直接集成到PostgreSQL中,pgai大大简化了AI应用的开发流程,使开发者能够专注于业务逻辑而非基础设施搭建。
pgai Helper functions for AI workflows 项目地址: https://gitcode.com/gh_mirrors/pg/pgai
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考