Skip to main content

compressible_agent

可压缩代理

class CompressibleAgent(ConversableAgent)

可压缩代理。虽然这个代理保留了 AssistantAgent 的所有默认功能,但它还提供了通过 compress_config 设置激活时的压缩功能。

compress_config 默认设置为 False,使得这个代理与 AssistantAgent 等效。这个代理在 GroupChat 中表现不佳:压缩后的消息不会发送给群组中的所有代理。默认系统消息与 AssistantAgent 相同。human_input_mode 默认为 "NEVER",code_execution_config 默认为 False。这个代理默认不执行代码或函数调用。

__init__

def __init__(name: str,
system_message: Optional[str] = DEFAULT_SYSTEM_MESSAGE,
is_termination_msg: Optional[Callable[[Dict], bool]] = None,
max_consecutive_auto_reply: Optional[int] = None,
human_input_mode: Literal["ALWAYS", "NEVER",
"TERMINATE"] = "NEVER",
function_map: Optional[Dict[str, Callable]] = None,
code_execution_config: Optional[Union[Dict, bool]] = False,
llm_config: Optional[Union[Dict, bool]] = None,
default_auto_reply: Optional[Union[str, Dict, None]] = "",
compress_config: Optional[Dict] = False,
description: Optional[str] = None,
**kwargs)

参数

  • name str - 代理名称。
  • system_message str - 用于 ChatCompletion 推理的系统消息。 如果您想重新编程代理,请覆盖此属性。
  • llm_config dict - llm 推理配置。
  • 注意 - 您必须在 llm_config 中设置 model。它将用于计算令牌数。 有关可用选项,请参阅 OpenAIWrapper.create
  • is_termination_msg function - 一个函数,接受一个以字典形式表示的消息,并返回一个布尔值,指示接收到的消息是否为终止消息。 字典可以包含以下键:"content"、"role"、"name"、"function_call"。
  • max_consecutive_auto_reply int - 连续自动回复的最大次数。 默认为 None(没有提供限制,此时将使用类属性 MAX_CONSECUTIVE_AUTO_REPLY 作为限制)。 该限制仅在 human_input_mode 不是 "ALWAYS" 时起作用。
  • compress_config dict 或 True/False - 在 oai_reply 之前进行压缩的配置。默认为 False。 您应该包含以下键:
    • "mode"(可选,str,默认为 "TERMINATE"):可选值为 ["COMPRESS", "TERMINATE", "CUSTOMIZED"]。
    1. TERMINATE:仅当令牌数超过当前模型的最大限制时,才终止对话。在此模式下,不使用 trigger_count
  1. COMPRESS: 当令牌数量超过限制时,压缩消息。
  2. CUSTOMIZED: 传入一个自定义函数来压缩消息。
  • "compress_function" (可选, callable, 默认为 None): 当模式为 "CUSTOMIZED" 时必须提供。 该函数应接受一个消息列表,并返回一个元组 (is_compress_success: bool, compressed_messages: List[Dict])。
  • "trigger_count" (可选, float, int, 默认为 0.7): 触发压缩的阈值。 如果是介于 (0, 1] 之间的浮点数,则表示使用的令牌的百分比。如果是整数,则表示使用的令牌数量。
  • "async" (可选, bool, 默认为 False): 是否异步压缩。
  • "broadcast" (可选, bool, 默认为 True): 是否将压缩后的消息历史记录更新给发送者。
  • "verbose" (可选, bool, 默认为 False): 是否打印压缩前后的内容。当模式为 "COMPRESS" 时使用。
  • "leave_last_n" (可选, int, 默认为 0): 如果提供了该参数,则最后的 n 条消息将不会被压缩。当模式为 "COMPRESS" 时使用。
  • description str - 代理的简短描述。其他代理(例如 GroupChatManager)将根据此描述决定何时调用该代理。(默认值:system_message)
  • **kwargs dict - 请参考 ConversableAgent 中的其他 kwargs。

generate_reply

def generate_reply(
messages: Optional[List[Dict]] = None,
sender: Optional[Agent] = None,
exclude: Optional[List[Callable]] = None) -> Union[str, Dict, None]

添加到第 202 行:

    if messages is not None and messages != self._oai_messages[sender]:
messages = self._oai_messages[sender]

on_oai_token_limit

def on_oai_token_limit(
messages: Optional[List[Dict]] = None,
sender: Optional[Agent] = None,
config: Optional[Any] = None) -> Tuple[bool, Union[str, Dict, None]]

(实验性功能)当令牌达到阈值时,压缩之前的消息。

TODO: 异步压缩 TODO: 维护旧的 oai 消息列表(压缩之前的消息)

compress_messages

def compress_messages(
messages: Optional[List[Dict]] = None,
config: Optional[Any] = None
) -> Tuple[bool, Union[str, Dict, None, List]]

将一系列消息压缩成一条消息。

第一条消息(初始提示)不会被压缩。 其余的消息将被压缩成一条消息,模型将被要求区分每条消息的角色:USER、ASSISTANT、FUNCTION_CALL、FUNCTION_RETURN。 请查看 compress_sys_msg。

TODO: 压缩代理使用的模型与助手代理不同:例如,如果原始模型使用的是 gpt-4;我们从使用率的 70% 开始压缩,70% 的 8092 = 5664;而我们在这里使用的是 gpt 3.5,max_token = 4096,会引发错误。自动选择模型?