मकसद
अपनी अगली छुट्टी के लिए होटल या परिवार के हिसाब से सही अपार्टमेंट ढूंढना, अक्सर एक मुश्किल और समय लेने वाली प्रोसेस होती है. इसमें कई विकल्पों की तुलना करनी पड़ती है. अगर आपको अपने उपयोगकर्ताओं के लिए इस काम को आसान बनाना हो, तो कस्टम मेट्रिक उपलब्ध कराएं. इससे पता चलता है कि कोई होटल पर्यटकों के लिए कितना सही है. इसके अलावा, अपार्टमेंट की लिस्टिंग को इस आधार पर रैंक किया जा सकता है कि वे परिवार के लिए कितने सही हैं. इससे, मुश्किल काम को आसान फ़ैसले में बदला जा सकता है.
इस दस्तावेज़ में, Places Aggregate API का इस्तेमाल करने का तरीका बताया गया है. इससे, किसी तय भौगोलिक इलाके में मौजूद जगहों की डेंसिटी के आधार पर, डाइनैमिक और कस्टम लोकेशन स्कोर जनरेट किए जा सकते हैं. स्कोर, आपकी तय की गई शर्तों के हिसाब से दी गई एक संख्यात्मक रैंकिंग है. इससे तुरंत पता चल जाएगा कि वह जगह उनकी ज़रूरतों के हिसाब से कितनी सही है.
मान लें कि आपको किसी शहर में मौजूद होटलों का प्रमोशन करना है. साथ ही, आपको पर्यटकों के लिए अच्छे स्कोर की मदद से, पर्यटकों के लिए सबसे आकर्षक इलाकों में मौजूद होटलों को हाइलाइट करना है. Places Aggregate API का इस्तेमाल करके, यह पता लगाएं कि हर होटल के आस-पास काम की कितनी जगहें हैं. उदाहरण के लिए, आपको पता है कि आपके ग्राहक उन जगहों पर मौजूद होटल पसंद करते हैं जो इनमें से कई जगहों के आस-पास हों:
- रेस्टोरेंट और कॉफ़ी शॉप
- पार्क और म्यूज़ियम
- कपड़े की दुकान
चुनी गई जगहों की संख्या के हिसाब से अहमियत का वेटेज लागू करके, हर होटल की जगह के लिए कुल स्कोर का हिसाब लगाया जा सकता है. स्कोर से पता चलता है कि आस-पास की जगहों के आधार पर, वह जगह कितनी सही है. हर जगह के टाइप को असाइन किया गया वेटेज, आपके इस्तेमाल के उदाहरण और आपकी टारगेट ऑडियंस के लिए ज़रूरी चीज़ों के हिसाब से होना चाहिए. इस दस्तावेज़ में, पर्यटकों के लिए अच्छा स्कोर को मुख्य उदाहरण के तौर पर इस्तेमाल किया जाएगा. हालांकि, आपके स्कोर को आपके उपयोगकर्ताओं की डेमोग्राफ़िक्स (उम्र, लिंग, आय, शिक्षा वगैरह) और ज़रूरतों के हिसाब से बनाया जा सकता है.
ज़रूरी शर्तें
इस दस्तावेज़ को पढ़ने से पहले, हमारा सुझाव है कि आप यहां दिए गए दस्तावेज़ों को पढ़ें:
- Places Aggregate API डेवलपर दस्तावेज़, ताकि तकनीकी जानकारी और उपलब्ध पैरामीटर को समझा जा सके.
- [ज़रूरी नहीं] Gemini Developer API डेवलपर दस्तावेज़. इससे यह समझने में मदद मिलती है कि एपीआई का इस्तेमाल करके Gemini को कैसे कॉल किया जाए. इस दस्तावेज़ में, कस्टम लोकेशन स्कोर जनरेट करने के विकल्प के तौर पर इसका इस्तेमाल किया गया है.
काम के प्लेस टाइप चुनें
कस्टम लोकेशन स्कोर बनाने के लिए, सबसे पहले टेबल A से उन जगहों के टाइप चुनें जो आपके ग्राहकों के लिए काम के हैं. हम पर्यटकों के लिए सही स्कोर बना रहे हैं. इसलिए, हमने ऐसी जगहों को चुना है जिनके आस-पास पर्यटक अपने ठहरने के दौरान जाना चाहेंगे:
- रेस्टोरेंट
- पार्क
- 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
}
}
}'
एपीआई को किए गए सभी कॉल पूरे होने के बाद, आपको हर जगह के लिए इस तरह का डेटा मिलेगा:
जगह का टाइप |
महत्व |
संख्या |
रेस्टोरेंट |
0.8 |
56 |
पार्क |
0.6 |
3 |
clothing_store |
0.3 |
32 |
म्यूज़ियम |
0.2 |
8 |
coffee_shop |
0.5 |
41 |
कस्टम लोकेशन स्कोर जनरेट करना
अब आपके पास हर जगह के लिए, जगहों की संख्या और हर जगह के टाइप के लिए वेटेज है. अब कस्टम लोकेशन स्कोर जनरेट किया जा सकता है. इस सेक्शन में, हम दो विकल्पों के बारे में बात करेंगे. पहला, लोकल एल्गोरिदम का इस्तेमाल करना और दूसरा, Gemini Developer API का इस्तेमाल करना.
पहला विकल्प: एल्गोरिदम का इस्तेमाल करना
सबसे पहले, हम स्थानीय एल्गोरिदम का इस्तेमाल करके स्कोर जनरेट करने के विकल्प के बारे में जानेंगे. इसके लिए, हर प्लेस टाइप के लिए वेटेज और संख्या का इस्तेमाल किया जाता है. इस स्कोर को 0 से 5 के स्केल पर नॉर्मलाइज़ करें. इसमें ज़्यादा वैल्यू का मतलब है कि आपकी शर्तों के आधार पर, वह इलाका ज़्यादा आकर्षक है. इस उदाहरण के लिए, ऊपर दिए गए डेटा से दो JavaScript ऑब्जेक्ट जनरेट करें:
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 है. इसे दशमलव के बाद दो अंकों तक राउंड किया गया है.
दूसरा विकल्प: 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 को यह पता चलता है कि उसे किस तरह का डेटा चाहिए और एआई मॉडल से किस तरह के आउटपुट की उम्मीद है. इसमें JSON फ़ॉर्मैट में आउटपुट का अनुरोध भी किया जाता है.
स्ट्रक्चर्ड आउटपुट
हमने Gemini से JSON फ़ॉर्मैट में आउटपुट देने के लिए कहा है. हालांकि, हमें आउटपुट के स्ट्रक्चर के बारे में ज़्यादा जानकारी देनी होगी. इससे हमें पता चलेगा कि कोड की मदद से क्वेरी करने पर, हमें क्या उम्मीद करनी चाहिए. इसके लिए, हम अनुरोध में स्ट्रक्चर्ड आउटपुट का एक और निर्देश जोड़ सकते हैं. इसके लिए, Gemini API में responseSchema फ़ील्ड का इस्तेमाल करें. यह मॉडल के आउटपुट को सीमित करने के लिए, 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"
}
]
स्कोर दिखाएं
यहां बताए गए किसी एक तरीके का इस्तेमाल करके, हर जगह के लिए कस्टम लोकेशन स्कोर जनरेट करने के बाद, उसे आपके होटल की जानकारी के साथ दिखाया जा सकता है. इसके अलावा, उसे खोज के लिए फ़िल्टर करने के विकल्प के तौर पर इस्तेमाल किया जा सकता है. उदाहरण के लिए, "मुझे ऐसी जगहें दिखाओ जिनका पर्यटकों के लिए अच्छी स्कोर ज़्यादा हो". इससे आपके ग्राहक, बुकिंग करते समय डेटा के आधार पर फ़ैसले ले पाएंगे.
नतीजा
कस्टम लोकेशन स्कोर का इस्तेमाल करके, उपयोगकर्ताओं को किसी इलाके की जानकारी एक नज़र में दी जा सकती है. इस दस्तावेज़ में, पांच अलग-अलग तरह की जगहों का इस्तेमाल करके, अलग-अलग जगहों के लिए कस्टम लोकेशन स्कोर जनरेट करने का तरीका बताया गया है. इस तरीके में अपनी ज़रूरत के हिसाब से बदलाव किया जा सकता है. साथ ही, एक जैसे टाइप की जगहों को एक ही अनुरोध में जोड़ा जा सकता है, ताकि उन टाइप की जगहों की कुल संख्या मिल सके. इससे आपको अपनी पसंद के मुताबिक जगह के स्कोर का पता लगाने में मदद मिलेगी.
आज ही Places Aggregate API आज़माएं और जगह के हिसाब से अहम जानकारी देने वाले स्कोर जनरेट करें. इससे आपके ग्राहकों को जगह के हिसाब से सोच-समझकर फ़ैसले लेने में मदद मिलेगी!
योगदानकर्ता
हेनरिक वाल्व | DevX इंजीनियर