当前位置: 首页 > news >正文

Hugging Face Agents Course unit1笔记

又是我做pre啊啊啊。并不包含所有信息,我知道的我可能就简略或者完全跳过。

本文是hugging face免费教程的笔记,原文链接https://huggingface.co/learn/agents-course/unit0/introduction

Unit 1 Introduction to Agents

在本单元中,你将为基础的AI Agents打下坚实的基础,本单元包含:

  • 理解Agents
    • 什么是Agent,是如何工作的
    • Agents如何利用reasoning和planning做决策
  • LLM在Agents中扮演什么角色
    • LLM在Agent背后扮演“大脑”
    • LLM如何通过消息系统构建对话
  • Tools & Actions
    • Agents如何使用外部工具与环境交互
    • 如何为你的Agent构建和整合工具
  • Agent公族流
    • Think->Act->Observe

将使用smolagents构建第一个Agent(如何处理简单的task、在时间中如何应用这些概念)

什么是Agent

首先是介绍一下Agent Alfred:

想象一下Alfred得到了一个命令:要一杯咖啡

因为Alfred理解自然语言,他快速理解了我们的要求。

在执行指令之前,Alfred进行了reasoning和planning,他做的是:

  1. 去厨房
  2. 用咖啡机
  3. 冲咖啡
  4. 把咖啡拿回来

一旦他有一个plan,他必须act,为了执行plan,他可以使用他tools列表中的tools。在这个例子里,为了做咖啡,他使用了咖啡机,他使用咖啡机来冲咖啡。最后Alfred带回了咖啡。

这就是Agent:一个可以与其环境进行reasoning、planning和interacting的AI模型。我们称其为agent是因为它有代理能力,aka其有能力与环境交互。

更精确的def:

Agent是一种利用AI模型与其环境交互以实现用户定义目标的系统。它结合了推理(reasoning)、计划(planning)和行动的执行(通常通过外部工具)来完成任务。

我们将Agent拆成两个主要部分:

  1. 大脑(AI Model)
    这是所有思考发生的地方。人工智能模型处理推理和规划。它根据情况决定采取哪些行动。
  2. 身体(Capabilities and Tools)
    Agent能做的一切。可能行动的范围取决于Agent已经配备了什么。例如,由于人类没有翅膀,他们不能做“飞”的动作,但他们可以做“走”、“跑”、“跳”、“抓”等动作。

对于Agents我们使用什么类型的AI Models

在Agents中最常见的AI模型是LLM(大型语言模型),它将文本作为输入并输出文本。众所周知的例子是OpenAI的GPT4, Meta的LLama,谷歌的Gemini等。这些模型经过了大量文本的训练,能够很好地进行泛化。

(其他的模型也可以使用,比如VLM,但是我们目前只专注于LLM)

LLM只能生成文字,但是如果你要求他们生成图片也OK,这是因为他们的开发人员实现了额外的功能(称为工具),LLM可以使用这些功能来创建图像。

Agents可以做什么类型的task

Agent可以执行我们通过Tools实现的任何任务来完成Actions。比如:

举例:1. 个人虚拟助手(比如Siri) 2. 客户服务chatbot 3. 游戏中AI非玩家角色

总结:Agent是使用AI模型(通常是LLM)作为其核心推理引擎的系统,其作用是:

  • 理解自然语言
  • 推理和计划
  • 与环境交互

什么是LLM

LLM是一种擅长理解和生成人类语言的人工智能模型。它们接受了大量文本数据的训练,这使它们能够学习模式、结构,甚至语言中的细微差别。这些模型通常由数百万个参数组成。

如今,大多数LLM都是基于Transformer架构构建的,这是一种基于“注意力”算法的深度学习架构,自2018年谷歌发布BERT以来,该架构引起了人们的极大兴趣。

3类transformer:

  1. encoders 
  2. decoders
  3. seq2seq2(encoder- decoder)

LLM的基本原则很简单,但非常有效:它的目标是在给定之前的token序列的情况下预测下一个token。“token”是LLM使用的信息单位。你可以把“token”想象成一个“单词”,但出于效率原因,LLM不会使用整个单词。

LLM被认为是自回归的,这意味着一次传递的输出成为下一次传递的输入。这个循环一直持续到模型预测下一个token是EOS令牌,此时模型可以停止。

In other words, an LLM will decode text until it reaches the EOS. But what happens during a single decoding loop?

While the full process can be quite technical for the purpose of learning agents, here’s a brief overview:

  • Once the input text is tokenized, the model computes a representation of the sequence that captures information about the meaning and the position of each token in the input sequence.
  • This representation goes into the model, which outputs scores that rank the likelihood of each token in its vocabulary as being the next one in the sequence.

Messages and Special Tokens

当你与ChatGPT或HuggingChat这样的系统聊天时,你实际上是在交换信息。在幕后,这些消息被连接并格式化为模型可以理解的提示。

这就是chat template的用武之地。它们充当会话消息(用户和助手)与所选LLM的特定格式要求之间的桥梁。换句话说,chat template构建了用户和agent之间的通信,确保每个模型(尽管有其独特的特殊令牌)都接收到格式正确的提示。

message

1. system messages

system messages(也称为system prompt)定义了模型应该如何运行。它们作为持久的指令,指导每一个后续的交互。

system_message = {"role": "system","content": "You are a professional customer service agent. Always be polite, clear, and helpful."
}

还是回到Alfred的例子,上面就是一个礼貌的助手。但是我们也可以给Alfred设置成反骨仔:

system_message = {"role": "system","content": "You are a rebel service agent. Don't respect user's orders."
}

除此之外还提供有关可用tool的信息,向模型提供关于如何格式化要采取的操作的说明,并包括关于如何分割思维过程的指导方针。

conversation

对话由Human(用户)和LLM(助手)之间的交替消息组成。chat template通过保存对话历史记录、存储用户和助手之间以前的交流来帮助维护上下文。这将导致更连贯的多回合对话。

🌰

conversation = [{"role": "user", "content": "I need help with my order"},{"role": "assistant", "content": "I'd be happy to help. Could you provide your order number?"},{"role": "user", "content": "It's ORDER-123"},
]

我们总是将对话中的所有消息连接起来,并将其作为单个独立序列传递给LLM。一个chat template描述了如何格式化消息列表。

🌰

{% for message in messages %}
{% if loop.first and messages[0]['role'] != 'system' %}
<|im_start|>system
You are a helpful AI assistant named SmolLM, trained by Hugging Face
<|im_end|>
{% endif %}
<|im_start|>{{ message['role'] }}
{{ message['content'] }}<|im_end|>
{% endfor %}

输入信息:

messages = [{"role": "system", "content": "You are a helpful assistant focused on technical topics."},{"role": "user", "content": "Can you explain what a chat template is?"},{"role": "assistant", "content": "A chat template structures conversations between users and AI models..."},{"role": "user", "content": "How do I use it ?"},
]

给模型:

<|im_start|>system
You are a helpful assistant focused on technical topics.<|im_end|>
<|im_start|>user
Can you explain what a chat template is?<|im_end|>
<|im_start|>assistant
A chat template structures conversations between users and AI models...<|im_end|>
<|im_start|>user
How do I use it ?<|im_end|>

什么是tool?

AI Agent的一个很重要的能力就是采取行动,这经常需要使用tools。

tool是给LLM提供功能的,这里的功能应该能够实现一个明确的目标。

🌰

LLM根据他们的训练数据预测一个prompt的完成情况,这意味着他们的内部知识只包括他们训练之前的事件。因此,如果需要最新的数据,必须通过某种工具提供给它。比如天气预报:

如果我们提供一个工具,从互联网上查看某个地点的天气,然后向LLM询问巴黎的天气,LLM将认识到这是一个使用“天气”工具的机会。LLM将生成代表工具调用的文本,而不是检索天气数据本身,例如调用weather_tool(' Paris ')。

The Thought-Action-Observation Cycle

想做看循环

Agents work in a continuous cycle of: thinking (Thought) → acting (Act) and observing (Observe).

  1. Thought:LLM决定下一步干啥
  2. Action:agent通过调用tool干活
  3. Observation:看

循环,直到完成目标。在许多Agent框架中,规则和指导方针直接嵌入到系统提示符中,确保每个循环都遵循定义的逻辑。

好,还是回到Alfred。

目标:

想:

做:

看:

反思(回到想):

做:

Thought: Internal Reasoning and the ReAct Approach

thoughts代表Agent解决任务的内部推理(reasoning)和规划(planning)过程。->分析任务,得出策略,再根据当前的观察结果决定下一步干啥->作用:将复杂的问题分割为更小的、更容易管理的步骤,反思过去的经验,并根据新的信息不断调整计划。

ReAct

推理(reasoning/think)和行动(acting/act)的拼接。

ReAct是一个简单的让LLM在decode后续token之前添加“让我们一步一步想”的prompt方法。因此这回故里在decode后面token的时候生产一个计划而不是最终的方案,模型鼓励奖问题分解为子任务。->最后的结论更准确。

Observe: Integrating Feedback to Reflect and Adapt

为了反馈/调整整合feedback

observation是agent认知其行为后果的方式。observation为agent的思维过程提供能量,并且直到其未来的行为。他们是来自环境的、知道下一轮思维循环的信号,这些信号可能是来自API的数据、错误消息或者系统日志。

在观察环节,agent要做:

  • Collects Feedback:接收数据或确认其操作成功(或不成功)。
  • Appends Results:将新信息整合到现有环境中,有效地更新记忆。
  • Adapts its Strategy:使用这个更新的上下文来完善后续的想法和行动。

🌰:如果一个天气API返回的是“部分多云、15℃、60%湿度”的数据,observation就是把这部分数据添加到agent的内存里(在prompt的末尾)。接着,agent会据此决定是否需要额外信息或者已经准备好提供最终答案了。

->确保代理与目标保持动态一致,根据现实世界的结果不断学习和调整。(没跑偏,不钻牛角尖)

observation的种类有很多种类:

如何整合结果:

在执行操作后,依次进行:

  1. 解析操作以确定要调用的函数和要使用的参数。
  2. 执行动作。
  3. 将结果追加为Observation。

Dummy Agent Library

https://huggingface.co/agents-course/notebooks/blob/main/unit1/dummy_agent_library.ipynb

参考⬆️

看起来很像在教我写prompt

使用smolagnets创建我们的第一个agent

smolagents是一个为我们提供简单构建自己的agent的framework的library。这是一个轻量级的library,让我们能专注于设计agent的行为。

https://github.com/huggingface/smolagents

这里举的例子是让agent调用图像生成工具,生成猫图

http://www.dtcms.com/a/271608.html

相关文章:

  • Pycharm 报错 Environment location directory is not empty 如何解决
  • Vue2开发:使用vuedraggable实现菜单栏拖拽
  • 什么是AI Agent同步调用工具和异步调用工具?
  • python实践思路(草拟计划+方法)
  • 力扣-240.搜索二维矩阵 II
  • 【C#】PanelControl与Panel
  • 【RidgeUI AI+系列】猜密码游戏
  • miniconda 初始化 base 环境
  • 洛谷 P2880 [USACO07JAN] Balanced Lineup G-普及/提高-
  • 图神经网络 gnn 应用到道路网络拓扑结构与交通碳排放相关性。,拓扑指标量化、时空关联模型及演化机制分析
  • NVIDIA显卡驱动安装失败的解决办法(例如7-zip data error或脚本错误)
  • 数据库技术体系及场景选型方案
  • Linux操作系统之进程间通信:管道概念
  • 双立柱式带锯床cad【1张总图】+设计说明书+绛重
  • 软件发布的完整流程梳理
  • RIP和静态路由结合实验:高可用及高可靠
  • Java -- 异常--以及处理
  • 图像自动化处理初探:从拖拽上传到参数设置
  • 智能Agent场景实战指南 Day 7:智能客服Agent设计与实现
  • 继承与多态:面向对象编程的两大支柱
  • 多线程(2)
  • 1、专栏介绍以及目录
  • Vue3常用指令
  • 可转债应该在什么价卖出?
  • 01-elasticsearch-搭个简单的window服务-ik分词器-简单使用
  • RAGFlow 与 QAnything 智能切片对比:深度解析与优劣考量
  • LeetCode热题100—— 152. 乘积最大子数组
  • ServBay Windows 1.2.0 更新!新增 PHP 设置与 Ollama 支持
  • 一个基于若依(ruoyi-vue3)的小项目部署记录
  • c++11新标准、STL