diff --git a/backend/xingbang/evolution/trajectory.py b/backend/xingbang/evolution/trajectory.py index 4d9d4d0..6cd05d4 100644 --- a/backend/xingbang/evolution/trajectory.py +++ b/backend/xingbang/evolution/trajectory.py @@ -90,6 +90,19 @@ class TrajectoryRecorder: ) return path + def set_reward(self, reward: float) -> None: + """计算奖励后写回当前轨迹并重新落盘(进化闭环数据完整)。""" + if self._current is not None: + self._current["cumulative_reward"] = reward + # 若已有 trajectory_id, 覆盖落盘(full path 已知) + tid = self._current.get("trajectory_id") + if tid: + self._save(self._current) + + def rewrite(self, trajectory: dict[str, Any]) -> Path: + """写回一条已存在的轨迹(非当前进行中的), 返回路径。""" + return self._save(trajectory) + # ── 从调用侧采集 ──────────────────────────────────── def on_evidence(self, kind: str, data: dict) -> None: """订阅 agents 的 evidence 回调,累积成本步记录。""" diff --git a/backend/xingbang/workflow.py b/backend/xingbang/workflow.py index 4ca78e2..85df112 100644 --- a/backend/xingbang/workflow.py +++ b/backend/xingbang/workflow.py @@ -122,6 +122,7 @@ class XingbangWorkflow: ) reward = compute_reward_v1(trajectory) trajectory["cumulative_reward"] = reward + self._recorder.rewrite(trajectory) # 写回含 reward 轨迹, 进化数据完整 insights_path = self._evolution.save_insights() return { @@ -180,6 +181,7 @@ class XingbangWorkflow: trajectory = self._recorder.finalize(success=True) reward = compute_reward_v1(trajectory) trajectory["cumulative_reward"] = reward + self._recorder.rewrite(trajectory) # 写回含 reward 轨迹, 进化数据完整 insights_path = self._evolution.save_insights() yield {"event": "done", "workflow_id": workflow_id, "trajectory_id": traj_id, "reward": reward,