用途
calling-llms 面向通过 liter-llm 发送聊天补全(chat completions)请求并路由到指定供应商的场景。当请求需要按 provider/model 前缀选择后端时使用本技能。
主要能力
- 通过 liter-llm 的客户端发送聊天请求。
- 按模型字符串的前缀进行供应商路由:前缀决定请求发往哪个后端。
- 支持通过 model_hint 在客户端构造时固定供应商,从而在每次调用时省略前缀。
- 提供类型化异常用于错误处理。
使用方式
首先构建 ChatCompletionRequest,然后用 client.chat(request) 发送。客户端通过 create_client(...) 创建。模型字符串格式为 provider/model,前缀选择后端。
示例代码:
import asyncio, json, os
from liter_llm import create_client
from liter_llm._internal_bindings import ChatCompletionRequest
async def main() -> None:
client = create_client(api_key=os.environ["OPENAI_API_KEY"])
request = ChatCompletionRequest.from_json(json.dumps({
"model": "openai/gpt-4o",
"messages": [
{"role": "system", "content": "You are concise."},
{"role": "user", "content": "Name three Rust crates for HTTP."},
],
}))
response = await client.chat(request)
print(response.choices[0].message.content)
asyncio.run(main())
供应商路由
模型字符串的前缀选择供应商;为每个后端分别构建请求:
ChatCompletionRequest.from_json('{"model":"anthropic/claude-sonnet-4-20250514","messages":[...]}')
ChatCompletionRequest.from_json('{"model":"google/gemini-2.0-flash","messages":[...]}')
ChatCompletionRequest.from_json('{"model":"groq/llama3-70b","messages":[...]}')
ChatCompletionRequest.from_json('{"model":"mistral/mistral-large-latest","messages":[...]}')
ChatCompletionRequest.from_json('{"model":"bedrock/anthropic.claude-v2","messages":[...]}')
在构造时设置 model_hint,可在每次调用时去掉前缀:
client = create_client(api_key="sk-...", model_hint="openai")
# the request model can now omit the provider prefix:
request = ChatCompletionRequest.from_json('{"model":"gpt-4o","messages":[...]}')
await client.chat(request) # routes to OpenAI
注意事项
- 密钥来自环境变量(OPENAI_API_KEY、ANTHROPIC_API_KEY 等);切勿硬编码。
- 既没有前缀、也没有 model_hint 时,路由会失败。
- Python 错误是 liter_llm 导出的类型化异常:AuthenticationError、RateLimitedError、BadRequestError、ContextWindowExceededError、ContentPolicyError、NotFoundError、ServerError、ServiceUnavailableError、LiterLlmTimeoutError、BudgetExceededError——全部是 LiterLlmError 的子类。
适用场景
需要在多个 LLM 供应商之间按前缀统一切换、或在同一代码路径中动态选择后端的 Python 异步调用场景。
限制
- 必须提供可用的供应商前缀或 model_hint,否则路由失败。
- 资料未提供收费、价格、平台等其它信息。