如何用 InsForge 的 pgvector 实现语义搜索:向量列、嵌入生成与 HNSW 索引

发布时间:2026/9/15 19:23:28

如何用 InsForge 的 pgvector 实现语义搜索:向量列、嵌入生成与 HNSW 索引 如何用 InsForge 的 pgvector 实现语义搜索向量列、嵌入生成与 HNSW 索引【免费下载链接】InsForgeThe all-in-one, open-source backend platform for agentic coding. InsForge gives your coding agent database, auth, storage, compute, hosting, and AI gateway to ship full-stack apps end-to-end.项目地址: https://gitcode.com/GitHub_Trending/in/InsForge本文解决一个具体任务在 InsForge 项目里用内置的 Postgres 和 pgvector 扩展搭出一条完整的语义搜索链路——创建向量列、服务端生成嵌入并写入、按余弦距离查询并在数据量变大后加上 HNSW 索引。每个 InsForge 项目都自带 pgvector见 pgvector 文档不需要额外安装数据库扩展。前置条件按 CLI 设置文档 完成登录并关联项目后还需要一个 OpenRouter API keyInsForge 的 Model Gateway 会为项目签发 OpenRouter key在 dashboard 中复制存到环境变量OPENROUTER_API_KEY用法详见 Model Gateway 文档 和 TypeScript AI 参考。npx insforge/cli login npx insforge/cli linkTypeScript AI 文档 明确要求不要把OPENROUTER_API_KEY放进浏览器 bundleOpenRouter 调用必须放在后端路由、server action 或 function 等服务端边界之后。下面的嵌入生成代码都应放在服务端。TypeScript 侧安装两个依赖npm install openai insforge/sdklatest第一步用迁移创建向量列InsForge 的 schema 变更走 迁移文件migrations/目录下按时间戳排序的.sql文件由 CLI 在事务中逐个应用成功记录写入system.custom_migrations流程是 forward-only 的。文件内不允许出现BEGIN/COMMIT/ROLLBACK。新建迁移文件npx insforge/cli db migrations new create-documents-table在生成的.sql文件中写入建表和建向量列的 SQL。注意vector(1536)的维度必须与嵌入模型一致——pgvector 文档 以 OpenRouter 的text-embedding-3-small1536 维为例create extension if not exists vector; create table documents ( id bigserial primary key, content text, embedding vector(1536) );应用迁移并核对历史npx insforge/cli db migrations up --all npx insforge/cli db migrations listup --all应用所有待执行的迁移也可以用up version只应用单个文件、up --to version应用到指定版本为止。list用于确认本次迁移已被记录。第二步服务端生成嵌入并写入嵌入在服务端生成后随行写入documents表代码与 pgvector 文档 一致import OpenAI from openai; import { createClient } from insforge/sdk; const openai new OpenAI({ baseURL: https://openrouter.ai/api/v1, apiKey: process.env.OPENROUTER_API_KEY, }); const insforge createClient({ projectId: process.env.INSFORGE_PROJECT_ID }); const { data } await openai.embeddings.create({ model: openai/text-embedding-3-small, input: hello world, }); await insforge.database.from(documents).insert({ content: hello world, embedding: data[0].embedding, });其中input是你要索引的文本data[0].embedding是 1536 维向量直接作为embedding列的值。SDK 客户端初始化除上文的projectId写法外SDK 安装说明 还给出了baseUrlanonKey的配置方式anon key 可用npx insforge/cli secrets get ANON_KEY或在 dashboard 的Install→API Keys中找到按你的部署方式取其一即可。TypeScript 数据库参考 中.insert()返回{ data, error }链上.select()可把刚插入的行取回来核对。第三步按余弦距离查询并包成 RPCpgvector 提供三种距离算子余弦距离、L2 距离-、内积#。最直接的查询是select id, content from documents order by embedding $1 limit 5;这里的$1是查询向量参数即把用户 query 用同一个模型openai/text-embedding-3-small嵌入后得到的 1536 维向量由客户端以参数形式传入。文档推荐把搜索包进 Postgres 函数、通过rpc()调用让距离计算留在服务端。先加一个函数同样写成迁移文件应用create or replace function match_documents( query_embedding vector(1536), match_count int default 5, match_threshold float default 0 ) returns table (id bigint, content text, similarity float) language sql stable as $$ select id, content, 1 - (embedding query_embedding) as similarity from documents where 1 - (embedding query_embedding) match_threshold order by embedding query_embedding limit match_count; $$;函数把余弦距离换算成similarity 1 - 距离match_threshold过滤低于阈值的匹配match_count控制返回条数默认 5。应用后TypeScript 侧按 数据库参考 的rpc()形式调用const { data, error } await insforge.database.rpc(match_documents, { query_embedding: embedding, // 与写入时同一模型生成的 1536 维向量 match_count: 5, match_threshold: 0.5, });embedding由你的 query 文本经第二步同样的openai.embeddings.create生成match_count和match_threshold按业务需要取值函数签名中有默认值5 和 0。第四步数据量超过 ~10k 行时加 HNSW 索引pgvector 文档 给出的判断标准是超过约 10k 行后再加 HNSW 索引同样通过迁移文件应用create index on documents using hnsw (embedding vector_cosine_ops);vector_cosine_ops与查询使用的余弦距离对应。文档总览中也说明 pgvector 同时支持 HNSW 和 IVFFlat 两类索引见 Database 总览。验证与限制迁移是否生效npx insforge/cli db migrations list中能看到本次迁移已应用的迁移不能原地修改只能新写一个 forward 迁移。查询是否工作match_documents的返回列为id、content、similarity其中similarity由函数计算1 - 余弦距离error为null且data非空说明链路通了。维度必须一致vector(1536)与text-embedding-3-small的 1536 维对应换嵌入模型时要同步改列维度。写入路径是 forward-only 的事务迁移迁移文件内不允许BEGIN/COMMIT/ROLLBACK。key 只在服务端OPENROUTER_API_KEY不能进浏览器 bundle嵌入生成必须放在服务端边界之后。更多算子和索引细节可参考文档末尾给出的 pgvector 与 OpenRouter embeddings 链接见 pgvector 文档InsForge 侧的 OpenRouter 配置见 Model Gateway 总览。【免费下载链接】InsForgeThe all-in-one, open-source backend platform for agentic coding. InsForge gives your coding agent database, auth, storage, compute, hosting, and AI gateway to ship full-stack apps end-to-end.项目地址: https://gitcode.com/GitHub_Trending/in/InsForge创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
延伸阅读

更多相关文章

2026/9/15 19:18:28

OpenSEO 2026路线图:开源SEO工具即将推出的新功能全解读

OpenSEO 2026路线图:开源SEO工具即将推出的新功能全解读 【免费下载链接】open-seo Open source alternative to Semrush and Ahrefs 项目地址: https://gitcode.com/GitHub_Trending/op/open-seo OpenSEO 是一款开源的 SEO 工具,定位是 Semrush …

2026/9/15 19:18:28

如何用 yq 的 pick 按指定顺序保留映射键并用 omit 剔除键

如何用 yq 的 pick 按指定顺序保留映射键并用 omit 剔除键 【免费下载链接】yq yq is a portable command-line YAML, JSON, XML, CSV, TOML, HCL and properties processor 项目地址: https://gitcode.com/GitHub_Trending/yq/yq 处理 YAML 文件时经常遇到这样的需求&a…

2026/9/15 19:48:29

Loop macOS 窗口管理指南:4 个要点把杂乱桌面理顺

Loop macOS 窗口管理指南:4 个要点把杂乱桌面理顺 【免费下载链接】Loop Window management made elegant. 项目地址: https://gitcode.com/GitHub_Trending/lo/Loop 你的桌面大概是这样的:聊天、文档、浏览器互相叠在一起,拖来拖去排…

2026/9/15 19:48:29

如何用 ITCH 订单数据计算 Lee-Ready 聚合交易方向

如何用 ITCH 订单数据计算 Lee-Ready 聚合交易方向 【免费下载链接】machine-learning-for-trading Code for Machine Learning for Trading, 3rd edition — from data sourcing to live execution. 项目地址: https://gitcode.com/GitHub_Trending/ma/machine-learning-for…

2026/9/15 19:43:29

机器学习中线性代数的核心应用与优化技巧

1. 为什么机器学习离不开线性代数?第一次接触机器学习时,我完全没意识到线性代数的重要性。直到在实现第一个线性回归模型时,发现连最简单的梯度下降都写不出来,才意识到矩阵运算就像空气一样无处不在。举个实际例子:当…

2026/9/15 4:54:30

拯救者Y7000黑屏故障排查与维修实战指南

1. 项目概述:一台黑屏的拯救者Y7000,到底卡在哪一步? 联想拯救者Y7000系列笔记本,从2018年第一代搭载i5-8300H开始,到后来的i7-9750H、i7-10750H、i5-11400H,再到2023年款的R7-7840HS,它始终是学…

2026/9/15 0:01:16

AI英语单词APP开发:自适应学习算法与移动端优化实践

1. 项目概述 作为一名在移动应用开发领域摸爬滚打多年的老手,我最近完成了一个AI英语单词APP的开发项目。这个项目将传统单词记忆方法与现代AI技术相结合,打造了一款能够智能适应不同用户学习习惯的英语学习工具。 市面上大多数单词APP都存在一个通病&a…

2026/9/15 0:01:16

Flutter与OpenHarmony结合开发手语学习APP实战

1. 项目背景与核心价值作为一名同时接触过Flutter和OpenHarmony的开发者,最近我完成了一个基于Flutter for OpenHarmony的手语学习APP实战项目。这个项目最大的特点在于实现了跨平台框架与国产操作系统深度结合的创新实践——用Flutter开发的应用能完美运行在OpenHa…

2026/9/15 0:01:16

六个月成为机器人工程师:从ROS2到SLAM的实战路径

1. 六个月的紧迫感从哪来:先搞清楚你要成为哪种机器人工程师说实话,六个月的期限并不是一个宽松的时间线。市面上任何一本正经的机器人学教材都超过五百页,ROS2的官方文档可以翻到你怀疑人生,再加上ABB、KUKA这些工业机器人厂家动…

2026/9/15 14:22:53

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/14 13:53:59

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/15 11:42:23

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
咨询二维码