🧠 Agent上下文工程:让AI记住重要信息的艺术

凌晨2点,我看着一个叫"Agentic Context Engineering"的GitHub仓库,心想:这不就是教AI怎么"记笔记"吗?后来发现,这事儿比记笔记复杂多了...

上下文工程(Context Engineering)是AI Agent开发的核心技能。它决定了Agent能"记住"多少信息、如何高效利用有限的上下文窗口、以及如何在多轮对话中保持连贯性。掌握上下文工程,是构建高质量Agent的关键。

🎯 为什么上下文工程如此重要?

问题影响上下文工程的解决方案
上下文窗口有限长对话丢失信息智能压缩和摘要
Token成本累积API调用费用爆炸上下文优化策略
信息过载模型注意力分散优先级排序
无关信息干扰回答质量下降上下文过滤

🏗️ 上下文管理架构

三层上下文模型

┌─────────────────────────────────────────────┐
│            System Context (系统级)           │
│   • 系统提示词                              │
│   • 工具定义                                │
│   • 安全约束                                │
├─────────────────────────────────────────────┤
│           Session Context (会话级)          │
│   • 当前对话历史                            │
│   • 用户偏好                                │
│   • 临时任务状态                            │
├─────────────────────────────────────────────┤
│          Persistent Context (持久级)        │
│   • 长期记忆                                │
│   • 知识库                                  │
│   • 用户画像                                │
└─────────────────────────────────────────────┘

上下文生命周期

// OpenClaw中的上下文管理
const agent = new Agent({
  name: 'context-aware-agent',
  
  // 系统级上下文
  systemPrompt: `你是一个专业的AI助手。遵循以下规则:
    1. 回答简洁准确
    2. 不确定时主动询问
    3. 保持专业态度`,
    
  // 上下文配置
  context: {
    maxTokens: 8000,           // 最大上下文Token
    compressionStrategy: 'semantic',  // 语义压缩
    relevanceThreshold: 0.7,   // 相关性阈值
    
    // 持久化配置
    persistence: {
      enabled: true,
      storage: 'vector',       // 向量存储
      embeddingModel: 'text-embedding-3-small'
    }
  }
});

🔧 上下文优化技术

1. 语义压缩

// 语义压缩示例
import { SemanticCompressor } from 'openclaw';

const compressor = new SemanticCompressor({
  model: 'claude-3-haiku',  // 使用快速模型压缩
  preserveKeywords: true,   // 保留关键词
  summaryRatio: 0.3         // 压缩到30%
});

// 原始上下文 (2000 tokens)
const originalContext = `
用户问:请介绍一下OpenClaw...
[大量对话历史]
助手答:OpenClaw是一个...`;

// 压缩后 (600 tokens)
const compressed = await compressor.compress(originalContext);
// 输出:用户询问OpenClaw介绍 → 助手说明OpenClaw是AI Agent框架

2. 优先级排序

// 上下文优先级管理
const contextManager = new ContextManager({
  priorities: {
    system: 100,      // 系统提示最高优先级
    tools: 90,        // 工具定义次之
    recentMessages: 80, // 最近消息
    userPreferences: 70, // 用户偏好
    history: 50,      // 历史对话
    knowledge: 40     // 知识库检索
  },
  
  // 当上下文超出时的处理策略
  overflowStrategy: 'drop-lowest'  // 丢弃低优先级内容
});

3. 分块与检索

// 分块存储与检索
const chunker = new ContextChunker({
  chunkSize: 500,      // 每块500 tokens
  overlap: 50,         // 重叠50 tokens
  embeddingModel: 'text-embedding-3-small'
});

// 存储长文档
const doc = await chunker.chunk(longDocument);

// 检索相关块
const relevant = await chunker.retrieve({
  query: '用户当前问题',
  topK: 5,              // 返回最相关的5块
  minScore: 0.75        // 最低相关性分数
});

4. 记忆注入

// 在新会话中注入持久记忆
const agent = new Agent({
  name: 'memory-agent',
  
  // 记忆注入配置
  memoryInjection: {
    enabled: true,
    maxMemories: 10,    // 最多注入10条记忆
    recencyWeight: 0.6, // 时间权重
    relevanceWeight: 0.4, // 相关性权重
    
    // 记忆检索
    retriever: async (query) => {
      const memories = await memoryDB.search(query);
      return memories.slice(0, 10);
    }
  }
});

// 首次会话存储记忆
await agent.remember('用户喜欢简洁的回答');
await agent.remember('用户使用深色主题');

// 新会话自动注入记忆
const newSession = agent.newSession();
// 系统提示自动包含:
// "根据历史记忆:用户喜欢简洁的回答,用户使用深色主题"

✅ 上下文工程最佳实践

  1. 分层管理:系统级、会话级、持久级分离
  2. 按需加载:只在需要时检索相关信息
  3. 定期压缩:每N轮对话后压缩历史
  4. 优先级保护:核心指令永远不被丢弃
  5. 成本监控:跟踪Token使用,避免超支

📊 Token成本优化

策略节省Token适用场景
语义压缩50-70%长对话历史
分块检索60-80%知识库查询
摘要替代40-60%文档分析
缓存复用30-50%重复请求
模型降级70-90%简单任务
💡 OpenClaw上下文优化技巧
// 配置上下文优化
const agent = new Agent({
  context: {
    // 启用缓存
    cache: {
      enabled: true,
      ttl: 3600  // 1小时缓存
    },
    
    // 智能压缩
    compression: {
      enabled: true,
      trigger: 'auto',     // 自动触发
      threshold: 0.8,      // 使用80%窗口时触发
      model: 'claude-3-haiku'  // 用便宜模型压缩
    },
    
    // 成本控制
    costLimit: {
      perRequest: 0.5,     // 单次请求上限$0.5
      perSession: 5,       // 单次会话上限$5
      alertThreshold: 0.8  // 80%时告警
    }
  }
});

🔗 相关资源

📈 实战案例

案例:长对话客服Agent

// 客服Agent上下文配置
const supportAgent = new Agent({
  name: 'customer-support',
  
  systemPrompt: `你是一个专业的客服助手。根据用户历史和当前问题提供帮助。`,
  
  context: {
    maxTokens: 16000,
    
    // 会话记忆
    sessionMemory: {
      enabled: true,
      maxMessages: 50,
      compressionAfter: 20  // 20轮后压缩
    },
    
    // 用户画像注入
    userProfile: {
      enabled: true,
      fields: ['language', 'timezone', 'subscription', 'history']
    },
    
    // 知识库检索
    knowledgeRetrieval: {
      enabled: true,
      topK: 5,
      minScore: 0.75
    }
  }
});