Conversation History

Conversation History 是用户和 Agent 之间的历史对话消息。它是上下文的重要组成部分,但不能无限累积,需要截断和摘要策略。

#type / concept #status / evergreen #tech / ai

[!info] related notes

Conversation History

一句话定义

Conversation History 是用户和 Agent 之间的历史对话消息。它是 LLM 理解”之前聊了什么”的基础,但不能无限累积——需要截断、摘要或分层管理。

核心原理

消息格式

messages = [
    {"role": "system", "content": "你是一个健康助手"},
    {"role": "user", "content": "我膝盖疼"},
    {"role": "assistant", "content": "疼了多久?"},
    {"role": "user", "content": "一周了"},
    {"role": "assistant", "content": "有没有肿胀?"},
]

历史管理策略

策略原理适用场景
全量保留所有消息都传短对话
滑动窗口只保留最近 N 轮中等对话
摘要压缩旧消息生成摘要长对话
重要性排序保留重要消息复杂对话

滑动窗口实现

def get_recent_messages(messages: list, window_size: int = 10) -> list:
    """保留最近 N 轮对话(一轮 = user + assistant)"""
    # 保留 system message
    system_msgs = [m for m in messages if m.role == "system"]
    other_msgs = [m for m in messages if m.role != "system"]

    # 取最后 window_size * 2 条(每轮 2 条)
    recent = other_msgs[-(window_size * 2):]

    return system_msgs + recent

常见坑

  1. 全量历史塞进上下文: token 爆炸
  2. 截断太激进: 丢失关键上下文
  3. 不区分消息类型: 工具调用结果和闲聊同等对待
  4. 半截消息: 流式中断的 assistant 消息被当作历史

参考资料

创建于 2026/6/30 更新于 2026/7/15