llama_index [功能请求]:流媒体代理聊天响应原始TGI响应访问

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

你好,
我希望请求一个功能,允许在任何llama_indexes聊天引擎的streaming模式下访问由LLM生成的原始响应。具体来说,我们目前可以实现一个自定义LLM,它返回一个带有文本delta和原始响应json字符串作为关键字的CompletionResponse。例如,这个函数可能如下所示:
@llm_completion_callback()
def stream_complete(self, prompt: str, **kwargs: Any) -> CompletionResponseGen:
text = ''
for response in self.model_endpoint.generate_stream(prompt, <other_keyword_arguments>):
text += response.token.text
yield CompletionResponse(text=text, delta=response.token.text, raw=response.json())
我记不清在文档中这个raw是否需要是一个字符串json还是一个字典,但用json.dumps或json.loads将其转换是相当简单的。不幸的是,即使我们在CompletionResponse中传递原始响应,信息也会在StreamingAgentChatResponse类中丢失。具体来说,当我们开始执行awrite history方法调用时,我们开始遍历achat_stream生成器以从CompletionResponse中提取信息到Agent中。然而,这会锁定achat_stream,因此我们无法在代码的其他地方访问它。传统的解决方案是将信息移动到队列中,就像你为delta所做的那样。这使得原始文本对下游应用程序可访问。然而,完整的原始响应(例如,如果你想要生成的文本、top_tokens、token信息或LLM返回的特殊信息等),从未放入队列中,因此我们无法获取任何非令牌文本信息。
我希望这个类能够获得一些功能添加进去,以便访问LLM在CompletionResponse中返回的原始响应。这将包括:
添加一个新的aqueue类来存储原始字典和相应的辅助方法/ if子句。
更新awrite_response_to_history(以及我认为write_response_to_history)以将原始信息添加到新的原始队列中。
添加一个新的“async_raw_response_gen”方法,其功能与现有的gens完全相同,只是用于原始而不是delta。

原因

目前,由于异步处理的问题,这个功能无法在异步模式下支持。awrite_response_to_history方法锁定了achat_stream生成器,这是原始响应所在的位置,因此我们无法手动获取它。在awrite_response_to_history方法中,该信息被忽略并从未存储在任何地方,导致我们尽管能够将其传递到这一点,但仍然失去了信息。
我尝试过扩展StreamingAgentChatResponse对象,但不幸的是,这会导致一系列其他扩展;你需要对每个可能需要使用扩展的聊天引擎类进行扩展。当我试图以这种方式完成时,每次更新的类都会引导我更新另外三个类,直到我放弃并请求功能更新。

功能的价值

这个功能的主要目的是启用TGI端点的“透传”。目前,llama让我们 Package TGI端点以提供对其进行RAG系统访问的新信息。但是,由于信息丢失,我们无法使RAG系统看起来像TGI端点本身。如果我们需要出于某种原因访问这些信息,这就会成为一个问题。更一般地说,能够从LLM冒泡出原始响应将允许我们创建一个服务器,使其干净地模仿TGI文档,从而可以将我们构建的RAG系统连接到任何期望TGI端点的下游应用程序。

vtwuwzda

vtwuwzda1#

Fwiw,我们当前解决这个问题的临时方法是将LLM的stream_complete方法更改为将原始响应信息的字符串版本作为delta文本传递。这相当hacky,并且不是这些变量应该如何使用的方式,可能会破坏我们现在不使用但将来可能需要的其他功能。

i2loujxw

i2loujxw2#

您可以使用有道翻译,它提供即时免费的中文、英语、日语、韩语、法语、德语、俄语、西班牙语、葡萄牙语、越南语、印尼语、意大利语、荷兰语、泰语全文翻译、网页翻译、文档翻译和PDF翻译。

相关问题