Langchain, OpenAI SDK, LlamaIndex, Instructor, Curl 示例
LiteLLM Proxy 是 OpenAI 兼容 的,并支持以下功能:
- /chat/completions
- /embeddings
- /completions
- /image/generations
- /moderations
- /audio/transcriptions
- /audio/speech
- Assistants API 端点
- Batches API 端点
- Fine-Tuning API 端点
LiteLLM Proxy 是 Azure OpenAI 兼容 的:
- /chat/completions
- /completions
- /embeddings
LiteLLM Proxy 是 Anthropic 兼容 的:
- /messages
LiteLLM Proxy 是 Vertex AI 兼容 的:
本文档涵盖:
- /chat/completion
- /embedding
这些是 精选示例。LiteLLM Proxy 是 OpenAI 兼容 的,它可以与任何调用 OpenAI 的项目一起使用。只需更改 base_url
、api_key
和 model
。
要传递特定于提供者的参数,请点击此处
要删除不支持的参数(例如,使用 librechat 的 bedrock 的 frequency_penalty),请点击此处
输入、输出、异常都映射到所有支持模型的 OpenAI 格式
如何向代理发送请求,传递元数据,允许用户传递他们的 OpenAI API 密钥
/chat/completions
请求格式
- OpenAI Python v1.0.0+
- AzureOpenAI Python
- LlamaIndex
- Curl 请求
- Langchain
- Langchain JS
- OpenAI JS
- Anthropic Python SDK
- Mistral Python SDK
- Instructor
设置 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)
设置 extra_body={"metadata": { }}
为你想要传递的 metadata
import openai
client = openai.AzureOpenAI(
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)
import os, dotenv
from llama_index.llms import AzureOpenAI
from llama_index.embeddings import AzureOpenAIEmbedding
from llama_index import VectorStoreIndex, SimpleDirectoryReader, ServiceContext
llm = AzureOpenAI(
engine="azure-gpt-3.5", # litellm proxy 上的 model_name
temperature=0.0,
azure_endpoint="http://0.0.0.0:4000", # litellm proxy 端点
api_key="sk-1234", # litellm proxy API 密钥
api_version="2023-07-01-preview",
)
embed_model = AzureOpenAIEmbedding(
deployment_name="azure-embedding-model",
azure_endpoint="http://0.0.0.0:4000",
api_key="sk-1234",
api_version="2023-07-01-preview",
)
documents = SimpleDirectoryReader("llama_index_data").load_data()
service_context = ServiceContext.from_defaults(llm=llm, embed_model=embed_model)
index = VectorStoreIndex.from_documents(documents, service_context=service_context)
query_engine = index.as_query_engine()
response = query_engine.query("作者小时候做了什么?")
print(response)
在请求体中传递 metadata
```shell
curl --location 'http://0.0.0.0:4000/chat/completions' \
--header 'Content-Type: application/json' \
--data '{
"model": "gpt-3.5-turbo",
"messages": [
{
"role": "user",
"content": "你是什么LLM"
}
],
"metadata": {
"generation_name": "ishaan-测试生成",
"generation_id": "gen-id22",
"trace_id": "trace-id22",
"trace_user_id": "用户-id2"
}
}'
from langchain.chat_models import ChatOpenAI
from langchain.prompts.chat import (
ChatPromptTemplate,
HumanMessagePromptTemplate,
SystemMessagePromptTemplate,
)
from langchain.schema import HumanMessage, SystemMessage
import os
os.environ["OPENAI_API_KEY"] = "anything"
chat = ChatOpenAI(
openai_api_base="http://0.0.0.0:4000",
model = "gpt-3.5-turbo",
temperature=0.1,
extra_body={
"metadata": {
"generation_name": "ishaan-generation-langchain-client",
"generation_id": "langchain-client-gen-id22",
"trace_id": "langchain-client-trace-id22",
"trace_user_id": "langchain-client-user-id2"
}
}
)
messages = [
SystemMessage(
content="You are a helpful assistant that im using to make a test request to."
),
HumanMessage(
content="test from litellm. tell me why it's amazing in 1 sentence"
),
]
response = chat(messages)
print(response)
import { ChatOpenAI } from "@langchain/openai";
const model = new ChatOpenAI({
modelName: "gpt-4",
openAIApiKey: "sk-1234",
modelKwargs: {"metadata": "hello world"} // 👈 PASS Additional params here
}, {
basePath: "http://0.0.0.0:4000",
});
const message = await model.invoke("Hi there!");
console.log(message);
const { OpenAI } = require('openai');
const openai = new OpenAI({
apiKey: "sk-1234", // This is the default and can be omitted
baseURL: "http://0.0.0.0:4000"
});
async function main() {
const chatCompletion = await openai.chat.completions.create({
messages: [{ role: 'user', content: 'Say this is a test' }],
model: 'gpt-3.5-turbo',
}, {"metadata": {
"generation_name": "ishaan-generation-openaijs-client",
"generation_id": "openaijs-client-gen-id22",
"trace_id": "openaijs-client-trace-id22",
"trace_user_id": "openaijs-client-user-id2"
}});
}
main();
import os
from anthropic import Anthropic
client = Anthropic(
base_url="http://localhost:4000", # proxy endpoint
api_key="sk-s4xN1IiLTCytwtZFJaYQrA", # litellm proxy virtual key
)
message = client.messages.create(
max_tokens=1024,
messages=[
{
"role": "user",
"content": "Hello, Claude",
}
],
model="claude-3-opus-20240229",
)
print(message.content)
import os
from mistralai.client import MistralClient
from mistralai.models.chat_completion import ChatMessage
client = MistralClient(api_key="sk-1234", endpoint="http://0.0.0.0:4000")
chat_response = client.chat(
model="mistral-small-latest",
messages=[
{"role": "user", "content": "this is a test request, write a short poem"}
],
)
print(chat_response.choices[0].message.content)
from openai import OpenAI
import instructor
from pydantic import BaseModel
my_proxy_api_key = "" # e.g. sk-1234 - LITELLM KEY
my_proxy_base_url = "" # e.g. http://0.0.0.0:4000 - LITELLM PROXY BASE URL
# This enables response_model keyword
# from client.chat.completions.create
## WORKS ACROSS OPENAI/ANTHROPIC/VERTEXAI/ETC. - all LITELLM SUPPORTED MODELS!
client = instructor.from_openai(OpenAI(api_key=my_proxy_api_key, base_url=my_proxy_base_url))
class UserDetail(BaseModel):
name: str
age: int
user = client.chat.completions.create(
model="gemini-pro-flash",
response_model=UserDetail,
messages=[
{"role": "user", "content": "Extract Jason is 25 years old"},
]
)
assert isinstance(user, UserDetail)
assert user.name == "Jason"
assert user.age == 25
响应格式
{
"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
- SDK
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"
}'
from openai import OpenAI
client = OpenAI(
api_key="sk-1234", # [OPTIONAL] set if you set one on proxy, else set ""
base_url="http://0.0.0.0:4000",
)
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"],
},
}
}
]
messages = [{"role": "user", "content": "What's the weather like in Boston today?"}]
completion = client.chat.completions.create(
model="gpt-4o", # use 'model_name' from config.yaml
messages=messages,
tools=tools,
tool_choice="auto"
)
print(completion)
/embeddings
请求格式
输入、输出和异常均映射到OpenAI格式,适用于所有支持的模型
- OpenAI Python v1.0.0+
- Curl请求
- Langchain嵌入
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)
curl --location 'http://0.0.0.0:4000/embeddings' \
--header 'Content-Type: application/json' \
--data ' {
"model": "text-embedding-ada-002",
"input": ["write a litellm poem"]
}'
from langchain.embeddings import OpenAIEmbeddings
embeddings = OpenAIEmbeddings(model="sagemaker-embeddings", openai_api_base="http://0.0.0.0:4000", openai_api_key="temp-key")
text = "This is a test document."
query_result = embeddings.embed_query(text)
print(f"SAGEMAKER EMBEDDINGS")
print(query_result[:5])
embeddings = OpenAIEmbeddings(model="bedrock-embeddings", openai_api_base="http://0.0.0.0:4000", openai_api_key="temp-key")
text = "This is a test document."
query_result = embeddings.embed_query(text)
print(f"BEDROCK EMBEDDINGS")
print(query_result[:5])
embeddings = OpenAIEmbeddings(model="bedrock-titan-embeddings", openai_api_base="http://0.0.0.0:4000", openai_api_key="temp-key")
text = "This is a test document."
query_result = embeddings.embed_query(text)
print(f"TITAN EMBEDDINGS")
print(query_result[:5])
响应格式
{
"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格式,适用于所有支持的模型
- OpenAI Python v1.0.0+
- Curl请求
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)
curl --location 'http://0.0.0.0:4000/moderations' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer sk-1234' \
--data '{"input": "Sample text goes here", "model": "text-moderation-stable"}'
响应格式
{
"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代理服务器
- OpenAI v1.0.0+
- LibreChat
- ContinueDev
- Aider
- AutoGen
- guidance
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)
启动LiteLLM代理
litellm --model gpt-3.5-turbo
#INFO: 代理运行在http://0.0.0.0:4000
1. 克隆仓库
git clone https://github.com/danny-avila/LibreChat.git
2. 修改Librechat的docker-compose.yml
LiteLLM代理运行在端口4000
,将4000
设置为下面的代理
OPENAI_REVERSE_PROXY=http://host.docker.internal:4000/v1/chat/completions
3. 在Librechat的.env
中保存假的OpenAI密钥
将Librechat的.env.example
复制到.env
并覆盖默认的OPENAI_API_KEY(默认情况下需要用户传递密钥)。
OPENAI_API_KEY=sk-1234
4. 运行LibreChat:
docker compose up
Continue-Dev将ChatGPT引入VSCode。查看如何在这里安装。
在config.py中设置此模型为默认模型。
default=OpenAI(
api_key="IGNORED",
model="fake-model-name",
context_length=2048, # 如果需要,根据你的模型自定义
api_base="http://localhost:4000" # 你的代理服务器url
),
感谢@vividfog提供的教程。
$ pip install aider
$ aider --openai-api-base http://0.0.0.0:4000 --openai-api-key fake-key
pip install pyautogen
from autogen import AssistantAgent, UserProxyAgent, oai
config_list=[
{
"model": "my-fake-model",
"api_base": "http://localhost:4000", #litellm兼容的端点
"api_type": "open_ai",
"api_key": "NULL", # 只是一个占位符
}
]
response = oai.Completion.create(config_list=config_list, prompt="Hi")
print(response) # 运行正常
llm_config={
"config_list": config_list,
}
assistant = AssistantAgent("assistant", llm_config=llm_config)
user_proxy = UserProxyAgent("user_proxy")
user_proxy.initiate_chat(assistant, message="绘制META和TESLA股票价格变化的年图。", config_list=config_list)
感谢@victordibia提供的教程。
注意: Guidance发送额外的参数,如stop_sequences
,可能会导致某些模型失败,如果它们不支持这些参数。
修复: 使用--drop_params
标志启动你的代理
litellm --model ollama/codellama --temperature 0.3 --max_tokens 2048 --drop_params
import guidance
# 将api_base设置为你的代理
# 将api_key设置为任何值
gpt4 = guidance.llms.OpenAI("gpt-4", api_base="http://0.0.0.0:4000", api_key="anything")
experts = guidance('''
{{#system~}}
你是一个有帮助且简洁的助手。
{{~/system}}
{{#user~}}
我想要一个对以下问题的回答:
{{query}}
列出3位世界级专家(过去或现在),他们非常适合回答这个问题?
不要回答问题。
{{~/user}}
{{#assistant~}}
{{gen 'expert_names' temperature=0 max_tokens=300}}
{{~/assistant}}
''', llm=gpt4)
result = experts(query='如何提高生产力?')
print(result)
与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"
- OpenAI Python SDK
- Curl
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
)
)
]
curl --location 'http://localhost:4000/chat/completions' \
--header 'Authorization: Bearer sk-1234' \
--header 'Content-Type: application/json' \
--data '{
"model": "llama3,gpt-3.5-turbo",
"max_tokens": 10,
"user": "litellm2",
"messages": [
{
"role": "user",
"content": "litellm正在变得更好吗"
}
]
}'
预期响应格式
当model
作为列表传递时获取响应列表
[
{
"id": "chatcmpl-3dbd5dd8-7c82-4ca3-bf1f-7c26f497cf2b",
"choices": [
{
"finish_reason": "length",
"index": 0,
"message": {
"content": "上古卷轴IV:湮没!\n\n发布",
"role": "assistant"
}
}
],
"created": 1715459876,
"model": "groq/llama3-8b-8192",
"object": "chat.completion",
"system_fingerprint": "fp_179b0f92c9",
"usage": {
"completion_tokens": 10,
"prompt_tokens": 12,
"total_tokens": 22
}
},
{
"id": "chatcmpl-9NnldUfFLmVquFHSX4yAtjCw8PGei",
"choices": [
{
"finish_reason": "length",
"index": 0,
"message": {
"content": "TES4可能指的是上古卷轴IV:",
"role": "assistant"
}
}
],
"created": 1715459877,
"model": "gpt-3.5-turbo-0125",
"object": "chat.completion",
"system_fingerprint": null,
"usage": {
"completion_tokens": 10,
"prompt_tokens": 9,
"total_tokens": 19
}
}
]
传递用户LLM API密钥,备用模型
允许您的终端用户传递他们的模型列表、API基础、OpenAI API密钥(任何LiteLLM支持的提供商)来进行请求
注意 这与虚拟密钥无关。这是当你想要传递用户实际的LLM API密钥时。
你可以传递一个litellm.RouterConfig
作为user_config
,所有支持的参数请参见https://github.com/BerriAI/litellm/blob/main/litellm/types/router.py
- OpenAI Python
- OpenAI JS
第一步:定义用户模型列表及配置
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)
第一步:定义用户模型列表和配置
const os = require('os');
const userConfig = {
model_list: [
{
model_name: 'user-azure-instance',
litellm_params: {
model: 'azure/chatgpt-v-2',
api_key: process.env.AZURE_API_KEY,
api_version: process.env.AZURE_API_VERSION,
api_base: process.env.AZURE_API_BASE,
timeout: 10,
},
tpm: 240000,
rpm: 1800,
},
{
model_name: 'user-openai-instance',
litellm_params: {
model: 'gpt-3.5-turbo',
api_key: process.env.OPENAI_API_KEY,
timeout: 10,
},
tpm: 240000,
rpm: 1800,
},
],
num_retries: 2,
allowed_fails: 3,
fallbacks: [
{
'user-azure-instance': ['user-openai-instance']
}
]
};
第二步:将 user_config
作为参数传递给 openai.chat.completions.create
const { OpenAI } = require('openai');
const openai = new OpenAI({
apiKey: "sk-1234",
baseURL: "http://0.0.0.0:4000"
});
async function main() {
const chatCompletion = await openai.chat.completions.create({
messages: [{ role: 'user', content: '说这是一个测试' }],
model: 'gpt-3.5-turbo',
user_config: userConfig // # 👈 用户配置
});
}
main();
传递用户 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)
更多示例:
- Azure 凭据
- OpenAI JS
通过 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)
对于 JS,OpenAI 客户端接受在 create(..)
主体中正常传递参数。
const { OpenAI } = require('openai');
const openai = new OpenAI({
apiKey: "sk-1234",
baseURL: "http://0.0.0.0:4000"
});
async function main() {
const chatCompletion = await openai.chat.completions.create({
messages: [{ role: 'user', content: '说这是一个测试' }],
model: 'gpt-3.5-turbo',
api_key: "my-bad-key" // 👈 用户密钥
});
}
main();