LangSmith 允许您跟踪 LLM 运行的基于令牌的成本。成本汇总到跟踪和项目级别。 有两种方法可以跟踪成本:
  1. 从令牌计数和模型价格派生
  2. 直接指定为运行数据的一部分
在大多数情况下,在运行数据中包含令牌计数并在 LangSmith 中指定模型定价更容易。LangSmith 假设成本在令牌计数中是线性的,按令牌类型细分。对于少数具有非线性定价的模型(例如,超过 X 个输入令牌时每令牌价格发生变化),我们建议在客户端计算成本并将其作为运行数据的一部分发送。

发送令牌计数

为了让 LangSmith 准确计算 LLM 运行的基于令牌的成本,你需要提供令牌计数:
  • 如果你使用 LangSmith Python 或 TS/JS SDK 与 OpenAI 或 Anthropic 模型,内置包装器将自动向 LangSmith 发送令牌计数、模型提供商和模型名称数据。
  • 如果你使用 LangSmith SDK 与其他模型提供商,你应该仔细阅读本指南
  • 如果你使用 LangChain Python 或 TS/JS,对于大多数聊天模型集成,令牌计数、模型提供商和模型名称会自动发送到 LangSmith。如果有聊天模型集成缺少令牌计数,而底层 API 在模型响应中包含令牌计数,请在 LangChain 存储库中打开 GitHub 问题。
必须明确提供令牌计数以进行准确的成本跟踪。有关如何包含令牌计数的详细信息,请参阅提供令牌和成本信息指南。

指定模型名称

LangSmith 从运行元数据中的 ls_model_name 字段读取 LLM 模型名称。SDK 内置包装器和任何 LangChain 集成将自动为你处理指定此元数据。

设置模型价格

要从令牌计数和模型名称计算成本,我们需要知道你使用的模型的每令牌价格。LangSmith 为此提供了一个模型定价表。该表包含大多数 OpenAI、Anthropic 和 Gemini 模型的定价信息。你可以为其他模型添加价格,或覆盖默认模型的定价。 你可以为提示(输入)和完成(输出)令牌指定价格。如果需要,你可以提供更详细的价格细分。例如,某些模型提供商对多模态或缓存令牌有不同的定价。 将鼠标悬停在提示/完成价格旁边的 ... 上会显示按令牌类型的价格细分。例如,你可以看到 audioimage 提示令牌是否与默认文本提示令牌有不同的价格。 要在模型定价映射中创建新条目,请单击右上角的 Add new model 按钮。 New price map entry interface 在这里,你可以指定以下字段:
  • 模型名称:模型的人类可读名称。
  • 匹配模式:用于匹配模型名称的正则表达式模式。这用于匹配运行元数据中 ls_model_name 的值。
  • 提示(输入)价格:模型每 1M 输入令牌的成本。此数字乘以提示中的令牌数来计算提示成本。
  • 完成(输出)价格:模型每 1M 输出令牌的成本。此数字乘以完成中的令牌数来计算完成成本。
  • 提示(输入)价格细分(可选):每种不同类型的提示令牌的价格细分,例如 cache_readvideoaudio 等。
  • 完成(输出)价格细分(可选):每种不同类型的完成令牌的价格细分,例如 reasoningimage 等。
  • 模型激活日期(可选):定价适用的日期。只有在此日期之后的运行才会应用此模型价格。
  • 提供商(可选):模型的提供商。如果指定,这将与运行元数据中的 ls_provider 匹配。
一旦你设置了模型定价映射,LangSmith 将根据 LLM 调用中提供的令牌计数自动计算并聚合跟踪的基于令牌的成本。
请注意,对模型定价映射的更新不会反映在已记录的跟踪成本中。我们目前不支持回填模型定价更改。
对于指定价格细分,以下是 LangChain 聊天模型集成和 LangSmith SDK 包装器使用的详细令牌计数类型:
# Standardized
cache_read
cache_creation
reasoning
audio
image
video
# Anthropic-only
ephemeral_1h_input_tokens
ephemeral_5m_input_tokens

成本公式

运行的成本是从最具体到最不具体的令牌类型贪婪计算的。假设我们设置每 1M 提示令牌 2的价格,每1Mcacheread提示令牌的详细价格为2 的价格,每 1M `cache_read` 提示令牌的详细价格为 1,每 1M 完成令牌为 $3。如果我们上传以下使用元数据:
{
  "input_tokens": 20,
  "input_token_details": {"cache_read": 5},
  "output_tokens": 10,
  "output_token_details": {},
  "total_tokens": 30,
}
那么我们将按如下方式计算令牌成本:
# 也称为 prompt_cost
# 注意我们计算 cache_read 成本,然后对于任何
# 剩余的 input_tokens 我们应用默认输入价格。
input_cost = 5 * 1e-6 + (20 - 5) * 2e-6  # 3.5e-5
# 也称为 completion_cost
output_cost = 10 * 3e-6  # 3e-5
total_cost = input_cost + output_cost  # 6.5e-5

直接发送成本

如果你正在跟踪返回令牌成本信息的 LLM 调用,正在跟踪具有非基于令牌的定价方案的 API,或者在运行时具有准确的成本信息,你可以在跟踪时填充 usage_metadata 字典,而不是依赖 LangSmith 的内置成本计算。 请参阅本指南以了解如何手动为运行提供成本信息。
Connect these docs programmatically to Claude, VSCode, and more via MCP for real-time answers.