> For the complete documentation index, see [llms.txt](https://www.saladpuk.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://www.saladpuk.com/cloud/machine-learning-studio/call-your-api.md).

# ลองเรียกใช้ AI ของเรากัน

หลังจากที่เราได้เห็นตัวอย่างการสร้าง AI ตั้งแต่ขั้นเริ่มต้น จนกระทั่งเราสามารถ train model ที่มีความแม่นยำในระดับที่เราพอใจออกมาแล้ว ... ดังนั้นในรอบนี้เราจะมาลองเรียกใช้ตัว AI ที่เราสร้างกันดูบ้าง

{% hint style="success" %}
**แนะนำให้อ่าน**\
บทความนี้เป็นหนึ่งในซีรี่ **Machine Learning** ดังนั้นถ้าเพื่อนสนใจของสนุกๆ เช่นการสร้าง AI เพื่อ [ทำนายราคารถยนต์](https://saladpuk.gitbook.io/learn/cloud/machine-learning-studio/ml101) [วิเคราะห์ว่าควรอนุมัติบัตรเครดิตหรือเปล่า](https://saladpuk.gitbook.io/learn/cloud/machine-learning-studio/credit-risk) ทำนายว่าฝนจะตกหรือไม่ และอื่นๆ สามารถดูเนื้อหาทั้งหมดได้จาก Side menu ในหมวดของ **Machine Learning Studio** ครับ ซึ่งถ้ามีบทความเกี่ยวกับ machine learning ก็จะมาลงในหมวดนี้เรื่อยๆ แต่ถ้าอยากรู้ว่า AI สำเร็จรูปของ Microsoft Azure มีอะไรน่าเล่นบ้าง ไปอ่านกันได้จากลิงค์นี้เลยครัช [👶 Azure Cognitive Services](https://saladpuk.gitbook.io/learn/cloud/azure-cognitive-services) เชื่อผมเต๊อะ AI ไม่ได้ยากแบบที่คิด
{% endhint %}

ในการที่เราจะไปเรียกใช้ AI ที่เราทำไว้เป็น Web API เรียบร้อยแล้วนั้น โดยปรกติเราก็จะเขียนโปรแกรมไปทำงานกับ **REST API** นั่นเอง แต่ในรอบนี้ผมจะพาเพื่อนๆลองทำผ่าน Visual Studio Code ธรรมดากันดูบ้าง เพื่อให้เพื่อนๆที่ไม่ได้ถนัดในการเขียนโปรแกรมได้เข้าใจและทำตามได้นั่นเองครับ

## 🔥 Visual Studio Code

ให้ทำการเปิดโปรแกรม **Visual Studio Code** ขึ้นมา แล้วที่ด้านซ้ายให้เลือกเมนู **Extension** ครับ ตามรูปด้านล่างเลย

![](/files/-LvsZNbyYKEBgpuVCXIz)

{% hint style="info" %}
**Visual Studio Code**\
สำหรับใครที่ยังไม่ได้ลง Visual Studio Code ก็สามารถไปดาวโหลดมาติดตั้งได้จากลิงค์ด้านล่างนี้ครับ

* [Download Visual Studio Code](https://code.visualstudio.com/download)
  {% endhint %}

## 🔥 Rest Client

หลังจากนั้นในช่องค้นหาให้พิมพ์ลงไปว่า **Rest Client** แล้วทำการกดที่ปุ่ม **Install** เพื่อทำการติดตั้ง extension ตัวนี้ได้เลย

![](/files/-Lu0k9sbOnINEao0R7fH)

{% hint style="info" %}
**Rest Client**\
เป็นตัวช่วยให้เราสามารถทำงานกับ **Rest API** ได้แบบง่ายๆ ซึ่งมันก็จะคล้ายๆกับพวก **Postman**, **Fiddler** ที่ความสามารถน้อยกว่าประมาณนั้น
{% endhint %}

หลังจากที่ติดตั้งเรียบร้อยแล้ว ให้เราทำการสร้างไฟล์ใหม่ขึ้นมา โดยการกดที่เมนูด้านบน **`File > New File`** ตามรูปเลย

![](/files/-LpOvHcy1-7c2BfCMx09)

หลังจากนั้นให้ทำการบันทึกไฟล์นี้ทันที ซึ่งจะตั้งชื่อหรือเอาไว้ที่ไหนก็ได้ แต่จะ**ต้องใส่นามสกุล**ของมันเป็น **`.http`** ด้วยนะ

![](/files/-LpD3i8mgmoJsEjSyVD-)

## 🔥 เรียกใช้ AI

ถัดมาเราก็จะเริ่มมาเรียกใช้ AI ของเรากัน ซึ่งจากตัวอย่างที่ผ่านมา (ถ้ายังไม่ได้อ่านกดตรงนี้เพื่อกลับไปลองทำตามดูนะ - [มาสร้าง AI ของแท้ตัวแรกของเรากัน](https://saladpuk.gitbook.io/learn/cloud/machine-learning-studio/ml101)) ในขั้นตอนสุดท้ายเราจะทำสิ่งที่เรียกว่า **SET UP WEB SERVICE** เพื่อให้ได้ไฟล์ **Excel** มานั่นเอง ซึ่งเจ้าไฟล์ที่เราได้มันจะมีหน้าตาประมาณนี้

![](/files/-LqCU6EmpVujA9kC4UXz)

ซึ่งไฟล์ตัวนี้มีส่วนสำคัญ 3 อย่างคือ

1. **Web Service URL** - คือ URL ที่มีไว้ให้เราเรียกใช้งานตัว AI ที่เราเขียนไว้ใน Azure Machine Learning Studio นั่นเอง
2. **Access Key** - คือรหัสลับในการเรียกใช้งานตัว AI ของเรา ซึ่งปรกติเราจะไม่แจกตัวนี้ให้ใครมั่วซั่ว เพราะไม่อย่างนั้นคนที่รู้รหัสลับนี้ก็อาจจะมาใช้งานตัว AI ของเราเล่น และสุดท้ายตอนสิ้นเดือนเราก็อาจจะโดนเรียกเก็บเงินในส่วนที่เราไม่ได้เป็นคนใช้นั่นเอง
3. **Schema** - คือรูปแบบของข้อมูลที่เราจะส่งให้ AI ไปทำการวิเคราะห์

คราวนี้เราจะเริ่มมาทำความเข้าใจมันทีละตัวกันละ

### Web Service URL

อย่างที่บอกไว้ว่ามันคือช่องทางให้เราเรียกใช้ AI ของเราผ่านสิ่งที่เรียกว่า Rest API ได้นั่นเอง ซึ่งเราสามารถเข้าไปดูตัวที่เราเตรียมไว้ได้จากลิงค์นี้

![](/files/-LoLJaj3qqR_FowSU4h7)

พอเราเปิดเข้าไปปุ๊ปเราก็จะเจอรายละเอียดในการใช้งานตัว Rest API นั่นเอง ซึ่งในส่วนแรกให้เรา **Copy** ในโซนแดงๆของรูปด้านล่างนี้เอาไปใส่ใน Visual Studio Code ที่เปิดค้างไว้ได้เลย

![](/files/-LouBvmILNZ-VRmgC9qR)

เจ้าสีแดงที่ Copy มานี่แหละคือ Web Service URL ที่เราจะทำการเรียกไปหาตัว AI ของเรา ซึ่งตัวที่ Copy มานี้จะมีรายละเอียดที่เยอะกว่าในไฟล์ Excel แล้วเมื่อเราเอามันมาวางไว้ใน Visual Studio Code เราจะได้ผลลัพท์แบบรูปด้านล่างนี้

![](/files/-LqpkaUmdfK9oZyKh-Nl)

จากรูปด้านบนเราจะเห็นปุ่ม `Send Request` ให้เราลองกดปุ่มนั้นได้เลย มันจะทำการเรียก Rest API ไปหาตัว AI ของเรานั่นเอง ซึ่งเมื่อกดแล้วเราน่าจะได้ผลลัพท์ประมาณนี้

![](/files/-M-YJfjW5tka3U_OKpK1)

จากรูปด้านบนเขาจะบอกว่าเราไม่มีสิทธิ์ในการเข้าใช้งานนั่นเอง **`Unauthorized`** เพราะอย่างที่บอกว่า ใครก็แล้วแต่จะเรียกใช้งาน AI ของเราเขาจะต้องส่งของ 2 อย่างเข้ามาด้วยนั่นคือ **Access Key** และ **Data** ที่จะให้ตัว AI ทำการประมวลผลนั่นเอง

### Request Header

จากตรงนี้เราก็จะกลับไปที่เว็บที่เราเปิดค้างไว้ แล้วลองเลื่อนลงมาด้านล่างเราจะพบว่า ถ้าใครก็ตามที่ต้องการเรียกใช้งาน API ตัวนี้ จะต้องส่งข้อมูลไปให้เขาอย่างน้อย 3 อย่างคือ **Authorization, Content-Length, Content-Type** ตามรูปด้านล่างเลย

![](/files/-LntV3kZ3MyRe4NlO8Fp)

ดังนั้นจากตรงนี้เราก็จะทำการแนบ Header ไปให้ตามที่เขาขอมา ซึ่งเพื่อนๆสามารถ Copy โค้ดด้านล่างนี้ไปใส่ใน Visual Studio Code ต่อได้เลย

```
Authorization: Bearer YOUR_ACCESS_KEY
Content-Type: application/json
```

> **หมายเหตุ**\
> จากโค้ดด้านบนให้เพื่อนๆเอา Access Key ที่อยู่ในไฟล์ Excel ของตัวเองไปทับ YOUR\_ACCESS\_KEY เอานะ ส่วน Content-Length ไม่ต้องใส่ก็ได้ เพราะว่าตัว Rest Client จะเป็นคนเติมให้เอานั่นเอง

ซึ่งหลังจากที่เอามาวางแล้วจะได้หน้าตาประมาณนี้

![](/files/-LoQ_WtA2LhEjQCCNDjD)

### Request Body

คราวนี้ก็มาถึงส่วนสุดท้ายนั่นคือ Request Body หรือ Data ที่เราจะต้องส่งไปให้กับ AI เพื่อให้มันทำการเดาราคารถยนต์กลับมาให้เรานั่นเอง ซึ่งให้เรากลับไปดูที่เว็บตัวเดิมจะเห็นในโซนด้านล่างประมาณนี้

![ขอตัดมาแค่นี้นะมันยาวม๊วกอยู่](/files/-LpTpTl1mQLyIgMYXEye)

ซึ่งเจ้าตัว Request Body นี้เราสามารถดูได้จากไฟล์ Excel ของเราก็ได้ ที่อยู่ใน Schema นั่นเอง (ลอง copy ไปวางใน web browser ก็ได้นะ) แต่ในไฟล์ Excel ของเรามันจะแสดงเป็นคนละ format กันเฉยๆ แต่ถ้าดูดีๆก็จะพบว่าจริงๆมันก็คล้ายๆกันนั่นแหละ

ซึ่งจากตรงนี้เพื่อนๆสามารถ Copy โค้ดด้านล่างไปวางใน Visual Studio Code ได้เช่นเคย

```javascript
{
  "Inputs": {
    "input1": {
      "ColumnNames": [
        "symboling",
        "normalized-losses",
        "make",
        "fuel-type",
        "aspiration",
        "num-of-doors",
        "body-style",
        "drive-wheels",
        "engine-location",
        "wheel-base",
        "length",
        "width",
        "height",
        "curb-weight",
        "engine-type",
        "num-of-cylinders",
        "engine-size",
        "fuel-system",
        "bore",
        "stroke",
        "compression-ratio",
        "horsepower",
        "peak-rpm",
        "city-mpg",
        "highway-mpg",
        "price"
      ],
      "Values": [
        [
        3,
        1,
        "alfa-romero",
        "gas",
        "std",
        "two",
        "convertible",
        "rwd",
        "front",
        88.6,
        168.8,
        64.1,
        48.8,
        2548,
        "dohc",
        "four",
        130,
        "mpfi",
        3.47,
        2.68,
        9,
        111,
        5000,
        21,
        27,
        13495
        ]
      ]
    }
  }
}
```

ซึ่งเจ้าโค้ดยาวๆด้านบนคือ **ข้อมูลรถยนต์ 1 คัน** ที่ประกอบไปด้วย จำนวนล้อในการขับเคลื่อน ปีที่ผลิต สีรถ แรงม้า บลาๆ ซึ่งเป็นสิ่งที่จำเป็นในการนำไปทำนายราคารถยนต์นั่นเอง

ซึ่งจากตรงนี้เราก็ลองกด **`Send Request`** ได้เลย

![](/files/-LsfW0LC6i0YO1cmDVCL)

ซึ่งผลลัพท์ที่เราได้รับกลับมาก็จะออกมาราวๆนี้

```
HTTP/1.1 200 OK
Content-Length: 366
Content-Type: application/json; charset=utf-8
ETag: "d244b129899446c49c57a026dc985673"
Server: Microsoft-HTTPAPI/2.0
x-ms-request-duration: 00:00:00.0274519
x-ms-request-id: f3e6d29d-8b59-4fb1-a13f-32ca1cab3538
Date: Tue, 03 Dec 2019 10:35:51 GMT
Connection: close

{
  "Results": {
    "output1": {
      "type": "table",
      "value": {
        "ColumnNames": [
          "make",
          "body-style",
          "wheel-base",
          "engine-size",
          "horsepower",
          "peak-rpm",
          "highway-mpg",
          "price",
          "Scored Labels"
        ],
        "ColumnTypes": [
          "String",
          "String",
          "Double",
          "Int32",
          "Int32",
          "Int32",
          "Int32",
          "Int32",
          "Double"
        ],
        "Values": [
          [
            "alfa-romero",
            "convertible",
            "88.6",
            "130",
            "111",
            "5000",
            "27",
            "13495",
            "13498.1280337231"
          ]
        ]
      }
    }
  }
}
```

แม้ว่าจะยาวไปหน่อย แต่ใจความสำคัญของมันคือตรงนี้

```
"Values": 
[
    [
        "alfa-romero",
        "convertible",
        "88.6",
        "130",
        "111",
        "5000",
        "27",
        "13495",
        "13498.1280337231"
    ]
]
```

จะเห็นเลข **13495** กับ **13498.1280337231** ซึ่งเจ้าเลข 2 ตัวนี้คือ **ราคารถจริงๆที่เรากำหนดไว้** และ **ราคารถยนต์ที่ตัว AI มันทายให้เรา**นั่นเอง

## 🔥 เขียนโค้ดเรียก Rest API

สำหรับเพื่อนๆที่เป็นโปรแกรมเมอร์แล้วคันมือ อยากลองเขียนโค้ดไปเรียก REST API แล้วดูผลลัพท์ก็สามารถทำได้เลย โดยลองดูที่เว็บตัวเดิม แล้วเลื่อนลงไปด้านล่างสุด เราจะเห็นโค้ดตัวอย่างในการเรียกใช้งาน API ด้วยภาษาต่างๆอยู่ ซึ่งเพื่อนๆสามารถ Copy ภาษาที่ตัวเองถนัดแล้วลองเล่นดูได้เลยนะครับ (มันจะให้เราใส่ Access Key ไปลงในโค้ดด้วยนะลองหาดู)

![](/files/-LoNeeRuq6SZtLxFY7Bc)
