llama_index [Bug]: RaptorPack中的Token计数器无法工作

dvtswwa3  于 2个月前  发布在  其他
关注(0)|答案(2)|浏览(26)

错误描述

我最近使用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,
 )

相关日志/回溯

  • 无响应*
j2datikz

j2datikz1#

嘿,@mw19930312!很高兴再次见到你。要开始另一个挑战了吗?让我们一起深入了解这个问题。
感谢你提供详细的信息。从你分享的代码片段来看,你似乎正确地使用了 TokenCountingHandlerCallbackManager 。然而,你遇到的令牌计数器始终保持在0的问题可能有几个潜在原因。以下是你可以进一步调查的一些领域:

  1. 事件处理:确保传递给 on_event_end 方法的感兴趣的事件( CBEventType.LLMCBEventType.EMBEDDING )被正确传递。如果这些事件没有被触发或捕获正确, on_event_end 中的令牌计数逻辑将无法执行。
  2. 有效载荷内容:验证传递给 on_event_end 方法的有效载荷是否包含预期的键和值。如果有效载荷结构已更改或预期的键( EventPayload.PROMPTEventPayload.COMPLETIONEventPayload.MESSAGESEventPayload.RESPONSE )丢失,令牌计数逻辑可能无法正确执行。
  3. 详细日志记录:代码片段包含了一个详细日志记录选项。如果尚未尝试使用启用了详细日志记录的调试( TokenCountingHandler 构造函数中的 verbose=True ),那么这样做可以提供有关令牌计数方法是否被调用以及它们正在计算什么值的见解。
  4. 重置计数: reset_counts 方法将令牌计数重置为空列表。确保在访问令牌计数之前不会意外调用此方法。
  5. 令牌计数器实现:实际的令牌计数委托给了 TokenCounter 类( self._token_counter )。确保 TokenCounter 类及其方法( get_string_tokensestimate_tokens_in_messages )正确实现并返回预期的令牌计数。
    由于缺乏关于如何在 RaptorPack 中使用 TokenCountingHandler 的具体细节,或者关于进程可能失败的附加日志/输出,很难确定问题的确切原因。审查上述提到的领域,并在令牌计数过程中添加更详细的日志记录可能会帮助识别根本原因。
    如需更多信息,请参阅 LlamaIndex 代码库中 TokenCountingHandler 类的源代码 here
    如果你需要进一步的帮助或有任何其他问题,请告诉我。

来源

关于 Dosu

这个回复旨在节省你的时间并对你有所帮助。它不是精确的解决方案,而是你自己研究的一个起点。
帮助我变得更有用!如果你觉得这很有帮助,请留下一个赞成票;如果你认为这无关紧要,请留下一个反对票。
如果你想继续讨论,请用 @dosu-bot 开始你的回复。

7hiiyaii

7hiiyaii2#

有人知道可能出了什么问题吗?

相关问题