这是来自 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 它似乎首先将签名转换为旧格式?因此,这是解决这个问题的好方法还是有更好的替代方案?