Spaces:
Running
Running
import gradio as gr | |
import time | |
import random | |
# 创建Gradio界面 | |
with gr.Blocks() as demo: | |
gr.Markdown("# 医学AI助手") | |
gr.Markdown("基于GRPO微调的医学模型,可以回答医学相关问题并提供详细的推理过程和答案。") | |
gr.Markdown("⚠️ 注意:当前为演示模式,未加载实际模型。回答为模拟生成,仅供界面展示。") | |
chatbot = gr.Chatbot(height=500) | |
msg = gr.Textbox(placeholder="请输入您的医学问题...", label="问题") | |
clear = gr.Button("清除对话") | |
# 预设的医学回答模板 | |
medical_templates = [ | |
"""<reasoning> | |
对于"{question}"这个问题,我需要从以下几个方面进行分析: | |
1. 症状描述的完整性和特点 | |
2. 可能的病因和相关疾病 | |
3. 需要考虑的鉴别诊断 | |
4. 建议的检查和治疗方案 | |
基于提供的信息,这可能与以下几种情况有关: | |
- 常见病因A及其特点 | |
- 可能的并发症B及其表现 | |
- 需要排除的严重情况C | |
</reasoning> | |
<answer> | |
针对您描述的"{question}"问题,这是一个模拟的医学回答。在实际部署时,这里会显示由医学模型生成的专业回答,包含详细的分析和建议。 | |
请注意,这只是一个界面演示,没有加载实际的医学模型。真实的医学建议应当由专业医生提供。 | |
</answer>""", | |
"""<reasoning> | |
关于"{question}",我需要考虑: | |
1. 患者的基本情况(年龄、性别、既往史) | |
2. 症状的持续时间和严重程度 | |
3. 是否有加重或缓解因素 | |
4. 相关的实验室和影像学检查结果 | |
可能的诊断包括: | |
- X疾病:特点是... | |
- Y综合征:通常表现为... | |
- Z病变:需要通过...检查确诊 | |
</reasoning> | |
<answer> | |
这是一个关于"{question}"的模拟医学回答。实际部署时,这里将显示由经过GRPO训练的医学模型生成的专业回答。 | |
该演示界面目前未连接到实际模型,仅用于展示用户界面的功能和交互方式。 | |
</answer>""" | |
] | |
def respond(message, chat_history): | |
if not message: | |
return "", chat_history | |
# 模拟思考时间 | |
yield "", chat_history + [("", "思考中...")] | |
time.sleep(1) | |
# 随机选择一个模板并填充问题 | |
template = random.choice(medical_templates) | |
bot_message = template.format(question=message) | |
# 格式化输出 | |
formatted_response = bot_message.replace("<reasoning>", "<b>推理过程:</b><br>") | |
formatted_response = formatted_response.replace("</reasoning>", "<br><br>") | |
formatted_response = formatted_response.replace("<answer>", "<b>最终答案:</b><br>") | |
formatted_response = formatted_response.replace("</answer>", "") | |
# 模拟打字效果 | |
chat_history.append((message, "")) | |
for i in range(1, len(formatted_response), 10): | |
time.sleep(0.05) | |
chat_history[-1] = (message, formatted_response[:i]) | |
yield "", chat_history | |
chat_history[-1] = (message, formatted_response) | |
return "", chat_history | |
def clear_chatbot(): | |
return None | |
msg.submit(respond, [msg, chatbot], [msg, chatbot]) | |
clear.click(clear_chatbot, None, chatbot) | |
demo.launch(share=True) |