透過 AWS Lambda 和 Alexa Skills Kit,開發者可以建立更具彈性的語音控制 IoT 應用,擺脫 Alexa-Hosted Skills 的限制,例如 S3 和 DynamoDB 的容量限制。本文將逐步說明如何使用 Lambda 函式結合 ASK CLI 來建立一個語音控制的應用程式。首先,在 AWS Lambda 中建立一個新的函式,並設定 Alexa Skills Kit 作為觸發器,確保 Skill ID 與 Lambda 函式正確連結。接著,將 Lambda 函式的 ARN 複製到 Alexa Developer Console 中的端點設定,完成技能與後端邏輯的串接。後續步驟會示範如何在 Lambda 函式中撰寫 Python 程式碼,包含處理語音指令、控制 IoT 裝置以及回傳語音訊息等功能。此外,文章也提供新增意圖的程式碼範例,讓開發者可以根據需求擴充技能的功能。最後,我們將說明如何測試 Lambda 函式以及在 Alexa 裝置上進行實際測試,確保應用程式運作正常。
6.8 發布後
一旦發布(並且Amazon允許!),您可以新增技能啟動短語和意圖啟動短語。這些是我們在「Build」標籤中看到的內容。撰寫本文時,這些功能仍處於測試階段。如需更多資訊,請參考「名稱免費互動」,參考3。
6.9 分析
您可以透過玄貓找到您的技能的效能情況。您可以選擇一個時間段,並檢視會話數、唯一客戶、語音輸入次數等資料。您還可以檢視意圖使用百分比(此處停止意圖已使用12%,Fallback 25%,FindAWord 65%)。效能資料提供了語音輸入和意圖的信心指標。
第7章 使用Lambda和ASK CLI建立技能
7.1 簡介
到目前為止,我們一直使用Alexa-Hosted Skills來建立技能。這對於入門很好,但有一些限制,如我們已經看到的S3組態和DynamoDB儲存和讀寫限制。 有兩種其他方法可以建立技能。第一種是使用AWS Lambda服務,第二種是使用ASK CLI(Alexa Skill Kit命令列直譯器)。
7.1.1 AWS Lambda技能
使用此方法,您在開發者控制檯中建立技能模型(如我們所做的),但這次使用AWS Lambda程式碼編輯器網頁建立Lambda技能。保持兩個視窗同時開啟很有用。 然後,技能模型和程式碼必須連結起來——技能需要知道程式碼,反之亦然。您給Lambda函式分配技能ID和技能的ARN(Amazon資源編號)。 開發者控制檯介面自截圖以來已經改變,但程式相似。選擇您的技能名稱和地區;選擇體驗(其他)並向下滾動到組態自己的主機和地區;從頭開始,然後建立技能。 在開發者控制檯中建立一個技能,但這次我們不會使用Alexa-Hosted技能。選擇「組態自己的主機」而不是。 現在,單擊「建立技能」。您可以從一些範本中選擇。Node.js比Python有更多選擇。選擇「從頭開始」。 您的技能模型將被構建,開發者控制檯將被開啟。為了安全起見,請檢查呼叫名稱並將其設定為您的選擇。 如果您現在單擊「程式碼」標籤,您將沒有任何程式碼。 我們將在AWS Lambda控制檯中編輯程式碼。 我們需要技能ID,因此請選擇「端點」並複製技能ID: 稍後,我們將用函式程式碼ARN填充預設地區。 您需要一個AWS帳戶,如前所述。 「建立函式」將您帶到下一個螢幕,該螢幕提供選項,如「從頭開始編寫」、「選擇藍圖」或「瀏覽無伺服器應用儲存函式庫」。 無伺服器應用儲存函式庫目前有762個公共應用程式可供選擇,包括Python和Node.js的「hello world」以及alexa-skills-kit-nodejs-factskill。 選擇「從頭開始編寫」。 注意許可權。我們將使用預設值,但您可以設定許可權以允許程式碼或S3、資料函式庫CloudWatch存取。我們將在設計智慧家居技能時建立許可權。 命名函式,選擇執行時套件(我這裡使用Python),然後單擊「建立函式」。 下一個螢幕提供函式概覽、我們的ARN(需要用於技能)和程式碼區域。
使用 AWS Lambda 和 Alexa Skills Kit 建立語音控制 IoT 應用程式
在本章中,我們將探討如何使用 AWS Lambda 和 Alexa Skills Kit (ASK) 建立語音控制 IoT 應用程式。首先,我們需要在 AWS Lambda 中新增一個觸發器,該觸發器將執行我們的程式。這裡,我們將新增一個來自 Alexa Skills Kit 的觸發器,但您的程式碼也可以在圖片上傳、DynamoDB 中的資料變化或其他觸發器中執行。
新增觸發器
- 前往 AWS Lambda 首頁,點選「新增觸發器」按鈕。
- 選擇「Alexa Skills Kit」作為觸發器型別。
- 輸入您之前複製的 Skill ID,然後點選「新增」按鈕。這樣可以確保只有具有該特定 Skill ID 的 Skill 可以呼叫 Lambda 函式。
組態端點
- 傳回 AWS Lambda 首頁,複製 ARN(Amazon Resource Name)。
- 切換到 Alexa Developer Console,將 ARN 輸入「預設端點」欄位中。這個欄位位於「構建」標籤的「端點」選項中。
- 儲存端點並重新構建您的模型。
編寫 Lambda 函式
- 傳回 AWS Lambda 首頁,檢視編輯器。
- 這是基本的 Lambda Python 程式碼,它可以執行,但不瞭解您的意圖。 3.您可以測試此程式碼。點選「測試」按鈕,儲存建議的函式(myTest),然後執行它。
修改程式碼
- 程式碼從 def lambda_handler(event, context):開始。 2.您可以在此處輸入您的程式碼或上傳 zip 檔案(稍後我們也會這樣做)。在此示例中,我們將輸入程式碼。
- 我已修改程式碼以包含物體偵測功能。您可以從 Elektor 軟體(第 7 章)中找到此程式碼。
- 複製並貼上程式碼到編輯區域中。儲存它。
- 佈署您的程式碼。
測試函式
1.您可以從 Lambda 主控臺測試此函式。 2. 或者,您可以從 Developer Console 測試它,使用您之前設定的呼叫名稱啟動它。
顯示資訊
- 我們之前使用卡片顯示圖片。在 build_speechlet_response函式中,我們使用卡片顯示文字:
'card': {
    'type': 'Simple',
    'title': "SpeechletTitle - " + title,
    'content': "SpeechletContent - " + output
}
這是一種快速簡單的方式,可以在具有螢幕的裝置上顯示資訊。
新增意圖
- 在此程式碼中,我們新增了一個意圖,以展示如何實作它。
def say_hello():
    session_attributes = {}
    card_title = “Hello”
    speech_output = “Well done, your intent skill works”
    reprompt_text = “Say hello again”
    should_end_session = False
    return build_response(session_attributes, build_speechlet_response(
        card_title, speech_output, reprompt_text, should_end_session))
它從 def on_intent (intent_request, session): 程式碼中被呼叫:
def on_intent (intent_request, session):
    """ Called when the user specifies an intent for this skill """
    intent = intent_request['intent']
這樣就完成了使用 AWS Lambda 和 Alexa Skills Kit 建立語音控制 IoT 應用程式的過程。
使用 AWS Lambda 建立 Alexa 技能:結論
從雲端原生開發的視角來看,本章介紹的利用 AWS Lambda 建立 Alexa 技能的方法,展現了其在提升技能開發效率和擴充套件性方面的顯著優勢。相較於 Alexa-Hosted Skills 的侷限性,Lambda 賦予開發者更大的彈性,尤其在處理複雜邏輯、整合外部服務以及管理資源方面。透過 Lambda,我們可以突破儲存空間和資料函式庫讀寫的限制,更自由地運用各種 AWS 服務,例如本章中整合的物件偵測功能。
然而,Lambda 也並非毫無挑戰。開發者需要熟悉 AWS 生態系統,並掌握 Lambda 函式的佈署和管理。此外,許可權管理、程式碼除錯以及版本控制等方面也需要額外關注。對於初學者而言,學習曲線相對較陡峭。
展望未來,隨著 Serverless 架構的日益成熟,Lambda 的應用場景將更加廣泛。結合 ASK CLI 等工具,開發者可以更便捷地構建、測試和佈署 Alexa 技能,加速語音應用程式的創新。預期未來會有更多開發工具和框架出現,進一步簡化開發流程,降低開發門檻。
對於有意深入探索 Alexa 技能開發的團隊,玄貓建議優先掌握 Lambda 函式的核心概念和操作方法,並關注 Serverless 架構的最佳實踐。同時,積極探索與其他 AWS 服務的整合方案,例如 DynamoDB、S3 和 API Gateway 等,將有助於打造更豐富、更強大的語音應用程式。
 
            