计算基于令牌的跟踪成本
推荐阅读
在深入本内容之前,阅读以下内容可能会有所帮助:
LangSmith 允许您根据 LLM 调用使用的令牌数量来跟踪追踪(traces)的成本。 这些成本会汇总到追踪级别和项目级别。
为了使 LangSmith 能够准确计算基于令牌的开销,您需要为追踪中的每次 LLM 调用提供令牌计数,并在运行元数据中发送 ls_provider 和 ls_model_name。
- 如果您正在使用 LangSmith Python 或 TS/JS SDK,请仔细阅读本指南。
- 如果您正在使用 LangChain Python 或 TS/JS,
ls_provider和ls_model_name以及 token 计数会自动发送至 LangSmith。
注意
如果 ls_model_name 在 extra.metadata 中不存在,则可能会使用 extra.invocation_metadata 中的其他字段来估算 token 数量并计算成本。以下字段按优先级顺序使用:
metadata.ls_model_nameinvocation_params.modelinvocation_params.model_nameinvocation_params.model_id(仅用于成本)invocation_params.model_path(仅用于成本)invocation_params.endpoint_name(仅用于成本)
一旦您开始向 LangSmith 发送正确的信息,就必须在 LangSmith 设置中配置模型价格映射。 为此,请导航至 模型价格映射。 在此处,您可以为每个模型和提供商组合设置每 token 的成本。此信息限定于特定工作区。
OpenAI 模型的多个默认条目已存在于模型定价映射中,您可以根据需要克隆并修改它们。

要创建模型定价地图中的新条目,请点击右上角的Add new model按钮。

在此,您可以指定以下字段:
Model Name: 模型的名称,也将用于命名模型定价映射中的条目。Prompt Cost: 该模型每个输入 token 的成本。此数字乘以提示中的 token 数量以计算提示成本。Completion Cost: 模型每个输出 token 的成本。该数字乘以完成中的 token 数量以计算完成成本。Model Activation Date: 定价适用的起始日期。Match Pattern: 用于匹配模型名称和提供者的正则表达式模式。此模式用于在运行元数据中匹配ls_model_name的值。Provider: 模型的提供方。此字段用于与运行元数据中的ls_provider值进行匹配。
一旦您设置了模型定价映射,LangSmith 将自动根据 LLM 调用中提供的令牌数量计算并聚合追踪的基于令牌的开销。
要查看上述示例的实际运行效果,您可以执行以下代码片段:
- Python
- TypeScript
from langsmith import traceable
inputs = [
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": "I'd like to book a table for two."},
]
output = {
"choices": [
{
"message": {
"role": "assistant",
"content": "Sure, what time would you like to book the table for?"
}
}
],
"usage_metadata": {
"input_tokens": 27,
"output_tokens": 13,
"total_tokens": 40,
},
}
@traceable(
run_type="llm",
metadata={"ls_provider": "my_provider", "ls_model_name": "my_model"}
)
def chat_model(messages: list):
return output
chat_model(inputs)
import { traceable } from "langsmith/traceable";
const messages = [
{ role: "system", content: "You are a helpful assistant." },
{ role: "user", content: "I'd like to book a table for two." },
];
const output = {
choices: [
{
message: {
role: "assistant",
content: "Sure, what time would you like to book the table for?",
},
},
],
usage_metadata: {
input_tokens: 27,
output_tokens: 13,
total_tokens: 40,
},
};
const chatModel = traceable(
async ({
messages,
}: {
messages: { role: string; content: string }[];
model: string;
}) => {
return output;
},
{ run_type: "llm", name: "chat_model", metadata: { ls_provider: "my_provider", ls_model_name: "my_model" } }
);
await chatModel({ messages });
在上面的代码片段中,我们在运行元数据中发送了 ls_provider 和 ls_model_name,以及 LLM 调用的 token 数量。 此信息与我们之前设置的模型定价地图条目相匹配。
生成的跟踪将包含基于LLM调用中提供的令牌计数和模型定价映射条目的基于令牌的开销。
