目錄
文章
分類
標籤
AI ai android Bitbucket C# C++ Certbot ChatGPT Cloudflare Code Runner CPE CPU排程 cron Daphne Django DNS設定 Docker fused-location Git GPT HTML HTTPS kotlin Line Bot Linux location-app Mac macOS MySQL n8n Next.js Nginx OpenAI permissions Python Python Django Pytorch pytorch PyTorch rclone React Redis Replit SSL streamlit Swap Ubuntu Unity Vector VM設定 VSCode WebSocket WordPress Wordpress wordpress-備份 yolo 中位數 伺服器設定 修復 最佳住址 利率 前端 動態生成 即時通訊 卷積神經網路 場景切換 學習 安全性 專案管理 帳號建立 影像分類 後台 性能 惡意軟體 成績查詢 投資 排序 操作系統 效率 教學 殖利率 深度學習 演算法 版本控制 物件偵測 神經網絡 程式解題 程式設計 競程 系統管理 終端機 統計 網頁框架 股票 自動化 財務 資料共享 資料結構 距離計算 路由 遊戲開發 選單 部署 開發 開發技巧 開發環境 開發者 雲端備份 靜態文件
目錄
目錄
1369 字
7 分鐘
Line Bot 與 Openai & SQL 03 - 成績查詢
參考來源 : https://www.youtube.com/watch?v=IfzY0axpjD8&t=333s
基於 LINE Bot 與 OpenAI 的 MySQL 學生成績管理系統教學文件
目錄
- 前言
- 系統需求與工具
- 資料庫設計與結構
- 插入 15 位學生的資料
- 為每位學生插入成績
- 使用 OpenAI 生成 SQL 語句
- LINE Bot 與 OpenAI 整合
- 查詢學生成績
- 常見問題與解決方案
- 結論
1. 前言
本教學文件將指導您如何建立一個基於 MySQL 的學生成績管理系統,並通過 LINE Bot 與 OpenAI 的整合來查詢和管理數據。我們將介紹如何使用 LINE Bot 接收訊息、OpenAI 自動生成 SQL 語句,並通過 MySQL 查詢學生的成績。
2. 系統需求與工具
系統需求:
- 安裝了 MySQL 伺服器
- Python 3 環境(Flask、OpenAI 和 LINE Bot SDK)
- MySQL 客戶端或管理工具(如 MySQL Workbench)
- OpenAI API 金鑰
- LINE Bot API 金鑰
工具:
- MySQL 伺服器
- MySQL Workbench 或命令行工具
- LINE Bot 設定
- OpenAI API 設定
3. 資料庫設計與結構
在本系統中,我們將創建兩個資料表:一個用來存儲學生的基本信息,另一個用來存儲學生的成績。
student 資料表結構:
1CREATE TABLE student (2 sno INT PRIMARY KEY, -- 學號3 class VARCHAR(50), -- 班級4 name VARCHAR(100), -- 學生姓名5 sex VARCHAR(10), -- 性別6 address VARCHAR(255), -- 地址7 memo TEXT -- 備註8);score 資料表結構:
1CREATE TABLE score (2 sno INT, -- 學號 (外鍵)3 class VARCHAR(50), -- 班級4 subject VARCHAR(100), -- 科目5 score INT -- 成績6);這兩個資料表使用 sno 欄位關聯,來管理學生的基本信息和成績。
4. 插入 15 位學生的資料
接下來,我們將插入 15 位學生的資料:
1INSERT INTO student (sno, class, name, sex, address, memo) VALUES2(1, 'Class 1', 'John Doe', 'M', '123 Street A', 'Excellent performance'),3(2, 'Class 2', 'Jane Smith', 'F', '456 Street B', 'Needs improvement in math'),4(3, 'Class 3', 'Alice Brown', 'F', '789 Street C', 'Top student'),5(4, 'Class 1', 'Bob Johnson', 'M', '1010 Street D', 'New student'),6(5, 'Class 2', 'Charlie Davis', 'M', '1111 Street E', 'Struggles with homework'),7(6, 'Class 3', 'Diana White', 'F', '1212 Street F', 'Shows great potential'),8(7, 'Class 1', 'Evan Green', 'M', '1313 Street G', 'Good participation'),9(8, 'Class 2', 'Fiona Blue', 'F', '1414 Street H', 'Excellent attendance'),10(9, 'Class 3', 'George Black', 'M', '1515 Street I', 'Needs focus on studies'),11(10, 'Class 1', 'Hannah Yellow', 'F', '1616 Street J', 'Very creative'),12(11, 'Class 2', 'Ivan Orange', 'M', '1717 Street K', 'Great in sports'),13(12, 'Class 3', 'Jenny Purple', 'F', '1818 Street L', 'Good academic performance'),14(13, 'Class 1', 'Kevin Red', 'M', '1919 Street M', 'Enthusiastic in class'),15(14, 'Class 2', 'Lily Pink', 'F', '2020 Street N', 'Hardworking student'),16(15, 'Class 3', 'Michael Cyan', 'M', '2121 Street O', 'Quick learner');
5. 為每位學生插入成績
接下來,我們為每位學生插入 數學 和 國文 的成績:
1INSERT INTO score (sno, class, subject, score) VALUES2(1, 'Class 1', '數學', 85),3(1, 'Class 1', '國文', 90),4(2, 'Class 2', '數學', 78),5(2, 'Class 2', '國文', 88),6(3, 'Class 3', '數學', 92),7(3, 'Class 3', '國文', 95),8(4, 'Class 1', '數學', 76),9(4, 'Class 1', '國文', 85),10(5, 'Class 2', '數學', 82),11(5, 'Class 2', '國文', 89),12(6, 'Class 3', '數學', 88),13(6, 'Class 3', '國文', 91),14(7, 'Class 1', '數學', 90),15(7, 'Class 1', '國文', 87),16(8, 'Class 2', '數學', 85),17(8, 'Class 2', '國文', 92),18(9, 'Class 3', '數學', 80),19(9, 'Class 3', '國文', 90),20(10, 'Class 1', '數學', 87),21(10, 'Class 1', '國文', 88),22(11, 'Class 2', '數學', 89),23(11, 'Class 2', '國文', 91),24(12, 'Class 3', '數學', 94),25(12, 'Class 3', '國文', 96),26(13, 'Class 1', '數學', 75),27(13, 'Class 1', '國文', 85),28(14, 'Class 2', '數學', 88),29(14, 'Class 2', '國文', 92),30(15, 'Class 3', '數學', 93),31(15, 'Class 3', '國文', 95);6. 使用 OpenAI 生成 SQL 語句
當 LINE Bot 接收到查詢訊息時,會呼叫 OpenAI API 自動生成 SQL 查詢語句。以下是範例的整合程式碼片段:
1response = openai.ChatCompletion.create(2 model="gpt-4o-mini",3 messages=[4 {"role": "system", "content": "You are a helpful assistant that helps users query a MySQL database."},5 {"role": "user", "content": event.message.text}6 ],7 temperature=0,8 max_tokens=400,9 top_p=1,10 frequency_penalty=0,11 presence_penalty=012)7. LINE Bot 與 OpenAI 整合完整程式碼
整合 LINE Bot 與 OpenAI API,並將接收到的查詢請求轉換為 SQL 查詢並從 MySQL 資料庫中提取資料。以下是完整的程式碼片段:
1import openai2from flask import Flask, request, abort3from linebot import LineBotApi, WebhookHandler4from linebot.exceptions import InvalidSignatureError5from linebot.models import MessageEvent, TextMessage, TextSendMessage6import pymysql7import re8
9app = Flask(__name__)10
11# 設定 Linebot 的 Channel Access Token 和 Channel Secret12# 目前是 鈞皓科技 的 LineBot13line_bot_api = LineBotApi('')14handler = WebhookHandler('')15
16# 設定 OpenAI API 金鑰17openai.api_key = ''18
19# 資料庫連接設定20db_settings = {21 "host": "127.0.0.1",22 "port": 3306,23 "user": "root",24 "password": "password",25 "db": "studentdb",26 "charset": "utf8"27}28
29@app.route("/")30def root():31 return "Hello, World!"32
33@app.route("/callback", methods=['POST'])34def callback():35 signature = request.headers['X-Line-Signature']36 body = request.get_data(as_text=True)37 app.logger.info("Request body: " + body)38
39 try:40 print("Request body: " + signature)41 handler.handle(body, signature)42 except InvalidSignatureError:43 abort(400)44
45 return 'OK'46
47@handler.add(MessageEvent, message=TextMessage)48def handle_message(event):49 try:50 # 呼叫 OpenAI ChatCompletion API 來生成 SQL 語句51 response = openai.ChatCompletion.create(52 model="gpt-4o-mini",53 messages=[54 {"role": "system", "content": "You are a helpful assistant that helps users query a MySQL database."},55 {"role": "user", "content": event.message.text}56 ],57 temperature=0,58 max_tokens=400,59 top_p=1,60 frequency_penalty=0,61 presence_penalty=062 )63
64 # 處理 OpenAI 回應,過濾掉非 SQL 的部分65 response_text = response.choices[0].message['content'].strip()66
67 # 使用正則表達式過濾掉註解和解釋部分,只保留 SQL 語句68 sql_match = re.search(r"SELECT.*?;", response_text, re.DOTALL)69 if sql_match:70 response_sql = sql_match.group(0).strip() # 提取到 SQL 語句71 else:72 response_sql = "" # 如果沒有找到有效的 SQL,設為空73
74 # 檢查是否有生成有效的 SQL 語句75 if response_sql:76 # 串接資料庫並執行 SQL 查詢77 conn = pymysql.connect(**db_settings)78 with conn.cursor() as cursor:79 command = response_sql.replace("\n", " ") # 移除多餘的換行符號80 print("Executing SQL:", command)81 cursor.execute(command)82 result = cursor.fetchall()83
84 # 格式化查詢結果85 line_data = "class\tsubject\tscore\n"86 line_data += "-------------------\n"87
88 for row in result:89 line_data += f"{row[0]}\t{row[1]}\t{row[2]}\n"90
91 # 回傳結果給 LINE 用戶92 line_bot_api.reply_message(event.reply_token, TextSendMessage(text=response_sql + '\n' + line_data))93 else:94 line_bot_api.reply_message(event.reply_token, TextSendMessage(text="未能生成有效的 SQL 查詢語句。"))95
96 except Exception as e:97 print("Error:", e)98 line_bot_api.reply_message(event.reply_token, TextSendMessage(text="發生錯誤,請稍後再試。"))99
100if __name__ == "__main__":101 app.run()8. Demo 時間
Line Bot 與 Openai & SQL 03 - 成績查詢
/posts/line-bot-與-openai--sql-03---成績查詢/ 部分資訊可能已經過時
目錄
文章
分類
標籤
AI ai android Bitbucket C# C++ Certbot ChatGPT Cloudflare Code Runner CPE CPU排程 cron Daphne Django DNS設定 Docker fused-location Git GPT HTML HTTPS kotlin Line Bot Linux location-app Mac macOS MySQL n8n Next.js Nginx OpenAI permissions Python Python Django Pytorch pytorch PyTorch rclone React Redis Replit SSL streamlit Swap Ubuntu Unity Vector VM設定 VSCode WebSocket WordPress Wordpress wordpress-備份 yolo 中位數 伺服器設定 修復 最佳住址 利率 前端 動態生成 即時通訊 卷積神經網路 場景切換 學習 安全性 專案管理 帳號建立 影像分類 後台 性能 惡意軟體 成績查詢 投資 排序 操作系統 效率 教學 殖利率 深度學習 演算法 版本控制 物件偵測 神經網絡 程式解題 程式設計 競程 系統管理 終端機 統計 網頁框架 股票 自動化 財務 資料共享 資料結構 距離計算 路由 遊戲開發 選單 部署 開發 開發技巧 開發環境 開發者 雲端備份 靜態文件
目錄

