LiteLLM 提供了一个统一的接口,通过兼容 OpenAI 的一致性 API 调用 LLM 提供商。它既可以作为 Python SDK 直接嵌入到您的应用程序中,也可以作为 代理服务器 为客户端应用程序暴露一个兼容 OpenAI 的端点。
本指南向您展示如何使用 LangSmith 追踪 LiteLLM 调用:
- - LangSmith SDK (
@traceable),用于应用级追踪。 - - LiteLLM 内置的 langsmith 回调 用于模型级日志记录。
- - LiteLLM 代理 用于网关级追踪。
安装
使用 LiteLLM Python SDK 或 LiteLLM 代理时,请安装以下内容:
pip install litellm langsmith openai
npm install openai langsmith
本指南中的示例使用 OpenAI 模型,但您可以根据自己的用例安装必要的提供商。
使用 LiteLLM Python SDK
LiteLLM 支持两种向 LangSmith 发送追踪的方式,它们在不同的层级运行:
- - LangSmith SDK 追踪 与
LANGSMITH_TRACING=true通过 LangSmith SDK 启用应用级追踪。当您想追踪更广泛的业务逻辑、多步骤管道或使用@traceable. - - LiteLLM 的内置
langsmith回调 直接从 LiteLLM 记录模型调用。当您想专门追踪 LiteLLM 请求或运行异步应用程序时,推荐使用此方式。
使用 LANGSMITH_TRACING 和 traceable
您可以一起使用 LANGSMITH_TRACING=true 与 @traceable 在 LangSmith 中获得可预测的追踪。此方法确保 **输入** 和 **输出** 列反映您的函数参数和返回值,允许您保留完整的消息结构(包括 role 和 content)。它还可以在简单的同步脚本中可靠地运行,无需 asyncio 事件循环或额外的回调配置。
- 设置以下环境变量以启用 LiteLLM Python SDK 使用的 LangSmith 追踪:
在 LangSmith API 密钥 中创建 LangSmith UI.
根据您使用的提供商,您还需要设置 API 密钥:
- 将以下代码添加到您的脚本文件中:
from langsmith import traceable
from litellm import completion
@traceable(name="LiteLLM Chat Completion")
def run(messages):
response = completion(
model="gpt-4o",
messages=messages,
)
# Return the assistant message so the LangSmith UI shows role + content
return response["choices"][0]["message"]
messages = [
{"role": "user", "content": "Explain observability in LLM systems."}
]
result = run(messages)
print(result["content"])
@traceable 将您的函数作为 LangSmith 运行进行检测。当 LANGSMITH_TRACING=true LangSmith 会自动执行以下操作:
- - 在函数被调用时创建一次运行。
- - 将函数参数记录为运行的输入。
- - 执行函数体(包括 LiteLLM 调用)。
- - 将函数的返回值记录为运行的输出。
- - 捕获时间信息、错误和嵌套的跨度(如果有的话)。
在此示例中, messages 参数成为追踪的输入,返回的助手消息对象成为追踪的输出。LiteLLM 调用本身正常运行——@traceable 使用可观测性功能包装它,而不是修改其行为。此方法追踪的是您的应用逻辑,而不仅仅是模型调用。
使用 langsmith 回调记录 LiteLLM 调用
LiteLLM 可以使用其内置的 回调系统直接将追踪数据发送到 LangSmith。当您在异步 Python 服务中运行 LiteLLM 并且希望 LiteLLM 本身发出模型级日志时,这非常有用。
LiteLLM 回调在异步环境中运行。当使用 litellm.acompletion()进行异步调用时,您可以启用 langsmith 回调来记录成功的模型调用。
- 设置以下环境变量:
在 LangSmith UI 中创建 LangSmith API 密钥.
根据您使用的提供商,您还需要设置 API 密钥:
- 在最小化脚本中运行此功能:
- - 使用
acompletion()(异步 API)。 - - 使用
asyncio.run(...)运行以创建事件循环。 - - 设置
langsmith_batch_size = 1为立即刷新。
from litellm import acompletion
# Enable LiteLLM → LangSmith callback
litellm.success_callback = ["langsmith"]
# For short-lived scripts, send immediately instead of waiting for batch flush
litellm.langsmith_batch_size = 1
async def main():
response = await acompletion(
model="gpt-4o",
messages=[
{"role": "user", "content": "Explain observability in LLM systems."}
],
)
# Print the assistant message content for local verification
print(response["choices"][0]["message"]["content"])
# Allow time for background logger to flush before process exit
await asyncio.sleep(1)
if __name__ == "__main__":
asyncio.run(main())
回调将 LiteLLM 的模型请求和响应数据直接发送到 LangSmith,包括提供商元数据和令牌使用情况。由于 LiteLLM 控制负载, **输入** 和 **输出** 列可能包含与 @traceable example.
使用 LiteLLM 代理
LiteLLM 代理作为独立服务器运行,并提供 OpenAI 兼容的 API。
- 要使代理直接将请求日志记录到 LangSmith,请在
config.yaml:
model_list:
- model_name: gpt-4o
litellm_params:
model: openai/gpt-4o
litellm_settings:
callbacks: ["langsmith"]
- 中配置回调。在代理环境中设置环境变量:
- 启动代理:
litellm --config config.yaml
默认情况下,代理运行在 http://localhost:4000/v1。您的应用程序使用任何 OpenAI 兼容的客户端(Python、JavaScript、curl 等)调用它。
启用 callbacks: ["langsmith"] 后,代理直接将模型请求和响应数据发送到 LangSmith。客户端应用程序无需配置跟踪。
- 在另一个终端窗口中调用代理:
from openai import OpenAI
client = OpenAI(
base_url="http://localhost:4000/v1",
api_key="anything" # proxy may require a key but doesn't validate it by default
)
response = client.chat.completions.create(
model="gpt-4o",
messages=[
{"role": "user", "content": "What is LiteLLM?"}
],
)
print(response.choices[0].message.content)
const client = new OpenAI({
apiKey: "anything",
baseURL: "http://localhost:4000/v1",
});
const response = await client.chat.completions.create({
model: "gpt-4o",
messages: [
{ role: "user", content: "Explain LiteLLM tracing." }
],
});
console.log(response.choices[0].message.content);
客户端发送一个正常的聊天补全请求,代理处理提供商路由和响应格式化。
后续步骤
- - 在 LangSmith 中查看跟踪
- - 添加自定义元数据
- - 过滤和采样跟踪