learn progress

This commit is contained in:
CakeCN
2025-12-09 22:56:51 +08:00
parent 15cbeb93ee
commit 4d5a8bb23f
3 changed files with 90 additions and 10 deletions

View File

@@ -100,7 +100,7 @@ def get_multiagents_dialog_list(user_id: str) -> List[Dict]:
current_app.logger.error(f"获取MultiAgents对话列表异常: {str(e)}") current_app.logger.error(f"获取MultiAgents对话列表异常: {str(e)}")
return [] return []
def load_learning_progress(user_id: str, material_id: str, chapter_name: str, lesson_name: str) -> Optional[Dict]: def load_learning_progress(user_id: str, material_id: str, chapter_name: str, lesson_name: str) -> Dict:
""" """
加载用户学习进度 加载用户学习进度
@@ -111,7 +111,10 @@ def load_learning_progress(user_id: str, material_id: str, chapter_name: str, le
- lesson_name: 课时名 - lesson_name: 课时名
返回: 返回:
- Optional[Dict]: 学习进度数据,如果不存在则返回None - Dict: 学习进度数据,包含以下字段:
- exists: bool表示学习记录是否存在
- data: Dict学习进度详细数据包含chat_historys、scores、chapter_chain_now等字段
- message: str操作结果描述
""" """
try: try:
mongo = current_app.extensions["mongo"] mongo = current_app.extensions["mongo"]
@@ -126,11 +129,44 @@ def load_learning_progress(user_id: str, material_id: str, chapter_name: str, le
# 转换ObjectId为字符串 # 转换ObjectId为字符串
if "_id" in progress: if "_id" in progress:
progress["_id"] = str(progress["_id"]) progress["_id"] = str(progress["_id"])
return progress return {
return None "exists": True,
"data": progress,
"message": "学习记录加载成功"
}
# 返回默认值,确保即使没有学习记录也有完整的结构
return {
"exists": False,
"data": {
"user_id": user_id,
"material_id": material_id,
"chapter_name": chapter_name,
"lesson_name": lesson_name,
"chat_historys": [],
"scores": [],
"chapter_chain_now": None,
"updated_at": datetime.now().isoformat()
},
"message": "未找到学习记录,返回默认值"
}
except Exception as e: except Exception as e:
current_app.logger.error(f"加载学习进度失败: {str(e)}") error_msg = f"加载学习进度失败: {str(e)}"
return None current_app.logger.error(error_msg)
# 发生错误时返回默认结构,确保系统稳定性
return {
"exists": False,
"data": {
"user_id": user_id,
"material_id": material_id,
"chapter_name": chapter_name,
"lesson_name": lesson_name,
"chat_historys": [],
"scores": [],
"chapter_chain_now": None,
"updated_at": datetime.now().isoformat()
},
"message": error_msg
}
def upload_learning_progress_to_cloud(progress: Dict) -> Dict: def upload_learning_progress_to_cloud(progress: Dict) -> Dict:

View File

@@ -86,10 +86,11 @@ class AgentNamespace(Namespace):
chatmanager.function_manager.add_function(next_chapter, {'user_uuid': user_uuid}) chatmanager.function_manager.add_function(next_chapter, {'user_uuid': user_uuid})
if not chatmanager.restart:# 尝试加载用户学习进度 if not chatmanager.restart:# 尝试加载用户学习进度
progress = load_learning_progress(user_id, course_id, chapter_name, lesson_name) progress_result = load_learning_progress(user_id, course_id, chapter_name, lesson_name)
need_skip_chapters = 0 need_skip_chapters = 0
if progress: if progress_result['exists']:
progress = progress_result['data']
# 恢复学习进度数据 # 恢复学习进度数据
if 'scores' in progress: if 'scores' in progress:
# 根据scores的数量确定需要跳过的章节数 # 根据scores的数量确定需要跳过的章节数
@@ -108,8 +109,10 @@ class AgentNamespace(Namespace):
chatmanager.chapter_chain_now = progress['chapter_chain_now'] chatmanager.chapter_chain_now = progress['chapter_chain_now']
upload_learning_progress_to_cloud(progress) upload_learning_progress_to_cloud(progress)
else: else:
chatmanager.chat_historys = [] # 使用默认值,确保有完整的结构
chatmanager.scores = [] chatmanager.chat_historys = progress_result['data']['chat_historys']
chatmanager.scores = progress_result['data']['scores']
print(f"未找到学习记录,使用默认值: {progress_result['message']}")
fmd,fmdp,fsp = load_full_markdown_file(course_id, chapter_name, lesson_name) fmd,fmdp,fsp = load_full_markdown_file(course_id, chapter_name, lesson_name)
user_uuid2ase_client[user_uuid] = HSAEngineClient(current_app.config["ASE_ENGINE_URL"], current_app.config["ASE_ENGINE_NAMESPACE"],id=user_id, chatmanager = chatmanager) user_uuid2ase_client[user_uuid] = HSAEngineClient(current_app.config["ASE_ENGINE_URL"], current_app.config["ASE_ENGINE_NAMESPACE"],id=user_id, chatmanager = chatmanager)

41
Html/test_progress.py Normal file
View File

@@ -0,0 +1,41 @@
#!/usr/bin/env python3
import sys
import os
# Add the project root to the Python path
sys.path.insert(0, '/Users/cakecai/Documents/gitea/hsa/Html')
from flask import Flask
from flask_pymongo import PyMongo
# Create a minimal Flask app for testing
app = Flask(__name__)
app.config['MONGO_URI'] = 'mongodb://localhost:27017/test_db'
mongo = PyMongo(app)
# Register the mongo extension with the app
app.extensions = {'mongo': mongo}
# Import the function to test
with app.app_context():
from apps.services.course_services.learning_progess_process import load_learning_progress
# Test with non-existent record
print("Testing with non-existent record:")
result = load_learning_progress("test_user", "test_course", "test_chapter", "test_lesson")
print(f"Result: {result}")
print(f"Exists: {result['exists']}")
print(f"Data keys: {list(result['data'].keys())}")
print(f"Message: {result['message']}")
print("\n")
# Test that default values are correctly set
print("Testing default values:")
print(f"Chat historys: {result['data']['chat_historys']}")
print(f"Scores: {result['data']['scores']}")
print(f"Chapter chain now: {result['data']['chapter_chain_now']}")
print(f"Updated at: {result['data']['updated_at']}")
print("\n")
print("Test completed successfully!")