修复Supervisor无法触发的情况

This commit is contained in:
zcr
2026-03-06 16:15:25 +08:00
parent 5106875618
commit d66a870207
8 changed files with 113 additions and 200 deletions

View File

@@ -30,7 +30,7 @@ async def chat_stream(request: ChatRequest):
* `thread_id`: (可选) 现有项目的唯一标识。若不传,系统将自动分配并返回。
* `checkpoint_id`: (可选) 历史快照 ID。
* `config_params`: (可选) 对话配置参数
* `require_suggestion`: (可选) 是否需要建议按钮
* `require_suggestion`: (可选) 是否需要建议按钮,需要建议的频率0-1的浮点数
* `use_report`: (可选) 是否需要使用report功能 true/false
@@ -199,25 +199,30 @@ async def chat_stream(request: ChatRequest):
namespace, channel, payload = event
# 路由更新
if event[1] == "updates":
if isinstance(payload, dict):
for node_name, update_content in payload.items():
namespace, _, payload = event
if isinstance(payload, dict):
for update_node, update_content in payload.items():
# 处理 reducerOverwrite / Append
if isinstance(update_content, dict):
for k, v in update_content.items():
if hasattr(v, "value"): # Overwrite(...)
update_content[k] = v.value
# 将 LangChain Message 转为可 JSON 序列化
if isinstance(update_content, dict) and "messages" in update_content:
msgs = []
for m in update_content["messages"]:
msgs.append({
"type": m.__class__.__name__,
"content": getattr(m, "content", ""),
"tool_calls": getattr(m, "tool_calls", []),
"name": getattr(m, "name", None),
"tool_calls": getattr(m, "tool_calls", None),
})
update_content = {
**update_content,
"messages": msgs
}
update_content["messages"] = msgs
yield f"data: {json.dumps({
"node": node_name,
"node": "Supervisor",
"type": "updates",
"content": update_content,
"is_delta": False,
@@ -245,6 +250,7 @@ async def chat_stream(request: ChatRequest):
else:
node_name = "Main"
message, metadata = payload
is_not_research = node_name != 'Researcher'
node_name = metadata.get("langgraph_node", node_name)
# 3. 处理不同类型的 message
payload_out = {
@@ -257,7 +263,8 @@ async def chat_stream(request: ChatRequest):
}
if isinstance(message, AIMessageChunk):
if node_name != 'Researcher' and not message.tool_call_chunks:
# 节点不是research 并且 tool_call_chunks不为空的情况下避免research的report工具使用custom发出的消息和message的消息重复了
if is_not_research and node_name != 'Researcher' and message.tool_call_chunks:
payload_out.update({
"type": "delta",
"is_delta": True,