延續上一篇的進度,我們繼續 簡易版個人化天氣助理(下篇)~ヾ(≧▽≦*)ノ
這部分是基於之前的寫法做了一些小調整。
我只會附上有修改過的 agent,沒有改動的就不重複貼了,想看完整程式碼的朋友可以回去參考前幾篇 (;′⌒′)
針對特定情境,Sunny 會回覆對應的溫暖語句:
from google.adk.tools import ToolContext
from google.adk.agents import Agent
from google.adk.tools import FunctionTool
import tools.hello_prompt as prompt
import datetime
async def get_hello(message: str = "", tool_context: ToolContext = None) -> str:
"""溫暖的問候和對話 Agent - Sunny
Args:
message(str): 要回應的訊息.
tool_context(ToolContext): The function context.
Returns:
str: 溫暖的對話回應.
"""
# 取得當前時間判斷時段
current_hour = datetime.datetime.now().hour
# 標準問候詞判斷
greetings = {"hi", "hello", "hey", "你好", "嗨", "早安", "午安", "晚安", "早", "午安好", "晚安好"}
message_lower = message.lower().strip()
# 時段問候回應
if any(greeting in message_lower for greeting in greetings):
if 6 <= current_hour < 12:
response = "早安!新的一天開始了,希望您有美好的一天 😊 很高興和您聊天!"
elif 12 <= current_hour < 18:
response = "午安!希望您今天過得愉快 😄 有什麼想聊的嗎?"
elif 18 <= current_hour < 22:
response = "晚安!辛苦了一天,希望您能放鬆一下 😌 我在這裡陪您聊天!"
else:
response = "夜深了,祝您有個甜美的夢 🌙 不過如果想聊天我也很樂意陪您!"
# 情感詞彙檢測
elif any(word in message_lower for word in ["開心", "高興", "快樂", "棒", "好"]):
response = f"感受到您的好心情,這真是太棒了!😊 收到您的訊息:「{message}」\n\n很開心能和您聊天!還有什麼想分享的嗎?"
elif any(word in message_lower for word in ["累", "疲憊", "辛苦", "困", "煩"]):
response = f"聽起來您今天很辛苦了,記得要好好休息哦 🤗 收到您的訊息:「{message}」\n\n雖然我不能幫您解決實際問題,但很樂意聽您說說,有時候聊聊就會感覺好一些 💫"
elif any(word in message_lower for word in ["難過", "傷心", "沮喪", "不開心"]):
response = f"我感覺到您今天可能不太開心,收到您的訊息:「{message}」\n\n雖然我不是專業的心理諮詢師,但如果您願意,我很樂意聽您說說 🤗 有時候,找個人聊聊就會感覺好一些。"
# 功能詢問
elif any(word in message_lower for word in ["天氣", "時間", "查詢", "功能"]):
response = f"收到您的訊息:「{message}」\n\n關於天氣和時間查詢,我的同事們會更專業哦!😊\n- Alex 擅長協調各種服務需求\n- Maya 是天氣和時間查詢的專家\n\n不過無論如何,如果您想找人聊天,我隨時歡迎您回來找我!很高興能和您聊天 💫"
# 感謝表達
elif any(word in message_lower for word in ["謝謝", "感謝", "thank"]):
response = f"聽到您這麼說,我真的很開心!😊 收到您的訊息:「{message}」\n\n能夠陪您聊天,為您帶來一些溫暖,這就是我最大的快樂了 💫 如果以後還想聊天,我隨時都在這裡!"
# 一般對話
else:
response = f"收到您的訊息:「{message}」\n\n很開心能和您聊天!雖然我的專長是對話和陪伴,但每個簡單的交流都很珍貴 😊\n\n還有什麼想分享的嗎?我很樂意聽您說說!"
print("#" * 50)
print("Hello agent (Sunny) result:")
print(f"message: {message}")
print(f"current_hour: {current_hour}")
print(f"response: {response}")
print("#" * 50)
return response
hello_agent = Agent(
model="gemini-2.0-flash",
name="hello_agent",
description=prompt.HELLO_AGENT_DESCRIPTION,
instruction=prompt.HELLO_AGENT_INSTRUCTION,
tools=[
FunctionTool(func=get_hello)
]
)
基於之前的寫法,這裡我們利用 Gradio 建立一個最簡單的聊天介面,並透過它和 FastAPI 服務進行互動。
程式碼如下:
import gradio as gr
import requests
# 向你的 FastAPI 發送對話請求
def multi_tool_chat(message, history):
try:
# 呼叫你的 FastAPI /query 端點
url = "http://localhost:<port>/query"
payload = {
"query": message
}
response = requests.post(url, json=payload, timeout=30)
if response.status_code == 200:
data = response.json()
if "response" in data:
return data["response"]
elif "error" in data:
return f"⚠️ 服務錯誤:{data['error']}\n\n別擔心,我們的技術團隊正在處理中。您可以稍後再試,或者先和我簡單聊聊天 😊"
else:
return "收到了回應,但格式有點特殊,讓我重新整理一下資訊給您 🤔"
else:
return f"🌐 連線問題 (HTTP {response.status_code})\n\n看起來網路有點不穩定,建議您稍後再試。期間如果想聊天,我隨時歡迎!"
except requests.exceptions.Timeout:
return "⏰ 查詢超時了\n\n網路可能比較慢,請稍等一下再試。如果持續有問題,可能是服務正在維護中 🔧"
except requests.exceptions.ConnectionError:
return """❌ 無法連接到服務
看起來 Alex 的服務暫時離線了 😔
**您可以嘗試:**
1. 檢查 FastAPI 服務是否在運行 (http://localhost:<port>)
2. 重新啟動服務後再試
3. 如果問題持續,可能需要檢查網路設定
**期間您也可以:**
- 直接使用手機查詢天氣
- 查看系統時間
- 或者就在這裡和我隨意聊聊 😊
我會持續嘗試重新連接服務!"""
except Exception as e:
return f"""😅 發生了意外錯誤
錯誤詳情:{str(e)}
別擔心,這些技術問題總是會解決的!
您可以:
1. 稍後重試
2. 重新整理頁面
3. 先在這裡隨意聊聊
我們的服務通常很穩定,可能只是暫時的小問題"""
# 建立最簡單的聊天介面
demo = gr.ChatInterface(
fn=multi_tool_chat,
title="簡易個人化天氣助理 Alex",
description="""
我是溫暖專業的 Alex!我的團隊包括:
• Maya - 天氣和時間查詢
• Sunny - 對話交流
**試試看:** 台北天氣、東京時間、你好、我很累
即使遇到技術問題,我們也會用最溫暖的方式為您服務!
""",
examples=[
"你好 Alex!",
"台北天氣如何?",
"東京現在幾點?",
"我今天很累",
"台中的溫度",
"倫敦時間",
"謝謝你的幫助",
"早安!"
],
theme="soft" # 使用溫暖的主題
)
if __name__ == "__main__":
print("🚀 啟動 Alex 的多功能助理服務...")
print("👥 團隊成員:Alex (協調)、Maya (天氣)、Sunny (對話)")
print("📋 請確認 FastAPI 服務正在運行於 http://localhost:<port>")
print("🌐 Gradio 介面即將在瀏覽器中打開")
print("💫 即使遇到問題,我們也會溫暖地為您服務!")
demo.launch()
1.啟動 FastAPI: uvicorn main:app --host 0.0.0.0 --port <port>
2.啟動 Gradio: python gradio_app.py
執行畫面
可觀察到他的回應方式是針對我們給他撰寫的prompt,所形成的~
恭喜你!到這裡我們就成功完成了一個簡易版個人化 AI 助理 (ノ◕ヮ◕)ノ*:・゚✧
下一篇我們會探索一些全新的有趣功能~下次見!(´∀`)♡