引言
在将语言模型(LLMs)应用部署到生产环境时,跟踪token使用和计算成本是非常重要的一环。了解token的使用情况不仅能帮助优化应用性能,还能监控运行成本。在这篇文章中,我们将介绍如何通过LangChain和LangSmith来获取token使用的信息,并通过简单明确的代码示例来说明。
主要内容
使用LangSmith来跟踪Token使用
LangSmith是一个强大的工具,可帮助开发者在LLM应用中跟踪token使用。它提供了一些API特定的回调上下文管理器,可以用来追踪多个调用中的token使用。
使用回调
如果你的模型已经提供了这样的集成,可以直接使用这些callback context managers。但如果没有提供,你可以通过调整OpenAI回调管理器的实现来创建自定义的回调管理器。
OpenAI的使用示例
接下来,我们来看一个简单的示例,如何为单次Chat模型调用跟踪token使用。
from langchain_community.callbacks import get_openai_callback
from langchain_openai import OpenAI
llm = OpenAI(model_name="gpt-3.5-turbo-instruct")
# 使用API代理服务提高访问稳定性
with get_openai_callback() as cb:
result = llm.invoke("Tell me a joke")
print(result)
print("---")
print()
print(f"Total Tokens: {cb.total_tokens}")
print(f"Prompt Tokens: {cb.prompt_tokens}")
print(f"Completion Tokens: {cb.completion_tokens}")
print(f"Total Cost (USD): ${cb.total_cost}")
单次及多次调用追踪
单次调用
通过获取OpenAI的回调,在上下文管理器内的任何调用都会被跟踪。例如上面代码中,我们在调用llm.invoke时,使用了get_openai_callback来记录token信息。
多次调用
对于需要在链中进行多个调用的应用,这种方法同样适用。
from langchain_community.callbacks import get_openai_callback
from langchain_core.prompts import PromptTemplate
from langchain_openai import OpenAI
llm = OpenAI(model_name="gpt-3.5-turbo-instruct")
template = PromptTemplate.from_template("Tell me a joke about {topic}")
chain = template | llm
# 使用API代理服务提高访问稳定性
with get_openai_callback() as cb:
response = chain.invoke({"topic": "birds"})
print(response)
response = chain.invoke({"topic": "fish"})
print("--")
print(response)
print()
print("---")
print(f"Total Tokens: {cb.total_tokens}")
print(f"Prompt Tokens: {cb.prompt_tokens}")
print(f"Completion Tokens: {cb.completion_tokens}")
print(f"Total Cost (USD): ${cb.total_cost}")
常见问题和解决方案
流数据Token计数支持
当前的回调管理器并不支持流数据context中的token计数。如果需要在流数据context中准确计数tokens,可以考虑以下方法:
- 使用chat模型,如本指南中所述;
- 实现使用适当tokenizers的自定义回调处理器;
- 使用监测平台如LangSmith。
注意,当使用旧版语言模型进行流式处理时,token计数不会更新。
总结和进一步学习资源
了解如何跟踪token使用对优化应用和管理成本至关重要。通过LangChain和LangSmith,你可以轻松实现这一点。虽然在流数据context中支持有待增强,但现有方法已经为我们提供了强大的支持。为了进一步学习,你可以查阅以下资料:
参考资料
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---