计算基于令牌的跟踪成本
推荐阅读
在深入研究此内容之前,阅读以下内容可能会有所帮助:
LangSmith 允许您根据用于 LLM 调用的令牌数量来跟踪跟踪的成本。 成本将汇总到跟踪级别和项目级别。
为了让 LangSmith 准确计算基于令牌的成本,您需要在跟踪中提供每个 LLM 调用的令牌计数,并发送ls_provider和ls_model_name在 Run metadata.
- 如果您使用的是 LangSmith Python 或 TS/JS SDK,则应仔细阅读本指南。
- 如果你使用的是 LangChain Python 或 TS/JS,
ls_provider和ls_model_name以及令牌计数会自动发送到 LangSmith.
注意
如果ls_model_name不存在于extra.metadata,则其他字段可能会从extra.invocation_metadata用于估算 Token 数量和计算 Cost。以下字段按优先顺序使用:
metadata.ls_model_nameinvocation_params.modelinvocation_params.model_nameinvocation_params.model_id(仅针对成本)invocation_params.model_path(仅针对成本)invocation_params.endpoint_name(仅针对成本)
向 LangSmith 发送正确的信息后,必须在 LangSmith 设置中设置模型定价图。 为此,请导航到模型定价地图。 在这里,您可以为每个模型和提供商组合设置每个令牌的成本。此信息的范围限定为工作区。
模型定价图中已经存在 OpenAI 模型的几个默认条目,您可以根据需要克隆和修改这些条目。

要在模型定价映射中创建新条目,请单击Add new model按钮。

在这里,您可以指定以下字段:
Model Name:模型的名称,也将用于命名模型定价地图中的条目。Prompt Cost:模型的每个输入令牌的成本。此数字乘以 Prompt 中的令牌数量,以计算 Prompt 成本。Completion Cost:模型的每个输出令牌的成本。此数字乘以完成中的标记数量,以计算完成成本。Model Activation Date:定价适用的起始日期。Match Pattern:用于匹配模型名称和提供程序的正则表达式模式。这用于匹配ls_model_name在 Run metadata.Provider:模型的提供程序。这用于匹配ls_provider在 Run metadata.
设置模型定价映射后,LangSmith 将根据 LLM 调用中提供的令牌计数自动计算和汇总基于令牌的跟踪成本。
要查看上面的示例的实际效果,您可以执行以下代码片段:
- 蟒
- 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在 run 元数据中,以及 LLM 调用的令牌计数。
此信息与我们之前设置的模型定价映射条目匹配。
生成的跟踪将包含基于 LLM 调用中提供的令牌计数和模型定价映射条目的基于令牌的成本。
