行动:使 Agent 能够与其环境进行交互

行动(Action)是 AI Agent 与其环境进行交互所采取的具体步骤。

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

比如协助客户服务的 Agent 可能检索客户数据、提供支持文章,或者将问题转给人工代表。


1. Agent 行动的类型

有多种类型的 Agent,它们采取不同的行动:

Agent 类型描述
JSON Agent用 JSON 格式指定采取的行动。
Code Agent该 Agent 编写由外部解释的代码块。
Function-calling Agent它是 JSON Agent 的一个子分类,被微调为每个行动生成一个新消息。

行动本身可以服务多种目的:

Action 类型描述
信息收集执行网站搜索、查询数据库,或者检索文档。
工具使用发起 API 调用。
环境交互操作数字接口,或者控制物理设备。
通信通过聊天与用户交互,或者与其它 Agent 协作。

Agent 的一个关键部分是在行动完成时停止生成新 Token 的能力,这适用于所有格式的 Agent:JSON、代码或函数调用。这可以防止意外的输出,并且确保 Agent 的响应清晰、精确。

LLM 只处理文本,并且用其描述它想要采取的行动和提供给工具的参数。


2. 停止和解析方式

实现行动的一种关键方法是停止和解析方式(stop and parse approach)。该方法确保 Agent 的输出是结构化的和可预测的:

  1. 以结构化格式生成:

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

  1. 停止进一步生成:

行动完成后,Agent 停止生成额外的 Token。这样可以防止额外的或错误的输出。

  1. 解析输出:

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

比如需要查看天气的 Agent 可能输出:

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

然后,框架可以很容易地解析要调用的函数的名字和要应用的参数。

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

注意:函数调用 Agent 的操作与此类似,其通过结构化每个行动的方式,使用正确的参数调用指定的函数。


3. Code Agent

另一种方式是使用 Code Agent。其思想是:Code Agent 生成可执行代码块 - 通常使用 Python 这样的高级语言,而非输出简单的 JSON 对象

该方式有以下几个优点:

  1. 可表达性:代码天然地可以表示复杂的逻辑,包括循环、条件和嵌套函数,比 JSON 更灵活。
  1. 模块化和可重用性:生成的代码可以包含可跨不同行动或任务重用的函数和模块。
  1. 增强的可调试性:使用定义良好的编程语法,代码错误通常更容易检测和纠正。
  1. 直接集成:Code Agent 可以直接与外部库和 API 集成,支持更复杂的操作,比如数据处理或实时决策。

比如负责获取天气的 Code Agent 可能生成以下 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)

在该示例中,Code Agent:

该方法通过明确地划分代码块,并且在执行完成时发出信号(在这里是打印 final_answer)的方式,遵循停止和解析方式


4. 总结

行动通过执行清晰的、结构化的任务(无论是通过 JSON、代码还是函数调用)的方式,桥接 Agent 的内部推理及其现实世界交互。

这种深思熟虑的执行确保每个行动都是精确的,并且可以通过停止和解析方式进行外部处理。