目录
- [一、什么是 Prompt、Skill 和 Agent](#一、什么是 Prompt、Skill 和 Agent)
- [二、制作Agent为什么选择 LangChain参与制作](#二、制作Agent为什么选择 LangChain参与制作)
- [三、制作第一个天气 Agent](#三、制作第一个天气 Agent)
- [1. 创建虚拟环境](#1. 创建虚拟环境)
- [2. 安装依赖](#2. 安装依赖)
- [3. 配置 DeepSeek API Key](#3. 配置 DeepSeek API Key)
- [4. 编写代码](#4. 编写代码)
- [四、这个天气程序为什么能称为 Agent](#四、这个天气程序为什么能称为 Agent)
- [五、如何逐步熟练掌握 Agent](#五、如何逐步熟练掌握 Agent)
- [六、下一步:制作一个本地笔记问答 Agent](#六、下一步:制作一个本地笔记问答 Agent)
从零制作第一个天气 Agent:理解 Prompt、Skill 与 LangChain
一、什么是 Prompt、Skill 和 Agent
可以用"员工做事"来理解它们之间的关系。
- Prompt(提示词):工作说明书。它规定 Agent 的角色、规则和回答方式。
- Skill(技能):可执行的具体能力,例如查天气、读文件、查数据库、发送邮件。
- Agent(智能体):能够理解用户目标,决定是否调用技能、调用哪个技能,并根据结果继续完成任务的系统。
它们的关系如下:
text
用户的自然语言需求
↓
Agent 理解需求
↓
Prompt 约束 Agent 的行为
↓
Agent 选择合适的 Skill/Tool
↓
Skill 执行具体动作并返回结果
↓
Agent 组织最终回答
需要注意:模型本身擅长理解和生成语言,但它并不天然拥有实时数据、文件访问或执行能力。Skill 给它行动能力,Agent 则负责调度模型和 Skill。
二、制作Agent为什么选择 LangChain参与制作
LangChain 不是模型,也不是天气接口,而是连接模型与外部工具的框架。
在本例中,LangChain 主要完成三件事:
- 把 Python 函数包装成模型可以理解的工具。
- 把工具说明、Prompt 和用户问题发送给模型。
- 管理"模型调用工具 → 工具返回结果 → 模型继续回答"的循环。
使用 LangChain 的好处是:
- 可以较方便地切换 DeepSeek、OpenAI、Claude 或本地模型;
- 可以快速给 Agent 增加多个工具;
- 后续可以加入记忆、检索、权限、人工审批和日志追踪;
- 不需要手动解析模型发出的工具调用指令。
三、制作第一个天气 Agent
1. 创建虚拟环境
在项目目录打开 PowerShell:
powershell
python -m venv .venv
.venv\Scripts\Activate.ps1
如果 PowerShell 拦截激活脚本:
powershell
Set-ExecutionPolicy -Scope Process Bypass
.venv\Scripts\Activate.ps1
2. 安装依赖
powershell
python -m pip install -U langchain langchain-openai requests python-dotenv
依赖用途:
| 包 | 作用 |
|---|---|
langchain |
创建和运行 Agent |
langchain-openai |
通过 OpenAI 兼容协议连接 DeepSeek |
requests |
请求天气服务 |
python-dotenv |
从 .env 文件读取 API Key |
3. 配置 DeepSeek API Key
在 main.py 同级目录创建 .env 文件:
env
DEEPSEEK_API_KEY=你的_DeepSeek_API_Key
不要把 API Key 写进代码,也不要把 .env 上传到 GitHub。DeepSeek获取API KEY的方法可以参考----获取 API Key 与调用 API 步骤详解
4. 编写代码
创建 main.py:
python
import os
import requests
from dotenv import load_dotenv
from langchain.agents import create_agent
from langchain.tools import tool
from langchain_openai import ChatOpenAI
load_dotenv()
@tool
def get_weather(city: str) -> str:
"""查询指定城市当前的实时天气。
参数:
city: 城市名称,例如"成都""上海"或"Tokyo"。
返回:
当前天气、温度、体感温度、湿度和风速。
"""
try:
response = requests.get(
f"https://wttr.in/{city}",
params={"format": "j1", "lang": "zh"},
timeout=10,
)
response.raise_for_status()
current = response.json()["current_condition"][0]
description = current["weatherDesc"][0]["value"]
return (
f"{city}当前天气:{description};"
f"温度 {current['temp_C']}°C;"
f"体感温度 {current['FeelsLikeC']}°C;"
f"湿度 {current['humidity']}%;"
f"风速 {current['windspeedKmph']} km/h。"
)
except requests.RequestException as error:
return f"天气服务请求失败:{error}"
except (KeyError, IndexError, ValueError):
return "天气服务返回的数据格式无法解析。"
model = ChatOpenAI(
model="deepseek-v4-flash",
api_key=os.environ["DEEPSEEK_API_KEY"],
base_url="https://api.deepseek.com",
temperature=0,
)
agent = create_agent(
model=model,
tools=[get_weather],
system_prompt="""
你是一个中文天气助理。
规则:
1. 用户询问某个地点的当前天气时,必须调用 get_weather 工具。
2. 不允许凭记忆编造实时天气。
3. 如果工具调用失败,需要如实说明。
4. 回答应简洁、清楚。
""",
)
result = agent.invoke(
{
"messages": [
{
"role": "user",
"content": "成都现在天气怎么样?",
}
]
}
)
print(result["messages"][-1].content)
最终的文件结构如下图所示:

运行:
powershell
python main.py
最终运行结果

四、这个天气程序为什么能称为 Agent
如果只是普通 Python 程序,通常会写成:
python
weather = get_weather.invoke({"city": "成都"})
print(weather)
在这段代码中,开发者已经写死了:
- 调用哪个函数;
- 参数是什么;
- 什么时候调用。
而天气 Agent 的流程不同:
text
用户:"成都现在天气怎么样?"
↓
模型理解用户想获取"实时天气"
↓
模型发现 get_weather 是合适的工具
↓
模型从句子中识别地点"成都"
↓
模型生成工具调用:get_weather(city="北京")
↓
LangChain 执行 Python 工具
↓
工具请求天气网站并返回数据
↓
模型根据工具结果生成最终回答
因此,它不只是从文字中"提取关键字",而是结合以下信息进行判断:
- 用户的自然语言需求;
- Prompt 中规定的行为规则;
- 工具的名称、描述和参数;
- 工具执行后返回的结果。
这就是 Agent 的基本循环:
text
理解目标
→ 选择行动
→ 调用工具
→ 观察结果
→ 生成回答或继续行动
目前的天气 Agent 只有一个工具,因此它是一个功能较单一的入门 Agent。但它已经具备 Agent 的核心结构。
五、如何逐步熟练掌握 Agent
初学 Agent 时,最容易犯的错误是:一上来就想做一个万能 Agent。
例如希望一个 Agent 同时具备搜索、写代码、读文件、操作数据库、生成报告、发邮件和多 Agent 协作能力。这样会导致问题难以定位,也很难理解每个模块的作用。
更好的方法是:每次只做一个小 Agent,并且每次只增加一项新能力。
推荐学习路线如下:
| 阶段 | 小项目 | 重点能力 |
|---|---|---|
| 第一阶段 | 天气 Agent | 工具调用、自然语言转参数 |
| 第二阶段 | 本地文件问答 Agent | 文件读取、检索、基于资料回答 |
| 第三阶段 | 待办事项 Agent | 多工具选择、增删改查、状态管理 |
| 第四阶段 | 自动报告 Agent | 查询数据、分析数据、生成文档 |
| 第五阶段 | 客服或订单 Agent | 业务规则、权限、人工确认 |
| 第六阶段 | 多 Agent 协作 | 规划、执行、审核分工 |
制作每个 Agent 前,可以先问自己四个问题:
- 用户希望它完成什么具体目标?
- 它需要哪些工具才能完成目标?
- 哪些动作不能由它自动执行,例如删除数据、退款、发送消息?
- 如何验证它真的完成了任务,而不只是"声称完成了"?
六、下一步:制作一个本地笔记问答 Agent
天气 Agent 解决的是"获取实时外部信息"。
下一步可以制作"本地 Markdown 笔记问答 Agent",它解决的是"从自己的资料中寻找答案"。
用户可以这样提问:
text
我的笔记中有哪些关于 Python 装饰器的内容?
请总结成三点,并保存成一张复习卡片。
这个 Agent 的整体思路可以是:
text
用户提出问题
↓
Agent 判断需要查询本地笔记
↓
搜索 notes 文件夹中的相关 Markdown 文件
↓
读取相关文件内容
↓
根据文件内容总结答案
↓
将总结结果保存为新的复习卡片
它未来可以拥有的 Skill 包括:
text
search_notes(keyword) # 搜索笔记
read_note(filename) # 读取笔记
save_summary(title, text) # 保存总结
list_tasks() # 查看学习任务
add_task(task) # 新增学习任务
这个项目比天气 Agent 更接近实际使用场景,也能帮助理解 Agent 的更多核心能力:工具设计、知识检索、上下文管理、文件读写、结果可信度与权限控制。
从小而明确的 Agent 开始,逐步增加一个工具、一条规则或一种能力,比直接追求"万能 Agent"更容易真正掌握 Agent 的制作与使用。