尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

三步跑出第一次 LLM 响应:Prism Laravel 文本生成与结构化输出实战

三步跑出第一次 LLM 响应:Prism Laravel 文本生成与结构化输出实战 三步跑出第一次 LLM 响应Prism Laravel 文本生成与结构化输出实战【免费下载链接】prismA unified interface for working with LLMs in Laravel项目地址: https://gitcode.com/gh_mirrors/prism14/prism当你想在 Laravel 项目里接大模型时麻烦往往不是写提示词而是每家提供商的 SDK、请求格式、流式协议都长得不一样。Prism 就是冲着这个问题来的它是一个统一的 LLM 接口包一套流畅 API 覆盖文本生成、多轮对话、结构化输出和流式响应切换提供商不用改业务代码。快速开始安装到第一次文本生成最短路径就两步命令。Prism 迭代较快建议锁定版本安装然后把配置发布到config/prism.phpcomposer require prism-php/prism php artisan vendor:publish --tagprism-config在.env里填上 API Key比如OPENAI_API_KEY然后发出第一个请求use Prism\Prism\Facades\Prism; use Prism\Prism\Enums\Provider; $response Prism::text() -using(Provider::OpenAI, gpt-4o) -withPrompt(给一家新开的咖啡店写 3 个开业活动口号) -asText(); echo $response-text;要点using()的第一个参数可以传Provider枚举也可以直接传字符串anthropic响应对象自带usagetoken 统计算成本时不用再猜。多轮对话让模型接住上一句话你的客服机器人如果只带当前这句话去问模型用户第二句那儿童票呢必然失焦。把完整历史以消息对象传进去即可use Prism\Prism\ValueObjects\Messages\UserMessage; use Prism\Prism\ValueObjects\Messages\AssistantMessage; $response Prism::text() -using(anthropic, claude-3-5-sonnet-latest) -withSystemPrompt(你是旅行预订系统的客服回答要简短) -withMessages([ new UserMessage(北京到东京往返机票多少钱), new AssistantMessage(往返经济舱 3200 元支持退改签。), new UserMessage(儿童有优惠吗), ]) -asText();要点withMessages()和withPrompt()二选一不能同时用系统人设放withSystemPrompt()。消息对象怎么组装、怎么落库可以看消息管理实现。⚡ 流式响应别让用户盯着空白页长文本一次性返回要等十几秒体验上等于挂了。把请求改成事件流后端只改一个方法名return Prism::text() -using(anthropic, claude-3-5-sonnet-latest) -withPrompt(request(message)) -asEventStreamResponse();前端用EventSource监听text_delta事件逐块追加文本即可。另外两种方式asDataStreamResponse()兼容 Vercel AI SDK 的useChat钩子asBroadcast()直接推给 Laravel 广播频道。流事件如何分发见流式事件适配器。结构化输出让模型返回能直接入库的数据当你想让模型的分类结果存进数据库时用正则抠 JSON 迟早出事故。定义一个 SchemaPrism 保证返回的就是这个形状use Prism\Prism\Schema\ObjectSchema; use Prism\Prism\Schema\StringSchema; use Prism\Prism\Schema\NumberSchema; $schema new ObjectSchema( name: support_ticket, properties: [ new StringSchema(category, 工单类别), new NumberSchema(priority, 优先级 1-5), new StringSchema(summary, 一句话摘要), ], requiredFields: [category, priority, summary], ); $response Prism::structured() -using(Provider::OpenAI, gpt-4o) -withSchema($schema) -withPrompt(用户反馈订单三天没发货客服一直没人回。请分类并评估优先级。) -asStructured(); Ticket::create($response-structured);要点OpenAI 的 strict 模式要求根 Schema 必须是ObjectSchema各家对 structured mode 的支持程度不同上线前查一下对应提供商文档。全部 Schema 类型在 Schema 实现目录。你的场景Prism 入口深入看哪篇一次性文案生成、问答Prism::text()-asText()文本生成文档客服、助手等多轮对话withMessages()withSystemPrompt()多模态与消息链说明Web 端打字机效果asEventStreamResponse()/asBroadcast()流式输出文档数据入库、API、表单处理Prism::structured() Schema结构化输出文档让模型访问你自己的业务ToolwithMaxSteps()工具调用文档看懂图片、PDF、音视频withPrompt()第二个参数传媒体数组输入模态文档多模态让模型看图、读文档电商详情页自动化是最典型的场景主图 PDF 规格书丢进去让它写卖点。use Prism\Prism\ValueObjects\Media\Image; use Prism\Prism\ValueObjects\Media\Document; $response Prism::text() -using(gemini, gemini-1.5-flash) -withPrompt( 根据主图和规格书写一段 50 字内的商品卖点介绍, [ Image::fromLocalPath(storage/app/product-main.png), Document::fromLocalPath(storage/app/spec-sheet.pdf), ], ) -asText(); 媒体对象支持本地路径、base64 和 URLAudio、Video同理哪些提供商支持哪种输入以提供商文档为准。媒体值对象的实现都在 Media 目录下面这张日落图就是仓库里现成的测试素材工具调用给模型接上你的代码模型不知道你库里还剩多少货。定义一个工具它会自己决定什么时候调、传什么参数use Prism\Prism\Facades\Tool; $stock Tool::as(check_stock) -for(查询某个 SKU 的实时库存) -withStringParameter(sku, 商品 SKU) -using(fn (string $sku): string (string) Product::where(sku, $sku)-value(stock)); $response Prism::text() -using(anthropic, claude-3-5-sonnet-latest) -withMaxSteps(2) -withTools([$stock]) -withPrompt(K2401 现在还有货吗) -asText();要点必须withMaxSteps(2)给模型留出手执行工具的空间工具函数只能返回字符串参数校验失败默认不抛异常而是把错误信息回给模型让它自我纠正。整个调用—执行—回传循环的实现在工具调用 concern。 进阶实践反馈自动变成工单把上面几块拼起来解决一个真实问题用户反馈进来先让模型查订单状态再把结论分类落库。$orderTool Tool::as(lookup_order) -for(查询用户最近的订单状态) -withStringParameter(user_id, 用户 ID) -using(fn (string $userId): string (string) Order::latest(created_at)-value(status)); $response Prism::structured() -using(Provider::OpenAI, gpt-4o) -withMaxSteps(2) -withTools([$orderTool]) -withSchema($schema) -withPrompt(用户反馈三天没发货客服一直没人回。用户 IDU-1024) -asStructured(); Ticket::create($response-structured);模型会先调lookup_order拿到真实订单状态再按 Schema 输出分类结果——多步循环、参数校验、错误回传全在 Prism 内部完成你的代码只负责定义工具 存数据。什么时候该选 Prism如果你用 PHP/Laravel 写后端要同时接 OpenAI、Anthropic、Gemini、DeepSeek或者想留一条接本地 Ollama 的路做降成本方案Prism 的统一接口能让你换模型只改配置不改代码而如果你只用单一提供商且要第一时间用上它的新特性官方 SDK 可能更直接。进阶资料从仓库里的文档入口 看起docs/core-concepts/下流式、结构化、工具调用、测试 Fake 各有一篇专题。【免费下载链接】prismA unified interface for working with LLMs in Laravel项目地址: https://gitcode.com/gh_mirrors/prism14/prism创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表