Mục tiêu
Việc tìm kiếm vị trí lý tưởng, cho dù là khách sạn cho kỳ nghỉ sắp tới của bạn hay căn hộ phù hợp với gia đình, thường liên quan đến một quy trình so sánh nhiều lựa chọn gây phiền toái và tốn thời gian. Điều gì sẽ xảy ra 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ố tuỳ chỉnh cho biết mức độ phù hợp của khách sạn với khách du lịch hoặc xếp hạng trang thông tin về căn hộ dựa trên mức độ phù hợp với gia đình, biến một việc vặt 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 API tổng hợp về địa điểm để tạo điểm số vị trí tuỳ chỉnh, linh động dựa trên mật độ địa điểm trong một khu vực địa lý được xác định. Điểm số (một thứ hạng dạng số dựa trên các tiêu chí bạn chỉ định) sẽ ngay lập tức cho người dùng biết vị trí đó phù hợp như thế nào 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 ở các khu vực du lịch hấp dẫn nhất bằng cách tạo điểm phù hợp với khách du lịch. Sử dụng API tổng hợp địa điểm để đế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ố tầm 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ố 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. Tỷ lệ 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 điều 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 số phù hợp với khách du lịch làm ví dụ chính, nhưng bạn có thể tạo điểm số để phản ánh nhu cầu và thông tin nhân khẩu học 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ề API tổng hợp của địa điểm để 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ề API Developer Gemini để hiểu cách gọi Gemini bằng API. Tài liệu này được dùng trong tài liệu này như một tuỳ chọn để tạo điểm số vị trí tuỳ chỉnh.
Bản minh hoạ
Bản minh hoạ này cho thấy ví dụ về điểm số vị trí tuỳ chỉnh đang hoạt động. Chọn một thành phố trong trình đơn thả xuống rồi nhấp vào nút Calculate Custom Score (Tính điểm tuỳ chỉnh) để hiển thị điểm vị trí tuỳ chỉnh cho 5 vị trí được điền sẵn.
Chọn loại địa điểm có liên quan
Bước đầu tiên để tạo điểm số vị trí tuỳ chỉnh là quyết định các loại địa điểm liên quan đến khách hàng của bạn trong Bảng A. Khi tạo điểm số phù hợp với khách du lịch, chúng tôi đã chọn những 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 mức độ 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. Đối với ví dụ này, thang 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 API Tổng hợp địa điểm
Bây giờ, 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 API tổng hợp địa điểm.
API Places Aggregate yêu cầu bộ lọc vị trí. Đối với ví dụ này, hãy sử dụng circle
, trong đó latLng
ở giữa là vị trí của khách sạn và radius
là 500m. 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, loại trừ những địa điểm có điểm xếp hạng thấp hơn khỏi số lượng.
Thử nghiệm với nhiều 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 những đị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ị bán kính. Ngoài ra, bạn có thể sử dụng một phương thức khác để đặt vùng tìm kiếm, chẳng hạn như Vùng hoặc Vùng tuỳ chỉnh.
Làm quen với phần bộ lọc vị trí trong tài liệu về API Tổng hợp của Địa điểm để tìm hiểu về các tuỳ chọn có sẵn cho bạn.
Gọi API tổng hợp địa điểm 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 cho Loại địa điểm nhà hàng của 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 như sau cho từng 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 xếp hạng 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 cho từng vị trí. Bạn có thể tạo điểm số vị trí tuỳ chỉnh. Chúng ta sẽ thảo luận về hai tuỳ chọn trong phần này, sử dụng thuật toán cục bộ hoặc sử dụng API dành cho nhà phát triển Gemini.
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 đó các giá trị cao hơn cho biết khu vực hấp dẫn hơ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 thêm kết quả vào weightedCount
tổng thể:
let weightedCount = 0;
for (const itemType in itemCounts) {
weightedCount += itemCounts[itemType] * typeWeights[itemType];
}
weightedCount = weightedCount.toFixed(2);
Đối với 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 phương pháp chuẩn hoá logarit để tạo điểm số cuối cùng cho vị trí này trên 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 số 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 API dành cho nhà phát triển Gemini
Thay vì sử dụng thuật toán cục bộ, API Nhà phát triển Gemini 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ố kèm theo hướng dẫn của 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 mà bạn muốn đưa vào tính toán, 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 đặt phòng cho gia đình và thích khu vực yên tĩnh ở vị trí trung tâm".
API dành cho nhà phát triển Gemini có thể hiểu và tính đến dữ liệu định tính này, từ đó đưa ra điểm số phức tạp và phù hợp hơn so với phương pháp thuần tuý dựa trên toán học.
Khi sử dụng API dành cho nhà phát triển Gemini, ngoài loại địa điểm và bảng trọng số ở trên, bạn có thể có dữ liệu mô tả cho từng vị trí như sau:
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 với 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 với nhóm. |
|
Vị trí ở 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ào ban đêm và phù hợp với gia đình. |
|
Vị trí ở 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 dành cho Gemini.
Hướng dẫn về hệ thống
Gemini yêu cầu hướng dẫn cùng với dữ liệu thô để biết rằng Gemini dự kiến sẽ 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ề hướng dẫn hệ thống để thực hiện việc 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
Các hướng 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. Hướng 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 điều gì sẽ xảy ra khi truy vấn kết quả đó bằng mã. Để thực hiện việc này, chúng ta có thể thêm một hướng dẫn đầu ra có cấu trúc vào yêu cầu bằng cách sử dụng trường responseSchema trong API Gemini. Phương thức này sử dụng đối tượng schema 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 với nội dung sau:
- Vĩ độ và kinh độ của vị trí
- Điểm số vị trí tuỳ chỉnh
Khi sử dụng hướng dẫn hệ thống và đầu ra có cấu trúc ở trên, phản hồi từ Gemini cho một vị trí sẽ có dạng như sau, trong đó score
là điểm vị trí tuỳ chỉnh:
[
{
"location": {
"latitude": 51.51611,
"longitude": -0.12726
},
"score": "4.13"
}
]
Hiển thị điểm số
Sau khi bạn tạo điểm xếp hạng vị trí tuỳ chỉnh cho từng vị trí bằng một trong các phương thức được mô tả, điểm xếp hạng này có thể xuất hiện cùng với thông tin chi tiết về khách sạn của bạn hoặc được dùng làm tuỳ 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ề 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ả để giúp người dùng nắm bắt 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 xếp hạng vị trí tuỳ chỉnh cho nhiều vị trí bằng cách sử dụng 5 loại địa điểm riêng biệt. Bạn có thể sửa đổi phương thức 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ử API Tổng hợp địa điểm 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