pgvecto.rs 项目中的自动生成嵌入向量功能探讨
在向量数据库pgvecto.rs项目中,开发者们正在讨论一个非常有价值的功能:在插入数据行时自动为文本字段生成嵌入向量(embedding)。这一功能将极大简化用户构建基于向量检索的应用流程。
功能设计思路
最初提出的方案是使用PostgreSQL的生成列(GENERATED ALWAYS AS STORED)特性,通过类似以下的SQL语句实现:
CREATE TABLE items (
...,
content text,
embedding vector(n) GENERATED ALWAYS AS (generate_embedding(content)) STORED
);
这种设计理念是当用户插入或更新content字段时,数据库会自动调用generate_embedding函数为文本生成向量表示,并存储在embedding列中。
技术实现挑战
然而,经过深入讨论发现这种方案存在技术限制。PostgreSQL的生成列要求表达式必须是不可变的(immutable),而向量生成函数由于涉及IO操作,必须标记为易变的(volatile)。这意味着无法直接使用生成列来实现这一功能。
替代解决方案
项目团队提出了使用触发器(trigger)的替代方案。通过创建一个BEFORE INSERT OR UPDATE触发器,在数据插入或更新前自动调用向量生成函数:
CREATE OR REPLACE FUNCTION update_embedding_column()
RETURNS TRIGGER AS
$$
BEGIN
NEW.embedding := generate_embedding(NEW.content);
RETURN NEW;
END;
$$
LANGUAGE plpgsql;
CREATE TRIGGER calculate_embedding
BEFORE INSERT OR UPDATE ON items
FOR EACH ROW
EXECUTE FUNCTION update_embedding_column();
这种方案虽然不如生成列简洁,但能够绕过PostgreSQL的限制,实现相同的功能目标。
功能实现进展
在后续开发中,项目团队已经实现了text2vec_openai和text2vec_openai_v3等向量生成函数。这些函数支持用户指定模型或使用默认的text-embedding-3-small模型来生成向量。
实际应用建议
值得注意的是,团队建议用户考虑创建专门的表来存储向量数据,而不是直接在原表上操作。这种设计模式可以更好地管理向量数据,提高系统灵活性。
总结
虽然自动生成嵌入向量的功能在数据库层面实现存在一定挑战,但pgvecto.rs项目通过触发器等技术手段提供了可行的解决方案。随着相关向量生成函数的不断完善,这一功能将为开发者构建AI应用提供极大便利。
atomcodeClaude Code 的开源替代方案。连接任意大模型,编辑代码,运行命令,自动验证 — 全自动执行。用 Rust 构建,极致性能。 | An open-source alternative to Claude Code. Connect any LLM, edit code, run commands, and verify changes — autonomously. Built in Rust for speed. Get StartedRust0151- DDeepSeek-V4-ProDeepSeek-V4-Pro(总参数 1.6 万亿,激活 49B)面向复杂推理和高级编程任务,在代码竞赛、数学推理、Agent 工作流等场景表现优异,性能接近国际前沿闭源模型。Python00
LongCat-Video-Avatar-1.5最新开源LongCat-Video-Avatar 1.5 版本,这是一款经过升级的开源框架,专注于音频驱动人物视频生成的极致实证优化与生产级就绪能力。该版本在 LongCat-Video 基础模型之上构建,可生成高度稳定的商用级虚拟人视频,支持音频-文本转视频(AT2V)、音频-文本-图像转视频(ATI2V)以及视频续播等原生任务,并能无缝兼容单流与多流音频输入。00
auto-devAutoDev 是一个 AI 驱动的辅助编程插件。AutoDev 支持一键生成测试、代码、提交信息等,还能够与您的需求管理系统(例如Jira、Trello、Github Issue 等)直接对接。 在IDE 中,您只需简单点击,AutoDev 会根据您的需求自动为您生成代码。Kotlin03
Intern-S2-PreviewIntern-S2-Preview,这是一款高效的350亿参数科学多模态基础模型。除了常规的参数与数据规模扩展外,Intern-S2-Preview探索了任务扩展:通过提升科学任务的难度、多样性与覆盖范围,进一步释放模型能力。Python00
skillhubopenJiuwen 生态的 Skill 托管与分发开源方案,支持自建与可选 ClawHub 兼容。Python0111