You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

LangSmith令牌计数异常:与OpenAI差异原因及修正方法咨询

LangSmith与OpenAI令牌计数差异及修正方法

1. 计数差异的核心原因

  • 格式标记遗漏:OpenAI的Chat模型会将对话内容包装成ChatML格式(包含<|im_start|>、<|im_end|>等特殊标记),tiktoken和OpenAI在线工具会统计这些标记的令牌数,但LangSmith默认计数逻辑可能未包含该部分,导致统计结果偏小。
  • 统计范围不同:LangSmith可能仅统计了纯用户输入文本,未覆盖系统提示词、工具调用元数据、对话历史上下文等完整请求内容;而tiktoken和OpenAI工具会计算整个请求的所有上下文令牌。
  • 编码模型/版本不一致:若LangSmith使用的tiktoken版本或编码模型(如未指定cl100k_base)与你本地/在线工具的不一致,会导致字符拆分规则不同,进而出现计数偏差。

2. 修正ChatOpenAI().invoke("Hello!")的LangSmith令牌计数方法

  • 指定统一编码模型:初始化ChatOpenAI时,明确绑定与OpenAI一致的编码模型,确保计数规则对齐:
    import tiktoken
    from langchain_openai import ChatOpenAI
    
    encoder = tiktoken.get_encoding("cl100k_base")
    llm = ChatOpenAI(tokenizer=encoder)
    response = llm.invoke("Hello!")
    
  • 开启完整上下文计数:在LangSmith项目设置中,找到「令牌计数」配置项,勾选「包含ChatML格式标记」或「完整请求上下文统计」选项(若存在),让LangSmith统计完整的请求内容令牌。
  • 自定义令牌计数回调:如果LangSmith默认配置无法满足需求,可编写自定义回调函数,用tiktoken手动计算令牌数并同步到LangSmith追踪:
    from langchain.callbacks.base import BaseCallbackHandler
    import tiktoken
    from langchain_openai import ChatOpenAI
    
    class TokenCountTracker(BaseCallbackHandler):
        def __init__(self):
            self.encoder = tiktoken.get_encoding("cl100k_base")
    
        def on_llm_start(self, serialized, prompts, **kwargs):
            input_tokens = sum(len(self.encoder.encode(p)) for p in prompts)
            # 将输入令牌数记录到LangSmith的trace中
            kwargs["run_manager"].add_tags([f"input_tokens:{input_tokens}"])
    
        def on_llm_end(self, response, **kwargs):
            output_tokens = sum(len(self.encoder.encode(gen.text)) for gen in response.generations[0])
            kwargs["run_manager"].add_tags([f"output_tokens:{output_tokens}"])
    
    # 使用带回调的LLM
    llm = ChatOpenAI(callbacks=[TokenCountTracker()])
    response = llm.invoke("Hello!")
    
  • 验证LangSmith配置:确认LangSmith中绑定的模型与你使用的ChatOpenAI模型一致(如gpt-3.5-turbo/gpt-4),不同模型对应的编码规则可能存在差异,需匹配对应编码模型。

内容的提问来源于stack exchange,提问作者Jakub Szlaur

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 16:10:56