AI Agent 工作原理
前面我们已经介绍了 AI Agent 的基本概念和核心组件。接下来看看这些组件是如何协同工作的,以及如何使用 Python 实现一个简单的 Agent。
传统的大语言模型(LLM)主要根据输入的上下文生成回答。如果没有连接外部工具,它通常无法直接读取本地文件、查询实时数据或操作其他软件。
AI Agent 则在模型基础上结合工具调用、任务状态管理和执行控制,使程序能够根据目标执行多个操作步骤,并利用执行结果决定下一步做什么。
例如,用户提出"读取 Excel 文件,统计销售额并生成图表"。Agent 可以读取文件、调用 Python 处理数据、生成图表,最后将结果保存到指定目录。
AI Agent 的关键在于:模型负责决策,工具负责执行,程序根据执行反馈持续推进任务。
AI Agent 的基本组成
一个典型的 LLM Agent 通常包含模型、工具和任务状态管理等部分。
| 组成部分 | 主要作用 |
|---|---|
| 模型(LLM) | 理解任务、分析上下文,决定下一步操作。 |
| 工具(Tools) | 执行文件操作、搜索、计算和 API 调用。 |
| 状态与记忆(State / Memory) | 记录任务进度、对话历史和工具执行结果。 |
| 执行控制(Agent Runtime) | 调度工具、处理错误、控制循环和终止任务。 |
其中,模型通常负责生成决策,工具负责与外部环境交互,执行程序则负责组织整个任务流程。
对于简单任务,Agent 可能不需要复杂的规划系统或长期记忆;对于多步骤任务,则需要保存任务状态,以便根据执行结果继续工作。

AI Agent 的类型
Agent 并不都是通过大语言模型实现的。在人工智能研究中,智能体可以根据决策机制和系统架构分为不同类型。
| Agent 类型 | 主要特点 | 应用场景 |
|---|---|---|
| 反应式 Agent(Reactive Agent) | 根据当前输入或环境状态作出响应 | 规则控制、简单游戏 AI |
| 目标导向 Agent(Goal-based Agent) | 根据目标选择能够推进任务的操作 | 任务规划、自动化工作流 |
| 效用型 Agent(Utility-based Agent) | 通过效用函数比较不同操作的预期效果 | 路径规划、资源优化 |
| 学习型 Agent(Learning Agent) | 通过学习机制改进决策策略 | 强化学习、智能控制 |
| 多智能体系统(Multi-Agent) | 由多个 Agent 协作完成任务 | 软件开发、复杂任务协作 |
上述类型并不完全互斥。例如,一个目标导向 Agent 也可以具有学习能力,多智能体系统中的每个 Agent 也可以采用不同的决策机制。
目前常见的 LLM Agent,通常围绕用户目标,利用大语言模型选择工具、处理反馈并执行任务。
AI Agent 的执行流程
理解 Agent 工作原理,最重要的是理解它的执行循环(Agent Loop)。
一种常见的实现方式是 ReAct(Reasoning and Acting),即将推理和行动结合起来。
Agent 不一定一次完成所有决策,而是可以根据工具执行结果,持续判断下一步应该做什么。
基本过程如下:
用户输入任务
↓
模型分析当前任务
↓
选择工具并生成参数
↓
执行程序调用工具
↓
获取工具返回结果
↓
模型判断任务是否完成
├── 未完成:继续调用工具
└── 已完成:输出最终结果
例如,用户要求"查找某个 Python 库的最新版本,并生成安装命令"。
- Agent 判断需要查询软件包版本。
- 调用软件包信息查询工具。
- 获取版本号和相关信息。
- 根据查询结果生成安装命令。
- 检查结果是否满足要求,然后向用户返回。
如果查询失败,Agent 可以根据错误信息重试,也可以选择停止任务并报告失败原因。
需要注意,ReAct 只是 Agent 的一种执行模式。实际系统也可以使用预定义工作流、任务规划器或其他编排机制。
一次完整的工具调用过程
假设用户提出以下任务:
帮我计算商品总价,单价 89 元,购买 6 件,再减去 30 元优惠券。
Agent 可以按照下面的方式处理:
第一步:理解任务
模型识别出单价、数量和优惠金额,判断需要执行数值计算。
第二步:选择工具
假设系统提供了名为 calculate_total 的计算工具,模型可以生成以下参数:
{
"price": 89,
"quantity": 6,
"discount": 30
}
第三步:执行工具
Agent 的执行程序接收参数,调用实际的 Python 函数:
def calculate_total(price, quantity, discount):
return price * quantity - discount
第四步:获取结果
工具返回:
504
第五步:生成回答
模型根据工具返回的结果,向用户说明:
商品总价为 89 × 6 = 534 元,减去 30 元优惠券后,实际需要支付 504 元。
这个过程展示了 Agent 中模型与工具的分工:模型负责理解任务和选择操作,执行程序调用函数,工具计算结果,最后再由模型整理回答。
Python 中实现 AI Agent
下面使用 Python 实现一个简单的 Agent 工作流程。
为了方便初学者理解,我们先使用普通 Python 函数分别模拟感知、决策、行动和记忆模块,再将它们组合成一个可以运行的程序。
注意:下面的基础示例使用关键词匹配进行决策,没有连接真正的大语言模型,因此属于 Agent 工作流程的教学模拟,而不是完整的 LLM Agent。

1、感知模块
感知模块负责获取外部输入。
在命令行程序中,最简单的感知方式就是使用 Python 的 input() 函数读取用户输入。
实例
def perceive():
user_input = input("请输入指令:")
return user_input.strip()
# 获取用户输入
message = perceive()
print("收到指令:", message)
执行程序后,假设输入:
请输入指令:计算 10 + 5 收到指令: 计算 10 + 5
这里的感知模块只处理文本输入。对于其他 Agent,还可以通过 API 获取数据、读取文件或者使用多模态模型处理图片和音频。
2、决策模块
决策模块负责分析输入,决定执行什么操作。
真实的 LLM Agent 通常利用模型进行任务理解和工具选择。这里先通过关键词判断模拟这一过程。
实例
def make_decision(message):
message = message.strip()
if message.lower() in ("退出", "exit", "quit"):
return "exit"
if "天气" in message:
return "weather"
if "计算" in message:
return "calculator"
return "chat"
# 测试决策模块
message = "帮我计算 10 + 5"
decision = make_decision(message)
print("决策结果:", decision)
执行结果:
决策结果: calculator
该示例只负责识别任务类型,并没有理解完整的数学表达式。
在实际 Agent 系统中,模型可以根据工具说明和用户指令,生成更具体的操作参数。
3、工具与行动模块
行动模块负责执行决策模块选择的操作。
工具可以是普通 Python 函数,也可以是外部 API、数据库接口或代码执行环境。
下面定义一个简单的计算器工具,支持加、减、乘、除运算。
实例
def calculator(a, b, operator):
if operator == "+":
return a + b
if operator == "-":
return a - b
if operator == "*":
return a * b
if operator == "/":
if b == 0:
raise ValueError("除数不能为 0")
return a / b
raise ValueError("不支持的运算符")
# 调用工具
result = calculator(3, 5, "*")
print("计算结果:", result)
执行结果:
计算结果: 15
在这个例子中,calculator() 就是一个工具。Agent 可以根据任务需要调用它,并使用其返回结果。
相比直接使用 eval(),这种明确指定运算符的方式更容易限制允许执行的操作。
对于更复杂的计算器,可以使用 Python 的 ast 模块解析受限制的数学表达式,但不应该直接使用 eval() 执行不可信的用户输入。
4、记忆模块
记忆模块用于保存对话历史、任务状态以及工具调用结果。
对于简单的命令行 Agent,可以使用 Python 列表保存当前会话内容。
实例
history = []
def save_message(role, content):
history.append({
"role": role,
"content": content
})
# 模拟用户与 Agent 的对话
save_message("user", "计算 3 + 5")
save_message("assistant", "计算结果:8")
save_message("user", "再乘以 2")
save_message("assistant", "计算结果:16")
# 查看历史记录
for item in history:
print(item["role"], ":", item["content"])
执行结果:
user : 计算 3 + 5 assistant : 计算结果:8 user : 再乘以 2 assistant : 计算结果:16
这里的历史记录是预先写入的示例数据,仅用于演示保存方式,并不表示程序已经能够理解"再乘以 2"这样的上下文指令。
如果需要让 Agent 真正利用对话历史作出决策,可以将相关历史信息传递给模型,或者在执行程序中维护明确的任务状态。
对于需要跨会话保存的数据,可以进一步使用 SQLite、Redis 或其他数据库。
实践练习:创建一个简单的命令行 Agent
前面分别实现了输入读取、任务判断、工具执行和历史记录。接下来将这些功能组合成一个可以持续运行的命令行程序。
这个程序包含以下功能:
- 支持连续输入指令。
- 根据关键词选择天气或计算工具。
- 支持加、减、乘、除运算。
- 记录本次会话历史。
- 输入"退出"后结束程序。
为了方便测试,天气查询使用固定的模拟数据,不会调用真实的天气 API。
计算器使用正则表达式解析简单算式,不执行任意 Python 代码。
实例
# 模拟天气数据
WEATHER_DATA = {
"北京": "晴,25℃",
"上海": "多云,23℃",
"广州": "小雨,28℃",
"深圳": "晴,29℃"
}
# 短期记忆:保存对话历史
history = []
# 感知模块:读取输入
def perceive():
return input("您:").strip()
# 决策模块:识别任务类型
def make_decision(message):
if message.lower() in ("退出", "exit", "quit"):
return "exit"
if "天气" in message:
return "weather"
if "计算" in message or re.search(
r"\d\s*[\+\-\*/]\s*\d", message
):
return "calculator"
return "chat"
# 天气工具:返回模拟数据
def get_weather(message):
for city, weather in WEATHER_DATA.items():
if city in message:
return f"{city}天气:{weather}(模拟数据)"
return "请输入北京、上海、广州或深圳进行查询。"
# 计算器工具
def calculator(message):
# 只识别两个数字组成的简单算式
pattern = (
r"(-?\d+(?:\.\d+)?)"
r"\s*([\+\-\*/])\s*"
r"(-?\d+(?:\.\d+)?)"
)
match = re.search(pattern, message)
if not match:
return "请输入算式,例如:计算 10 + 5"
a = float(match.group(1))
op = match.group(2)
b = float(match.group(3))
if op == "+":
result = a + b
elif op == "-":
result = a - b
elif op == "*":
result = a * b
elif op == "/":
if b == 0:
return "计算错误:除数不能为 0"
result = a / b
else:
return "不支持的运算符"
return f"计算结果:{result:g}"
# 行动模块:调用对应工具
def execute_action(decision, message):
if decision == "weather":
return get_weather(message)
if decision == "calculator":
return calculator(message)
return "暂时无法处理该指令,请尝试天气查询或计算。"
# 保存对话历史
def save_history(role, content):
history.append({
"role": role,
"content": content
})
# Agent 主循环
def run_agent():
print("简单 Agent 已启动")
print("支持天气查询、算术计算")
print("输入"退出"结束程序\n")
while True:
try:
message = perceive()
except (EOFError, KeyboardInterrupt):
print("\n程序已结束")
break
if not message:
continue
# 识别任务
decision = make_decision(message)
if decision == "exit":
print("Agent:再见!")
break
# 保存用户输入
save_history("user", message)
# 执行操作
response = execute_action(decision, message)
# 输出结果
print("Agent:", response)
# 保存 Agent 回复
save_history("assistant", response)
# 显示本次对话历史
print("\n本次对话历史:")
for item in history:
print(f"{item['role']}:{item['content']}")
if __name__ == "__main__":
run_agent()
将以上代码保存为 simple_agent.py,然后在终端执行:
python simple_agent.py
也可以使用:
python3 simple_agent.py
程序运行示例:
简单 Agent 已启动 支持天气查询、算术计算 输入“退出”结束程序 您:北京天气 Agent: 北京天气:晴,25℃(模拟数据) 您:计算 10 + 5 Agent: 计算结果:15 您:计算 20 / 4 Agent: 计算结果:5 您:退出 Agent:再见! 本次对话历史: user:北京天气 assistant:北京天气:晴,25℃(模拟数据) user:计算 10 + 5 assistant:计算结果:15 user:计算 20 / 4 assistant:计算结果:5
程序说明:
perceive():读取用户输入。make_decision():根据输入识别任务类型。get_weather():返回预先定义的模拟天气数据。calculator():解析并执行简单算术运算。execute_action():根据决策调用对应工具。save_history():保存用户消息和程序回复。run_agent():负责组织整个执行循环。
这个程序不依赖第三方 Python 库,使用 Python 3 即可运行。
需要注意,程序的决策逻辑仍然是固定的关键词匹配,因此无法像真正的大语言模型一样理解复杂语义,也不会根据历史对话自动进行多步骤推理。
它的主要目的是展示 Agent 中输入、决策、工具调用、状态保存和执行循环之间的关系。
如何将它升级为真正的 LLM Agent?
上面的程序已经具备基本的执行框架,但最重要的决策模块仍由固定规则实现。
如果要让程序具备大语言模型驱动的任务理解与工具选择能力,可以将关键词匹配替换为 LLM 的工具调用机制。
基本步骤如下:
- 选择一个支持工具调用的大语言模型。
- 定义可以调用的工具及参数。
- 将用户任务和工具定义发送给模型。
- 读取模型返回的工具调用请求。
- 验证参数并执行对应的 Python 函数。
- 将工具结果返回给模型,继续下一轮处理。
- 任务完成后,输出最终结果。
例如,在基础示例中,工具选择是通过以下代码完成的:
if "天气" in message:
return "weather"
如果接入支持 Function Calling 的大语言模型,就可以让模型根据用户指令及工具说明,判断是否需要调用 get_weather,并生成相关参数。
这样就不再需要为每一种自然语言表达单独编写关键词判断规则。
不过,实际开发仍需要限制工具权限、验证参数、处理调用错误,并设置执行次数和运行时间限制。
常见开发方式
开发 LLM Agent 时,可以选择直接调用模型 API,也可以使用 Agent 开发框架。
| 开发方式 | 特点 | 适用场景 |
|---|---|---|
| 原生 Python + LLM API | 自己实现工具调用和执行循环 | 学习原理、简单 Agent |
| LangChain / LangGraph | 提供工具集成、状态管理和工作流编排能力 | 多步骤 Agent、复杂业务流程 |
| LlamaIndex | 提供数据连接、检索和 Agent 相关组件 | 知识库、文档处理、数据检索 |
| Microsoft Agent Framework | 提供 Agent 与多 Agent 工作流开发能力 | 企业应用、Agent 协作 |
对于初学者,建议先理解 Python 函数调用、JSON 数据、API 请求和任务循环,再逐步学习框架。
这样更容易理解 Agent 的实际执行过程,也方便排查工具调用失败、状态管理错误等问题。
总结
AI Agent 的工作原理可以概括为:接收任务、分析任务、选择工具、执行操作、读取反馈,并根据结果决定是否继续执行。
一个典型的 LLM Agent 通常包含以下几个关键部分:
- 大语言模型:理解任务并生成决策。
- 工具:执行具体操作并返回结果。
- 状态与记忆:保存任务上下文和执行进度。
- 执行循环:组织模型调用、工具执行和结果检查。
本文通过 Python 实现了一个简单的命令行 Agent 流程模拟,展示了这些模块如何协同工作。
下一步可以尝试连接真正的大语言模型 API,让模型自主选择工具,再逐步加入文件处理、数据库查询和多步骤任务规划等能力。
开发 Agent 时,不仅要关注模型能否正确理解任务,还需要考虑工具执行是否可靠、权限是否合理,以及如何判断任务已经完成。
更多资料可以参考:
