Skip to main content

Langchain, OpenAI SDK, LlamaIndex, Instructor, Curl 示例

LiteLLM Proxy 是 OpenAI 兼容 的,并支持以下功能:

LiteLLM Proxy 是 Azure OpenAI 兼容 的:

  • /chat/completions
  • /completions
  • /embeddings

LiteLLM Proxy 是 Anthropic 兼容 的:

  • /messages

LiteLLM Proxy 是 Vertex AI 兼容 的:

本文档涵盖:

  • /chat/completion
  • /embedding

这些是 精选示例。LiteLLM Proxy 是 OpenAI 兼容 的,它可以与任何调用 OpenAI 的项目一起使用。只需更改 base_urlapi_keymodel

要传递特定于提供者的参数,请点击此处

要删除不支持的参数(例如,使用 librechat 的 bedrock 的 frequency_penalty),请点击此处

info

输入、输出、异常都映射到所有支持模型的 OpenAI 格式

如何向代理发送请求,传递元数据,允许用户传递他们的 OpenAI API 密钥

/chat/completions

请求格式

设置 extra_body={"metadata": { }} 为你想要传递的 metadata

import openai
client = openai.OpenAI(
api_key="anything",
base_url="http://0.0.0.0:4000"
)

# 请求发送到 litellm proxy 上设置的模型,`litellm --model`
response = client.chat.completions.create(
model="gpt-3.5-turbo",
messages = [
{
"role": "user",
"content": "这是一个测试请求,写一首短诗"
}
],
extra_body={ # 传递任何特定于提供者的参数,如果不被 openai 支持,https://docs.litellm.ai/docs/completion/input#provider-specific-params
"metadata": { # 👈 用于记录额外参数(例如,到 langfuse)
"generation_name": "ishaan-generation-openai-client",
"generation_id": "openai-client-gen-id22",
"trace_id": "openai-client-trace-id22",
"trace_user_id": "openai-client-user-id2"
}
}
)

print(response)

响应格式

{
"id": "chatcmpl-8c5qbGTILZa1S4CK3b31yj5N40hFN",
"choices": [
{
"finish_reason": "stop",
"index": 0,
"message": {
"content": "作为一个AI语言模型,我没有物理形态或个人喜好。然而,我被编程来协助各种主题并提供广泛主题的信息。有什么具体的事情需要帮助吗?",
"role": "assistant"
}
}
],
"created": 1704089632,
"model": "gpt-35-turbo",
"object": "chat.completion",
"system_fingerprint": null,
"usage": {
"completion_tokens": 47,
"prompt_tokens": 12,
"total_tokens": 59
},
"_response_ms": 1753.426
}

函数调用

以下是使用代理进行函数调用的一些示例。

你可以使用代理进行函数调用,支持任何与OpenAI兼容的项目。

curl http://0.0.0.0:4000/v1/chat/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $OPTIONAL_YOUR_PROXY_KEY" \
-d '{
"model": "gpt-4-turbo",
"messages": [
{
"role": "user",
"content": "What'\''s the weather like in Boston today?"
}
],
"tools": [
{
"type": "function",
"function": {
"name": "get_current_weather",
"description": "Get the current weather in a given location",
"parameters": {
"type": "object",
"properties": {
"location": {
"type": "string",
"description": "The city and state, e.g. San Francisco, CA"
},
"unit": {
"type": "string",
"enum": ["celsius", "fahrenheit"]
}
},
"required": ["location"]
}
}
}
],
"tool_choice": "auto"
}'

/embeddings

请求格式

输入、输出和异常均映射到OpenAI格式,适用于所有支持的模型

import openai
from openai import OpenAI

# 将base_url设置为您的代理服务器
# 将api_key发送至代理服务器
client = OpenAI(api_key="<proxy-api-key>", base_url="http://0.0.0.0:4000")

response = client.embeddings.create(
input=["hello from litellm"],
model="text-embedding-ada-002"
)

print(response)

响应格式

{
"object": "list",
"data": [
{
"object": "embedding",
"embedding": [
0.0023064255,
-0.009327292,
....
-0.0028842222,
],
"index": 0
}
],
"model": "text-embedding-ada-002",
"usage": {
"prompt_tokens": 8,
"total_tokens": 8
}
}

/moderations

请求格式

输入、输出和异常均映射到OpenAI格式,适用于所有支持的模型

import openai
from openai import OpenAI

# 将base_url设置为您的代理服务器
# 将api_key发送至代理服务器
client = OpenAI(api_key="<proxy-api-key>", base_url="http://0.0.0.0:4000")

response = client.moderations.create(
input="hello from litellm",
model="text-moderation-stable"
)

print(response)

响应格式

{
"id": "modr-8sFEN22QCziALOfWTa77TodNLgHwA",
"model": "text-moderation-007",
"results": [
{
"categories": {
"harassment": false,
"harassment/threatening": false,
"hate": false,
"hate/threatening": false,
"self-harm": false,
"self-harm/instructions": false,
"self-harm/intent": false,
"sexual": false,
"sexual/minors": false,
"violence": false,
"violence/graphic": false
},
"category_scores": {
"harassment": 0.000019947197870351374,
"harassment/threatening": 5.5971017900446896e-6,
"hate": 0.000028560316422954202,
"hate/threatening": 2.2631787999216613e-8,
"self-harm": 2.9121162015144364e-7,
"self-harm/instructions": 9.314219084899378e-8,
"self-harm/intent": 8.093739012338119e-8,
"sexual": 0.00004414955765241757,
"sexual/minors": 0.0000156943697220413,
"violence": 0.00022354527027346194,
"violence/graphic": 8.804164281173144e-6
},
"flagged": false
}
]
}

与兼容OpenAI的项目一起使用

base_url设置为LiteLLM代理服务器

import openai
client = openai.OpenAI(
api_key="anything",
base_url="http://0.0.0.0:4000"
)

# 请求发送到litellm代理上设置的模型,`litellm --model`
response = client.chat.completions.create(model="gpt-3.5-turbo", messages = [
{
"role": "user",
"content": "这是一个测试请求,写一首短诗"
}
])

print(response)

与Vertex、Boto3、Anthropic SDK一起使用(原生格式)

👉 这里是使用litellm代理与Vertex、boto3、Anthropic SDK的方法 - 使用原生格式

高级

(测试版) 批量完成 - 传递多个模型

当你想向N个模型发送1个请求时使用此功能

预期请求格式

将模型作为逗号分隔的模型字符串传递。例如 "model"="llama3,gpt-3.5-turbo"

此请求将发送到litellm代理配置.yaml上的以下模型组

  • model_name="llama3"
  • model_name="gpt-3.5-turbo"
import openai

client = openai.OpenAI(api_key="sk-1234", base_url="http://0.0.0.0:4000")

response = client.chat.completions.create(
model="gpt-3.5-turbo,llama3",
messages=[
{"role": "user", "content": "这是一个测试请求,写一首短诗"}
],
)

print(response)

预期响应格式

model作为列表传递时获取响应列表

[
ChatCompletion(
id='chatcmpl-9NoYhS2G0fswot0b6QpoQgmRQMaIf',
choices=[
Choice(
finish_reason='stop',
index=0,
logprobs=None,
message=ChatCompletionMessage(
content='在我灵魂深处,火花点燃\n一束光芒如此纯净明亮\n它跳跃舞动,拒绝熄灭\n一团希望之火,直冲云霄\n\n它温暖我的心,充满喜悦\n提醒我,在黑暗中,有光明轻吻\n所以我紧握这火焰,这指引之光\n让它引领我穿越最深的黑夜。',
role='assistant',
function_call=None,
tool_calls=None
)
)
],
created=1715462919,
model='gpt-3.5-turbo-0125',
object='chat.completion',
system_fingerprint=None,
usage=CompletionUsage(
completion_tokens=83,
prompt_tokens=17,
total_tokens=100
)
),
ChatCompletion(
id='chatcmpl-4ac3e982-da4e-486d-bddb-ed1d5cb9c03c',
choices=[
Choice(
finish_reason='stop',
index=0,
logprobs=None,
message=ChatCompletionMessage(
content="一个测试请求,我很高兴!\n这里有一首短诗,只为给你:\n\n月光在海面上起舞,\n一条光之路,供你一睹。\n星星高挂,闪烁表演,\n一个奇妙的夜晚,让所有人知晓。\n\n世界静谧,除了夜晚,\n一片宁静,柔和的光。\n世界充满了稀有的美丽,\n一个无与伦比的宝藏。\n\n我希望你喜欢这个小测试,\n一首由奇思妙想和玩笑诞生的诗。\n如果有任何其他需要,请告诉我!",
role='assistant',
function_call=None,
tool_calls=None
)
)
],
created=1715462919,
model='groq/llama3-8b-8192',
object='chat.completion',
system_fingerprint='fp_a2c8d063cb',
usage=CompletionUsage(
completion_tokens=120,
prompt_tokens=20,
total_tokens=140
)
)
]

传递用户LLM API密钥,备用模型

允许您的终端用户传递他们的模型列表、API基础、OpenAI API密钥(任何LiteLLM支持的提供商)来进行请求

注意 这与虚拟密钥无关。这是当你想要传递用户实际的LLM API密钥时。

info

你可以传递一个litellm.RouterConfig作为user_config,所有支持的参数请参见https://github.com/BerriAI/litellm/blob/main/litellm/types/router.py

第一步:定义用户模型列表及配置

import os

user_config = {
'model_list': [
{
'model_name': '用户-azure-实例',
'litellm_params': {
'model': 'azure/chatgpt-v-2',
'api_key': os.getenv('AZURE_API_KEY'),
'api_version': os.getenv('AZURE_API_VERSION'),
'api_base': os.getenv('AZURE_API_BASE'),
'timeout': 10,
},
'tpm': 240000,
'rpm': 1800,
},
{
'model_name': '用户-openai-实例',
'litellm_params': {
'model': 'gpt-3.5-turbo',
'api_key': os.getenv('OPENAI_API_KEY'),
'timeout': 10,
},
'tpm': 240000,
'rpm': 1800,
},
],
'num_retries': 2,
'allowed_fails': 3,
'fallbacks': [
{
'用户-azure-实例': ['用户-openai-实例']
}
]
}

第二步:在 extra_body 中发送 user_config

import openai
client = openai.OpenAI(
api_key="sk-1234",
base_url="http://0.0.0.0:4000"
)

# 发送请求到 `user-azure-instance`
response = client.chat.completions.create(model="user-azure-instance", messages = [
{
"role": "user",
"content": "这是一个测试请求,写一首短诗"
}
],
extra_body={
"user_config": user_config
}
) # 👈 用户配置

print(response)

传递用户 LLM API 密钥/API 基础

允许用户传递他们的 OpenAI API 密钥/API 基础(任何 LiteLLM 支持的提供商)来进行请求

以下是如何操作:

1. 为提供商启用可配置的客户端身份验证凭据

model_list:
- model_name: "fireworks_ai/*"
litellm_params:
model: "fireworks_ai/*"
configurable_clientside_auth_params: ["api_base"]

指定任何/所有您希望用户能够配置的身份验证参数:

  • api_base
  • api_key
  • base_url

(查看提供商文档 以获取特定于提供商的身份验证参数 - 例如 vertex_project

2. 测试它!

import openai
client = openai.OpenAI(
api_key="sk-1234",
base_url="http://0.0.0.0:4000"
)

# 请求发送到 litellm 代理上设置的模型,`litellm --model`
response = client.chat.completions.create(model="gpt-3.5-turbo", messages = [
{
"role": "user",
"content": "这是一个测试请求,写一首短诗"
}
],
extra_body={"api_key": "my-bad-key"}) # 👈 用户密钥

print(response)

更多示例:

通过 OpenAI 客户端中的 extra_body 参数传递 litellm_params(例如 api_key、api_base 等)。

import openai
client = openai.OpenAI(
api_key="sk-1234",
base_url="http://0.0.0.0:4000"
)

# 请求发送到 litellm 代理上设置的模型,`litellm --model`
response = client.chat.completions.create(model="gpt-3.5-turbo", messages = [
{
"role": "user",
"content": "这是一个测试请求,写一首短诗"
}
],
extra_body={
"api_key": "my-azure-key",
"api_base": "my-azure-base",
"api_version": "my-azure-version"
}) # 👈 用户密钥

print(response)