🤗
入门 免费 English
Agents Course
Agents Course
[待填写] Agents Course — 来自 Hugging Face 的免费课程
📖 你将学到
- [待填写]
01 认识AI智能体
你可能听说过AI智能体(Agent)这个词,感觉很高大上对吧?其实没那么玄乎。简单说,AI智能体就是一个能自己思考、做决定的AI程序,它不再是“你问一句它答一句”那么简单,而是能主动完成任务。
举个例子:以前你用ChatGPT写邮件,得一步步告诉它“写个开头”、“加个结尾”。但智能体不一样,你只需要说“帮我发封邮件给张三,确认明天下午3点的会议”,它就能自己查通讯录、写内容、检查格式,甚至帮你发出去。
在这节课里,我们会用Hugging Face的免费工具搭建你的第一个智能体。别担心,不需要你懂什么高深代码,跟着步骤走就行。
实操步骤:
1)打开浏览器,访问 Hugging Face 官网(国内可以直接访问 hf-mirror.com 镜像站,速度更快)
2)注册一个免费账号(用邮箱就行,不需要翻墙)
3)进入 Spaces 页面,点击 “Create new Space”
4)选择 Gradio SDK(这是最友好的界面工具)
5)在空间里新建一个 app.py 文件,把下面这段代码贴进去:
```python
import gradio as gr
from transformers import pipeline
# 加载一个简单的问答模型
qa_pipeline = pipeline("question-answering", model="distilbert-base-cased-distilled-squad")
def simple_agent(question, context):
# 这就是你的“智能体”核心:根据上下文回答问题
result = qa_pipeline(question=question, context=context)
return f"🤖 智能体回答:{result['answer']} (可信度:{round(result['score']*100)}%)"
# 创建界面
demo = gr.Interface(
fn=simple_agent,
inputs=[gr.Textbox(label="你的问题"), gr.Textbox(label="参考文本", lines=5)],
outputs="text",
title="我的第一个AI智能体",
description="给智能体一段文字,然后问它问题,它会自己找答案!"
)
demo.launch()
```
6)点击右上角的 “Commit” 按钮,等一两分钟就能看到你的智能体上线了
实用技巧:
- 如果页面加载慢,记得在 Space 设置里把硬件选为 “CPU basic”(免费的)
- 第一次运行需要下载模型,大概等30秒,别着急
- 试试问“苹果是什么颜色?” 然后给一段“苹果是红色的”文字,看智能体怎么回答
这个智能体虽然简单,但已经具备了“理解任务-处理信息-输出结果”的基本能力。在后面的课程里,我们会让它变得更聪明,能做更多事情。
举个例子:以前你用ChatGPT写邮件,得一步步告诉它“写个开头”、“加个结尾”。但智能体不一样,你只需要说“帮我发封邮件给张三,确认明天下午3点的会议”,它就能自己查通讯录、写内容、检查格式,甚至帮你发出去。
在这节课里,我们会用Hugging Face的免费工具搭建你的第一个智能体。别担心,不需要你懂什么高深代码,跟着步骤走就行。
实操步骤:
1)打开浏览器,访问 Hugging Face 官网(国内可以直接访问 hf-mirror.com 镜像站,速度更快)
2)注册一个免费账号(用邮箱就行,不需要翻墙)
3)进入 Spaces 页面,点击 “Create new Space”
4)选择 Gradio SDK(这是最友好的界面工具)
5)在空间里新建一个 app.py 文件,把下面这段代码贴进去:
```python
import gradio as gr
from transformers import pipeline
# 加载一个简单的问答模型
qa_pipeline = pipeline("question-answering", model="distilbert-base-cased-distilled-squad")
def simple_agent(question, context):
# 这就是你的“智能体”核心:根据上下文回答问题
result = qa_pipeline(question=question, context=context)
return f"🤖 智能体回答:{result['answer']} (可信度:{round(result['score']*100)}%)"
# 创建界面
demo = gr.Interface(
fn=simple_agent,
inputs=[gr.Textbox(label="你的问题"), gr.Textbox(label="参考文本", lines=5)],
outputs="text",
title="我的第一个AI智能体",
description="给智能体一段文字,然后问它问题,它会自己找答案!"
)
demo.launch()
```
6)点击右上角的 “Commit” 按钮,等一两分钟就能看到你的智能体上线了
实用技巧:
- 如果页面加载慢,记得在 Space 设置里把硬件选为 “CPU basic”(免费的)
- 第一次运行需要下载模型,大概等30秒,别着急
- 试试问“苹果是什么颜色?” 然后给一段“苹果是红色的”文字,看智能体怎么回答
这个智能体虽然简单,但已经具备了“理解任务-处理信息-输出结果”的基本能力。在后面的课程里,我们会让它变得更聪明,能做更多事情。
02 给智能体加工具
上节课我们搭了一个“能回答问题”的智能体,但它还不够聪明——它只能根据你给的文字来找答案。真正的智能体应该会使用工具,就像人类会用计算器、词典一样。
举个例子:你问智能体“今天北京天气怎么样?”,它不能凭空编造答案,而是需要调用天气API去查实时数据。这节课我们就教你怎么给智能体“装”上工具。
实操步骤:
1)首先,我们需要安装一个强大的工具库。在刚才的Space里,打开终端(Terminal)或者直接在代码里添加:
```python
import requests
import json
from datetime import datetime
```
2)我们给智能体加一个“查天气”的工具。在 app.py 里添加这个函数:
```python
def get_weather(city):
"""查询城市天气的智能工具"""
# 使用免费且国内可用的天气API(不需要注册)
url = f"https://wttr.in/{city}?format=%C+%t"
try:
response = requests.get(url, timeout=5)
if response.status_code == 200:
weather_info = response.text.strip()
return f"🌤️ {city}的天气:{weather_info}"
else:
return f"❌ 查不到{city}的天气,试试拼音?"
except:
return "⏰ 网络超时,请稍后再试"
```
3)现在让智能体学会“什么时候该用工具”。我们写一个简单的决策逻辑:
```python
def agent_with_tools(user_input):
# 检查用户输入里有没有城市名(简单版)
cities = ["北京", "上海", "广州", "深圳", "杭州", "成都", "beijing", "shanghai"]
for city in cities:
if city in user_input.lower():
# 如果提到城市,就调用天气工具
return get_weather(city)
# 如果没提到城市,就当作普通对话
return f"你说的是:{user_input}。我目前只会查天气哦,试试说'北京天气'"
```
4)更新 Gradio 界面,让它调用新的智能体:
```python
demo = gr.Interface(
fn=agent_with_tools,
inputs="text",
outputs="text",
title="会使用工具的智能体",
description="试试说:'北京天气怎么样?' 或 '上海热吗?'"
)
```
5)提交代码,等部署完成就能试用了
核心概念:
- 工具(Tool):智能体可以调用的外部功能,比如查天气、算数学、搜网页
- 决策(Decision):智能体根据用户输入判断用哪个工具
- 执行(Execution):调用工具并返回结果
实用技巧:
- 国内用户如果遇到API请求失败,可以在代码里加 proxies={"http": None, "https": None} 避免代理干扰
- 工具函数最好加上清晰的文档字符串(就是函数里的三引号注释),方便以后扩展
- 可以多试几个城市:成都、杭州、南京,都支持拼音和中文
现在你的智能体已经从“只会死记硬背”进化到“会调用外部工具”了。下一节课,我们会让它同时用好几个工具,像真正的助手一样工作。
举个例子:你问智能体“今天北京天气怎么样?”,它不能凭空编造答案,而是需要调用天气API去查实时数据。这节课我们就教你怎么给智能体“装”上工具。
实操步骤:
1)首先,我们需要安装一个强大的工具库。在刚才的Space里,打开终端(Terminal)或者直接在代码里添加:
```python
import requests
import json
from datetime import datetime
```
2)我们给智能体加一个“查天气”的工具。在 app.py 里添加这个函数:
```python
def get_weather(city):
"""查询城市天气的智能工具"""
# 使用免费且国内可用的天气API(不需要注册)
url = f"https://wttr.in/{city}?format=%C+%t"
try:
response = requests.get(url, timeout=5)
if response.status_code == 200:
weather_info = response.text.strip()
return f"🌤️ {city}的天气:{weather_info}"
else:
return f"❌ 查不到{city}的天气,试试拼音?"
except:
return "⏰ 网络超时,请稍后再试"
```
3)现在让智能体学会“什么时候该用工具”。我们写一个简单的决策逻辑:
```python
def agent_with_tools(user_input):
# 检查用户输入里有没有城市名(简单版)
cities = ["北京", "上海", "广州", "深圳", "杭州", "成都", "beijing", "shanghai"]
for city in cities:
if city in user_input.lower():
# 如果提到城市,就调用天气工具
return get_weather(city)
# 如果没提到城市,就当作普通对话
return f"你说的是:{user_input}。我目前只会查天气哦,试试说'北京天气'"
```
4)更新 Gradio 界面,让它调用新的智能体:
```python
demo = gr.Interface(
fn=agent_with_tools,
inputs="text",
outputs="text",
title="会使用工具的智能体",
description="试试说:'北京天气怎么样?' 或 '上海热吗?'"
)
```
5)提交代码,等部署完成就能试用了
核心概念:
- 工具(Tool):智能体可以调用的外部功能,比如查天气、算数学、搜网页
- 决策(Decision):智能体根据用户输入判断用哪个工具
- 执行(Execution):调用工具并返回结果
实用技巧:
- 国内用户如果遇到API请求失败,可以在代码里加 proxies={"http": None, "https": None} 避免代理干扰
- 工具函数最好加上清晰的文档字符串(就是函数里的三引号注释),方便以后扩展
- 可以多试几个城市:成都、杭州、南京,都支持拼音和中文
现在你的智能体已经从“只会死记硬背”进化到“会调用外部工具”了。下一节课,我们会让它同时用好几个工具,像真正的助手一样工作。
03 多工具协同工作
上节课我们给智能体装了一个“查天气”工具,但现实中的任务往往更复杂。比如用户问“北京今天适合穿什么?”,智能体需要先查天气,再根据温度推荐衣服,这就要用到多个工具协同工作。
这节课我们来打造一个“生活小助手”,它同时拥有查天气、算时间、做笔记三个工具,并且能根据你的问题自动选择组合使用。
实操步骤:
1)先定义三个工具函数。在 app.py 里添加:
```python
import requests
from datetime import datetime
# 工具1:查天气
def get_weather(city):
"""返回城市当前天气和温度"""
url = f"https://wttr.in/{city}?format=%C+%t&lang=zh"
try:
res = requests.get(url, timeout=5)
if res.status_code == 200:
return res.text.strip()
return "查询失败"
except:
return "网络错误"
# 工具2:算时间差
def time_diff(city, target_city):
"""计算两个城市的时间差(小时)"""
timezones = {
"北京": 8, "东京": 9, "纽约": -5, "伦敦": 0,
"巴黎": 1, "悉尼": 11, "迪拜": 4
}
if city in timezones and target_city in timezones:
diff = timezones[target_city] - timezones[city]
return f"{city}和{target_city}时差{diff}小时"
return "暂不支持这两个城市"
# 工具3:快速笔记
notes = [] # 用列表存笔记
def add_note(content):
"""添加一条笔记并返回当前所有笔记"""
notes.append(content)
return "📝 已记录:" + " | ".join(notes[-3:]) # 只显示最近3条
```
2)现在是最关键的部分——让智能体学会“思考”该用哪个工具。我们用简单的关键词匹配来做决策:
```python
def smart_agent(user_input):
input_lower = user_input.lower()
# 检测是否包含城市名(中英文)
cities = ["北京", "上海", "东京", "纽约", "beijing", "shanghai", "tokyo", "new york"]
mentioned_cities = [c for c in cities if c in input_lower]
# 决策逻辑
if "天气" in input_lower or "温度" in input_lower or "冷" in input_lower or "热" in input_lower:
if mentioned_cities:
city = mentioned_cities[0]
weather = get_weather(city)
# 根据温度给出穿衣建议
if "°C" in weather:
try:
temp = int(weather.split("°C")[0].split()[-1])
if temp < 10:
advice = "🥶 建议穿羽绒服"
elif temp < 20:
advice = "🧥 建议穿外套"
else:
advice = "👕 穿短袖就行"
return f"{weather}\n{advice}"
except:
pass
return weather
elif "时差" in input_lower or "时间差" in input_lower:
if len(mentioned_cities) >= 2:
return time_diff(mentioned_cities[0], mentioned_cities[1])
else:
return "请提供两个城市名,比如'北京和东京的时差'"
elif "记" in input_lower or "笔记" in input_lower or "记录" in input_lower:
# 提取要记的内容(去掉关键词)
content = user_input.replace("记", "").replace("笔记", "").replace("记录", "").strip()
if content:
return add_note(content)
else:
return "想记点什么?比如'记一下明天开会'"
else:
return "🤔 我没理解,试试说:\n- '北京天气'(查天气+穿衣建议)\n- '北京和东京的时差'(算时差)\n- '记一下明天开会'(做笔记)"
```
3)更新界面,让用户知道智能体有哪些能力:
```python
demo = gr.Interface(
fn=smart_agent,
inputs=gr.Textbox(label="你的问题", placeholder="试试:北京天气怎么样?"),
outputs="text",
title="🤖 生活小助手",
description="我能帮你:查天气+穿衣建议 | 算时差 | 做笔记"
)
```
关键思维:
- 意图识别:智能体第一步是理解用户想干嘛
- 工具选择:根据意图决定调用哪个工具
- 结果组合:有时候需要把多个工具的结果拼在一起(比如查完天气再给建议)
实用技巧:
- 用 if-elif-else 做决策虽然简单,但足够应对小项目
- 给用户清晰的提示(比如在else里列出示例),能大幅提升体验
- 国内用户注意:wttr.in 有时会被墙,如果不行可以用 cn.bing.com/search?q=城市+天气 替代
现在你的智能体已经能根据问题灵活调用多个工具了。下一节课,我们会让它变得更“主动”,学会记住对话历史,像真人一样聊天。
这节课我们来打造一个“生活小助手”,它同时拥有查天气、算时间、做笔记三个工具,并且能根据你的问题自动选择组合使用。
实操步骤:
1)先定义三个工具函数。在 app.py 里添加:
```python
import requests
from datetime import datetime
# 工具1:查天气
def get_weather(city):
"""返回城市当前天气和温度"""
url = f"https://wttr.in/{city}?format=%C+%t&lang=zh"
try:
res = requests.get(url, timeout=5)
if res.status_code == 200:
return res.text.strip()
return "查询失败"
except:
return "网络错误"
# 工具2:算时间差
def time_diff(city, target_city):
"""计算两个城市的时间差(小时)"""
timezones = {
"北京": 8, "东京": 9, "纽约": -5, "伦敦": 0,
"巴黎": 1, "悉尼": 11, "迪拜": 4
}
if city in timezones and target_city in timezones:
diff = timezones[target_city] - timezones[city]
return f"{city}和{target_city}时差{diff}小时"
return "暂不支持这两个城市"
# 工具3:快速笔记
notes = [] # 用列表存笔记
def add_note(content):
"""添加一条笔记并返回当前所有笔记"""
notes.append(content)
return "📝 已记录:" + " | ".join(notes[-3:]) # 只显示最近3条
```
2)现在是最关键的部分——让智能体学会“思考”该用哪个工具。我们用简单的关键词匹配来做决策:
```python
def smart_agent(user_input):
input_lower = user_input.lower()
# 检测是否包含城市名(中英文)
cities = ["北京", "上海", "东京", "纽约", "beijing", "shanghai", "tokyo", "new york"]
mentioned_cities = [c for c in cities if c in input_lower]
# 决策逻辑
if "天气" in input_lower or "温度" in input_lower or "冷" in input_lower or "热" in input_lower:
if mentioned_cities:
city = mentioned_cities[0]
weather = get_weather(city)
# 根据温度给出穿衣建议
if "°C" in weather:
try:
temp = int(weather.split("°C")[0].split()[-1])
if temp < 10:
advice = "🥶 建议穿羽绒服"
elif temp < 20:
advice = "🧥 建议穿外套"
else:
advice = "👕 穿短袖就行"
return f"{weather}\n{advice}"
except:
pass
return weather
elif "时差" in input_lower or "时间差" in input_lower:
if len(mentioned_cities) >= 2:
return time_diff(mentioned_cities[0], mentioned_cities[1])
else:
return "请提供两个城市名,比如'北京和东京的时差'"
elif "记" in input_lower or "笔记" in input_lower or "记录" in input_lower:
# 提取要记的内容(去掉关键词)
content = user_input.replace("记", "").replace("笔记", "").replace("记录", "").strip()
if content:
return add_note(content)
else:
return "想记点什么?比如'记一下明天开会'"
else:
return "🤔 我没理解,试试说:\n- '北京天气'(查天气+穿衣建议)\n- '北京和东京的时差'(算时差)\n- '记一下明天开会'(做笔记)"
```
3)更新界面,让用户知道智能体有哪些能力:
```python
demo = gr.Interface(
fn=smart_agent,
inputs=gr.Textbox(label="你的问题", placeholder="试试:北京天气怎么样?"),
outputs="text",
title="🤖 生活小助手",
description="我能帮你:查天气+穿衣建议 | 算时差 | 做笔记"
)
```
关键思维:
- 意图识别:智能体第一步是理解用户想干嘛
- 工具选择:根据意图决定调用哪个工具
- 结果组合:有时候需要把多个工具的结果拼在一起(比如查完天气再给建议)
实用技巧:
- 用 if-elif-else 做决策虽然简单,但足够应对小项目
- 给用户清晰的提示(比如在else里列出示例),能大幅提升体验
- 国内用户注意:wttr.in 有时会被墙,如果不行可以用 cn.bing.com/search?q=城市+天气 替代
现在你的智能体已经能根据问题灵活调用多个工具了。下一节课,我们会让它变得更“主动”,学会记住对话历史,像真人一样聊天。
04 让智能体有记忆
你有没有发现,之前做的智能体有个大问题——它不记得你说过什么。你问完“北京天气”,再问“那上海呢?”,它完全不知道你刚才在聊天气。这是因为智能体没有“记忆”。
真正的AI助手应该能记住对话上下文,就像你和朋友聊天,朋友不会忘记你上一句说了什么。这节课我们就给智能体装上“记忆模块”。
实操步骤:
1)我们先创建一个简单的“记忆”类,用来存对话历史:
```python
class Memory:
def __init__(self, max_history=5):
self.history = [] # 存储对话记录
self.max_history = max_history # 最多记几轮
def add(self, role, content):
"""添加一条对话记录"""
self.history.append({"role": role, "content": content})
# 如果太长,就删掉最早的
if len(self.history) > self.max_history * 2
真正的AI助手应该能记住对话上下文,就像你和朋友聊天,朋友不会忘记你上一句说了什么。这节课我们就给智能体装上“记忆模块”。
实操步骤:
1)我们先创建一个简单的“记忆”类,用来存对话历史:
```python
class Memory:
def __init__(self, max_history=5):
self.history = [] # 存储对话记录
self.max_history = max_history # 最多记几轮
def add(self, role, content):
"""添加一条对话记录"""
self.history.append({"role": role, "content": content})
# 如果太长,就删掉最早的
if len(self.history) > self.max_history * 2
💡 想要更系统的 AI 学习路线?
去 ganhuo.ai 看完整路线图 →