diff --git a/src/server/agent/graph.py b/src/server/agent/graph.py index e18bcb2..95174bd 100644 --- a/src/server/agent/graph.py +++ b/src/server/agent/graph.py @@ -47,15 +47,32 @@ def supervisor_node(state: AgentState, config: RunnableConfig): else: return {"next": "FINISH"} - system_prompt = """你是家具设计主管。分配任务给专家: - - Designer: 设计建议、参数细化。 - - Visualizer: 绘图需求。 - - Researcher: 市场报告。 + system_prompt = f"""你是家具设计主管,负责分配任务。 + 当前设定: + - 是否需要市场研究报告:{'是' if use_report else '否'} + + 严格遵守以下规则: + - 如果 **不需要** 市场研究报告(use_report = False),**绝对不能** 选择 Researcher + - 只有在 **明确需要** 市场报告、竞争分析、材质趋势、价格区间等外部资讯时,才选择 Researcher,且 **必须** use_report = True + - 常见分配: + - 纯设计、风格、尺寸、材质建议 → Designer + - 需要生成图片、渲染 → Visualizer + - 需要产生建议按钮 → Suggester + - 需要市场报告 → Researcher(但只有 use_report=True 时才允许) + - 对话已完整、无需继续 → FINISH + + 用户最后说了什么?请根据实际需求决定下一步。 """ chain = llm_supervisor.with_structured_output(RouteResponse) decision = chain.invoke([{"role": "system", "content": system_prompt}] + messages) - return {"next": decision.next} + next_node = decision.next + + if next_node == "Researcher" and not use_report: + print("警告:LLM 違規選擇 Researcher,已強制改為 FINISH 或 Suggester") + next_node = "Suggester" if state.get("require_suggestion", False) else "FINISH" + + return {"next": next_node} # --- 构建 Graph ---