如何通过LangChain获取LLM调用的输入与输出Token计数
在LangChain中获取LLM调用的输入/输出Token数量
情况1:调用OpenAI/Anthropic等云API模型
这类模型的官方API会直接返回Token使用统计,LangChain会将这部分数据存在响应的response_metadata字段中,直接提取即可:
from langchain.chat_models import ChatOpenAI from langchain.schema import HumanMessage # 初始化OpenAI聊天模型 llm = ChatOpenAI(model="gpt-3.5-turbo", temperature=0) # 构造输入消息 input_msg = [HumanMessage(content="请简述LangChain的核心价值")] # 调用模型获取响应 response = llm(input_msg) # 提取Token使用数据 usage = response.response_metadata["usage"] input_token_count = usage["prompt_tokens"] output_token_count = usage["completion_tokens"] print(f"输入Token数: {input_token_count}") print(f"输出Token数: {output_token_count}")
情况2:调用本地HuggingFace模型
本地模型没有API返回的自动统计,需要用对应模型的Tokenizer手动计算输入和输出的Token数量:
from langchain.llms import HuggingFacePipeline from transformers import AutoTokenizer, AutoModelForCausalLM, pipeline # 加载模型和Tokenizer(这里以gpt2为例,替换为你使用的模型) model_id = "gpt2" tokenizer = AutoTokenizer.from_pretrained(model_id) model = AutoModelForCausalLM.from_pretrained(model_id) # 构建LangChain兼容的Pipeline text_gen_pipeline = pipeline( "text-generation", model=model, tokenizer=tokenizer, max_new_tokens=150 ) llm = HuggingFacePipeline(pipeline=text_gen_pipeline) # 输入文本 input_text = "请简述LangChain的核心价值" # 计算输入Token数 input_token_count = len(tokenizer.encode(input_text)) # 获取模型响应 output_text = llm.predict(input_text) # 计算输出Token数 output_token_count = len(tokenizer.encode(output_text)) print(f"输入Token数: {input_token_count}") print(f"输出Token数: {output_token_count}")
补充说明
- 不同云服务商的模型(比如Anthropic Claude),
response_metadata中的字段名可能略有差异,但核心都是从API返回的usage数据中提取。 - 如果需要更精细的Token统计(比如按消息角色拆分),可以针对输入的每条消息单独用Tokenizer计算后求和。
内容的提问来源于stack exchange,提问作者jb62
相关产品推荐
相关产品推荐

