LiteLLM.md 7.9 KB

使用 LiteLLM 调用 Ollama 的 OpenAI 兼容 API 是一个很棒的方法,因为 LiteLLM 可以让你轻松地使用统一的接口来调用多种大语言模型,而无需修改代码。下面是详细的步骤和代码示例。

前提条件

  1. 安装了 Ollama:如果你还没有安装,请访问 Ollama 官方网站 并按照说明安装。

  2. 下载并运行一个模型:你需要从 Ollama hub 下载并运行一个模型,例如 Llama 3。打开终端,运行:

    ollama pull gpt-oss
    ollama run gpt-oss
    

    运行 ollama run gpt-oss 之后,按 Ctrl+D 或输入 /bye 退出。

  3. 创建 conda 环境

    conda create --name litellm python=3.12
        
    conda activate litellm
    
  4. 安装依赖 安装 LiteLLM:你可以通过 pip 安装 LiteLLM。

    pip install litellm
    

    安装 openai (可选,但推荐):LiteLLM 的部分功能依赖于 openai 库。

    pip install openai
    

LiteLLM 代码示例

LiteLLM 的主要优势在于它能够使用与 OpenAI 相同的参数结构来调用 Ollama。这意味着你的代码会非常简洁。

这是一个使用 LiteLLM 调用 Ollama 的 gpt-oss 模型的 Python 代码示例:

import litellm

# 设置 API 基础 URL 为 Ollama 的本地地址
# LiteLLM 会自动识别这个 URL 并将其路由到 Ollama 的兼容 API
litellm.api_base = "http://localhost:11434"

# 调用 completion API
try:
    response = litellm.completion(
        model="ollama/gpt-oss:latest ",
        messages=[
            {
                "role": "system",
                "content": "你是一个有用的助手。你的回答要简洁明了。",
            },
            {
                "role": "user",
                "content": "介绍一下LiteLLM是什么?",
            },
        ],
        stream=False,  # 如果你想流式传输响应,可以设置为 True
    )

    # 打印返回结果
    print(response.choices[0].message.content)

except Exception as e:
    print(f"发生错误:{e}")

代码详解

  • litellm.api_base = "http://localhost:11434" 这是最关键的一步。你将 LiteLLM 的 api_base 设置为 Ollama 的本地服务地址。LiteLLM 会检测到这个 URL 并自动将请求转换为 Ollama 兼容的格式。

  • model="ollama/gpt-oss:latest" 在使用 Ollama 时,LiteLLM 模型的命名规则是 ollama/<模型名称>。这里,我们指定要调用 Ollama 上运行的 gpt-oss:latest 模型。

  • messages LiteLLM 使用与 OpenAI 相同的 messages 格式来构建对话。role 可以是 systemuserassistant

  • stream=False 这个参数控制是否以流式方式接收响应。如果你设置为 True,你需要对返回的生成器对象进行迭代以获取每个块。

如果你想使用流式传输(Streaming)

流式传输在处理长响应时非常有用,可以提供更好的用户体验。下面是使用流式传输的示例代码:

import litellm

litellm.api_base = "http://localhost:11434"

try:
    response_stream = litellm.completion(
        model="ollama/gpt-oss:latest",
        messages=[
            {
                "role": "user",
                "content": "请用一段话介绍一下LiteLLM。",
            }
        ],
        stream=True,  # 设置为 True 来启用流式传输
    )

    print("流式响应:")
    for chunk in response_stream:
        # 确保 chunk 中有 content,某些块可能只包含其他元数据
        if chunk.choices and chunk.choices[0].delta.content:
            print(chunk.choices[0].delta.content, end="", flush=True)
    print("\n--- 响应结束 ---")

except Exception as e:
    print(f"发生错误:{e}")

总结

LiteLLM 的强大之处在于它提供了一个统一的接口,让你能够像调用 OpenAI 一样轻松地调用 Ollama。通过简单地设置 litellm.api_base 和使用 ollama/<模型名称> 格式,你就可以在不改变代码主体的情况下,在不同的本地或远程模型之间进行切换,大大提高了开发效率和灵活性。

运行一个独立的 LiteLLM 代理服务器,用 Ollama 来调用模型,同时将该模型命名为 gpt-oss,是一个非常实用的方法。这能让你用一个统一的接口来管理和调用本地模型,就像在使用 OpenAI 的服务一样。

步骤一:创建 LiteLLM 配置文件

首先,你需要创建一个名为 config.yaml 的配置文件。这个文件会告诉 LiteLLM 代理服务器如何映射和调用你的模型。

在这里,我们将一个 Ollama 模型(例如 gpt-oss:20b)映射到自定义的名称 gpt-oss

# config.yaml
model_list:
  - model_name: gpt-oss
    litellm_params:
      model: "ollama/gpt-oss:20b"
      api_base: "http://localhost:11434"

litellm_settings:
  # 你可以在这里配置其他 LiteLLM 设置
  # 例如,启用日志,可以帮助你调试
  logs:
    verbose: true
  pass_through_headers: false
  • model_name: gpt-oss:这是你希望在调用时使用的自定义模型名称。你的应用程序将使用这个名字来调用模型。
  • litellm_params:这部分定义了实际调用的模型参数。
    • model: "ollama/gpt-oss:20b":告诉 LiteLLM 使用 Ollama 上的 gpt-oss:20b 模型。如果你下载了其他 Ollama 模型,比如 mistral,可以把这里改成 ollama/mistral
    • api_base: "http://localhost:11434":这是你的本地 Ollama 服务运行的地址。

步骤二:启动 LiteLLM 代理服务器

在终端中,使用以下命令来启动 LiteLLM 代理服务器,并加载你创建的配置文件。

litellm --config config.yaml --host 0.0.0.0 --port 4000
  • --config config.yaml:告诉 LiteLLM 使用你刚刚创建的配置文件。
  • --host 0.0.0.0:让服务器监听所有网络接口。这意味着你的局域网内的其他设备也可以通过你的 IP 地址访问这个服务。
  • --port 4000:指定服务器运行在 4000 端口。你可以根据需要更改端口号。

当服务器成功启动后,你会在终端看到类似“LiteLLM: Listening on http://0.0.0.0:4000”的输出。

步骤三:使用客户端代码调用自定义模型

现在,你的 LiteLLM 代理服务器已经运行起来了,你可以用它来调用 gpt-oss 模型。下面是一个使用 Python 的 openai 库来调用的例子,因为 LiteLLM 代理服务器完全兼容 OpenAI API 格式。

import os
from openai import OpenAI

# 将客户端指向你的 LiteLLM 代理服务器
client = OpenAI(
    base_url="http://localhost:4000",
    api_key="sk-1234567890", # api_key 可以是任何非空字符串
)

# 使用自定义的 gpt-oss 模型名称来调用
response = client.chat.completions.create(
    model="gpt-oss", # 注意这里,我们使用自定义的 gpt-oss
    messages=[
        {"role": "user", "content": "请用一句话介绍一下LiteLLM。"},
    ],
    temperature=0.7,
)

print(response.choices[0].message.content)

总结

通过以上步骤,你已经成功地实现了一个 LiteLLM 代理服务器:

  1. 利用 Ollama 提供的能力,在本地运行大型语言模型。
  2. 通过 LiteLLM 代理,将 Ollama 模型封装成一个标准的 OpenAI 兼容 API。
  3. 使用自定义的名称 gpt-oss,让你的应用程序能够以一个统一且易于理解的方式来调用模型,而无需关心后端实际使用的是什么模型。

这种方法的好处在于,如果未来你想更换模型(比如从 gpt-oss 换成 Mistral),你只需要修改 config.yaml 文件,而无需改动你的应用程序代码。

写一个 hosts + Nginx 反代 的方法,让 Codex 以为它还在访问 OpenAI,但实际是访问你本地的 LiteLLM。这样完全无感知。