Mục tiêu
Việc tìm một địa điểm lý tưởng, cho dù là khách sạn cho kỳ nghỉ sắp tới hay một căn hộ phù hợp với gia đình, thường là một quy trình tốn thời gian và gây mệt mỏi khi phải so sánh nhiều lựa chọn. Nếu bạn có thể giúp người dùng dễ dàng hơn bằng cách cung cấp một chỉ số tùy chỉnh cho biết mức độ phù hợp của khách sạn đối với khách du lịch hoặc xếp hạng các trang thông tin về căn hộ dựa trên mức độ phù hợp với gia đình, thì bạn sẽ biến một công việc tẻ nhạt thành một quyết định dễ dàng.
Tài liệu này trình bày cách sử dụng Places Aggregate API để tạo điểm số vị trí linh động, tuỳ chỉnh dựa trên mật độ địa điểm trong một khu vực địa lý xác định. Điểm số (thứ hạng bằng số dựa trên tiêu chí bạn chỉ định) sẽ ngay lập tức cho biết mức độ phù hợp của vị trí đó với nhu cầu của họ.
Hãy xem xét trường hợp bạn đang quảng bá khách sạn ở một thành phố và muốn làm nổi bật những khách sạn ở những khu vực du lịch hấp dẫn nhất bằng cách tạo điểm phù hợp cho khách du lịch. Sử dụng Places Aggregate API để đếm số lượng loại địa điểm có liên quan ở gần mỗi khách sạn. Ví dụ: bạn biết rằng khách hàng của mình đánh giá cao những khách sạn ở vị trí gần một số địa điểm sau:
- Nhà hàng và quán cà phê
- Công viên và bảo tàng
- Cửa hàng quần áo
Bằng cách áp dụng trọng số quan trọng cho số lượng các loại địa điểm đã chọn này, bạn có thể tính điểm tổng thể cho từng vị trí khách sạn. Điểm số này phản ánh mức độ phù hợp tổng thể của vị trí, dựa trên các địa điểm lân cận. Trọng số được chỉ định cho từng loại địa điểm phải phù hợp với trường hợp sử dụng cụ thể của bạn và những yếu tố quan trọng đối với đối tượng mục tiêu. Tài liệu này sẽ sử dụng điểm phù hợp cho khách du lịch làm ví dụ chính, nhưng bạn có thể xây dựng điểm số để phản ánh thông tin nhân khẩu học và nhu cầu của người dùng.
Điều kiện tiên quyết
Trước khi đọc tài liệu này, bạn nên làm quen với các tài liệu sau:
- Tài liệu dành cho nhà phát triển về Places Aggregate API để hiểu rõ thông tin kỹ thuật và các tham số có sẵn.
- [Không bắt buộc] Tài liệu dành cho nhà phát triển về Gemini Developer API để hiểu cách gọi Gemini bằng một API và được dùng trong tài liệu này dưới dạng một lựa chọn để tạo điểm số vị trí tuỳ chỉnh.
Chọn loại địa điểm phù hợp
Bước đầu tiên để xây dựng điểm số vị trí tuỳ chỉnh là quyết định các loại địa điểm phù hợp với khách hàng của bạn trong Bảng A. Vì đang tạo điểm số phù hợp cho khách du lịch, nên chúng tôi đã chọn các loại địa điểm sau đây mà khách du lịch muốn ở gần trong thời gian lưu trú:
- nhà hàng
- công viên
- clothing_store
- viện bảo tàng
- coffee_shop
Tiếp theo, hãy chỉ định trọng số cho từng loại địa điểm này, phản ánh tầm quan trọng tương đối của loại địa điểm đó trong điểm số cuối cùng. Bạn nên xác định trọng số dựa trên những yếu tố quan trọng nhất đối với trường hợp sử dụng và lựa chọn ưu tiên của người dùng. Trong ví dụ này, thang đo trọng số sẽ nằm trong khoảng từ 0 đến 1, như sau:
Loại địa điểm |
Trọng số |
nhà hàng |
0,8 |
công viên |
0,6 |
clothing_store |
0,3 |
viện bảo tàng |
0,2 |
coffee_shop |
0,5 |
Gọi Places Aggregate API
Giờ đây, bạn đã có danh sách các loại địa điểm mà bạn quan tâm, bước tiếp theo là gọi Places Aggregate API.
Places Aggregate API yêu cầu bộ lọc vị trí. Trong ví dụ này, hãy sử dụng circle,
với tâm latLng là vị trí của khách sạn và radius là
500 m. Ngoài ra, hãy đặt ratingFilter để trả về những địa điểm có điểm xếp hạng từ 3,8 đến 5, không tính những địa điểm có điểm xếp hạng thấp hơn.
Thử nghiệm bằng cách thay đổi chế độ cài đặt của bộ lọc vị trí cho trường hợp sử dụng cụ thể của bạn. Ví dụ: bạn có thể muốn chụp các địa điểm trong bán kính rộng hơn từ vĩ độ và kinh độ trung tâm bằng cách tăng giá trị của bán kính. Ngoài ra, bạn có thể sử dụng một phương thức khác để đặt khu vực tìm kiếm, chẳng hạn như Khu vực hoặc Khu vực tuỳ chỉnh.
Làm quen với phần bộ lọc vị trí trong tài liệu về Places Aggregate API để tìm hiểu về các lựa chọn có sẵn.
Gọi Places Aggregate API cho từng loại địa điểm và vị trí mà bạn muốn tạo điểm số tuỳ chỉnh. Ví dụ: gọi Loại địa điểm nhà hàng cho một trong các khách sạn của bạn:
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
}
}
}'
Sau khi hoàn tất tất cả lệnh gọi đến API, bạn sẽ có dữ liệu tương tự như sau cho mỗi vị trí:
Loại địa điểm |
Trọng số |
Số lượt |
nhà hàng |
0,8 |
56 |
công viên |
0,6 |
3 |
clothing_store |
0,3 |
32 |
viện bảo tàng |
0,2 |
8 |
coffee_shop |
0,5 |
41 |
Tạo điểm vị trí tuỳ chỉnh
Giờ đây, bạn đã có số lượng địa điểm và trọng số cho từng loại địa điểm của mỗi vị trí, bạn có thể tạo điểm vị trí tuỳ chỉnh. Chúng ta sẽ thảo luận về hai lựa chọn trong phần này: sử dụng thuật toán cục bộ hoặc sử dụng Gemini Developer API.
Cách 1: Sử dụng thuật toán
Lựa chọn đầu tiên mà chúng ta sẽ đề cập là sử dụng thuật toán cục bộ để tạo điểm số bằng cách sử dụng trọng số và số lượng cho từng Loại địa điểm. Chuẩn hoá điểm số này theo thang điểm từ 0 đến 5, trong đó giá trị càng cao thì khu vực càng hấp dẫn dựa trên tiêu chí của bạn. Đối với ví dụ này, hãy tạo hai đối tượng JavaScript từ dữ liệu ở trên:
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 } |
Tạo điểm số từ số lượng và trọng số bằng cách nhân itemCounts với typeWeights, rồi cộng các kết quả để có weightedCount tổng thể:
let weightedCount = 0;
for (const itemType in itemCounts) {
weightedCount += itemCounts[itemType] * typeWeights[itemType];
}
weightedCount = weightedCount.toFixed(2);
Trong ví dụ này, kết quả của bước này là: 78,3.
Bây giờ, bạn có thể sử dụng chuẩn hoá logarit để tạo điểm số cuối cùng cho vị trí này theo thang điểm từ 0 đến 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));
Đối với ví dụ này, kết quả điểm cuối cùng là: 4,36 (làm tròn đến hai chữ số thập phân).
Cách 2: Sử dụng Gemini Developer API
Thay vì sử dụng thuật toán cục bộ, Gemini Developer API cung cấp một cách hiệu quả để tính điểm vị trí tuỳ chỉnh cho tất cả vị trí. Bạn chỉ cần cung cấp dữ liệu về số lượng và trọng số cùng với chỉ dẫn hệ thống cho tất cả các vị trí khách sạn của mình.
Phương thức này đặc biệt hữu ích nếu bạn có thông tin chi tiết muốn đưa vào phép tính, chẳng hạn như:
- Nội dung mô tả bằng văn bản cho từng vị trí khách sạn, ví dụ: "Vị trí này phù hợp với gia đình và khu vực này yên tĩnh vào ban đêm".
- Thông tin về người dùng, chẳng hạn như: "Người dùng này đang đặt phòng cho gia đình và thích một khu vực yên tĩnh ở vị trí trung tâm".
Gemini Developer API có thể hiểu và tính đến dữ liệu định tính này, giúp đưa ra điểm số tinh vi và phù hợp hơn so với phương pháp thuần tuý toán học.
Bằng cách sử dụng Gemini Developer API, ngoài bảng loại địa điểm và trọng số ở trên, bạn có thể có dữ liệu mô tả cho từng vị trí như sau:
Thông tin vị trí |
Mô tả |
Vị trí trung tâm gần các bảo tàng, yên tĩnh vào ban đêm và phù hợp cho gia đình. |
|
Vị trí trung tâm gần các quán bar và nhà hàng. Ồn ào và nhộn nhịp vào ban đêm, phù hợp cho nhóm. |
|
Khu dân cư cách xa trung tâm thành phố. |
|
Vị trí trung tâm gần sông, yên tĩnh về đêm và phù hợp cho gia đình. |
|
Khu dân cư cách xa trung tâm thành phố. |
Bạn có thể đưa những nội dung mô tả định tính này cùng với mọi thông tin hoặc lựa chọn ưu tiên của người dùng vào câu lệnh cho Gemini.
Chỉ dẫn hệ thống
Gemini cần có hướng dẫn cùng với dữ liệu thô để biết rằng Gemini cần tạo điểm số cho từng vị trí dựa trên các điểm dữ liệu được cung cấp. Sau đây là ví dụ về chỉ dẫn hệ thống để đạt được điều này:
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
Chỉ dẫn hệ thống ở trên cho Gemini biết dữ liệu cần dự kiến và kết quả dự kiến từ mô hình AI. Chỉ dẫn này cũng yêu cầu kết quả ở định dạng JSON.
Kết quả có cấu trúc
Mặc dù đã yêu cầu Gemini xuất kết quả ở định dạng JSON, nhưng chúng ta cần phải cụ thể hơn về cấu trúc của kết quả để biết được kết quả mong đợi khi truy vấn bằng mã. Để làm việc này, chúng ta có thể thêm một chỉ dẫn đầu ra có cấu trúc bổ sung vào yêu cầu, sử dụng trường responseSchema trong Gemini API. Thao tác này sử dụng một đối tượng lược đồ OpenAPI để ràng buộc đầu ra của mô hình.
Ví dụ:
{
"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"
]
}
}
Ví dụ này yêu cầu Gemini xuất một mảng JavaScript có các thông tin sau:
- Vĩ độ và kinh độ của vị trí
- Điểm số vị trí tuỳ chỉnh
Khi sử dụng các chỉ dẫn hệ thống và kết quả có cấu trúc ở trên, câu trả lời của Gemini cho một vị trí sẽ có dạng như sau, trong đó score là điểm số tuỳ chỉnh của vị trí:
[
{
"location": {
"latitude": 51.51611,
"longitude": -0.12726
},
"score": "4.13"
}
]
Hiển thị điểm số
Sau khi tạo điểm vị trí tuỳ chỉnh cho từng vị trí bằng một trong các phương thức được mô tả, bạn có thể hiển thị điểm này cùng với thông tin chi tiết về khách sạn hoặc dùng điểm này làm một lựa chọn lọc kết quả tìm kiếm. Ví dụ: "cho tôi xem những địa điểm có điểm số cao về tiêu chí phù hợp với khách du lịch". Nhờ đó, khách hàng của bạn có thể đưa ra quyết định dựa trên dữ liệu khi đặt phòng.
Kết luận
Việc sử dụng điểm số vị trí tuỳ chỉnh có thể là một công cụ hiệu quả để cung cấp cho người dùng thông tin tổng quan nhanh về mức độ phù hợp của một khu vực. Tài liệu này minh hoạ cách tạo điểm vị trí tuỳ chỉnh cho nhiều vị trí bằng 5 loại địa điểm riêng biệt. Bạn có thể sửa đổi cách triển khai này cho phù hợp với nhu cầu của mình và có thể kết hợp các loại địa điểm tương tự vào một yêu cầu để trả về số lượng tổng hợp của các loại đó, nhằm cung cấp cho giải pháp tính điểm vị trí tuỳ chỉnh của bạn.
Hãy dùng thử Places Aggregate API ngay hôm nay để tạo điểm số vị trí chi tiết, giúp khách hàng đưa ra quyết định sáng suốt dựa trên vị trí!
Người đóng góp
Henrik Valve | Kỹ sư DevX