Laravel 13 Vector Search(pgvector)面向在 Laravel 13 中实现语义/向量搜索的场景,核心依赖 PostgreSQL + pgvector,或 MariaDB 11.7+(自 13.27 起支持向量查询);MySQL/SQLite 不适用且没有回退方案。
主要能力:通过 Schema::ensureVectorExtensionExists() 启用向量扩展;提供查询构造器 whereVectorSimilarTo()、selectVectorDistance()、whereVectorDistanceLessThan()、orderByVectorDistance();支持传入原始字符串由 Laravel 经 AI SDK 自动生成嵌入;默认使用余弦相似度,可通过 minSimilarity(0.0-1.0)设置阈值。
使用方式:资料给出迁移示例,创建 documents 表,含 text content、vector('embedding', dimensions: 1536)->index()(HNSW 余弦索引)与时间戳;查询示例为 Document::query()->whereVectorSimilarTo('embedding', 'best wineries in Napa Valley', minSimilarity: 0.4)->limit(10)->get()。资料还描述了推荐架构:迁移文件中启用扩展、定义 vector(1536) 列与 HNSW 索引;Eloquent 模型将 embedding 转换为数组并使用 whereVectorSimilarTo;VectorSearchService 封装查询与阈值逻辑,并提供 Document 模型与 VectorSearchService 模板。
资料要求的工作流为:实现前并行启动三个 Agent(explore-codebase 检查数据库驱动与现有嵌入列、research-expert 核实 pgvector 版本及 HNSW 与 IVFFlat 取舍、context7 查询 Laravel 13 文档),实现后用 sniper 验证。
关键规则与限制:必须使用 PostgreSQL(pgvector)或 MariaDB 11.7+;应创建 HNSW 索引,否则大表查询退化为全表扫描;插入与查询的嵌入模型维度必须完全一致;应缓存嵌入,避免每次请求重新生成;嵌入模型应视为 schema 字段锁定,更换模型会使全部已存嵌入失效。最佳实践包括:批量插入前先建 HNSW 索引、随向量存储模型名称以检测漂移、minSimilarity 从 0.3-0.5 起步再调优、与经典 where() 组合做混合过滤;不要无索引查询数千行以上、不要在同一列混用嵌入模型、不要在循环内生成查询嵌入(用 Embeddings::for([...]) 批量)、不要把嵌入存为 JSON 字符串。