掌握聊天模型的令牌使用情况:轻松跟踪成本

104 阅读2分钟
# 掌握聊天模型的令牌使用情况:轻松跟踪成本

在将您的应用推向生产环境时,跟踪令牌使用情况以计算成本是一个重要的步骤。本文将指导您如何从LangChain模型调用中获取此信息,并提供实用的代码示例和解决方案建议。

## 引言

在使用聊天模型进行开发时,了解令牌使用情况不仅有助于优化模型使用效率,还能帮助您准确估算API的调用成本。在某些地区,网络限制可能会阻碍API的正常访问,为此,开发者可以考虑使用API代理服务进行稳定访问。本文将介绍如何使用LangChain库的功能来追踪令牌使用。

## 使用LangSmith进行跟踪

[LangSmith](https://www.langsmith.com/)是一个帮助跟踪您LLM应用内令牌使用情况的强大工具。您可以参考其[快速入门指南](https://www.langsmith.com/docs/quickstart)以更好地掌握其使用方法。

## 利用`AIMessage.usage_metadata`

许多模型提供商在聊天生成响应中返回令牌使用信息。当可用时,此信息将包含在由相应模型生成的`AIMessage`对象中。

以下是如何获取和使用这些信息的示例:

### OpenAI 示例

```python
# 使用API代理服务提高访问稳定性
from langchain_openai import ChatOpenAI

llm = ChatOpenAI(model="gpt-3.5-turbo-0125")
response = llm.invoke("hello")
print(response.usage_metadata)

输出示例:

{'input_tokens': 8, 'output_tokens': 9, 'total_tokens': 17}

Anthropic 示例

# 使用API代理服务提高访问稳定性
from langchain_anthropic import ChatAnthropic

llm = ChatAnthropic(model="claude-3-haiku-20240307")
response = llm.invoke("hello")
print(response.usage_metadata)

输出示例:

{'input_tokens': 8, 'output_tokens': 12, 'total_tokens': 20}

常见问题和解决方案

如何在流式传输时跟踪令牌

在使用流式传输时,某些提供商支持在消息流结束时返回令牌使用信息。以OpenAI为例,您可以通过设置stream_usage=True来启用此功能:

llm = ChatOpenAI(model="gpt-3.5-turbo-0125")
aggregate = None
for chunk in llm.stream("hello", stream_usage=True):
    print(chunk)
    aggregate = chunk if aggregate is None else aggregate + chunk

print(aggregate.content)
print(aggregate.usage_metadata)

总结和进一步学习资源

了解和监控令牌使用是优化应用的重要一步。您可以通过阅读LangChain文档OpenAI API文档来进一步扩展您的知识。

参考资料

如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!

---END---