最近跟着 datawhale 的 hello-agents 教程入门智能体,从模糊的概念到亲手写出可运行的程序,每一步都充满惊喜。今天就把这份学习笔记整理出来,和大家聊聊智能体的定义、类型、核心范式,还有我用 Deepseek 在 PyCharm 里实现的实操案例~
一、先搞懂:到底什么是智能体?
其实智能体的核心定义特别好理解 ------ 它就是一个能感知周围环境,还能自主行动去达成目标的 "实体"。这个实体可能是自动驾驶汽车、手机里的导航 APP,甚至是处理金融交易的算法。
拆解下来,智能体得满足四个关键条件:首先得有 "感知器官",比如摄像头、传感器或者 API 接口,能捕捉环境信息;其次得有 "行动工具",像机械臂、代码函数这些,能对环境产生影响;最重要的是 "自主性",不用人一步一步指挥,能自己做决策;最后还要有明确的 "目标",所有行动都围绕这个目标展开。
就像我们日常用的导航 APP,它通过地图数据感知你的位置和路况(感知),通过规划路线和语音提示(行动),帮你在最短时间内到达目的地(目标),全程不用你手动计算路线,这就是一个典型的智能体。
二、智能体的类型与范式
智能体的世界并不是单一的,而是多元而精彩的。根据功能和应用场景的不同,智能体可以分为多种类型,比如任务型智能体、交互型智能体、学习型智能体等。每一种类型都有其独特的魅力和应用场景。
-
任务型智能体:就像是一个勤劳的小蜜蜂,专注于完成特定的任务,比如查询天气、订购机票等。
-
交互型智能体:则更像是一个善解人意的朋友,能够与你进行自然的语言交流,理解你的情感和需求。
-
学习型智能体:则是一个不断进步的学生,通过不断的学习和优化,提升自己的能力和效率。
在智能体的范式方面,也有监督学习、强化学习等多种方式。这些范式为智能体的训练和优化提供了丰富的工具和方法,使得智能体能够更加智能、更加高效。
三、智能体的三大分类维度
,智能体还能从三个角度分类,不同分类对应不同的应用场景:
1. 按决策架构分:从简单到复杂
就是我们前面聊的 "进化史" 分类 ------ 简单反射、基于模型、基于目标、基于效用、学习型,复杂度逐级提升,适用场景也从简单的自动化任务,扩展到金融交易、医疗诊断等复杂场景。
2. 按反应速度分:快反应 vs 深思考
-
反应式智能体:像安全气囊系统,必须毫秒级反应,追求速度优先,不做复杂规划;
-
规划式智能体:像 AlphaGo 或物流路径规划系统,会提前思考未来几步甚至几十步的行动,追求最优结果,不在乎多花一点时间;
-
混合式智能体:结合两者优点,比如自动驾驶汽车,遇到突发情况(如前方突然出现障碍物)会瞬间反应刹车(反应式),但日常行驶会规划最优路线(规划式)。
3. 按知识存储分:显性规则 vs 隐性模式
-
符号主义智能体:像严谨的图书管理员,知识都以明确的规则和概念存在,比如 "猫有四条腿、会喵喵叫",推理过程清晰可追溯,但面对模糊情况容易出错;
-
亚符号主义智能体:像牙牙学语的孩子,通过大量数据学习规律,不用明确规则就能识别猫的图片,但说不出 "为什么这是猫",推理过程像 "黑箱";
-
神经符号主义智能体:结合两者优点,既有神经网络的模式识别能力,又有符号系统的逻辑推理能力,就像人类的 "直觉 + 理性",是现在最热门的发展方向。
四、实操环节:用 Deepseek 实现智能旅行助手
理论说得再多,不如亲手写一段代码。跟着教程,我在 PyCharm 里用 Deepseek 模型,实现了一个简单的智能旅行助手 ------ 核心功能是 "查询北京今日天气,再根据天气推荐景点"。
1. 准备工作
首先得安装必要的库:requests(调用 API)、tavily-python(搜索工具)、openai(对接 Deepseek,因为 Deepseek 兼容 OpenAI 接口),用 pip 命令一键安装:
pip install requests tavily-python openai
然后要准备两个关键工具:
-
天气查询工具:调用 wttr.in 的免费 API,获取北京的实时天气;
-
景点推荐工具:用 Tavily 搜索 API,根据天气推荐合适的景点。
2. 核心逻辑:Thought-Action-Observation 循环
智能体的运行核心就是这个 "思考 - 行动 - 观察" 的闭环,我来拆解一下这个过程:
-
思考(Thought):智能体收到用户指令后,分析需要做什么 ------ 先查天气,再根据天气推荐景点;
-
行动(Action):调用对应的工具函数,比如先调用 get_weather ("北京") 获取天气数据;
-
观察(Observation):工具返回结果后,智能体读取这个结果,作为下一步行动的依据;
-
循环:直到完成目标,输出最终答案。
3. 关键代码片段
首先是工具函数的实现,天气查询函数:
import requests
def get_weather(city: str) -> str:
url = f"https://wttr.in/{city}?format=j1"
try:
response = requests.get(url)
response.raise_for_status()
data = response.json()
current_condition = data['current_condition'][0]
weather_desc = current_condition['weatherDesc'][0]['value']
temp_c = current_condition['temp_C']
return f"{city}当前天气:{weather_desc},气温{temp_c}摄氏度"
except Exception as e:
return f"天气查询失败:{e}"
然后是景点推荐函数,结合 Tavily 搜索:
import os
from tavily import TavilyClient
def get_attraction(city: str, weather: str) -> str:
api_key = os.environ.get("TAVILY_API_KEY")
if not api_key:
return "未配置TAVILY_API_KEY"
tavily = TavilyClient(api_key=api_key)
query = f"'{city}' 在'{weather}'天气下最值得去的旅游景点及理由"
try:
response = tavily.search(query=query, search_depth="basic", include_answer=True)
if response.get("answer"):
return response["answer"]
return "未找到合适的景点推荐"
except Exception as e:
return f"景点搜索失败:{e}"
最后是对接 Deepseek,实现循环逻辑:
from openai import OpenAI
# 初始化Deepseek客户端
client = OpenAI(
api_key="你的Deepseek API密钥",
base_url="https://api.deepseek.com"
)
# 系统提示,定义智能体角色和行动规则
system_prompt = """
你是智能旅行助手,用以下工具解决用户问题:
- get_weather(city: str):查询城市实时天气
- get_attraction(city: str, weather: str):根据天气推荐景点
每次回复需遵循:先思考过程,再行动,格式为:
Thought: [思考过程]
Action: [工具调用,如function_name(arg="value")]
完成任务后用finish(answer="最终答案")输出结果
"""
# 用户指令
user_prompt = "帮我查询一下今天北京的天气,然后根据天气推荐一个合适的旅游景点"
# 运行循环
prompt_history = [{"role": "system", "content": system_prompt}, {"role": "user", "content": user_prompt}]
for _ in range(5): # 限制最大循环次数
response = client.chat.completions.create(
model="deepseek-chat",
messages=prompt_history
)
llm_output = response.choices[0].message.content
prompt_history.append({"role": "assistant", "content": llm_output})
# 解析行动并执行
if "get_weather" in llm_output:
weather = get_weather("北京")
prompt_history.append({"role": "user", "content": f"Observation: {weather}"})
elif "get_attraction" in llm_output:
# 提取天气信息
weather = [msg for msg in prompt_history if "Observation:" in msg["content"]][0]["content"].split(":")[-1]
attraction = get_attraction("北京", weather)
prompt_history.append({"role": "user", "content": f"Observation: {attraction}"})
elif "finish" in llm_output:
final_answer = llm_output.split('"')[1]
print("最终结果:", final_answer)
break
4. 运行结果超惊喜!
程序运行后,先调用天气接口获取到 "Observation: 北京当前天气:Clear,气温-3摄氏度",然后自动调用景点推荐工具,最后输出:"任务完成,最终答案: 根据查询,北京今天的天气是多云,气温7摄氏度。这种天气比较凉爽但适合户外活动。我推荐您参观颐和园,多云天气下漫步在湖畔和园林中会很舒适,既能欣赏皇家园林的秋色,又不会太晒。记得穿件外套保暖。"
整个过程完全自动化,不用手动干预,智能体自己完成了 "查天气 - 分析场景 - 推荐景点" 的全流程,这就是 LLM 驱动智能体的魅力~
五、学习小结
这次学习《第一章 初识智能体》,最大的收获就是把 "智能体" 这个抽象概念,变成了可理解、可实操的知识。从定义来看,智能体的核心是 "感知 - 自主行动 - 目标导向";从发展来看,它从简单反射进化到了能自主学习的高级形态;从应用来看,LLM 驱动的智能体正在改变我们的工作和生活方式。
而亲手用 Deepseek 实现旅行助手的过程,更让我感受到了智能体的落地魅力 ------ 不用复杂的代码,通过 "思考 - 行动 - 观察" 的循环,就能让模型自主调用工具、解决实际问题。接下来还想试试给智能体添加 "记忆功能",让它记住用户的旅行偏好,或者处理景点售罄时的备选方案,继续探索智能体的更多可能性~