{ "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 }