别再只调API了!用AutoGen和LangChain亲手搭建你的第一个AI Agent(保姆级教程)
本文详细介绍了如何使用AutoGen和LangChain框架搭建AI Agent,实现天气查询和新闻摘要功能。通过Python代码示例和保姆级教程,帮助开发者从简单的API调用进阶到构建自主决策的智能体系统,探索AI Agent在人机交互中的新场景应用。
从API调用到智能体搭建:用AutoGen实现你的第一个天气查询AI助手
在ChatGPT等大模型API席卷开发者社区的今天,越来越多程序员开始思考:我们是否过度依赖"提问-回答"的被动交互模式?当简单的API调用已经无法满足复杂业务需求时,AI Agent技术正为我们打开一扇新的大门。本文将带你用Python和AutoGen框架,亲手构建一个能自主查询天气、总结新闻的多智能体系统,体验从"调用者"到"赋能者"的思维跃迁。
1. 为什么需要AI Agent?
传统API调用就像在餐厅点菜——你明确告诉厨房(大模型)要什么,它按订单返回结果。这种方式存在三个明显局限:
- 信息获取被动 :每次交互都需要人工发起请求
- 任务链条断裂 :复杂任务需要人工拆分和串联
- 缺乏环境感知 :无法根据上下文自主调整行为
而AI Agent更像一位私人助理,具备三种关键能力:
- 自主决策 :根据目标拆解子任务
- 工具使用 :调用外部API获取实时数据
- 记忆反馈 :从历史交互中学习优化
# 传统API调用 vs Agent工作模式对比
traditional_api = "用户提问 -> API返回结果"
agent_workflow = "目标设定 -> 自主规划 -> 工具调用 -> 结果优化"
2. 环境搭建与AutoGen初探
2.1 基础环境准备
开始前确保已安装Python 3.8+,并准备以下组件:
- OpenAI API密钥 :用于大模型接入
- 天气API密钥 :推荐使用心知天气或和风天气
- 开发环境 :VS Code + Jupyter扩展
# 创建虚拟环境并安装依赖
python -m venv autogen_env
source autogen_env/bin/activate # Linux/Mac
autogen_env\Scripts\activate # Windows
pip install pyautogen requests python-dotenv
2.2 AutoGen核心概念
AutoGen采用多智能体协作架构,主要包含两类角色:
| 角色类型 | 职责 | 配置参数示例 |
|---|---|---|
| Assistant | 主处理智能体 | llm_config={model:"gpt-4"} |
| UserProxy | 用户代理/工具调用 | human_input_mode="ALWAYS" |
from autogen import AssistantAgent, UserProxyAgent
# 初始化智能体
assistant = AssistantAgent("assistant")
user_proxy = UserProxyAgent("user_proxy")
3. 构建天气查询智能体系统
3.1 基础查询功能实现
我们先实现一个能理解自然语言请求的天气查询模块:
import requests
from typing import Dict, Any
def get_weather(params: Dict[str, Any]) -> str:
"""
调用天气API获取实时数据
:param params: 包含location、unit等查询参数
:return: 格式化天气信息字符串
"""
base_url = "https://api.seniverse.com/v3/weather/now.json"
response = requests.get(base_url, params={
"key": os.getenv("WEATHER_API_KEY"),
"location": params["location"],
"language": params.get("language", "zh-Hans"),
"unit": params.get("unit", "c")
})
data = response.json()
return f"{data['results'][0]['location']['name']}当前天气:{data['results'][0]['now']['text']},温度{data['results'][0]['now']['temperature']}℃"
3.2 集成到AutoGen智能体
将天气查询功能注册为Agent可调用的工具:
from autogen import register_function
# 注册天气查询函数
register_function(
get_weather,
caller=assistant,
executor=user_proxy,
name="get_weather",
description="查询指定城市的实时天气情况"
)
# 定义工具调用配置
llm_config = {
"model": "gpt-4",
"functions": [
{
"name": "get_weather",
"description": "获取当前天气信息",
"parameters": {
"type": "object",
"properties": {
"location": {"type": "string", "description": "城市名称"},
"unit": {"type": "string", "enum": ["c", "f"]}
},
"required": ["location"]
}
}
]
}
4. 实现多智能体新闻摘要系统
4.1 新闻爬取模块
扩展系统能力,增加新闻获取功能:
import feedparser
def get_news(topic: str, max_items: int = 3) -> str:
"""
获取指定主题的RSS新闻摘要
:param topic: 新闻主题关键词
:param max_items: 最大返回条目数
:return: 格式化新闻摘要
"""
feeds = {
"科技": "https://rsshub.app/36kr/newsflashes",
"财经": "https://rsshub.app/caijing/roll"
}
entries = feedparser.parse(feeds.get(topic, feeds["科技"])).entries[:max_items]
return "\n".join([f"{idx+1}. {entry['title']}\n {entry['summary']}"
for idx, entry in enumerate(entries)])
4.2 多智能体协作流程
配置两个专业智能体协同工作:
# 创建新闻分析专家
news_analyst = AssistantAgent(
name="News_Analyst",
system_message="你负责分析新闻内容,提取关键信息",
llm_config={"model": "gpt-4"}
)
# 创建报告生成专家
reporter = AssistantAgent(
name="Reporter",
system_message="你将新闻分析结果整理成易读的报告格式",
llm_config={"model": "gpt-4"}
)
# 定义协作流程
def analyze_news(topic: str):
user_proxy.initiate_chat(
news_analyst,
message=f"请分析最新的{topic}新闻",
recipient=reporter
)
5. 完整系统集成与效果优化
5.1 系统架构设计
最终系统包含三个核心模块:
- 输入解析层 :理解用户自然语言请求
- 任务路由层 :判断需要调用的功能模块
- 执行输出层 :组合多个工具的执行结果
graph TD
A[用户输入] --> B(输入解析)
B --> C{任务类型判断}
C -->|天气查询| D[调用天气API]
C -->|新闻摘要| E[获取RSS新闻]
D & E --> F[结果格式化]
F --> G[输出响应]
5.2 实际应用示例
体验完整的端到端交互流程:
# 启动对话
user_proxy.initiate_chat(
assistant,
message="上海今天天气怎么样?再帮我总结三篇科技新闻",
llm_config=llm_config
)
# 预期输出流程:
# 1. 识别天气查询需求 -> 调用get_weather
# 2. 识别新闻需求 -> 激活News_Analyst
# 3. 整合结果 -> 通过Reporter生成报告
6. 性能优化与生产级考量
要让Agent系统真正可用,还需要考虑以下关键因素:
- 错误处理机制 :API调用失败时的降级方案
- 速率限制管理 :避免频繁调用触发限流
- 对话状态保持 :维护跨会话的上下文记忆
- 敏感词过滤 :对输出内容进行安全检查
# 增强的错误处理示例
def safe_get_weather(params):
try:
return get_weather(params)
except Exception as e:
return f"天气查询失败:{str(e)}"
# 记忆功能实现
from autogen import ConversableAgent
class MemoryAgent(ConversableAgent):
def __init__(self, name, memory_size=5):
super().__init__(name)
self.memory = deque(maxlen=memory_size)
def append_to_memory(self, event):
self.memory.append(event)
7. 扩展应用场景探索
基于这个框架,你可以继续扩展更多实用功能:
- 邮件自动处理 :分类、摘要、自动回复
- 智能日程管理 :会议安排、冲突检测
- 数据可视化 :自动生成图表报告
- 代码审查 :分析GitHub提交记录
每个新功能的集成模式都遵循相同范式:
- 实现具体功能函数
- 注册为Agent可用工具
- 设计任务处理流程
- 测试优化交互体验
# 示例:会议安排功能
def schedule_meeting(participants, duration, topic):
# 连接日历API实现
return f"已为{topic}会议安排{duration}分钟时段"
register_function(
schedule_meeting,
description="安排线上会议并发送邀请"
)
在完成这个项目后,我深刻体会到Agent开发与传统编程的差异。最大的挑战不是写代码,而是设计智能体的决策逻辑和行为边界。有一次测试时,天气查询Agent因为过于"热心",在用户询问"上海天气"后,主动追加了"建议带伞"等未请求的信息,这提醒我们需要精确控制Agent的自主性程度。
更多推荐



所有评论(0)