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

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

รูปภาพ

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

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

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

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

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

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

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

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

สาธิต

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

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

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

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

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

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

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

ร้านอาหาร

0.8

สวนสาธารณะ

0.6

clothing_store

0.3

พิพิธภัณฑ์

0.2

coffee_shop

0.5

เรียกใช้ Places Aggregate API

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

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

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

ทำความคุ้นเคยกับส่วนตัวกรองสถานที่ตั้งในเอกสารประกอบเกี่ยวกับ 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 แต่เราต้องระบุโครงสร้างของเอาต์พุตให้ชัดเจนยิ่งขึ้น เพื่อให้เราทราบถึงสิ่งที่คาดหวังได้เมื่อค้นหาด้วยโค้ด ในกรณีนี้ เราสามารถเพิ่มคำสั่งเอาต์พุต ที่มีโครงสร้าง เพิ่มเติมลงในคำขอได้โดยใช้ฟิลด์ 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 Engineer