技术分享

Laravel Prism集成大模型太麻烦?自定义模型其实超简单!

作者头像 人称外号大脸猫
56 阅读
Laravel Prism集成大模型太麻烦?自定义模型其实超简单!

最近在开发一个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);
    }
}

🔧 核心思路

  1. 继承Provider基类 - 这是所有魔法的起点
  2. 配置API客户端 - 处理认证和基础请求设置
  3. 实现核心方法 - 按需实现text()、structured()、stream()等方法
  4. 复用现有Handler - 可以复用或自定义各种处理器

🌟 三大优势

1️⃣ 灵活性极高

  • 可以对接任何符合API规范的大模型
  • 自由控制请求和响应的处理逻辑
  • 支持同步、流式、结构化等多种响应格式

2️⃣ 代码极其简洁

  • 利用现有架构,减少重复代码
  • 清晰的职责分离:Provider处理配置,Handler处理业务逻辑
  • 内置重试、超时等机制,开箱即用

3️⃣ 维护成本低

  • 统一接口规范,不同模型用法一致
  • 易于扩展,新增模型只需少量代码
  • 良好的错误处理和日志记录

💡 实战建议

如果你也需要集成Prism尚未支持的大模型,我的建议是:

  1. 先研究目标模型的API文档 - 了解参数和响应格式
  2. 参考现有的Provider实现 - 比如OpenAI或Anthropic的实现
  3. 重点关注认证方式 - 每个平台的认证机制可能不同
  4. 合理设计Handler - 根据模型特性调整数据处理逻辑

🎯 总结

Prism-php/prism这个库的可扩展性真的让我惊喜。它没有试图集成所有模型,而是提供了一个优雅的扩展机制,让开发者能够轻松接入任何需要的AI服务。

这种设计哲学很值得学习:不追求大而全,而是提供坚实的基座和清晰的扩展路径

如果你也在为Laravel项目集成多个AI模型而烦恼,不妨试试Prism的自定义Provider方案,可能会为你节省大量时间!