使用说明
🌤️ 天气和旅行社
该项目实现了 多功能会话代理 用于旅行计划和天气信息检索。它利用了 MCP(多服务器通信协议) 使用LangGraph ReAct代理将各种后端服务(天气和旅行)与LLM(大型语言模型)集成的架构。
用户界面由以下人员处理 Chainlit,它提供了代理推理链的实时可视化(工具调用)。
🚀 建筑
该系统由三个主要组件组成,所有组件都作为单独的进程运行,并通过MCP协议进行通信:
server.py(天气服务器): 一个MCP服务器,它将代理与 WeatherAPI.com API获取当前天气、预报、历史和天文数据。travel_server.py(旅行计划服务器): MCP服务器,提供逻辑和模拟数据(活动、餐厅),以根据位置、天气和偏好建议活动、餐厅并创建行程。app.py(主代理-Chainlit): 主Chainlit应用程序管理用户界面,将两个MCP服务器初始化为工具,并使用 LangGraph(ReAct代理) 根据用户的请求编排工具调用。
🛠️ 先决条件
- Python 3.9+
- 的API密钥 WeatherAPI.com.
- 支持的LLM提供商(例如OpenAI、Anthropic、Groq)的API密钥。
⚙️ 安装
-
克隆存储库:
git clone https://github.com/gianlut19/my-first-mcp-agent cd my-first-mcp-agent -
创建并激活虚拟环境:
python -m venv venv source venv/bin/activate # Linux/macOS .\venv\Scripts\activate # Windows -
安装依赖项:
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" -
配置环境变量: 创建一个
.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,为法学硕士的决策过程提供充分的透明度。