Views
No views yet
<reasoning>...</reasoning><answer>...</answer>格式输出,便于解析1from transformers import AutoModelForCausalLM, AutoTokenizer
2import torch
3
4# 加载模型和分词器
5tokenizer = AutoTokenizer.from_pretrained("ZhangQiao123/medical-model-grpo-16bit")
6model = AutoModelForCausalLM.from_pretrained(
7 "ZhangQiao123/medical-model-grpo-16bit",
8 torch_dtype=torch.float16,
9 device_map="auto"
10)
11
12# 使用模型回答医学问题
13def generate_medical_answer(question):
14 system_prompt = "你是一个专业的医学AI助手,请根据问题提供详细的医学分析和建议。请先进行推理分析,然后给出最终答案。请使用<reasoning>标签包裹推理过程,使用<answer>标签包裹最终答案。"
15
16 messages = [
17 {"role": "system", "content": system_prompt},
18 {"role": "user", "content": question}
19 ]
20
21 # 尝试使用chat方法
22 try:
23 response = model.chat(tokenizer, messages)
24 return response
25 except AttributeError:
26 # 如果没有chat方法,使用标准的generate方法
27 prompt = f"{system_prompt}\n\n问题: {question}\n\n回答:"
28 inputs = tokenizer(prompt, return_tensors="pt").to(model.device)
29
30 with torch.no_grad():
31 outputs = model.generate(
32 **inputs,
33 max_new_tokens=2048,
34 temperature=0.7,
35 do_sample=True,
36 top_p=0.9,
37 repetition_penalty=1.1
38 )
39
40 response = tokenizer.decode(outputs[0], skip_special_tokens=True)
41
42 if "回答:" in response:
43 response = response.split("回答:")[-1].strip()
44 else:
45 response = response[len(prompt):].strip()
46
47 return response
48
49# 测试模型
50question = "高血压患者应该如何调整饮食?"
51answer = generate_medical_answer(question)
52print(f"问题: {question}")
53print(f"回答: {answer}")1import gradio as gr
2from transformers import AutoModelForCausalLM, AutoTokenizer
3import torch
4
5# 加载模型和分词器
6tokenizer = AutoTokenizer.from_pretrained("ZhangQiao123/medical-model-grpo-16bit")
7model = AutoModelForCausalLM.from_pretrained(
8 "ZhangQiao123/medical-model-grpo-16bit",
9 torch_dtype=torch.float16,
10 device_map="auto"
11)
12
13def generate_answer(question):
14 system_prompt = "你是一个专业的医学AI助手,请根据问题提供详细的医学分析和建议。请先进行推理分析,然后给出最终答案。请使用<reasoning>标签包裹推理过程,使用<answer>标签包裹最终答案。"
15
16 messages = [
17 {"role": "system", "content": system_prompt},
18 {"role": "user", "content": question}
19 ]
20
21 try:
22 response = model.chat(tokenizer, messages)
23 except AttributeError:
24 prompt = f"{system_prompt}\n\n问题: {question}\n\n回答:"
25 inputs = tokenizer(prompt, return_tensors="pt").to(model.device)
26
27 with torch.no_grad():
28 outputs = model.generate(
29 **inputs,
30 max_new_tokens=2048,
31 temperature=0.7,
32 do_sample=True,
33 top_p=0.9,
34 repetition_penalty=1.1
35 )
36
37 response = tokenizer.decode(outputs[0], skip_special_tokens=True)
38
39 if "回答:" in response:
40 response = response.split("回答:")[-1].strip()
41 else:
42 response = response[len(prompt):].strip()
43
44 # 格式化输出,使XML标签更易读
45 response = response.replace("<reasoning>", "<b>推理过程:</b><br>")
46 response = response.replace("</reasoning>", "<br><br>")
47 response = response.replace("<answer>", "<b>最终答案:</b><br>")
48 response = response.replace("</answer>", "")
49
50 return response
51
52# 创建Gradio界面
53demo = gr.Interface(
54 fn=generate_answer,
55 inputs=gr.Textbox(lines=3, placeholder="请输入您的医学问题..."),
56 outputs="html",
57 title="医学AI助手",
58 description="基于GRPO微调的医学模型,可以回答医学相关问题并提供详细的推理过程和答案。"
59)
60
61# 启动界面
62demo.launch()<reasoning>
详细的医学推理过程...
</reasoning>
<answer>
最终医学建议和答案...
</answer>@misc{ZhangQiao123_medical_model_grpo,
author = {ZhangQiao123},
title = {Medical Model GRPO 16bit},
year = {2025},
publisher = {Hugging Face},
journal = {Hugging Face repository},
howpublished = {\url{https://huggingface.co/ZhangQiao123/medical-model-grpo-16bit}},
}