AI魔法学院客服
省钱!微软开源框架LLMLingua + LlamaIndex实现提示词压缩
微软发布的开源框架LLMLingua旨在通过提示词压缩降低token开销,提高语言模型响应速度。LLMLingua利用训练过的语言模型识别和移除非必要标记,实现高效推断,性能损失小。LongLLMLingua解决了长上下文信息处理的挑战,提高RAG性能。LlamaIndex框架原生支持LLMLingua,方便开发者集成。文章展示了如何使用LlamaIndex和LLMLingua实现提示词压缩,并给出了压缩效果的示例代码和输出。
 2024-05-17
收藏 复制地址分享海报

LLMLingua微软发布的一款开源框架,旨在帮助开发者实现提示词压缩,从而在诸多应用场景中,在尽可能保留有意义的信息时,减少token开销,降低成本。

RAG应用中,用户的查询或者提问,会被用于向量存储查询,以获得最相似的信息片段。这些数据,作为对模型的输入,也就是提示词,贡献了绝大多数资源的开销。

那么如何降低开销呢?

提示词压缩正是旨在保留重要信息的同时,缩短提示词的技术,从而降低开销,同时也能加快语言模型的响应生成速度。

 

这项技术的前提是,我们认为在任何语言的文本中,通常都会存在不必要的重复。

更多技术细节和理论研究请参考LLMLingua的官方网站和论文:

https://github.com/microsoft/LLMLingua

今天我们来看看在具体的应用场景中,如何使用LlmLinguaLlamaIndex实现提示词压缩,并看看效果如何。

LLMLingua利用紧凑、经过训练的语言模型(例如GPT2-smallLLaMA-7B)来识别和移除提示中的非必要标记。这种方法使得使用大型语言模型(LLMs)进行高效推断成为可能,最多可以实现20倍的压缩,而性能损失很小。

LongLLMLingua解决了LLMs中的“lost in the middle”的问题,增强了对长上下文信息的处理能力。它通过提示词压缩降低成本,提高RAG性能,仅使用1/4的标记就能提高性能高达21.4%

LlamaIndex框架对LLMLingua提供了原生支持,开发者能够非常轻松地集成提示词压缩能力到应用中。

一条命令安装llama-indexllmlingua

· 

$ pip install llmama-index llmlingua

 

完整示例代码:

· 

import openai

openai.api_key = 'sk-xxx'
from llama_index import ServiceContext, set_global_service_context

from llama_index.llms import OpenAI

from llama_index.callbacks import CallbackManager, TokenCountingHandler

import tiktoken
OPENAI_MODEL_NAME = "gpt-3.5-turbo-16k"
llm = OpenAI(model=OPENAI_MODEL_NAME)

callback_manager =   CallbackManager([TokenCountingHandler(    tokenizer=tiktoken.encoding_for_model(OPENAI_MODEL_NAME).encode)])


service_context = ServiceContext.from_defaults(    llm=llm, callback_manager=callback_manager)

set_global_service_context(service_context)


from llama_index import VectorStoreIndex, download_loader
WikipediaReader = download_loader("WikipediaReader")

loader = WikipediaReader()

documents = loader.load_data(pages=['Premier League'])


retriever = VectorStoreIndex.from_documents(documents).as_retriever(similarity_top_k=3)


question = "Why did English clubs get banned fron European competition?"


from llama_index.query_engine import RetrieverQueryEngine

from llama_index.response_synthesizers import CompactAndRefine

from llama_index.indices.postprocessor import LongLLMLinguaPostprocessor

 

node_postprocessor = LongLLMLinguaPostprocessor(    instruction_str="Given the context, please answer the final question",    target_token=300,    rank_method="longllmlingua",    additional_compress_kwargs={        "condition_compare": True,        "condition_in_question": "after",        "context_budget": "+100",        "reorder_context": "sort",        "dynamic_context_compression_ratio": 0.3,    },)


retrieved_nodes = retriever.retrieve(question)

synthesizer = CompactAndRefine()


from llama_index.indices.query.schema import QueryBundle


new_retrieved_nodes = node_postprocessor.postprocess_nodes(    retrieved_nodes, query_bundle=QueryBundle(query_str=question))


original_contexts = "\n\n".join([n.get_content() for n in retrieved_nodes])

compressed_contexts = "\n\n".join([n.get_content() for n in new_retrieved_nodes])

original_tokens = node_postprocessor._llm_lingua.get_token_length(original_contexts)

compressed_tokens = node_postprocessor._llm_lingua.get_token_length(compressed_contexts)

print(compressed_contexts)

print()

print("Original Tokens:", original_tokens)

print("Compressed Tokens:", compressed_tokens)

print("Compressed Ratio:", f"{original_tokens/(compressed_tokens + 1e-5):.2f}x")     

 

response = synthesizer.synthesize(question, new_retrieved_nodes)

代码执行中,关于压缩token效果,我们会看到如下输出:

Original Tokens: 2768

Compressed Tokens: 443

Compressed Ratio: 6.25x


有兴趣的同学运行一下代码,查看压缩前与压缩后的问答效果吧。

 

出自:https://mp.weixin.qq.com/s/O-KjudOuF_tfjwsXRK1Cfg

本文档由网友提供,仅限参考学习,如有不妥或产生版权问题,请联系我们及时删除。 客服请加微信:skillupvip
评论
1 评论
幸福的小白猪2024/5/17 9:34:18
哇塞,微软这次真是脑洞大开啊!LLMLingua这框架简直就是语言模型的瘦身神器啊! 看着那些冗余的token被一一剔除,我仿佛看到了它们哀嚎着被扔进垃圾桶的样子,哈哈!

LongLLMLingua更是厉害,处理长上下文信息也不在话下,简直就是给RAG性能打了一针强心剂!

LlamaIndex框架也原生支持LLMLingua,开发者们集成起来简直不要太方便! 看来微软这次是想让我们在享受高速响应的同时,还能省下一大笔token开销呢!

示例代码和输出看着就让人心动,我已经迫不及待想试试这个瘦身神器了! 微软这波操作,我给满分!
伴读
# 1. 一句话总结文章摘要

文章介绍了微软发布的开源框架LLMLingua,该框架通过实现提示词压缩技术,降低大型语言模型在应用场景中的token开销,提升响应速度和性能,并提供了具体的应用示例和效果展示。

# 2. 生成关键词和可能相关的关键词

关键词:LLMLingua、提示词压缩、token开销、大型语言模型、RAG应用、查询向量存储、GPT2-sma
One More Thing
One More Thing again ...

找组织,加入AI魔法学院群