# integration_example.py # 这个文件展示如何将你的MsPatient类集成到Streamlit应用中 import streamlit as st import json import pandas as pd from datetime import datetime import time from pathlib import Path # 导入你的AnnaAgent类 - 请根据实际路径调整 try: from ms_patient import MsPatient # 假设你的类在anna_agent.py文件中 ANNA_AGENT_AVAILABLE = True except ImportError: ANNA_AGENT_AVAILABLE = False st.warning("⚠️ 未找到AnnaAgent类,使用模拟模式") def load_dataset(uploaded_file): """ 加载数据集文件 支持JSON和JSONL格式 """ try: if uploaded_file.name.endswith('.json'): data = json.load(uploaded_file) elif uploaded_file.name.endswith('.jsonl'): data = [] for line in uploaded_file: data.append(json.loads(line.decode('utf-8'))) else: raise ValueError("不支持的文件格式") return data except Exception as e: st.error(f"数据集加载失败: {str(e)}") return None def validate_patient_data(patient_data): """ 验证患者数据格式是否正确 """ required_keys = ['id', 'portrait', 'report'] for key in required_keys: if key not in patient_data: return False, f"缺少必需字段: {key}" # 验证portrait字段 portrait_required = ['age', 'gender', 'occupation', 'marital_status'] for key in portrait_required: if key not in patient_data['portrait']: return False, f"portrait中缺少字段: {key}" return True, "数据格式正确" def initialize_patient_agent(patient_data, language="Chinese"): """ 初始化患者智能体 """ try: if not ANNA_AGENT_AVAILABLE: return None, "AnnaAgent类不可用" # 验证数据格式 is_valid, message = validate_patient_data(patient_data) if not is_valid: return None, message # 初始化智能体 agent = MsPatient( portrait=patient_data["portrait"], report=patient_data["report"], previous_conversations=patient_data.get("conversation", []), language=language ) return agent, "初始化成功" except Exception as e: return None, f"初始化失败: {str(e)}" def simulate_response(user_input, patient_data=None): """ 模拟智能体回复(当AnnaAgent不可用时使用) """ responses = [ f"我理解您提到的'{user_input}'。这确实是一个需要深入探讨的话题。", f"谢谢您的耐心。关于您说的'{user_input}',我想分享一下我的感受...", f"您的话让我思考了很多。'{user_input}'这个观点很有意思。", "我需要一些时间来消化您刚才说的话。这对我来说很重要。", "我觉得我们之间的对话很有帮助。您能再详细说说吗?" ] import random return random.choice(responses) def export_chat_history(messages, patient_id): """ 导出聊天记录 """ chat_history = { "patient_id": patient_id, "timestamp": datetime.now().isoformat(), "session_info": { "total_messages": len(messages), "counselor_messages": len([m for m in messages if m["role"] == "user"]), "patient_responses": len([m for m in messages if m["role"] == "assistant"]) }, "messages": messages } return json.dumps(chat_history, ensure_ascii=False, indent=2) def get_patient_summary(patient_data): """ 生成患者信息摘要 """ if not patient_data or 'portrait' not in patient_data: return "无患者信息" portrait = patient_data['portrait'] summary = f""" **患者ID**: {patient_data.get('id', 'N/A')} **基本信息**: {portrait.get('age', 'N/A')}岁 {portrait.get('gender', 'N/A')}性 **职业**: {portrait.get('occupation', 'N/A')} **婚姻状态**: {portrait.get('marital_status', 'N/A')} **主要症状**: {portrait.get('symptom', 'N/A')} """ if 'report' in patient_data: report = patient_data['report'] summary += f""" **主诉**: {report.get('chief_complaint', 'N/A')} """ return summary # 示例配置文件内容 CONFIG_EXAMPLE = { "openai": { "api_key": "your-api-key-here", "base_url": "https://api.openai.com/v1", "model_name": "gpt-3.5-turbo" }, "ui_settings": { "language": "Chinese", # or "English" "theme": "default", "max_messages": 100 }, "patient_defaults": { "language": "Chinese", "enable_memory": True, "enable_emotion_modulation": True } } def save_config(config, path="config.json"): """保存配置文件""" with open(path, 'w', encoding='utf-8') as f: json.dump(config, f, ensure_ascii=False, indent=2) def load_config(path="config.json"): """加载配置文件""" try: with open(path, 'r', encoding='utf-8') as f: return json.load(f) except FileNotFoundError: return CONFIG_EXAMPLE # 使用示例: if __name__ == "__main__": print("这是AnnaAgent Streamlit集成的辅助文件") print("请运行:streamlit run your_streamlit_app.py")