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

发布时间:2026/11/15 1:31:35

如何用 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/11/12 21:17:14

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/11/1 7:23:47

如何用 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/11/15 1:27:54

榄核考电工证过期了怎么复审?郑州报考避坑指南全解析

榄核考电工证过期了怎么复审?郑州报考避坑指南全解析 证书过期了不知道怎么复审延期,这事儿我太懂了。前两天还有个老哥们儿,电工证都快黄了,慌得不行,跑来找我问流程,结果一查发现他根本不符合复审条件。这种事情在咱们这个圈儿里太常见了,…

2026/11/15 1:27:54

钦州港电工证保姆级教程:不怕被中介坑,这几点必须知道

钦州港电工证保姆级教程:不怕被中介坑,这几点必须知道 不知道去哪报名怕被中介坑,这是很多想要报考钦州港电工证的朋友最担心的问题。随着国家对安全生产和应急管理的重视程度不断加深,电工证作为一项重要资质,直接影响到从业者的就业机会和职业发展空间…

2026/11/15 1:27:54

梅州电工证年审需什么?考前押题帮你避开复审雷区

梅州电工证年审需什么?考前押题帮你避开复审雷区 证书过期了不知道怎么复审延期?你不是一个人在战斗。在梅州,很多电工从业者都曾陷入“证书过期”后的手忙脚乱,甚至被单位辞退或面临执法检查处罚。别慌,这篇文章会一步步教你完成梅州电工证年审流程,还…

2026/11/15 1:27:54

色盲能考高压电工证吗?过来人良心建议,别走弯路

色盲能考高压电工证吗?过来人良心建议,别走弯路 之前考的证在外省能不能转过来?这个问题几乎每个想从事特种作业的小伙伴都会问。如果你正在纠结【色盲能考高压电工证吗】,那这篇内容你一定要看完,里面不光有权威机构的建议,还有实操流程、考试内容、避…

2026/11/15 1:27:54

包头考电工证在哪了多少钱能搞定就业难题

包头考电工证在哪了多少钱能搞定就业难题 你是不是正愁找不到工作,因为 急需特种作业证才能上岗找工作 ?别急,今天就来聊聊【包头考电工证在哪了】,还有 多少钱 的问题,帮你一次性搞懂电工证怎么考、怎么用、怎么省钱!…

2026/11/15 0:02:49

电工证考试口诉怎么准备值不值得考

电工证考试口诉怎么准备值不值得考 实操考试心里没底怕挂科,这是大多数准备考电工证的人心里最真实的感受。尤其是面对【电工证考试口诉】环节,很多人不知道该怎么准备,甚至担心自己说不好就被淘汰。其实,只要掌握方法, 值不值得考…

2026/11/15 0:02:49

桑植县考电工证千万别踩坑!报名全流程教你避坑

桑植县考电工证千万别踩坑!报名全流程教你避坑 你是不是也遇到过这种情况:想考个电工证,但不知道从哪儿下手,怕被中介坑,怕花冤枉钱,更怕考了证还不能用?别急,这正是你该看这篇文章的原因。在桑植县考电工证,确实有很多人被坑过,但只要你知道流程、…

2026/11/15 0:02:49

电工证考试口诉怎么准备值不值得考

电工证考试口诉怎么准备值不值得考 实操考试心里没底怕挂科,这是大多数准备考电工证的人心里最真实的感受。尤其是面对【电工证考试口诉】环节,很多人不知道该怎么准备,甚至担心自己说不好就被淘汰。其实,只要掌握方法, 值不值得考…

2026/11/15 0:02:49

桑植县考电工证千万别踩坑!报名全流程教你避坑

桑植县考电工证千万别踩坑!报名全流程教你避坑 你是不是也遇到过这种情况:想考个电工证,但不知道从哪儿下手,怕被中介坑,怕花冤枉钱,更怕考了证还不能用?别急,这正是你该看这篇文章的原因。在桑植县考电工证,确实有很多人被坑过,但只要你知道流程、…

2026/11/13 22:32:11

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/13 12:14:39

SSM电子书店源码全解析:结构、原理、部署与排错实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

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

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

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