在 Laravel 应用中查找相关内容通常意味着构建自定义查询或依赖关键字匹配,但这会忽略语义关联。Laravel 相关内容,由……创建 弗拉迪斯拉夫·斯托伊佐夫 使用了向量嵌入和 PostgreSQL 的 向量 该扩展程序能够基于语义而非关键词,自动发现并链接不同模型类型中的相关内容。截至撰写本文时,该软件包仍处于测试阶段。
该软件包会在节省时间的时候预先计算关系并将其存储为数据库记录,因此检索相关内容只需执行标准的数据库查询(约 5 毫秒),而无需在每次页面加载时进行实时相似性搜索。
主要特点
- 预先计算的相关链接 相关内容是在保存时计算的,而不是每次页面加载时计算的。
- 快速查找 使用 O(1) 关系查询代替实时相似性搜索
- 跨模型关系 :查找不同模型类型中的相关内容(例如,文章可以显示相关的活动或社区链接)
- 多个嵌入提供商 支持 OpenAI 和 Ollama
- 队列支持 在后台处理嵌入
- 语义搜索 按含义搜索内容,而不仅仅是关键词
入门
该软件包需要安装了 pgvector 扩展的 PostgreSQL 数据库。如果您尚未启用 pgvector 扩展,请在数据库中运行以下命令:
创造
扩大
如果
不是
存在
向量;
安装软件包并运行其迁移后,请配置您的嵌入提供程序。
.env
对于 OpenAI:
相关内容提供商
= 打开OPENAI_API_密钥
=您的API密钥OPENAI_EMBEDDING_MODEL
=text-embedding-3-smallOPENAI_EMBEDDING_DIMENSIONS
=1536
或者对于本地 Ollama 实例:
相关内容提供商
=是OLLAMA_BASE_URL
=http://localhost:11434OLLAMA_EMBEDDING_MODEL
=nomic-embed-textOLLAMA_EMBEDDING_DIMENSIONS
=768
向模型添加相关内容
添加
HasRelatedContent
为任何模型添加特征,并定义用于生成嵌入的字段:
班级
文章
延伸
模型{
使用
有相关内容
;
民众
功能
可嵌入字段
()
:
大批{
返回
[
'标题'
,
'摘抄'
,
'内容'
];}}
保存模型时,该软件包会根据指定的字段生成嵌入,并在所有已配置的模型中查找相关内容。
获取相关内容
通过一次方法调用检索相关模型:
// 获取所有相关模型相关
=
$文章
->
获取相关模型
();// 限制结果数量相关
=
$文章
->
获取相关模型
(
5
(英文):// 获取特定类型的相关模型$事件
=
$文章
->
获取相关类型
(
事件
::班级
(英文):
由于关系是预先计算好的,这些调用是标准的数据库查询,无需额外的 API 请求。
跨模型关系
该软件包的显著特点之一是能够跨不同模型链接内容。请注册应参与跨模型关系的模型。
config/related-content.php
该软件包会自动查找它们之间的关联。一篇关于“Laravel 测试”的文章可能会指向相关的会议活动或社区链接。
“模型”
=>
[
\App\Models\Article
::班级
,
\App\Models\Event
::班级
,
\App\Models\CommunityLink
::班级
,],
然后,通过语义而不是确切的关键词,对所有已配置的模型进行语义搜索:
$服务
=
应用程序
(
相关内容服务
::班级
(英文):$结果
=
$服务
->
搜索
(
Laravel AI 工具和最佳实践
(英文):
此功能会根据查询与已存储嵌入的语义相似性,从任何已注册的模型类型中返回匹配的内容。
重建嵌入
使用内置的 Artisan 命令为现有记录生成嵌入,或在更改可嵌入字段后重新生成嵌入:
# 缺少嵌入的过程模型php
工匠
相关内容:重建# 处理特定模型(仅缺失)php
工匠
相关内容:重建
"App\Models\Article"# 重新生成所有嵌入php
工匠
相关内容:重建
- 力量# 同步处理,而不是排队处理php
工匠
相关内容:重建
--同步
活动
包裹还会寄送一份
RelatedContentSynced
当关系更新时,可以触发额外的逻辑,例如缓存失效或通知。
要了解更多 Laravel 相关内容并查看源代码,请访问 GitHub 存储库 。





