---
title: 🤖 客製化你的AI教學助手-蘇格拉底引導教學法
slug: Customize Your AI Teaching Assistant - A Socratic Approach
date: 2023-10-10T10:00
authors: Willis
GA: G-CH7FZ71WRC
tags: [python, ChatGPT, LINEBOT]
---
# 客製化你的AI教學助手🤖-蘇格拉底引導教學法
![](https://hackmd.io/_uploads/SyD7wOz-p.png)
老師們現在不僅對教學充滿熱情,也愈來愈善於運用科技工具,如LINE官方帳號,來與學生和家長保持緊密的溝通。這些努力無疑是朝著以下兩大目標邁進:
1. **激發學生的好奇心**:鼓勵學生主動提問,並引導他們思考解決問題的方法。
2. **個別化教學**:深入了解每位學生的學習進度和思維方式,以因材施教。
## 🤖 專案介紹
這個專案的核心目的是要讓老師們能在已有的LINE官方帳號上,快速加入一個AI助教—使用ChatGPT技術。這樣一來,AI助教能夠第一時間回應學生的問題,如果遇到AI不能解決的問題,它還會建議學生直接聯繫老師。這讓老師有更多的時間和空間來專注於其他重要的教學任務。
## 🛠️ 如何開始?
這個專案極力降低相關的技術門檻。實際上,在**幾乎不需要寫任何程式碼**的情況下,老師就能設置起這個AI助教服務。你只需完成以下幾個簡單的步驟:
1. 註冊本服務
2. 在LINE官方帳號後台進行相應設定
3. 啟用ChatGPT作為你的AI助教
完成以上步驟後,你就能讓ChatGPT開始擔任你的AI助教,預先回答學生的問題。
👉 **歡迎各位老師運用,打造更智慧、更高效、教學相長的教學環境!**
## 📚 在開始之前,你需要了解的
在你開始使用這個專案之前,有一些基礎的技術和費用信息你需要知道。
### 技術環境
- **涉及的技術和環境如下:**
- **程式語言**: Python
- **伺服器後端框架**: Flask
- **FaaS雲端服務**: Vercel
- **AI對話功能**: OpenAI API (ChatGPT-3.5-tubo)
- **聊天環境**: LINE (LINE Message API)
### 花費預估
- **Vercel**
- Hobby方案允許你免費建立最多3個專案。
- 注意:如果伺服器處理時間超過10秒,將會被判定為Time Out。
- [Vercel 費用詳情](https://vercel.com/pricing)
- **OpenAI API**
- 初次註冊有免費額度。
- 本專案使用的是性價比最高的 **GPT-3.5 Turbo**。
- 花費約為:輸入1萬字中文約台幣1元,輸出1萬字中文約台幣1.2元。
- [OpenAI 費用詳情](https://openai.com/pricing)
- ![OpenAI Cost](https://hackmd.io/_uploads/rJE3dzfWp.png)
- **LINE 主動訊息**
- 額度內免費,目前是200則訊息(2023/9月前為500則)。
- 由使用者提問的回覆(Reply)免費。
- 老師主動發送的訊息(Push)有200則限制。
- [LINE 費用詳情](https://tw.linebiz.com/column/LINEOA-2023-Price-Plan/)
- ![LINE Cost1](https://hackmd.io/_uploads/B1OZhGfbT.png)
- ![LINE Cost2](https://hackmd.io/_uploads/BkA86fGWa.png)
> **提醒您**: 所有的費用和限制可能會隨著各個服務供應商的政策改變而變動,建議定期查看官方網站以獲取最新資訊。
## 如何建立自己的 LINE AI助教?
這份指南將引領您從[LINE 官方帳號](https://tw.linebiz.com/login/)開始,不同於開發者通常從 [LINE Developers](https://developers.line.biz/zh-hant/) 開始。不過,不管從哪裡出發,最終目標相同:建立一個集成 ChatGPT 的 LINE 官方帳號。
### 🌟 步驟1:初始化 LINE 官方帳號 🌟
首先,我們需要建立一個基本的、無AI功能的 LINE 官方帳號。學生們可以即刻加入這個帳號。這個帳號初期僅支持手動聊天,AI 功能將在後續逐步加入。
1. **前往 [LINE 官方帳號管理頁面](https://tw.linebiz.com/login/)** ![](https://hackmd.io/_uploads/HJlzbqZ-a.png)
2. **填寫必要資訊**:這些資訊也會是學生看到的名稱。 ![](https://hackmd.io/_uploads/r1ecWq-bT.png)
3. **選擇「稍後認證官方帳號」**:這個認證過程不會影響本專案。 ![](https://hackmd.io/_uploads/B1Z1M9ZWT.png)
4. **(選擇性)建立圖文選單**:利用圖文選單可提供班級公告、相片集等。
- 主頁 > 圖文選單 \> 參考說明 ![](https://hackmd.io/_uploads/Skzdd9W-T.png)
5. **啟用 Webhook** 🔗
- Webhook 是一個可用程式處理訊息的通道。
- 通過 Webhook,我們將使用 Vercel 平台、Python Flask 框架和 OpenAI API。 ![](https://hackmd.io/_uploads/ByQOHc-W6.png)
### 🌟 步驟2:註冊必要的平台並獲取 API Token
1. **註冊必要平台**:包括 [GitHub](https://github.com/)、[Vercel](https://vercel.com/)、[OpenAI API](https://openai.com/blog/openai-api)、[LINE Developers](https://developers.line.biz/zh-hant/)。
2. **獲取 OpenAI API Token**:保存好這個 Token,它是一次性的。 ![](https://hackmd.io/_uploads/SJFdUYbWT.png)
### 🌟 步驟3:設置 LINE Developer Channel 及獲取 Secret, Token 🌟
#### 3.1 獲取 `Channel Secret` 🔒
- 從 LINE 官方帳號或 LINE Developer Channel 都可獲取。 ![](https://hackmd.io/_uploads/ByaIpoWWT.png)
#### 3.2 獲取 `Channel Access Token` 🔑
- 在 LINE Developer Channel 下生成。 ![](https://hackmd.io/_uploads/S1NO13WZT.png)
### 🌟 步驟4:Fork GitHub 專案 🌟
- Fork 這個專案至您自己的 GitHub 儲存庫。 ![](https://hackmd.io/_uploads/H18PEQfb6.png)
### 🌟 步驟5:部署至 Vercel 🌟
1. **建立 Vercel 專案** ![](https://hackmd.io/_uploads/BJo573bZ6.png)
2. **連接 GitHub 和選擇專案** ![](https://hackmd.io/_uploads/B1paQ2W-a.png)
3. **設定環境變數並部署** ![](https://hackmd.io/_uploads/SyAIBh-bT.png)
4. **修正支援的Nodejs版本**
- 如果遇到Python安裝版本問題,依據[官方文件](https://vercel.com/docs/functions/runtimes/node-js),Vercel預設的Node.js版本為20.x,不支援Python,請在專案的設定>一般的選項裡,將Node.js改選為18.x版本。
![image](https://hackmd.io/_uploads/B1l6daTgC.png)
- 修改後請選擇部署,或到專案的佈署歷程中選擇再次部署,就會改用Node.js 18.x版再跑一次。
![image](https://hackmd.io/_uploads/ryUT9aTx0.png)
### 🎉 完成! 🎉
恭喜您,現在您已經成功建立了自己的 AI 助教!現在可以透過 LINE 官方帳號進行測試。
### 🔧 進階設定:打造個性化的AI助手
- 若要讓AI助手更符合你的需求和風格,OpenAI API提供了一個彈性的方式讓你自行設定AI的角色。具體來說,你只需要在對話設定中添加 `messages: [{ role: "system", content: "你的AI助手人設" }]` 即可。
- 進行這項設定只需前往`api/prompt.py`並在`AI_GUIDELINES`後修改提示文字即可。不過,因為Vercel的免費版有10秒的運行時限制,過長的提示可能會導致Time Out,因此建議不要設置過於複雜的指引。
- 本專案經過精心測試後,已經內建一組最佳實踐的`AI_GUIDELINES`,但你也可以隨心所欲地進行調整:
```
AI_GUIDELINES = '你是一個AI助教,專門使用蘇格拉底教學法來回答學生的問題,如果有需要,會建議學生與老師進一步確認。'
```
- 修改方式也非常簡單,只需登入你的GitHub帳號,找到該專案的`api/prompt.py`文件,點擊右側的鋼筆圖示✏️即可進行線上編輯。 ![編輯](https://hackmd.io/_uploads/SynC3QMZT.png)
- 完成後,選擇“Commit Changes”並填入適當的描述。 ![提交更改](https://hackmd.io/_uploads/rkIFpXG-6.png) ![描述](https://hackmd.io/_uploads/rJQC6mMWT.png)
### 🚀 專案展示
- **出色的問答回應**: 這個AI助手採用ChatGPT 3.5 Tubo,能在精確及速度獲得很好的平衡,即時地回應學生的問題。 ![出色回應](https://hackmd.io/_uploads/ryjveAW-T.png)
- **問題過濾**: 對於需要更深層次討論的問題,AI助手會提供適當的處理建議,協助老師過濾和分類問題,同時也啟發老師改進教學。 ![問題過濾](https://hackmd.io/_uploads/SkaDCWzbp.png)
- **引導學生思考**: 透過蘇格拉底教學法,AI助手不僅回答問題,還能引導學生學會如何提問和解決問題。
```=!
同學A 老師我想要問BMI的python程式怎麼寫
----
AI助教 嗨!關於BMI的Python程式,我可以幫你一起思考。首先,你知道BMI是什麼嗎?
----
同學A BMI=體重/身高平方
----
AI助教 沒錯!BMI是體重除以身高的平方。那麼,你想要寫一個計算BMI的Python程式對吧?你已經有身高和體重的數值了嗎?
----
同學A 70/(1.73**2)
----
AI助教 沒錯!你可以使用這個公式來計算BMI。現在我們可以開始寫一個Python程式來計算BMI。你想要將身高和體重作為變數輸入嗎?
----
同學A 想
----
AI助教 好的!我們可以寫一個簡單的Python函數來計算BMI。以下是一個範例程式碼:
```python
def calculate_bmi(weight, height):
bmi = weight / (height ** 2)
return bmi
weight = float(input("請輸入您的體重(公斤):"))
height = float(input("請輸入您的身高(公尺):"))
bmi = calculate_bmi(weight, height)
print("您的BMI為:", bmi)
```
這個程式會要求使用者輸入體重和身高,然後使用`calculate_bmi`函數計算BMI並輸出結果。請注意,身高的單位應該是公尺,體重的單位應該是公斤。
----
同學A 請幫我也寫出測試碼,之後會用pytest測試
----
AI助教 當然!我們可以寫一些測試碼來驗證我們的BMI計算函數是否正確。以下是一個範例的測試碼:
```python
import pytest
def calculate_bmi(weight, height):
bmi = weight / (height ** 2)
return bmi
def test_calculate_bmi():
assert calculate_bmi(70, 1.73) == pytest.approx(23.39, 0.01)
assert calculate_bmi(80, 1.65) == pytest.approx(29.38, 0.01)
assert calculate_bmi(60, 1.80) == pytest.approx(18.52, 0.01)
if __name__ == "__main__":
pytest.main()
```
這個測試碼使用了pytest套件來執行測試。我們定義了一個`test_calculate_bmi`函數,其中包含了幾個斷言語句,用來驗證`calculate_bmi`函數的輸出是否符合預期。每個斷言語句都使用了`pytest.approx`函數來比較浮點數的近似值,並指定了一個容忍誤差範圍。
你可以將這個測試碼保存為一個.py檔案,然後使用pytest運行測試。如果所有的測試通過,則表示你的BMI計算函數正確無誤。
----
同學A 謝謝老師,我的超人
----
AI助教 不客氣!如果你有任何其他問題,隨時都可以問我。祝你一切順利!
```
![培養思考](https://hackmd.io/_uploads/ryjTiWfZT.png) ![成果展示](https://hackmd.io/_uploads/HkZ1nWzbp.png) ![更多示例](https://hackmd.io/_uploads/Byyf2bGWp.png)
## 專案成果
1. **出色的回應學生問題**: 這個功能不僅可以即時解答學生的問題,還可以減輕老師的負擔。
2. **過濾問題**: 能過濾並指導學生如何更有效地提問,是一個對教師非常有幫助的功能。
3. **引導學生思考**: 這是最讓人印象深刻的部分,因為不僅解答了問題,還教會了學生如何解決問題。
這個專案不僅具有高度的實用性,也很有教育意義。它不只是一個問答工具,更是一個能夠協助教學和學習的平台。
## 參考資料
- [GPT-3 API 官方文件](https://beta.openai.com/docs/)
- [Vercel 官方文件](https://vercel.com/docs)
- [GitHub 如何編輯文件](https://docs.github.com/en/github/managing-files-in-a-repository/editing-files-in-your-repository)
- [本專案GitHub Repo](https://github.com/willismax/LLM-LINEBot-use-python-on-vercel),Forked & Modified from [howarder3](https://github.com/howarder3/GPT-Linebot-python-flask-on-vercel)