OpenClaw 上下文管理:掌握对话的连贯性

··
OpenClaw 技术团队
专注于 OpenClaw 小龙虾框架的技术研究与分享

上下文的重要性
#

人类对话依赖上下文:

  • “那个文件怎么样了?”
  • “帮我改一下刚才的代码”

上下文层级
#

1
2
3
4
5
6
7
系统上下文
会话上下文
消息上下文
技能上下文

上下文窗口管理
#

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
class ContextManager {
  constructor(maxTokens = 4000) {
    this.maxTokens = maxTokens;
    this.messages = [];
  }
  
  addMessage(role, content) {
    this.messages.push({ role, content });
    this.truncate();
  }
  
  truncate() {
    const totalTokens = this.estimateTokens(this.messages);
    
    while (totalTokens > this.maxTokens) {
      // 移除最早的消息,保留系统提示
      this.messages.splice(1, 1);
    }
  }
  
  estimateTokens(messages) {
    return messages.reduce((sum, m) => 
      sum + m.content.length / 4, 0
    );
  }
}

实体追踪
#

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
// 追踪对话中的实体
class EntityTracker {
  track(message) {
    // 检测提到的实体
    const entities = this.extractEntities(message);
    
    // 更新上下文
    for (const entity of entities) {
      this.context[entity.type] = entity;
    }
  }
}

// 使用
// 用户: "打开 report.pdf"
// 用户: "把它发给我"
// AI理解 "它" = report.pdf

总结
#

上下文管理是流畅对话体验的核心。