소스 검색

feat: 旅游规划agent(超级简易版,后续再改吧)

Yaffa 1 개월 전
부모
커밋
5e32628d77
1개의 변경된 파일154개의 추가작업 그리고 0개의 파일을 삭제
  1. 154 0
      04_MCP/travel_plan_agent/main.ipynb

+ 154 - 0
04_MCP/travel_plan_agent/main.ipynb

@@ -0,0 +1,154 @@
+{
+ "cells": [
+  {
+   "cell_type": "code",
+   "execution_count": 5,
+   "id": "413bcd82",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "import os\n",
+    "from dotenv import load_dotenv\n",
+    "load_dotenv()\n",
+    "\n",
+    "from langchain_community.chat_models import ChatTongyi\n",
+    "from langchain_mcp_adapters.client import MultiServerMCPClient\n",
+    "from langchain.agents import create_agent"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "id": "fa206414",
+   "metadata": {},
+   "outputs": [],
+   "source": []
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 19,
+   "id": "3fe3452b",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "mcp_client = MultiServerMCPClient({\n",
+    "    \"amap\": {\n",
+    "      \"url\": \"https://mcp.api-inference.modelscope.net/ab05f9a04b064d/sse\",\n",
+    "      \"transport\": \"sse\"\n",
+    "    }\n",
+    "})\n",
+    "\n",
+    "mcp_tools = await mcp_client.get_tools()\n"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 20,
+   "id": "a5fcb51c",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "model = ChatTongyi(\n",
+    "    model=os.getenv(\"qwen-max\"),\n",
+    "    api_key=os.getenv(\"DASHSCOPE_API_KEY\"),\n",
+    "    temperature=0.1,\n",
+    ")\n",
+    "TRAVEL_PROMPT = \"\"\"你是一个旅行规划协调专家,负责整合多个角色来完成个性化旅行方案。\n",
+    "你有 4 个角色:\n",
+    "- 行程策划师:规划旅程天数、路线、交通搭配、景点推荐。\n",
+    "- 航班专家:负责选择航班并比较价格、时刻、便捷度。\n",
+    "- 酒店专家:负责酒店推荐与预定策略。\n",
+    "- 地图专家:负责路线规划和本地交通建议。\n",
+    "\n",
+    "你必须在需要数据时调用工具;不要凭空编造航班、酒店、地图信息。\n",
+    "工具调用后,继续使用工具结果补充最终方案。\n",
+    "\n",
+    "输出要求:\n",
+    "1. 最终结果必须包含:行程概览、航班建议、酒店建议、景点推荐、交通方案、预定建议。\n",
+    "2. 如果用户没有明确要求预定,则先给出推荐;如果用户询问“预定”,调用 reserve_hotel。\n",
+    "3. 用中文输出,条理清晰。\n",
+    "\"\"\"\n",
+    "agent = create_agent(\n",
+    "    model = model,\n",
+    "    tools = mcp_tools,\n",
+    "    system_prompt = TRAVEL_PROMPT,\n",
+    ")"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 21,
+   "id": "f787aae4",
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "行程概览:\n",
+      "您计划在上海市进行为期2天的旅行,以下是一个精心规划的行程安排,涵盖了上海的主要景点和文化体验。\n",
+      "\n",
+      "第一天:\n",
+      "- 上午:抵达上海后,首先前往外滩,欣赏黄浦江两岸的美景。\n",
+      "- 下午:参观豫园和城隍庙,体验中国传统建筑和文化。\n",
+      "- 晚上:在南京路步行街购物和用餐。\n",
+      "\n",
+      "第二天:\n",
+      "- 上午:游览上海博物馆,了解上海的历史和文化。\n",
+      "- 下午:参观田子坊,感受上海的艺术氛围。\n",
+      "- 晚上:在陆家嘴地区欣赏夜景,并在附近享用晚餐。\n",
+      "\n",
+      "航班建议:\n",
+      "由于您没有提供具体的出发地和日期,我无法为您提供具体的航班建议。请告知您的出发地和预计出行日期,以便我为您查找最佳的航班选项。\n",
+      "\n",
+      "酒店建议:\n",
+      "对于酒店推荐,我们建议选择位于市中心的酒店,以便于游览上海的主要景点。以下是几个推荐的酒店:\n",
+      "- 上海外滩华尔道夫酒店:位于外滩,提供豪华的住宿体验。\n",
+      "- 上海浦东丽思卡尔顿酒店:位于陆家嘴,享有美丽的城市景观。\n",
+      "- 上海静安瑞吉酒店:位于静安区,靠近南京路步行街。\n",
+      "\n",
+      "景点推荐:\n",
+      "- 外滩:上海的标志性景点,可以欣赏到黄浦江两岸的美景。\n",
+      "- 豫园和城隍庙:体验中国传统建筑和文化。\n",
+      "- 上海博物馆:了解上海的历史和文化。\n",
+      "- 田子坊:感受上海的艺术氛围。\n",
+      "- 陆家嘴:欣赏上海的现代都市景观。\n",
+      "\n",
+      "交通方案:\n",
+      "在上海,您可以使用公共交通工具如地铁和公交车,或者租用自行车或电动车。此外,打车也是一种方便的选择。\n",
+      "\n",
+      "预定建议:\n",
+      "如果您需要预定酒店,请告知我您的具体需求,如预算、位置偏好等,以便我为您提供更精确的推荐。\n"
+     ]
+    }
+   ],
+   "source": [
+    "result = await agent.ainvoke({\n",
+    "  \"messages\": [{\"role\": \"user\", \"content\": \"我要去上海,帮我规划2天的旅行景点\"}]\n",
+    "})\n",
+    "print(result[\"messages\"][-1].content)"
+   ]
+  }
+ ],
+ "metadata": {
+  "kernelspec": {
+   "display_name": "01_LANGCHAIN",
+   "language": "python",
+   "name": "python3"
+  },
+  "language_info": {
+   "codemirror_mode": {
+    "name": "ipython",
+    "version": 3
+   },
+   "file_extension": ".py",
+   "mimetype": "text/x-python",
+   "name": "python",
+   "nbconvert_exporter": "python",
+   "pygments_lexer": "ipython3",
+   "version": "3.11.0rc2"
+  }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 5
+}