旅行天气代理

一个集成了天气查询和旅行规划功能的多功能对话代理,适用于旅行计划和天气信息检索。

  • by gianlut19
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 gianlut19/my-first-mcp-agent

使用说明

🌤️ 天气和旅行社

该项目实现了 多功能会话代理 用于旅行计划和天气信息检索。它利用了 MCP(多服务器通信协议) 使用LangGraph ReAct代理将各种后端服务(天气和旅行)与LLM(大型语言模型)集成的架构。

用户界面由以下人员处理 Chainlit,它提供了代理推理链的实时可视化(工具调用)。


🚀 建筑

该系统由三个主要组件组成,所有组件都作为单独的进程运行,并通过MCP协议进行通信:

  1. server.py (天气服务器): 一个MCP服务器,它将代理与 WeatherAPI.com API获取当前天气、预报、历史和天文数据。
  2. travel_server.py (旅行计划服务器): MCP服务器,提供逻辑和模拟数据(活动、餐厅),以根据位置、天气和偏好建议活动、餐厅并创建行程。
  3. app.py (主代理-Chainlit): 主Chainlit应用程序管理用户界面,将两个MCP服务器初始化为工具,并使用 LangGraph(ReAct代理) 根据用户的请求编排工具调用。

🛠️ 先决条件

  • Python 3.9+
  • 的API密钥 WeatherAPI.com.
  • 支持的LLM提供商(例如OpenAI、Anthropic、Groq)的API密钥。

⚙️ 安装

  1. 克隆存储库:

    git clone https://github.com/gianlut19/my-first-mcp-agent
    cd my-first-mcp-agent
    
  2. 创建并激活虚拟环境:

    python -m venv venv
    source venv/bin/activate  # Linux/macOS
    .\venv\Scripts\activate   # Windows
    
  3. 安装依赖项:

    pip install chainlit langchain_mcp_adapters httpx python-dotenv langgraph "langchain_openai>=0.1.0" "langchain_anthropic>=0.1.0" "langchain_groq>=0.1.0"
    
  4. 配置环境变量: 创建一个 .env 文件,并添加您的API密钥:

    # Key for the weather server
    WEATHERAPI_KEY="YOUR_WEATHERAPI_KEY"
    
    # Keys for supported LLM providers in app.py
    OPENAI_API_KEY="YOUR_OPENAI_API_KEY"
    ANTHROPIC_API_KEY="YOUR_ANTHROPIC_API_KEY"
    GROQ_API_KEY="YOUR_GROQ_API_KEY"
    

▶️ 入门指南

从项目根目录运行Chainlit应用程序:

chainlit run app.py -w

打开浏览器到终端中显示的地址(通常 http://localhost:8000).


🔧 可用工具

LLM代理可以访问以下工具(MCP端点)来响应用户请求:

⛈️ 天气工具(server.py)

工具名称 描述
get_current_weather 获取某个位置的当前天气状况。
get_forecast 获取长达14天的天气预报,包括每小时的数据和天气警报。
get_history 检索特定日期或范围内2010年1月1日的历史天气数据。
search_location 按名称搜索位置,这对于查找精确坐标非常有用。
get_astronomy 检索天文数据(日出、日落、月相)。

✈️ 旅行计划工具(travel_server.py)

工具名称 描述
suggest_activities 根据地点、天气条件和偏好(文化、运动、放松等)建议活动。
suggest_restaurants 推荐指定位置的餐馆。
create_itinerary 通过结合活动和餐厅,为一天创建完整的行程。
get_travel_tips 提供有关地点和天气的具体旅行提示(例如,服装建议)。

💡 查询示例

代理可以通过组合以下工具来执行复杂的推理链:

  • 天气+活动: “米兰目前的天气怎么样,建议进行室内活动?” (流量: get_current_weather → suggest_activities)
  • 天气+餐厅: “未来三天罗马的天气会怎么样?另外,建议去一家中等价位的餐厅吃饭。” (流量: get_forecast → suggest_restaurants)
  • 全面规划: “为明天在威尼斯制定一个完整的行程。我想要文化活动和一个便宜的午餐地点。” (流量: get_forecast → suggest_activities → suggest_restaurants → create_itinerary)

💻 代码注释

  • 标准沟通(关键): 这 server.py 和 travel_server.py 文件包括关键代码 完全禁用标准输出(sys.stdout) 在任何进口之前(如 dotenv)然后仅对受控MCP通信进行恢复。这可确保仅交换来自MCP协议的正确格式的消息,从而防止 stdio 管道。
  • 代理编排: 代理人在 app.py 使用 LangGraph(重演) 以响应于用户的输入动态地确定要调用的工具的顺序。
  • 交互式用户界面: 推理链(工具调用和响应)的可视化是使用Chainlit的 cl.Step,为法学硕士的决策过程提供充分的透明度。