Browse Source

fourth commit

QIN 11 giờ trước cách đây
mục cha
commit
c3d8fdc721
1 tập tin đã thay đổi với 41 bổ sung0 xóa
  1. 41 0
      sql_agent.ipynb

+ 41 - 0
sql_agent.ipynb

@@ -993,6 +993,47 @@
     "print(f\"\\n{'='*60}\")\n",
     "print(f\"最终回答:\\n{final_msg.content}\")"
    ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 17,
+   "id": "448de573",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "# 编排器:根据用户意图路由到合适的 Agent\n",
+    "def run_data_analysis(user_query: str) -> str:\n",
+    "    \"\"\"\n",
+    "    统一入口:自动判断用户意图,路由到对应的 Agent。\n",
+    "    \"\"\"\n",
+    "    # 用 LLM 做意图分类(也可以用规则匹配,看场景复杂度)\n",
+    "    classification_prompt = f\"\"\"判断以下用户问题属于哪种类型:\n",
+    "    - \"query\":需要查询数据库获取数据\n",
+    "    - \"visualize\":需要画图或做统计分析\n",
+    "    - \"both\":需要先查数据,再画图分析\n",
+    "\n",
+    "    用户问题:{user_query}\n",
+    "\n",
+    "    只回复一个词:query / visualize / both\"\"\"\n",
+    "\n",
+    "    intent = llm.invoke(classification_prompt).content.strip().lower()\n",
+    "\n",
+    "    if intent == \"query\":\n",
+    "        # create_agent 返回的消息格式:取最后一条消息\n",
+    "        result = sql_agent.invoke({\"messages\": [{\"role\": \"user\", \"content\": user_query}]})\n",
+    "        return result[\"messages\"][-1].content\n",
+    "    elif intent == \"visualize\":\n",
+    "        result = visualization_agent.invoke({\"messages\": [{\"role\": \"user\", \"content\": user_query}]})\n",
+    "        return result[\"messages\"][-1].content\n",
+    "    else:  # both\n",
+    "        # 先查数据\n",
+    "        data_result = sql_agent.invoke({\"messages\": [{\"role\": \"user\", \"content\": user_query}]})\n",
+    "        data_content = data_result[\"messages\"][-1].content\n",
+    "        # 把查询结果传给可视化 Agent\n",
+    "        viz_input = f\"基于以下数据进行可视化分析:\\n{data_content}\\n\\n原始问题:{user_query}\"\n",
+    "        viz_result = visualization_agent.invoke({\"messages\": [{\"role\": \"user\", \"content\": viz_input}]})\n",
+    "        return viz_result[\"messages\"][-1].content"
+   ]
   }
  ],
  "metadata": {