import torch
from peft import PeftModel
from transformers import AutoModelForCausalLM, AutoTokenizer, BitsAndBytesConfig
BASE = "Qwen/Qwen2.5-7B-Instruct"
ADAPTER = "junshengma/qwen2.5-7b-gzh-writing-qlora"
bnb = BitsAndBytesConfig(
load_in_4bit=True, bnb_4bit_quant_type="nf4",
bnb_4bit_compute_dtype=torch.bfloat16, bnb_4bit_use_double_quant=True,
)
tok = AutoTokenizer.from_pretrained(BASE)
model = AutoModelForCausalLM.from_pretrained(BASE, quantization_config=bnb, device_map="cuda:0")
model = PeftModel.from_pretrained(model, ADAPTER)
messages = [
{"role": "system", "content": "你是一位科技领域的深度评论员。请先分析技术趋势背后的产业逻辑与争议点,再撰写一篇有论据、有观点、不蹭热度的科技评论文章。"},
{"role": "user", "content": "主题:AI Agent 会取代 App 吗\n受众:关注科技的互联网从业者\n要求:先输出 <thinking> 再输出 <article>,观点鲜明、有论据"},
]
text = tok.apply_chat_template(messages, tokenize=False, add_generation_prompt=True)
inputs = tok(text, return_tensors="pt").to("cuda")
out = model.generate(**inputs, max_new_tokens=3072, temperature=0.7, top_p=0.9, repetition_penalty=1.05, do_sample=True)
print(tok.decode(out[0][inputs["input_ids"].shape[1]:], skip_special_tokens=True))