A suite of tools to develop RAG, semantic search, and other AI applications more easily with PostgreSQL
pgai基本信息
pgai介绍
pgai 简化了使用 PostgreSQL 构建搜索、检索增强生成(RAG)和其他 AI 应用程序的过程。它补充了 PostgreSQL 中用于向量搜索的流行扩展,例如 pgvector 和 pgvectorscale,以进一步提升其功能。
概述
pgai 的目标是让开发人员更轻松地使用 AI。由于数据是大多数 AI 应用程序的基础,pgai 使您能够更轻松地在 AI 工作流中利用数据。具体来说,pgai 支持以下功能:
处理从您的数据生成的嵌入:
- 自动创建并同步数据的向量嵌入 (了解更多)
- 使用向量和语义搜索查询您的数据 (了解更多)
- 在单个 SQL 语句中实现检索增强生成 (了解更多)
- 使用 pgvectorscale 对大量向量工作负载执行高性能、经济高效的近似最近邻搜索,该功能补充了 pgvector。
利用大语言模型进行数据处理任务:
- 从如 Claude Sonnet 3.5、OpenAI GPT4o、Cohere Command 和 Llama 3(通过 Ollama)的模型中获取大语言模型聊天完成 (了解更多)
- 基于现有 PostgreSQL 关系数据进行分类、总结和数据丰富化 (查看示例)。
了解更多关于 pgai 的信息: 想了解关于 pgai 扩展的更多信息以及我们构建它的原因,请阅读 pgai:为 PostgreSQL 开发者提供 AI 工程超级能力。
贡献:我们欢迎对 pgai 的贡献!有关更多信息,请参阅 Contributing 页面。
演示:pgai 向量化器
入门指南
以下是如何开始使用 pgai 的方法:
为了快速入门,请尝试使用 pgai 向量化器进行自动数据嵌入:
对于其他用例,请首先在 Timescale Cloud、预构建的 Docker 镜像或源码中安装 pgai。然后,选择您的冒险方式:
- 使用 pgai 向量化器 自动化 AI 嵌入。
- 使用 pgai 集成来自供应商的 AI。一些例子包括:
- 利用大语言模型进行数据处理任务,如分类、总结和数据丰富化 (查看 OpenAI 示例)。
安装
运行带有 pgai 扩展的 PostgreSQL 最快的方法是:
-
创建数据库环境。可以选择:
使用预构建的 Docker 容器
运行 TimescaleDB Docker 镜像,然后启用 pgai 扩展。
使用 Timescale 云服务
pgai 可用于新的或现有的 Timescale 云服务。对于任何服务,启用 pgai 扩展。
从源代码安装
要在 PostgreSQL 服务器上从源码安装 pgai:
-
在系统全局安装所需的软件
-
Python3:如果在终端运行
python3 --version
返回command not found
,请下载并安装最新版本的 Python3。 -
Pip:如果在终端运行
pip --version
返回command not found
:-
标准安装:使用 pip 支持的方法。
-
虚拟环境:通常,如果您在一个 Python 虚拟环境 中工作,则 pip 会自动安装。如果您在虚拟环境中运行 PostgreSQL,则 pgai 需要几个 Python 包。在启动 PostgreSQL 服务器之前设置
PYTHONPATH
和VIRTUAL_ENV
环境变量。PYTHONPATH=/path/to/venv/lib/python3.12/site-packages \ VIRTUAL_ENV=/path/to/venv \ pg_ctl -D /path/to/data -l logfile start
-
-
PL/Python:请参考如何安装带有 plpython3u 的 Postgres 16:适用于 macOS、Ubuntu、Debian、CentOS、Docker 的配方。
macOS:Homebrew 中的标准 PostgreSQL 不包括
plpython3
扩展。以下说明展示了如何从备用 tap 安装。-
asdf 版本管理器的 Postgresql 插件:在安装 PostgreSQL 时设置
--with-python
选项:POSTGRES_EXTRA_CONFIGURE_OPTIONS=--with-python asdf install postgres 16.3
-
-
pgvector:请根据官方仓库的 安装说明 进行安装。
这些扩展将在您 启用 pgai 扩展 时自动添加到您的 PostgreSQL 数据库中。
-
-
安装
pgai
PostgreSQL 扩展:just ext install
我们使用 just 来运行项目命令。如果您没有 just,您可以用以下方法安装扩展:
projects/extension/build.py install
在数据库中启用 pgai 扩展
-
使用如 psql v16 或 PopSQL 的 Postgres 客户端连接到您的数据库。
psql -d "postgres://<username>:<password>@<host>:<port>/<database-name>"
-
创建 pgai 扩展:
CREATE EXTENSION IF NOT EXISTS ai CASCADE;
CASCADE
将自动安装pgvector
和plpython3u
扩展。
使用 pgai
pgai 的主要功能包括:
处理从您的数据生成的嵌入:
利用大语言模型进行数据处理任务: 您可以使用 pgai 集成以下供应商的 AI:
了解如何使用触发器和后台作业直接在数据库中审查内容。
自动创建并同步数据的大语言模型嵌入
pgvector 和 pgvectorscale 扩展允许您 在数据库中存储向量嵌入并进行快速高效的向量搜索。pgai 向量化器 基于这些扩展 自动为数据库中的任何文本数据创建和同步嵌入。
只需一行代码,您就可以定义一个为数据表创建嵌入的向量化器:
SELECT ai.create_vectorizer(
<table_name>::regclass,
destination => <embedding_table_name>,
embedding => ai.embedding_openai(<model_name>, <dimensions>),
chunking => ai.chunking_recursive_character_text_splitter(<column_name>)
);
这个新创建的向量化器将自动跟踪源数据表中的任何更改,并异步更新目标嵌入表。Automate AI embedding with pgai Vectorizer 向你展示了如何在你自己的数据中实现嵌入。当你在 Timescale Cloud 数据库中创建 Vectorizers 时,嵌入会在后台自动创建并同步。在自托管的 Postgres 环境中,你可以使用 Vectorizer Worker 来异步处理你的 Vectorizers。
使用向量和语义搜索查询你的数据
pgai 提供了一系列函数,让你可以通过 SQL 直接与大语言模型(LLM)进行交互,从而能够直接在数据库中进行语义搜索:
SELECT
chunk,
embedding <=> ai.openai_embed(<embedding_model>, 'some-query') as distance
FROM <embedding_table>
ORDER BY distance
LIMIT 5;
这是一个完全正常的 SQL 查询。你可以将它与 where
子句和其他 SQL 功能结合使用,以进一步优化你的搜索。pgai 真正解决了向量搜索中缺少 where 子句的问题。
在单个 SQL 语句中实现检索增强生成(RAG)
类似于语义搜索,pgai 的 LLM 函数允许你直接在数据库中实现 RAG。例如:
-
创建一个 RAG 函数:
CREATE OR REPLACE FUNCTION generate_rag_response(query_text TEXT) RETURNS TEXT AS $$ DECLARE context_chunks TEXT; response TEXT; BEGIN -- 执行相似性搜索以找到相关的博客文章 SELECT string_agg(title || ': ' || chunk, ' ') INTO context_chunks FROM ( SELECT title, chunk FROM blogs_embedding ORDER BY embedding <=> ai.openai_embed('text-embedding-3-small', query_text) LIMIT 3 ) AS relevant_posts; -- 使用 gpt-4o-mini 生成摘要 SELECT ai.openai_chat_complete( 'gpt-4o-mini', jsonb_build_array( jsonb_build_object('role', 'system', 'content', 'You are a helpful assistant. Use only the context provided to answer the question. Also mention the titles of the blog posts you use to answer the question.'), jsonb_build_object('role', 'user', 'content', format('Context: %s\n\nUser Question: %s\n\nAssistant:', context_chunks, query_text)) ) )->'choices'->0->'message'->>'content' INTO response; RETURN response; END; $$ LANGUAGE plpgsql;
-
在 SQL 查询中执行你的函数:
SELECT generate_rag_response('Give me some startup advice');
参与其中
pgai 仍处于早期阶段。现在正是帮助塑造这个项目方向的好时机;我们目前正在决定优先事项。查看我们正在考虑的功能列表吧。欢迎发表评论、扩展列表或加入讨论论坛。
要开始,看看如何贡献和如何设置开发/测试环境。
关于 Timescale
Timescale 是一家 PostgreSQL 数据库公司。想了解更多,请访问 timescale.com。
Timescale Cloud 是一个高性能、开发者专注的云平台,提供用于最苛刻的 AI、时间序列、分析和事件工作负载的 PostgreSQL 服务。Timescale Cloud 非常适合生产应用,拥有高可用性、流式备份、逐步升级、角色与权限以及出色的安全性。