当前位置:首页>php>PHP AI 进阶·第一层:模型调用——从「调 API」到「优雅切换」

PHP AI 进阶·第一层:模型调用——从「调 API」到「优雅切换」

  • 2026-09-10 13:29:03
PHP AI 进阶·第一层:模型调用——从「调 API」到「优雅切换」

PHP AI 进阶·第一层模型调用——从「调 API」到「优雅切换」

“

进阶路线图系列 · 第 1 篇总进度:第 1-2 周 | 每天 30-45 分钟


这一层学完你能做什么

  • 用 OpenAI / Claude / DeepSeek 等 2-3 个模型的 API 写代码
  • 一行代码切换模型提供商,不改业务逻辑
  • 实现结构化输出(JSON mode),不再解析残缺响应
  • 实现流式输出(SSE),逐字显示回复

核心能力:不再被任何一家模型绑定,做到「模型无关」——这也是后续 Agent / RAG / 编排三层的基础。

开始之前,先把本层用到的资源统一放在这里,学到哪里翻到哪里:

资源
类型
看点
Laravel AI SDK 官方中文文档[1]
文档
安装→配置→调用,完整参考
Laravel AI SDK 发布详解[2]
博客
Agent / Tool / Embedding / RAG 全览
openai-php/client GitHub[3]
源码
OpenAI PHP SDK 官方实现
Prism 官网[4]
文档
OpenAI / Claude / Gemini 统一调用

为什么第一层是根基

场景 A:硬编码——直接调 REST API

// 每个调用处都要写一遍完整的请求组装functioncallOpenAI(string $prompt): string{    $ch = curl_init('https://api.openai.com/v1/chat/completions');    curl_setopt_array($ch, [        CURLOPT_POST => true,        CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . getenv('OPENAI_KEY'),'Content-Type: application/json',        ],        CURLOPT_POSTFIELDS => json_encode(['model' => 'gpt-4o','messages' => [['role' => 'user', 'content' => $prompt]],        ]),        CURLOPT_RETURNTRANSFER => true,    ]);    $result = json_decode(curl_exec($ch), true);return $result['choices'][0]['message']['content'];}// 换 Claude 时,URL、Header、请求体结构、响应解析路径全部不同functioncallClaude(string $prompt): string{ /* 重新写一套 */ }

每个调用处都这么写,换模型要把所有调用点全改一遍。

场景 B:模型无关——Laravel AI SDK

// 配置文件改一行'default_provider' => 'deepseek',// 所有业务代码统一写法$result = agent()->prompt('用 PHP 写一个快速排序');// 底层自动路由到配置的 provider,调用方无需感知

第一层的通关标志:不再被具体模型绑定,切换只需改配置。这也是后面三层的基础。


14 天学习路径

第 1-2 天:跑通第一个 Chat API

目标:用 OpenAI PHP SDK 调通 /v1/chat/completions

composer require openai-php/client
$client = OpenAI::client(getenv('OPENAI_API_KEY'));$response = $client->chat()->create(['model' => 'gpt-4o','messages' => [        ['role' => 'system', 'content' => '你是 PHP 技术专家。'],        ['role' => 'user', 'content' => 'PHP 8.4 最有用的新特性是什么?'],    ],]);echo $response->choices[0]->message->content;

关键概念:

参数
说明
model
模型版本:gpt-4o / claude-sonnet-4 / deepseek-chat
messagessystem
 设定角色,user 用户输入,assistant 历史回复
choices[0]
候选回复列表,通常取第一个

常见错误:401 → API Key 错误;429 → 触发限流,需加重试。

第 3-4 天:Prism 统一接口

目标:理解「一次编写,多模型切换」

Prism 用统一接口封装 OpenAI / Claude / Gemini 的调用差异:

usePrism\Prism;// 换 provider 即可切换模型$response = Prism::text()    ->using('gpt-4o', 'openai')    // → claude-sonnet-4:anthropic    ->withSystemPrompt('你是 PHP 架构师。')    ->withPrompt('解释 Laravel 的服务容器')    ->asText();// JSON mode$response = Prism::structured()    ->using('gpt-4o', 'openai')    ->withPrompt('列出 PHP 8 的主要版本号')    ->withSchema(['type' => 'array','items' => ['type' => 'object','properties' => ['version' => ['type' => 'string'],'year' => ['type' => 'integer'],            ],        ],    ]);

对比:

硬编码
Prism
切换模型
重写调用逻辑
改一行 provider
结构化输出
手动拼接 JSON 约束
Schema 声明式
流式响应
手动处理 SSE
内置 usingStream()

第 5-7 天:Laravel AI SDK

目标:掌握 agent() helper 和 Provider 配置

安装(需 Laravel 13+):

composer require laravel/framework:^13.0php artisan vendor:publish --tag=ai-config

config/ai.php 配置多个 Provider:

'providers' => ['openai' => ['api_key' => env('OPENAI_API_KEY'),'default_model' => 'gpt-4o',    ],'anthropic' => ['api_key' => env('ANTHROPIC_API_KEY'),'default_model' => 'claude-sonnet-4',    ],'deepseek' => ['api_key' => env('DEEPSEEK_API_KEY'),'default_model' => 'deepseek-chat',    ],],

使用:

// 默认模型$result = agent()->prompt('用 PHP 写一个快速排序');// 指定模型$result = agent()    ->using('claude-sonnet-4', 'anthropic')    ->prompt('比较 PHP 和 Go 的协程实现');// 链式调用$result = agent()    ->using('gpt-4o', 'openai')    ->prompt('用中文解释什么是 AST')    ->response()    ->text();

第 8-10 天:JSON mode + SSE 流式响应

目标:掌握两个生产必备技能

JSON mode —— LLM 输出结构化 JSON,前端直接消费:

$response = agent()    ->using('gpt-4o', 'openai')    ->withStructuredOutput('json')    ->prompt('分析代码,返回 { "issues": [...], "suggestions": [...] }')    ->response();

SSE 流式 —— 逐字输出,打字机效果:

$stream = agent()    ->using('gpt-4o', 'openai')    ->withStream()    ->prompt('写一篇 PHP 协程的介绍,500 字');foreach ($stream as $chunk) {echo $chunk->text;    ob_flush(); flush();    usleep(10000);}

要点:

特性
用途
注意事项
JSON mode
结构化数据返回
需模型支持(gpt-4o-2024-08-06+)
SSE 流式
实时逐字输出
需处理中断重连
Function Calling
LLM 决定调什么函数
第二层详解

第 11-14 天:实战项目——多模型翻译工具

需求:翻译 API,输入中文输出英文,支持切换 OpenAI / Claude / DeepSeek,支持 JSON mode 和流式输出。

classTranslateService{publicfunctiontranslate(        string $text,        string $targetLang = 'en',        string $provider = 'openai',        bool $stream = false,    ): \Generator|string{        $prompt = "将以下中文翻译成{$targetLang}。只返回翻译结果。\n\n{$text}";if ($stream) {return$this->streamTranslate($prompt, $provider);        }return agent()            ->using($this->modelFor($provider), $provider)            ->prompt($prompt)            ->response()            ->text();    }privatefunctionmodelFor(string $provider): string{return match ($provider) {'openai' => 'gpt-4o','claude' => 'claude-sonnet-4','deepseek' => 'deepseek-chat',default => 'gpt-4o',        };    }privatefunctionstreamTranslate(string $prompt, string $provider): \Generator{        $stream = agent()            ->using($this->modelFor($provider), $provider)            ->withStream()            ->prompt($prompt);foreach ($stream as $chunk) {yield $chunk->text;        }    }}

完成此项目后你将理解:

  1. 「模型无关」模式的必要性
  2. JSON mode 的实际用途
  3. 流式响应的实现原理
  4. 配置驱动的设计思想

关键代码速查

// 方案 A:原生 OpenAI PHP SDK$client = OpenAI::client($apiKey);$response = $client->chat()->create(['model' => 'gpt-4o','messages' => [        ['role' => 'system', 'content' => '你是翻译专家。'],        ['role' => 'user', 'content' => '把这句话翻译成英文:PHP 正在进化。'],    ],]);// 方案 B:Prism 统一接口$response = Prism::text()    ->using('gpt-4o', 'openai')    ->withPrompt('PHP 8.4 的新特性有哪些?')    ->asText();// 方案 C:Laravel AI SDK 配置驱动$response = agent()    ->using('claude-sonnet-4', 'anthropic')    ->prompt('用 PHP 写一个快速排序');

常见问题

Q:项目只用 OpenAI,需要上 Prism / Laravel AI SDK 吗?A:建议上。客户可能要求换国产模型,提前做抽象避免后期大改。

Q:第一层需要学 LangChain 吗?A:不需要。那是 Python 生态的。PHP 用 Prism 和 Laravel AI SDK,更轻量。

Q:Laravel AI SDK 不用 Laravel 能用吗?A:可单独拆用,但最佳体验在 Laravel 项目——配置、队列、缓存无缝对接。

Q:流式响应费资源吗?A:不费。SSE 是单向通道,逐块推送,比等完整响应再返回更快。


下一步

第一层打通后,进入第二层:Agent 构建——从「回答问题」到「完成任务」。


进阶路线图系列:

  • ✅ 第一层:模型调用(本篇)
  • ⬜ 第二层:Agent 构建
  • ⬜ 第三层:RAG 知识库
  • ⬜ 第四层:多 Agent 编排

参考资料
[1] 

Laravel AI SDK 官方中文文档: https://laravel.net.cn/docs/13.x/ai-sdk

[2] 

Laravel AI SDK 发布详解: https://segmentfault.com/a/1190000047596150

[3] 

openai-php/client GitHub: https://github.com/openai-php/client

[4] 

Prism 官网: https://prism-php.com

最新文章

随机文章