跳转到主要内容

概览

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

Bedrock API key 可以在 AWS 管理控制台中获取。
Bedrock API key 仅适用于 Bedrock Runtime API。使用 bedrock-agent-runtime 的 reranking 和 Amazon Polly (TTS) 无法使用它。这些场景请使用 SigV4 或默认 AWS 凭据链。

方式 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 的环境中,可以省略 keysecret,使用默认的 AWS 凭据 provider 链
默认的凭据链会自动从环境变量、共享凭据文件 (~/.aws/credentials)、ECS 任务 role、EC2 实例配置文件等来源中解析凭据。

可选配置项

文本生成

Agent 类

通过 Artisan 命令创建 Agent 类。

Anonymous Agent

如果想不创建类而快速使用,可以借助 agent() 辅助函数。

流式输出

你也可以手动处理事件。

Tool 使用 (Function Calling)

定义会在生成过程中被调用的 tool。
在 Agent 中使用它。
也可以在 Anonymous Agent 中使用。
Tool 调用在流式输出中同样有效。SDK 会自动执行 tool,并持续对话,直到得到最终的文本响应。

文件附件

通过 attachments 参数可以向 prompt 中附加图像、文档、音频和视频文件。Bedrock Converse API 会处理附件块,但实际可以使用的格式取决于模型(例如 Anthropic Claude 只支持图像和文档)。
支持的附件类型是 Laravel\Ai\Files\* 下的 ImageDocumentAudio。视频可以通过 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
开始一个新会话。
继续已有的会话。
Bedrock 驱动会自动把会话历史包含到 Bedrock Converse API 的请求中,因此所有支持的模型都可以获得多轮会话上下文。

结构化输出

实现 HasStructuredOutput 接口,即可获取带类型的响应。
Anonymous Agent 也可以使用结构化输出。
在内部,它会创建一个合成 tool(output_structured_data)来强制返回符合 schema 的值。这种方式通过 Converse API 与 Bedrock 上的所有模型都兼容。

Converse API(全部模型)

所有文本生成和流式输出都通过 Bedrock Converse API 执行。包含 Anthropic Claude 在内的接口都是统一的,Amazon Nova、Meta Llama、Mistral、Cohere、DeepSeek 等 Bedrock 上的各种模型都可以通过同一个接口使用。
流式输出、tool 使用、结构化输出、文件附件都会在支持这些能力的模型上生效。详情请参考 Bedrock 支持模型列表

Provider Options

如果要传递 anthropic_version 等 Bedrock 特有选项,请实现 HasProviderOptions
支持的 Provider Options:

Agent 的配置属性

可以通过 PHP attribute 配置文本生成的选项。

图像生成

使用 Stability AI 模型(默认)或 Amazon Nova Canvas 生成图像。
可用的 Stability AI 模型(全部需要 us-west-2 区域):
Stability AI 的图像模型仅在 us-west-2 可用。使用这些模型时,请设置 AWS_DEFAULT_REGION=us-west-2

使用 Stability AI 进行图像编辑

Stability AI Image Services 的编辑类模型也可以通过 attachments() 方法使用。传入输入图像,再通过编辑模型进行转换。
可用的 Stability AI 编辑模型(全部可在 us-east-1us-east-2us-west-2 使用): Amazon Nova Canvas 也受支持,但 AWS 正在逐步将其弃用。

语音 (TTS)

使用 Amazon Polly 从文本生成语音。
可以指定男声 / 女声。
指定具体的 Polly voice
保存生成的音频。
也可以指定引擎(模型)。
默认语音: default-female → Ruth,default-male → Matthew(两者都支持 generative 引擎)。
Amazon Polly 与 Bedrock 是不同的 AWS 服务。Bedrock API key(bearer token)不能用于 Polly。请使用 AWS IAM 凭据 (SigV4) 或默认 AWS 凭据链。

Embedding

使用 Amazon Titan Embeddings V2 生成向量 embedding。
可以指定维度(Titan Embeddings V2 支持 256、512、1024)。
指定自定义模型的示例。

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 仓库
最后修改于 2026年7月18日