iT邦幫忙

2025 iThome 鐵人賽

DAY 13
0
Build on AWS

來都來了,那就做一個AWS從0到100的微服務AI小平台!系列 第 13

Day 13 讓 AI 開口說話2:Lambda + Bedrock 串串香

  • 分享至 

  • xImage
  •  

📋 前置準備

在開始之前,請確保:

  • 已完成第九天的 Lambda 基礎建立
  • 擁有 AWS 帳戶並具備適當權限
  • 了解基本的 AWS 服務概念

🎯 為什麼選擇 DeepSeek-V3.1?

主要優勢

  • 自動開通 - 無需額外申請授權
  • 即用即付 - 按使用量計費

依照第九天的方式建立好 Lambda 函數,基礎設定完成後進入下一步。

進入 IAM 設定

  • 在 Lambda 控制台中選擇 組態
  • 點擊 角色名稱 連結跳轉至 IAM

https://ithelp.ithome.com.tw/upload/images/20250927/20106094iRf3yxqT05.png
檢查現有權限

  • 觀察發現只有基本的 Lambda 執行權限
  • 需要補充 Bedrock 相關權限

https://ithelp.ithome.com.tw/upload/images/20250927/20106094lAcYCIXhOM.png
新增 Bedrock 權限

  • 點擊右邊的 許可 按鈕
  • 選擇 連接政策
  • 在搜尋框中輸入 bedrock
  • 選擇適當的 Bedrock 權限政策

https://ithelp.ithome.com.tw/upload/images/20250927/20106094X5WBy0NCZY.png
⚠️安全原則提醒最小權限原則

只給予必要的操作權限,避免過度授權造成安全風險!

回到 Lambda 函數,開始撰寫 Bedrock 串接邏輯:

import json
import boto3
from botocore.exceptions import ClientError

def lambda_handler(event, context):
    """
    AWS Lambda 函數:使用 Bedrock 調用 DeepSeek-V3 模型
    """
    
    # 初始化 Bedrock Runtime 客戶端
    bedrock_runtime = boto3.client(
        service_name='bedrock-runtime',
        region_name='us-west-2'  # 根據區域調整
    )
    
    # DeepSeek-V3 模型 ID
    model_id = "deepseek.v3-v1:0"
    
    try:
        # 從 event 中獲取用戶輸入
        user_message = event.get('message', 'Hello, how are you?')
        
        # 構建請求負載
        request_body = {
            "messages": [
                {
                    "role": "user",
                    "content": user_message
                }
            ],
            "max_tokens": 1000,
            "temperature": 0.7,
            "top_p": 0.9
        }
        
        # 調用 Bedrock
        response = bedrock_runtime.invoke_model(
            modelId=model_id,
            contentType='application/json',
            accept='application/json',
            body=json.dumps(request_body)
        )
        
        # 解析回應
        response_body = json.loads(response['body'].read())
        generated_text = response_body['choices'][0]['message']['content']
        
        # 返回成功回應
        return {
            'statusCode': 200,
            'body': json.dumps({
                'message': generated_text,
                'success': True
            }, ensure_ascii=False)
        }
        
    except ClientError as e:
        return {
            'statusCode': 400,
            'body': json.dumps({
                'error': f"Bedrock Error: {e.response['Error']['Message']}",
                'success': False
            })
        }
        
    except Exception as e:
        return {
            'statusCode': 500,
            'body': json.dumps({
                'error': f"Error: {str(e)}",
                'success': False
            })
        }

完成程式碼撰寫後,點擊 Deploy 按鈕部署函數。

https://ithelp.ithome.com.tw/upload/images/20250927/201060943k3LOULL8h.png
⚠️ 重要設定

  1. 進入 組態 頁面
  2. 找到 一般組態 中的 逾時 設定
  3. 將預設的 3 秒改為 60 秒(1分鐘)

為什麼要調整?

Lambda 預設 3 秒逾時,但 AI 模型回應通常需要更長時間,避免函數執行中斷。

https://ithelp.ithome.com.tw/upload/images/20250927/201060944FLvZTjyAF.png

✅ 測試結果

成功指標

  • ✅ 狀態碼:200
  • ✅ 回應格式正確
  • ✅ AI 生成內容合理

https://ithelp.ithome.com.tw/upload/images/20250927/201060943BjkrhbFQH.png

🎉 完成!

這次的「串串香」沒有問題! 🍢

成功建立了:

  • AWS Lambda 函數
  • Bedrock AI 模型整合
  • 完整的錯誤處理機制
  • 可測試的 AI 對話功能

上一篇
Day 12 讓 AI 開口說話2 :Bedrock 小試身手
下一篇
Day 14 API的最後一哩路
系列文
來都來了,那就做一個AWS從0到100的微服務AI小平台!15
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言