Skip to main content

简介

本说明文档旨在帮助您理解在使用 DeerAPI 和 OpenAI 官方 API 时如何实现请求自动切换与重试逻辑。优先通过 DeerAPI 发起请求,当收到错误响应时,自动切换到 OpenAI 官方 API 再次尝试请求。

重试逻辑概述

该重试逻辑分为两个主要步骤:
  1. 优先使用 DeerAPI:首先尝试使用 DeerAPI 进行 API 请求。如果请求成功,返回响应结果。如果请求失败(例如遇到 HTTP 错误),则进入第二步。
  2. 切换到 OpenAI 官方 API:当 DeerAPI 请求失败时,程序会自动切换到 OpenAI 官方 API 进行相同的请求。如果请求成功,则返回响应结果。如果请求失败,向用户返回错误信息。

实现细节

环境设置

在开始实现之前,请确保您已经安装了必要的 Python 库。此示例使用的是 OpenAI 的 Python 客户端库,因此您需要确保该库已安装:
pip install openai

实现步骤

以下是具体的实现步骤:
  1. 初始化 API 客户端
    • 创建 DeerAPI 客户端实例,设置其 base_urlapi_key
    • 创建 OpenAI 官方 API 客户端实例,仅需要设置 api_key
  2. 实现请求逻辑
    • 尝试通过 DeerAPI 客户端发起请求。
    • 捕获可能发生的 API 错误(例如 400 或者 500 错误)。这种错误通常由请求失败或响应中包含错误码引起。
    • 若出现错误,切换到 OpenAI 官方 API 客户端,并发起相同请求。
    • 对于每种请求方式,记录并输出错误信息(如果有)。
  3. 返回响应或者错误信息
    • 如果任何一个请求方式成功,则返回请求结果消息。
    • 如果两个请求方式均失败,返回一个包含错误信息的字符串。

示例代码

以下是实现重试逻辑的 Python 示例代码:
# from openai import OpenAI, error

def make_request(messages, model="gpt-4"):
    # 优先使用 DeerAPI 节点
    try:
        # 使用 DeerAPI 创建客户端
        client = OpenAI(base_url="https://api.deerapi.com/v1", api_key="deerapi-key")
        completion = client.chat.completions.create(
            model=model,
            messages=messages
        )
        # 如果请求成功,返回响应
        return completion.choices[0].message.content
    except error as e:
        print(f"DeerAPI 请求失败: {e}")

    # If error, fallback to OpenAI official API
    try:
        # 使用 OpenAI 默认节点
        client = OpenAI(api_key="openai-key")
        completion = client.chat.completions.create(
            model=model,
            messages=messages
        )
        # 返回回应
        return completion.choices[0].message.content
    except error as e:
        print(f"OpenAI 请求也失败了: {e}")

    # 返回一个错误信息
    return "Both DeerAPI and OpenAI requests failed."

# 使用示例
messages = [
    {"role": "system", "content": "You are a helpful assistant."},
    {"role": "user", "content": "Hello!"}
]
response = make_request(messages)
print(response)

注意事项

  • 错误处理:在生产环境中,为了更好地处理和记录错误,请扩展错误日志功能。
  • 性能监控:如果频繁切换到 OpenAI 官方 API,可能意味着 DeerAPI 有问题,需进一步调查并优化。
这项重试逻辑的实现旨在提高系统的鲁棒性和请求成功率,确保在特定 API 节点出现问题时,系统仍能正常提供服务。