概览
revolution/laravel-amazon-bedrock 是用于在 Laravel AI SDK 中使用 Amazon Bedrock 的驱动。通过 Laravel AI SDK 的统一 API,你可以调用 Bedrock 提供的多种模型。表格中的
⚠️ 表示的不是 “功能本身不支持”,而是 “仅通过 Bedrock API key 无法使用”。Laravel AI SDK v0.6.3 已官方支持使用 Bedrock API key 的 Text、Image 与 Embeddings。本包同时还支持基于 Amazon Polly 的语音 (TTS)、reranking 等官方集成尚未提供的功能,因此仍会继续维护公开。
- 认证:可以从 Bedrock API key、AWS IAM 凭据 (SigV4)、默认 AWS 凭据链(IAM role、实例配置文件等)中选择。
- 故障转移:支持 AI SDK 的多 provider 故障转移。速率限制 (429)、过载 (503、529)、credit 相关错误会被映射为可故障转移的异常。
- 缓存控制:始终为 Bedrock Converse API 的 system prompt 启用 ephemeral 缓存。
- 统一 API:Anthropic Claude、Amazon Nova、Meta Llama、Mistral 等全部模型都通过 Bedrock Converse API,以统一的接口处理。
环境要求
- PHP >= 8.3
- Laravel >= 12.x
安装
1
安装包
2
发布 AI SDK 的配置
配置
在config/ai.php 中添加 amazon-bedrock provider。根据需要,也可以将默认 provider 切换为 Bedrock。
方式 1:Bedrock API key
方式 2:AWS IAM 凭据 (SigV4)
使用通过 Signature Version 4 签名的 AWS access key 和 secret key。只有在使用临时凭据 (STS) 时,才需要设置
AWS_SESSION_TOKEN。方式 3:默认 AWS 凭据链 (IAM role)
在 EC2 / ECS / Lambda 等具备 IAM role 的环境中,可以省略key 和 secret,使用默认的 AWS 凭据 provider 链。
~/.aws/credentials)、ECS 任务 role、EC2 实例配置文件等来源中解析凭据。
可选配置项
文本生成
Agent 类
通过 Artisan 命令创建 Agent 类。Anonymous Agent
如果想不创建类而快速使用,可以借助agent() 辅助函数。
流式输出
Tool 使用 (Function Calling)
定义会在生成过程中被调用的 tool。文件附件
通过attachments 参数可以向 prompt 中附加图像、文档、音频和视频文件。Bedrock Converse API 会处理附件块,但实际可以使用的格式取决于模型(例如 Anthropic Claude 只支持图像和文档)。
Laravel\Ai\Files\* 下的 Image、Document、Audio。视频可以通过 Illuminate\Http\UploadedFile 附加。
Bedrock 不支持服务端文件上传 (
Document::fromPath()->put()) 和通过 ID 复用 (Document::fromId())。会话历史
要保持多轮会话,请在 Agent 类中实现Conversational 接口。在 messages() 中返回过去的会话消息,它们会自动包含在每次 prompt 中。
使用 RemembersConversations 自动保存
如果你不想自己实现 messages(),可以使用 RemembersConversations trait 来实现完全自动的会话保存。它需要 AI SDK 的数据库表,所以请先执行 php artisan vendor:publish --provider="Laravel\Ai\AiServiceProvider" && php artisan migrate。
结构化输出
实现HasStructuredOutput 接口,即可获取带类型的响应。
output_structured_data)来强制返回符合 schema 的值。这种方式通过 Converse API 与 Bedrock 上的所有模型都兼容。
Converse API(全部模型)
所有文本生成和流式输出都通过 Bedrock Converse API 执行。包含 Anthropic Claude 在内的接口都是统一的,Amazon Nova、Meta Llama、Mistral、Cohere、DeepSeek 等 Bedrock 上的各种模型都可以通过同一个接口使用。Provider Options
如果要传递anthropic_version 等 Bedrock 特有选项,请实现 HasProviderOptions。
Agent 的配置属性
可以通过 PHP attribute 配置文本生成的选项。图像生成
使用 Stability AI 模型(默认)或 Amazon Nova Canvas 生成图像。us-west-2 区域):
Stability AI 的图像模型仅在
us-west-2 可用。使用这些模型时,请设置 AWS_DEFAULT_REGION=us-west-2。使用 Stability AI 进行图像编辑
Stability AI Image Services 的编辑类模型也可以通过attachments() 方法使用。传入输入图像,再通过编辑模型进行转换。
us-east-1、us-east-2、us-west-2 使用):
Amazon Nova Canvas 也受支持,但 AWS 正在逐步将其弃用。
语音 (TTS)
使用 Amazon Polly 从文本生成语音。default-female → Ruth,default-male → Matthew(两者都支持 generative 引擎)。
Embedding
使用 Amazon Titan Embeddings V2 生成向量 embedding。Cohere Embed 模型
Cohere Embed 模型会被自动识别并使用批处理 API。相比 Titan 对每条输入发送一次 HTTP 请求,Cohere 会把全部输入合并到一次请求中,处理多条文本时更高效。Cohere Embed 模型不返回 token 数,因此
$response->tokens 始终为 0。Reranking
使用 Cohere Rerank 3.5 或 Amazon Rerank 1.0,按与 query 的相关度对文档重新排序。Reranking API 使用的是
bedrock-agent-runtime 端点(而不是 bedrock-runtime)。Amazon Rerank 1.0 在 us-east-1 不可用,请在该区域改用 Cohere Rerank 3.5。测试
你可以直接使用 AI SDK 标准的测试功能。 虽然官方文档没有说明,但通过agent() 辅助函数创建的 Anonymous Agent 可以用 AnonymousAgent::fake() 进行 mock,而结构化输出版本则通过 StructuredAnonymousAgent::fake() 来 mock。
最新信息请参考 GitHub 仓库。