Phần 21. Hiểu ngôn ngữ

0
291

Bài viết trước đã trình bày cách chuyển đổi lời nói thành văn bản bằng thiết bị IoT. Để sử dụng đoạn văn bản đó để lập trình một bộ đếm thời gian thông minh, mã cần phải hiểu những gì người dùng đã nói. Giả sử người dùng nói một cụm từ cố định, như “Đặt hẹn giờ 3 phút”, bạn sẽ phân tích cú pháp đó để biết thời gian hẹn giờ. Nếu người dùng nói “Đặt hẹn giờ trong 3 phút”, bạn hoặc tôi sẽ hiểu ý của câu này, nhưng mã máy tính thì không, nó mong đợi một cụm từ cố định.

Bài viết này trình bày cách sử dụng các mô hình AI để giải thích các văn bản giúp thực hiện yêu cầu của người sử dụng qua lời nói. Ví dụ khi nhận lệnh “Đặt hẹn giờ 3 phút” hoặc “Đặt hẹn giờ trong 3 phút” thì thiết bị đều hiểu để thực hiện hẹn giờ trong 3 phút.

Trong bài viết này, chúng ta sẽ tìm hiểu về các mô hình hiểu ngôn ngữ, cách tạo, đào tạo và sử dụng chúng từ mã.

Một số nội dung chính trong bài viết:

1. Khái niệm Hiểu ngôn ngữ

2. Cách tạo mô hình hiểu ngôn ngữ

3. Ý định và thực thể

4. Cách sử dụng mô hình hiểu ngôn ngữ

1. Khái niệm Hiểu ngôn ngữ

Con người đã sử dụng ngôn ngữ để giao tiếp hàng trăm nghìn năm. Chúng ta giao tiếp bằng lời nói, âm thanh hoặc hành động và hiểu những gì được nói, không chỉ ý nghĩa của từ ngữ, âm thanh hoặc hành động, mà còn cả ngữ cảnh của chúng. Chúng ta hiểu sự chân thành và châm biếm, cho phép những từ giống nhau có nghĩa khác nhau tùy thuộc vào giọng nói.

Hiểu ngôn ngữ, còn được gọi là hiểu ngôn ngữ tự nhiên, là một phần của lĩnh vực trí tuệ nhân tạo được gọi là xử lý ngôn ngữ tự nhiên (NLP) và xử lý khả năng đọc hiểu, cố gắng hiểu chi tiết từ hoặc câu. Nếu bạn sử dụng trợ lý giọng nói như Alexa hoặc Siri là đã sử dụng dịch vụ hiểu ngôn ngữ. Đây là những dịch vụ AI hậu trường giúp chuyển đổi “Alexa, phát album mới nhất của Taylor Swift” thành “con gái tôi đang nhảy những giai điệu yêu thích quanh phòng khách”.

Bất chấp tất cả những tiến bộ, máy tính vẫn còn một chặng đường dài phía trước để hiểu được văn bản một cách thực sự. Khi chúng ta đề cập đến việc hiểu ngôn ngữ với máy tính, không có nghĩa là bất cứ điều gì gần như tiên tiến như giao tiếp của con người, thay vào đó chỉ lấy một số từ và trích xuất các chi tiết chính.

Con người đôi khi hiểu ngôn ngữ theo phản xạ tự nhiên. Nếu có yêu cầu “chơi album mới nhất của Taylor Swift” thì theo bản năng người nghe sẽ hiểu ngay. Đối với một máy tính thì khó hơn để hiểu: nó sẽ phải lấy các từ, chuyển đổi từ giọng nói sang văn bản và tính ra các phần thông tin sau:

– Âm nhạc cần được phát

– Âm nhạc của nghệ sĩ Taylor Swift

– Nhạc cụ thể là một album gồm nhiều bài hát theo thứ tự

Taylor Swift có nhiều album, vì vậy cần sắp xếp theo thứ tự thời gian và bắt buộc phải có album publish gần nhất.

 Mô hình hiểu ngôn ngữ là các mô hình AI được đào tạo để trích xuất các chi tiết nhất định từ ngôn ngữ, sau đó sử dụng học chuyển tiếp để đào tạo cho các nhiệm vụ cụ thể, giống như sử dụng bộ hình ảnh nhỏ để đào tạo mô hình Custom Vision.

2. Cách tạo mô hình hiểu ngôn ngữ

Có thể tạo mô hình hiểu ngôn ngữ bằng LUIS- dịch vụ hiểu ngôn ngữ của Microsoft, là một phần của Cognitive Services.

* Cách tạo tài nguyên tác giả

Để sử dụng LUIS, cần tạo một tài nguyên tác giả.

Sử dụng lệnh sau để tạo tài nguyên tác giả trong nhóm tài nguyên smart-timer:

az cognitiveservices account create --name smart-timer-luis-authoring \
                                    --resource-group smart-timer \
                                    --kind LUIS.Authoring \
                                    --sku F0 \
                                    --yes \
                                    --location <location>

Thay thế <location> bằng vị trí đã sử dụng khi tạo Resource Group.

 LUIS không khả dụng ở tất cả các khu vực, vì vậy nếu bạn gặp lỗi sau:

InvalidApiSetId: The account type 'LUIS.Authoring' is either invalid or unavailable in given region.

hãy chọn một khu vực khác.

* Cách tạo một ứng dụng hiểu ngôn ngữ

1. Mở cổng LUIS tại luis.ai trong trình duyệt và đăng nhập bằng chính tài khoản bạn đang sử dụng cho Azure.

2. Làm theo hướng dẫn trên hộp thoại để chọn đăng ký Azure, sau đó chọn tài nguyên smart-timer-luis-authoring vừa tạo.

3. Từ danh sách Conversation apps, hãy chọn nút New app để tạo ứng dụng mới. Đặt tên cho smart-timer của ứng dụng mới và đặt Culture thành ngôn ngữ của bạn.

Đã có sẵn một nguồn tài nguyên cho dự đoán. Bạn có thể tạo tài nguyên thứ hai chỉ để dự đoán, nhưng tài nguyên tác giả miễn phí cho phép 1.000 dự đoán mỗi tháng, đủ để phát triển, vì vậy bạn có thể để trống phần này.

4. Đọc qua hướng dẫn xuất hiện sau khi tạo ứng dụng để hiểu các bước cần thực hiện để đào tạo mô hình hiểu ngôn ngữ.

3. Ý định và thực thể

Sự hiểu biết ngôn ngữ dựa trên ý định và thực thể. Ý định là mục đích của các từ, như phát nhạc, đặt hẹn giờ hoặc gọi món ăn.Thực thể là những gì mục đích đề cập đến, như album, thời lượng của bộ hẹn giờ hoặc loại thực phẩm. Mỗi câu mà mô hình diễn giải phải có ít nhất một ý định và một hoặc nhiều thực thể.

Ví dụ:

CâuÝ địnhThực thể
“Phát album mới nhất của Taylor Swift”Chơi nhạcalbum mới nhất của Taylor Swift
“Đặt hẹn giờ 3 phút”Đặt hẹn giờ3 phút
“Hủy hẹn giờ của tôi”Hủy hẹn giờKhông có
“Gọi 3 pizza dứa lớn và salad caesar”Gọi món3 pizza dứa lớn, salad caesar

Để đào tạo LUIS, trước tiên đặt các thực thể là danh sách các thuật ngữ cố định hoặc được học từ văn bản. Ví dụ: Danh sách cố định các loại thực phẩm có sẵn từ thực đơn với các biến thể (hoặc từ đồng nghĩa) của mỗi từ, như egg plantaubergine là các biến thể của aubergine. LUIS cũng có các thực thể được tạo sẵn như số và vị trí.

Để đặt bộ hẹn giờ, có thể sử dụng các thực thể số được tạo sẵn cho thời gian và một thực thể khác cho các đơn vị như phút và giây. Mỗi đơn vị sẽ có nhiều biến thể bao gồm các dạng số ít và số nhiều.

Khi đã xác định được các thực thể, bước tiếp theo là tạo ra các ý định. Mô hình sẽ học dựa trên các câu ví dụ mà bạn cung cấp ( các câu nói). Ví dụ: với mục đích đặt bộ hẹn giờ, có thể sử dụng các câu sau:

set a 1 second timer

set a timer for 1 minute and 12 seconds

set a timer for 3 minutes

set a 9 minute 30 second timer

Sau đó, cho LUIS biết phần nào của những câu này ánh xạ tới các thực thể:

Câu set a timer for 1 minute and 12 seconds có ý định set timer, gồm 2 thực thể, mỗi thực thể có 2 giá trị:

 Timeunit
1 minute1minute
12 seconds12second

Để đào tạo một mô hình tốt, cần một loạt các câu khác nhau với các cách khác nhau để yêu cầu cùng một nội dung.

Như với bất kỳ mô hình AI nào, càng nhiều dữ liệu và dữ liệu để đào tạo càng chính xác càng tốt.

* Cách thêm các thực thể vào các mô hình hiểu ngôn ngữ

Đối với bộ hẹn giờ, bạn cần thêm 2 thực thể – một cho đơn vị thời gian (phút hoặc giây) và một cho số phút hoặc giây.

Xem hướng dẫn sử dụng cổng LUIS tại Quickstart: Build your app in LUIS portal documentation on Microsoft docs.

1. Từ cổng LUIS, chọn tab Entities và thêm number đối tượng được tạo sẵn bằng cách chọn nút Add prebuilt entity, sau đó chọn number từ danh sách.

2. Tạo một thực thể mới cho đơn vị thời gian bằng cách sử dụng nút Create. Đặt tên cho time unit thực thể và đặt loại thành List. Thêm giá trị cho minutesecond vào danh sách Normalized values, thêm dạng số ít và số nhiều vào danh sách synonyms. Nhấn return sau khi thêm từng từ đồng nghĩa để thêm từ đó vào danh sách.

Normalized valueSynonyms
minuteminute, minutes
secondsecond, seconds

* Cách thêm ý định vào các mô hình hiểu ngôn ngữ

Từ tab Intents, chọn nút Create để tạo ý định mới. Đặt tên cho set timer có ý định này.

Trong các ví dụ, hãy nhập các cách khác nhau để đặt hẹn giờ bằng cách sử dụng cả phút, giây và phút và giây kết hợp. Ví dụ có thể là:

set a 1-second timer

set a 4 minutes timer

set a four minutes six seconds timer

set a 9 minute 30 seconds timer

set a timer for 1 minute and 12 seconds

set a timer for 3 minutes

set a timer for 3 minutes and 1 second

set a timer for three minutes and one second

set a timer for 1 minute and 1 second

set a timer for 30 seconds

set a timer for 1 second

Trộn các số dưới dạng từ và số để mô hình học cách xử lý cả hai.

3. Khi nhập từng ví dụ, LUIS sẽ bắt đầu phát hiện các thực thể, đồng thời gạch dưới và gắn nhãn bất kỳ thực thể nào mà nó tìm thấy.

* Cách đào tạo và kiểm tra mô hình

1. Sau khi định cấu hình các thực thể và ý định, huấn luyện mô hình bằng cách sử dụng nút Train trên menu, mô hình sẽ đào tạo sau vài giây. Nút sẽ chuyển sang màu xám trong khi đào tạo và được bật lại sau khi hoàn tất.

2. Chọn nút Test từ menu trên cùng để kiểm tra mô hình hiểu ngôn ngữ. Nhập văn bản, như set a timer for 5 minutes and 4 seconds và nhấn quay lại. Câu sẽ xuất hiện trong hộp bên dưới hộp văn bản mà bạn đã nhập nó vào, và đánh dấu đó sẽ là ý định hàng đầu hoặc ý định được phát hiện với xác suất cao nhất. Nên là set timer. Tên ý định sẽ được theo sau bởi xác suất ý định được phát hiện là đúng.

3. Chọn tùy chọn Inspect để xem bảng phân tích kết quả. Bạn sẽ thấy ý định ghi điểm cao nhất với xác suất phần trăm của nó, cùng với danh sách các thực thể được phát hiện.

4. Đóng Test sau khi kiểm tra xong.

* Cách publish mô hình

Cần pulish mô hình để có thể sử dụng từ mã. Khi publish từ LUIS, bạn có thể publish lên môi trường dàn dựng để thử nghiệm hoặc môi trường sản phẩm để phát hành đầy đủ. Trong bài viết này sử dụng môi trường dàn dựng.

1. Từ cổng LUIS, chọn nút Publish từ menu trên cùng.

2. Đảm bảo rằng đã chọn Staging slot, sau đó chọn Done. Bạn sẽ thấy thông báo khi ứng dụng được publish.

3. Bạn có thể kiểm tra điều này bằng cách sử dụng curl. Để xây dựng lệnh curl, bạn cần ba giá trị – điểm cuối, ID ứng dụng (App ID) và khóa API. Chúng có thể được truy cập từ tab MANAGE  được chọn từ menu trên cùng.

Từ phần Settings, sao chép ID ứng dụng

Từ phần  Azure Resources, chọn Authoring Resource và sao chép Primary Key và Endpoint URL

4. Chạy lệnh curl sau trong dấu nhắc lệnh hoặc thiết bị đầu cuối của bạn:

curl "<endpoint url>/luis/prediction/v3.0/apps/<app id>/slots/staging/predict" \
      --request GET \
      --get \
      --data "subscription-key=<primary key>" \
      --data "verbose=false" \
      --data "show-all-intents=true" \
      --data-urlencode "query=<sentence>"

Thay thế <endpoint url> bằng URL Endpoint từ phần Azure Resources.

Thay thế <app id> bằng ID ứng dụng từ phần Settings.

Thay thế <primary key> bằng Primary Key từ Azure Resources.

Thay thế <sentence> bằng câu bạn muốn kiểm tra.

5. Đầu ra của lệnh gọi này là một tài liệu JSON trình bày chi tiết về truy vấn, mục đích hàng đầu và danh sách các thực thể được chia nhỏ theo loại.

{
    "query": "set a timer for 45 minutes and 12 seconds",
    "prediction": {
        "topIntent": "set timer",
        "intents": {
            "set timer": {
                "score": 0.97031575
            },
            "None": {
                "score": 0.02205793
            }
        },
        "entities": {
            "number": [
                45,
                12
            ],
            "time-unit": [
                [
                    "minute"
                ],
                [
                    "second"
                ]
            ]
        }
    }
}

JSON ở trên đến từ việc truy vấn với set a timer for 45 minutes and 12 seconds:

set timer là mục đích hàng đầu với xác suất là 97%.

Hai thực thể number được phát hiện là 45 và 12.

Hai thực thể time-unit đã được phát hiện, minutesecond.

4. Cách sử dụng mô hình hiểu ngôn ngữ

Sau khi publish, có thể gọi mô hình LUIS từ mã. Trong các bài trước đã sử dụng IoT Hub để xử lý giao tiếp với các dịch vụ đám mây, gửi phép đo từ xa và nghe lệnh. Điều này không đồng bộ vì sau khi gửi đo từ xa, mã sẽ không đợi phản hồi và nếu dịch vụ đám mây ngừng hoạt động thì người dùng không biết.

Đối với bộ hẹn giờ thông minh, nó sẽ gửi thông báo bộ hẹn giờ đã được đặt hoặc thông báo các dịch vụ đám mây không khả dụng cho người dùng. Để làm điều này, thiết bị IoT sẽ gọi trực tiếp một điểm cuối web, thay vì dựa vào IoT Hub.

Thay vì gọi LUIS từ thiết bị IoT, có thể sử dụng serverless code với một loại trình kích hoạt khác – HTTP. Nó cho phép ứng dụng chức năng lắng nghe các yêu cầu REST và phản hồi chúng. Chức năng này sẽ là điểm cuối REST mà thiết bị có thể gọi.

Mặc dù có thể gọi LUIS trực tiếp từ thiết bị IoT, nhưng nên sử dụng serverless code. Khi đó, nếu muốn thay đổi ứng dụng LUIS, như khi đào tạo một mô hình tốt hơn hoặc đào tạo một mô hình bằng một ngôn ngữ khác, bạn chỉ phải cập nhật mã đám mây chứ không phải triển khai lại mã cho hàng nghìn hoặc hàng triệu thiết bị IoT.

* Cách tạo một ứng dụng chức năng không máy chủ

1. Tạo một ứng dụng Azure Functions có tên là smart-timer-trigger và mở ứng dụng này trong VS Code

2. Thêm trình kích hoạt HTTP vào ứng dụng này với tên speech-trigger bằng cách sử dụng lệnh sau từ bên trong thiết bị đầu cuối VS Code:

func new --name text-to-timer --template "HTTP trigger"

Điều này sẽ tạo một trình kích hoạt HTTP có tên là text-to-timer.

3. Kiểm tra trình kích hoạt HTTP bằng cách chạy ứng dụng chức năng. Khi đó sẽ thấy điểm cuối được liệt kê trong đầu ra:

Functions:

        text-to-timer: [GET,POST] http://localhost:7071/api/text-to-timer

Kiểm tra bằng cách tải URL http://localhost:7071/api/text-to-timer trong trình duyệt.

This HTTP triggered function executed successfully. Pass a name in the query string or in the request body for a personalized response.

* Cách sử dụng mô hình hiểu ngôn ngữ

1. SDK cho LUIS có sẵn thông qua gói Pip. Thêm dòng sau vào tệp tin  requirements.txt để thêm phần phụ thuộc vào gói này:

azure-cognitiveservices-language-luis

2. Đảm bảo rằng đã kích hoạt môi trường ảo pip install -r requirements.txttrên thiết bị đầu cuối VS Code và chạy lệnh sau để cài đặt các gói Pip:

pip install -r requirements.txt

Nếu gặp lỗi, cần phải nâng cấp pip bằng lệnh sau:

pip install --upgrade pip

3. Thêm các mục nhập mới vào file local.settings.json cho LUIS API Key, Endpoint URL và App ID từ MANAGE của cổng LUIS:

"LUIS_KEY": "<primary key>",
"LUIS_ENDPOINT_URL": "<endpoint url>",
"LUIS_APP_ID": "<app id>"

Thay thế <endpoint url> bằng URL Endpoint từ phần Azure Resources của tab MANAGE. Đây sẽ là https://<location>.api.cognitive.microsoft.com/.

Thay thế <app id> bằng ID ứng dụng từ phần Settings của tab MANAGE.

Thay thế <primary key> bằng Primary Key từ phần Azure Resources của tab MANAGE.

4. Thêm các lần nhập sau vào file __init__.py:

import json
import os
from azure.cognitiveservices.language.luis.runtime import LUISRuntimeClient
from msrest.authentication import CognitiveServicesCredentials

Các lệnh này nhập một số thư viện hệ thống, cũng như các thư viện để tương tác với LUIS.

5. Xóa nội dung của phương thức main và thêm mã sau:

luis_key = os.environ['LUIS_KEY']
endpoint_url = os.environ['LUIS_ENDPOINT_URL']
app_id = os.environ['LUIS_APP_ID']

credentials = CognitiveServicesCredentials(luis_key)
client = LUISRuntimeClient(endpoint=endpoint_url, credentials=credentials)

Thao tác này tải các giá trị bạn đã thêm vào tệp local.settings.json cho ứng dụng LUIS, tạo đối tượng thông tin xác thực bằng khóa API, sau đó tạo đối tượng khách LUIS để tương tác với ứng dụng LUIS của bạn.

6. Trình kích hoạt HTTP này sẽ được gọi là truyền văn bản để hiểu là JSON, với văn bản trong thuộc tính được gọi là text. Đoạn mã sau trích xuất giá trị từ nội dung của yêu cầu HTTP và ghi nó vào bảng điều khiển. Thêm mã này vào chức năng main:

req_body = req.get_json()
text = req_body['text']
logging.info(f'Request - {text}')

7. Dự đoán được yêu cầu từ LUIS bằng cách gửi yêu cầu dự đoán – tài liệu JSON chứa văn bản dự đoán. Tạo bằng mã sau:

prediction_request = { 'query' : text }

8. Sau đó, yêu cầu này được gửi đến LUIS, sử dụng staging slot mà ứng dụng của bạn đã được publish lên:

prediction_response = client.prediction.get_slot_prediction(app_id, 'Staging', prediction_request)

9. Phản hồi dự đoán chứa mục đích hàng đầu – mục đích có điểm dự đoán cao nhất cùng với các thực thể. Nếu mục đích hàng đầu là set- timer, thì các thực thể cosprediction_response = client.prediction.get_slot_prediction(app_id, ‘Staging’, prediction_request) thể được đọc để có thời gian cần thiết cho bộ đếm thời gian:

if prediction_response.prediction.top_intent == 'set timer':
    numbers = prediction_response.prediction.entities['number']
    time_units = prediction_response.prediction.entities['time unit']
    total_seconds = 0

Các thực thể number sẽ là một mảng số. Ví dụ: nếu bạn nói “Set a four minute 17 second timer”, thì number sẽ chứa 2 số nguyên là 4 và 17.

Các thực thể time unit sẽ là một mảng các chuỗi, với mỗi đơn vị thời gian là một mảng các chuỗi bên trong mảng. Ví dụ: nếu bạn nói “Set a four minute 17 second timer”,, thì mảng time unit sẽ chứa 2 mảng với các giá trị đơn lẻ mỗi mảng – ['minute'] và ['second']

Phiên bản JSON của những thực thể này cho “Set a four minute 17 second timer” là:

{
    "number": [4, 17],
    "time unit": [
        ["minute"],
        ["second"]
    ]
}

Mã này cũng xác định số đếm cho tổng thời gian cho bộ đếm thời gian tính bằng giây và được điền bởi các giá trị từ các thực thể.

Các thực thể không được liên kết nhưng chúng ta có thể đưa ra một số giả định về chúng. Chúng sẽ theo thứ tự được nói, do đó vị trí trong mảng có thể được sử dụng để xác định số nào khớp với đơn vị thời gian nào. Ví dụ:

“Set a 30 second timer” – mục này sẽ có một số: 30 và một đơn vị thời gian: second để số đơn sẽ khớp với đơn vị thời gian duy nhất.

“Set a 2 minute and 30 second timer” – câu này sẽ có hai số: 2 và 30, và hai đơn vị thời gian: minutesecond, vì vậy số đầu tiên sẽ dành cho đơn vị thời gian đầu tiên (2 minutes) và số thứ hai dành cho đơn vị thời gian thứ hai (30 seconds).

Đoạn mã sau lấy số lượng các mục trong các thực thể số và sử dụng số đó để trích xuất mục đầu tiên từ mỗi mảng, sau đó đến mục thứ hai, v.v. Thêm đoạn mã sau vào bên trong khối if.

for i in range(0, len(numbers)):
    number = numbers[i]
    time_unit = time_units[i][0]

Với câu “Set a four minute 17 second timer.”, nó sẽ lặp lại hai lần cho các giá rị sau:

loop countnumbertime_unit
04minute
117second

11. Bên trong vòng lặp này sử dụng số và đơn vị thời gian để tính tổng thời gian cho bộ đếm thời gian, thêm 60 giây cho mỗi phút và số giây cho từng giây.

if time_unit == 'minute':
    total_seconds += number * 60
else:
    total_seconds += number

12. Ghi lại tổng thời gian cho bộ đếm thời gian bên ngoài vòng lặp, thông qua các thực thể:

logging.info(f'Timer required for {total_seconds} seconds')

13. Số giây cần được trả về từ hàm dưới dạng phản hồi HTTP. Ở cuối khối if, thêm đoạn mã sau:

payload = {
    'seconds': total_seconds
}
return func.HttpResponse(json.dumps(payload), status_code=200)

Mã này tạo một trọng tải chứa tổng số giây cho bộ đếm thời gian, chuyển đổi thành một chuỗi JSON và trả về nó dưới dạng kết quả HTTP với mã trạng thái là 200, nghĩa là lệnh đã thực hiện thành công.

14. Cuối cùng, nếu mục đích không được nhận dạng bằng cách trả về mã lỗi như phía dưới, hãy xử lý bên ngoài khối if:

return func.HttpResponse(status_code=404)

404 là mã trạng thái not found.

15. Chạy ứng dụng chức năng và kiểm tra sử dụng curl.

curl --request POST 'http://localhost:7071/api/text-to-timer' \
     --header 'Content-Type: application/json' \
     --include \
     --data '{"text":"<text>"}'

Thay thế <text> bằng văn bản yêu cầu, như set a 2 minutes 27 second timer.

Kết quả hiển thị sau ứng dụng chức năng:

Functions:

        text-to-timer: [GET,POST] http://localhost:7071/api/text-to-timer

For detailed output, run func with --verbose flag.
[2021-06-26T19:45:14.502Z] Worker process started and initialized.
[2021-06-26T19:45:19.338Z] Host lock lease acquired by instance ID '000000000000000000000000951CAE4E'.
[2021-06-26T19:45:52.059Z] Executing 'Functions.text-to-timer' (Reason='This function was programmatically called via the host APIs.', Id=f68bfb90-30e4-47a5-99da-126b66218e81)
[2021-06-26T19:45:53.577Z] Timer required for 147 seconds
[2021-06-26T19:45:53.746Z] Executed 'Functions.text-to-timer' (Succeeded, Id=f68bfb90-30e4-47a5-99da-126b66218e81, Duration=1750ms)

Lệnh gọi curl sẽ trả về như sau:

HTTP/1.1 200 OK
Date: Tue, 29 Jun 2021 01:14:11 GMT
Content-Type: text/plain; charset=utf-8
Server: Kestrel
Transfer-Encoding: chunked

{"seconds": 147}

Số giây của bộ hẹn giờ tính bằng giá trị “seconds”.

Mã này nằm trong thư mục code/functions .

* Cách cung cấp chức năng cho thiết bị IoT

Để thiết bị IoT gọi điểm cuối REST, nó cần biết URL. Khi truy cập thiết bị trước đó, bạn đã sử dụng localhost, đây là một lối tắt để truy cập các điểm cuối REST trên máy cục bộ. Để cho phép thiết bị IoT có quyền truy cập, cần publish lên đám mây hoặc lấy địa chỉ IP của mình để truy cập cục bộ.

Nếu đang sử dụng Wio Terminal, việc chạy ứng dụng chức năng cục bộ dễ dàng hơn vì phụ thuộc vào các thư viện,do không thể triển khai ứng dụng chức năng theo cách đã làm trước đây. Chạy và truy cập ứng dụng chức năng cục bộ qua địa chỉ IP máy tính. Bài viết sau sẽ hướng dẫn cách triển khai lên đám mây.

Làm theo hướng dẫn trong các bài trước để publish ứng dụng chức năng lên đám mây. Sau khi được publish, URL sẽ là https://<APP_NAME>.azurewebsites.net/api/text-to-timer, trong đó <APP_NAME> sẽ là tên của ứng dụng chức năng. Đảm bảo cũng publish các cài đặt cục bộ.

Khi làm việc với trình kích hoạt HTTP, chúng được bảo mật mặc định bằng khóa ứng dụng chức năng. Để lấy khóa này, hãy chạy lệnh sau:

az functionapp keys list --resource-group smart-timer \
                         --name <APP_NAME>                               

Sao chép giá trị của mục nhập default từ phần functionKeys.

{
  "functionKeys": {
    "default": "sQO1LQaeK9N1qYD6SXeb/TctCmwQEkToLJU6Dw8TthNeUH8VA45hlA=="
  },
  "masterKey": "RSKOAIlyvvQEQt9dfpabJT018scaLpQu9p1poHIMCxx5LYrIQZyQ/g==",
  "systemKeys": {}
}

Cách tìm địa chỉ IP:

Trên Windows 10, xem tại hướng dẫn tìm địa chỉ IP

Trên macOS, xem hướng dẫn tại cách tìm địa chỉ IP trên máy Mac

Trên linux, xem hướng dẫn cách tìm địa chỉ IP riêng tại trang tìm địa chỉ IP của bạn trong hướng dẫn Linux

Sau khi có địa chỉ IP của mình, bạn sẽ có thể truy cập chức năng http://<IP_ADDRESS>:7071/api/text-to-timer, với<IP_ADDRESS> là địa chỉ IP, ví dụhttp://192.168.1.10:7071/api/text-to-timer

Sau địa chỉ IP, bạn sẽ cần phải có: 7071 và thiết bị IoT phải trên cùng một mạng với máy tính của bạn.

Kiểm tra điểm cuối bằng cách truy cập bằng curl.

Biên soạn: Bắc Đặng

Để cập nhật tin tức công nghệ mới nhất và các sản phẩm của công ty AIoT JSC, vui lòng truy cập link: http://aiots.vn hoặc linhkienaiot.com

0 0 Phiếu bầu
Article Rating
Subscribe
Notify of
guest
0 Comments
Phản hồi nội tuyến
Xem tất cả các bình luận