feat 增加推荐对话可控参数

This commit is contained in:
zcr
2026-02-06 14:51:25 +08:00
parent 23b456e131
commit a2abe69b60
5 changed files with 22 additions and 9 deletions

View File

@@ -42,9 +42,10 @@ async def designer_node(state: AgentState, config: RunnableConfig):
system_text = get_agent_prompt("designer")
system_prompt = SystemMessage(content=system_text)
should_suggest = len(state["messages"]) % 5 == 0
# 改为异步调用 ainvoke
response = await model.ainvoke([system_prompt] + messages)
return {"messages": [response]}
return {"messages": [response], "require_suggestion": should_suggest}
# --- 2. Researcher Agent (情报专家) ---

View File

@@ -18,7 +18,7 @@ from langgraph.checkpoint.mongodb import MongoDBSaver
# 定义路由的输出结构,强制 LLM 选择一个
class RouteResponse(BaseModel):
# 将 FINISH 替换或增加 Suggester
next: Literal["Designer", "Researcher", "Visualizer", "Suggester"]
next: Literal["Designer", "Researcher", "Visualizer", "Suggester", "FINISH"]
creds = service_account.Credentials.from_service_account_file(
@@ -42,7 +42,13 @@ def supervisor_node(state: AgentState):
# --- 拦截逻辑修改 ---
# 如果专家已经回复完了AIMessage 且无工具调用),则交给 Suggester 生成按钮
if isinstance(last_message, AIMessage) and not last_message.tool_calls:
return {"next": "Suggester"}
should_go_to_suggester = state.get("require_suggestion", False)
# 如果符合建议条件
if should_go_to_suggester:
return {"next": "Suggester"}
else:
return {"next": "FINISH"}
system_prompt = """你是家具设计主管。分配任务给专家:
- Designer: 设计建议、参数细化。
@@ -74,7 +80,8 @@ workflow.add_conditional_edges(
"Designer": "Designer",
"Researcher": "Researcher",
"Visualizer": "Visualizer",
"Suggester": "Suggester" # 原本的 FINISH 现在指向 Suggester
"Suggester": "Suggester", # 原本的 FINISH 现在指向 Suggester
"FINISH": END # 直接结束,不给建议
}
)
@@ -82,8 +89,7 @@ workflow.add_conditional_edges(
workflow.add_edge("Designer", "Supervisor")
workflow.add_edge("Researcher", "Supervisor")
workflow.add_edge("Visualizer", "Supervisor")
# 重点Suggester 是整个流程的终点
# 重点Suggester 可以是整个流程的终点
workflow.add_edge("Suggester", END)
client = MongoClient(MONGO_URI)

View File

@@ -6,4 +6,5 @@ class AgentState(TypedDict):
# messages 存储完整的对话历史operator.add 表示新消息是追加而不是覆盖
messages: Annotated[Sequence[BaseMessage], operator.add]
# next 存储 Supervisor 决定的下一步是谁
next: str
next: str
require_suggestion: bool # 是否需要建议按钮