错误描述
我最近使用RaptorPack进行了一些实验,一切看起来都正常。唯一的问题是RaptorPack的token计数器无法正常工作,因此我无法获得消耗了多少个令牌的准确指标。无论是嵌入令牌计数器还是llm计数器都无法正常工作。计数器始终保持为0。
我尝试了以下方法,对我来说对于只有一个令牌计数器的llm是有效的。我注意到如果我更改
token_counter = TokenCountingHandler(tokenizer=tiktoken.encoding_for_model("gpt-4-1106-preview").encode)
callbackManager = CallbackManager([token_counter])
llm=OpenAI(model="gpt-4-1106-preview", temperature=0, callback_manager=CallbackManager([token_counter]))
response = llm.complete("hello")
token_counter.total_llm_token_count
是否以错误的方式使用了回调管理器和令牌计数器?
版本
0.10.6
重现步骤
import tiktoken
from llama_index.core.callbacks import CallbackManager, TokenCountingHandler
embedding_token_counter = TokenCountingHandler(tokenizer=tiktoken.encoding_for_model("text-embedding-ada-002").encode)
token_counter = TokenCountingHandler(tokenizer=tiktoken.encoding_for_model("gpt-3.5-turbo").encode)
callbackManager = CallbackManager([token_counter])
custom_pack_google_doc_tree = RaptorPack(
documents=llama_index_documents,
embed_model=OpenAIEmbedding(
model="text-embedding-ada-002",
callback_manager=CallbackManager([embedding_token_counter])
), # used for embedding clusters
llm=OpenAI(model="gpt-3.5-turbo", temperature=0, callback_manager=callbackManager), # used for generating summaries
vector_store=vector_store, # used for storage
similarity_top_k=5, # top k for each layer, or overall top-k for collapsed
mode="tree_traversal", # sets default mode
transformations=[
SentenceSplitter(chunk_size=400, chunk_overlap=50)
], # transformations applied for ingestion
summary_prompt=RAPTOR_SUMMARY_PROMPT,
)
相关日志/回溯
- 无响应*
2条答案
按热度按时间j2datikz1#
嘿,@mw19930312!很高兴再次见到你。要开始另一个挑战了吗?让我们一起深入了解这个问题。
感谢你提供详细的信息。从你分享的代码片段来看,你似乎正确地使用了
TokenCountingHandler
和CallbackManager
。然而,你遇到的令牌计数器始终保持在0的问题可能有几个潜在原因。以下是你可以进一步调查的一些领域:on_event_end
方法的感兴趣的事件(CBEventType.LLM
和CBEventType.EMBEDDING
)被正确传递。如果这些事件没有被触发或捕获正确,on_event_end
中的令牌计数逻辑将无法执行。on_event_end
方法的有效载荷是否包含预期的键和值。如果有效载荷结构已更改或预期的键(EventPayload.PROMPT
、EventPayload.COMPLETION
、EventPayload.MESSAGES
、EventPayload.RESPONSE
)丢失,令牌计数逻辑可能无法正确执行。TokenCountingHandler
构造函数中的verbose=True
),那么这样做可以提供有关令牌计数方法是否被调用以及它们正在计算什么值的见解。reset_counts
方法将令牌计数重置为空列表。确保在访问令牌计数之前不会意外调用此方法。TokenCounter
类(self._token_counter
)。确保TokenCounter
类及其方法(get_string_tokens
、estimate_tokens_in_messages
)正确实现并返回预期的令牌计数。由于缺乏关于如何在 RaptorPack 中使用
TokenCountingHandler
的具体细节,或者关于进程可能失败的附加日志/输出,很难确定问题的确切原因。审查上述提到的领域,并在令牌计数过程中添加更详细的日志记录可能会帮助识别根本原因。如需更多信息,请参阅 LlamaIndex 代码库中
TokenCountingHandler
类的源代码 here 。如果你需要进一步的帮助或有任何其他问题,请告诉我。
来源
关于 Dosu
这个回复旨在节省你的时间并对你有所帮助。它不是精确的解决方案,而是你自己研究的一个起点。
帮助我变得更有用!如果你觉得这很有帮助,请留下一个赞成票;如果你认为这无关紧要,请留下一个反对票。
如果你想继续讨论,请用 @dosu-bot 开始你的回复。
7hiiyaii2#
有人知道可能出了什么问题吗?