概觀
revolution/laravel-amazon-bedrock 是可讓 Laravel AI SDK 使用 Amazon Bedrock 的驅動。可透過 Laravel AI SDK 的統一 API 使用 Bedrock 上的多種模型。表中的
⚠️ 表示的不是「功能本身不支援」,而是「僅使用 Bedrock API 金鑰無法使用」。Laravel AI SDK v0.6.3 新增了使用 Bedrock API 金鑰的 Text、Image、Embeddings 的官方支援。由於本套件也支援官方整合尚未涵蓋的功能(如透過 Amazon Polly 的語音(TTS)與重新排序),因此仍持續公開。
- 認證:可從 Bedrock API 金鑰、AWS IAM 認證(SigV4)、預設 AWS 認證鏈(IAM 角色、instance profile 等)中選擇。
- Failover:支援 AI SDK 的多提供者 failover。速率限制(429)、過載(503、529)、額度相關錯誤會對應為可 failover 的例外。
- 快取控制:對 Bedrock Converse API 的系統提示常態啟用 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 提供者,並依需要將預設提供者切換為 Bedrock。
選項 1:Bedrock API 金鑰
選項 2:AWS IAM 認證(SigV4)
使用以 Signature Version 4 簽章的 AWS access key 與 secret key。AWS_SESSION_TOKEN 僅在使用臨時認證(STS)時設定。選項 3:預設 AWS 認證鏈(IAM 角色)
在 EC2、ECS、Lambda 等具備 IAM 角色的環境中,可省略key 與 secret,使用 預設的 AWS 認證提供者鏈。
~/.aws/credentials)、ECS task role、EC2 instance profile 等自動解析。
選用的設定鍵
文字生成
Agent 類別
以 Artisan 指令建立 Agent 類別。Anonymous Agent
不建立類別、需要快速使用時,可利用agent() 輔助函式。
串流
工具使用(Function Calling)
定義在生成過程中會被呼叫的工具。檔案附件
透過attachments 參數可將圖像、文件、音訊、影片附加至提示中。Bedrock Converse API 會處理附件區塊,但實際上可用的格式取決於模型(例:Anthropic Claude 僅支援圖像與文件)。
Laravel\Ai\Files\* 底下的 Image、Document、Audio。影片可透過 Illuminate\Http\UploadedFile 附加。
伺服器端的檔案上傳(
Document::fromPath()->put())以及透過 ID 重用(Document::fromId())在 Bedrock 中尚未支援。對話歷史
若要維持多輪對話,可在 Agent 類別中實作Conversational 介面。在 messages() 中回傳過去的對話訊息,SDK 會自動包含在每次提示中。
使用 RemembersConversations 自動儲存
若不想自行實作 messages(),可利用 RemembersConversations trait 進行完全自動的對話儲存。需要 AI SDK 的資料庫資料表,請先執行 php artisan vendor:publish --provider="Laravel\Ai\AiServiceProvider" && php artisan migrate。
結構化輸出
實作HasStructuredOutput 介面便可取得有型別的回應。
output_structured_data)。這種方式透過 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 屬性設定文字生成的選項。圖像生成
使用 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 引擎)。
嵌入
使用 Amazon Titan Embeddings V2 產生向量嵌入。Cohere Embed 模型
Cohere Embed 模型會自動被偵測並使用批次 API。Titan 每筆輸入都需一次 HTTP 請求,而 Cohere 會將所有輸入整合為一次請求,因此在處理多段文字時效率更好。Cohere Embed 模型不會回傳 token 數,因此
$response->tokens 一律為 0。重新排序
使用 Cohere Rerank 3.5 或 Amazon Rerank 1.0,依與查詢的相關度重新排序文件。重新排序 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()。
最新資訊請參考 GitHub 儲存庫。