|
@@ -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
|
|
|
|
|
+}
|