Skip to main content
章节11 min read

第12章:Exception Handling and Recovery

第12章:Exception Handling and Recovery 为了使 AI Agent 能够在多样的、真实的环境中被可靠地部署,它们必须能够管理不可预见的情况、错误和故障。正如人类适应意外的障碍一样,智能 Agent 需要健壮的系统来检测问题、启动恢复程序,或至少确保受控的失败。这一基本需求构成了 Exce...

第12章:Exception Handling and Recovery

为了使 AI Agent 能够在多样的、真实的环境中被可靠地部署,它们必须能够管理不可预见的情况、错误和故障。正如人类适应意外的障碍一样,智能 Agent 需要健壮的系统来检测问题、启动恢复程序,或至少确保受控的失败。这一基本需求构成了 Exception Handling and Recovery(异常处理与恢复)模式的基础。

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

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

此模式有时可以与 Reflection 一起使用。例如,如果初始尝试失败并引发异常,反思过程可以分析失败原因,并用改进的方法(如改进的 Prompt)重新尝试任务,以解决错误。

Exception Handling and Recovery 模式概述

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

图 1:AI Agent 异常处理和恢复的关键组件

错误检测 (Error Detection):这涉及在问题出现时细致地识别操作问题。这可以表现为无效或格式错误的工具输出、特定的 API 错误(如 404 (Not Found) 或 500 (Internal Server Error) 代码)、来自服务或 API 的异常长响应时间,或偏离预期格式的 incoherent and nonsensical responses。此外,可以由其他 Agent 或专门的监控系统实施监控,以实现更主动的异常检测,使系统能够在问题升级之前捕获潜在问题。

错误处理 (Error Handling):一旦检测到错误,一个经过深思熟虑的响应计划是必不可少的。这包括在日志中细致地记录错误详情,以供后续调试和分析(日志记录)。重试操作或请求(有时使用略微调整的参数)可能是一个可行的策略,特别是对于瞬态错误(重试)。利用替代策略或方法(回退)可以确保保持某些功能。在无法立即完全恢复的情况下,Agent 可以保持部分功能以提供至少一些价值(优雅降级)。最后,对于需要人工干预或协作的情况,警告人工操作员或其他 Agent 可能是至关重要的(通知)。

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

实现这种健壮的异常处理和恢复模式可以将 AI Agent 从脆弱和不可靠的系统转变为健壮、可靠的组件,能够在具有挑战性和高度不可预测的环境中有效和有韧性地运行。这确保了 Agent 保持功能,最大限度地减少停机时间,并即使在面对意外问题时也能提供无缝和可靠的体验。

实际应用与用例

Exception Handling and Recovery 对于任何部署在无法保证完美条件的真实场景中的 Agent 都至关重要。

  • 客户服务聊天机器人:如果一个聊天机器人尝试访问客户数据库,而数据库暂时关闭,它不应该崩溃。相反,它应该检测到 API 错误,告知用户暂时的问题,也许建议稍后重试,或将查询升级给人工 Agent。
  • 自动化金融交易:尝试执行交易的交易机器人可能会遇到"资金不足"错误或"市场关闭"错误。它需要通过记录错误、不重复尝试相同的无效交易,并可能通知用户或调整其策略来处理这些异常。
  • 智能家居自动化:控制智能灯的 Agent 可能由于网络问题或设备故障而无法开灯。它应该检测到此故障,也许重试,如果仍然不成功,则通知用户无法打开灯,并建议手动干预。
  • 数据处理 Agent:一个负责处理一批文档的 Agent 可能会遇到损坏的文件。它应该跳过损坏的文件,记录错误,继续处理其他文件,并在最后报告跳过的文件,而不是停止整个过程。
  • 网页抓取 Agent:当网页抓取 Agent 遇到 CAPTCHA、网站结构变更或服务器错误(例如,404 Not Found、503 Service Unavailable)时,它需要优雅地处理这些问题。这可能涉及暂停、使用代理或报告失败的特定 URL。
  • 机器人与制造业:执行装配任务的机械臂可能由于错位而无法拾取组件。它需要检测此故障(例如,通过传感器反馈),尝试重新调整、重试拾取,如果持续存在,则警告人工操作员或切换到不同的组件。

简而言之,此模式对于构建不仅智能,而且在面对真实世界的复杂性时可靠、有韧性且用户友好的 Agent 至关重要。

实践代码示例 (ADK)

Exception Handling and Recovery 对于系统的健壮性和可靠性至关重要。考虑一下 Agent 对失败的工具调用的响应。此类失败可能源于不正确的工具输入或工具所依赖的外部服务的问题。

python
from google.adk.agents import Agent, SequentialAgent # Agent 1: 尝试主工具。其重点狭窄且清晰。 primary_handler = Agent( name="primary_handler", model="gemini-2.0-flash-exp", instruction=""" Your job is to get precise location information. Use the get_precise_location_info tool with the user's provided address. """, tools=[get_precise_location_info] ) # Agent 2: 充当回退处理器,检查状态以决定其行动。 fallback_handler = Agent( name="fallback_handler", model="gemini-2.0-flash-exp", instruction=""" Check if the primary location lookup failed by looking at state["primary_location_failed"]. - If it is True, extract the city from the user's original query and use the get_general_area_info tool. - If it is False, do nothing. """, tools=[get_general_area_info] ) # Agent 3: 从状态中呈现最终结果。 response_agent = Agent( name="response_agent", model="gemini-2.0-flash-exp", instruction=""" Review the location information stored in state["location_result"]. Present this information clearly and concisely to the user. If state["location_result"] does not exist or is empty, apologize that you could not retrieve the location. """, tools=[] # 此 Agent 仅对最终状态进行推理。 ) # SequentialAgent 确保处理器以保证的顺序运行。 robust_location_agent = SequentialAgent( name="robust_location_agent", sub_agents=[primary_handler, fallback_handler, response_agent] )

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

概览

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

为什么:Exception Handling and Recovery 模式为构建健壮和有韧性的 AI Agent 提供了标准化的解决方案。它为 Agentic 能力提供了装备,以预见、管理和从操作失败中恢复。该模式涉及主动的错误检测(如监控工具输出和 API 响应)和被动的处理策略(如用于诊断的记录、重试瞬态失败或使用回退机制)。对于更严重的问题,它定义了恢复协议,包括恢复到稳定状态、通过调整其计划进行自我纠正,或将问题升级给人工操作员。这种系统化的方法确保了 Agent 能够保持操作完整性、从失败中学习,并在不可预测的环境中可靠地运行。

经验法则:当 AI Agent 部署在动态的、真实的环境中时,使用此模式,在这些环境中,系统故障、工具错误、网络问题或不可预测的输入是可能的,并且操作可靠性是一个关键要求。

可视化摘要

图 2:Exception handling pattern

关键要点

需要记住的要点:

  • Exception Handling and Recovery 对于构建健壮可靠的 Agent 至关重要。
  • 此模式涉及检测错误、优雅地处理它们,以及实施恢复策略。
  • 错误检测可能涉及验证工具输出、检查 API 错误代码和使用超时。
  • 处理策略包括日志记录、重试、回退、优雅降级和通知。
  • 恢复侧重于通过诊断、自我纠正或升级来恢复稳定运行。
  • 此模式确保 Agent 即使在不可预测的真实环境中也能有效运行。

总结

本章探讨了 Exception Handling and Recovery 模式,这对于开发健壮可靠的 AI Agent 至关重要。此模式讨论了 AI Agent 如何识别和管理意外问题、实施适当的响应,并恢复到稳定的运行状态。本章讨论了此模式的各个方面,包括错误检测、通过诸如日志记录、重试和回退等机制处理这些错误,以及用于恢复 Agent 或系统到正常功能的策略。Exception Handling and Recovery 模式的实际应用跨多个领域进行了说明,以展示其在处理真实世界的复杂性和潜在失败方面的相关性。这些应用展示了赋予 AI Agent 异常处理能力如何有助于它们在动态环境中的可靠性和适应性。

参考资料

  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.