当前位置:首页 > 技术 > 正文内容

Laravel 12 原生 AI 开发工具包深度解析

访客 技术 2026年5月5日 14:22 10

Laravel 框架一直致力于提升开发效率,提供优雅的语法处理各类任务。在 Laravel 12 中,官方推出了原生的 Laravel AI SDK,为构建智能化应用提供了一站式解决方案。无需再为接入 OpenAI、Anthropic 或 Gemini 等不同厂商而分别引入第三方库,也无需手动维护对话上下文。

SDK 核心概述

该工具包提供了一套统一且表达力强的 API,支持对接主流大模型供应商(如 OpenAI、Anthropic、Gemini、Mistral 等)。开发者无需编写原生的 HTTP 请求或学习各厂商不同的 SDK 用法,即可实现以下功能:

  • 构建智能体(聊天机器人、虚拟助手)。
  • 处理结构化数据输出(JSON)。
  • 图像生成与视觉分析。
  • 语音合成与识别(TTS/STT)。
  • 文本嵌入与重排序。

环境准备与安装

通过 Composer 即可快速安装此官方扩展包:

composer require laravel/ai

安装完成后,发布配置文件并执行数据库迁移。迁移会自动创建 ai_dialoguesai_dialogue_records 数据表,用于持久化聊天记录。

php artisan vendor:publish --provider="Laravel\Ai\AiServiceProvider"
php artisan migrate

相关凭证配置位于 config/ai.php.env 环境变量中,填入对应的 API Key 即可启用服务。

核心机制:智能体

在本 SDK 中,最基础的抽象单元是 Agent(智能体)。它是一个封装了提示词、工具及上下文的 PHP 类。使用 Artisan 命令可快速创建:

php artisan make:agent MarketingExpert

该命令会在指定目录生成类文件,允许你定义其行为逻辑和角色设定。重构后的示例代码如下:

namespace App\Ai\Agents;

use App\Models\User;
use Laravel\Ai\Contracts\Agent;
use Laravel\Ai\Promptable;

class MarketingExpert implements Agent
{
    use Promptable;

    public function __construct(public User $authUser) {}

    /**
     * 定义智能体的核心行为准则
     */
    public function instructions(): string
    {
        return '你是一位资深的营销顾问。请评估用户的策略并提供优化建议。';
    }
}

调用时,只需实例化该类并触发 prompt 方法:

use App\Ai\Agents\MarketingExpert;

$feedback = (new MarketingExpert($authUser))->prompt('如何提高广告转化率?');

echo $feedback;

内置高级特性

1. 自动对话记忆

上下文管理一直是聊天机器人的痛点。SDK 提供了 RemembersConversations 特性,可自动从数据库读取历史消息并追加新记录。

use Laravel\Ai\Concerns\RemembersConversations;

class CustomerSupportBot implements Agent, Conversational
{
    use Promptable, RemembersConversations; 
    // ...
}

// 调用方式
$reply = (new CustomerSupportBot)->forUser($authUser)->prompt('我的退款进度如何?');

2. 结构化数据输出

当需要大模型返回可供代码直接处理的数组而非纯文本时,可实现 HasStructuredOutput 接口。通过流式构造器定义数据模式,SDK 将保证返回合规的 JSON。

public function schema(JsonSchema $schema): array
{
    return [
        'emotion' => $schema->string()->enum(['happy', 'angry']),
        'confidence' => $schema->integer()->min(0)->max(100),
    ];
}

3. 多模态与附件支持

若需解析图片或文档,可直接在 prompt 方法中传入附件。SDK 会处理底层复杂的文件上传逻辑。

use Laravel\Ai\Files;

$analysis = (new DocumentParser)->prompt(
    '请提取此图表中的关键指标',
    attachments: [
        Files\Image::fromPath('/storage/reports/chart.png')
    ]
);

4. 响应流式输出

为了提升交互体验,通常需要逐字输出模型生成的文本。SDK 提供了 stream() 方法,与 Server-Sent Events (SSE) 配合极佳。

Route::get('/stream-chat', function () {
    return (new MarketingExpert)->stream('简述内容营销的趋势。');
});
标签: Laravel

相关文章

Linux crontab 详解

1) crontab 是什么cron 是 Linux 的定时任务守护进程;crontab 是用来编辑/查看“按时间周期执行命令”的表(cron table)。常见两类:用户 crontab:每个用户一份(crontab -e 编辑)系统级 crontab / cron.d:可指定执行用户(/etc/crontab、/etc/cron.d/*)2) crontab 时间...

富文本里可以允许的 HTML 属性

一、所有标签默认允许的安全属性(极少)class        (可选)id           (通常建议禁用)title️ 注意:id 容易被滥用做锚点注入,很多系统直接禁用class 允许的话最好只允许固定前缀(如 editor-*)二、a 标签允许属性<a href="" t...

Mac 安装 Node.js 指南

方法一:通过官网安装包(最简单,适合初学者)如果你只是想快速安装并开始使用,这是最直接的方法。访问 Node.js 官网。页面会显示两个版本:LTS (Recommended For Most Users):长期支持版,最稳定。建议选这个。Current:最新特性版,包含最新功能但可能不够稳定。下载 .pkg 安装包并运行。按照安装向导点击“下一步”即可完成。方法二:使用 Homebrew 安装(...

Dom\HTML_NO_DEFAULT_NS 的副作用:自动加闭合标签

在使用Dom\HTMLDocument时,Dom\HTML_NO_DEFAULT_NS 将禁止在解析过程中设置元素的命名空间, 此设置是为了与DOMDocument向后兼容而存在的。当使用它时,已知的一个副作用就是:自动加闭合标签例如 </img> 为什么会这样?当你使用:Dom\HTML_NO_DEFAULT_NS文档会变成 无命名空间模式,此时内部更接近 XML...

Laravel 事件和监听器创建

在 Laravel 中,使用 Artisan 命令创建 Events(事件) 和 Listeners(监听器) 是非常高效的。你可以通过以下几种方式来实现:1. 手动创建单个 Event如果你只想创建一个事件类,可以使用 make:event 命令:Bashphp artisan make:event UserRegistered执行后,文件将生成在 app/Even...

自定义域名解析神器 dnsmasq

什么是 dnsmasq?dnsmasq 是一个轻量级、功能强大的网络服务工具,专为小型和中等规模网络设计。它是一个综合的网络基础设施解决方案[1]。dnsmasq 能做什么?功能说明应用场景DNS 转发与缓存将 DNS 查询转发到上游服务器(ISP、Google DNS 等),并在本地缓存结果加快 DNS 查询速度,减少外部 DNS 流量本地 DNS解析本地网络设备的主机名,无需编辑&n...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。