Weather Agent:使用模型上下文协议(MCP)
该项目演示了使用 模型上下文协议(MCP) 图案。它将强大的大型语言模型(Llama 3.1)与现实世界中的本地工具(OpenWeatherMap API)连接起来,以解决用户查询。
______________________________________________________________________
🧐 什么是MCP,为什么它很重要?
模型上下文协议(MCP) 是将人工智能模型连接到外部“上下文”或“工具”的标准方式。
没有MCP,LLM是孤立的“罐子里的大脑”——它们知道很多,但不能 *做* 任何东西或访问实时数据。他们会产生幻觉,或者说“我无法获得实时天气”
MCP通过以下方式解决了这个问题:
- 标准化工具访问: 为法学硕士提供一种结构化的方式来要求外部行动(如“get_weather”)。
- 上下文注入: 获取这些操作的结果(JSON数据)并将其注入LLM的上下文窗口。
- 关注点分离: LLM负责 *思考* (路由/合成),而本地Python函数则执行 *执行*.
这个项目证明,你不需要庞大的专有生态系统来构建代理。您可以使用开放模型(Llama 3)和标准Python构建一个强大的路由代理。
______________________________________________________________________
⚡ 这个项目是如何运作的(一步一步)
当你问的时候 *“孟买的天气怎么样?”*,以下 三步MCP回路 发生:
1.路由器(意图分析)🧠
系统会将您的自然语言问题发送给LLM(meta-llama/Meta-Llama-3.1-8B-Instruct)以及定义可用工具的系统提示。
- 输入: “孟买的天气怎么样?”
- 法学硕士决定: LLM决定它无法从内存中回答。它从定义列表中选择一个工具。
- 输出: 结构化JSON意图。
{ "action": "get_current_weather", "city": "Mumbai" }2.工具执行(“上下文”)🛠️
Python后端拦截此JSON。它承认 action 并调用中定义的相应本地Python函数 weather_tools.py.
- 行动:
get_current_weather("Mumbai") - 机制: 通过HTTP调用OpenWeatherMap API。
- 结果: 原始JSON数据(“真相之源”)。
{ "temp": 28.5, "humidity": 70, "desc": "Smoke" }*注意:LLM没有“下载”这个。Python脚本将其提取并移交。*
3.综合(回应)📝
原始数据现在被“注入”回LLM的提示上下文中。我们要求LLM成为一个合成器。
- 提示法学硕士: “用户询问了孟买的情况。这是工具数据:{temp:28.5…}。请友好地回答。”
- 最终输出: “孟买目前的天气烟雾弥漫,气温为28.5°C。”
______________________________________________________________________
📂 项目结构
streamlit_app.py:前端UI。实时可视化3个MCP步骤。hf_frontend.py:The 脑.处理LLM通信、适当的即时工程和“路由器”逻辑。weather_tools.py:The 手真正获取数据的纯Python函数(工具)。requirements.txt:依赖关系(OpenAI客户端、Streamlit等)。
______________________________________________________________________
🚀 如何跑步
- 安装依赖关系:
pip install -r requirements.txt- 设置环境变量:
创建 .env 使用您的密钥文件:
HF_TOKEN=hf_... # Your Hugging Face Token
OPENWEATHERMAP_API_KEY=... # OpenWeatherMap Key
HF_MODEL=meta-llama/Meta-Llama-3.1-8B-Instruct- 运行代理:
streamlit run streamlit_app.py --server.port 8501- 查看访问权限:
打开 http://localhost:8501 在您的浏览器中。
______________________________________________________________________
专为MCP演示而设计。
