context_handling
TransformChatHistory
class TransformChatHistory()
一个代理与其他代理的聊天历史是它生成回复时常用的上下文。这个功能允许代理在使用聊天历史生成回复之前对其进行转换。它不会永久修改聊天历史,而是在每次调用时对其进行处理。
这个功能类可以实现各种转换聊天历史的策略,例如:
- 截断消息:将每条消息截断为最多的标记数。
- 限制消息数量:将聊天历史截断为最多的(最近的)消息数量。
- 限制标记数量:将聊天历史截断为最近的 N 条消息,使其标记数量不超过最大限制。 需要注意的是,由于其特殊意义,系统消息始终保持不变。
这三种策略可以组合使用。例如,当指定了这些参数时,它们的使用顺序如下:
- 首先将消息截断为最多的标记数。
- 其次,限制要保留的消息数量。
- 最后,限制聊天历史中的总标记数量。
将此功能添加到代理时,会进行以下修改:
- 在可挂钩方法
process_all_messages_before_reply
中添加了一个钩子,用于转换接收到的消息以进行可能的截断。 不修改存储的消息历史。
__init__
def __init__(*,
max_tokens_per_message: Optional[int] = None,
max_messages: Optional[int] = None,
max_tokens: Optional[int] = None)
参数:
max_tokens_per_message
Optional[int] - 每条消息要保留的最大标记数。max_messages
Optional[int] - 要保留的最大消息数量。max_tokens
Optional[int] - 要保留的上下文中的最大标记数量。
add_to_agent
def add_to_agent(agent: ConversableAgent)
将 TransformChatHistory 功能添加到给定的代理中。
truncate_str_to_tokens
def truncate_str_to_tokens(text: str,
max_tokens: int,
model: str = "gpt-3.5-turbo-0613") -> str
使用 tiktoken 将字符串截断,使其标记数量小于等于 max_tokens。
参数:
text
- 要截断的字符串。max_tokens
- 要保留的最大标记数量。model
- 用于标记化对齐的目标 OpenAI 模型。
返回值:
截断后的字符串。