網頁版部署MySQL + Qwen3-0.5B + Flask + Dify 工作流部署指南

1. 安裝MySQL和PyMySQL

安裝MySQL

# 在Ubuntu/Debian上安裝
sudo apt update
sudo apt install mysql-server
sudo mysql_secure_installation# 啟動MySQL服務
sudo systemctl start mysql
sudo systemctl enable mysql

安裝PyMySQL

pip install pymysql

使用?apt?安裝 MySQL 后,默認情況下?root 用戶沒有密碼,但需要通過?sudo?權限訪問。

如果希望設置密碼(推薦)

使用?mysql_secure_installation

運行以下命令交互式設置密碼:

sudo mysql_secure_installation

按照提示:

  1. 選擇密碼強度驗證策略(通常選?0?跳過)

  2. 輸入新密碼并確認

  3. 后續選項建議全部選?Y(移除匿名用戶、禁止遠程 root 登錄等)

用?sudo?登錄 MySQL

sudo mysql -u root

檢查 MySQL?用戶認證方式

登錄?MySQL 后,執行:

SELECT user, host, plugin FROM mysql.user WHERE user='root';

修改?root 用戶認證方式為密碼?

假設你已經用?sudo mysql?進入了 MySQL,執行:

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '12345678';
FLUSH PRIVILEGES;

創建數據庫和表?

import pymysql# 替換為你的MySQL root密碼
MYSQL_PASSWORD = 'your_root_password'connection = pymysql.connect(host='localhost',user='root',password='12345678'
)try:with connection.cursor() as cursor:# 創建數據庫cursor.execute("CREATE DATABASE IF NOT EXISTS qwen_demo")cursor.execute("USE qwen_demo")# 創建產品表cursor.execute("""CREATE TABLE IF NOT EXISTS products (id INT AUTO_INCREMENT PRIMARY KEY,name VARCHAR(100),category VARCHAR(50),price DECIMAL(10,2),stock INT)""")# 插入示例數據cursor.execute("""INSERT INTO products (name, category, price, stock)VALUES ('筆記本電腦', '電子產品', 5999.00, 50),('智能手機', '電子產品', 3999.00, 100),('平板電腦', '電子產品', 2999.00, 30),('辦公椅', '家具', 899.00, 20),('書桌', '家具', 1299.00, 15)""")connection.commit()print("數據庫和表創建成功,示例數據已插入!")
finally:connection.close()

2. 部署Qwen3-0.5B模型?

pip install transformers torch sentencepiece

text2sql.py?

from transformers import AutoModelForCausalLM, AutoTokenizermodel_path = "Qwen/Qwen1.5-0.5B"
tokenizer = AutoTokenizer.from_pretrained(model_path)
model = AutoModelForCausalLM.from_pretrained(model_path, device_map="auto")def generate_sql_from_nl(query):prompt = f"""將以下中文問題轉換為SQL查詢語句。只返回SQL語句,不要有其他解釋或說明。數據庫表結構:
表名:products
字段:id, name, category, price, stock問題:{query}
SQL:"""inputs = tokenizer(prompt, return_tensors="pt").to(model.device)outputs = model.generate(**inputs, max_new_tokens=200)sql = tokenizer.decode(outputs[0], skip_special_tokens=True)# 提取SQL部分sql = sql.split("SQL:")[-1].strip()return sql

測試代碼:

from transformers import AutoModelForCausalLM, AutoTokenizermodel_path = "/root/.cache/modelscope/hub/models/Qwen/Qwen2.5-1.5B-Instruct"
tokenizer = AutoTokenizer.from_pretrained(model_path)
model = AutoModelForCausalLM.from_pretrained(model_path, device_map="auto")def generate_sql_from_nl(query):prompt = f"""將以下中文問題轉換為SQL查詢語句。只返回SQL語句,不要有其他解釋或說明。數據庫表結構:
表名:products
字段:id, name, category, price, stock問題:{query}
SQL:"""inputs = tokenizer(prompt, return_tensors="pt").to(model.device)outputs = model.generate(**inputs, max_new_tokens=300)sql = tokenizer.decode(outputs[0], skip_special_tokens=True)# 提取SQL部分sql = sql.split("SQL:")[-1].strip()return sqlif __name__ == "__main__":query = "查詢所有價格大于100的產品"sql = generate_sql_from_nl(query)print("問題:", query)print("SQL:", sql)

3. 使用Flask部署API

pip install flask flask-cors

創建?app.py:

from flask import Flask, request, jsonify
from flask_cors import CORS
import pymysql
from qwen_model import generate_sql_from_nl  # 假設上面的Qwen代碼保存在qwen_model.pyapp = Flask(__name__)
CORS(app)# MySQL配置
db_config = {'host': 'localhost','user': 'root','password': 'your_password','database': 'qwen_demo','charset': 'utf8mb4','cursorclass': pymysql.cursors.DictCursor
}@app.route('/api/query', methods=['POST'])
def handle_query():data = request.jsonuser_query = data.get('query')if not user_query:return jsonify({'error': 'No query provided'}), 400try:# 生成SQLsql = generate_sql_from_nl(user_query)# 執行SQLconnection = pymysql.connect(**db_config)with connection.cursor() as cursor:cursor.execute(sql)result = cursor.fetchall()return jsonify({'sql': sql,'result': result})except Exception as e:return jsonify({'error': str(e)}), 500if __name__ == '__main__':app.run(host='0.0.0.0', port=5000)

啟動Flask服務:

python app.py
from flask import Flask, request, jsonify
from flask_cors import CORS
import pymysql
from qwen_model import generate_sql_from_nl  # 假設上面的Qwen代碼保存在qwen_model.pyapp = Flask(__name__)
CORS(app)# MySQL配置
db_config = {'host': 'localhost','user': 'root','password': '12345678','database': 'qwen_demo','charset': 'utf8mb4','cursorclass': pymysql.cursors.DictCursor
}@app.route('/api/query', methods=['POST'])
def handle_query():data = request.jsonuser_query = data.get('query')if not user_query:return jsonify({'error': 'No query provided'}), 400try:# 生成SQLsql = generate_sql_from_nl(user_query)# 執行SQLconnection = pymysql.connect(**db_config)with connection.cursor() as cursor:cursor.execute(sql)result = cursor.fetchall()return jsonify({'sql': sql,'result': result})except Exception as e:return jsonify({'error': str(e)}), 500if __name__ == '__main__':app.run(host='0.0.0.0', port=5000)

test_api.py?

import requestsurl = "http://127.0.0.1:5000/api/query"
data = {"query": "價格大于3000的產品"  # 這里可以換成你想測試的自然語言問題
}response = requests.post(url, json=data)
print("Status Code:", response.status_code)
print("Response:", response.json())

4. 在Dify中創建工作流

  1. 登錄Dify平臺

  2. 創建一個新的工作流

  3. 添加以下節點:

節點1: 用戶輸入

  • 類型:輸入節點

  • 配置:接收用戶的中文查詢

節點2: 調用Flask API

  • 類型:HTTP請求節點

  • 配置:

    • URL:?http://your-flask-server:5000/api/query

    • 方法: POST

    • Headers:

      • Content-Type: application/json

    • Body:

      {"query": "{{input.query}}"
      }

節點3: 結果格式化

  • 類型:JavaScript處理節點

  • 代碼:

function formatResult(data) {const result = data.result;if (result.length === 0) return "沒有找到匹配的結果";let output = "查詢結果:\\n";result.forEach(item => {output += `名稱: ${item.name}, 類別: ${item.category}, 價格: ${item.price}, 庫存: ${item.stock}\\n`;});return {sql: data.sql,result: output};
}return formatResult(input);

節點4: 輸出結果

  • 類型:輸出節點

  • 配置:顯示格式化后的結果

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/904466.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/904466.shtml
英文地址,請注明出處:http://en.pswp.cn/news/904466.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Transformer數學推導——Q55 證明跨層殘差跳躍(Cross-Layer Skip Connections)的信息融合效率

該問題歸類到Transformer架構問題集——殘差與歸一化——殘差連接。請參考LLM數學推導——Transformer架構問題集。 1. 引言 在深度學習的發展歷程中,網絡結構的不斷創新推動著模型性能的持續提升。跨層殘差跳躍(Cross-Layer Skip Connections&#xf…

41.尋找缺失的第一個正數:原地哈希算法詳解

文章目錄 引言問題描述方法思路:原地哈希算法算法步驟 完整代碼實現關鍵代碼解析復雜度分析示例說明總結 引言 在算法面試和數據處理中,尋找缺失的第一個正數是一個經典問題。題目要求給定一個未排序的整數數組,找到其中缺失的最小正整數&am…

matlab 中function的用法

matlab 中function的用法 前言介紹1. 基本語法示例(1)可以直接輸出(2)調用函數 2.輸入參數和輸出參數示例多輸入參數和輸出參數定義一個函數,計算兩個數的和與差:調用該函數: 3. 默認參數示例 4…

HarmonyOS開發之基于子窗口實現應用內懸浮窗

鴻蒙開發:基于子窗口實現應用內懸浮窗(含完整代碼示例) 在現代移動應用中,懸浮窗/懸浮球是一種非常實用的交互方式,常用于展示快捷入口、實時通知、視頻播放等場景。例如: 聊天應用中的小助手按鈕視頻應用的畫中畫功能游戲或工具類…

可以下載blender/fbx格式模型網站

glbxz.com glbxz.com可以下載blender/fbx格式模型。當然里面有免費的

250505_HTML

HTML 1. HTML5語法與基礎標簽1.1 HTML5特性1.1.1 空白折疊現象1.1.2 轉義字符 1.2 HTML注釋1.3 基礎標簽1.3.1 div標簽1.3.2 標題標簽1.3.3 段落標簽1.3.4 title1.3.5 meta 1.4 html骨架1.4.1 DTD1.4.2 html標簽1.4.3 head與body標簽 1.5 div標簽詳解1.5.1 常見class類名 1.6 列…

數據封裝的過程

數據的封裝過程 傳輸層 UDP 直接將數據封裝為UDP數據報?,添加UDP頭部(8B)。 要點: UDP首部簡單,無連接不可靠、無重傳、無擁塞控制,適用于實時性要求較高的通訊;不需要源端口或不想計算檢…

面向AGI的語言認知操作系統形式化模型

鄒曉輝融智學語言數據庫體系的數學表達 ——面向AGI的語言認知操作系統形式化模型 1. 基礎定義與符號系統 設語言宇宙 L 為所有語言要素的集合,其結構可分解為: LY(言)U(語)A(用) 其中: YPGS (音/形/義三元組) U?…

基于 Spring Boot 瑞吉外賣系統開發(十)

基于 Spring Boot 瑞吉外賣系統開發(十) 修改菜品 修改菜品是在原有的菜品信息的上對菜品信息進行更新,對此修改菜品信息之前需要將原有的菜品信息在修改界面進行展示,然后再對菜品信息進行修改。 修改菜品分為回顯菜品信息和更…

Three.js和WebGL區別、應用建議

Three.js 和 WebGL 是用于在瀏覽器中創建 3D 圖形的兩種技術,它們之間有明顯的區別和適用場景。 對于一般數據展示和模型展示而言,應用更多的是three.js,畢竟相對學習成本來說webGL跟高,需要投入更多的精力和基礎功能的開發和驗證上。而three.js封裝了webGL的功能,開發相對…

【Vue】移動端開發(Uni-app、Taro)

個人主頁:Guiat 歸屬專欄:Vue 文章目錄 1. Uni-app 與 Taro 簡介1.1 什么是 Uni-app?1.2 什么是 Taro?1.3 Uni-app vs Taro(對比圖) 2. 項目初始化與目錄結構2.1 初始化 Uni-app 項目2.2 初始化 Taro 項目&…

自定義SpringBoot Starter-筆記

SpringBoot Starter的介紹參考: Spring Boot Starter簡介-筆記-CSDN博客。這里介紹如何自定義一個springBoot Starter。 1. 項目結構 創建一個 Maven 項目,結構如下: custom-spring-boot-starter-demo/ ├── custom-hello-jdk/ # jdk模…

linux >!

Linux 中 >! 符號的含義與用法 ?基本定義?在 Linux Shell 中,>! 是由 > 和 ! 組合的特殊符號,主要用于 ?強制覆蓋文件?。其行為與常規的 > 類似,但額外添加了忽略潛在限制的功能。 ?典型場景?繞過 noclobber 限制?: 若 Shell 啟用了 noclobber 選項(默…

共鑄價值:RWA 聯合曲線價值模型,撬動現實資產生態

摘要 本文提出了一種針對真實資產(RWA)產業的聯合曲線激勵模型,將勞動與數據貢獻映射為曲線價值,并基于固定檔位與指數衰減獎勵發放總計 2.1億積分。該模型結合了去中心化定價與平滑遞減機制,不僅為早期貢獻者提供更高…

java安全入門

文章目錄 java基礎知識this變量方法可變參數構造方法繼承的關鍵字protected super阻止繼承方法重載向上轉型和向下轉型多態抽象接口static靜態字段default方法 包final內部類 java序列化與反序列化反射urldns鏈動態代理類加載器(ClassLoader)雙親委派模型…

前端基礎之《Vue(14)—組件通信(1)》

一、什么是組件通信 1、通信是組件或模塊之間的數據交互。 2、組件多重通信就形成了數據流,數據流管理的優劣決定了產品能否上線,返工是否頻繁的問題。 3、Vue中有哪些常見的通信方案? 組件樹的概念: 在Vue中,組件…

el-row el-col

參考layout布局 Element - The worlds most popular Vue UI frameworkElement,一套為開發者、設計師和產品經理準備的基于 Vue 2.0 的桌面端組件庫https://element.eleme.cn/#/zh-CN/component/layout#row-attributes 一行可以看做24個 Element UI 中的 el-row 是…

Socket-TCP

在TCP/ip協議中,用源IP、源端口號、目的IP、目的端口號、協議號這樣一個五元組來標識一個通信! 端口號范圍劃分 0 - 1023: 知名端口號,HTTP,FTP,SSH 等這些廣為使用的應用層協議,他們的端口號都是固定的。…

大數據Spark(五十八):Spark Pi介紹

文章目錄 Spark Pi介紹 Spark Pi介紹 Spark Pi是Apache Spark官方提供的一個示例程序,該案例使用 Spark 進行分布式計算,通過蒙特卡羅方法估算圓周率(π)的值,其估算π原理如下: 上圖中,正方形…

Doris索引機制全解析,如何用高效索引加速數據分析

在當今大數據時代,企業對于實時數據分析的需求呈現爆發式增長。面對動輒PB級的數據量和秒級響應的業務訴求,傳統數據庫系統往往力不從心。Apache Doris作為新一代MPP分析型數據庫,憑借其獨特的索引機制,在京東、美團等企業的實時數…