智能体课程文档

行动:使智能体与其环境互动

Hugging Face's logo
加入 Hugging Face 社区

并获得增强的文档体验

开始使用

行动:使智能体与其环境互动

在本节中,我们将探讨 AI 智能体与环境交互的具体步骤。

我们将介绍如何表示行动(使用 JSON 或代码)、停止和解析方法的重要性,并介绍不同类型的智能体。

行动是 AI 智能体与环境互动的具体步骤。

无论是浏览网页获取信息还是控制物理设备,每个行动都是智能体执行的经过深思熟虑的操作。

例如,一个协助客户服务的智能体可能会检索客户数据、提供支持文章或将问题转交给人为代表。

智能体行动的类型

智能体有多种类型,其行动方式各不相同

智能体类型 描述
JSON 智能体 要执行的行动以 JSON 格式指定。
代码智能体 智能体编写一个由外部解释的代码块。
函数调用智能体 它是 JSON 智能体的一个子类别,经过微调以针对每个行动生成新消息。

行动本身可以有多种目的

行动类型 描述
信息收集 执行网页搜索、查询数据库或检索文档。
工具使用 进行 API 调用、运行计算和执行代码。
环境交互 操作数字接口或控制物理设备。
通信 通过聊天与用户互动或与其他智能体协作。

LLM 只处理文本,并用它来描述它想要采取的行动以及提供给工具的参数。为了使智能体正常工作,LLM 必须在发出所有定义完整行动的令牌后停止生成新令牌。这将控制权从 LLM 返回给智能体,并确保结果可解析——无论预期格式是 JSON、代码还是函数调用。

停止和解析方法

实现行动的一个关键方法是停止和解析方法。此方法确保智能体的输出是结构化的且可预测的。

  1. 以结构化格式生成:

智能体以清晰、预定的格式(JSON 或代码)输出其预期的行动。

  1. 停止进一步生成:

一旦定义行动的文本发出,LLM 就会停止生成额外的令牌。这可以防止额外或错误的输出。

  1. 解析输出:

外部解析器读取格式化的行动,确定要调用的工具,并提取所需的参数。

例如,需要检查天气的智能体可能会输出

Thought: I need to check the current weather for New York.
Action :
{
  "action": "get_weather",
  "action_input": {"location": "New York"}
}

然后,该框架可以轻松解析要调用的函数的名称和要应用的参数。

这种清晰、机器可读的格式最大限度地减少了错误,并使外部工具能够准确处理智能体的命令。

注意:函数调用智能体通过结构化每个行动以调用具有正确参数的指定函数,从而以类似的方式运行。我们将在未来的单元中深入探讨这些类型的智能体。

代码智能体

另一种方法是使用代码智能体。其思想是:代码智能体不输出简单的 JSON 对象,而是生成可执行的代码块——通常是 Python 等高级语言

Code Agents

这种方法有几个优点

  • 表达力: 代码可以自然地表示复杂的逻辑,包括循环、条件和嵌套函数,提供比 JSON 更大的灵活性。
  • 模块化和可重用性: 生成的代码可以包含在不同行动或任务中可重用的函数和模块。
  • 增强可调试性: 借助定义良好的编程语法,代码错误通常更容易检测和纠正。
  • 直接集成: 代码智能体可以直接与外部库和 API 集成,从而实现更复杂的操作,例如数据处理或实时决策。

您必须记住,执行 LLM 生成的代码可能会带来安全风险,从提示注入到有害代码的执行。这就是为什么建议使用集成默认安全措施的 AI 智能体框架,例如smolagents。如果您想了解更多关于风险以及如何缓解它们的信息,请查看此专用部分

例如,一个负责获取天气的代码智能体可能会生成以下 Python 代码片段

# Code Agent Example: Retrieve Weather Information
def get_weather(city):
    import requests
    api_url = f"https://api.weather.com/v1/location/{city}?apiKey=YOUR_API_KEY"
    response = requests.get(api_url)
    if response.status_code == 200:
        data = response.json()
        return data.get("weather", "No weather information available")
    else:
        return "Error: Unable to fetch weather data."

# Execute the function and prepare the final answer
result = get_weather("New York")
final_answer = f"The current weather in New York is: {result}"
print(final_answer)

在此示例中,代码智能体

  • 通过 API 调用检索天气数据,
  • 处理响应,
  • 并使用 print() 函数输出最终答案。

此方法也遵循停止和解析方法,通过清晰地分隔代码块并发出执行完成的信号(此处通过打印 final_answer)。


我们了解到,行动通过执行清晰、结构化的任务——无论是通过 JSON、代码还是函数调用——将智能体的内部推理与其现实世界互动连接起来。

这种深思熟虑的执行确保每个行动都是精确的,并通过停止和解析方法为外部处理做好准备。在下一节中,我们将探索观察,以了解智能体如何捕获和整合来自其环境的反馈。

之后,我们将最终准备好构建我们的第一个智能体!

< > 在 GitHub 上更新