วัตถุประสงค์
การค้นหาสถานที่ที่เหมาะที่สุด ไม่ว่าจะเป็นโรงแรมสำหรับวันหยุดพักผ่อนที่กำลังจะมาถึงหรืออพาร์ตเมนต์ที่เหมาะสำหรับครอบครัว มักเกี่ยวข้องกับกระบวนการเปรียบเทียบตัวเลือกมากมายที่น่าหงุดหงิดและใช้เวลานาน จะดีแค่ไหนหากคุณสามารถช่วยให้ผู้ใช้ตัดสินใจได้ง่ายขึ้นด้วยการระบุเมตริกที่กำหนดเองซึ่งแสดงความเหมาะสมของโรงแรมสำหรับนักท่องเที่ยว หรือจัดอันดับข้อมูลอพาร์ตเมนต์ตามความเหมาะสมสำหรับครอบครัว ซึ่งจะเปลี่ยนงานที่น่าเบื่อให้กลายเป็นการตัดสินใจที่ง่ายดาย
เอกสารนี้อธิบายวิธีใช้ Places Aggregate API เพื่อสร้างคะแนนสถานที่แบบไดนามิกที่กำหนดเอง โดยอิงตามความหนาแน่นของสถานที่ภายในพื้นที่ทางภูมิศาสตร์ที่กำหนด คะแนนซึ่งเป็นการจัดอันดับตัวเลขตามเกณฑ์ที่คุณระบุจะสื่อสารทันทีว่าสถานที่นั้นเหมาะสมกับความต้องการของลูกค้าเพียงใด
ลองพิจารณาสถานการณ์ที่คุณกำลังโปรโมตโรงแรมในเมืองหนึ่งและต้องการไฮไลต์โรงแรมในพื้นที่ท่องเที่ยวที่น่าสนใจที่สุดโดยการสร้างคะแนนความเหมาะสมสำหรับนักท่องเที่ยว ใช้ Places Aggregate API เพื่อนับจำนวนประเภทสถานที่ที่เกี่ยวข้องซึ่งอยู่ใกล้กับโรงแรมแต่ละแห่ง ตัวอย่างเช่น คุณทราบว่าลูกค้าให้ความสำคัญกับโรงแรมที่ตั้งอยู่ใกล้กับสถานที่ต่อไปนี้
- ร้านอาหารและร้านกาแฟ
- สวนสาธารณะและพิพิธภัณฑ์
- ร้านเสื้อผ้า
การใช้การถ่วงน้ำหนักความสำคัญกับจำนวนสถานที่ประเภทที่เลือกเหล่านี้จะช่วยให้คุณคำนวณคะแนนโดยรวมสำหรับสถานที่ตั้งของโรงแรมแต่ละแห่งได้ คะแนนจะแสดงความเหมาะสมโดยรวมของสถานที่ตั้ง โดยอิงตามสถานที่ใกล้เคียง การถ่วงน้ำหนักที่กำหนดให้กับสถานที่แต่ละประเภทควรสอดคล้องกับ Use Case ที่เฉพาะเจาะจงและสิ่งที่สำคัญต่อกลุ่มเป้าหมาย เอกสารนี้จะใช้คะแนนเหมาะสำหรับนักท่องเที่ยวเป็นตัวอย่างหลัก แต่คุณสามารถสร้างคะแนนเพื่อแสดงข้อมูลประชากรและความต้องการของผู้ใช้ได้
ข้อกำหนดเบื้องต้น
ก่อนอ่านเอกสารนี้ เราขอแนะนำให้คุณทำความคุ้นเคยกับเอกสารประกอบต่อไปนี้
- เอกสารประกอบสำหรับนักพัฒนาซอฟต์แวร์ Places Aggregate API เพื่อทำความเข้าใจรายละเอียดทางเทคนิคและพารามิเตอร์ที่ใช้ได้
- [ไม่บังคับ] เอกสารประกอบสำหรับนักพัฒนาซอฟต์แวร์ Gemini Developer API เพื่อทำความเข้าใจวิธีเรียกใช้ Gemini โดยใช้ API และใช้ในเอกสารนี้เป็นตัวเลือกในการสร้างคะแนนสถานที่ตั้งที่กำหนดเอง
เลือกประเภทสถานที่ที่เกี่ยวข้อง
ขั้นตอนแรกในการสร้างคะแนนสถานที่ตั้งที่กำหนดเองคือการเลือกประเภทสถานที่ที่เกี่ยวข้องกับลูกค้าจากตาราง ก เนื่องจากเรากำลังสร้างคะแนนเหมาะสำหรับนักท่องเที่ยว เราจึงได้เลือกประเภทสถานที่ต่อไปนี้ที่นักท่องเที่ยวต้องการอยู่ใกล้ในระหว่างการเข้าพัก
- ร้านอาหาร
- สวนสาธารณะ
- 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 โดยไม่รวมสถานที่ที่มีคะแนนต่ำกว่าจากจำนวนนับ
ทดลองเปลี่ยนการตั้งค่าตัวกรองตำแหน่งสำหรับ 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 นอกเหนือจากตารางประเภทสถานที่และน้ำหนักด้านบนแล้ว คุณยังสามารถมีข้อมูลคำอธิบายสำหรับสถานที่แต่ละแห่งได้ดังนี้
ตำแหน่ง |
คำอธิบาย |
ตั้งอยู่ใจกลางเมืองใกล้กับพิพิธภัณฑ์ เงียบสงบในเวลากลางคืน และเหมาะสำหรับครอบครัว |
|
ตั้งอยู่ใจกลางเมือง ใกล้บาร์และร้านอาหาร เสียงดังและคนเยอะในตอนกลางคืน เหมาะสำหรับมาเป็นกลุ่ม |
|
สถานที่ตั้งอยู่ในย่านที่พักอาศัยซึ่งอยู่ห่างจากใจกลางเมือง |
|
ตั้งอยู่ใจกลางเมืองใกล้แม่น้ำ เงียบสงบในเวลากลางคืน และเหมาะสำหรับครอบครัว |
|
สถานที่ตั้งอยู่ในย่านที่พักอาศัยซึ่งอยู่ห่างจากใจกลางเมือง |
คุณสามารถใส่คำอธิบายเชิงคุณภาพเหล่านี้พร้อมกับข้อมูลหรือค่ากำหนดของผู้ใช้ไว้ในพรอมต์สำหรับ 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