ใช้ Places Aggregate API เพื่อสร้างคะแนนสถานที่ที่กำหนดเอง

วัตถุประสงค์

รูปภาพ

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

เอกสารนี้อธิบายวิธีใช้ Places Aggregate API เพื่อสร้างคะแนนสถานที่แบบไดนามิกที่กําหนดเอง โดยอิงตามความหนาแน่นของสถานที่ภายในพื้นที่ทางภูมิศาสตร์ที่กําหนด คะแนนซึ่งเป็นการจัดอันดับตัวเลขตามเกณฑ์ที่ระบุจะสื่อสารได้ทันทีว่าสถานที่นั้นเหมาะกับความต้องการของผู้ใช้มากน้อยเพียงใด

ลองพิจารณาสถานการณ์ที่คุณโปรโมตโรงแรมในเมืองหนึ่งและต้องการไฮไลต์โรงแรมในพื้นที่ท่องเที่ยวที่น่าสนใจที่สุดด้วยการสร้างคะแนนความเหมาะสำหรับนักท่องเที่ยว ใช้ Places Aggregate API เพื่อนับจํานวนประเภทสถานที่ที่เกี่ยวข้องซึ่งอยู่ใกล้โรงแรมแต่ละแห่ง ตัวอย่างเช่น คุณทราบว่าลูกค้าให้ความสำคัญกับโรงแรมในสถานที่ตั้งที่อยู่ใกล้กับสถานที่ต่อไปนี้

  • ร้านอาหารและร้านกาแฟ
  • สวนสาธารณะและพิพิธภัณฑ์
  • ร้านเสื้อผ้า

การใช้การถ่วงน้ำหนักความสำคัญกับจํานวนสถานที่ประเภทที่เลือกเหล่านี้จะช่วยให้คุณคํานวณคะแนนโดยรวมสําหรับสถานที่ตั้งโรงแรมแต่ละแห่งได้ คะแนนนี้แสดงถึงความเหมาะสมโดยรวมของสถานที่ โดยอิงตามสถานที่ใกล้เคียง น้ำหนักที่กำหนดให้กับสถานที่แต่ละประเภทควรสอดคล้องกับ Use Case ที่เฉพาะเจาะจงและสิ่งที่มีความสำคัญต่อกลุ่มเป้าหมาย เอกสารนี้จะใช้คะแนนเหมาะสำหรับนักท่องเที่ยวเป็นตัวอย่างหลัก แต่คุณสร้างคะแนนให้สอดคล้องกับข้อมูลประชากรและความต้องการของผู้ใช้ได้

ข้อกำหนดเบื้องต้น

ก่อนอ่านเอกสารนี้ เราขอแนะนำให้คุณทำความคุ้นเคยกับเอกสารประกอบต่อไปนี้

  • เอกสารประกอบสำหรับนักพัฒนาซอฟต์แวร์ของ Places Aggregate API เพื่อทําความเข้าใจรายละเอียดทางเทคนิคและพารามิเตอร์ที่ใช้ได้
  • [ไม่บังคับ] เอกสารประกอบนักพัฒนาแอป Gemini เกี่ยวกับ API เพื่อทําความเข้าใจวิธีเรียกใช้ Gemini โดยใช้ API และใช้ในเอกสารนี้เพื่อเป็นตัวเลือกในการสร้างคะแนนตําแหน่งที่กำหนดเอง

สาธิต

การสาธิตนี้แสดงตัวอย่างคะแนนสถานที่ที่กำหนดเอง เลือกเมืองจากเมนูแบบเลื่อนลง แล้วคลิกปุ่มคํานวณคะแนนที่กําหนดเองเพื่อแสดงคะแนนสถานที่ตั้งที่กําหนดเองสําหรับสถานที่ตั้ง 5 แห่งที่ป้อนข้อมูลไว้ล่วงหน้า

เลือกประเภทสถานที่ที่เกี่ยวข้อง

ขั้นตอนแรกในการสร้างคะแนนสถานที่ที่กำหนดเองคือเลือกประเภทสถานที่ที่เกี่ยวข้องกับลูกค้าจากตาราง A ขณะกําลังสร้างคะแนนเหมาะสำหรับนักท่องเที่ยว เราได้เลือกสถานที่ประเภทต่อไปนี้ซึ่งนักท่องเที่ยวต้องการอยู่ใกล้ๆ ระหว่างเข้าพัก

  • ร้านอาหาร
  • สวนสาธารณะ
  • clothing_store
  • พิพิธภัณฑ์
  • coffee_shop

ถัดไป ให้กําหนดน้ำหนักให้กับสถานที่แต่ละประเภทเหล่านี้ ซึ่งแสดงถึงความสําคัญแบบสัมพัทธ์ในคะแนนสุดท้าย คุณควรกําหนดน้ำหนักโดยพิจารณาจากสิ่งที่สําคัญที่สุดสําหรับ Use Case และความต้องการของผู้ใช้ ในตัวอย่างนี้ รูปแบบการให้น้ำหนักจะอยู่ระหว่าง 0 ถึง 1 ดังนี้

ประเภทสถานที่

การถ่วงน้ำหนัก

ร้านอาหาร

0.8

สวนสาธารณะ

0.6

clothing_store

0.3

พิพิธภัณฑ์

0.2

coffee_shop

0.5

Call Places Aggregate API

เมื่อคุณมีรายการประเภทสถานที่ที่สนใจแล้ว ขั้นตอนถัดไปคือการเรียกใช้ Places Aggregate API

Places Aggregate API ต้องใช้ตัวกรองสถานที่ตั้ง ในตัวอย่างนี้ ให้ใช้ circle โดยที่ latLng ตรงกลางคือตำแหน่งของโรงแรม และ radius เท่ากับ 500 เมตร นอกจากนี้ ให้ตั้งค่า ratingFilter ให้แสดงสถานที่ที่มีคะแนนระหว่าง 3.8 ถึง 5 โดยยกเว้นสถานที่ที่มีคะแนนต่ำกว่าจากการนับ

ลองเปลี่ยนการตั้งค่าตัวกรองสถานที่สําหรับ Use Case ที่เฉพาะเจาะจง เช่น คุณอาจต้องการจับภาพสถานที่ภายในรัศมีที่กว้างขึ้นจากละติจูดและลองจิจูดของศูนย์กลางโดยเพิ่มค่าของรัศมี หรือคุณอาจต้องการใช้วิธีอื่นในการตั้งค่าพื้นที่การค้นหา เช่น ภูมิภาค หรือพื้นที่ที่กําหนดเอง

ทำความคุ้นเคยกับส่วนตัวกรองสถานที่ของเอกสารประกอบเกี่ยวกับ Places Aggregate API เพื่อดูข้อมูลเกี่ยวกับตัวเลือกที่มีให้คุณ

เรียกใช้ Places Aggregate API สําหรับสถานที่แต่ละประเภทและสถานที่ตั้งที่ต้องการสร้างคะแนนที่กําหนดเอง ตัวอย่างเช่น เรียกใช้ประเภทสถานที่ร้านอาหารสำหรับโรงแรมแห่งหนึ่งของคุณ

curl --location 'https://areainsights.googleapis.com/v1:computeInsights' \
--header 'X-Goog-Api-Key: API_KEY \
--header 'Content-Type: application/json' \
--data '{
    "insights": [
        "INSIGHT_COUNT"
    ],
    "filter": {
        "locationFilter": {
            "circle": {
                "latLng": {
                    "latitude": 51.51611,
                    "longitude": -0.12726
                },
                "radius": 500
            }
        },
        "typeFilter": {
            "includedTypes": [
                "restaurant"
            ]
        },
        "ratingFilter": {
            "minRating": 3.8,
            "maxRating": 5
        }
    }
}'

หลังจากการเรียก API ทั้งหมดเสร็จสมบูรณ์แล้ว คุณจะมีข้อมูลสำหรับแต่ละสถานที่ดังต่อไปนี้

ประเภทสถานที่

การถ่วงน้ำหนัก

จำนวน

ร้านอาหาร

0.8

56

สวนสาธารณะ

0.6

3

clothing_store

0.3

32

พิพิธภัณฑ์

0.2

8

coffee_shop

0.5

41

สร้างคะแนนสถานที่ตั้งที่กําหนดเอง

ตอนนี้คุณมีจํานวนสถานที่และน้ำหนักของสถานที่แต่ละประเภทสําหรับแต่ละสถานที่แล้ว คุณจึงสร้างคะแนนสถานที่ที่กําหนดเองได้ เราจะพูดถึง 2 ตัวเลือกในส่วนนี้ ได้แก่ การใช้อัลกอริทึมในเครื่องหรือใช้ Gemini Developer API

ตัวเลือกที่ 1: ใช้อัลกอริทึม

ตัวเลือกแรกที่เราจะพูดถึงคือการใช้อัลกอริทึมในพื้นที่เพื่อสร้างคะแนนโดยใช้น้ำหนักและจำนวนของสถานที่แต่ละประเภท ปรับคะแนนนี้เป็นรูปแบบ 0 ถึง 5 โดยค่าที่สูงกว่าบ่งบอกถึงพื้นที่ที่น่าสนใจกว่าตามเกณฑ์ของคุณ สําหรับตัวอย่างนี้ ให้สร้างออบเจ็กต์ JavaScript 2 รายการจากข้อมูลด้านบน

itemCounts

typeWeights

    {
      "restaurant": 56,
      "park": 3,
      "clothing_store": 32,
      "museum": 8,
      "coffee_shop": 41
    }
    
    {
      "restaurant": 0.8,
      "park": 0.6,
      "clothing_store": 0.3,
      "museum": 0.2,
      "coffee_shop": 0.5
    }
    

สร้างคะแนนจากจํานวนและการถ่วงน้ำหนักโดยการคูณ itemCounts ด้วย typeWeights แล้วเพิ่มผลลัพธ์ลงใน weightedCount โดยรวม

let weightedCount = 0;
for (const itemType in itemCounts) {
  weightedCount += itemCounts[itemType] * typeWeights[itemType];
}
weightedCount = weightedCount.toFixed(2);

ในตัวอย่างนี้ เอาต์พุตของขั้นตอนนี้คือ 78.3

ตอนนี้คุณใช้การทำให้มาตรฐานแบบลอการิทึมเพื่อสร้างคะแนนสุดท้ายของสถานที่นี้ในสเกล 0 ถึง 5 ได้แล้ว

if (weightedCount === 0) {
   normalizedScore = 0;
} else {
   normalizedScore = Math.log(weightedCount + 1);
}

// Clamp between 0 and 5
normalizedScore = Math.max(0, Math.min(5, normalizedScore));

ในตัวอย่างนี้ เอาต์พุตคะแนนสุดท้ายคือ 4.36 (ปัดเศษทศนิยม 2 ตำแหน่ง)

ตัวเลือกที่ 2: ใช้ Gemini Developer API

Gemini Developer API เป็นทางเลือกที่มีประสิทธิภาพในการคํานวณคะแนนสถานที่ตั้งที่กําหนดเองสําหรับสถานที่ตั้งทั้งหมด แทนการใช้อัลกอริทึมในพื้นที่ เพียงระบุจํานวนข้อมูลและน้ำหนักพร้อมกับวิธีการของระบบสําหรับสถานที่ตั้งโรงแรมทั้งหมด

วิธีนี้มีประโยชน์อย่างยิ่งหากคุณมีข้อมูลที่ละเอียดอ่อนซึ่งคุณต้องการรวมไว้ในการคํานวณ เช่น

  • คำอธิบายแบบข้อความสำหรับสถานที่ตั้งของโรงแรมแต่ละแห่ง เช่น "สถานที่นี้เหมาะสำหรับครอบครัวและพื้นที่เงียบสงบในตอนกลางคืน"
  • ข้อมูลเกี่ยวกับผู้ใช้ เช่น "ผู้ใช้รายนี้จองที่พักให้ครอบครัวและต้องการที่พักที่เงียบสงบในใจกลางเมือง"

Gemini Developer API สามารถเข้าใจและพิจารณาข้อมูลเชิงคุณภาพนี้ ซึ่งส่งผลให้ได้คะแนนที่มีความซับซ้อนและมีความเกี่ยวข้องมากกว่าแนวทางทางคณิตศาสตร์ล้วนๆ

เมื่อใช้ Gemini Developer API นอกเหนือจากประเภทสถานที่และตารางการให้น้ำหนักข้างต้น คุณจะมีข้อมูลรายละเอียดสำหรับสถานที่แต่ละแห่งดังต่อไปนี้

ตำแหน่ง

คำอธิบาย

51.49884, -0.17978

ตั้งอยู่ใจกลางเมืองใกล้กับพิพิธภัณฑ์ เงียบสงบในตอนกลางคืน และเหมาะสำหรับครอบครัว

51.51750, -0.13065

ตั้งอยู่ใจกลางเมืองใกล้กับบาร์และร้านอาหาร เสียงดังและวุ่นวายในตอนกลางคืน เหมาะสำหรับมาเป็นกลุ่ม

51.45712, 0.01146

ที่พักอาศัยที่อยู่ไกลจากใจกลางเมือง

51.51271, -0.09933

ที่พักตั้งอยู่ใจกลางเมืองใกล้กับแม่น้ำ เงียบสงบในตอนกลางคืน และเหมาะสำหรับครอบครัว

51.58502, -0.06445

ที่พักอาศัยที่อยู่ไกลจากใจกลางเมือง

คุณใส่คำอธิบายเชิงคุณภาพเหล่านี้พร้อมกับข้อมูลหรือค่ากําหนดของผู้ใช้ไว้ในพรอมต์ที่ส่งไปยัง Gemini ได้

วิธีการของระบบ

Gemini ต้องใช้วิธีการพร้อมกับข้อมูลดิบเพื่อให้ทราบว่าต้องสร้างคะแนนสำหรับสถานที่แต่ละแห่งตามจุดข้อมูลที่ให้ไว้ ตัวอย่างวิธีการของระบบเพื่อให้บรรลุเป้าหมายนี้อาจเป็นดังนี้

You will be given a json file containing details about a number of locations grouped by their latitude and longitudes.

Within the location details is information about the count of places nearby the location that match a specific category, and the weighting of importance of that category, between 0 - 1.

You will also be given information about the user's preference, and a description of each location. Take this into consideration when generating scores.

Generate a location suitability score taking these into account for each location. The score should be between 1 - 5 inclusive, to two decimal places. The minimum score a location can receive is 1.

Output in JSON

คำสั่งของระบบข้างต้นช่วยให้ Gemini ทราบว่าควรคาดหวังข้อมูลใดและผลลัพธ์ที่คาดหวังจากโมเดล AI เป็นอย่างไร รวมถึงขอผลลัพธ์ในรูปแบบ JSON ด้วย

เอาต์พุตที่มีโครงสร้าง

แม้ว่าเราจะขอให้ Gemini แสดงผลลัพธ์เป็น JSON แต่เราจำเป็นต้องระบุโครงสร้างของเอาต์พุตให้ชัดเจนยิ่งขึ้น เพื่อให้ทราบสิ่งที่จะเกิดขึ้นเมื่อเราค้นหาด้วยโค้ด ในกรณีนี้ เราสามารถเพิ่มคำสั่ง structured output เพิ่มเติมลงในคําขอได้โดยใช้ช่อง responseSchema ใน Gemini API ซึ่งจะใช้ออบเจ็กต์สคีมา OpenAPI เพื่อจำกัดเอาต์พุตของโมเดล

เช่น

{
  "type": "array",
  "description": "Array of location data with score",
  "items": {
    "type": "object",
    "properties": {
      "location": {
        "type": "object",
        "description": "Geographical coordinates of the location",
        "properties": {
          "latitude": {
            "type": "number",
            "format": "float",
            "description": "Latitude of the location"
          },
          "longitude": {
            "type": "number",
            "format": "float",
            "description": "Longitude of the location"
          }
        },
        "required": [
          "latitude",
          "longitude"
        ]
      },
      "score": {
        "type": "string",
        "description": "A score associated with the location"
      }
    },
    "required": [
      "location",
      "score"
    ]
  }
}

ตัวอย่างนี้ขอให้ Gemini แสดงผลอาร์เรย์ JavaScript ด้วยข้อมูลต่อไปนี้

  • ละติจูดและลองจิจูดของสถานที่
  • คะแนนสถานที่ตั้งที่กำหนดเอง

เมื่อใช้คำสั่งของระบบและเอาต์พุตที่มีโครงสร้างข้างต้น คำตอบจาก Gemini สำหรับสถานที่ตั้งหนึ่งๆ จะมีลักษณะดังนี้ โดย score คือคะแนนสถานที่ตั้งที่กำหนดเอง

[
  {
    "location": {
      "latitude": 51.51611,
      "longitude": -0.12726
    },
    "score": "4.13"
  }
]

แสดงคะแนน

เมื่อสร้างคะแนนสถานที่ตั้งที่กำหนดเองสำหรับสถานที่แต่ละแห่งโดยใช้วิธีการใดวิธีหนึ่งที่อธิบายไว้แล้ว คะแนนดังกล่าวจะแสดงพร้อมกับรายละเอียดของโรงแรม หรือใช้เป็นตัวเลือกการกรองการค้นหาได้ เช่น "แสดงสถานที่ที่มีคะแนนเหมาะสำหรับนักท่องเที่ยวสูง" ซึ่งจะช่วยให้ลูกค้าตัดสินใจได้อย่างมีข้อมูลเมื่อทำการจอง

บทสรุป

การใช้คะแนนสถานที่ตั้งที่กำหนดเองอาจเป็นเครื่องมือที่มีประสิทธิภาพในการช่วยให้ผู้ใช้เห็นภาพรวมความเหมาะสมของพื้นที่ได้อย่างรวดเร็ว เอกสารนี้แสดงการสร้างคะแนนสถานที่ตั้งที่กำหนดเองสำหรับสถานที่ต่างๆ โดยใช้สถานที่ 5 ประเภทแยกกัน การติดตั้งใช้งานนี้สามารถแก้ไขให้เหมาะกับความต้องการของคุณ และสามารถรวมประเภทสถานที่ที่คล้ายกันไว้ในคําขอเดียวเพื่อแสดงผลจํานวนรวมของประเภทเหล่านั้นเพื่อส่งไปยังโซลูชันการให้คะแนนสถานที่ที่กำหนดเอง

ลองใช้ Places Aggregate API เลยเพื่อสร้างคะแนนสถานที่ที่มีประโยชน์เพื่อช่วยให้ลูกค้ามีข้อมูลในการตัดสินใจตามสถานที่

ผู้ร่วมให้ข้อมูล

Henrik Valve | DevX วิศวกร