肖恩·M·托马斯:PG星期五:一首肮脏的Postgres小调
内容提要
Postgres和AI可以共同工作,以增强数据库的功能。通过使用大型语言模型(LLMs),可以通过将数据库中的数据提供给它们来提高响应的准确性和相关性。通过使用pgvector等扩展将向量存储在数据库中,可以将Postgres转化为LLM。文章解释了向量摄入的过程以及如何使用向量相似性检索信息。对于较小的项目,建议使用本地LLM,如Mixtral 7B模型。文章还提供了解析文本、生成向量和查询数据库的代码示例。总的来说,AI和Postgres的集成可以极大地增强自然语言处理和搜索能力。
延伸解读
RAG 如何让 Postgres 与 LLM 协同工作
文章指出,RAG(检索增强生成)的核心思路是让数据库充当中间件:先将用户问题转化为向量,从 Postgres 中检索出相关数据行,再将这些行连同原问题一起喂给 LLM。这样无需为每个用例微调模型,就能提高回答的准确性和相关性。Postgres 擅长存储和按条件检索数据,正好弥补 LLM 过于通用、缺乏具体上下文的短板。
本地小模型生成向量的成本优势
文章强调,生成向量不必依赖 OpenAI 等付费 API。使用 all-MiniLM-L6-v2 这类仅 90MB 的句子转换器,可在本地运行并生成 384 维向量。作者用该模型处理了 101 篇文章,生成并存储了 2716 个向量,没有支付任何 API 费用。对于中小项目,这种本地小模型足以计算用户问题与已有语料的相对相似度,避免按次调用累积账单。
分块与检索策略的实际考量
文章提到,小模型向量空间有限,因此将文章按段落切分成块,每块单独生成向量。检索时先用 pgvector 的 <-> 运算符找出最接近的 10 个块,再按同一文章出现次数加权,取前 3 个作为参考。作者解释,这样做是因为每篇文章有统一主题,多次命中的文章更可能提供相关背景。同时限制参考数量,避免超出 LLM 的提示长度限制。
本地 LLM 与提示模板的约束作用
文章使用 Dolphin-Mixtral-8X7B 这一本地模型,并设计明确的系统提示,将 LLM 限定为 PostgreSQL 专家,要求其优先参考检索到的片段,并拒绝回答与 Postgres 无关的问题。作者指出,提示模板是 LLM 交互的关键,能防止模型偏离主题。虽然仍可能存在边缘情况,但这种方式在大多数场景下能提供专注且基于上下文的回答。
Q&A
Postgres如何与AI结合以增强数据库功能?
Postgres通过与大型语言模型(LLMs)结合,利用数据库中的数据来提高响应的准确性和相关性,从而增强其功能。
什么是RAG(检索增强生成)?
RAG是一种利用数据库存储的数据来优化大型语言模型输入的技术,旨在提高生成响应的准确性。
如何在Postgres中实现向量存储?
通过使用pgvector扩展,可以在Postgres中实现向量存储和处理,允许数据库直接处理向量数据。
使用小型LLM生成向量的过程是怎样的?
使用小型LLM(如MiniLM)生成向量时,首先将文本转换为向量,然后将这些向量存储在Postgres数据库中以供检索。
Mixtral 7B模型的优势是什么?
Mixtral 7B模型被认为是当前表现最好的LLM之一,能够在某些任务上超越70B参数的模型,并且可以在消费者GPU硬件上运行。
如何设计查询以检索与用户问题相关的向量信息?
可以设计一个查询,通过向量相似性检索,获取与用户问题最相关的向量信息,并返回相应的文本块。