行动:使 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 的输出是结构化的和可预测的:
- 以结构化格式生成:
Agent 以清晰的、预定的格式(JSON 或代码)输出预期的行动。
- 停止进一步生成:
行动完成后,Agent 停止生成额外的 Token。这样可以防止额外的或错误的输出。
- 解析输出:
外部解析器读取格式化的行动,确定调用哪个工具,并且提取所需的参数。
比如需要查看天气的 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 对象。

该方式有以下几个优点:
- 可表达性:代码天然地可以表示复杂的逻辑,包括循环、条件和嵌套函数,比 JSON 更灵活。
- 模块化和可重用性:生成的代码可以包含可跨不同行动或任务重用的函数和模块。
- 增强的可调试性:使用定义良好的编程语法,代码错误通常更容易检测和纠正。
- 直接集成: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:
- 通过 API 调用,检索天气数据,
- 处理响应,
- 使用 print() 函数输出最终答案。
该方法通过明确地划分代码块,并且在执行完成时发出信号(在这里是打印 final_answer)的方式,遵循停止和解析方式。
4. 总结
行动通过执行清晰的、结构化的任务(无论是通过 JSON、代码还是函数调用)的方式,桥接 Agent 的内部推理及其现实世界交互。
这种深思熟虑的执行确保每个行动都是精确的,并且可以通过停止和解析方式进行外部处理。