使用月之暗面存储摘要历史记录时报错
问题描述:
我在调用ConversationSummaryBufferMemory时用的月之暗面模型,在保存历史信息时报这个错误:get_num_tokens_from_messages() is not presently implemented for model cl100k_base.不知道是什么情况
相关截图:

32
收起
正在回答
2回答
这是因为tiktoken并没有针对所有的大语言模型都配置了词表,在LLM的底层_get_encoding_model()找不到对应的词表导致的错误,如果想解决这个问题,可以重写下_get_encoding_model()这个方法,例如:
def _get_encoding_model(self) -> Tuple[str, tiktoken.Encoding]: model = "cl100k_base" encoding = tiktoken.get_encoding(model) return model, encoding
这样就可以解决问题啦(本质上是LangChain封装不完善+很多LLM没有提供词表导致的bug)~
慕婉清1503426
2025-03-23 22:26:34
可以重写ConversationSummaryBufferMemory类中的prune方法,改成以下这种,注意导入tiktoken,HumanMessage,AIMessage
() -> : buffer = .chat_memory.messages text = .join(msg.content msg buffer (msg, (HumanMessage, AIMessage))) encoding = tiktoken.get_encoding() curr_buffer_length = (encoding.encode(text)) curr_buffer_length > .max_token_limit: pruned_memory = [] curr_buffer_length > .max_token_limit: pruned_memory.append(buffer.pop()) curr_buffer_length = .llm.get_num_tokens_from_messages(buffer) .moving_summary_buffer = .predict_new_summary( pruned_memory, .moving_summary_buffer )
AI Agent 全栈开发工程师
- 参与学习 500 人
- 解答问题 404 个
全流程打造你自己的(Coze/Dify)低代码智能体开发平台;2025年入行正当时,企业急需,人才稀缺,竞争小;无论入行还是转行,首选口碑好课,门槛低、成长高
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星