DSPy:如何获取输入字段可用的令牌数量?

问题描述 投票:0回答:1

这是来自 DSPy GitHub Repo Issue #1245 的交叉帖子。过去一周没有回复,我正在做一个项目,时间很紧吗?

当使用给定签名运行 DSPy 模块时,我有兴趣获取它当前传递给语言模型 (LM) 的“提示模板”的令牌计数,我的意思是传递给 LM 的输入令牌的数量减去输入字段的标记计数。因此,这将计算签名描述、字段描述和少数样本示例的长度。然后,通过用提示模板的标记计数减去 LM 的上下文窗口,我将获得可以挤入输入字段的最大标记数量。

我对此很感兴趣,因为我目前正在构建一个 RAG 管道,该管道从数据库中检索文本以合成最终响应。但是,从数据库检索的文本的总长度可能超过我正在使用的 LM 的上下文窗口大小。因此,在合成最终响应之前需要迭代或递归总结过程来压缩提示。虽然我承认您可以简单地逐一总结每个文本块,以格外小心,不要超出上下文窗口,但我认为这可能不是最有效的方法。

我最初完全使用 LlamaIndex 构建了一个 RAG 管道,其中响应将由

响应合成器 生成。请注意,响应合成器的 compact

 模式会尝试将检索到的上下文中的尽可能多的标记打包到单个 LM 调用中,以减少调用数量。这是通过 
PromptHelper 实现的,它将尽可能多的标记挤入提示模板的字段中,以便字段的长度总共不会超过 context_window - prompt_template_length

现在,当我将所有提示切换到 DSPy 以获得更大灵活性时,我想知道实现类似功能的最佳方法是什么

PromptHelper

?  我还检查了 DSPy 的 LlamaIndex 集成是如何做到这一点的:
https://github.com/stanfordnlp/dspy/blob/55510eec1b83fa77f368e191a363c150df8c5b02/dspy/predict/llamaindex.py#L22-L36

它似乎首先将签名转换为旧格式?因此,这是解决这个问题的好方法还是有更好的替代方案?

python large-language-model language-model retrieval-augmented-generation dspy
1个回答
0
投票
如果你需要真正好的压缩,我在 ChatGPT 上使用过“SentenceSqueezer”,它通常会压缩附近 60-85% 的指令集,而且非常简单,保证不会丢失上下文,因为它会从每个句子中生成首字母缩略词或line ,告诉它在该位置留下句点或任何你想要的地方,用映射表给出前后计数,并且它可以使用一个符号进行元压缩。 另一个是“Tokenizer GPT 指令压缩器”,也在同一平台上,但对重复超过 3 次的单词使用单个占位符。相信,在压缩映射表等上输出相同的统计数据,可能值得一试,我是新人所以如果这对你有用,我可能还很遥远,希望如此。但如果他们都为我工作过,我就不必担心我需要的指示有多技术性

© www.soinside.com 2019 - 2024. All rights reserved.