在LLM应用程序中,不可避免的会存在大量可知或不可知的故障点,比如模型API调用异常、链组合集成的问题、自定义的组件运行出错等。如果针对这些情况准备了fallback备用方法,就可以让程序更稳健。

本篇我们来看下在LCEL中如何实现"fallback”。

image-20240202010923281

1. LCEL的Fallback方法

LCEL在runnable中定义了fallback方法withfallback,runnable组件及其组成的链都可以直接使用这个方法。

  • 功能简介

    • 当调用方出现异常,则执行fallback中预置的备用方法。
    • 通常用于预防LLM API错误,也可用于其它runnable组件,或者工作链。
  • 使用语法:

    • withfallbacks的第一个参数是备用方法,放在方括号[]中。
    • 第二个参数exceptions_to_handle为可选,用于指定要处理的错误——当发生这些错误时才执行备用方法。
    1
    2
    3
    4
    
    chain = runnable对象.withfallback(
      [备用方法], 
      exceptions_to_handle=(KeyboardInterrupt, ...,)
    ) 
    

2.快速上手

以智能客服场景为例,模拟LLM模型发生异常的情况,使用fallback来预防这些错误,提升用户体验。

STEP1: 构建故障链

  • 构造一个工作链,专门负责回答物流问题。通过设置不存在的模型来模拟模型故障。

image-20240202003427497

  • 运行链,返回关于模型的错误信息。

image-20240202003628125

STEP2: 构建备用链

  • 构建默认回复链,该链使用正常模型。

image-20240202003914611

STEP3: 构建Fallback链

  • 使用with_fallbacks方法,构造工作链service_chain,把默认回复链作为物流链的后备方法。
  • 运行具有fallback能力service_chain,顺利得到回复。

image-20240202003948900

  • 除了上述基础用法,我们还可以指定fallback服务于特殊的异常类型。如下示例中,指定故障链一旦发生了KeyboardInterrupt异常,才执行备用链。
  • 具体如下:

image-20240202004341255

STEP4: 构建Fallback链:自定义备用方法

  • 假设LLM模型全部失效,把默认回复链的模型也改成无效的模型。

image-20240202005006014

  • 自定义一个备用方法,来兜底保证给用户及时回复。

image-20240202005208000

  • 构造新的工作链new_service_chain,把兜底回复作为后备方法。
  • 运行链,顺利得到回复。

image-20240202005233635

3.小结

本篇介绍了LCEL的fallback方法withfallbacks,可以有效解决LLM API、模型输出不佳以及其他集成问题带来的问题。

关键要点如下:

  • withfallbacks方法

  • LCEL在runnable中定义了fallback方法withfallbacks,runnable组件及其组成的链都可以直接使用这个方法。

  • withfallbacks的第一个参数是备用方法,第二个参数exceptions_to_handle为可选,用于指定要处理的错误——当发生这些错误时才执行备用方法。

  • 实例演示

  • 使用上述方法,构建了一个具有fallback机制的客服问答工作链。模拟LLM模型发生异常时,通过预置的后备方法及时回复用户消息。

参考文档:翻译的LangChain官方文档

  • 翻译链接:https://jherculesqz.gitbook.io/langchain-guan-fang-wen-dang