在LLM应用程序中,不可避免的会存在大量可知或不可知的故障点,比如模型API调用异常、链组合集成的问题、自定义的组件运行出错等。如果针对这些情况准备了fallback备用方法,就可以让程序更稳健。
本篇我们来看下在LCEL中如何实现"fallback”。
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: 构建故障链
- 构造一个工作链,专门负责回答物流问题。通过设置不存在的模型来模拟模型故障。
- 运行链,返回关于模型的错误信息。
STEP2: 构建备用链
- 构建默认回复链,该链使用正常模型。
STEP3: 构建Fallback链
- 使用
with_fallbacks
方法,构造工作链service_chain,把默认回复链作为物流链的后备方法。 - 运行具有fallback能力service_chain,顺利得到回复。
- 除了上述基础用法,我们还可以指定fallback服务于特殊的异常类型。如下示例中,指定故障链一旦发生了KeyboardInterrupt异常,才执行备用链。
- 具体如下:
STEP4: 构建Fallback链:自定义备用方法
- 假设LLM模型全部失效,把默认回复链的模型也改成无效的模型。
- 自定义一个备用方法,来兜底保证给用户及时回复。
- 构造新的工作链new_service_chain,把兜底回复作为后备方法。
- 运行链,顺利得到回复。
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