共计 2318 个字符,预计需要花费 6 分钟才能阅读完成。
核心概念:理解 Agent 的本质
Agent(智能体)可以类比为一个有目标的数字员工。与传统的规则系统不同,它具备三个关键特性:

- 自主性:像人类一样主动感知环境(如接收用户输入)并做出决策
- 反应性:能实时响应环境变化(如 API 返回错误时自动重试)
- 目标导向:所有行为围绕明确目标展开(如完成天气查询任务)
传统规则系统就像固定路线的地铁,而 Agent 更像是网约车——能根据实时路况(环境)动态调整路线(行为)。
开发准备:工具链搭建
推荐 Python + LangChain 组合,原因如下:
- 开发效率:LangChain 提供了 Agent 标准组件(记忆、工具集成等),避免重复造轮子
- 生态丰富:Python 有最全的 AI 库(OpenAI SDK 等)和天气 API 客户端
环境配置步骤:
- 安装 Python 3.8+(建议使用 conda 管理环境)
- 创建虚拟环境:
conda create -n weather_agent python=3.10 - 安装核心依赖:
pip install langchain openai requests python-dotenv - 准备
.env文件存放 API 密钥:OPENAI_API_KEY=sk-your-key WEATHER_API_KEY=your-weather-key
实战:天气预报 Agent
1. 初始化 Agent 骨架
from langchain.agents import AgentType, initialize_agent
from langchain.llms import OpenAI
from langchain.memory import ConversationBufferMemory
# 加载环境变量
from dotenv import load_dotenv
load_dotenv()
# 基础组件初始化
llm = OpenAI(temperature=0) # 控制输出随机性
memory = ConversationBufferMemory()
agent = initialize_agent(tools=[], # 工具列表将在后续添加
llm=llm,
agent=AgentType.CONVERSATIONAL_REACT_DESCRIPTION,
memory=memory,
verbose=True # 打印详细执行过程
)
2. 集成天气 API 工具
import requests
from langchain.tools import tool
@tool
def get_current_weather(location: str) -> str:
"""查询指定城市的实时天气"""
try:
# 示例使用 OpenWeatherMap API
url = f"https://api.openweathermap.org/data/2.5/weather?q={location}&appid={os.getenv('WEATHER_API_KEY')}&units=metric"
response = requests.get(url, timeout=10)
response.raise_for_status()
data = response.json()
return f"{location}天气:{data['weather'][0]['description']},气温{data['main']['temp']}℃"
except Exception as e:
# 结构化错误处理
logging.error(f"天气查询失败:{str(e)}")
return "暂时无法获取天气信息,请检查城市名称或稍后重试"
# 更新 Agent 工具配置
agent.tools = [get_current_weather] # 注入天气查询能力
3. 对话测试与状态管理
# 示例对话流程
response = agent.run("北京现在天气怎么样?")
print(response) # 输出:北京天气:晴,气温 23℃
# 测试上下文保持
response = agent.run("那上海呢?") # 自动识别新地点
print(response)
避坑指南
- API 限流问题:
- 现象:突然返回 429 错误
-
解决:在请求工具中添加重试逻辑和速率限制
from tenacity import retry, stop_after_attempt, wait_exponential @retry(stop=stop_after_attempt(3), wait=wait_exponential(multiplier=1, min=4, max=10)) def safe_api_call(): # 业务代码 -
对话状态丢失:
- 现象:用户说 ” 上面的城市 ” 时 Agent 无法理解
-
解决:使用 ConversationSummaryMemory 替代基础 Memory
from langchain.memory import ConversationSummaryMemory memory = ConversationSummaryMemory(llm=llm) -
工具选择冲突:
- 现象:同时有天气和航班工具时错误调用
- 解决:优化工具描述文本,明确使用场景
@tool(return_direct=True) def get_flight_info(): """仅适用于查询航班信息,不处理天气相关请求"""
进阶路线
- 能力增强:
- 添加历史记忆(如 RAG 向量数据库)
-
支持多模态输出(天气地图展示)
-
架构优化:
- 多 Agent 协作(天气 + 交通联合查询)
- 离线运行(使用本地 LLM 如 Llama3)
推荐学习资源:
– LangChain 官方文档(最全工具链说明)
–《多 Agent 系统:原理与实践》(理论深度)
– OpenAI Cookbook(实用 API 案例)
尝试为你的 Agent 添加______功能?
正文完
