Spaces:
Sleeping
Sleeping
Update app.py
Browse files
app.py
CHANGED
|
@@ -67,55 +67,72 @@ def send_line_notification_in_background(message_text):
|
|
| 67 |
count = get_and_update_visits()
|
| 68 |
visit_count_html = f"🚀 **總載入次數:** {count}"
|
| 69 |
|
| 70 |
-
# --- 1. 各區塊的 Markdown 內容 ---
|
| 71 |
course_introduction_md = """
|
| 72 |
-
# 探索地球的脈動:用程式與AI解碼地球奧秘
|
| 73 |
-
**課程網頁 (Hugging Face Space)**
|
| 74 |
|
| 75 |
### 引言:讓數據為地球發聲
|
| 76 |
|
| 77 |
-
|
| 78 |
|
| 79 |
-
|
| 80 |
|
| 81 |
-
|
| 82 |
|
| 83 |
-
|
| 84 |
|
| 85 |
-
|
| 86 |
|
| 87 |
-
|
|
|
|
|
|
|
| 88 |
"""
|
|
|
|
| 89 |
course_goals_md = """
|
| 90 |
### 課程目標:從學習者到實踐者,打造你的「地球科學 x 數據科學」雙核心能力
|
| 91 |
-
|
|
|
|
|
|
|
| 92 |
---
|
| 93 |
-
|
| 94 |
-
|
| 95 |
-
|
| 96 |
-
|
| 97 |
-
|
| 98 |
-
|
| 99 |
-
|
| 100 |
-
|
| 101 |
-
|
| 102 |
-
|
| 103 |
-
|
| 104 |
-
|
| 105 |
-
|
| 106 |
-
|
| 107 |
-
* **實現專業的科學��據可視化**
|
| 108 |
-
* 您將精通 **`PyGMT`**,繪製出專業、資訊豐富、達到出版品質的地理圖件,將空間數據化為引人入勝的故事。
|
| 109 |
-
* 您將嫻熟 **`ObsPy`**,能從原始的地震波形資料中进行濾波、訊號分析,並提取出地震事件的關鍵訊息。
|
| 110 |
-
* **打造吸睛的互動式網頁應用**
|
| 111 |
-
* 您將掌握 **`Gradio`** 與 **`Streamlit`**,能將您的分析成果或模型,快速封裝成任何人都能透過瀏覽器操作的 Web App。
|
| 112 |
-
* 您將學會將作品**免費部署**於 **`Hugging Face Spaces`**,建立屬於您自己的線上作品集,向世界分享您的成果。
|
| 113 |
-
* **賦能 AI,讓你的應用更智慧**
|
| 114 |
-
* 您將學會如何申請並串接 **`Gemini API`**,讓您的程式具備強大的自然語言理解與生成能力。
|
| 115 |
-
* 您將能透過 **`Dify`** 平台,快速建構出能回答複雜問題、甚至能操作工具的 AI 智能體。
|
| 116 |
---
|
| 117 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 118 |
"""
|
|
|
|
| 119 |
grading_policy_md = """
|
| 120 |
### 成績計算方式
|
| 121 |
* **作業 (50%)**: 包含課程中指派的各項實作任務,例如程式碼練習、數據分析報告、Colab筆記本繳交、以及GitHub Repo的更新紀錄等。這是評量您動手實踐能力的主要依據。
|
|
@@ -276,7 +293,7 @@ def ai_chatbot_with_kb(message, history):
|
|
| 276 |
if keyword in user_message: return item['answer']
|
| 277 |
return "這個問題很有趣,不過我的知識庫目前還沒有收錄相關的答案。您可以試著問我關於**課程評分、Anaconda安裝、Colab與Codespaces的差別、什麼是API,或者期末專題的靈感**等問題!"
|
| 278 |
|
| 279 |
-
# --- 4. 使用 Gradio 建立使用者介面 ---
|
| 280 |
with gr.Blocks(theme=gr.themes.Soft(primary_hue="blue", secondary_hue="orange"), title="地球物理學與AI應用") as demo:
|
| 281 |
gr.Markdown(visit_count_html)
|
| 282 |
gr.Markdown(course_introduction_md)
|
|
@@ -314,26 +331,28 @@ with gr.Blocks(theme=gr.themes.Soft(primary_hue="blue", secondary_hue="orange"),
|
|
| 314 |
seismo_plot_output = gr.Plot(label="震波圖輸出")
|
| 315 |
seismo_console_output = gr.Textbox(label="執行結果 / 錯誤訊息", lines=8, interactive=False)
|
| 316 |
|
| 317 |
-
|
| 318 |
-
|
| 319 |
-
|
| 320 |
-
|
| 321 |
-
|
| 322 |
-
|
| 323 |
-
|
| 324 |
-
|
| 325 |
-
|
| 326 |
-
# --- 連接按鈕與後端執行函式 ---
|
| 327 |
-
map_run_button.click(
|
| 328 |
-
fn=lambda code: execute_user_code(code, "地圖繪製"),
|
| 329 |
-
inputs=[map_code],
|
| 330 |
-
outputs=[map_plot_output, map_console_output]
|
| 331 |
-
)
|
| 332 |
-
seismo_run_button.click(
|
| 333 |
-
fn=lambda code: execute_user_code(code, "震波圖"),
|
| 334 |
-
inputs=[seismo_code],
|
| 335 |
-
outputs=[seismo_plot_output, seismo_console_output]
|
| 336 |
)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 337 |
|
| 338 |
# --- 5. 啟動應用程式 ---
|
| 339 |
demo.launch()
|
|
|
|
| 67 |
count = get_and_update_visits()
|
| 68 |
visit_count_html = f"🚀 **總載入次數:** {count}"
|
| 69 |
|
| 70 |
+
# --- 1. 各區塊的 Markdown 內容 (優化後) ---
|
| 71 |
course_introduction_md = """
|
| 72 |
+
# 🌍 探索地球的脈動:用程式與AI解碼地球奧秘
|
|
|
|
| 73 |
|
| 74 |
### 引言:讓數據為地球發聲
|
| 75 |
|
| 76 |
+
地球的語言,是用數據寫成的詩篇——隱藏在地震波的起伏、重力場的微擾與磁場的變動之中。
|
| 77 |
|
| 78 |
+
要讀懂這首詩,我們需要成為同時精通 **地球科學** 與 **數據科學** 的雙語人才。本課程的唯一目標,就是賦予您這樣的 **雙核心能力**。
|
| 79 |
|
| 80 |
+
我們的學習路徑,建立在相輔相成的兩大支柱之上:
|
| 81 |
|
| 82 |
+
- **🧠 科學思維的建立 (理論)**:我們將系統性地學習地球物理學的核心理論,從 **折射/重力探勘** 的原理,到 **板塊構造** 的宏觀視野,並透過野外實習,讓您了解真實世界的數據從何而來。這將是您提出深刻科學問題的基礎。
|
| 83 |
|
| 84 |
+
- **💻 技術工具的打磨 (實務)**:我們將帶您從零開始,親手打造一套現代化的數據分析工具箱。您將學會使用 `Python` 與 `Git`,利用 **`PyGMT`** 與 **`ObsPy`** 將複雜數據轉為專業圖表,並透過 **`Gradio`** 將您的成果打造成互動網頁應用,分享給全世界。
|
| 85 |
|
| 86 |
+
在這趟旅程中,您更將學會運用 **`Gemini`** 等 AI 工具,為您的應用注入智慧,讓機器幫助我們更深入地解碼數據中的奧秘。
|
| 87 |
+
|
| 88 |
+
> 這不只是一門課,而是一場成為 **新世代地球科學家** 的完整訓練。歡迎您加入我們,一起探索地球的脈動!
|
| 89 |
"""
|
| 90 |
+
|
| 91 |
course_goals_md = """
|
| 92 |
### 課程目標:從學習者到實踐者,打造你的「地球科學 x 數據科學」雙核心能力
|
| 93 |
+
|
| 94 |
+
本課程旨在引導您完成一趟從理論知識到動手實踐的完整旅程。學期結束後,您將具備以下兩大面向的核心能力:
|
| 95 |
+
|
| 96 |
---
|
| 97 |
+
|
| 98 |
+
### 🧠 第一核心:深入地球之心 (地球物理學識)
|
| 99 |
+
*您將不再只是記憶名詞,而是能用物理原理 **洞悉** 地球的運作模式。*
|
| 100 |
+
|
| 101 |
+
#### 🔹 掌握關鍵探勘技術
|
| 102 |
+
- **折射震測**:您將能 **設計** 觀測陣列,並從震波走時曲線中,**解讀** 出地下的速度分層結構。
|
| 103 |
+
- **重力探勘**:您將能 **分析** 重力異常圖,並 **指出** 高/低密度異常體可能對應的地質意義。
|
| 104 |
+
|
| 105 |
+
#### 🔹 建立宏觀的板塊構造世界觀
|
| 106 |
+
- 您將能 **闡述** 地震、火山、地磁、地熱等地質活動背後,由板塊運動所驅動的統一機制。
|
| 107 |
+
|
| 108 |
+
#### 🔹 連結理論與真實世界
|
| 109 |
+
- 透過 **業界專家演講** 接觸最新發展,並在 **校園野外實習** 中,親手操作儀器、收集數據,完整體驗從採集到解釋的工作流程。
|
| 110 |
+
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 111 |
---
|
| 112 |
+
|
| 113 |
+
### 💻 第二核心:駕馭數據之力 (全方位程式設計)
|
| 114 |
+
*您將學會一套現代化的數據科學工作流程,能 **獨立完成** 從數據處理到成果發表的完整專案。*
|
| 115 |
+
|
| 116 |
+
#### 🔹 奠定穩固的開發基石
|
| 117 |
+
- **`Python` 與 `Git/GitHub`**: 您將能熟練運用於科學計算與版本控制,實現高效的團隊協作。
|
| 118 |
+
- **雲端開發環境**: 您將能在 `Colab` 與 `GitHub Codespaces` 等環境中無縫切換,隨時隨地進行開發。
|
| 119 |
+
|
| 120 |
+
#### 🔹 實現專業的科學數據可視化
|
| 121 |
+
- **`PyGMT`**: 您將能精通繪製 **出版品質** 的專業地理圖件,將空間數據化為引人入勝的故事。
|
| 122 |
+
- **`ObsPy`**: 您將能嫻熟地從原始地震波形中 **濾波、分析**,並提取出關鍵訊息。
|
| 123 |
+
|
| 124 |
+
#### 🔹 打造吸睛的互動式網頁應用
|
| 125 |
+
- **`Gradio` 與 `Streamlit`**: 您將能快速將分析成果封裝成 **Web App**,讓任何人都能透過瀏覽器操作。
|
| 126 |
+
- **`Hugging Face Spaces`**: 您將學會將作品 **免費部署** 於雲端,建立屬於您自己的線上作品集。
|
| 127 |
+
|
| 128 |
+
#### 🔹 賦能 AI,讓應用更智慧
|
| 129 |
+
- **`Gemini API`**: 您將學會串接強大的大型語言模型,讓您的程式具備自然語言理解與生成能力。
|
| 130 |
+
- **`Dify`**: 您將能透過平台快速建構出能回答複雜問題、甚至能操作工具的 AI 智能體。
|
| 131 |
+
|
| 132 |
+
---
|
| 133 |
+
> **🚀 總結:本課程的目標是讓您成為一位不僅懂地球物理的科學家,更是一位能用數據解決問題的工程師。您將帶著走的,是一套能夠自主學習、獨立完成專案的跨領域核心能力。**
|
| 134 |
"""
|
| 135 |
+
|
| 136 |
grading_policy_md = """
|
| 137 |
### 成績計算方式
|
| 138 |
* **作業 (50%)**: 包含課程中指派的各項實作任務,例如程式碼練習、數據分析報告、Colab筆記本繳交、以及GitHub Repo的更新紀錄等。這是評量您動手實踐能力的主要依據。
|
|
|
|
| 293 |
if keyword in user_message: return item['answer']
|
| 294 |
return "這個問題很有趣,不過我的知識庫目前還沒有收錄相關的答案。您可以試著問我關於**課程評分、Anaconda安裝、Colab與Codespaces的差別、什麼是API,或者期末專題的靈感**等問題!"
|
| 295 |
|
| 296 |
+
# --- 4. 使用 Gradio 建立使用者介面 (佈局修改後) ---
|
| 297 |
with gr.Blocks(theme=gr.themes.Soft(primary_hue="blue", secondary_hue="orange"), title="地球物理學與AI應用") as demo:
|
| 298 |
gr.Markdown(visit_count_html)
|
| 299 |
gr.Markdown(course_introduction_md)
|
|
|
|
| 331 |
seismo_plot_output = gr.Plot(label="震波圖輸出")
|
| 332 |
seismo_console_output = gr.Textbox(label="執行結果 / 錯誤訊息", lines=8, interactive=False)
|
| 333 |
|
| 334 |
+
# --- 新增的獨立 AI 助教分頁 ---
|
| 335 |
+
with gr.TabItem("🤖 AI 課程助教"):
|
| 336 |
+
gr.Markdown("### 🤖 AI 課程助教 (知識庫強化版)")
|
| 337 |
+
gr.Markdown("我內建了豐富的課程知識庫,試著問我 **「如何安裝Python環境?」**、**「什麼是版本控制?」** 或 **「給我一些期末專題的靈感」**")
|
| 338 |
+
gr.ChatInterface(
|
| 339 |
+
ai_chatbot_with_kb,
|
| 340 |
+
chatbot=gr.Chatbot(height=450, type="messages", avatar_images=(None, "https://www.google.com/images/branding/googlelogo/1x/googlelogo_color_272x92dp.png")),
|
| 341 |
+
title="課程AI助教",
|
| 342 |
+
description="由結構化知識庫驅動的問答機器人"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 343 |
)
|
| 344 |
+
|
| 345 |
+
# --- 連接按鈕與後端執行函式 ---
|
| 346 |
+
map_run_button.click(
|
| 347 |
+
fn=lambda code: execute_user_code(code, "地圖繪製"),
|
| 348 |
+
inputs=[map_code],
|
| 349 |
+
outputs=[map_plot_output, map_console_output]
|
| 350 |
+
)
|
| 351 |
+
seismo_run_button.click(
|
| 352 |
+
fn=lambda code: execute_user_code(code, "震波圖"),
|
| 353 |
+
inputs=[seismo_code],
|
| 354 |
+
outputs=[seismo_plot_output, seismo_console_output]
|
| 355 |
+
)
|
| 356 |
|
| 357 |
# --- 5. 啟動應用程式 ---
|
| 358 |
demo.launch()
|