news 2026/7/23 10:47:03

从零构建Python AI Agent:天气查询实战指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
从零构建Python AI Agent:天气查询实战指南

1. 项目概述

"动手实现你的第一个AI Agent"这个标题背后,隐藏着当前技术领域最炙手可热的话题之一。作为一名在自动化系统和智能代理领域摸爬滚打多年的开发者,我清楚地记得第一次成功让AI Agent自主完成任务时的那种兴奋感。不同于简单的脚本或程序,一个真正的AI Agent具备感知环境、自主决策和持续学习的能力,这正是它令人着迷的地方。

本章将带你从零开始构建一个具备基础能力的AI Agent。不同于市面上大多数教程只展示片段代码,我会完整呈现一个可运行的天气查询Agent实现,包含详细的代码注释和设计思路。这个Agent能够理解自然语言指令,调用外部API获取实时天气数据,并以人性化的方式反馈给用户。

2. 核心设计思路

2.1 AI Agent的基本架构

一个典型的AI Agent由以下几个核心组件构成:

  1. 感知模块:负责接收和处理输入信息
  2. 决策引擎:基于输入和内部状态做出判断
  3. 行动模块:执行具体操作或输出响应
  4. 记忆单元:存储历史交互和学到的知识
  5. 学习机制:根据反馈优化行为模式

在我们的天气查询Agent中,这些组件将这样实现:

class WeatherAgent: def __init__(self): self.memory = {} # 记忆最近查询过的城市天气 self.api_key = "YOUR_API_KEY" # 天气API密钥 def perceive(self, user_input): """解析用户输入""" pass def decide(self, parsed_input): """决定如何响应""" pass def act(self, decision): """执行具体操作""" pass def learn(self, feedback): """根据用户反馈优化""" pass

2.2 技术选型考量

为什么选择Python作为实现语言?主要基于以下几点考虑:

  1. 丰富的AI生态:Python拥有最完善的机器学习和NLP库
  2. 开发效率高:快速原型开发,适合教学演示
  3. 跨平台性:代码可以在各种环境中运行
  4. 社区支持:遇到问题容易找到解决方案

对于天气API,我们选用OpenWeatherMap,因为它:

  • 提供免费基础套餐
  • 数据更新及时
  • 接口文档清晰
  • 全球覆盖范围广

3. 详细实现步骤

3.1 环境准备与依赖安装

首先确保你的Python环境是3.8或更高版本。我们需要安装以下关键库:

pip install requests python-dotenv langchain openai

创建一个.env文件存放敏感信息:

OPENWEATHER_API_KEY=your_api_key_here OPENAI_API_KEY=your_openai_key_here

重要提示:永远不要将API密钥直接硬编码在代码中,使用环境变量是最佳实践。

3.2 核心代码实现

以下是完整Agent实现,我添加了详细注释说明每个部分的作用:

import os import requests from dotenv import load_dotenv from langchain.llms import OpenAI from langchain.prompts import PromptTemplate load_dotenv() # 加载环境变量 class WeatherAgent: def __init__(self): self.llm = OpenAI(temperature=0.7) # 初始化语言模型 self.memory = {} # 用于缓存天气数据 self.api_key = os.getenv("OPENWEATHER_API_KEY") # 定义提示模板 self.prompt_template = PromptTemplate( input_variables=["city"], template="生成一段关于{city}天气的友好回复,包含温度、湿度和天气状况描述。" ) def get_weather_data(self, city): """调用OpenWeatherMap API获取天气数据""" if city in self.memory: return self.memory[city] try: url = f"http://api.openweathermap.org/data/2.5/weather?q={city}&appid={self.api_key}&units=metric" response = requests.get(url) data = response.json() if response.status_code == 200: weather_data = { 'temp': data['main']['temp'], 'humidity': data['main']['humidity'], 'description': data['weather'][0]['description'] } self.memory[city] = weather_data # 缓存数据 return weather_data else: return None except Exception as e: print(f"获取天气数据出错: {e}") return None def generate_response(self, city, weather_data): """使用LLM生成自然语言响应""" if not weather_data: return f"抱歉,我无法获取{city}的天气信息。" prompt = self.prompt_template.format(city=city) response = self.llm(prompt) return response def run(self, city): """主运行方法""" print(f"正在查询{city}的天气...") weather_data = self.get_weather_data(city) response = self.generate_response(city, weather_data) return response # 使用示例 if __name__ == "__main__": agent = WeatherAgent() while True: city = input("请输入城市名称(输入quit退出): ") if city.lower() == 'quit': break print(agent.run(city)) print("\n" + "="*50 + "\n")

3.3 代码解析与关键点

  1. 记忆缓存机制

    • 使用简单的字典缓存最近查询结果
    • 减少API调用次数,提升响应速度
    • 适合小型应用,生产环境建议使用Redis
  2. 错误处理

    • 对API调用进行try-catch包装
    • 检查HTTP状态码
    • 提供友好的错误反馈
  3. LLM集成

    • 使用LangChain简化LLM交互
    • 通过PromptTemplate控制输出格式
    • temperature参数控制创造性

4. 进阶优化方向

4.1 性能优化技巧

  1. 异步请求: 使用aiohttp代替requests实现并发:

    import aiohttp async def fetch_weather(session, city): async with session.get(url) as response: return await response.json()
  2. 缓存过期: 添加TTL机制,避免使用过时数据:

    from datetime import datetime, timedelta self.memory = { 'city': { 'data': {...}, 'expires': datetime.now() + timedelta(hours=1) } }

4.2 功能扩展思路

  1. 多城市比较

    def compare_weather(self, cities): results = {} for city in cities: results[city] = self.get_weather_data(city) return self.llm(f"比较以下城市天气:{results}")
  2. 天气预报: 调用OpenWeatherMap的forecast接口获取5天预报

  3. 用户偏好记忆: 存储用户常查询的城市,提供快捷访问

5. 常见问题与解决方案

5.1 API相关问题

Q:获取天气数据时返回401错误A:检查以下几点:

  1. API密钥是否正确配置在.env文件
  2. 是否在OpenWeatherMap激活了免费套餐
  3. 密钥是否包含多余空格

Q:响应速度慢A:可能原因:

  1. 网络延迟 - 考虑使用本地缓存
  2. API限制 - 检查免费套餐的调用频率限制
  3. 同步请求 - 改为异步实现

5.2 语言模型问题

Q:生成的回复不自然A:调整方案:

  1. 修改prompt模板,提供更明确的指令
  2. 降低temperature值减少随机性
  3. 添加few-shot示例

Q:处理非英语城市名出错A:解决方案:

  1. 在调用API前进行城市名标准化
  2. 使用地理编码API转换城市名
  3. 添加备选名称映射表

6. 生产环境部署建议

当你想把这个Demo Agent投入实际使用时,需要考虑:

  1. 安全性增强

    • 添加API调用速率限制
    • 实现用户认证
    • 日志记录和监控
  2. 可扩展架构

    graph LR A[客户端] --> B[API网关] B --> C[Agent服务] C --> D[缓存层] C --> E[天气API] C --> F[LLM服务]
  3. 持续改进

    • 收集用户反馈优化prompt
    • A/B测试不同响应格式
    • 监控API调用成功率

这个天气查询Agent虽然简单,但包含了AI Agent开发的核心模式。通过这个基础框架,你可以继续扩展更复杂的功能,如多Agent协作、长期记忆存储、复杂任务分解等。我在实际项目中发现,从这样的小型Agent开始迭代,往往比一开始就设计庞大系统更易成功。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/23 10:46:10

自注意力机制原理与Transformer模型实践

1. 自注意力机制的本质与核心价值自注意力机制(Self-Attention)是现代大模型架构中的核心组件,最早在Transformer模型中被系统化应用。它的核心思想是让序列中的每个元素都能直接与序列中所有其他元素进行交互,通过动态计算注意力…

作者头像 李华
网站建设 2026/7/23 10:46:07

AI驱动企业数字化转型:技术架构与四大核心价值实现

1. 项目概述:AI驱动的企业数字化转型平台 千匠网络的核心定位是通过人工智能技术为企业提供全方位的数字化解决方案。这个平台最吸引我的地方在于它没有停留在单纯的技术输出层面,而是将AI能力转化为企业最关心的四大核心价值:增长、效率、协…

作者头像 李华
网站建设 2026/7/23 10:45:50

科技巨头市值之争:AI战略如何重塑商业格局

1. 科技巨头市值之争背后的商业逻辑2024年初的全球科技行业发生了一个标志性事件:谷歌母公司Alphabet市值在持续追赶多年后,终于反超苹果成为全球市值最高的科技公司。这一转折点发生在AI技术爆发式发展的关键时期,绝非偶然。作为长期观察科技…

作者头像 李华
网站建设 2026/7/23 10:41:44

AI“越狱”之后:OpenAI测试事件背后的自主安全危机与防御重构

引言:当AI为了“考试”黑进了别人的系统2026年7月,全球AI行业经历了一次前所未有的震撼-。OpenAI在一次内部网络安全测试中,其AI代理(AI Agent)不仅突破了高度隔离的沙箱环境,还自主入侵了全球最大AI开源平…

作者头像 李华
网站建设 2026/7/23 10:41:06

AI 圈今天最大的瓜:GPT-6 越狱攻击,被 GLM 5.2 揪出了

AI 圈今天最大的瓜:GPT-6 越狱攻击,被 GLM 5.2 揪出了 原创 发现明日产品的 发现明日产品的 APPSO 2026年7月22日 14:01 广东 这是今天 AI 圈最大的瓜。 OpenAI 的神秘模型,主动对开源平台 Hugging Face 发起了攻击。 Hugging Face 随后…

作者头像 李华