修复追问时agent丢失:服务器重启后自动重建agent,恢复file_list用于数据加载

This commit is contained in:
2026-04-20 14:32:08 +08:00
parent c0879765fd
commit d1fb498579

View File

@@ -183,6 +183,8 @@ class SessionManager:
pass
# Recover Metadata
session.file_list = meta.get("file_list", [])
session.user_requirement = meta.get("user_requirement", "")
try:
stat = os.stat(output_dir)
dt = datetime.fromtimestamp(stat.st_ctime)
@@ -248,6 +250,7 @@ def run_analysis_task(session_id: str, files: list, user_requirement: str, is_fo
return
session.is_running = True
session.file_list = files or []
try:
base_output_dir = "outputs"
@@ -261,7 +264,7 @@ def run_analysis_task(session_id: str, files: list, user_requirement: str, is_fo
# even if the server restarts mid-analysis
try:
with open(os.path.join(session_output_dir, "session_meta.json"), "w") as f:
json.dump({"session_id": session_id, "user_requirement": user_requirement}, f, default=str)
json.dump({"session_id": session_id, "user_requirement": user_requirement, "file_list": files or []}, f, default=str)
except Exception:
pass
@@ -298,8 +301,12 @@ def run_analysis_task(session_id: str, files: list, user_requirement: str, is_fo
else:
agent = session.agent
if not agent:
print("Error: Agent not initialized for follow-up.")
return
# Agent lost (server restart). Recreate and run as new session
# with the follow-up requirement, reusing the same output dir.
print("[WARN] Agent not initialized, recreating for follow-up.")
llm_config = LLMConfig()
agent = DataAnalysisAgent(llm_config, force_max_rounds=False, output_dir=base_output_dir)
session.agent = agent
# Wire progress callback for follow-up sessions
def progress_cb_followup(current, total, message):
@@ -311,11 +318,16 @@ def run_analysis_task(session_id: str, files: list, user_requirement: str, is_fo
agent.set_progress_callback(progress_cb_followup)
agent.set_session_ref(session)
# If agent was just recreated, load data files so it has context
data_files = None
if not agent.data_files and session.file_list:
data_files = session.file_list
result = agent.analyze(
user_input=user_requirement,
files=None,
files=data_files,
session_output_dir=session_output_dir,
reset_session=False,
reset_session=not bool(agent.conversation_history),
max_rounds=10,
)