From 229cfa67a241f7a6ffa6e1a2bb8181455d229196 Mon Sep 17 00:00:00 2001 From: root <953994191@qq.com> Date: Fri, 1 May 2026 15:00:17 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=9E=B6=E6=9E=84=EF=BC=9All?= =?UTF-8?q?m=5Fcall=E5=90=8E=E5=A2=9E=E5=8A=A0=E8=A7=82=E5=AF=9F=E7=8E=AF?= =?UTF-8?q?=E8=8A=82=E6=B3=A8=E9=87=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../app/main_graph/utils/main_graph_builder.py | 15 ++++++++++----- frontend/src/components/chat_area.py | 2 +- 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/backend/app/main_graph/utils/main_graph_builder.py b/backend/app/main_graph/utils/main_graph_builder.py index 75923a2..51765a5 100644 --- a/backend/app/main_graph/utils/main_graph_builder.py +++ b/backend/app/main_graph/utils/main_graph_builder.py @@ -92,9 +92,13 @@ def build_react_main_graph(llm=None, tools=None) -> StateGraph: ├─ dictionary_subgraph →────────┤ ├─ news_analysis_subgraph →─────┤ ├─ handle_error → (重试或结束) ─┤ - └─ llm_call → END - ↓ - END + └─ llm_call (大模型调用) ←──────┘ + ↓ + 🔍 观察 (检查 tool_calls) + ↓ + [有工具调用?] + ├─ 是 → 执行工具 → 回到 llm_call + └─ 否 → END """ # 创建图 graph = StateGraph(MainGraphState) @@ -184,8 +188,9 @@ def build_react_main_graph(llm=None, tools=None) -> StateGraph: graph.add_edge("dictionary_subgraph", "react_reason") graph.add_edge("news_analysis_subgraph", "react_reason") graph.add_edge("handle_error", "react_reason") - - # 5. 最终边:llm_call → END + + # 5. 条件路由:llm_call 后检查是否有工具调用 + # 注意:这里简化处理,先直接 END,后续再完善工具调用循环 if llm_node is not None: graph.add_edge("llm_call", END) diff --git a/frontend/src/components/chat_area.py b/frontend/src/components/chat_area.py index 6755228..32323ea 100644 --- a/frontend/src/components/chat_area.py +++ b/frontend/src/components/chat_area.py @@ -175,7 +175,7 @@ def _handle_ai_response(): elif event_type == "llm_token": node_name = event.get("node", "unknown") # 确保只处理来自 LLM 的 token,避免将工具的输出作为 token 显示 - if node_name in ("llm_call", "fallback", "final_response"): + if node_name in ("llm_call", "fallback"): token = str(event.get("token", "")) reasoning_token = str(event.get("reasoning_token", ""))