拓冰建站拓冰建站
首页 / 资讯中心 / 正文

Agent错误分类学:从故障识别到自动诊断的实战框架

我去年有段时间几乎每隔两天就要在凌晨爬起来处理Agent任务失败后来实在受不了花了整整一个下午把过去三个月所有线上Agent异常记录翻出来一个一个贴到表格里然后对着它们发了很久的呆。原因很简单这些报错大部分没法靠重试一下或重启一下解决而且很多异常其实根本不是日志里写的那个原因——比如你看到的是JSON解析失败真正的根源可能是模型在上一轮就已经丧失了必要的上下文导致它输出了一坨结构正确但内容全是幻觉的JSON。从那一刻我意识到Agent的故障排查不能再靠人肉猜了需要给错误建一套分类学先识别再定位最后套用自动诊断模板快速收敛问题。这套方法后来帮我和团队省下大量排查时间。如果你也在做Agent开发或者正在接手一个行为诡异的Agent项目这篇文章值得读完。我会把分类框架、高频错误的识别特征、可复用的自动诊断模板以及一次完整故障的复盘过程全部梳理出来尽量让你看完就能直接落地到自己的项目里。1. 我为什么决定给Agent写一套错误分类学1.1 Agent的失败模式其实远比想象中有限很多团队第一次面对Agent跑挂时第一反应是这玩意太随机了。LLM的采样有随机性同一个Prompt可能这次能用下次就崩于是大家默认把一切异常归结为模型抽风。但我系统性翻过自己项目的线上日志后发现Agent的失败模式远没有想象中那么无限。我做过一个粗略统计把过去若干个上线Agent项目运行时出现的所有异常分门别类发现大约85%的异常集中在几个固定类型上上下文丢失或记忆污染、工具调用异常包括幻觉工具名和参数错配、输出格式违规、规划循环与目标漂移、外部依赖不稳定、状态读写冲突。至于真正的模型开始胡说八道——也就是在没有上下文问题的情况下凭空捏造内容——占比反而不高而且多数是任务本身超出模型能力边界导致的。这说明一件事Agent错误是有结构性的可以被分类可以被识别也可以被自动诊断。如果你觉得错误千奇百怪大概率是还没有用一个统一框架去观察它们。1.2 没有分类学时排查就会变成猜谜没有分类学之前我的排查路径往往是这样的收到告警、打开日志、看到某个错误关键字、去代码里搜、猜测哪里出问题、加上log重跑、再猜。整个过程有三个典型困境。第一日志里的报错是下游症状不是上游根因。最常见的例子是工具调用阶段报参数校验失败表面上看是模型传了一个非法值实际查下去才发现是前一轮某个状态字段被错误覆盖了模型拿到脏数据自然生成了错误参数。如果你只盯着报错本身看永远找不到真正的问题。第二多人维护一个Agent项目时每个人对同一个问题的描述方式完全不同。有人管上下文丢失叫它忘了有人叫怎么又在重复调接口同一个问题在issues里能开三个完全不同的标题。没有统一语言知识就无法沉淀。第三每个错误都要从零开始分析没有任何可复用的排查路径。我发现自己反复在做同一类事情——检查上下文组装、检查工具Schema、看状态读写代码——但每次都是从头来一遍效率极低。1.3 分类学的三个目标可命名、有路径、可自动化吃够了苦头之后我给这套方法定了三个目标。让错误可命名。团队里所有人用同一套错误类型词典描述问题比如tool_hallucination就是工具幻觉context_overflow就是上下文溢出stale_state_reference就是状态引用过期。提bug时直接打标签省掉一大段解释。让定位有路径。每个错误类型都对应一条标准的检查路径从日志到代码到配置按照固定顺序排查。不需要每次临场想下一步该看什么。让诊断可自动化。路径固定之后就有机会把排查动作交给程序来做。Agent框架捕获异常时自动提取错误指纹跑一遍分类决策树输出一份带置信度的诊断报告。人只需要看报告、确认结果、决定修复方案。这三个目标就是我后面所有内容的地基。2. 分类框架用三个维度给Agent错误定位我的分类学核心思路是先分层再分阶段最后分可恢复性。三个维度联合起来基本能把Agent运行时出现的大部分故障映射到一个可操作的诊断动作上而不是停留在好像哪里不对劲的层面。2.1 维度一故障发生在哪个层第一个维度是层。我把Agent运行时的故障来源拆成五层每一层有各自典型的报错表现和根因方向。故障层典型报错/表现主要根因方向Prompt/上下文层指令遗忘、前后矛盾、上下文截断Prompt组装逻辑、上下文窗口策略、摘要触发条件模型/推理层输出格式违规、内容幻觉、逻辑跳变模型能力边界、推理参数、结构化输出约束工具/API层工具不存在、参数校验失败、返回异常工具注册、Schema定义、外部API稳定性状态/存储层状态不一致、key冲突、记忆污染状态管理设计、存储读写顺序、并发控制编排/规划层死循环、步骤跳变、目标漂移规划器逻辑、状态回传机制、循环防护策略为什么要分层因为不同层的错误定位方向完全不同。你看到一个Tool not found报错如果定位到工具注册层要查的是注册中心和模型看到的工具列表是否一致如果定位到模型层要查的是模型为什么在工具列表里选出了一个不存在的名字——这可能是上下文组装漏掉了部分工具描述。有个更直白的类比这就像排查一台服务器故障你要先判断是硬件层、操作系统层、应用层还是网络层的问题。不同层的排查工具和手段完全不同用错方向等于白干。2.2 维度二错误发生在生命周期哪个阶段第二个维度是阶段。Agent一次完整任务的执行生命周期我习惯拆成五个阶段意图理解、任务规划、工具调用、结果整合、最终输出。每个阶段产生的错误类型虽然看上去相似但根因方向差异很大。举一个真实例子工具调用阶段报Tool not found多半是Agent注册表里确实没有这个工具或者模型看到的工具列表被截断了但同一个报错出现在结果整合阶段含义完全不同——模型此时并不是真的要调用一个工具而是它错误地以为某个工具存在并在整合结果时把某个工具会返回某数据当成了既成事实。这时候真正要修的是结果整合阶段的提示词逻辑而不是工具注册。所以我在做错误指纹采集时一定会记录当前执行阶段。定义如下intent表示意图理解plan表示任务规划tool_call表示工具调用aggregate表示结果整合output表示最终输出。这个字段看起来简单却是后面自动诊断决策树里最关键的维度之一。2.3 维度三可恢复性等级怎么定第三个维度是可恢复性。这个维度决定了出错后应该采取什么恢复策略直接影响自动诊断的升级逻辑。我把可恢复性分成四档R0 可重试瞬时网络错误、API限流、偶发超时。这类问题单纯重试就有大概率成功。R1 可回退可以回退到上一个已知良好的状态重新决策。比如模型在倒数第二步生成了错误结果但前面的工具执行结果都有效这时不需要推倒重来。R2 需人工介入涉及业务规则约束、权限配置、外部依赖变更、费用预算问题。这类问题自动流程继续往下跑只会浪费资源。R3 需重建会话上下文已经不可信状态已经彻底污染。继续在当前会话里修复很容易把错误越带越偏必须开启新会话从头来过。划分可恢复性这件事最大的价值是帮你克制总是重试的本能。模型输出格式违规重试一次还有机会但如果错误类型被判定为R3继续在同一会话里重试就是浪费时间。2.4 三个维度如何组合成诊断动作三个维度不是单独使用的它们要组合起来才能推导出诊断动作。组合方式可以简单理解成一个查表过程先看层和阶段确定错误是什么再看可恢复性确定该怎么做。举个例子。某个错误被识别为状态/存储层 工具调用阶段 可恢复性R1那么诊断动作是先检查状态读写key是否冲突再检查下游读取是否读到了过期值确认后回退到状态覆盖前的检查点重新决策。如果错误被识别为模型/推理层 输出阶段 可恢复性R3那动作就是不折腾当前会话直接开启新会话同时把这次错误指纹存下来用于后续排查是否需要对Prompt做调整。这个组合逻辑就是自动诊断模板的底层架构分类之后动作是被规则直接推导出来的依靠的是框架不是临场发挥。3. 高频错误的识别特征与快速定位路径分类框架搭好了接下来是实战中最常用的一章怎么从症状快速识别出错误类型然后按路径定位。3.1 上下文丢失与记忆污染先说症状。这类错误在Agent运行时的表现五花八门任务执行到一半Agent突然忘记了最初的目标约束前5轮还在用方案A第6轮突然改成互相矛盾的方案B你问它刚才得到的结果是什么它描述的和你日志里看到的完全不同或者它反复调用同一个工具拿同样的数据像失忆了一样。识别特征有三个。第一上下文token接近窗口上限且超出部分没有任何摘要处理就直接截断了。第二memory写入时用的key被后续步骤误覆盖比如两个模块共用了summary这个槽位。第三对话历史在组装时漏掉了某一轮常见于多轮并行执行时的竞态条件。定位路径按顺序来先打开Prompt组装日志确认实际发给模型的上下文包含了哪些轮次、是否被截断再检查上下文摘要/压缩的触发点和策略确认在什么条件下触发了截断然后检查memory读写的key设计看看写入和读取用的key是否一致、是否有并发覆盖最后在复现时每轮之间dump一下context的哈希值对比哪一轮开始上下文内容缺失。这里我有个很重要的经验很多所谓模型失忆根本不是模型不行而是你的上下文组装逻辑在某些分支路径下漏了消息。比如你有一个分支提前return了导致那轮对话没拼进history模型自然不知道之前讨论过什么。这类问题查代码往往比查模型快得多。3.2 工具调用异常工具幻觉与参数错配工具调用异常是Agent项目里出现频率最高、也最耗时的错误类型之一。症状包括模型调用了一个工具列表里根本不存在的工具模型生成了与工具定义类型不一致的参数比如把整数传成了字符串工具真实执行成功了但返回结果太大被框架截断后模型拿到的是残缺数据还有更隐蔽的——工具抛出的真实异常被包装层吞掉只给模型留下一句模糊的调用失败。识别特征方面日志里出现Tool not foundvalidation errorfunction arguments parse failed这类关键字时要特别警惕。还有一个容易忽略的信号模型在回复内容里说我调用了XX工具但执行记录里这个调用根本不存在——这说明模型在幻觉一个工具执行过程比真实调错参数更严重。定位路径可以按四步走。第一步打印模型每一次函数调用请求把完整的请求体存到trace里包括模型生成的全部参数而不是只存工具执行结果。第二步记录工具Schema的版本号检查模型实际看到的工具列表和注册中心是否一致。我遇到过不止一次线上工具更新了Schema但Prompt缓存里还是旧版本导致模型一直按旧的参数结构调用。第三步给工具返回值设置截断上限。截断时必须主动告诉模型结果已截断请分批查询这样模型不会拿残缺数据继续做推理。第四步保留原始异常堆栈。在传给模型前可以改写错误文案但raw_error字段必须完整保留在日志里。这里我要特别提醒一点工具调用层的包装过度是Agent框架的通病。为了把底层异常封装成模型能理解的消息很多框架会把错误改写成一句模糊的话比如工具执行失败结果把定位线索全丢了。所以我一直建议在日志里保留raw_error字段同时把工具名、参数、时间戳一起存下来。3.3 规划失控循环、跳变与目标漂移规划失控是Agent比传统软件Bug更头疼的一类问题因为程序没有崩溃它在一本正经地做错事。症状表现为Agent反复做同一件事看起来像死循环但又没有真的触发循环保护机制任务执行到一半突然跳去干别的然后回不来了多轮操作后Agent自己给自己追加了新目标新目标和原任务冲突每一步都在重新规划完全不用上一个步骤的结果。识别特征方面如果同一个工具在任务中被调用多次但参数略有变化这往往不是简单重试而是每一轮都在重新决策——前一轮决策产出的结果没有进入下一轮状态。另外步骤数远超预期基线、状态快照显示中间状态被非预期覆盖也都是规划失控的信号。定位路径比较依赖日志设计。首先做决策轨迹回放把每一步的目标、选择的动作、依据的上下文记录下来拼成一条决策时间线。然后对比相邻两步的目标字段——目标漂移通常从某一步开始目标描述里出现原始任务没有的新关键词。最后检查状态写入逻辑确认每一步是不是用了同一个全局状态key导致互相覆盖。我自己的判断标准是如果同一个工具在任务中被调用超过3次且参数逐次变化基本可以判定规划器在原地打转。这时候不用继续看模型重点查状态回传链路。3.4 输出格式违规与解析失败输出格式违规是模型层最典型的错误也是很多新手第一个遇到的坑。症状包括模型输出的JSON无法解析常见于多出markdown围栏、多出注释文字、括号不闭合JSON本身合法但字段和期望Schema不匹配比如程序读data但模型输出result输出内容被截断导致JSON不完整在强制JSON模式下输出空对象。识别特征主要看三处Pydantic或JSON校验函数抛出的异常信息重试多次仍然失败且每次失败位置不同——这说明是模型的概率性问题而不是固定Bug模型的原始输出里出现json这类围栏标记。定位路径这样走。先打开结构化输出的schema定义检查每个字段是否有语义说明。模型容易搞混的字段往往就是只写了字段名和类型、没有写含义的字段。再检查调用模型时是否真的开启了JSON mode或structured output约束——我见过项目代码里配了但实际请求没生效的情况。解析失败时要记录原始输出文本的摘要而不是只记一声解析失败否则根本没法判断是格式问题还是内容问题。可以考虑用修复式解析检测到围栏先剥掉围栏检测到注释先剥离注释再尝试用标准解析器处理。一个额外的经验输出格式违规的发生次数和任务复杂度强相关。任务越复杂、上下文越长模型越容易在最后一步草草收尾。所以遇到高频输出格式错误不要只想着重试先看看上下文是不是快塞满了。3.5 识别特征速查表为了方便日常排查我把上述四类错误和另外两类易混错误整理成一张速查表错误类型代表性日志关键字易混淆错误最优先检查项上下文丢失context_length_exceeded, truncated模型能力不足Prompt组装日志工具幻觉Tool not found, Invalid arguments工具注册丢失工具Schema版本规划循环同一工具重复调用外部接口重试决策轨迹回放输出格式违规JSON parse error, ValidationError模型推理错误Schema定义与模式开关外部依赖不稳定timeout, 5xx, rate_limit工具调用异常API可用性监控状态冲突key already exists, inconsistent state上下文丢失状态读写key设计这张表就是自动诊断规则库的雏形。后面写代码的时候你会发现这些特征直接翻译成了规则条件。4. 自动诊断模板把分类学落成可执行流程分类学不能只停留在经验层面。我在框架稳定之后写了一个自动诊断模板插到Agent运行框架里每次任务失败时自动跑一遍。模板整体分三层错误指纹采集、签名归类、决策树定位最后输出结构化报告。4.1 模板的输入先定义错误指纹所谓错误指纹就是一组描述这个错误长什么样的结构化字段。我在代码里用数据类表示实际项目可以根据框架替换成字典或protobuffrom dataclasses import dataclass, field from typing import Any, Dict, Optional, List dataclass class ErrorFingerprint: task_id: str stage: str # 生命周期阶段intent/plan/tool_call/aggregate/output layer: str # 故障层prompt/model/tool/state/orchestration error_type: str # 错误类型名 error_code: str # 原始异常/错误码 tool_name: Optional[str] None # 涉及的工具 retry_count: int 0 # 已重试次数 context_tokens: Optional[int] None # 最近一轮上下文token用量 raw_message: str # 原始错误信息 state_keys: List[str] field(default_factorylist) # 涉及的状态key trace_events: List[Dict[str, Any]] field(default_factorylist) # 决策轨迹摘要这个结构看起来简单却是整个自动诊断模板的基础。每个字段都对应分类框架中的一个维度采集时要有意识地在一开始就把这些信息记下来而不是等报错后再从各种日志里临时拼凑。尤其是trace_events需要在Agent运行的每一轮决策节点主动dump事后补是补不出来的。4.2 第一层诊断签名归类第一层诊断的任务是把错误指纹映射到候选错误类型。这一步用规则就能覆盖大部分情况不需要一上来就上机器学习和向量检索def classify(fingerprint: ErrorFingerprint) - List[str]: candidates [] msg fingerprint.raw_message.lower() if context_length in msg or truncat in msg: candidates.append(context_overflow) if tool not found in msg or no such tool in msg: candidates.append(tool_hallucination) if (validation error in msg or invalid in msg) and argument in msg: candidates.append(tool_argument_mismatch) if json in msg or parse in msg or validation in msg: candidates.append(output_format_violation) if fingerprint.retry_count 3: candidates.append(possible_planning_loop) return candidates规则层的价值在于把人靠印象猜变成程序根据字段筛。规则没命中怎么办把这条指纹标为unknown写入待人工标注池。每次线上故障复盘时把人工给出的结论回填成新规则。这样规则库会越用越准而不是一开始就追求覆盖全部。4.3 第二层诊断决策树收敛唯一路径签名只是候选集还需要决策树把范围收窄到一条诊断路径。决策树的核心不是只看签名而是组合阶段层重试次数做判断。举例说明我用条件判断实现了几个核心分支def decide_diagnostic_path(fingerprint: ErrorFingerprint, candidates: List[str]): if tool_hallucination in candidates: # 工具调用阶段优先怀疑注册表和Schema return DiagnosticPlan( steps[ diff tool schema version between registry and model context, check if tool_name exists in registry, inspect last 3 model-generated tool calls, ], recoveryR1_fallback_prompt_rebuild, ) if context_overflow in candidates: # 状态/上下文阶段优先怀疑组装和截断 return DiagnosticPlan( steps[ dump prompt assembly log, check summarization trigger and strategy, check memory key collision, ], recoveryR1_shrink_context_and_resume, ) if possible_planning_loop in candidates and fingerprint.stage tool_call: return DiagnosticPlan( steps[ replay decision timeline, compare goal fields of adjacent turns, check state key overwrite logic, ], recoveryR3_new_session_with_state_snapshot, ) # 其余分支按同等方式补充要特别注意同一类错误在不同阶段诊断路径不同。比如output_format_violation发生在output阶段可能是模型能力或schema问题发生在aggregate阶段则要优先怀疑上游传入的数据结构已经在状态里被污染了。所以决策树必须先看stage再看candidates。4.4 第三层诊断定位动作与验证诊断计划不是最终答案它是接下来要执行的检查动作。每个计划都要带验证步骤防止误诊断。举个例子如果扫描决定检查工具Schema版本执行完这个动作后必须回答一个问题模型使用的Schema和注册中心不一致这是不是本次故障的直接原因如果检查发现模型调用的工具名根本不在注册表里那说明不是版本问题而是模型幻觉问题应该回到tool_hallucination分支重新定位。验证步骤的价值在于兜底。自动诊断最容易犯的错是找到一个异常就收工比如发现某个工具的参数校验失败就认定是参数问题忽略了背后真正导致参数错误的上下文污染。我在模板里强制要求每个check_result必须包含命中/未命中的判断依据最终报告里必须给出置信度低于阈值的自动升级为人工排查。4.5 诊断报告的标准输出自动诊断的最终产物是一份结构化报告同时推送给告警系统和开发者面板dataclass class DiagnosticReport: task_id: str fingerprint: ErrorFingerprint candidates: List[str] final_classification: str diagnostic_plan: DiagnosticPlan check_results: List[Dict[str, Any]] confidence: float recommended_action: str这份报告会写入错误知识库。下次遇到指纹相似的任务先查历史报告有没有同款能省很多时间。我跑了一段时间后发现新模式出现频率最高的时候就是每次发布新版本后的头两天所以发布窗口期我会把诊断报告的告警阈值调低一级尽量多抓问题。5. 一次真实故障的完整排查复盘从错误数据报表到根因理论讲再多不如看一次完整的排查过程。我把过去一个记忆深刻的真实故障完整复盘一遍你就知道这套分类学在实战中是怎么运作的。5.1 告警现象一份错误的数据报表那次故障来自我维护的一个数据分析Agent任务是从业务库里拉数据、做统计、生成日报。某天凌晨Agent生成了一份日报数字基本上全错了上月销售额被统计成上上月的某些品类的聚合口径还变了。最头疼的是任务本身没有抛任何异常。Agent以完全正常、完全自信的姿态输出了错误结果。这类错误传统监控根本抓不到因为它的exit code是0。当时我只是因为直觉觉得这个数字不对反手去翻trace才发现问题。5.2 第一轮排查怀疑是工具参数错误第一反应是SQL生成工具的参数传错了因为报表里有一个时间范围的字段明显不对。我去trace里翻工具调用记录发现模型生成的SQL用的时间范围是2024年1月但任务需求是从2024年2月的销售数据里出报表。看起来就是经典的tool_argument_mismatch。按模板走了对应分支检查工具Schema、校验参数约束。结果一切正常Schema没有错、参数校验也通过了模型生成的SQL在格式上完全合法问题只在于时间范围的取值不对。这说明根因不在工具参数层。继续往下查。5.3 第二轮排查状态覆盖和上下文丢失才是真凶回头翻决策轨迹发现一个细节Agent在任务开始后先后调用了两个工具一个是获取当前日期另一个是生成SQL。问题出在这两个工具之间。上下文里有一个中间步骤把当前月份这个临时变量写入了一个名为period的记忆槽位。随后负责SQL生成的模块也读取period准备拼时间条件可它的读取顺序早于上一个模块对新值的写入读到的还是上一轮缓存的旧月份而那个旧月份恰好是1月。简单说不是模型笨是状态读写key冲突导致时间条件用了旧值。从分类学角度看这属于状态/存储层 工具调用阶段 可恢复性R1的组合。日志里显示的生成SQL成功只是下游结果真正的毛病出在状态层的过期引用。5.4 修复方案与回归验证修复方法很简单把记忆槽位拆分。临时变量用独立key只在确认写入成功后再给下游读取同时在写入旧值前做一次时间戳校验如果当前时间已经进入新的月份就强制刷新缓存。改完我重放了当天凌晨的完整日志跑出来的日报和人工核对结果一致。这个case被我固定成了回归用例专门造了一个多工具共享状态key的测试场景确保以后每次改动都不会打回原形。测试挂进CI之后至少帮我拦下过两次同类问题。5.5 这次复盘反哺了分类学故障修完我把这次的经验回填到了自动诊断模板里。具体动作是在错误类型字典里新增了一个类型叫stale_state_reference并把检查共享状态key是否存在并发读写加入决策树。这样一来以后再有类似的状态引用过期问题程序第一轮就能给出诊断方向不用等人工翻半天trace。这就是前面说的分类学不是一次性建完的静态文档它是被真实故障一餐一餐喂大的。每次复盘发现新的错误模式都要考虑能不能沉淀成规则。6. 模板不是银弹边界、取舍与后续演进自动诊断模板帮我们省了不少事但我也得说清楚它的边界。指望一个分类学解决Agent所有问题是不现实的。6.1 分类学依赖良好的可观测性基建这套分类学能跑起来有一个绝对前提Agent框架得能输出足够的调试信息。至少要能回答三个问题——模型实际收到的上下文是什么模型每一步的决策是什么工具执行前后的状态是什么如果项目里现在连基础的日志分级和trace链路都没有我建议先把这两件事补上再谈错误分类学。错误分类学是最后一公里的排查系统底下没有数据管道它什么都执行不了。这就好比你给体检系统配了最好的诊断标准但患者连血常规都没抽标准就只能悬在半空中。6.2 模板规则要跟着业务迭代诊断模板里的规则不是写一次就永远能用的。新工具接入、新模型切换、上下文策略调整都可能产生新的错误模式。我现在的节奏是每次线上故障复盘后把新发现回填到规则库每隔一两个迭代做一次规则冲突检查避免旧规则误伤新场景。比如有一次切换了更便宜的模型错误指纹里突然出现大量output_format_violation当时差点误判成模型能力不足。后来查下来是新模型对中文引号的兼容性更差最后还是通过规范Prompt示例解决的。如果规则库死板这种问题会绕很久。6.3 从诊断到预防错误注入与回归用例诊断只能减少止损时间真正省心的是让错误不发生。我补了两类手段。一类是错误注入测试。在测试环境故意触发上下文截断、工具Schema变更、返回结果超限验证Agent在异常下能不能按预期降级比如自动从R0升级到R1、从重试变成回退。这类测试初期跑起来很费劲但一旦跑通每次改框架代码心里都有底。另一类是回归用例。每次线上问题修复后把故障场景沉淀成自动化用例挂到CI上。我前面说的stale_state_reference测试就是一个例子。回归用例不用多但每一个都是从真实线上事故里提炼出来的价值远超手写的单元测试。6.4 把诊断知识沉淀给Agent自己最后这个做法最值得一试。我把历史错误模式整理成一份常见隐患清单写进Agent的任务指令里让它在执行时主动规避已知错误状态写入前检查key冲突、调用工具前校验参数、连续重复调用同一工具时主动停下确认。相当于把分类学从事后诊断工具变成了事前决策约束。有团队成员一开始反对觉得这会让Prompt变长、增加token消耗。从我的实践看这个收益远大于Prompt长度的代价。Agent在决策环节主动规避已知错误可以减少大量事后补救成本。而且这份清单本身就是活的错误知识库比埋在日志和文档里有效得多。我现在面对Agent报错第一反应已经不再是完蛋了得赶紧重跑而是先问自己三句话这个错误发生在哪一层它对应生命周期里的哪个阶段按可恢复性分它是需要重试还是人工介入把这三句话问完大多数故障都能给出诊断路径剩下的少数异常再手工处理范围也会小很多。这套错误分类学说到底就是把看着办变成按流程办让Agent的错误像普通软件Bug一样可以被识别、被定位、被自动化地诊断。
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门