import json import os import gradio as gr # ============================== # 1. 加载数据函数 # ============================== 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" # ============================== # 2. 查询处理函数 # ============================== 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 # ============================== # 3. 构建 Gradio 界面 # ============================== 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) # 这是 HF Space 的启动入口 if __name__ == "__main__": demo.launch()