langchain学习总结-Runnable组件重试与回退机制

7 阅读1分钟

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对象信息