pgai Vectorizer:在 PostgreSQL 中使用一个 SQL 命令自动执行 AI 嵌入
阅读:28
点赞:0
在AI系统中,如RAG、搜索和AI代理,管理嵌入工作流可能会很麻烦:需要协调多个工具,设置复杂的管道,并花费数小时同步数据,特别是如果您不是ML或AI专家。但现在,有了pgai Vectorizer,这一切都变得简单了。
一、pgai Vectorizer简介
pgai Vectorizer是一个可以在PostgreSQL中自动化向量嵌入创建的工具。它可以帮助您保持嵌入随着数据变化自动同步,并且可以轻松地使用不同的AI模型进行实验——所有这些都只需一个简单的SQL命令。
1.1 创建向量器
以下是如何在blogs
表中创建一个向量器的示例,使用Open AI的text-embedding-3-small
模型:
-- 创建一个向量器来嵌入blogs表中的数据
-- 使用Open AI text-embedding-3-small模型
SELECT ai.create_vectorizer(
'public.blogs'::regclass, -- 目标表
embedding => ai.embedding_openai('text-embedding-3-small', 1536), -- 使用的嵌入模型
chunking => ai.chunking_recursive_character_text_splitter('content') -- 分割文本的方法
);
1.2 pgai Vectorizer的功能
-
嵌入创建:只需一个SQL命令即可从多个文本列生成向量嵌入。 -
自动同步:随着数据的变化,嵌入会自动更新。 -
快速模型切换:可以即时测试不同的AI模型,无需重新处理数据。 -
测试和部署:可以比较模型和分块技术,进行A/B测试,并自信地推出更新,而无需停机。
二、pgai Vectorizer系统架构
pgai Vectorizer通过使用PostgreSQL中的工作队列和配置表,自动创建和更新来自源数据表的嵌入。嵌入是在与嵌入服务(如OpenAI API)交互的外部工作者中创建的。
三、使用pgai Vectorizer的示例
3.1 创建不同的向量器
以下是如何为同一数据集创建两个不同嵌入模型的向量器的示例:
-- 使用OpenAI text-embedding-3-small的向量器
SELECT ai.create_vectorizer(
'public.blogs'::regclass,
destination => 'blogs_embedding_small', -- 目标表
embedding => ai.embedding_openai('text-embedding-3-small', 1536), -- 使用的嵌入模型
chunking => ai.chunking_recursive_character_text_splitter('content'), -- 分割文本的方法
formatting => ai.formatting_python_template('Title: $title\nURL: $url\nContent: $chunk') -- 格式化输出
);
-- 使用OpenAI text-embedding-3-large的向量器
SELECT ai.create_vectorizer(
'public.blogs'::regclass,
destination => 'blogs_embedding_large', -- 目标表
embedding => ai.embedding_openai('text-embedding-3-large', 1536), -- 使用的嵌入模型
chunking => ai.chunking_recursive_character_text_splitter('content'), -- 分割文本的方法
formatting => ai.formatting_python_template('Title: $title\nURL: $url\nContent: $chunk') -- 格式化输出
);
3.2 比较不同模型的结果
以下是如何比较两个向量器在同一RAG查询上的结果的示例:
-- 比较来自两个向量器的结果
SELECT
'text-embedding-3-small' as model, -- 模型名称
generate_rag_response(
'What is AI?', -- 查询文本
'public.blogs_embedding_small' -- 使用的嵌入表
) as response -- 查询结果
UNION ALL
SELECT
'text-embedding-3-large' as model, -- 模型名称
generate_rag_response(
'What is AI?', -- 查询文本
'public.blogs_embedding_large' -- 使用的嵌入表
) as response; -- 查询结果
四、高级配置示例
以下是一个高级向量器配置的示例,它在表中有100k行时自动创建一个StreamingDiskANN索引,并为HTML内容应用递归分块:
-- 高级向量器配置
SELECT ai.create_vectorizer(
'public.blogs'::regclass,
destination => 'blogs_embedding_recursive', -- 目标表
embedding => ai.embedding_openai('text-embedding-3-small', 1536), -- 使用的嵌入模型
indexing => ai.indexing_diskann(min_rows => 100000, storage_layout => 'memory_optimized'), -- 创建索引的条件
chunking => ai.chunking_recursive_character_text_splitter(
'content',
chunk_size => 800, -- 分块大小
chunk_overlap => 400, -- 分块重叠大小
separator => array[
E'</article>', -- 分割主要文档部分
E'</div>', -- 分割div边界
E'</section>',
E'</p>', -- 分割段落
E'<br>', -- 分割换行
E'</li>', -- 分割列表项
E'. ', -- 回退到句子边界
' ' -- 最后手段:分割空格
]
),
formatting => ai.formatting_python_template('title: $title url: $url $chunk') -- 格式化输出
);
五. 结论
pgai Vectorizer通过提供自动化嵌入创建和同步的工具,简化了AI开发流程。它允许开发者轻松测试不同的AI模型,并在不需要额外工具或复杂设置的情况下,保持嵌入数据的最新状态。随着数据集的增长,pgai Vectorizer也能够扩展其性能,确保即使在大型数据集上也能保持高效的搜索性能。
通过pgai Vectorizer,开发者可以节省时间和精力,专注于构建他们的下一个AI应用,而不是陷入嵌入管理的复杂性中。