最近在开发一个AI聊天应用,需要对接DeepSeek和讯飞星火等多个大模型。一开始发现Prism-php/prism库内置的模型提供商不算多,但实际用起来才发现——自定义模型原来这么简单!

✨ 我的发现
Prism库的设计真的很巧妙,只需要简单继承现有的Provider类,稍作修改就能轻松接入各种大模型。这是我为讯飞星火写的自定义Provider:
namespace App\Prism\Providers\Spark;
use Prism\Prism\Providers\Provider;
class Spark extends Provider
{
use InitializesClient;
public function __construct(
#[\SensitiveParameter] public readonly string $apiKey,
public readonly string $url,
) {}
#[\Override]
public function text(TextRequest $request): TextResponse
{
$handler = new Text($this->client(
$request->clientOptions(),
$request->clientRetry()
));
return $handler->handle($request);
}
}

🔧 核心思路
- 继承Provider基类 - 这是所有魔法的起点
- 配置API客户端 - 处理认证和基础请求设置
- 实现核心方法 - 按需实现text()、structured()、stream()等方法
- 复用现有Handler - 可以复用或自定义各种处理器
🌟 三大优势
1️⃣ 灵活性极高
- 可以对接任何符合API规范的大模型
- 自由控制请求和响应的处理逻辑
- 支持同步、流式、结构化等多种响应格式
2️⃣ 代码极其简洁
- 利用现有架构,减少重复代码
- 清晰的职责分离:Provider处理配置,Handler处理业务逻辑
- 内置重试、超时等机制,开箱即用
3️⃣ 维护成本低
- 统一接口规范,不同模型用法一致
- 易于扩展,新增模型只需少量代码
- 良好的错误处理和日志记录
💡 实战建议
如果你也需要集成Prism尚未支持的大模型,我的建议是:
- 先研究目标模型的API文档 - 了解参数和响应格式
- 参考现有的Provider实现 - 比如OpenAI或Anthropic的实现
- 重点关注认证方式 - 每个平台的认证机制可能不同
- 合理设计Handler - 根据模型特性调整数据处理逻辑
🎯 总结
Prism-php/prism这个库的可扩展性真的让我惊喜。它没有试图集成所有模型,而是提供了一个优雅的扩展机制,让开发者能够轻松接入任何需要的AI服务。
这种设计哲学很值得学习:不追求大而全,而是提供坚实的基座和清晰的扩展路径。
如果你也在为Laravel项目集成多个AI模型而烦恼,不妨试试Prism的自定义Provider方案,可能会为你节省大量时间!