Skip to main content

使用 LLMLingua 进行文本压缩

文本压缩对于优化与 LLM 的交互非常重要,特别是在处理可能导致更高成本和较慢响应时间的长提示时。LLMLingua 是一个旨在有效压缩提示的工具,提高 LLM 操作的效率和成本效益。

本指南介绍了 LLMLingua 与 AutoGen 的集成,演示了如何使用该工具压缩文本,从而优化 LLM 在各种应用中的使用。

要求

安装 pyautogen[long-context]PyMuPDF

pip install "pyautogen[long-context]" PyMuPDF

有关更多信息,请参阅安装指南

示例 1:使用 LLMLingua 压缩 AutoGen 研究论文

我们将看看如何使用 TextMessageCompressorLLMLingua 压缩 AutoGen 研究论文。以下是如何使用 LLMLingua 初始化 TextMessageCompressor,它是一个符合 TextCompressor 协议的文本压缩器。

import tempfile

import fitz # PyMuPDF
import requests

from autogen.agentchat.contrib.capabilities.text_compressors import LLMLingua
from autogen.agentchat.contrib.capabilities.transforms import TextMessageCompressor

AUTOGEN_PAPER = "https://arxiv.org/pdf/2308.08155"


def extract_text_from_pdf():
# 下载 PDF
response = requests.get(AUTOGEN_PAPER)
response.raise_for_status() # 确保下载成功

text = ""
# 将 PDF 保存到临时文件
with tempfile.TemporaryDirectory() as temp_dir:
with open(temp_dir + "temp.pdf", "wb") as f:
f.write(response.content)

# 打开 PDF
with fitz.open(temp_dir + "temp.pdf") as doc:
# 读取并提取每页的文本
for page in doc:
text += page.get_text()

return text


# 示例用法
pdf_text = extract_text_from_pdf()

llm_lingua = LLMLingua()
text_compressor = TextMessageCompressor(text_compressor=llm_lingua)
compressed_text = text_compressor.apply_transform([{"content": pdf_text}])

print(text_compressor.get_logs([], []))
('使用文本压缩保存了 19765 个标记。', True)

示例 2:将 LLMLingua 集成到 ConversableAgent

现在,让我们将 LLMLingua 集成到 AutoGen 中的对话代理中。这样可以在将提示发送给 LLM 之前动态压缩它们。

import os

import autogen
from autogen.agentchat.contrib.capabilities import transform_messages

system_message = "您是一位世界级的研究员。"
config_list = [{"model": "gpt-4-turbo", "api_key": os.getenv("OPENAI_API_KEY")}]

# 定义您的代理:用户代理和助理
researcher = autogen.ConversableAgent(
"assistant",
llm_config={"config_list": config_list},
max_consecutive_auto_reply=1,
system_message=system_message,
human_input_mode="NEVER",
)
user_proxy = autogen.UserProxyAgent(
"user_proxy",
human_input_mode="NEVER",
is_termination_msg=lambda x: "TERMINATE" in x.get("content", ""),
max_consecutive_auto_reply=1,
)
tip

了解有关为代理配置LLM的更多信息,请点击这里

context_handling = transform_messages.TransformMessages(transforms=[text_compressor])
context_handling.add_to_agent(researcher)

message = "为我总结这篇研究论文,包括重要信息" + pdf_text
result = user_proxy.initiate_chat(recipient=researcher, clear_history=True, message=message, silent=True)

print(result.chat_history[1]["content"])
使用文本压缩保存了19953个标记。
该论文描述了AutoGen,这是一个旨在通过对话式多代理系统促进多样化大型语言模型(LLM)应用开发的框架。该框架强调定制和灵活性,使开发人员能够以自然语言或计算机代码定义代理的交互行为。

AutoGen的关键组件包括:
1. **可对话代理**:这些是可定制的代理,旨在通过人机交互或自主操作。它们能够在对话中发起、维持和回应,有效地为多代理对话做出贡献。

2. **对话式编程**:AutoGen引入了一种以代理之间的对话交互为中心的编程范式。这种方法通过简化代理之间的通信和交互,将复杂应用程序的开发流程简化,重点放在对话逻辑上,而不是传统的编码形式上。

3. **代理定制和灵活性**:开发人员可以自由定义系统中代理的能力和行为,从而实现在不同领域中的各种应用。

4. **应用的多样性**:该论文概述了从数学和编码到决策和娱乐的各种用例,展示了AutoGen应对各种复杂性和需求的能力。

5. **分层和联合对话能力**:该系统支持复杂的对话模式,包括分层和多代理交互,促进了能够根据对话上下文和代理角色动态调整的强大对话。

6. **开源和社区参与**:AutoGen作为一个开源框架呈现,邀请全球开发社区做出贡献和适应,以扩展其能力和应用。

该框架的架构设计使其能够无缝集成到现有系统中,为开发利用现代LLM能力的复杂多代理应用提供了坚实的基础。该论文还讨论了潜在的伦理考虑和未来改进,强调了根据不断发展的技术环境和用户需求进行持续发展的重要性。

示例3:修改LLMLingua的压缩参数

LLMLingua的灵活性允许进行各种配置,例如自定义LLM的指令或设置特定的压缩令牌数。这个示例演示了如何设置目标令牌数,以便使用上下文大小较小的模型,如gpt-3.5。

config_list = [{"model": "gpt-3.5-turbo", "api_key": os.getenv("OPENAI_API_KEY")}]
researcher = autogen.ConversableAgent(
"assistant",
llm_config={"config_list": config_list},
max_consecutive_auto_reply=1,
system_message=system_message,
human_input_mode="NEVER",
)

text_compressor = TextMessageCompressor(
text_compressor=llm_lingua,
compression_params={"target_token": 13000},
cache=None,
)
context_handling = transform_messages.TransformMessages(transforms=[text_compressor])
context_handling.add_to_agent(researcher)

compressed_text = text_compressor.apply_transform([{"content": message}])

result = user_proxy.initiate_chat(recipient=researcher, clear_history=True, message=message, silent=True)

print(result.chat_history[1]["content"])
使用文本压缩节省了25308个令牌。
根据提供的广泛研究论文信息,似乎重点是开发一个名为AutoGen的框架,用于基于大型语言模型(LLMs)创建多代理对话,用于各种应用,如数学问题解决、编码、决策等。

论文讨论了将LLMs的不同角色、人类输入和工具纳入AutoGen框架以增强可对话代理的能力的重要性。它还深入探讨了不同场景中不同系统的有效性,展示了AutoGen在试点研究中的实施情况,并将其在数学问题解决、编码和决策等任务中与其他系统的性能进行了比较。

论文还强调了AutoGen的不同特性和组件,如AssistantAgent、UserProxyAgent、ExecutorAgent和GroupChatManager,强调了其在管理多代理交互方面的灵活性、易用性和模块化。它通过案例分析展示了AutoGen在各种应用和场景中的有效性。

此外,论文还包括手动评估、场景测试、代码示例以及与ChatGPT、OptiGuide、MetaGPT等其他系统的详细比较,以展示AutoGen框架的性能和能力。

总的来说,研究论文展示了AutoGen在促进动态多代理对话、增强决策过程以及通过在协作框架中集成LLMs、人类输入和工具来改进问题解决任务方面的潜力。