Spaces:
Sleeping
Sleeping
File size: 5,434 Bytes
1d4c295 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 |
# 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") |