共计 2219 个字符,预计需要花费 6 分钟才能阅读完成。
核心概念:什么是 AI Agent?
AI Agent(人工智能代理)是一种能够感知环境、自主决策并执行动作的智能程序。与传统程序最大的区别在于:

- 自主性:能根据目标主动采取行动,而非被动响应
- 适应性:通过反馈持续优化行为策略
- 目标导向:围绕明确目标组织行为逻辑
举个生活化的例子:传统天气 APP 像自动售货机(固定输入对应固定输出),而天气查询 AI Agent 则像私人管家——你问 ” 周末适合爬山吗 ”,它能综合地理位置、天气预报、历史数据给出个性化建议。
技术架构解剖
典型 AI Agent 包含三大核心组件:
- 感知模块
- 接收文本 / 语音 / 图像等输入
-
示例:用户提问 ” 北京明天会下雨吗 ”
-
决策模块
- 理解意图(天气查询)
- 规划行动步骤(调用天气 API)
-
示例:解析出地点 = 北京,时间 = 明天
-
执行模块
- 执行具体操作(API 调用)
- 返回结构化结果
- 示例:” 北京明天晴,最高温度 28℃”
实战:天气查询智能体
下面用 Python 实现一个基础版天气 Agent,关键技术栈:
– OpenAI GPT-3.5:理解自然语言
– requests:调用天气 API
– python-dotenv:管理 API 密钥
环境准备
pip install openai requests python-dotenv
核心代码实现
import openai
import requests
import os
from dotenv import load_dotenv
# 加载环境变量
load_dotenv()
openai.api_key = os.getenv("OPENAI_API_KEY")
# 天气 API 封装
def get_weather(city: str, date: str) -> str:
"""调用公开天气 API(示例用模拟数据)"""
# 实际开发替换为真实 API 如和风天气
weather_data = {"北京": {"2023-08-20": "晴, 22-28℃"},
"上海": {"2023-08-20": "多云, 25-30℃"}
}
return weather_data.get(city, {}).get(date, "未找到天气信息")
# 自然语言理解
def parse_user_input(user_input: str) -> dict:
"""使用 GPT 提取查询参数"""
prompt = f"""
从用户输入中提取天气查询参数,输出 JSON 格式:输入: {user_input}
输出示例: {{"city": "北京", "date": "明天"}}
输出:
"""
response = openai.ChatCompletion.create(
model="gpt-3.5-turbo",
messages=[{"role": "user", "content": prompt}],
temperature=0
)
return eval(response.choices[0].message.content)
# Agent 主逻辑
def weather_agent(user_input: str) -> str:
"""处理完整查询流程"""
try:
# 参数提取
params = parse_user_input(user_input)
# 日期转换(实际项目需更健壮的逻辑)date_map = {"今天": "2023-08-19", "明天": "2023-08-20"}
date = date_map.get(params["date"], params["date"])
# 获取天气
weather = get_weather(params["city"], date)
return f"{params['city']}{params['date']}天气: {weather}"
except Exception as e:
return f"查询失败: {str(e)}"
# 测试用例
if __name__ == "__main__":
print(weather_agent("北京明天天气怎么样"))
print(weather_agent("查询上海后天天气"))
关键设计解析
- 意图识别:
- 使用 GPT-3.5 提取结构化参数,比正则表达式更灵活
-
实际项目应考虑添加输入校验
-
错误处理:
- 基础版通过 try-catch 捕获异常
-
生产环境需要分级错误处理(API 限额、网络超时等)
-
API 设计:
- 将天气 API 封装为独立函数,便于后续替换实现
- 当前使用模拟数据避免依赖真实服务
常见陷阱与解决方案
API 调用问题
- 频率限制:免费 API 通常有每分钟调用次数限制
-
解决方案:添加缓存层(redis)、实现请求队列
-
密钥泄露:不要将 API 密钥硬编码在代码中
- 正确做法:使用环境变量或密钥管理服务
自然语言处理
- 歧义输入:用户说 ” 下周去北京 ” 可能指查询或行程规划
-
改进方法:设计确认机制(” 您是想查询北京下周天气吗?”)
-
地域覆盖:用户提问 ” 海淀区天气 ” 但 API 只支持城市级别
- 应对策略:在文档中明确能力边界
进阶发展方向
- 记忆机制:
- 保存对话历史实现多轮交互
-
示例:用户问 ” 比昨天热吗 ” 需要记忆前次查询结果
-
工具扩展:
- 集成多个 API(航班 + 天气 + 日历)
-
实现复杂任务如 ” 安排下雨天的室内活动 ”
-
个性化:
- 学习用户偏好(如温度敏感度)
- 输出建议时考虑个人习惯
思考与实践
尝试扩展这个基础 Agent:
- 如何修改代码支持查询 ” 未来 3 天 ” 的天气预报?
- 如果用户输入 ” 周末天气 ”,怎样自动计算对应日期?
- 当天气 API 不可用时,可以设计哪些降级方案?
建议先用伪代码描述思路,再逐步实现具体功能。遇到问题不妨查阅 OpenAI 的 官方文档,里面有很多实用的最佳实践。
正文完
