计算基于令牌的跟踪成本
推荐阅读
在深入阅读本文档之前,阅读以下内容可能会有所帮助
LangSmith 允许您根据 LLM 调用中使用的令牌数量来跟踪跟踪的成本。成本汇总到跟踪级别和项目级别。
为了让 LangSmith 准确计算基于令牌的成本,您需要提供跟踪中每次 LLM 调用的令牌计数,并在运行元数据中发送 ls_provider
和 ls_model_name
。
- 如果您正在使用 LangSmith Python 或 TS/JS SDK,您应该仔细阅读本指南。
- 如果您正在使用 LangChain Python 或 TS/JS,
ls_provider
和ls_model_name
以及令牌计数将自动发送到 LangSmith。
注意
如果 ls_model_name
在 extra.metadata
中不存在,则可能会使用 extra.invocation_metadata
中的其他字段来估计令牌计数和计算成本。以下字段按优先级顺序使用
metadata.ls_model_name
invocation_params.model
invocation_params.model_name
invocation_params.model_id
(仅用于成本计算)invocation_params.model_path
(仅用于成本计算)invocation_params.endpoint_name
(仅用于成本计算)
一旦您将正确的信息发送到 LangSmith,您必须在 LangSmith 设置中设置模型定价地图。为此,请导航到模型定价地图。在这里,您可以设置每种模型和提供商组合的每个令牌成本。此信息的作用域限定为工作区。
模型定价地图中已经存在几个 OpenAI 模型的默认条目,您可以根据需要克隆和修改它们。
要在模型定价地图中创建新条目,请单击右上角的 添加新模型
按钮。
在这里,您可以指定以下字段
模型名称
:模型的名称,也将用于命名模型定价地图中的条目。Prompt 成本
:模型的每个输入令牌的成本。此数字乘以 prompt 中的令牌数量以计算 prompt 成本。Completion 成本
:模型的每个输出令牌的成本。此数字乘以 completion 中的令牌数量以计算 completion 成本。模型激活日期
:定价适用的日期。匹配模式
:用于匹配模型名称和提供商的正则表达式模式。这用于匹配运行元数据中ls_model_name
的值。提供商
:模型的提供商。这用于匹配运行元数据中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 调用的令牌计数。此信息与我们之前设置的模型定价地图条目相匹配。
生成的跟踪将包含基于令牌的成本,这些成本基于 LLM 调用中提供的令牌计数和模型定价地图条目。