Runnable组件重试与回退机制
一、重试机制
是什么
当Runnable执行失败时,自动重新尝试执行
有什么用
提高程序容错性,处理临时性网络故障、API限流等问题
示例代码
from langchain_core.runnables import RunnableLambda
counter = -1
def func(x):
global counter
counter += 1
print(f"counter: {counter}")
return x / counter
chain = RunnableLambda(func).with_retry(stop_after_attempt=2)
resp = chain.invoke(2)
print(resp)
输出结果
counter: 0
counter: 1
2.0
二、回退机制
是什么
当主模型失败时,自动切换到备用模型执行
有什么用
保证服务高可用,避免单点故障,实现多模型容灾
示例代码
from langchain_openai import ChatOpenAI
from langchain_community.chat_models.baidu_qianfan_endpoint import QianfanChatEndpoint
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.output_parsers import StrOutputParser
prompt = ChatPromptTemplate.from_template("{query}")
llm = ChatOpenAI(model='moonshot-v1-338k').with_fallbacks([QianfanChatEndpoint()])
chain = prompt | llm | StrOutputParser()
content = chain.invoke({"query": "你好,你是什么模型"})
print(content)
输出结果
根据哪个模型可用返回对应回复
三、生命周期监听
是什么
监听Runnable执行过程中的开始、结束、错误事件
有什么用
实现日志记录、性能监控、调试追踪
示例代码
from langchain_core.runnables import RunnableLambda, RunnableConfig
from langchain_core.tracers.schemas import Run
import time
def on_start(run_obj: Run, config: RunnableConfig):
print("start")
print(run_obj)
def on_end(run_obj: Run, config: RunnableConfig):
print("end")
print(run_obj)
def on_error(run_obj: Run, config: RunnableConfig, error: Exception):
print("error")
print(error)
runnables = RunnableLambda(lambda x: time.sleep(x)).with_listeners(
on_start=on_start,
on_end=on_end,
on_error=on_error,
)
chain.invoke(2, config={"configurable": {"name": "123"}})
输出结果
打印执行过程中的start、end事件及run对象信息