AnnaAgent-Demo / src /integration_example.py
sci-m-wang's picture
Upload 14 files
1d4c295 verified
raw
history blame
5.43 kB
# 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")