# 第 12 章：异常处理和恢复

要使 AI 智能体在各种现实世界环境中可靠运行，它们必须能够管理不可预见的情况、错误和故障。正如人类能够适应意外障碍一样，智能体也需要强大的系统来检测问题、启动恢复程序，或至少确保受控失败。这一基本需求构成了异常处理和恢复模式的基础。

此模式专注于开发极其耐用且有弹性的智能体，即使面临各种困难和异常情况，也能保持不间断的功能和操作完整性。它强调主动准备和响应策略的重要性，以确保在面临挑战时也能持续运行。这种适应性对于智能体在复杂和不可预测的环境中成功运作至关重要，最终提升其整体有效性和可信度。

处理意外事件的能力确保这些 AI 系统不仅智能，而且稳定可靠，从而增强对其部署和性能的信心。集成全面的监控和诊断工具进一步强化了智能体快速识别和解决问题的能力，防止潜在中断并确保在不断变化的条件下更顺畅地运行。这些先进系统对于维护 AI 操作的完整性和效率至关重要，增强了其管理复杂性和不可预测性的能力。

此模式有时可能与反思模式结合使用。例如，如果初始尝试失败并引发异常，反思过程可以分析失败原因，并使用改进的方法（如优化提示词）重新尝试任务，以解决错误。

## 异常处理和恢复模式概述

异常处理和恢复模式解决了 AI 智能体应对操作失败的需求。此模式涉及预测潜在问题，例如工具错误或服务不可用，并制定相应的缓解策略。这些策略可能包括错误日志记录、重试机制、回退方案、优雅降级和通知机制。此外，该模式强调恢复机制，如状态回滚、诊断分析、自我纠正和问题升级，以将智能体恢复到稳定运行状态。实施此模式增强了 AI 智能体的可靠性和鲁棒性，使它们能够在不可预测的环境中有效运作。实际应用示例包括管理数据库错误的聊天机器人、处理金融错误的交易机器人以及解决设备故障的智能家居智能体。该模式确保智能体在遇到失败时能够继续有效运行。

![](../images/chapter-12/image1.png)

图 1：AI 智能体异常处理和恢复的关键组件

**错误检测**：这涉及仔细识别出现的操作问题。这可能表现为无效或格式错误的工具输出、特定的 API 错误（如 404（未找到）或 500（内部服务器错误）代码）、来自服务或 API 的异常长响应时间，或偏离预期格式的不连贯和无意义响应。此外，可以实施其他智能体或专门监控系统的监控，以实现更主动的异常检测，使系统能够在潜在问题升级之前捕获它们。

**错误处理**：一旦检测到错误，就需要一个经过深思熟虑的响应计划。这包括在日志中仔细记录错误详细信息，以便后续调试和分析（日志记录）。重试操作或请求（有时使用略微调整的参数）可能是一种可行的策略，特别是对于瞬态错误（重试）。使用替代策略或方法（回退）可以确保维持某些功能。在无法立即完全恢复的情况下，智能体可以维持部分功能以至少提供一些价值（优雅降级）。最后，向人类操作员或其他智能体发送警报可能对需要人工干预或协作的情况至关重要（通知）。

**恢复**：这个阶段是关于在错误后将智能体或系统恢复到稳定和可操作的状态。它可能涉及撤销最近的更改或事务以撤消错误的影响（状态回滚）。对错误原因进行彻底调查对于防止复发至关重要。通过自我纠正机制或重新规划过程调整智能体的计划、逻辑或参数可能需要避免将来出现相同的错误。在复杂或严重的情况下，将问题委托给人类操作员或更高级别的系统（升级）可能是最佳行动方案。

实施这种强大的异常处理和恢复模式可以将 AI 智能体从脆弱和不可靠的系统转变为能够在具有挑战性和高度不可预测的环境中有效且有弹性运行的强大、可靠组件。这确保了智能体保持功能、最小化停机时间，并在面临意外问题时提供无缝和可靠的体验。

## 实际应用和用例

异常处理和恢复对于在无法保证完美条件的现实场景中部署的任何智能体都至关重要。

* **客户服务聊天机器人**：如果聊天机器人尝试访问客户数据库而数据库暂时停机，它不应该崩溃。相反，它应该检测 API 错误，通知用户临时问题，可能建议稍后再试，或将查询升级给人类智能体。
* **自动金融交易**：尝试执行交易的交易机器人可能会遇到"资金不足"错误或"市场关闭"错误。它需要通过记录错误、避免重复尝试相同的无效交易以及可能通知用户或调整策略来处理这些异常。
* **智能家居自动化**：控制智能灯的智能体由于网络问题或设备故障而无法打开灯。它应该检测到这个失败，可能重试，如果仍然不成功，通知用户无法打开灯并建议手动干预。
* **数据处理智能体**：负责处理一批文档的智能体会遇到损坏的文件。它应该跳过损坏的文件，记录错误，继续处理其他文件，并在结束时报告跳过的文件，而不是停止整个过程。
* **网络爬虫智能体**：当网络爬虫智能体验证码、网站结构更改或服务器错误（例如，404 未找到、503 服务不可用）时，它需要优雅地处理这些问题。这可能涉及暂停、使用代理或报告失败的特定 URL。
* **机器人和制造**：执行装配任务的机器人手臂可能由于未对齐而无法拾取组件。它需要检测到这个失败（例如，通过传感器反馈），尝试重新调整，重试拾取，如果持续存在，则警告人类操作员或切换到不同的组件。

简而言之，此模式对于构建不仅智能而且在面对现实世界复杂性时可靠、有弹性且用户友好的智能体非常重要。

## 实践代码示例（ADK）

异常处理和恢复对于系统的鲁棒性和可靠性至关重要。例如，考虑智能体对失败的工具调用的响应。这种失败可能源于不正确的工具输入或工具所依赖的外部服务的问题。

```python
from google.adk.agents import Agent, SequentialAgent

## 智能体尝试主要工具。它的重点狭窄而明确。
primary_handler = Agent(
   name="primary_handler",
   model="gemini-2.0-flash-exp",
   instruction="""
您的工作是获取精确的位置信息。
使用用户提供的地址调用 get_precise_location_info 工具。
   """,
   tools=[get_precise_location_info]
)

## 智能体充当回退处理器，检查状态以决定其操作。
fallback_handler = Agent(
   name="fallback_handler",
   model="gemini-2.0-flash-exp",
   instruction="""
通过查看 state["primary_location_failed"] 来检查主要位置查找是否失败。
- 如果为 True，从用户的原始查询中提取城市并使用 get_general_area_info 工具。
- 如果为 False，什么也不做。
   """,
   tools=[get_general_area_info]
)

## 智能体从状态中呈现最终结果。
response_agent = Agent(
   name="response_agent",
   model="gemini-2.0-flash-exp",
   instruction="""
查看存储在 state["location_result"] 中的位置信息。
向用户清晰简洁地呈现此信息。
如果 state["location_result"] 不存在或为空，请道歉您无法检索位置。
   """,
   tools=[]  # 此智能体根据最终状态进行推理。
)

## SequentialAgent 确保处理器按保证的顺序运行。
robust_location_agent = SequentialAgent(
   name="robust_location_agent",
   sub_agents=[primary_handler, fallback_handler, response_agent]
)
```

此代码使用 ADK 的 SequentialAgent 和三个子智能体定义了一个强大的位置检索系统。primary_handler 是第一个智能体，尝试使用 get_precise_location_info 工具获取精确的位置信息。fallback_handler 充当备份，通过检查状态变量来检查主要查找是否失败。如果主要查找失败，回退智能体从用户的查询中提取城市并使用 get_general_area_info 工具。response_agent 是序列中的最终智能体。它查看存储在状态中的位置信息。此智能体旨在向用户呈现最终结果。如果没有找到位置信息，它会道歉。SequentialAgent 确保这三个智能体按预定义的顺序执行。这种结构允许采用分层方法进行位置信息检索。

## 速览

**问题背景：** 在现实世界环境中运行的 AI 智能体不可避免地会遇到不可预见的情况、错误和系统故障。这些中断可能从工具故障、网络问题到无效数据不等，威胁着智能体完成任务的能力。如果没有结构化的方法来管理这些问题，智能体可能会变得脆弱、不可靠，并且在面对意外障碍时容易完全失败。这种不可靠性使得难以在一致性能至关重要的关键或复杂应用程序中部署它们。

**解决方案：** 异常处理和恢复模式为构建强大和有弹性的 AI 智能体提供了标准化的解决方案。它为它们配备了预测、管理和从操作失败中恢复的智能体能力。此模式涉及主动错误检测，例如监控工具输出和 API 响应，以及响应处理策略，如用于诊断的日志记录、重试瞬态故障或使用回退机制。对于更严重的问题，它定义了恢复协议，包括恢复到稳定状态、通过调整其计划进行自我纠正或将问题升级给人类操作员。这种系统方法确保智能体保持操作完整性，从失败中学习，并在不可预测的环境中可靠地运作。

**实践建议：** 对于在动态的现实世界环境中部署的任何 AI 智能体，当系统故障、工具错误、网络问题或不可预测的输入可能发生且操作可靠性是关键要求时，使用此模式。

**可视化摘要**

![](../images/chapter-12/image2.png)

图 2：异常处理模式

## 关键要点

需要记住的要点：

* 异常处理和恢复对于构建强大和可靠的智能体非常重要。
* 此模式涉及检测错误、优雅地处理错误以及实施恢复策略。
* 错误检测可能涉及验证工具输出、检查 API 错误代码以及使用超时。
* 处理策略包括日志记录、重试、回退、优雅降级和通知。
* 恢复侧重于通过诊断、自我纠正或升级恢复稳定运行。
* 此模式确保智能体在不可预测的现实世界环境中也能有效运行。

## 结论

本章探讨了异常处理和恢复模式，这对于开发强大和可靠的 AI 智能体非常重要。此模式解决了 AI 智能体如何识别和管理意外问题、实施适当的响应以及恢复到稳定操作状态的需求。本章讨论了此模式的各个方面，包括错误的检测、通过日志记录、重试和回退等机制处理这些错误，以及用于将智能体或系统恢复到正常功能的策略。异常处理和恢复模式的实际应用在多个领域中得到说明，展示了其在处理现实世界复杂性和潜在失败方面的相关性。这些应用展示了为 AI 智能体配备异常处理能力如何有助于它们在动态环境中的可靠性和适应性。

## 参考文献

1. McConnell, S. (2004). *Code Complete (2nd ed.)*. Microsoft Press.
2. Shi, Y., Pei, H., Feng, L., Zhang, Y., & Yao, D. (2024). *Towards Fault Tolerance in Multi-Agent Reinforcement Learning*. arXiv preprint arXiv:2412.00534.
3. O'Neill, V. (2022). *Improving Fault Tolerance and Reliability of Heterogeneous Multi-Agent IoT Systems Using Intelligence Transfer*. Electronics, 11(17), 2724.