hello-agents 学习笔记:从概念到落地,初识智能体的奇妙世界

最近跟着 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 循环

智能体的运行核心就是这个 "思考 - 行动 - 观察" 的闭环,我来拆解一下这个过程:

  1. 思考(Thought):智能体收到用户指令后,分析需要做什么 ------ 先查天气,再根据天气推荐景点;

  2. 行动(Action):调用对应的工具函数,比如先调用 get_weather ("北京") 获取天气数据;

  3. 观察(Observation):工具返回结果后,智能体读取这个结果,作为下一步行动的依据;

  4. 循环:直到完成目标,输出最终答案。

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 实现旅行助手的过程,更让我感受到了智能体的落地魅力 ------ 不用复杂的代码,通过 "思考 - 行动 - 观察" 的循环,就能让模型自主调用工具、解决实际问题。接下来还想试试给智能体添加 "记忆功能",让它记住用户的旅行偏好,或者处理景点售罄时的备选方案,继续探索智能体的更多可能性~

相关推荐
●VON5 小时前
小V健身助手开发手记(五):基于 RDB 的历史记录系统设计与实现
学习·openharmony·开源鸿蒙·von
ModelWhale5 小时前
和鲸科技创始人&CEO 范向伟受邀赴港亮相 AI 赋能・科技自立 —— 中小企业创新与机遇高峰论坛并做主题演讲
人工智能·科技
qinyia5 小时前
通过 Wisdom SSH AI 助手部署和配置 Nginx Web 服务器
人工智能·nginx·ssh
ones~5 小时前
软件体系架构(三)
学习·架构·软件工程
咚咚王者5 小时前
人工智能之数学基础 线性代数:第四章 矩阵分解
人工智能·线性代数·矩阵
Chloeis Syntax5 小时前
MySQL初阶学习日记(6)--- 索引
数据库·学习·mysql
roman_日积跬步-终至千里5 小时前
【计算机视觉(10)】图像分类基础篇:从最近邻到线性分类器
人工智能·计算机视觉·分类
0和1的舞者5 小时前
《MyBatis 从入门到上手:超全基础操作 + XML 配置指南》
数据库·spring boot·学习·spring·mybatis·框架·开发
IT_陈寒5 小时前
SpringBoot3.0性能优化:这5个冷门配置让我节省了40%内存占用
前端·人工智能·后端