langchain4j [FEATURE] Add context window size and estimateNumberOfTokens to ChatLanguageModel

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

您的功能请求是否与问题相关?请描述。

祝您假期愉快!
大多数时候,处理LLM的问题是处理有限的上下文窗口大小(尤其是在文本摘要任务中)。一个好的算法应该是通用的:它应该考虑到ChatLanguageModel的上下文窗口大小,并在发送请求到LLM之前计算令牌的数量。
在一个应用程序中,用户可能想要从gpt-3.5-turbo更改到gpt-4o-mini或从OpenAI更改到Mistral。
ChatLanguageModel不包含方法getContextWindowSize()estimateNumberOfTokens(),因此算法必须接受myCoolAlgo(ChatLanguageModel model, int contextWindowSize, Tokenizer tokenizer)。这两个其他参数应该由外部处理。

描述您希望实现的解决方案

ChatLanguageModel中添加getContextWindowSize()estimateNumberOfTokens()方法。

描述您考虑过的替代方案

如我所说,可以将其外部管理。也许可以将聊天模型字符串到整数的Map等存储在一个Map中。

附加上下文

我认为这是一个架构问题。estimateNumberOfTokens()ChatLanguageModel领域的一部分,但通常使用外部分词器包来解决。如果我们将estimateNumberOfTokens()添加到ChatLanguageModel中,那么用户将只有一个分词器库的选择。

qvtsj1bj

qvtsj1bj1#

好的,经过一些工作,现在我明白了为什么这是一个复杂的方法。

  1. 想象一下,一个用户想要运行一个本地模型。在应用程序中,最简单的方法是使用一个带有自定义提供的模型名称和自定义API基本URL的OpenAiChatModel。如果模型现在是已知的之一,那么getContextWindowSize()estimateNumberOfTokens()应该在这里返回什么?

  2. 如果用户想要通过Hugging Face连接,那么如何实现getContextWindowSize()estimateNumberOfTokens()?这项任务没有公共API。可能,一个人应该使用分词器库+下载tokenizer.json,然后它就会起作用。

好吧,也许第二点问题不大,但第一点很难解决。

yr9zkbsy

yr9zkbsy2#

对我来说,这似乎是一个问题,OpenAI或其他提供商的开发人员遗漏了。
分词实际上是LLMs领域的一个部分,不应该被分开。API应该包含像/estimateTokenCount这样的端点。但他们没有。
来自Ollama的额外信息:ollama/ollama#1716
他们讨论了一个类似的问题,并得出了我写到的同样的结论:向API添加新的端点。
所以,如果我不会用自定义API URL欺骗OpenAiChatModel,而是使用OllamaChatModel(或者它叫什么名字?),那么我在这条评论中提到的第一个问题也解决了

相关问题