在上一篇文章中,我們已經一步步帶領大家建立好 Google Maps 的 API 服務,讓後端能夠具備基礎的地圖功能。今天,我們將更進一步,撰寫一個能夠結合 AI Agent 與 Google Maps 的程式,透過人工智慧與地圖服務的完美搭配,讓行程規劃更智慧化、更自動化。
在 Google Maps 的生態系中,有許多強大的 API 可以支援我們的需求,而這裡我會將它們分成 後端 與 前端 兩大類:
後端常用 API
在後端,我們主要會使用以下三種 API:
前端常用 API
至於前端的部分,我們則會透過:
Maps JavaScript API:將地圖互動式地呈現在使用者眼前,讓行程規劃更直觀。
今天的重點,將放在 Geocoding API —— 也就是「地址 ↔ 座標」的轉換服務。這是所有地圖應用的基礎,因為只要取得經緯度,就能串接更多功能,例如:附近景點推薦、交通路線規劃,甚至即時旅遊建議。
撰寫 Geocoding AI Agent
接下來,我們要撰寫一個能呼叫 Google Maps Geocoding API 的函式,並把獲得的地理資訊交給 AI Agent,請它根據城市與經緯度提供旅遊建議。
@app.post("/itinerary_googlemap_geocode")
async def itinerary_googlemap_geocode(city: str):
# 使用 Google Maps Geocoding API 取得經緯度
url = f"https://maps.googleapis.com/maps/api/geocode/json?address={city}&key={GOOGLE_MAPS_API_KEY}"
response = requests.get(url)
data = response.json()
# 檢查 API 回傳狀態,並取得經緯度
if data['status'] == 'OK':
location = data['results'][0]['geometry']['location']
lat = location['lat']
lng = location['lng']
# 呼叫 airport_agent
query = f"請提供關於 {city} 的旅遊建議。"
parts = [
types.Part(text=query),
types.Part(text=json.dumps({"city": city, "latitude": lat, "longitude": lng}))
]
runner = Runner(
app_name="itinerary_housekeeper",
agent=geocode_agent,
artifact_service=artifacts_service,
session_service=session_service,
)
session = await session_service.create_session(
state={}, app_name="itinerary_housekeeper", user_id="user"
)
content = types.Content(role="user", parts=parts)
# 執行 Agent
events_async = runner.run_async(
session_id=session.id, user_id="user", new_message=content
)
response = []
async for event in events_async:
if event.content:
for part in event.content.parts:
if part.text:
response.append(part.text)
result = "\n".join(response)
return {
"latitude": lat,
"longitude": lng,
"ai_result": result
}
else:
return {"error": "無法取得地理位置"}
透過這樣的設計,我們不僅能夠取得地理資訊,還能讓 AI Agent 根據城市座標量身打造旅遊建議。
這就像是擁有了一位專屬的行程秘書,能即時結合地圖數據與智慧建議,讓行程規劃更加 高效、智慧、個人化。