iT邦幫忙

2025 iThome 鐵人賽

DAY 7
0
Mobile Development

結合AI Agent技術打造自己的行程管家系列 第 7

Day7 行程管家進化:AI Agent 結合 Geocoding API 的智慧定位

  • 分享至 

  • xImage
  •  

在上一篇文章中,我們已經一步步帶領大家建立好 Google Maps 的 API 服務,讓後端能夠具備基礎的地圖功能。今天,我們將更進一步,撰寫一個能夠結合 AI Agent 與 Google Maps 的程式,透過人工智慧與地圖服務的完美搭配,讓行程規劃更智慧化、更自動化。

在 Google Maps 的生態系中,有許多強大的 API 可以支援我們的需求,而這裡我會將它們分成 後端 與 前端 兩大類:

後端常用 API
在後端,我們主要會使用以下三種 API:

  • Places API:能夠搜尋地點,並取得詳細資訊(如評分、地址、電話)。
  • Geocoding API:將地址轉換成經緯度,或是將經緯度反查回地址。
  • Directions 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 根據城市座標量身打造旅遊建議。
這就像是擁有了一位專屬的行程秘書,能即時結合地圖數據與智慧建議,讓行程規劃更加 高效、智慧、個人化。

下一篇,我會帶大家解鎖Places API讓行程管家能不只會定位,還能幫我們找到最值得去的地方。


上一篇
Day6 行程管家的行動地圖
下一篇
Day 8 行程管家進化:AI Agent 結合 Places API 的智慧景點探索
系列文
結合AI Agent技術打造自己的行程管家8
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言