在AI应用中实现可运行的回退机制

在使用大型语言模型(LLM)时,开发人员常常会遇到来自底层API的问题,如速率限制或停机。因此,在将LLM应用程序推向生产时,保护机制愈发重要。这时,我们引入了“回退”的概念。

技术背景介绍

回退机制 是在紧急情况下备用的计划。在LLM级别和整个可运行级别上应用回退都很重要。不同模型可能需要不同的提示,因此如果对OpenAI的调用失败,不仅仅是简单地将相同的提示发送给Anthropic,而更可能是需要用不同的提示模板发送不同版本。

核心原理解析

针对LLM API错误的回退 是最常见的使用场景。请求可能因为各种原因失败,如API停机或速率限制。因此,回退机制能帮助防止这些问题。

重要提示:默认情况下,许多LLM包装器会捕获错误并重试。使用回退时,您可能需要关闭这些重试机制,否则第一个包装器会一直重试而不失败。

代码实现演示

首先,让我们模拟OpenAI的RateLimitError:

%pip install --upgrade --quiet langchain langchain-openai

from langchain_anthropic import ChatAnthropic
from langchain_openai import ChatOpenAI
from unittest.mock import patch
import httpx
from openai import RateLimitError

# 模拟RateLimitError
request = httpx.Request("GET", "/")
response = httpx.Response(200, request=request)
error = RateLimitError("rate limit", response=response, body="")

# 创建OpenAI和Anthropic的LLM实例
openai_llm = ChatOpenAI(model="gpt-3.5-turbo-0125", max_retries=0)  # 禁止自动重试
anthropic_llm = ChatAnthropic(model="claude-3-haiku-20240307")
llm = openai_llm.with_fallbacks([anthropic_llm])

# 使用OpenAI LLm并处理错误
with patch("openai.resources.chat.completions.Completions.create", side_effect=error):
    try:
        print(openai_llm.invoke("Why did the chicken cross the road?"))
    except RateLimitError:
        print("Hit error")

# 使用包含回退的LLM
with patch("openai.resources.chat.completions.Completions.create", side_effect=error):
    try:
        print(llm.invoke("Why did the chicken cross the road?"))
    except RateLimitError:
        print("Hit error")

应用场景分析

序列的回退 也可以为序列本身创建回退。在处理长输入时,您可能需要回退到具有更长上下文窗口的模型。

short_llm = ChatOpenAI()
long_llm = ChatOpenAI(model="gpt-3.5-turbo-16k")
llm = short_llm.with_fallbacks([long_llm])

inputs = "What is the next number: " + ", ".join(["one", "two"] * 3000)

try:
    print(short_llm.invoke(inputs))
except Exception as e:
    print(e)

try:
    print(llm.invoke(inputs))
except Exception as e:
    print(e)

实践建议

  1. 关闭默认重试:确保你的API请求不会因为内建重试机制而延长故障时间。
  2. 基于不同需求设计提示模板:在切换模型时,确保提示与模型特性匹配。
  3. 监控错误和行为:即使有回退机制,监控系统的错误日志以便及时改进策略。

如果遇到问题欢迎在评论区交流。

—END—

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值