Laravel 12 AI 功能集成:从理论到实践
摘要
本文详细介绍 Laravel 12 中 AI 相关功能的集成与应用,包括 OpenAI 客户端、向量数据库支持、智能路由生成等。通过实际项目案例,展示如何构建智能应用,如内容生成、用户行为分析、智能客服等,帮助开发者快速掌握 Laravel 12 的 AI 能力。
1. Laravel 12 AI 功能概述
Laravel 12 引入了多项 AI 相关功能和工具,为开发者提供了构建智能应用的强大能力。
1.1 核心 AI 功能
- OpenAI 客户端:官方集成的 OpenAI API 客户端,支持 GPT 模型调用
- 向量数据库支持:内置对 Pinecone、Chroma 等向量数据库的支持
- 智能路由生成:基于 AI 的路由代码生成功能
- AI 辅助测试:使用 AI 生成测试用例
- 内容生成器:基于 AI 的内容生成工具
1.2 AI 功能的应用场景
| 场景 | 应用示例 | 技术方案 |
|---|
| 内容生成 | 文章摘要、产品描述、邮件模板 | OpenAI GPT + 提示工程 |
| 智能客服 | 聊天机器人、问题回答 | OpenAI GPT + 上下文管理 |
| 推荐系统 | 商品推荐、内容推荐 | 向量数据库 + 相似度搜索 |
| 代码生成 | 路由生成、控制器代码 | OpenAI GPT + 代码提示 |
| 数据分析 | 用户行为分析、趋势预测 | AI 模型 + 数据处理 |
2. OpenAI 客户端集成
Laravel 12 提供了官方的 OpenAI 客户端,简化了与 OpenAI API 的交互。
2.1 安装与配置
安装依赖
1
| composer require laravel/openai
|
配置 API 密钥
1 2 3
| OPENAI_API_KEY=your-openai-api-key OPENAI_ORGANIZATION=your-organization-id (可选)
|
发布配置
1
| php artisan vendor:publish --provider="Laravel\OpenAI\OpenAIServiceProvider"
|
2.2 基本使用
文本生成
1 2 3 4 5 6 7 8 9 10 11 12
| use Laravel\OpenAI\Facades\OpenAI;
$response = OpenAI::chat()->create([ 'model' => 'gpt-4', 'messages' => [ ['role' => 'system', 'content' => 'You are a helpful assistant.'], ['role' => 'user', 'content' => 'Write a short article about Laravel 12 AI features.'], ], 'temperature' => 0.7, ]);
$content = $response->choices[0]->message->content;
|
图像生成
1 2 3 4 5 6 7 8 9
| use Laravel\OpenAI\Facades\OpenAI;
$response = OpenAI::images()->generate([ 'prompt' => 'A modern Laravel application with AI features', 'n' => 1, 'size' => '1024x1024', ]);
$imageUrl = $response->data[0]->url;
|
语音转文本
1 2 3 4 5 6 7 8
| use Laravel\OpenAI\Facades\OpenAI;
$response = OpenAI::audio()->transcribe([ 'model' => 'whisper-1', 'file' => fopen('/path/to/audio.mp3', 'r'), ]);
$transcription = $response->text;
|
2.3 高级用法
流式响应
1 2 3 4 5 6 7 8 9 10 11 12 13
| use Laravel\OpenAI\Facades\OpenAI;
$stream = OpenAI::chat()->createStreamed([ 'model' => 'gpt-4', 'messages' => [ ['role' => 'system', 'content' => 'You are a helpful assistant.'], ['role' => 'user', 'content' => 'Write a short story about Laravel.'], ], ]);
foreach ($stream as $response) { echo $response->choices[0]->delta->content ?? ''; }
|
函数调用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
| use Laravel\OpenAI\Facades\OpenAI;
$response = OpenAI::chat()->create([ 'model' => 'gpt-4', 'messages' => [ ['role' => 'system', 'content' => 'You are a helpful assistant.'], ['role' => 'user', 'content' => 'What is the weather in New York today?'], ], 'functions' => [ [ 'name' => 'get_weather', 'description' => 'Get the current weather for a location', 'parameters' => [ 'type' => 'object', 'properties' => [ 'location' => [ 'type' => 'string', 'description' => 'The city and state, e.g., San Francisco, CA', ], ], 'required' => ['location'], ], ], ], 'function_call' => 'auto', ]);
if ($response->choices[0]->finish_reason === 'function_call') { $functionName = $response->choices[0]->message->function_call->name; $arguments = json_decode($response->choices[0]->message->function_call->arguments, true); $weather = $this->getWeather($arguments['location']); $response = OpenAI::chat()->create([ 'model' => 'gpt-4', 'messages' => [ ['role' => 'system', 'content' => 'You are a helpful assistant.'], ['role' => 'user', 'content' => 'What is the weather in New York today?'], ['role' => 'assistant', 'content' => null, 'function_call' => [ 'name' => 'get_weather', 'arguments' => json_encode(['location' => 'New York']), ]], ['role' => 'function', 'name' => 'get_weather', 'content' => json_encode($weather)], ], ]); $content = $response->choices[0]->message->content; }
|
3. 向量数据库集成
Laravel 12 内置了对向量数据库的支持,为构建推荐系统、相似度搜索等功能提供了便利。
3.1 安装与配置
安装向量数据库客户端
1 2 3 4 5
| composer require pinecone-io/pinecone-php
composer require chromadb/chromadb-php
|
配置向量数据库连接
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| 'vectors' => [ 'default' => env('VECTOR_STORE_DEFAULT', 'pinecone'), 'stores' => [ 'pinecone' => [ 'driver' => 'pinecone', 'api_key' => env('PINECONE_API_KEY'), 'environment' => env('PINECONE_ENVIRONMENT'), 'index' => env('PINECONE_INDEX'), ], 'chroma' => [ 'driver' => 'chroma', 'host' => env('CHROMA_HOST', 'http://localhost:8000'), 'collection' => env('CHROMA_COLLECTION', 'default'), ], ], ],
|
3.2 基本使用
生成嵌入向量
1 2 3 4 5 6 7 8 9
| use Laravel\AI\Facades\AI;
$embedding = AI::embeddings()->create([ 'model' => 'text-embedding-ada-002', 'input' => 'Laravel is a PHP framework', ]);
$vector = $embedding->embeddings[0]->embedding;
|
存储向量
1 2 3 4 5 6 7 8 9 10 11
| use Laravel\AI\Facades\AI;
AI::vectors()->add([ 'id' => 'document-1', 'values' => $vector, 'metadata' => [ 'title' => 'Laravel Introduction', 'type' => 'document', ], ]);
|
相似度搜索
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| use Laravel\AI\Facades\AI;
$results = AI::vectors()->search([ 'query' => $queryVector, 'topK' => 5, 'filter' => [ 'type' => 'document', ], ]);
foreach ($results as $result) { echo $result['id'] . ': ' . $result['score'] . '\n'; }
|
3.3 向量数据库的高级应用
构建推荐系统
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
| use Laravel\AI\Facades\AI;
class RecommendationService { public function getRecommendations(User $user, int $limit = 10) { $userVector = $this->getUserPreferenceVector($user); $results = AI::vectors()->search([ 'query' => $userVector, 'topK' => $limit, 'filter' => [ 'type' => 'content', 'status' => 'published', ], ]); return Content::whereIn('id', collect($results)->pluck('id')->all())->get(); } protected function getUserPreferenceVector(User $user) { $history = $user->viewHistory->pluck('content')->implode(' '); $embedding = AI::embeddings()->create([ 'model' => 'text-embedding-ada-002', 'input' => $history, ]); return $embedding->embeddings[0]->embedding; } }
|
语义搜索
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
| use Laravel\AI\Facades\AI;
class SearchService { public function semanticSearch(string $query, int $limit = 10) { $embedding = AI::embeddings()->create([ 'model' => 'text-embedding-ada-002', 'input' => $query, ]); $queryVector = $embedding->embeddings[0]->embedding; $results = AI::vectors()->search([ 'query' => $queryVector, 'topK' => $limit, 'filter' => [ 'type' => 'document', 'status' => 'published', ], ]); return Document::whereIn('id', collect($results)->pluck('id')->all())->get(); } }
|
4. 智能路由生成
Laravel 12 提供了基于 AI 的智能路由生成功能,可以根据自然语言描述生成路由代码。
4.1 基本使用
生成路由代码
1 2
| php artisan route:generate "Create a route for user profile with authentication"
|
交互式生成
1 2
| php artisan route:generate --interactive
|
4.2 路由生成示例
生成 RESTful API 路由
1
| php artisan route:generate "Create RESTful API routes for posts with index, show, store, update, destroy methods"
|
生成的路由代码:
1 2
| Route::apiResource('posts', PostController::class);
|
生成带中间件的路由
1
| php artisan route:generate "Create a route group for admin with auth and role middleware"
|
生成的路由代码:
1 2 3 4 5 6
| Route::middleware(['auth', 'role:admin'])->group(function () { Route::get('/admin/dashboard', [AdminController::class, 'dashboard'])->name('admin.dashboard'); Route::resource('/admin/users', AdminUserController::class); Route::resource('/admin/posts', AdminPostController::class); });
|
4.3 自定义路由生成
配置生成规则
1 2 3 4 5 6 7 8 9 10 11 12 13
| 'route' => [ 'generator' => [ 'model' => 'gpt-4', 'temperature' => 0.3, 'max_tokens' => 1000, 'rules' => [ 'use_resource_controllers' => true, 'prefix_api_routes' => true, 'use_named_routes' => true, ], ], ],
|
自定义提示模板
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| $prompt = "Generate Laravel route code for: {$description}\n\n"; $prompt .= "Follow these rules:\n"; $prompt .= "1. Use named routes\n"; $prompt .= "2. Apply appropriate middleware\n"; $prompt .= "3. Use resource controllers where appropriate\n"; $prompt .= "4. Return only the route code, no explanations\n";
$response = OpenAI::chat()->create([ 'model' => 'gpt-4', 'messages' => [ ['role' => 'system', 'content' => 'You are a Laravel route generator.'], ['role' => 'user', 'content' => $prompt], ], ]);
$routeCode = $response->choices[0]->message->content;
|
5. AI 辅助测试
Laravel 12 提供了 AI 辅助测试功能,可以使用 AI 生成测试用例。
5.1 生成测试用例
基本使用
1 2
| php artisan test:generate App\Http\Controllers\UserController
|
生成单元测试
1 2
| php artisan test:generate App\Services\UserService --type=unit
|
5.2 测试生成示例
生成的测试代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65
| <?php
namespace Tests\Feature\Http\Controllers;
use Illuminate\Foundation\Testing\RefreshDatabase; use Illuminate\Foundation\Testing\WithFaker; use Tests\TestCase; use App\Models\User;
class UserControllerTest extends TestCase { use RefreshDatabase;
public function test_index_returns_all_users() { User::factory()->count(3)->create(); $response = $this->get('/users'); $response->assertStatus(200); $response->assertJsonCount(3); }
public function test_show_returns_single_user() { $user = User::factory()->create(); $response = $this->get('/users/' . $user->id); $response->assertStatus(200); $response->assertJson(['id' => $user->id]); }
public function test_store_creates_new_user() { $userData = [ 'name' => 'Test User', 'email' => 'test@example.com', 'password' => 'password123', ]; $response = $this->post('/users', $userData); $response->assertStatus(201); $this->assertDatabaseHas('users', ['email' => 'test@example.com']); } }
|
6. 内容生成器
Laravel 12 提供了基于 AI 的内容生成工具,可以生成各种类型的内容。
6.1 基本使用
生成文章摘要
1 2 3 4 5 6 7
| use Laravel\AI\Facades\AI;
$summary = AI::content()->summarize([ 'text' => $longArticle, 'maxLength' => 200, 'format' => 'paragraph', ]);
|
生成产品描述
1 2 3 4 5 6 7
| use Laravel\AI\Facades\AI;
$description = AI::content()->generate([ 'prompt' => 'Generate a product description for a wireless headphones with noise cancellation', 'maxLength' => 500, 'tone' => 'professional', ]);
|
6.2 内容生成的高级应用
多语言内容生成
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
| use Laravel\AI\Facades\AI;
class ContentGenerator { public function translate(string $text, string $targetLanguage) { return AI::content()->translate([ 'text' => $text, 'targetLanguage' => $targetLanguage, 'sourceLanguage' => 'auto', ]); } public function generateMultiLanguageContent(string $prompt, array $languages) { $content = []; foreach ($languages as $language) { $content[$language] = AI::content()->generate([ 'prompt' => $prompt, 'maxLength' => 500, 'language' => $language, ]); } return $content; } }
|
SEO 内容优化
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| use Laravel\AI\Facades\AI;
class SeoService { public function optimizeContent(string $content, array $keywords) { return AI::content()->optimize([ 'content' => $content, 'keywords' => $keywords, 'target' => 'seo', 'maxLength' => 1000, ]); } public function generateMetaTags(string $content) { return AI::content()->generate([ 'prompt' => "Generate SEO meta title and description for: {$content}", 'maxLength' => 300, 'format' => 'json', ]); } }
|
7. 实战案例:构建智能客服系统
以下是一个使用 Laravel 12 AI 功能构建智能客服系统的实战案例:
7.1 系统架构
- 前端:React 聊天界面
- 后端:Laravel 12 + OpenAI API
- 数据存储:MySQL + Redis
- 向量存储:Pinecone
7.2 核心功能
- 智能问答:基于 OpenAI GPT 的问题回答
- 上下文管理:维护对话上下文,提供连贯的回答
- 知识库集成:使用向量数据库存储和搜索知识库
- 意图识别:识别用户意图,提供精准回答
- 多轮对话:支持多轮对话交互
7.3 实现代码
聊天控制器
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
| <?php
namespace App\Http\Controllers;
use App\Services\ChatService; use Illuminate\Http\Request;
class ChatController extends Controller { protected $chatService; public function __construct(ChatService $chatService) { $this->chatService = $chatService; } public function sendMessage(Request $request) { $message = $request->input('message'); $userId = $request->user()->id; $sessionId = $request->input('session_id', uniqid()); $response = $this->chatService->processMessage($message, $userId, $sessionId); return response()->json([ 'message' => $response, 'session_id' => $sessionId, ]); } }
|
聊天服务
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92
| <?php
namespace App\Services;
use Laravel\OpenAI\Facades\OpenAI; use Laravel\AI\Facades\AI; use Redis;
class ChatService { public function processMessage(string $message, int $userId, string $sessionId) { $history = $this->getConversationHistory($sessionId); $response = $this->generateResponse($message, $history); $this->updateConversationHistory($sessionId, $message, $response); return $response; } protected function getConversationHistory(string $sessionId) { $key = "chat:session:{$sessionId}"; return Redis::get($key) ?: []; } protected function updateConversationHistory(string $sessionId, string $userMessage, string $botResponse) { $key = "chat:session:{$sessionId}"; $history = $this->getConversationHistory($sessionId); $history[] = ['role' => 'user', 'content' => $userMessage]; $history[] = ['role' => 'assistant', 'content' => $botResponse]; $history = array_slice($history, -10); Redis::setex($key, 3600, json_encode($history)); } protected function generateResponse(string $message, array $history) { $context = array_merge([ ['role' => 'system', 'content' => 'You are a helpful customer service assistant for an e-commerce store.'], ], $history, [ ['role' => 'user', 'content' => $message], ]); $knowledge = $this->searchKnowledgeBase($message); if (!empty($knowledge)) { $context[] = ['role' => 'system', 'content' => "Knowledge base information: {$knowledge}"]; } $response = OpenAI::chat()->create([ 'model' => 'gpt-4', 'messages' => $context, 'temperature' => 0.7, ]); return $response->choices[0]->message->content; } protected function searchKnowledgeBase(string $query) { $embedding = AI::embeddings()->create([ 'model' => 'text-embedding-ada-002', 'input' => $query, ]); $queryVector = $embedding->embeddings[0]->embedding; $results = AI::vectors()->search([ 'query' => $queryVector, 'topK' => 3, 'filter' => [ 'type' => 'knowledge', ], ]); return collect($results)->pluck('metadata.content')->implode(' '); } }
|
8. 最佳实践与注意事项
8.1 API 调用优化
- 批量请求:合并多个 API 请求,减少调用次数
- 缓存响应:缓存频繁使用的 AI 响应
- 异步处理:使用队列处理耗时的 AI 任务
- 错误处理:实现健壮的错误处理机制
8.2 提示工程
- 明确指令:提供清晰、具体的指令
- 示例引导:使用示例引导模型生成期望的输出
- 上下文管理:合理管理上下文长度,避免超出限制
- 温度参数:根据任务类型调整温度参数
8.3 成本控制
- 使用合适的模型:根据任务复杂度选择合适的模型
- 优化提示:减少提示长度,提高生成效率
- 缓存策略:缓存重复查询的结果
- 使用批处理:批量处理多个请求
8.4 安全性
- 输入验证:验证用户输入,防止提示注入
- 输出过滤:过滤生成的内容,防止有害输出
- API 密钥管理:安全存储 API 密钥,使用环境变量
- 速率限制:实现 API 调用速率限制,防止滥用
9. 总结
Laravel 12 的 AI 功能集成为开发者提供了构建智能应用的强大工具,从 OpenAI 客户端到向量数据库支持,从智能路由生成到内容生成器,这些功能大大简化了 AI 应用的开发流程。
通过本文的介绍,开发者可以快速掌握 Laravel 12 的 AI 能力,并应用到实际项目中,如内容生成、智能客服、推荐系统等场景。同时,通过遵循最佳实践和注意事项,可以确保 AI 应用的性能、成本和安全性。
随着 AI 技术的不断发展,Laravel 也在持续改进其 AI 功能,未来版本可能会引入更多创新的 AI 工具和集成。开发者应该保持关注 Laravel 的更新,及时采用新的 AI 功能,为用户提供更加智能、个性化的应用体验。