| import json |
| import os |
| import gradio as gr |
|
|
| |
| |
| |
| def load_student_data(): |
| """尝试从不同路径加载数据,兼容HF Space的环境""" |
| possible_paths = [ |
| 'data/students.json', |
| './data/students.json', |
| '../data/students.json' |
| ] |
| |
| for path in possible_paths: |
| try: |
| with open(path, 'r', encoding='utf-8') as f: |
| data = json.load(f) |
| print(f"✅ 成功加载数据,共 {len(data)} 位同学") |
| return data, None |
| except Exception as e: |
| print(f"❌ 尝试加载 {path} 失败: {e}") |
| continue |
| return [], "❌ 未找到同学数据文件 students.json" |
|
|
| |
| |
| |
| def query_student(name_input): |
| students_db, error_msg = load_student_data() |
| if error_msg: |
| return error_msg |
| |
| |
| if not name_input.strip(): |
| return "请输入同学的姓名进行查询。" |
| |
| |
| results = [student for student in students_db if name_input.strip() in student['name']] |
| |
| if not results: |
| return f"🔍 抱歉,没有找到包含 '{name_input}' 的同学,请检查姓名是否输入正确。" |
| |
| |
| response = f"🔍 **查询结果 (共找到 {len(results)} 位):**\n\n" |
| for student in results: |
| status_map = { |
| "有联系": "✅", |
| "无法联系": "❓", |
| "已去世": "🕯️" |
| } |
| status_icon = status_map.get(student['status'], "") |
| |
| response += f"---\n" |
| response += f"**{student['name']}** {status_icon}\n" |
| response += f"- 状态: {student['status']}\n" |
| |
| if student['phone']: |
| response += f"- 电话: {student['phone']}\n" |
| elif student['status'] == "已去世": |
| response += f"- 备注: 愿逝者安息 🕯️\n" |
| else: |
| response += f"- 提示: 暂无联系方式\n" |
| |
| return response |
|
|
| |
| |
| |
| with gr.Blocks(title="成都二中初59级二班同学查询系统") as demo: |
| gr.Markdown("# 🏫 成都二中初59级二班同学查询机器人") |
| gr.Markdown("输入同学姓名,点击查询,寻找失联多年的老友。") |
| |
| with gr.Row(): |
| inp = gr.Textbox(placeholder="在此输入同学姓名,如:阎国蜀", label="查询输入") |
| out = gr.Markdown(label="查询结果") |
| |
| btn = gr.Button("🔍 查询同学") |
| btn.click(fn=query_student, inputs=inp, outputs=out) |
|
|
| |
| if __name__ == "__main__": |
| demo.launch() |
|
|