Prism一套 API 接入多家大模型让 Laravel 快速落地 AI 能力【免费下载链接】prismA unified interface for working with LLMs in Laravel项目地址: https://gitcode.com/gh_mirrors/prism14/prism如果你的 Laravel 项目需要调用大模型又要面对 OpenAI、Claude、Gemini、DeepSeek 这些各有一套 SDK 和请求格式的供应商Prism 值得纳入技术选型。它是一个 Laravel 包提供统一的 LLM 调用接口一次编写业务逻辑即可在十多个提供商之间自由切换覆盖文本生成、结构化输出、工具调用、流式响应、嵌入与多模态输入等场景。适合正在为 Laravel 项目选型 AI 接入方案的开发者。Prism 解决什么问题直接对接各家大模型 API 时你会反复遇到三类麻烦接口不统一换一家供应商就要重写请求构造、响应解析和鉴权逻辑返回格式不一致token 用量、结束原因、多轮对话的字段命名各家不同本地调试成本高云端模型按量计费开发阶段跑测试既贵又慢。Prism 的思路是把「请求构造、供应商映射、响应归一化」这三件事收进包里。你面向Provider枚举声明供应商和模型名其余的 HTTP 细节、各家字段差异都由对应 Provider 实现处理。目前支持的供应商包括 OpenAI、Anthropic、Gemini、DeepSeek、Mistral、Groq、xAI、Ollama、OpenRouter、Perplexity、ElevenLabs、VoyageAI、Z 等十多家定义见 src/Enums/Provider.php。运行环境要求不高PHP 8.2 以上、Laravel 11 及以上版本即可。如何把 Prism 接入 Laravel 项目接入只需两步。执行以下命令composer require prism-php/prism php artisan vendor:publish --tagprism-config第一条安装依赖第二条发布配置文件到config/prism.php。这个文件里为每个供应商预留了api_key、url等配置项全部通过环境变量注入例如OPENAI_API_KEY、ANTHROPIC_API_KEY、OLLAMA_URL另外还有一个全局的request_timeout默认 30 秒控制请求超时。两个使用建议项目处于快速迭代期建议按官方文档的做法锁定大版本如prism-php/prism: ^0.3.0避免上游破坏性变更影响生产环境只配置你实际用到的供应商即可配置文件里其余条目留空没有影响。如何发起第一次大模型调用文本生成是最高频的场景。一次典型调用长这样use Prism\Prism\Facades\Prism; use Prism\Prism\Enums\Provider; $response Prism::text() -using(Provider::OpenAI, gpt-4o) -withSystemPrompt(你是一名科技博客编辑) -withPrompt(写一段关于 AI 搜索技术的引言) -asText(); echo $response-text; echo $response-usage-completionTokens;响应对象已经做了归一化无论背后是哪家供应商你都能用同样的方式拿到生成文本-text、token 用量-usage、结束原因-finishReason和原始响应-raw。常用调参方法包括withMaxTokens()限制生成长度、usingTemperature()或usingTopP()控制随机性。文档建议两者只设置其一。多轮对话则通过withMessages()传入UserMessage、AssistantMessage等消息对象实现位于 src/Concerns/HasMessages.php。如果你的场景是实时输出或长文生成asStream()会返回生成器逐块产出文本asDataStreamResponse()/asEventStreamResponse()则直接产出可返回给浏览器的流式响应事件协议适配层在 src/Streaming/Adapters。多模态输入也走同一套接口withPrompt()的第二个参数接受Image、Document、Audio、Video等媒体对象比如把一张产品图连同说明文字一起交给模型理解。如何在多家大模型提供商之间切换using()是每次请求级别的所以切换供应商或模型不需要改其他代码只改这一处调用-using(Provider::DeepSeek, deepseek-chat)一个很实用的组合是「开发用 Ollama、生产用云端」。Ollama 默认指向本地http://localhost:11434不消耗 API 配额联调阶段可以放心跑测试上线前换成任意云端供应商即可。多租户场景还有usingProviderConfig()可以按请求覆盖供应商配置比如让用户传入自己的 API Key覆盖值会与全局配置合并。具体字段可参考 config/prism.php 中的结构。需要注意的是不同供应商对同一能力的支持程度不同例如系统提示、结构化输出的严格模式等。动手前建议先到docs/providers/下对应供应商的文档确认能力边界。如何让大模型输出可直接使用的数据如果下游需要入库、渲染或做接口响应纯文本往往不够你要的是符合约定结构的 JSON。Prism 的结构化输出流程是定义 Schema → 发起请求 → 拿到类型化数据。Schema 用src/Schema下的类描述例如ObjectSchema配合StringSchema等属性类型声明字段和必填项请求端从Prism::structured()开始withSchema()传入结构定义asStructured()执行后通过$response-structured直接读取数组。两个实践注意点OpenAI 的 strict 模式下根 Schema 必须是ObjectSchema其他类型只能作为属性存在供应商分为「严格结构化」和「JSON 模式」两种实现后者只保证输出是合法 JSON字段校验责任在你这边。字段设计、可空字段的写法等细节见 docs/core-concepts/structured-output.md 和 docs/core-concepts/schemas.md。限流、超时等报错怎么处理调用外部模型 API网络抖动和配额问题是常态。Prism 把常见失败场景拆成了细分异常类位于 src/ExceptionsPrismException基类兜底捕获所有 Prism 错误PrismRateLimitedException触发限流时抛出可据此做退避重试PrismServerException供应商服务端错误PrismRequestTooLargeException请求体超限通常是输入内容过长。建议的写法是分层捕获先针对限流类异常做等待重试再兜底捕获PrismException记录日志并给用户一个降级提示。此外withClientRetry()可以基于 Laravel HTTP 客户端设置自动重试如-withClientRetry(3, 100)表示重试 3 次、间隔 100 毫秒对偶发抖动很有效 ⚠️ 但要注意重试会叠加 token 消耗别把重试次数设得过大。继续阅读流式、工具调用与本地服务器本文覆盖了最高频的文本生成与结构化输出两条主线以下几个方向建议按需求跟进工具调用Function Calling让模型调用你定义的函数并自动回传结果核心逻辑在 src/Concerns/CallsTools.php说明见 docs/core-concepts/tools-function-calling.mdPrism Server内置路由把对话接口以 HTTP 服务形式暴露给前端配置见config/prism.php中的prism_server段文档见 docs/core-concepts/prism-server.md测试支持PrismFake允许在测试中注入伪造响应避免测试依赖真实 API入口在 src/Testing/PrismFake.php完整文本生成参考系统提示、生成参数、响应回调等全部细节在 docs/core-concepts/text-generation.md。下一步建议先在自己的项目里把 Ollama 跑起来用本地模型走通「文本生成 结构化输出」最小闭环再切换到目标云端供应商验证限流与超时处理——这条路径能在零成本的前提下覆盖本文介绍的全部核心能力。【免费下载链接】prismA unified interface for working with LLMs in Laravel项目地址: https://gitcode.com/gh_mirrors/prism14/prism创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考