今天的文章將會把程式碼進行細部的講解與分析。
from flask import Flask, render_template, request
import llama_use
app = Flask(__name__)
@app.route('/page1', methods=['GET', 'POST'])
def submit_form():
if request.method == 'POST':
Q = request.form.get('Q')
ans = llama_use.chat(Q)
print(ans)
return ans
return render_template('page1.html') # Render an HTML form for GET requests
if __name__ == '__main__':
app.run(debug=True)
這段程式碼使用 Flask 建立一個簡易的網頁應用。透過 @app.route('/page1'),當使用者訪問 /page1 路徑時,若為 GET 請求則回傳 page1.html 表單頁面;若為 POST 請求,則從表單取得輸入 Q,並呼叫 llama_use.chat(Q) 將問題傳給模型,取得回答後回傳至前端。同時也在終端機列印模型回覆。if name == main 表示當此檔案為主程式執行時啟動伺服器,並開啟除錯模式便於開發。
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer, pipeline
model_path = "microsoft/Phi-4-mini-reasoning"
model2 = AutoModelForCausalLM.from_pretrained(
model_path,
device_map="cuda",
torch_dtype="auto",
trust_remote_code=True,
)
tokenizer2 = AutoTokenizer.from_pretrained(model_path)
def chat(prompt):
inputs = tokenizer2.apply_chat_template([{
"role": "user",
"content": prompt
}],add_generation_prompt=True,
return_dict=True,
return_tensors="pt",
)
outputs = model2.generate(
**inputs.to(model2.device),
max_new_tokens=32768,
temperature=0.8,
top_p=0.95,
do_sample=True,
)
outputs = tokenizer2.batch_decode(outputs[:, inputs["input_ids"].shape[-1]:])
return outputs[0].split("</think>")[-1].split("<|end|>")[0].split("</response>")[-1].split("{Phi}")[0]
# while(True):
# inp = "hi"
# inp = input("enter text:")
# if(inp == "exit()"):
# break
# print(chat(inp))
這段程式碼載入了微軟的 Phi-4-mini-reasoning 模型並建立一個 chat() 函式,用於與模型互動。首先,透過 transformers 函式庫從遠端載入語言模型與對應的 tokenizer,並使用 GPU(device_map="cuda")加速運算。chat(prompt) 函式會將使用者輸入包裝成聊天格式,再用 model2.generate() 生成回應。生成結果經過解碼與字串切割處理後,回傳最終回答。
這兩段程式碼共同實現了一個簡易的網頁問答系統。第一段使用 Flask 架設網頁伺服器,當使用者在 /page1 頁面送出問題後,伺服器會將問題傳給 llama_use.chat() 處理。第二段則定義了 chat() 函式,載入微軟的 Phi-4 模型並生成回答,再回傳給前端。整體架構前後端整合,實現使用者輸入、模型推論與回答顯示的完整流程,具備基本自然語言對話功能。