|
@@ -993,6 +993,47 @@
|
|
|
"print(f\"\\n{'='*60}\")\n",
|
|
"print(f\"\\n{'='*60}\")\n",
|
|
|
"print(f\"最终回答:\\n{final_msg.content}\")"
|
|
"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": {
|
|
"metadata": {
|