透過 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 中的資料變化或其他觸發器中執行。

新增觸發器

  1. 前往 AWS Lambda 首頁,點選「新增觸發器」按鈕。
  2. 選擇「Alexa Skills Kit」作為觸發器型別。
  3. 輸入您之前複製的 Skill ID,然後點選「新增」按鈕。這樣可以確保只有具有該特定 Skill ID 的 Skill 可以呼叫 Lambda 函式。

組態端點

  1. 傳回 AWS Lambda 首頁,複製 ARN(Amazon Resource Name)。
  2. 切換到 Alexa Developer Console,將 ARN 輸入「預設端點」欄位中。這個欄位位於「構建」標籤的「端點」選項中。
  3. 儲存端點並重新構建您的模型。

編寫 Lambda 函式

  1. 傳回 AWS Lambda 首頁,檢視編輯器。
  2. 這是基本的 Lambda Python 程式碼,它可以執行,但不瞭解您的意圖。 3.您可以測試此程式碼。點選「測試」按鈕,儲存建議的函式(myTest),然後執行它。

修改程式碼

  1. 程式碼從 def lambda_handler(event, context): 開始。 2.您可以在此處輸入您的程式碼或上傳 zip 檔案(稍後我們也會這樣做)。在此示例中,我們將輸入程式碼。
  2. 我已修改程式碼以包含物體偵測功能。您可以從 Elektor 軟體(第 7 章)中找到此程式碼。
  3. 複製並貼上程式碼到編輯區域中。儲存它。
  4. 佈署您的程式碼。

測試函式

1.您可以從 Lambda 主控臺測試此函式。 2. 或者,您可以從 Developer Console 測試它,使用您之前設定的呼叫名稱啟動它。

顯示資訊

  1. 我們之前使用卡片顯示圖片。在 build_speechlet_response 函式中,我們使用卡片顯示文字:
'card': {
    'type': 'Simple',
    'title': "SpeechletTitle - " + title,
    'content': "SpeechletContent - " + output
}

這是一種快速簡單的方式,可以在具有螢幕的裝置上顯示資訊。

新增意圖

  1. 在此程式碼中,我們新增了一個意圖,以展示如何實作它。
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 等,將有助於打造更豐富、更強大的語音應用程式。