6. 异常处理与错误重试


功能介绍

在生产环境中,AI 应用难免会遇到各种异常情况——模型 API 调用超时、外部工具返回错误、知识库检索失败等。Dify 提供了异常处理和错误重试机制,帮助开发者构建更健壮的应用。

在工作流中,每个节点都可以配置失败处理策略。当某个节点执行失败时,你可以选择让它自动重试、跳过并使用默认值、或者将错误信息传递给下游节点进行处理。

开启方式

image-20260407164722161

点击工作流中的某个节点,在节点配置面板中找到「异常处理」或「失败时重试」设置,包含以下方式:

  • 自动重试:设置重试次数和间隔时间。
  • 使用默认输出:失败时输出预设的默认值。
  • 终止流程:节点失败后整个工作流停止。
  • 异常分支:发生异常时执行分支异常

使用技巧

  • 对调用外部 API 的节点(如 HTTP 请求、工具调用)设置自动重试,通常重试 2-3 次即可解决临时性网络问题。
  • 对于非关键的处理步骤,使用"跳过并使用默认值"策略,确保主流程不会因为次要步骤的失败而中断。
  • 在代码执行节点中使用 try-catch 逻辑捕获异常,输出结构化的错误信息供下游节点判断。
  • 善用日志功能追踪异常发生的原因和频率,针对高频异常进行针对性优化。
  • 对于生产级应用,建议在工作流中设计"降级方案"——当主处理路径失败时,自动切换到备用路径。

示例

示例一:API 调用自动重试

场景:HTTP 请求节点调用外部 API
配置:失败时自动重试 3 次,间隔 2 秒
效果:临时性网络故障时自动恢复

示例二:模型调用降级方案

场景:LLM 节点调用 GPT-4 失败
设计:条件分支检测失败 → 切换到备用 LLM 节点(使用 GPT-3.5 作为降级方案)
效果:即使主力模型不可用,应用仍能提供服务

示例三:知识库检索失败处理

场景:知识检索节点未返回结果
设计:条件分支判断检索结果是否为空 → 走"通用回答"分支
效果:用户不会收到空白回复或错误信息

示例四:代码执行异常捕获

场景:代码执行节点处理用户上传的 CSV 数据
代码中的异常处理:
try:
    data = parse_csv(input_text)
    result = process(data)
except Exception as e:
    result = {"error": True, "message": str(e)}
效果:即使数据格式异常也不会导致工作流崩溃

示例五:全局异常通知

场景:工作流中的关键节点失败
设计:失败时触发 HTTP 请求节点 → 发送告警通知到 Slack/企业微信
效果:运维人员第一时间收到异常通知