新闻详情

新闻详情

首页 / 资讯中心 / 详情

如何用 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),仅供参考
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

基于Vue3与Three.js的三维油藏模型可视化与交互切割实战 2026/9/15 21:50:59

基于Vue3与Three.js的三维油藏模型可视化与交互切割实战

做油田数字化项目越久越发现,模型好看只是表象,真正要命的是数据。要说三维可视化本身,Three.js的社区案例一抓一大把,但一旦把场景换成油藏模型,很多人立刻就卡住了——模型文件动不动几百MB、网格数据几十万甚至上百…

阅读更多 →
SurfSense 知识库优先(KB-First)落地机制:主 Agent 如何用实时数据接地事实答案 2026/9/15 21:50:59

SurfSense 知识库优先(KB-First)落地机制:主 Agent 如何用实时数据接地事实答案

SurfSense 知识库优先(KB-First)落地机制:主 Agent 如何用实时数据接地事实答案 【免费下载链接】SurfSense Open-source NotebookLM alternative. Research the open web with live data(Reddit, YT, IG, TikTok, Indeed, Google Search, Ma…

阅读更多 →
AI微服务配置中心实战:Nacos动态刷新与部署避坑指南 2026/9/15 21:50:59

AI微服务配置中心实战:Nacos动态刷新与部署避坑指南

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

阅读更多 →
PHP微信上墙大屏互动源码解析:从回调接入到部署上线 2026/9/15 21:50:59

PHP微信上墙大屏互动源码解析:从回调接入到部署上线

简介:基于PHP打造的微信上墙大屏幕现场互动源码V7.24,面向活动会议、晚会演出等场景,为PHP开发者与活动运营方提供一套可直接部署的微信互动大屏方案,适合具备一定PHP基础并希望掌握微信开发实战的读者。压缩包内共2000个文件&…

阅读更多 →
Cataclysm-DDA Mind Over Matter 模组:异能觉醒(Awakening)与习得机制完全指南 2026/9/15 21:50:59

Cataclysm-DDA Mind Over Matter 模组:异能觉醒(Awakening)与习得机制完全指南

Cataclysm-DDA Mind Over Matter 模组:异能觉醒(Awakening)与习得机制完全指南 【免费下载链接】Cataclysm-DDA Cataclysm - Dark Days Ahead. A turn-based survival game set in a post-apocalyptic world. 项目地址: https://gitcode.co…

阅读更多 →
k-means++初始化:让KMeans聚类更稳更优的默认选择 2026/9/15 21:47:59

k-means++初始化:让KMeans聚类更稳更优的默认选择

如果你用过sklearn里的KMeans,大概率会注意到一个默认参数:initk-means。大多数教程都会叫你“保持默认,不要动”,但很少说清楚它到底是什么、为什么好用。k-means不是新聚类算法,它只是k-means的一个初始化策略&#…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞