本页面介绍了 MetaGPT 的 Token 管理和成本跟踪系统,这些系统是处理大型语言模型(LLM)的关键组件。这些系统负责 Token 计数、成本计算、消息压缩以及跨不同 LLM 提供商的使用跟踪。
如果您正在寻找关于 LLM 提供商集成的通用信息,请参阅 LLM 集成;如果您需要有关缓存响应的内存系统的信息,请参阅 经验池。
MetaGPT 的 Token 管理和成本跟踪系统提供了:
来源: metagpt/provider/base_llm.py1-411 metagpt/utils/token_counter.py1-542
Token 计数系统能够跨不同的 LLM 提供商和模型精确地测量 Token 使用量。这对于成本跟踪和确保消息不超过 Token 限制至关重要。
MetaGPT 维护着各种 LLM 提供商的全面定价信息
Token 成本数据包含来自不同提供商的数百个模型的定价信息,结构为一个字典,以模型名称作为键,定价信息作为值。
来源: metagpt/utils/token_counter.py18-116 metagpt/utils/token_counter.py123-169 metagpt/utils/token_counter.py176-223 metagpt/utils/token_counter.py226-239 metagpt/utils/token_counter.py354-401
每个模型都有最大的 Token 限制,这些限制存储在 TOKEN_MAX 字典中
来源: metagpt/utils/token_counter.py242-349
Token 计数模块提供了几个关键函数:
count_message_tokens(messages, model) - 计算输入消息的 Token 数count_output_tokens(string, model) - 计算输出文本的 Token 数get_max_completion_tokens(messages, model, default) - 计算可用于完成的最大剩余 Token 数这些函数根据模型处理不同的 Token 化方法,并对 Claude 模型进行特殊处理,对不支持的模型提供回退机制。
来源: metagpt/utils/token_counter.py412-541
CostManager 类用于跟踪和计算跨多个 API 调用的 Token 使用量相关的成本。
CostManager 初始化时需要 Token 成本数据,并维护以下运行计数:
来源: metagpt/utils/token_counter.py1-542 metagpt/provider/base_llm.py122-143
当消息超出 Token 限制时,MetaGPT 可以应用不同的压缩策略来确保消息适合允许的限制。
该系统支持多种压缩策略,定义为一个枚举
这些策略决定了消息在超出 Token 限制时如何被压缩。
NO_COMPRESS - 不压缩(如果超出 Token 限制可能会失败)PRE_CUT_BY_TOKEN - 保留系统消息 + 最早的用户/助手消息,如果需要则截断内容PRE_CUT_BY_MSG - 保留系统消息 + 最早的用户/助手消息,如果需要则删除整个消息POST_CUT_BY_TOKEN - 保留系统消息 + 最新的用户/助手消息,如果需要则截断内容POST_CUT_BY_MSG - 保留系统消息 + 最新的用户/助手消息,如果需要则删除整个消息压缩过程始终保留系统消息,因为它们为 LLM 提供了关键的指令。
来源: metagpt/provider/base_llm.py338-410
Token 管理和成本跟踪系统通过 BaseLLM 类与所有 LLM 提供商集成。
每个 LLM 提供商都实现了以下方面的特定逻辑:
例如
来源: metagpt/provider/openai_api.py57-326 metagpt/provider/anthropic_api.py40-42 metagpt/provider/bedrock_api.py160-169 metagpt/provider/qianfan_api.py99-104 metagpt/provider/dashscope_api.py1-233
Token 管理和成本跟踪系统在使用任何 LLM 提供商时都能自动工作。
要启用消息压缩来处理长对话
来源: metagpt/provider/base_llm.py177-208 metagpt/provider/base_llm.py338-410
MetaGPT 的 Token 管理和成本跟踪系统提供了:
这些功能使得在 MetaGPT 框架内高效且经济地使用 LLM 成为可能。
刷新此 Wiki
最后索引时间2025 年 4 月 18 日(be6921)