内容提要
本文介绍了向量数据库的必要性和使用pg_vectorize生成和搜索嵌入向量的方法。pg_vectorize提供了管理转换的方法,并支持定时和实时更新嵌入向量。支持的嵌入模型包括OpenAI和Hugging Face的模型。
延伸解读
嵌入生命周期管理:超越一次性生成
文章强调,嵌入的生成并非一次性任务,而是一个需要持续维护的生命周期。每当源数据新增或更新时,都必须重新计算嵌入;同时,每次搜索请求也需要将查询文本转换为嵌入。pg_vectorize 通过基于时间的调度或实时触发两种方式管理这一过程,并利用 pgmq 队列和后台工作器处理转换任务,从而帮助开发者应对数据变化带来的嵌入更新需求。
模型一致性:确保搜索可靠性的关键
在向量数据库中,查询文本必须使用与生成存储嵌入相同的模型和预处理步骤转换为嵌入,否则搜索结果将不可靠。pg_vectorize 通过跟踪每个任务(job_name)所使用的转换器模型来解决这一问题,确保搜索时自动使用相同的模型生成查询嵌入。例如,使用 OpenAI 的 text-embedding-ada-002 模型生成的嵌入,也必须用同一模型进行搜索。
灵活切换模型:支持快速迭代与多源嵌入
pg_vectorize 支持所有 OpenAI 的嵌入模型以及 Hugging Face 上的 Sentence Transformer 模型,包括私有模型。开发者只需更改 transformer 参数即可切换模型,而原有嵌入仍然可用。这种灵活性允许团队快速尝试新模型,而无需重建整个系统。文章示例展示了如何从 all-MiniLM-L6-v2 切换到 OpenAI 的 text-embedding-ada-002,并同时保留两种嵌入的搜索能力。
直接操作嵌入:transform_embeddings 的进阶用法
除了通过 vectorize.search 进行搜索,pg_vectorize 还提供 vectorize.transform_embeddings 方法,允许直接将文本转换为嵌入。这为开发者提供了更大的灵活性,例如在复杂查询中手动执行相似度计算或与其他表进行连接。文章演示了如何手动重建 vectorize.search 背后的 SQL,使用余弦距离操作符 <=> 和 transform_embeddings 函数来实现自定义搜索逻辑。
Q&A
向量数据库的必要性是什么?
向量数据库的必要性源于对嵌入的高效存储、索引和搜索需求。
pg_vectorize如何生成和搜索嵌入向量?
pg_vectorize通过跟踪生成嵌入所用的变换模型,支持实时和定时更新嵌入向量。
如何在Tembo Cloud上启动VectorDB实例?
可以在Tembo Cloud上免费启动VectorDB实例,或在本地运行docker-compose示例。
pg_vectorize支持哪些嵌入模型?
pg_vectorize支持所有OpenAI和Hugging Face的嵌入模型,包括私有模型。
如何管理嵌入的更新?
pg_vectorize提供基于时间的调度和实时触发两种管理嵌入更新的方法。
如何将文本转换为嵌入?
可以直接通过vectorize.transform_embeddings方法将文本转换为嵌入。