Ziel
Die Suche nach der idealen Unterkunft, sei es ein Hotel für den nächsten Urlaub oder eine familienfreundliche Wohnung, ist oft ein frustrierender und zeitaufwendiger Prozess, bei dem zahlreiche Optionen verglichen werden müssen. Was wäre, wenn Sie Ihren Nutzern die Entscheidung erleichtern könnten, indem Sie einen benutzerdefinierten Messwert bereitstellen, der die Eignung eines Hotels für Touristen angibt, oder Wohnungsangebote nach ihrer Familienfreundlichkeit sortieren? So wird aus einer mühsamen Aufgabe eine mühelose Entscheidung.
In diesem Dokument wird beschrieben, wie Sie mit der Places Aggregate API dynamische, benutzerdefinierte Standortbewertungen basierend auf der Dichte von Orten in einem definierten geografischen Gebiet generieren. Der Score, ein numerisches Ranking anhand der von Ihnen angegebenen Kriterien, zeigt sofort, wie gut der Standort für die Anforderungen geeignet ist.
Angenommen, Sie bewerben Hotels in einer Stadt und möchten die Hotels in den attraktivsten Touristengebieten hervorheben, indem Sie einen Score für die Attraktivität für Touristen erstellen. Mit der Places Aggregate API können Sie zählen, wie viele relevante Ortstypen sich in der Nähe der einzelnen Hotels befinden. Sie wissen beispielsweise, dass Ihre Kunden Hotels in der Nähe der folgenden Orte schätzen:
- Restaurants und Cafés
- Parks und Museen
- Bekleidungsgeschäfte
Wenn Sie die Anzahl dieser ausgewählten Ortstypen gewichten, können Sie für jeden Hotelstandort eine Gesamtbewertung berechnen. Der Wert spiegelt die allgemeine Eignung des Standorts basierend auf den Orten in der Nähe wider. Die Gewichtungen, die den einzelnen Ortstypen zugewiesen werden, sollten auf Ihren spezifischen Anwendungsfall und die Anforderungen Ihrer Zielgruppe abgestimmt sein. In diesem Dokument wird als Hauptbeispiel ein Wert für Gut für Touristen verwendet. Sie können Ihren Wert jedoch so erstellen, dass er die demografischen Merkmale und Anforderungen Ihrer Nutzer widerspiegelt.
Vorbereitung
Bevor Sie dieses Dokument lesen, sollten Sie sich mit der folgenden Dokumentation vertraut machen:
- Entwicklerdokumentation zur Places Aggregate API, um sich mit den technischen Details und den verfügbaren Parametern vertraut zu machen.
- [Optional] Gemini Developer API-Entwicklerdokumentation, um zu erfahren, wie Gemini über eine API aufgerufen wird. Diese Option wird in diesem Dokument verwendet, um den benutzerdefinierten Standortwert zu generieren.
Relevante Ortstypen auswählen
Der erste Schritt beim Erstellen eines benutzerdefinierten Ortsbewertungswerts besteht darin, die für Ihre Kunden relevanten Ortstypen aus Tabelle A auszuwählen. Da wir einen Wert für Gut für Touristen erstellen, haben wir die folgenden Ortstypen ausgewählt, in deren Nähe Touristen während ihres Aufenthalts sein möchten:
- Restaurant
- Park
- Bekleidungsgeschäft
- Museum
- coffee_shop
Weisen Sie als Nächstes jedem dieser Ortstypen eine Gewichtung zu, die seine relative Bedeutung für die endgültige Punktzahl widerspiegelt. Die Gewichtungen sollten danach festgelegt werden, was für Ihren Anwendungsfall und die Präferenzen Ihrer Nutzer am wichtigsten ist. In diesem Beispiel liegt die Gewichtungsskala zwischen 0 und 1:
Ortstyp |
Gewichtung |
Restaurant |
0,8 |
Park |
0,6 |
Bekleidungsgeschäft |
0,3 |
Museum |
0,2 |
coffee_shop |
0,5 |
Places Aggregate API aufrufen
Nachdem Sie eine Liste der gewünschten Ortstypen erstellt haben, rufen Sie im nächsten Schritt die Places Aggregate API auf.
Für die Places Aggregate API ist ein Standortfilter erforderlich. Verwenden Sie für dieses Beispiel circle, wobei der Mittelpunkt latLng der Standort Ihres Hotels ist und der radius 500 m beträgt. Legen Sie außerdem fest, dass ratingFilter Orte mit einer Bewertung zwischen 3,8 und 5 zurückgeben soll.Orte mit einer niedrigeren Bewertung werden nicht berücksichtigt.
Experimentieren Sie mit verschiedenen Einstellungen des Standortfilters für Ihren spezifischen Anwendungsfall. Sie können beispielsweise Orte in einem größeren Umkreis um den Mittelpunkt erfassen, indem Sie den Wert für den Radius erhöhen. Alternativ können Sie eine andere Methode verwenden, um den Suchbereich festzulegen, z. B. Region oder Benutzerdefinierter Bereich.
Machen Sie sich mit dem Abschnitt zum Standortfilter in der Dokumentation zur Places Aggregate API vertraut, um mehr über die verfügbaren Optionen zu erfahren.
Rufen Sie die Places Aggregate API für jeden Ortstyp und Standort auf, für den Sie eine benutzerdefinierte Bewertung generieren möchten. Rufen Sie beispielsweise den Ortstyp „Restaurant“ für eines Ihrer Hotels auf:
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
}
}
}'
Nachdem alle Aufrufe der API abgeschlossen sind, haben Sie für jeden Standort Daten, die so aussehen:
Ortstyp |
Gewichtung |
Anzahl |
Restaurant |
0,8 |
56 |
Park |
0,6 |
3 |
Bekleidungsgeschäft |
0,3 |
32 |
Museum |
0,2 |
8 |
coffee_shop |
0,5 |
41 |
Benutzerdefinierten Standort-Score generieren
Nachdem Sie die Anzahl der Orte und die Gewichtung für jeden Ortstyp für jeden Standort ermittelt haben, können Sie jetzt den benutzerdefinierten Standortwert generieren. In diesem Abschnitt werden zwei Optionen erläutert: die Verwendung eines lokalen Algorithmus oder die Verwendung der Gemini Developer API.
Option 1: Algorithmus verwenden
Die erste Option, die wir uns ansehen, ist die Verwendung eines lokalen Algorithmus, um anhand der Gewichtungen und Anzahl der einzelnen Ortstypen eine Punktzahl zu generieren. Normalisieren Sie diese Punktzahl auf einer Skala von 0 bis 5, wobei höhere Werte auf ein attraktiveres Gebiet basierend auf Ihren Kriterien hinweisen. Generieren Sie für dieses Beispiel zwei JavaScript-Objekte aus den obigen Daten:
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 } |
Generieren Sie eine Punktzahl aus den Anzahlen und Gewichtungen, indem Sie die itemCounts mit der typeWeights multiplizieren und die Ergebnisse zu einer Gesamt-weightedCount addieren:
let weightedCount = 0;
for (const itemType in itemCounts) {
weightedCount += itemCounts[itemType] * typeWeights[itemType];
}
weightedCount = weightedCount.toFixed(2);
In diesem Beispiel ist die Ausgabe dieses Schritts 78, 3.
Jetzt können Sie die logarithmische Normalisierung verwenden, um die endgültige Punktzahl für diesen Standort auf einer Skala zwischen 0 und 5 zu generieren:
if (weightedCount === 0) {
normalizedScore = 0;
} else {
normalizedScore = Math.log(weightedCount + 1);
}
// Clamp between 0 and 5
normalizedScore = Math.max(0, Math.min(5, normalizedScore));
In diesem Beispiel ist die endgültige Punktzahl 4, 36 (auf zwei Dezimalstellen gerundet).
Option 2: Gemini Developer API verwenden
Als Alternative zu einem lokalen Algorithmus bietet die Gemini Developer API eine leistungsstarke Möglichkeit, den benutzerdefinierten Standortwert für alle Standorte zu berechnen. Geben Sie einfach die Anzahl und die Gewichtungsdaten mit Systemanweisungen für alle Ihre Hotelstandorte an.
Diese Methode ist besonders nützlich, wenn Sie detaillierte Informationen in die Berechnung einbeziehen möchten, z. B.:
- Textbeschreibungen für jeden Hotelstandort, z. B.: „Dieser Standort ist für Familien geeignet und die Gegend ist nachts ruhig.“
- Informationen zu Ihrem Nutzer, z. B.: „Dieser Nutzer bucht für eine Familie und bevorzugt eine ruhige Gegend in zentraler Lage.“
Die Gemini Developer API kann diese qualitativen Daten verstehen und berücksichtigen, was zu einer differenzierteren und relevanteren Bewertung führt, die über einen rein mathematischen Ansatz hinausgeht.
Wenn Sie die Gemini Developer API verwenden, können Sie zusätzlich zur Tabelle mit den Ortstypen und Gewichtungen oben Beschreibungsdaten für jeden Ort abrufen, die so aussehen:
Standort |
Beschreibung |
Zentrale Lage in der Nähe von Museen, nachts ruhig und für Familien geeignet. |
|
Zentrale Lage in der Nähe von Bars und Restaurants. Abends laut und gut besucht, für Gruppen geeignet. |
|
Wohngebiet weit vom Stadtzentrum entfernt. |
|
Zentrale Lage in der Nähe des Flusses. Nachts ruhig und für Familien geeignet. |
|
Wohngebiet weit vom Stadtzentrum entfernt. |
Diese qualitativen Beschreibungen sowie alle Nutzerinformationen oder -präferenzen können in Ihren Prompt für Gemini aufgenommen werden.
Systemanweisungen
Gemini benötigt neben den Rohdaten auch Anweisungen, damit es weiß, dass es für jeden Standort eine Bewertung basierend auf den bereitgestellten Datenpunkten generieren soll. Eine Beispiel-Systemanweisung, um dies zu erreichen, könnte so aussehen:
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
Mit den obigen Systemanweisungen erfährt Gemini, welche Daten zu erwarten sind und wie die erwartete Ausgabe des KI-Modells aussieht. Außerdem wird die Ausgabe im JSON-Format angefordert.
Strukturierte Ausgabe
Wir haben Gemini zwar aufgefordert, das Ergebnis im JSON-Format auszugeben, müssen aber die Struktur der Ausgabe genauer angeben, damit wir wissen, was wir erwarten können, wenn wir sie mit Code abfragen. Dazu können wir der Anfrage eine zusätzliche Anweisung für die strukturierte Ausgabe hinzufügen. Verwenden Sie dazu das Feld responseSchema in der Gemini API. Dabei wird ein OpenAPI-Schemaobjekt verwendet, um die Modellausgabe einzuschränken.
Beispiel:
{
"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"
]
}
}
In diesem Beispiel wird Gemini aufgefordert, ein JavaScript-Array mit Folgendem auszugeben:
- Breiten- und Längengrad des Standorts
- Die benutzerdefinierte Standortbewertung
Mit den obigen Systemanweisungen und der strukturierten Ausgabe würde die Antwort von Gemini für einen Standort so aussehen, wobei score der benutzerdefinierte Standortwert ist:
[
{
"location": {
"latitude": 51.51611,
"longitude": -0.12726
},
"score": "4.13"
}
]
Punktzahl anzeigen
Nachdem Sie den benutzerdefinierten Standortwert für jeden Standort mit einer der beschriebenen Methoden generiert haben, kann er zusammen mit den Details Ihres Hotels angezeigt oder als Suchfilteroption verwendet werden. Beispiel: „Zeige mir Orte mit einer hohen Bewertung für gut für Touristen“. So können Ihre Kunden bei der Buchung datenbasierte Entscheidungen treffen.
Fazit
Benutzerdefinierte Standortbewertungen sind ein leistungsstarkes Tool, mit dem Sie Ihren Nutzern einen schnellen Überblick über die Eignung eines Gebiets geben können. In diesem Dokument wurde gezeigt, wie Sie benutzerdefinierte Standortbewertungen für verschiedene Standorte mit fünf separaten Ortstypen generieren. Diese Implementierung kann an Ihre Anforderungen angepasst werden. Ähnliche Ortstypen können in einer Anfrage kombiniert werden, um die aggregierte Anzahl dieser Typen zurückzugeben und sie Ihrer benutzerdefinierten Lösung zur Standortbewertung zur Verfügung zu stellen.
Probieren Sie die Places Aggregate API noch heute aus, um aussagekräftige Standortbewertungen zu generieren, mit denen Ihre Kunden fundierte standortbezogene Entscheidungen treffen können.
Beitragende
Henrik Valve | DevX Engineer