
深入理解 ASP.NET Core Web API:從哲學到一對多模型(Models & 1:N 關系)
輸入示例
冰箱剩余:雞胸肉?200?g,西藍花?100?g,淡奶油?50?ml,檸檬?半個
需求:低脂、高蛋白、無麩質,烹飪時間?<?15?分鐘
輸出示例(JSON)
{
"title": "檸檬奶油雞胸一口盅",
"difficulty": "簡單",
"time_minutes": 12,
"calories_kcal": 315,
"protein_g": 42,
"ingredients": [
{"item":"雞胸肉","weight":"200g","note":"切2cm丁"},
{"item":"西藍花","weight":"100g","note":"焯水30s"}
],
"steps":[
"1. 熱鍋噴橄欖油,雞丁雙面煎2分鐘",
"2. 倒入淡奶油50?ml和檸檬汁,小火1分鐘",
"3. 加入西藍花翻勻,鹽胡椒調味"
],
"tiktok_script": "鏡頭1:雞胸變色拉絲…(省略200字)",
"confidence": 0.97
}
實測:廚房小白 12?分鐘端盤,朋友圈點贊?87?個!
Spoonacular API → 數據清洗 → 指令微調 → LoRA?7B?ChatGLM → FastAPI → 微信/小程序
# 創建環境并安裝依賴
conda create -n ai-chef python=3.10 -y
conda activate ai-chef
pip install llama-factory==0.7.1 transformers==4.40.0 spoonacular==3.0
數據來源
recipes/random
:隨機?50?k 道字段 & 指令格式
{
"instruction":"請根據剩余食材和用戶偏好生成菜譜",
"input":"食材:雞胸200g、檸檬半個;偏好:低脂 < 15min",
"output":"{完整 JSON 菜譜}"
}
數據增強
model_name_or_path: THUDM/chatglm3-6b
stage: sft
finetuning_type: lora
lora_rank: 64
lora_alpha: 128
dataset: chef_10k
template: chatglm3
num_train_epochs: 2
per_device_train_batch_size: 1
gradient_accumulation_steps: 32
learning_rate: 3e-4
bf16: true
output_dir: ./chef-lora
llamafactory-cli train recipe.yaml
from fastapi import FastAPI
from peft import PeftModel
from transformers import AutoTokenizer, AutoModel
app = FastAPI()
tok = AutoTokenizer.from_pretrained("THUDM/chatglm3-6b", trust_remote_code=True)
base = AutoModel.from_pretrained("THUDM/chatglm3-6b", trust_remote_code=True, torch_dtype="auto", device_map="auto")
model = PeftModel.from_pretrained(base, "./chef-lora")
@app.post("/cook")
def cook(req: dict):
prompt = tok.build_prompt(req['ingredients'], req['preference'])
response, _ = model.chat(tok, prompt, max_length=1024)
return {"recipe": response}
癥狀 | 原因 | 對策 |
---|---|---|
菜譜重復高 | 意面過多 | 重采樣 + 過采樣沙拉 |
步驟缺失 | LoRA rank?過低 | rank?64 → 128,步驟完整率↑?17?% |
熱量計算離譜 | 食材單位不統一 | 統一克/毫升,正則清洗 |
微信超時 | max_length?過長 | 限制 max_length,前端加 loading |
?? GitHub:github.com/yourname/ai-chef-lora
data/
:10?k 樣本train.sh
:一鍵微調api/
:FastAPI 服務mp-cloud/
:微信云托管模板