如何让 Laravel 应用进化为顶级智能体

0 阅读5分钟

AI 年代,连 Laravel 都来凑热闹了。对,我说的就是 Laravel AI SDK,为开发者提供了一套统一的 API,用于对接 OpenAI、Anthropic、Gemini 等主流 AI 模型。总之,过去那种手写 API 请求、肉眼调优提示词的苦日子已经彻底终结了,Laravel 又升级了。

Laravel AI SDK 的功能亮点

Laravel AI SDK 其实就是为了简化AI交互流程而设计的,开发者能够像操作数据库一样操作 AI 模型。

统一的供应商接口

以前不同的 AI 平台需要编写不同的集成代码,现在就不用了,用一套一致的 PHP 语法,就可以在不同的底层模型(如 GPT-4、Claude 3.5 或 Gemini Pro)之间无缝切换。这种设计规避了供应商锁定的风险,也方便根据成本或性能需求灵活调整。

智能体架构

Agent 是这个 SDK 的逻辑单元。它将提示词指令、上下文管理、可用工具和输出格式封装在一个 PHP 类中,这样的话,复杂的业务逻辑(如销售分析、代码审查或客服支持)可以被模块化处理。

结构化输出与工具调用

SDK 支持强制模型返回符合特定模式(Schema)的 JSON 数据,对自动化流程来说是非常重要的。此外,通过定义工具,AI 能够调用本地函数,实现从数据库检索信息或执行数学运算等操作。

多模态与增强检索

除了文本生成,SDK 还涵盖了图像生成、语音转文字(STT)、文字转语音(TTS)以及向量嵌入(Embeddings)。配合 PostgreSQL 的 pgvector 扩展,开发者可以快速实现基于语义搜索的知识库系统。

写代码的时候,可以选择轻量且可扩展的 VS CodeCursor。配合官方的 Laravel 扩展,这些编辑器能提供语法高亮、代码片段以及针对 Eloquent 模型和路由的智能补全。

如果追求更稳健的开发体验,PhpStorm 提供了深度的框架集成。它内置了对 Blade 模板、组件导航以及代码生成的全面支持。对于希望在浏览器中直接开发的开发者,Firebase Studio 则提供了零配置的云端环境。

部署基础环境

在本地开发 Laravel AI 应用之前,需要搭建一个可靠的 PHP 运行环境。比如,ServBay 是能一键完成 PHP 环境的部署。

  • 一键安装:ServBay 整合了 Nginx、MariaDB、PostgreSQL 和 Redis。

  • 多版本支持:支持 PHP 8.2 及更高版本,满足 Laravel SDK 的最低要求。

  • 向量数据库支持:ServBay 提供的 PostgreSQL 方便开启 pgvector 扩展,这是实现向量搜索(RAG)的基础。

安装 ServBay 后,只需在面板中添加站点,并将根目录指向 Laravel 项目的 public 文件夹即可完成配置。

SDK 的安装与安全配置

环境就绪后,通过 Composer 引入 AI SDK:

composer require laravel/ai

接着发布配置文件并运行数据库迁移,这将创建存储对话记录所需的表:

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

在配置环境时,.env 文件的安全非常重要。Laravel 提供了环境文件加密功能,防止敏感的 API 密钥泄露:

# 加密环境文件
php artisan env:encrypt --readable

使用 --readable 选项可以保留变量名可见,同时加密其值,方便在不解密的情况下查看配置项。

构建 AI 智能体(Agents)

Laravel AI SDK 引入了 Agent 的概念。这样就不用写 Controller 里的逻辑,而是定义一个 Agent 类。比如,我们可以造一个能查数据库的客服专家。

namespace App\Ai\Agents;

use Laravel\Ai\Contracts\Agent;
use Laravel\Ai\Contracts\Conversational;
use Laravel\Ai\Contracts\HasTools;
use Laravel\Ai\Concerns\RemembersConversations;
use Laravel\Ai\Promptable;

class SupportBot implements Agent, Conversational, HasTools
{
    use Promptable, RemembersConversations;

    public function instructions(): string
    {
        return '你是一个专业的客服。请根据订单工具查询到的信息回答用户问题,语气要专业。';
    }

    public function tools(): iterable
    {
        // 赋予 Agent 手脚,让它能查数据库
        return [
            new \App\Ai\Tools\OrderLookup,
        ];
    }
}

在业务代码里,我只需要一行调用。 Agent 会自己判断什么时候该去查数据库,什么时候该回话。

$bot = (new SupportBot($user->id))->forUser($user);
$response = $bot->prompt('我的订单 A1024 到哪了?');

向量搜索与数据检索

配合 ServBay 预装的数据库环境, RAG 只需要几行代码就能搞定。

我们先在模型里利用 SDK 快速生成向量:

protected static function booted()
{
    static::saving(function ($article) {
        // 只要内容变了,自动把文字转成向量存进数据库
        $article->embedding = Str::of($article->content)->toEmbeddings();
    });
}

查询时,直接用语义匹配。

比如用户搜“怎么退钱”,系统能自动找到“售后政策”的文章,即便文案里没有“退钱”这两个字。

$results = Article::query()
    ->whereVectorSimilarTo('embedding', $query, minSimilarity: 0.6)
    ->get();

成本控制与容灾

在生产环境,我们不能盲目追求最强模型。SDK 提供的属性标注能让我们精准控制成本。比如简单的分类任务用便宜模型,复杂的逻辑分析用聪明模型。

use Laravel\Ai\Attributes\UseCheapestModel;
use Laravel\Ai\Attributes\Provider;
use Laravel\Ai\Enums\Lab;

#[Provider([Lab::OpenAI, Lab::Anthropic])] // 如果 OpenAI 挂了,自动切换到 Anthropic
#[UseCheapestModel] // 自动选择最省钱的模型,比如 Haikuclass FastClassifier implements Agent 
{
    use Promptable;
}

这种自动降级(Failover)和成本优化,以前得写多少行代码才能实现?现在几个注解就搞定了。

自动化测试

AI 的输出是不确定的,你永远不可能知道它会出什么幺蛾子。但 SDK 提供的模拟功能(Fake)让一切变得可控。

public function test_support_bot_flow()
{
    // 伪造 AI 返回,不花一分钱 API 费就能跑完所有测试用例
    SupportBot::fake(['您的订单正在派送中。']);

    $response = (new SupportBot(1))->prompt('订单状态?');

    SupportBot::assertPrompted(fn ($prompt) => str_contains($prompt->prompt, '订单'));
    $this->assertStringContainsString('派送', $response);
}

生产环境部署优化

当应用准备上线时,应通过缓存配置和路由来提升性能。Laravel 提供的 optimize 命令可以一键完成多项优化工作:

php artisan optimize

该命令会执行以下操作:

  • 配置缓存:将所有配置文件合并,减少文件系统读取。

  • 路由缓存:加速路由注册过程。

  • 视图缓存:预编译 Blade 模板。

此外,确保在生产环境中关闭调试模式(APP_DEBUG=false),并利用内置的健康检查路径 /up 监控应用状态。

别再用老一套的方法去集成 AI,你想想你的时间多贵呀。

Laravel AI SDK 将复杂的 AI 集成逻辑转化为符合 Laravel 惯例的开发模式,开发者可以更专注于 AI 业务逻辑的实现,快速构建出具备竞争力的智能化应用。