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

Laravel AI 生产级应用架构:智能体编排、流式响应与检索增强生成实战

访客 技术 2026年5月5日 14:56 15

Laravel 官方将人工智能能力解耦为三个独立模块,分别服务于业务功能集成、本地开发辅助以及外部协议交互。掌握这三者的协作边界,是构建高可用 AI 驱动型应用的基础。

核心组件定位

  • AI SDK:面向产品端的运行时库,提供统一的接口封装智能体(Agents)、工具调用、结构化输出、多模态处理及向量检索。
  • Boost:开发期依赖包,通过 MCP 服务器与项目专属指南,使 Cursor 或 Claude Code 等编辑器能够感知路由、数据库结构与配置。
  • MCP 插件:用于将现有 Laravel 应用转化为标准的 MCP Server,对外暴露受权限保护的工具、资源与提示词模板。

环境初始化与依赖配置

引入核心包

bash
composer require laravel/ai

发布配置与数据表

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

执行后会自动创建 agent_conversationsagent_conversation_messages 两张表,用于持久化对话上下文。

密钥管理

.env 中定义各厂商的凭证:

OPENAI_API_KEY=sk-xxx
ANTHROPIC_API_KEY=sk-ant-xxx
GEMINI_API_KEY=AIza...
OLLAMA_API_KEY=

所有键值均映射至 config/ai.php。若需代理转发或部署私有模型网关,可自定义端点:

'providers' => [
    'custom_llm' => [
        'driver' => 'openai',
        'key' => env('CUSTOM_KEY'),
        'url' => env('LLM_GATEWAY_URL', 'https://proxy.internal/v1'),
    ],
],

框架原生支持 OpenAI、Anthropic、Groq 及 OpenRouter 等厂商的路由覆盖。

智能体(Agent)类设计

SDK 采用面向对象范式组织指令、上下文与输出约束。建议通过命令行脚手架快速生成基类:

bash
php artisan make:agent ReviewAnalyst --structured

实现指令集与方法规范:

<?php

namespace App\Ai\Agents;

use Laravel\Ai\Contracts\Agent;
use Laravel\Ai\Promptable;

class ReviewAnalyst implements Agent
{
    use Promptable;

    public function getInstructions(): string
    {
        return '你是一名资深内容审核专员,负责评估用户提交文本的合规性与情感倾向,并返回标准 JSON 结构。';
    }
}

在实际请求中注入该实例并发起调用:

use App\Ai\Agents\ReviewAnalyst;
use Illuminate\Routing\Route;

Route::post('/evaluate', function () {
    $pipeline = new ReviewAnalyst();
    $result = $pipeline->prompt('评估以下评论:产品包装破损严重...');
    
    return response()->json([
        'status_code' => (int) $result,
        'raw_output' => (string) $result
    ]);
});

开启结构化输出可大幅降低大模型响应波动,适用于字段校验严格的场景。

异步任务调度与实时推送

对于耗时较长的推理任务,推荐采用队列模式避免阻塞主进程:

use App\Ai\Agents\ReviewAnalyst;
use Laravel\Ai\Responses\AgentResponse;
use Illuminate\Http\Request;
use Throwable;

Route::post('/async-eval', function (Request $request) {
    $transcript = $request->input('text');
    
    return (new ReviewAnalyst)
        ->queue($transcript)
        ->then(function (AgentResponse $payload) {
            // 处理成功回调,写入日志或更新状态机
        })
        ->catch(function (Throwable $error) {
            // 记录异常信息并降级至人工审核
        });
});

若前端需要打字机效果或 SSE 实时渲染,可切换为流式 API:

use Laravel\Ai\Responses\StreamedAgentResponse;

Route::get('/live-feedback', function () {
    $engine = new ReviewAnalyst();
    
    return $engine
        ->stream('开始分析文档段落...')
        ->then(fn (StreamedAgentResponse $stream) => [
            'tokens' => $stream->text,
            'metrics' => $stream->usage,
            'raw_events' => $stream->events
        ]);
});

扩展工具链与安全沙箱

Agent 可通过注册 Tool 实例获得外部系统操作能力。框架内置了网络检索与文件检索组件:

use Laravel\Ai\Providers\Tools\WebSearch;
use Laravel\Ai\Providers\Tools\WebFetch;
use Laravel\Ai\Providers\Tools\FileSearch;

class ReviewAnalyst implements Agent
{
    use Promptable;

    public function tools(): iterable
    {
        return [
            new WebSearch(limit: 5),
            new WebFetch(timeout: 30),
            new FileSearch(
                stores: ['docs_v2', 'legacy_kb'],
                filter_meta: ['category' => 'technical']
            ),
        ];
    }
    
    public function getInstructions(): string { /* ... */ }
}

FileSearch 底层对接 Provider 的向量存储,支持多索引并联与元数据过滤,是实现垂直领域知识库检索的标准方案。

检索增强生成(RAG)落地路径

当前版本提供两种主流架构策略:

策略一:基于关系型数据库的自托管向量查询

利用 PostgreSQL 的 pgvector 扩展将 Embedding 直接存入业务表:

Schema::ensureVectorExtensionExists();

Schema::create('knowledge_base', function ($table) {
    $table->id();
    $table->string('slug');
    $table->longText('body');
    $table->vector('dense_vector', dimensions: 1536);
    $table->timestamps();
});
// 添加 HNSW 索引以加速余弦相似度匹配
$table->vector('dense_vector', dimensions: 1536)->index();

查询时需结合语义分词器提取特征,再通过原生 SQL 进行 Top-K 召回。

策略二:托管式向量云 + 客户端检索

使用 Provider 提供的 Vector Store 服务上传非结构化文档。Agent 内部自动完成 Chunking 与向量化,调用时仅需传递 FileSearch 即可触发跨文档联合推理。

多模态处理与信息重排序

框架提供高层 Facade 简化媒体流交互:

图像生成与编辑

use Laravel\Ai\Image;
use Laravel\Ai\Files;

$render = Image::of('极简主义风格的咖啡杯设计图')
    ->quality('hd')
    ->orientation('wide')
    ->timeout(90)
    ->generate();

// 风格迁移示例
$remix = Image::of('转换为赛博朋克霓虹色调')
    ->attachments([Files::Image::fromStorage('base_art.png')])
    ->generate();

音频合成与语音转写

use Laravel\Ai\Audio;
use Laravel\Ai\Transcription;

$speech = Audio::of('欢迎使用下一代智能工作台')->generate();
$text = Transcription::fromStorage('meeting_recording.wav')->generate();

结果重排序(Reranking) 在检索管道末尾插入重排序节点可显著提升相关性:

use Laravel\Ai\Reranking;

$candidates = [
    'Django 是 Python 全栈框架',
    'Laravel 专注于 PHP 企业级开发',
    'Vue.js 仅处理前端视图层'
];

$ranked = Reranking::of($candidates)->rerank('PHP Web 解决方案');
echo $ranked->first()->document; // 优先返回最相关项

不同特性的厂商覆盖率存在差异,建议在生产环境中统一抽象适配层。

多云容灾与流量降级

面对限流(Rate Limit)或服务宕机,框架支持声明式故障转移:

$response = (new ReviewAnalyst)->prompt(
    query: '分析用户投诉工单...',
    fallback_chain: ['openai', 'anthropic', 'gemini']
);

SDK 会按优先级依次尝试,失败则自动跃迁至下一节点,开发者无需编写额外的重试中间件或健康检查逻辑。

Boost:本地代码库上下文注入

Boost 作为 --dev 依赖安装后可无缝接入现代 IDE:

bash
composer require laravel/boost --dev
php artisan boost:install

安装过程会根据目标编辑器自动生成规则文件。当调用补全或重构指令时,Boost 会启动后台 MCP 进程扫描路由定义、Eloquent 模型定义、环境变量映射及 Artisan 命令签名。这使得代码建议严格对齐项目规范,彻底消除"幻觉式"拼凑代码。

MCP Server:对外暴露受控业务动作

若需允许外部 AI Client 安全调用内部逻辑,可采用 MVC 架构配合 MCP 协议注册端点:

  1. 定义 Tool 类,明确输入校验 Schema 与执行 Handler。
  2. 挂载受鉴权保护的 HTTP 路由,通常结合 Sanctum 或 OAuth2 签发短期 Token。
  3. 提供 Resource 接口只读导出报表,使用 Prompt 模板固化常用工作流。

典型应用场景包括:客服机器人自动创建工单、数据分析 Agent 查询脱敏指标、自动化运维脚本触发等。通过显式声明边界,可杜绝大模型直连数据库带来的越权风险。

相关文章

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...

发表评论

访客

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