目录

  1. 提示词处理和结构化

  2. Agent准备阶段

  3. Subagent拆解机制

  4. 上下文压缩策略

  5. LLM推理机制

  6. 工具集成流程

  7. 多轮交互和输出

  8. 架构模式

  9. 完整流程图

  10. 最佳实践和应用建议


1. 提示词处理和结构化

1.1 提示词解析流程

┌─────────────────────────────────────────────────────────────┐
│ 用户输入 (User Message)                                      │
└──────────────────┬──────────────────────────────────────────┘
                   │
                   ▼
┌─────────────────────────────────────────────────────────────┐
│ 1. 原始文本提取 (Raw Text Extraction)                         │
│    - 移除控制字符                                             │
│    - 标准化换行符                                             │
│    - 检测编码问题                                             │
└──────────────────┬──────────────────────────────────────────┘
                   │
                   ▼
┌─────────────────────────────────────────────────────────────┐
│ 2. 语义标记识别 (Semantic Token Recognition)                │
│    - 检测 @mentions (@用户/工具/代理)                       │
│    - 识别 /slash命令 (/help, /loop等)                      │
│    - 扫描代码块标记 (```language)                            │
│    - 识别文件路径引用                                         │
└──────────────────┬──────────────────────────────────────────┘
                   │
                   ▼
┌─────────────────────────────────────────────────────────────┐
│ 3. 上下文初始化 (Context Initialization)                     │
│    - 加载系统提示 (System Prompt)                            │
│    - 加载用户内存 (User Memory)                              │
│    - 加载项目配置 (Project Config)                           │
│    - 加载对话历史 (Conversation History)                     │
└──────────────────┬──────────────────────────────────────────┘
                   │
                   ▼
┌─────────────────────────────────────────────────────────────┐
│ 4. 意图分类 (Intent Classification)                          │
│    - 代码编辑 (Code Editing)                                 │
│    - 代码审查 (Code Review)                                  │
│    - 问答/研究 (QA/Research)                                 │
│    - 工作流/自动化 (Workflow/Automation)                     │
│    - 多代理编排 (Multi-Agent Orchestration)                  │
└──────────────────┬──────────────────────────────────────────┘
                   │
                   ▼
┌─────────────────────────────────────────────────────────────┐
│ 5. 参数提取 (Parameter Extraction)                           │
│    - 工具名称和参数                                           │
│    - Subagent类型和配置                                      │
│    - 权限和隔离要求                                           │
│    - 优先级和超时设置                                         │
└──────────────────┬──────────────────────────────────────────┘
                   │
                   ▼
┌─────────────────────────────────────────────────────────────┐
│ 6. 验证和优化 (Validation & Optimization)                   │
│    - 检查参数有效性                                           │
│    - 验证权限                                                 │
│    - 去重和合并请求                                           │
│    - 预测资源需求                                             │
└──────────────────┬──────────────────────────────────────────┘
                   │
                   ▼
┌─────────────────────────────────────────────────────────────┐
│ 结构化提示 (Structured Prompt)                               │
└─────────────────────────────────────────────────────────────┘

1.2 提示词结构化规则

层级

组件

作用

优先级

系统层

System Prompt

定义Assistant角色、能力、约束

P0 (最高)

Session Context

当前会话的元数据

P0

记忆层

User Memory

用户配置和偏好

P1

Project Memory

项目状态和上下文

P1

Feedback Memory

用户验证的行为规则

P1

对话层

History (Recent)

最近5-10轮对话

P2

History (Compressed)

压缩的历史摘要

P2

请求层

User Input

当前用户消息

P0

IDE Context

编辑器选择、文件状态

P2

Tool Definitions

可用工具的schema

P1

1.3 提示词验证规则

// 伪代码:提示词验证引擎
class PromptValidator {
  validate(prompt) {
    const checks = {
      // 检查1: 检测恶意输入
      hasMaliciousPatterns: this.checkForInjection(prompt),
      
      // 检查2: 检测token溢出
      tokenCountExceeded: this.estimateTokens(prompt) > MAX_TOKENS,
      
      // 检查3: 检测工具冲突
      hasToolConflicts: this.detectToolConflicts(prompt),
      
      // 检查4: 检测权限不足
      permissionsMissing: this.validatePermissions(prompt),
      
      // 检查5: 检测模糊指令
      isAmbiguous: this.detectAmbiguity(prompt),
      
      // 检查6: 检测安全问题
      hasSafetyIssues: this.checkSafety(prompt),
    };
    
    // 返回验证结果
    return {
      isValid: Object.values(checks).every(v => !v),
      failures: Object.entries(checks)
        .filter(([_, v]) => v)
        .map(([key, _]) => key),
      warnings: this.detectWarnings(prompt),
      suggestions: this.generateSuggestions(prompt)
    };
  }

  checkForInjection(prompt) {
    const injectionPatterns = [
      /ignore.*instructions/i,
      /pretend.*you.*are/i,
      /system prompt override/i,
    ];
    return injectionPatterns.some(p => p.test(prompt));
  }

  estimateTokens(prompt) {
    // 粗略估计: 1 token ≈ 4 chars
    return Math.ceil(prompt.length / 4);
  }
}

1.4 提示词优化策略

清晰性优化
❌ 不清晰: "看看这个文件是否有问题"
✅ 清晰: "检查src/api.ts中的错误处理逻辑,特别是network timeout的处理"

清晰性检查清单:
□ 指定了具体的文件或代码位置
□ 定义了"问题"的具体含义
□ 说明了期望的结果格式
□ 设置了合理的范围边界
结构性优化
优化模式: "背景 → 任务 → 约束 → 期望输出"

背景: 这是一个React应用的登录流程
任务: 修复在iOS Safari上会话过期后无法自动重新登录的bug
约束: 
  - 不修改现有的API契约
  - 保持向后兼容性
  - 避免添加额外的网络请求
期望输出: 
  - 修改说明(为什么这样修)
  - 修改前后的行为对比
  - 关键变更点的验证方法

2. Agent准备阶段

2.1 预启动检查清单

┌──────────────────────────────────────────────────────────┐
│ Agent 初始化前 (Pre-Launch Checks)                        │
└──────────────────┬───────────────────────────────────────┘
                   │
        ┌──────────┼──────────┬──────────┬──────────┐
        │          │          │          │          │
        ▼          ▼          ▼          ▼          ▼
    ┌────┐    ┌────┐    ┌────┐    ┌────┐    ┌────┐
    │环境│    │权限│    │资源│    │内存│    │网络│
    │检查│    │检查│    │检查│    │检查│    │检查│
    └────┘    └────┘    └────┘    └────┘    └────┘
        │          │          │          │          │
        └──────────┼──────────┼──────────┼──────────┘
                   │
                   ▼
        ┌──────────────────────┐
        │  是否通过所有检查?    │
        └──────────┬───────────┘
                   │
        ┌──────────┴───────────┐
       否                       是
        │                       │
        ▼                       ▼
    ┌────────┐           ┌──────────┐
    │返回错误│           │启动Agent │
    │拒绝    │           │          │
    └────────┘           └──────────┘

2.2 具体检查项详解

2.2.1 环境检查
// 伪代码:环境预检查
class EnvironmentCheck {
  async checkEnvironment(agentConfig) {
    return {
      // 检查1: 工作目录有效性
      workingDirValid: await fs.access(process.cwd()),
      
      // 检查2: Git仓库状态(如果适用)
      gitStatus: await this.checkGitStatus(),
      
      // 检查3: Node.js版本兼容性
      nodeVersionOK: semver.gte(process.version, '16.0.0'),
      
      // 检查4: 必要的系统命令
      requiredCmds: {
        git: await this.checkCommand('git'),
        npm: await this.checkCommand('npm'),
        node: await this.checkCommand('node'),
      },
      
      // 检查5: 文件系统权限
      fsPermissions: {
        canRead: await this.checkReadPermission(),
        canWrite: await this.checkWritePermission(),
        canExecute: await this.checkExecutePermission(),
      },
      
      // 检查6: 环境变量
      envVars: this.checkRequiredEnvVars(agentConfig.requiredEnv),
    };
  }
}
2.2.2 权限检查
class PermissionCheck {
  async checkPermissions(agentConfig, userConfig) {
    const requiredPermissions = agentConfig.requiredPermissions;
    const grantedPermissions = userConfig.permissions;
    
    return {
      // 权限映射
      permissionMap: requiredPermissions.map(req => ({
        tool: req.tool,
        action: req.action,
        granted: grantedPermissions.some(p => 
          p.tool === req.tool && this.actionMatches(p.action, req.action)
        ),
        requiresPrompt: !this.isAutoApproved(req),
      })),
      
      // 权限冲突检测
      conflicts: this.detectConflicts(requiredPermissions, grantedPermissions),
      
      // 上次拒绝的权限
      previouslyDenied: this.getPreviousDenials(requiredPermissions),
    };
  }

  actionMatches(grantedAction, requiredAction) {
    // 支持通配符匹配
    // "npm:*" 匹配 "npm:install"
    const grantedPattern = grantedAction.replace('*', '.*');
    return new RegExp(`^${grantedPattern}$`).test(requiredAction);
  }
}
2.2.3 资源检查
class ResourceCheck {
  async checkResources(agentConfig) {
    return {
      // 内存检查
      memory: {
        required: agentConfig.estimatedMemoryMB,
        available: os.freemem() / 1024 / 1024,
        sufficient: (os.freemem() / 1024 / 1024) > agentConfig.estimatedMemoryMB,
      },
      
      // 磁盘空间检查
      diskSpace: {
        required: agentConfig.estimatedDiskSpaceMB,
        available: await this.getAvailableDiskSpace(),
        sufficient: (await this.getAvailableDiskSpace()) > agentConfig.estimatedDiskSpaceMB,
      },
      
      // 网络连接检查
      network: {
        connected: await this.checkInternetConnection(),
        latency: await this.measureLatency(),
        bandwidth: await this.estimateBandwidth(),
      },
      
      // 并发限制检查
      concurrency: {
        currentAgents: this.getRunningAgentCount(),
        limit: MAX_CONCURRENT_AGENTS,
        canLaunch: this.getRunningAgentCount() < MAX_CONCURRENT_AGENTS,
      },
      
      // 令牌预算检查
      tokenBudget: {
        budgetSet: agentConfig.tokenBudget !== null,
        remaining: agentConfig.tokenBudget - this.getSpentTokens(),
        sufficient: (agentConfig.tokenBudget - this.getSpentTokens()) > MINIMUM_TOKENS,
      },
    };
  }
}

2.3 Agent初始化流程

┌─────────────────────────────────────────────────┐
│ Agent 初始化序列 (Initialization Sequence)      │
└────────────────┬────────────────────────────────┘
                 │
    ┌────────────┴────────────┐
    │                         │
    ▼                         ▼
┌─────────────┐        ┌──────────────┐
│ 标准Agent  │        │ 特殊Agent    │
│(通用型)     │        │(专用型)      │
└─────────────┘        └──────────────┘
    │                         │
    ▼                         ▼
┌─────────────────────────────────────────────┐
│ 1. 配置装载 (Load Configuration)            │
│    - 代理类型配置                           │
│    - 模型参数                               │
│    - 工具列表                               │
└────────────────┬────────────────────────────┘
                 │
                 ▼
┌─────────────────────────────────────────────┐
│ 2. 系统提示构建 (Build System Prompt)       │
│    - 基础系统提示                           │
│    - 注入内存片段                           │
│    - 添加工具定义                           │
│    - 添加约束和规则                         │
└────────────────┬────────────────────────────┘
                 │
                 ▼
┌─────────────────────────────────────────────┐
│ 3. 上下文窗口准备 (Prepare Context Window)  │
│    - 估计token使用                          │
│    - 分配压缩空间                           │
│    - 设置缓存策略                           │
└────────────────┬────────────────────────────┘
                 │
                 ▼
┌─────────────────────────────────────────────┐
│ 4. 工具绑定 (Bind Tools)                    │
│    - 验证工具availability                   │
│    - 设置工具权限                           │
│    - 配置工具超时                           │
└────────────────┬────────────────────────────┘
                 │
                 ▼
┌─────────────────────────────────────────────┐
│ 5. 内存注入 (Inject Memory)                 │
│    - 加载用户内存                           │
│    - 加载项目内存                           │
│    - 加载反馈规则                           │
│    - 优化相关度                             │
└────────────────┬────────────────────────────┘
                 │
                 ▼
┌─────────────────────────────────────────────┐
│ 6. 隔离准备 (Setup Isolation)               │
│    - 如果需要: 创建worktree                │
│    - 如果需要: 创建沙箱环境                │
│    - 设置回滚点                             │
└────────────────┬────────────────────────────┘
                 │
                 ▼
┌─────────────────────────────────────────────┐
│ Agent 就绪 (Agent Ready)                    │
└─────────────────────────────────────────────┘

2.4 特殊Agent的初始化差异

Agent类型

初始化差异

工具集

系统角色

claude (通用)

标准初始化

所有工具

多功能助手

claude-code-guide

注入CLI知识库

Read, WebFetch, WebSearch

CLI/SDK专家

Explore

注入快速搜索策略

Bash, Read, 文件工具

代码查找器

Plan

注入架构思维模板

设计工具集

架构师

general-purpose

注入广泛搜索能力

所有工具

通用研究者

Workflow

注入编排引擎

工作流引擎工具

编排器


3. Subagent拆解机制

3.1 何时创建Subagent的决策树

┌────────────────────────────────────────┐
│ 应该创建Subagent吗?                    │
└──────────────┬─────────────────────────┘
               │
        ┌──────┴──────┐
        │             │
        ▼             ▼
    ┌────┐       ┌────┐
    │任务 │       │资源 │
    │特征 │       │考虑 │
    └────┘       └────┘
        │             │
        ▼             ▼
   ┌─────────┐   ┌─────────┐
   │ 是否    │   │ 是否    │
   │独立?    │   │高开销?  │
   └────┬────┘   └────┬────┘
        │             │
       YES           YES
        │             │
        ▼             ▼
   ┌─────────┐   ┌─────────┐
   │能否     │   │有赤字?  │
   │并行?    │   │预算?    │
   └────┬────┘   └────┬────┘
        │             │
       YES           NO
        │             │
        └──────┬──────┘
               │
               ▼
         ┌──────────┐
         │创建      │
         │Subagent │
         └──────────┘
         
降级到inline:
- 资源紧张
- 上下文有限
- 交互需要同步

3.2 自动Subagent触发规则

// 伪代码:Subagent决策引擎
class SubagentDecider {
  shouldCreateSubagent(task, context) {
    const triggers = {
      // 触发规则1: 复杂的多步任务
      isComplexMultiStep: task.steps.length > 3 && 
        task.steps.some(s => s.estimatedTime > 30000),
      
      // 触发规则2: 用户明确要求
      userExplicitRequest: /agent|delegate|spawn|parallel/i.test(task.prompt),
      
      // 触发规则3: 可以并行的独立工作
      canParallelize: this.detectParallelizableWork(task),
      
      // 触发规则4: 需要隔离上下文
      needsContextIsolation: task.type === 'exploration' && 
        task.scope === 'broad',
      
      // 触发规则5: 需要保护主context
      protectsMainContext: this.estimateContextUsage(task) > 
        (MAX_CONTEXT_WINDOW * 0.6),
      
      // 触发规则6: 需要不同的模型或推理级别
      differentModelNeeded: task.requiredModel !== context.currentModel ||
        task.requiredEffort !== context.currentEffort,
    };

    // 反向触发规则:不应该创建subagent的情况
    const antiTriggers = {
      // 反向规则1: 任务过于简单
      isTooSimple: task.complexity < 2,
      
      // 反向规则2: 需要同步反馈循环
      needsSyncFeedback: task.type === 'interactive',
      
      // 反向规则3: 资源紧张
      resourceConstrained: context.remainingTokens < 50000 ||
        context.runningAgents >= MAX_CONCURRENT_AGENTS,
      
      // 反向规则4: 任务涉及用户IDE状态
      needsIDEContext: task.requiresSelection || 
        task.requiresActivePath,
    };

    // 决策逻辑
    if (Object.values(antiTriggers).some(v => v)) {
      return { create: false, reason: 'antiTrigger' };
    }

    const triggerCount = Object.values(triggers).filter(v => v).length;
    if (triggerCount >= 2) {
      return { 
        create: true, 
        reason: 'sufficient_triggers',
        recommendedType: this.selectAgentType(task)
      };
    }

    return { create: false, reason: 'insufficient_triggers' };
  }

  selectAgentType(task) {
    // 选择最合适的agent类型
    const typeMap = {
      'code-search': 'Explore',
      'architecture-design': 'Plan',
      'complex-research': 'general-purpose',
      'cli-questions': 'claude-code-guide',
      'code-review': 'code-review',
      'orchestration': 'Workflow',
    };
    return typeMap[task.category] || 'claude';
  }
}

3.3 Subagent通信协议

┌──────────────┐                    ┌──────────────┐
│  Main Agent  │                    │  Subagent    │
└──────┬───────┘                    └──────┬───────┘
       │                                   │
       │ 1. 创建 (Spawn)                   │
       │    {prompt, opts, schema}         │
       ├──────────────────────────────────>│
       │                                   │
       │                    2. 开始执行    │
       │                       (Running)   │
       │                                   │
       │ 3. 轮询状态 (Optional)            │
       ├──────────────────────────────────>│
       │<──────────────────────────────────┤
       │    4. 状态响应                     │
       │       {status, progress}          │
       │                                   │
       │ 5. 等待完成                       │
       │    (Blocking or Background)       │
       │                                   │
       │                    6. 完成        │
       │                       (Completed) │
       │<──────────────────────────────────┤
       │    7. 返回结果                     │
       │       {output, exitCode}          │
       │                                   │
       │ 8. 处理结果                       │
       │    (Process Result)               │
       │                                   │

3.4 Subagent隔离模式

// 伪代码:Subagent隔离配置
const SubagentIsolation = {
  // 模式1: 无隔离(默认)
  NONE: {
    filesystem: 'shared',
    memory: 'shared',
    environment: 'shared',
    tokens: 'shared_budget',
    context: 'inherited',
    overhead: 'minimal',
    useCase: '快速轻量任务'
  },

  // 模式2: 文件系统隔离(Worktree)
  WORKTREE: {
    filesystem: 'isolated',
    memory: 'isolated',
    environment: 'inherited',
    tokens: 'shared_budget',
    context: 'inherited',
    overhead: 'high (200-500ms setup)',
    useCase: '需要并行修改文件的代码操作'
  },

  // 模式3: 上下文隔离
  CONTEXT_ISOLATED: {
    filesystem: 'shared',
    memory: 'filtered',
    environment: 'shared',
    tokens: 'allocated',
    context: 'clean_slate',
    overhead: 'medium',
    useCase: '需要独立思考的复杂问题'
  },

  // 模式4: 完全隔离(远程)
  REMOTE: {
    filesystem: 'isolated',
    memory: 'isolated',
    environment: 'isolated',
    tokens: 'allocated',
    context: 'isolated',
    overhead: 'very_high',
    useCase: '需要完整隔离的长期运行任务'
  }
};

// 决策:何时选择隔离模式
function selectIsolationMode(task, resources) {
  if (resources.tokenBudget && resources.tokenBudget > 500000) {
    if (task.needsFileSystemChanges && task.parallelWork) {
      return 'WORKTREE'; // 需要文件隔离 + 并行
    }
    if (task.complexity > 7) {
      return 'CONTEXT_ISOLATED'; // 高复杂度需要清晰上下文
    }
  }
  return 'NONE'; // 默认无隔离
}

4. 上下文压缩策略

4.1 上下文使用分布

┌────────────────────────────────────┐
│ Token 预算分配 (128K context)      │
└────────────────────────────────────┘

系统层 (System Layer)
├─ 系统提示/角色定义        5-8K (4-6%)
├─ 工具定义和schema        8-15K (6-12%)
├─ 约束和规则              2-3K (2%)
└─ [小计]                  ≈ 20K token

记忆层 (Memory Layer)
├─ 用户配置内存            2-5K (2-4%)
├─ 项目上下文内存          3-8K (2-6%)
├─ 反馈和最佳实践          2-4K (2-3%)
└─ [小计]                  ≈ 10K token

对话历史层 (History Layer)
├─ 最近对话 (5-10轮)       15-30K (12-23%)
├─ 压缩历史摘要            5-10K (4-8%)
├─ IDE上下文               2-5K (2-4%)
└─ [小计]                  ≈ 25K token

当前请求 (Current Request)
├─ 用户消息                1-5K (1-4%)
├─ 文件内容引用            20-40K (15-31%)
└─ [小计]                  ≈ 30K token

缓冲/稀疏空间
├─ LLM推理空间             10-20K (8-15%)
└─ [小计]                  ≈ 15K token

总计: ≈ 100K token (78%)
缓冲: ≈ 28K token (22%)

4.2 压缩算法

// 伪代码:分层压缩引擎
class ContextCompressor {
  compressHistory(conversation, targetTokens) {
    const phases = [
      // 阶段1: 智能摘要(保留最高价值信息)
      { 
        phase: 'SUMMARIZE',
        condition: conversation.length > 20,
        strategy: 'semantic_clustering',
        preservation: '关键决策点, 用户纠正, 主要发现'
      },
      
      // 阶段2: 去重和合并
      {
        phase: 'DEDUPLICATE',
        condition: true,
        strategy: 'fuzzy_matching',
        preserveKeys: ['新信息', '用户反馈', '错误信息']
      },
      
      // 阶段3: 选择性删除
      {
        phase: 'SELECTIVE_DELETE',
        condition: conversation.estimatedTokens > targetTokens * 1.2,
        delete: ['重复的工具调用', '冗长的命令输出', '中间的调试步骤']
      },
      
      // 阶段4: 令牌级优化
      {
        phase: 'TOKEN_OPTIMIZATION',
        strategies: [
          '使用缩略词',
          '移除不必要的空白',
          '使用引用而非重复',
          '压缩代码(保持有效性)'
        ]
      }
    ];

    let compressed = conversation;
    for (const phase of phases) {
      if (phase.condition) {
        compressed = this.applyPhase(compressed, phase);
      }
      
      if (this.estimateTokens(compressed) <= targetTokens) {
        break;
      }
    }

    return {
      compressed,
      originalTokens: this.estimateTokens(conversation),
      compressedTokens: this.estimateTokens(compressed),
      ratio: this.estimateTokens(compressed) / this.estimateTokens(conversation),
      preservedInformation: this.analyzePreservation(conversation, compressed)
    };
  }

  // 智能摘要实现
  summarizeConversation(turns) {
    const summary = {
      keyDecisions: [],
      userCorrections: [],
      importantFindings: [],
      errors: [],
      resolutions: []
    };

    for (const turn of turns) {
      // 检测关键决策点
      if (this.isKeyDecision(turn)) {
        summary.keyDecisions.push({
          topic: turn.topic,
          decision: turn.decision,
          reason: turn.reason
        });
      }

      // 检测用户纠正
      if (this.isUserCorrection(turn)) {
        summary.userCorrections.push({
          what: turn.corrected,
          why: turn.reason
        });
      }

      // 检测重要发现
      if (this.isImportantFinding(turn)) {
        summary.importantFindings.push(turn.finding);
      }
    }

    return this.formatSummary(summary);
  }

  // 上下文窗口状态追踪
  trackContextWindow(agent) {
    return {
      total: 128000,
      used: {
        system: 8000,
        memory: 10000,
        history: 25000,
        current: 30000,
        reserved: 15000
      },
      remaining: 40000,
      percentageUsed: 68.75,
      compressionNeeded: false,
      recommendations: [
        '如果下一步需要大量输入,考虑压缩历史',
        '令牌预算充足,可以接受较大的输出'
      ]
    };
  }
}

4.3 压缩质量保证

类型

保留策略

删除候选

质量指标

用户修正

100%

保留所有

关键决策

100%

保留详细理由

错误信息

90%

重复错误

保留第一个 + 最后的解决方案

工具调用

50%

中间调试步骤

保留输入/输出摘要

命令输出

30%

详细日志

保留关键行

代码块

80%

注释行

保留逻辑结构

对话

60%

重复问题

保留第一个+最后一个

4.4 缓存策略

// 伪代码:提示词缓存管理
class PromptCacheManager {
  // Claude API 提示词缓存策略
  // 文档: https://docs.anthropic.com/en/docs/build-a-system-with-claude/prompt-caching

  initializeCache(session) {
    return {
      // 第一层缓存: 系统提示 (常见于所有请求)
      systemPrompt: {
        content: BASE_SYSTEM_PROMPT,
        ttl: Infinity, // 整个会话有效
        cacheControl: 'ephemeral', // 5分钟内有效
        hitRate: '100%'
      },

      // 第二层缓存: 工具定义 (变化不频繁)
      toolDefinitions: {
        content: ALL_TOOL_SCHEMAS,
        ttl: 3600000, // 1小时
        cacheControl: 'ephemeral',
        hitRate: '95%'
      },

      // 第三层缓存: 用户内存 (每次刷新)
      userMemory: {
        content: loadUserMemory(),
        ttl: 300000, // 5分钟
        cacheControl: 'ephemeral',
        hitRate: '80%'
      },

      // 第四层缓存: 最近对话 (滑动窗口)
      recentHistory: {
        content: conversation.slice(-10),
        ttl: 300000, // 5分钟
        cacheControl: 'ephemeral',
        hitRate: '70%'
      }
    };
  }

  // 缓存命中率统计
  analyzeCache() {
    return {
      totalRequests: 1000,
      cacheHits: 850,
      cacheMisses: 150,
      hitRate: 85,
      estimatedTokenSaved: 425000, // 避免了2倍的缓存前缀token
      costSavings: '50%'
    };
  }
}

5. LLM推理机制

5.1 推理流程架构

┌──────────────────────────────────────────────┐
│ 输入张量 (Input Tokens)                       │
│ ↓ Embedding Layer                             │
│ [1, seq_len, d_model=4096]                   │
└────────────┬─────────────────────────────────┘
             │
             ▼
┌──────────────────────────────────────────────┐
│ 位置编码 (Positional Encoding)                │
│ + Token编码 (Token Embeddings)                │
└────────────┬─────────────────────────────────┘
             │
             ▼
┌──────────────────────────────────────────────┐
│ Transformer Block (×88 layers for Haiku)     │
├──────────────────────────────────────────────┤
│ 每层包含:                                    │
│                                              │
│ 1. 多头自注意力 (Multi-Head Attention)       │
│    - num_heads = 32                          │
│    - head_dim = 128                          │
│    - 计算 Q, K, V 投影                       │
│    - 计算注意力权重 (softmax)                │
│    - 应用注意力到 V                          │
│                                              │
│ 2. 前馈网络 (Feed-Forward)                   │
│    - Linear(d_model → 4*d_model)             │
│    - GELU激活                                │
│    - Linear(4*d_model → d_model)             │
│                                              │
│ 3. 层归一化 (Layer Normalization)            │
│ 4. 残差连接 (Residual Connections)          │
│                                              │
│ 计算复杂度每层: O(seq_len^2 * d_model)      │
└────────────┬─────────────────────────────────┘
             │
             ▼
┌──────────────────────────────────────────────┐
│ 最终层归一化                                  │
│ Shape: [1, seq_len, d_model]                 │
└────────────┬─────────────────────────────────┘
             │
             ▼
┌──────────────────────────────────────────────┐
│ 输出投影到词汇表                              │
│ Linear(d_model → vocab_size=151646)          │
│ Shape: [1, seq_len, 151646]                  │
└────────────┬─────────────────────────────────┘
             │
             ▼
┌──────────────────────────────────────────────┐
│ 采样策略 (Sampling Strategy)                  │
│ ↓                                             │
│ 选择下一个Token                              │
└────────────┬─────────────────────────────────┘
             │
             ▼
┌──────────────────────────────────────────────┐
│ 输出Token                                    │
│ + Token ID → 解码为文本                      │
└──────────────────────────────────────────────┘

5.2 多头注意力机制详解

// 伪代码:多头注意力计算
class MultiHeadAttention {
  forward(query, key, value, mask=null) {
    const batchSize = query.shape[0];
    const numHeads = 32;
    const seqLen = query.shape[1];
    const dModel = 4096;
    const headDim = dModel / numHeads; // 128

    // 步骤1: 线性投影和分头
    const Q = this.linearQ(query)           // [batch, seq, d_model]
      .reshape([batchSize, seqLen, numHeads, headDim])
      .transpose([0, 2, 1, 3]);             // [batch, heads, seq, head_dim]
    
    const K = this.linearK(key)
      .reshape([batchSize, seqLen, numHeads, headDim])
      .transpose([0, 2, 1, 3]);             // [batch, heads, seq, head_dim]
    
    const V = this.linearV(value)
      .reshape([batchSize, seqLen, numHeads, headDim])
      .transpose([0, 2, 1, 3]);             // [batch, heads, seq, head_dim]

    // 步骤2: 缩放点积注意力 (Scaled Dot-Product Attention)
    const scale = Math.sqrt(headDim);       // sqrt(128) ≈ 11.3
    
    // 计算注意力分数
    const scores = matmul(Q, K.transpose([0, 1, 3, 2])) / scale;
    // Shape: [batch, heads, seq, seq]
    
    // 步骤3: 应用掩码(因果掩码用于自回归)
    if (mask !== null) {
      scores = scores + mask * -1e9;
    }
    
    // 步骤4: Softmax 归一化
    const attention = softmax(scores, dim=-1);
    // Shape: [batch, heads, seq, seq]
    // 每行和为1,表示对后续token的关注度
    
    // 步骤5: 应用注意力到值
    const context = matmul(attention, V);
    // Shape: [batch, heads, seq, head_dim]
    
    // 步骤6: 合并多头
    let output = context
      .transpose([0, 2, 1, 3])              // [batch, seq, heads, head_dim]
      .reshape([batchSize, seqLen, dModel]); // [batch, seq, d_model]
    
    // 步骤7: 输出投影
    output = this.linearOutput(output);
    
    return output;
  }

  // 实际示例:注意力计算
  example() {
    // 假设我们处理句子: "The cat sat on the mat"
    // 当生成第6个token时的注意力分布:
    
    const tokens = ["The", "cat", "sat", "on", "the", "<mask>"];
    const query = embeddings[5];  // "mat"的查询向量
    
    // 计算对每个历史token的注意力:
    const attentionDistribution = {
      "The": 0.05,   // 低关注:定冠词
      "cat": 0.35,   // 中等关注:主语
      "sat": 0.20,   // 低关注:动词
      "on": 0.10,    // 低关注:前置词
      "the": 0.20,   // 中等关注:冠词
    };
    
    // 多头注意力的不同头关注不同方面:
    const heads = {
      head_0: { "cat": 0.4, "the": 0.3 },      // 名词和冠词
      head_1: { "on": 0.6, "the": 0.3 },       // 前置词
      head_2: { "sat": 0.5, "cat": 0.3 },      // 动词和主语
      // ... 共32个头,每个关注不同的语言特征
    };
  }
}

5.3 采样策略

// 伪代码:标记采样实现
class TokenSampler {
  // 不同采样模式
  sample(logits, temperature=1.0, topP=0.9, mode='nucleus') {
    // logits shape: [vocab_size] = 151646维向量
    // 每维代表一个词汇项的得分
    
    // 步骤1: 温度缩放
    const scaledLogits = logits.map(l => l / temperature);
    // temperature 低 (0.1) → 分布更尖锐,更确定的输出
    // temperature 高 (2.0) → 分布更平坦,更多样的输出
    
    // 步骤2: Softmax转概率
    const probabilities = softmax(scaledLogits);
    // 现在概率和为1
    
    if (mode === 'greedy') {
      // 模式1:贪心采样 (Greedy Sampling)
      // 始终选择概率最高的token
      return argmax(probabilities);
      // 确定性,重复性强,适合代码生成
    }
    
    if (mode === 'nucleus') {
      // 模式2:核采样 (Nucleus/Top-P Sampling)
      // 选择累积概率达到topP的最高概率tokens
      
      const sorted = probabilities
        .map((p, i) => ({prob: p, idx: i}))
        .sort((a, b) => b.prob - a.prob);
      
      let cumSum = 0;
      const nucleus = [];
      for (const {prob, idx} of sorted) {
        cumSum += prob;
        nucleus.push(idx);
        if (cumSum >= topP) break;
      }
      
      // 从nucleus中随机采样
      const renormalized = nucleus.map(i => probabilities[i]);
      const renormalizedProbs = renormalized.map(
        p => p / renormalized.reduce((a,b) => a+b)
      );
      
      return sample(nucleus, renormalizedProbs);
      // 输出多样但受控,适合对话生成
    }
    
    if (mode === 'top-k') {
      // 模式3:Top-K采样
      // 只考虑概率最高的K个tokens
      
      const k = 50;
      const topKIndices = argsort(probabilities)
        .slice(-k)
        .reverse();
      
      const topKProbs = topKIndices.map(i => probabilities[i]);
      const renormalized = topKProbs.map(
        p => p / topKProbs.reduce((a,b) => a+b)
      );
      
      return sample(topKIndices, renormalized);
      // 限制候选范围,平衡质量和多样性
    }
    
    if (mode === 'beam-search') {
      // 模式4:束搜索 (Beam Search)
      // 保持多条最有可能的生成路径
      
      const beamWidth = 5;
      const beams = [];
      
      // 初始化:选择前beamWidth个tokens
      for (let i = 0; i < beamWidth; i++) {
        const idx = argsort(probabilities).at(-1-i);
        beams.push({
          tokens: [idx],
          score: Math.log(probabilities[idx])
        });
      }
      
      // 扩展:对每个beam生成下一个token
      // 跟踪所有可能的序列及其得分
      // 选择得分最高的beamWidth个序列继续
      
      return beams;
      // 有约束的多样生成,确保高质量
    }
  }

  // Claude Code实际使用的采样配置
  getDefaultConfig() {
    return {
      // 一般对话和代码生成
      default: {
        temperature: 1.0,
        topP: 0.9,
        mode: 'nucleus',
      },

      // 高度确定性(如代码)
      deterministic: {
        temperature: 0.0,
        topP: 1.0,
        mode: 'greedy',
      },

      // 创意性高(如写作)
      creative: {
        temperature: 1.2,
        topP: 0.95,
        mode: 'nucleus',
      },

      // 结构化输出
      structured: {
        temperature: 0.1,
        topP: 0.9,
        mode: 'greedy',
      },
    };
  }
}

5.4 推理性能特征

模型

上下文长度

缓存前缀Token成本

新Token成本

推荐用途

Haiku 4.5

200K

~50%

100%

快速循环, 小任务

Sonnet 5

200K

~50%

100%

平衡, 一般用途

Opus 4.8

200K

~50%

100%

复杂推理, 编排

Fable 5

200K

~50%

100%

最高性能, 长上下文

注:成本相对于"无缓存"的基准。缓存前缀token是缓存的token,新token是每次生成的新token。


6. 工具集成流程

6.1 工具调用决策树

┌─────────────────────────────────┐
│ Agent 状态: 需要下一步操作       │
│ 当前上下文: {...}               │
│ 提示词: "请修改src/app.ts"      │
└──────────────┬──────────────────┘
               │
               ▼
┌─────────────────────────────────┐
│ 工具选择引擎                     │
├─────────────────────────────────┤
│                                 │
│ 1. 问题类型识别                 │
│    ↓                             │
│    - 代码修改? → Edit工具        │
│    - 代码查询? → Read工具        │
│    - 命令执行? → Bash工具        │
│    - 网络搜索? → WebSearch工具   │
│    - 设计/规划? → Plan工具       │
│                                 │
│ 2. 可用性检查                   │
│    ↓                             │
│    - 工具已加载?                │
│    - 工具权限OK?                │
│    - 工具配置有效?              │
│    - 资源充足?                  │
│                                 │
│ 3. 工具排序 (优先级)            │
│    ↓                             │
│    - 必要的 (P0)                │
│    - 推荐的 (P1)                │
│    - 可选的 (P2)                │
│                                 │
│ 4. 参数验证                     │
│    ↓                             │
│    - 检查必需参数               │
│    - 验证参数类型               │
│    - 检查路径合法性             │
│    - 估计执行时间               │
│                                 │
└──────────────┬──────────────────┘
               │
               ▼
┌─────────────────────────────────┐
│ 权限检查和批准                   │
├─────────────────────────────────┤
│                                 │
│ 检查权限:                       │
│  ✓ 自动批准 (Allowlist)        │
│  ? 需要提示 (Interactive)       │
│  ✗ 拒绝 (Blocklist)            │
│                                 │
│ 用户批准? (如果需要)            │
│  - 用户同意 → 继续              │
│  - 用户拒绝 → 返回错误          │
│  - 超时 → 默认拒绝              │
│                                 │
└──────────────┬──────────────────┘
               │
               ▼
┌─────────────────────────────────┐
│ 工具执行                         │
├─────────────────────────────────┤
│                                 │
│ 1. 参数序列化                   │
│    - 转换为JSON                 │
│    - 处理特殊字符               │
│    - 验证大小限制               │
│                                 │
│ 2. 执行                         │
│    - 工具特定的执行逻辑         │
│    - 错误处理                   │
│    - 超时处理                   │
│    - 资源清理                   │
│                                 │
│ 3. 输出收集                     │
│    - 捕获stdout/stderr          │
│    - 返回值序列化               │
│    - 错误信息格式化             │
│                                 │
│ 4. 大小和性能检查               │
│    - 输出是否超过限制?          │
│    - 执行时间是否过长?          │
│    - 是否包含敏感信息?          │
│                                 │
└──────────────┬──────────────────┘
               │
               ▼
┌─────────────────────────────────┐
│ 结果处理                         │
├─────────────────────────────────┤
│                                 │
│ 1. 成功 (exit code 0)           │
│    - 解析输出                   │
│    - 更新上下文                 │
│    - 继续推理                   │
│                                 │
│ 2. 错误 (exit code != 0)        │
│    - 捕获错误信息               │
│    - 分类错误类型               │
│    - 建议重试或替代方案         │
│                                 │
│ 3. 超时/资源限制                │
│    - 终止执行                   │
│    - 清理资源                   │
│    - 通知用户                   │
│                                 │
└──────────────┬──────────────────┘
               │
               ▼
┌─────────────────────────────────┐
│ 反馈循环                         │
│                                 │
│ 结果 → 更新Agent状态            │
│ ↓                               │
│ 继续推理或返回用户              │
└─────────────────────────────────┘

6.2 工具分类和特征

// 伪代码:工具分类系统
const ToolClassification = {
  // 分类1: 文件操作工具
  FILE_OPERATIONS: {
    'Read': {
      category: '文件操作',
      safety: 'read-only',
      scope: '本地文件系统',
      speed: '毫秒级',
      permissionLevel: 'low',
      riskFactors: ['path_traversal', '敏感文件泄露'],
      commonErrors: ['ENOENT', 'EACCES', '文件太大']
    },
    'Write': {
      category: '文件操作',
      safety: 'write-capable',
      scope: '本地文件系统',
      speed: '毫秒级',
      permissionLevel: 'high',
      riskFactors: ['覆盖重要文件', '磁盘空间耗尽'],
      commonErrors: ['EACCES', 'ENOSPC', '路径无效']
    },
    'Edit': {
      category: '文件操作',
      safety: 'write-capable',
      scope: '局部编辑',
      speed: '毫秒级',
      permissionLevel: 'medium',
      riskFactors: ['意外修改', '大小限制'],
      commonErrors: ['old_string_not_unique', 'file_not_found']
    }
  },

  // 分类2: 命令执行工具
  COMMAND_EXECUTION: {
    'Bash': {
      category: '命令执行',
      safety: 'very-dangerous',
      scope: '操作系统命令',
      speed: '秒级',
      permissionLevel: 'critical',
      riskFactors: ['命令注入', '权限提升', '恶意脚本'],
      commonErrors: ['command_not_found', 'permission_denied', 'timeout'],
      safeguards: ['命令白名单', '超时限制', '输出限制']
    }
  },

  // 分类3: 代理和工作流
  ORCHESTRATION: {
    'Agent': {
      category: '多代理编排',
      safety: 'medium',
      scope: '子任务处理',
      speed: '分钟级',
      permissionLevel: 'medium',
      riskFactors: ['资源竞争', '上下文泄露'],
      commonErrors: ['agent_timeout', 'resource_exhaustion'],
      safeguards: ['并发限制', 'token预算', '隔离']
    },
    'Workflow': {
      category: '工作流编排',
      safety: 'medium',
      scope: '复杂多步流程',
      speed: '分钟级',
      permissionLevel: 'medium',
      riskFactors: ['资源爆炸', '死锁'],
      commonErrors: ['script_error', 'agent_failure', 'token_exceeded'],
      safeguards: ['执行计划验证', 'agent上限', 'token限额']
    }
  },

  // 分类4: 信息检索
  INFORMATION_RETRIEVAL: {
    'WebSearch': {
      category: '信息检索',
      safety: 'medium',
      scope: '公网搜索',
      speed: '秒级',
      permissionLevel: 'low',
      riskFactors: ['错误信息', '隐私问题'],
      commonErrors: ['no_results', 'rate_limit', 'network_error'],
      safeguards: ['结果验证', '速率限制']
    },
    'WebFetch': {
      category: '信息检索',
      safety: 'medium',
      scope: '网页内容获取',
      speed: '秒级',
      permissionLevel: 'low',
      riskFactors: ['403禁止', '恶意内容'],
      commonErrors: ['http_error', 'parse_error', '超时'],
      safeguards: ['SSL验证', '超时控制']
    }
  }
};

// 工具选择优化
class ToolSelector {
  selectBestTool(task, availableTools) {
    const scored = availableTools.map(tool => ({
      tool,
      relevance: this.calculateRelevance(task, tool),
      efficiency: this.calculateEfficiency(tool),
      safety: this.calculateSafety(tool),
      overhead: this.calculateOverhead(tool)
    }));

    // 评分公式: relevance * 0.5 + efficiency * 0.3 - overhead * 0.2
    const ranked = scored.sort((a, b) => 
      (a.relevance * 0.5 + a.efficiency * 0.3 - a.overhead * 0.2) -
      (b.relevance * 0.5 + b.efficiency * 0.3 - b.overhead * 0.2)
    );

    return ranked[0].tool;
  }

  // 工具使用计划
  planToolSequence(task, tools) {
    // 如果任务很复杂,创建工具序列而不是单个工具调用
    const sequence = [];

    // 规则1: 信息收集先于修改
    const readTools = tools.filter(t => t.safety === 'read-only');
    const writeTools = tools.filter(t => t.safety === 'write-capable');
    
    sequence.push(...readTools);
    sequence.push(...writeTools);

    // 规则2: 验证先于执行
    if (task.requiresValidation) {
      sequence.push({ name: 'verify', after: 'execute' });
    }

    // 规则3: 错误处理
    sequence.forEach((tool, idx) => {
      if (idx < sequence.length - 1) {
        tool.errorHandling = 'continue_on_error';
      } else {
        tool.errorHandling = 'fail_fast';
      }
    });

    return sequence;
  }
}

6.3 权限系统

// 伪代码:权限管理系统
class PermissionSystem {
  // 权限类型定义
  PermissionTypes = {
    // 基于工具
    'bash:execute': '执行Bash命令',
    'git:push': '推送到远程仓库',
    'npm:install': '安装npm包',
    
    // 基于操作
    'filesystem:read': '读取文件系统',
    'filesystem:write': '写入文件系统',
    'network:http': '进行HTTP请求',
    
    // 基于资源
    'resource:largeFile': '处理大于100MB的文件',
    'resource:longRunning': '执行超过10分钟的任务',
  };

  // 权限检查流程
  async checkPermission(tool, action, context) {
    const requiredPerm = this.getRequiredPermission(tool, action);
    
    // 第一步: 检查用户全局权限
    const globalPerm = this.getGlobalPermission(requiredPerm);
    if (globalPerm === 'GRANTED') {
      this.auditLog(`权限批准 (全局): ${requiredPerm}`);
      return true;
    }
    if (globalPerm === 'DENIED') {
      this.auditLog(`权限拒绝 (全局): ${requiredPerm}`);
      return false;
    }

    // 第二步: 检查项目特定权限
    const projectPerm = this.getProjectPermission(requiredPerm);
    if (projectPerm === 'GRANTED') {
      this.auditLog(`权限批准 (项目): ${requiredPerm}`);
      return true;
    }

    // 第三步: 检查自动批准规则
    if (this.isAutoApproved(tool, action, context)) {
      this.auditLog(`权限自动批准: ${requiredPerm}`);
      return true;
    }

    // 第四步: 提示用户
    const userApproval = await this.promptUser({
      permission: requiredPerm,
      tool,
      action,
      details: {
        commandWillRun: action,
        affectedFiles: context.targetFiles,
        estimatedTime: context.estimatedTime,
      }
    });

    if (userApproval.approved) {
      // 记住用户的选择
      if (userApproval.rememberChoice) {
        this.savePermission(requiredPerm, 'GRANTED', userApproval.scope);
      }
      this.auditLog(`权限批准 (用户): ${requiredPerm}`);
      return true;
    }

    this.auditLog(`权限拒绝 (用户): ${requiredPerm}`);
    return false;
  }

  // 自动批准规则
  isAutoApproved(tool, action, context) {
    const allowlist = this.getAutoapproveList();
    
    // 规则1: 在allowlist中
    if (allowlist.some(a => a.tool === tool && a.action === action)) {
      return true;
    }

    // 规则2: 只读操作
    if (tool === 'Read' || action.includes('read')) {
      return true;
    }

    // 规则3: 非破坏性操作且有安全限制
    if (action === 'view' || action === 'inspect') {
      return true;
    }

    return false;
  }

  // 权限提示UI
  generatePermissionPrompt(perm) {
    return {
      title: `权限请求: ${perm.tool}`,
      description: perm.description,
      details: {
        '工具': perm.tool,
        '操作': perm.action,
        '影响范围': perm.scope,
        '风险等级': perm.riskLevel // low, medium, high, critical
      },
      options: [
        { label: '批准', value: true },
        { label: '拒绝', value: false },
        { label: '查看详情', action: 'showDetails' }
      ],
      remember: {
        label: '记住我的选择',
        scopes: ['this_session', 'this_project', 'always']
      }
    };
  }
}

7. 多轮交互和输出

7.1 交互循环

┌────────────────────────────────────────────┐
│ 多轮交互循环 (Multi-Turn Interaction Loop) │
└──────────────┬─────────────────────────────┘
               │
   ┌───────────┴────────────┐
   │                        │
   ▼                        ▼
┌──────┐                ┌──────┐
│ 轮1  │                │ 轮2  │
└──────┘                └──────┘
   │                        │
   ├─ 用户输入           ├─ 用户继续输入
   │  "实现登录功能"     │  "加入2FA"
   │                    │
   ├─ 推理(10s)          ├─ 推理(5s)
   │  选择工具            │  上下文查询
   │                    │
   ├─ 工具调用           ├─ 工具调用
   │  1. Read (status)   │  1. Read (current)
   │  2. Edit (auth.ts)  │  2. Edit (2fa.ts)
   │                    │
   ├─ 收集结果           ├─ 收集结果
   │  • 文件读取成功     │  • 代码编辑成功
   │  • 编辑成功         │  • 验证通过
   │                    │
   ├─ 生成输出           ├─ 生成输出
   │  • 生成代码         │  • 生成代码
   │  • 生成说明         │  • 生成说明
   │  • 建议下一步       │  • 提示完成
   │                    │
   ▼                    ▼
┌──────────────────────────────────────────┐
│ 输出给用户                                │
│ • 修改说明                                │
│ • 代码片段                                │
│ • 测试建议                                │
│ • 关联信息                                │
└────────────────┬─────────────────────────┘
                 │
                 ▼
         ┌───────────────┐
         │ 用户进行下一  │
         │ 步操作?       │
         └───────┬───────┘
                 │
        ┌────────┴────────┐
       YES              NO
        │                │
        ▼                ▼
    ┌──────┐        ┌──────┐
    │ 轮N  │        │ 结束 │
    └──────┘        └──────┘

7.2 输出格式和结构化

// 伪代码:输出生成器
class OutputGenerator {
  generateResponse(agentState, toolResults, userRequest) {
    const output = {
      // 第一部分: 文本响应 (面向用户)
      text: this.generateNarrativeOutput(agentState, toolResults),
      
      // 第二部分: 结构化数据 (可选,用于IDE)
      structured: this.generateStructuredOutput(toolResults),
      
      // 第三部分: 元数据
      metadata: {
        executionTime: agentState.executionTime,
        toolsCalled: toolResults.map(r => r.tool),
        tokensUsed: agentState.tokensUsed,
        confidence: this.calculateConfidence(toolResults)
      },

      // 第四部分: 下一步建议
      suggestions: this.generateNextSteps(agentState, userRequest)
    };

    return output;
  }

  // 生成用户友好的文本输出
  generateNarrativeOutput(state, results) {
    const sections = [];

    // 部分1: 摘要
    if (results.length > 0) {
      sections.push(this.generateSummary(results));
    }

    // 部分2: 详细说明
    if (state.complexity > 5) {
      sections.push(this.generateDetailedExplanation(results));
    }

    // 部分3: 代码改动
    if (results.some(r => r.type === 'file_edit')) {
      sections.push(this.generateCodeChanges(results));
    }

    // 部分4: 验证步骤
    if (state.requiresVerification) {
      sections.push(this.generateVerificationSteps(results));
    }

    // 部分5: 相关信息
    if (results.some(r => r.hasWarnings)) {
      sections.push(this.generateWarnings(results));
    }

    return sections.join('\n\n');
  }

  // 结构化输出示例
  generateStructuredOutput(results) {
    return {
      changes: results
        .filter(r => r.type === 'file_edit')
        .map(r => ({
          file: r.filePath,
          operation: r.operation,  // 'create', 'modify', 'delete'
          lineChanges: {
            added: r.addedLines,
            removed: r.removedLines,
            modified: r.modifiedLines
          },
          diff: r.diff  // 可选的差异视图
        })),
      
      commands: results
        .filter(r => r.type === 'command_executed')
        .map(r => ({
          command: r.command,
          exitCode: r.exitCode,
          stdout: r.stdout,
          stderr: r.stderr
        })),
      
      info: results
        .filter(r => r.type === 'information')
        .map(r => ({
          query: r.query,
          findings: r.findings,
          sources: r.sources
        }))
    };
  }

  // 文本示例: 如何生成摘要
  generateSummary(results) {
    const changes = results.filter(r => r.type === 'file_edit');
    
    if (changes.length === 0) {
      return '没有文件修改。';
    }

    const fileList = changes
      .map(c => `${c.filePath} (${c.operation})`)
      .join('、');

    return `已修改 ${changes.length} 个文件: ${fileList}`;
  }

  // 代码改动展示
  generateCodeChanges(results) {
    const edits = results.filter(r => r.type === 'file_edit');
    
    let output = '## 代码改动\n\n';
    
    for (const edit of edits) {
      output += `### ${edit.filePath}\n\n`;
      output += edit.operation === 'create' 
        ? `**新建文件**\n\`\`\`${this.detectLanguage(edit.filePath)}\n`
        : `**修改内容**\n\`\`\`diff\n`;
      
      output += edit.diff || edit.content;
      output += '\n```\n\n';
    }

    return output;
  }

  // 生成验证步骤
  generateVerificationSteps(results) {
    const steps = [];

    // 步骤1: 类型检查
    if (results.some(r => r.type === 'file_edit' && r.language === 'typescript')) {
      steps.push('运行 `npm run typecheck` 验证类型');
    }

    // 步骤2: 代码检查
    if (results.some(r => r.affectsLinting)) {
      steps.push('运行 `npm run lint` 检查代码风格');
    }

    // 步骤3: 测试
    if (results.some(r => r.affectsTests)) {
      steps.push('运行 `npm test` 执行测试');
    }

    // 步骤4: 手动验证
    if (results.some(r => r.requiresManualTest)) {
      steps.push('在浏览器中手动测试功能');
    }

    return `## 验证步骤\n\n${steps.map((s, i) => `${i+1}. ${s}`).join('\n')}`;
  }

  // 警告和注意事项
  generateWarnings(results) {
    const warnings = [];

    for (const result of results) {
      if (result.warnings) {
        warnings.push(...result.warnings);
      }
    }

    if (warnings.length === 0) return '';

    let output = '## ⚠️ 注意事项\n\n';
    warnings.forEach(w => {
      output += `- **${w.category}**: ${w.message}\n`;
    });

    return output;
  }
}

7.3 输出评估标准

输出质量指标:

┌─ 完整性 (Completeness)
│  ✓ 是否回答了用户的所有问题?
│  ✓ 是否提供了必要的上下文?
│  ✓ 是否包括了所有关键步骤?
│
├─ 准确性 (Accuracy)
│  ✓ 代码是否正确且可运行?
│  ✓ 说明是否准确?
│  ✓ 是否避免了常见错误?
│
├─ 可行性 (Actionability)
│  ✓ 用户能否直接使用这个输出?
│  ✓ 是否需要进一步的改进?
│  ✓ 是否明确了下一步?
│
├─ 简洁性 (Conciseness)
│  ✓ 是否避免了冗余?
│  ✓ 是否避免了过度解释?
│  ✓ 是否保持了焦点?
│
└─ 可读性 (Readability)
   ✓ 是否格式清晰?
   ✓ 是否易于扫描?
   ✓ 是否突出了重点?

8. 架构模式

8.1 系统架构总览

┌─────────────────────────────────────────────────────┐
│                     用户界面层 (UI Layer)             │
│  ┌──────────────────────────────────────────────┐  │
│  │ VSCode扩展 │ Web应用 │ IDE扩展 │ CLI工具  │  │
│  └──────────────────────────────────────────────┘  │
└────────────────────┬────────────────────────────────┘
                     │
┌────────────────────▼────────────────────────────────┐
│                  会话管理层 (Session Layer)          │
│  ┌──────────────────────────────────────────────┐  │
│  │ • 会话状态管理      • 用户身份验证          │  │
│  │ • 权限检查          • 审计日志               │  │
│  │ • 钩子执行          • 配置加载               │  │
│  └──────────────────────────────────────────────┘  │
└────────────────────┬────────────────────────────────┘
                     │
┌────────────────────▼────────────────────────────────┐
│                  推理引擎层 (Reasoning Engine)      │
│  ┌──────────────────────────────────────────────┐  │
│  │ • 提示词处理        • LLM API调用            │  │
│  │ • 工具选择          • 采样和生成             │  │
│  │ • 决策树            • 流控制                 │  │
│  └──────────────────────────────────────────────┘  │
└────────────────────┬────────────────────────────────┘
                     │
┌────────────────────▼────────────────────────────────┐
│                  工具执行层 (Tool Layer)             │
│  ┌──────────────────────────────────────────────┐  │
│  │ • 文件操作          • 命令执行               │  │
│  │ • 网络请求          • 代码分析               │  │
│  │ • MCP工具           • 数据处理               │  │
│  └──────────────────────────────────────────────┘  │
└────────────────────┬────────────────────────────────┘
                     │
┌────────────────────▼────────────────────────────────┐
│                  系统资源层 (Resources)              │
│  ┌──────────────────────────────────────────────┐  │
│  │ • 文件系统          • 操作系统                │  │
│  │ • 网络接口          • 计算资源                │  │
│  │ • 存储空间          • 内存管理                │  │
│  └──────────────────────────────────────────────┘  │
└─────────────────────────────────────────────────────┘

8.2 内存系统架构

// 伪代码:内存系统实现
class MemorySystem {
  // 内存类型和结构
  constructor() {
    this.memory = {
      // 用户级别内存(跨会话)
      user: {
        location: '/Users/admin/.claude/projects/-Users-admin-Desktop-AI/memory/',
        structure: {
          'user_*.md': '用户角色和配置',
          'feedback_*.md': '验证的行为规则',
          'reference_*.md': '外部资源指针'
        },
        ttl: 'permanent',
        scope: 'global'
      },

      // 项目级别内存(当前项目)
      project: {
        location: '.claude/memory/ (项目根目录)',
        structure: {
          'project_*.md': '项目状态和目标',
          'architecture_*.md': '系统设计',
          'decisions_*.md': '关键决策'
        },
        ttl: 'until_project_complete',
        scope: 'project'
      },

      // 会话级别内存(当前会话)
      session: {
        location: 'RAM (进程内存)',
        structure: {
          conversationHistory: '完整对话历史',
          agentState: '当前agent状态',
          taskQueue: '待处理任务队列',
          cacheLayer: 'LLM提示词缓存'
        },
        ttl: 'until_session_end',
        scope: 'session'
      }
    };
  }

  // 内存加载流程
  async loadMemory(context) {
    const memories = {
      // 加载用户内存
      user: await this.loadUserMemory(context.userId),
      
      // 加载项目内存
      project: await this.loadProjectMemory(context.projectPath),
      
      // 加载CLAUDE.md (如果存在)
      claudemd: await this.loadCLAUDEmd(context.projectPath),
      
      // 加载MEMORY.md索引
      memoryIndex: await this.loadMemoryIndex(context.projectPath),
    };

    // 按相关度排序内存
    return this.rankByRelevance(memories, context.query);
  }

  // 内存索引系统 (MEMORY.md)
  async loadMemoryIndex(projectPath) {
    // MEMORY.md 格式:
    // - [标题](file.md) — 一行描述,最多150字符
    // - [标题2](file2.md) — 描述
    
    const index = await this.readFile(`${projectPath}/MEMORY.md`);
    return this.parseMemoryIndex(index);
  }

  // 相关度计算
  rankByRelevance(memories, query) {
    const scores = {};

    for (const [type, data] of Object.entries(memories)) {
      // 计算关键词匹配
      const keywordMatches = this.countKeywordMatches(query, data);
      
      // 计算语义相似度
      const semanticSim = this.calculateSemanticSimilarity(query, data);
      
      // 计算时间权重
      const timeWeight = this.getTimeWeight(data.lastUpdated, type);
      
      // 综合评分
      scores[type] = (keywordMatches * 0.3 + semanticSim * 0.5) * timeWeight;
    }

    // 按分数排序,高的先
    return Object.entries(scores)
      .sort((a, b) => b[1] - a[1])
      .reduce((acc, [type, _]) => {
        acc[type] = memories[type];
        return acc;
      }, {});
  }

  // 内存更新机制
  async updateMemory(updates) {
    for (const update of updates) {
      const { type, name, content, metadata } = update;

      // 更新步骤1: 准备内存文件
      const filepath = this.getMemoryPath(type, name);
      
      // 更新步骤2: 检查重复
      const existing = await this.findExistingMemory(type, name);
      if (existing && !update.force) {
        // 合并而不是覆盖
        content = this.mergeMemory(existing.content, content);
      }

      // 更新步骤3: 写入文件
      await this.writeMemoryFile(filepath, {
        frontmatter: {
          name,
          description: metadata.description,
          type,
          metadata
        },
        content
      });

      // 更新步骤4: 更新索引
      await this.updateMemoryIndex(type, name, metadata.description);
    }
  }

  // MEMORY.md索引更新
  async updateMemoryIndex(type, name, description) {
    const index = await this.readFile('./MEMORY.md');
    const entries = this.parseMemoryIndex(index);

    // 检查条目是否已存在
    const existing = entries.find(e => e.name === name);
    if (existing) {
      existing.description = description;
    } else {
      entries.push({
        name,
        type,
        description,
        file: `${type}_${name}.md`
      });
    }

    // 限制索引大小(200行)
    const sorted = entries.sort((a, b) => {
      // 重要程度排序: user > feedback > project > reference
      const typeOrder = { user: 0, feedback: 1, project: 2, reference: 3 };
      return typeOrder[a.type] - typeOrder[b.type];
    });

    const limited = sorted.slice(0, 200);

    // 重新生成MEMORY.md
    await this.writeMemoryIndex(limited);
  }
}

8.3 权限系统模型

┌─────────────────────────────────────────────┐
│           权限检查流程 (Permission Flow)     │
└──────────────────┬──────────────────────────┘
                   │
       ┌───────────┼───────────┐
       │           │           │
       ▼           ▼           ▼
   ┌────────┐ ┌────────┐ ┌────────┐
   │ 全局   │ │ 项目   │ │ 钩子   │
   │ 配置   │ │ 配置   │ │ 规则   │
   └────────┘ └────────┘ └────────┘
       │           │           │
       └───────────┼───────────┘
                   │
                   ▼
        ┌──────────────────────┐
        │ 权限系统 (Unified)    │
        │                      │
        │ 权限级别:            │
        │ • auto (自动批准)    │
        │ • prompt (提示用户)  │
        │ • deny (拒绝)        │
        └──────────────────────┘
                   │
         ┌─────────┴─────────┐
         │                   │
        YES                 NO
         │                   │
         ▼                   ▼
    ┌────────┐          ┌────────┐
    │ 执行   │          │ 错误   │
    │ 工具   │          │ 返回   │
    └────────┘          └────────┘

8.4 钩子系统 (Hooks)

// 伪代码:钩子系统实现
class HookSystem {
  // 钩子类型定义
  HookTypes = {
    // 1. 工具相关钩子
    'before:tool': '在工具执行前',
    'after:tool': '在工具执行后',
    'on:tool-error': '工具执行失败时',

    // 2. Agent相关钩子
    'before:agent-spawn': 'Agent启动前',
    'after:agent-complete': 'Agent完成后',
    'on:agent-error': 'Agent失败时',

    // 3. 权限相关钩子
    'on:permission-required': '需要权限时',
    'on:permission-denied': '权限被拒绝时',

    // 4. 会话相关钩子
    'on:session-start': '会话开始时',
    'on:session-end': '会话结束时',

    // 5. 输出相关钩子
    'before:response': '生成输出前',
    'after:response': '生成输出后',
  };

  // 钩子注册
  registerHook(type, handler, options = {}) {
    if (!this.hooks[type]) {
      this.hooks[type] = [];
    }

    this.hooks[type].push({
      handler,
      priority: options.priority || 'normal',
      async: options.async || false,
      condition: options.condition // 可选的条件函数
    });
  }

  // 执行钩子
  async executeHooks(type, context) {
    const hooks = this.hooks[type] || [];
    
    // 按优先级排序
    const priorityOrder = { critical: 0, high: 1, normal: 2, low: 3 };
    const sorted = hooks.sort((a, b) => 
      priorityOrder[a.priority] - priorityOrder[b.priority]
    );

    for (const hook of sorted) {
      // 检查条件
      if (hook.condition && !hook.condition(context)) {
        continue;
      }

      // 执行钩子
      if (hook.async) {
        await hook.handler(context);
      } else {
        hook.handler(context);
      }
    }
  }

  // 钩子示例配置 (来自 settings.json)
  exampleConfig() {
    return {
      hooks: {
        // 自动化: git提交前运行测试
        'before:tool': {
          condition: 'tool === "Bash" && command.includes("git commit")',
          handler: 'run:npm test'
        },

        // 自动化: 创建文件后自动格式化
        'after:tool': {
          condition: 'tool === "Write" || tool === "Edit"',
          handler: 'run:npm run format'
        },

        // 自动化: 权限请求提示
        'on:permission-required': {
          handler: 'notify:user'
        },

        // 自动化: 失败通知
        'on:agent-error': {
          handler: 'notify:slack #alerts'
        }
      }
    };
  }
}

9. 完整流程图

9.1 端到端用户请求流程

┌──────────────────────────────────────────────────────────┐
│ 1. 用户输入请求                                          │
│    "修复这个TypeError: Cannot read property 'map'"       │
└──────────────┬───────────────────────────────────────────┘
               │
               ▼
┌──────────────────────────────────────────────────────────┐
│ 2. 终端处理和解析                                        │
│    • 检测IDE选择内容                                     │
│    • 解析slash命令 (/help, /code-review等)             │
│    • 提取@mentions                                        │
└──────────────┬───────────────────────────────────────────┘
               │
               ▼
┌──────────────────────────────────────────────────────────┐
│ 3. 会话初始化                                            │
│    • 加载用户身份                                        │
│    • 验证权限                                            │
│    • 执行session-start钩子                              │
│    • 加载项目上下文                                      │
└──────────────┬───────────────────────────────────────────┘
               │
               ▼
┌──────────────────────────────────────────────────────────┐
│ 4. 内存加载和融合                                        │
│    • 加载用户内存 (USER_MEMORY)                         │
│    • 加载项目内存 (PROJECT_MEMORY)                      │
│    • 加载CLAUDE.md配置                                   │
│    • 按相关度排序                                        │
│    • 压缩到可用空间                                      │
└──────────────┬───────────────────────────────────────────┘
               │
               ▼
┌──────────────────────────────────────────────────────────┐
│ 5. 提示词构建                                            │
│    • 系统提示 (8KB)                                      │
│    • 工具定义 (12KB)                                     │
│    • 用户内存 (4KB)                                      │
│    • 项目上下文 (5KB)                                    │
│    • 对话历史 (25KB)                                     │
│    • 用户请求 (3KB)                                      │
│    • 总计: ~60KB                                         │
│    • 缓冲: ~68KB (剩余128KB)                            │
└──────────────┬───────────────────────────────────────────┘
               │
               ▼
┌──────────────────────────────────────────────────────────┐
│ 6. Agent准备                                             │
│    • 选择agent类型 (通常 'claude')                      │
│    • 加载agent配置                                       │
│    • 初始化工具绑定                                      │
│    • 设置权限检查                                        │
│    • 准备上下文窗口                                      │
└──────────────┬───────────────────────────────────────────┘
               │
               ▼
┌──────────────────────────────────────────────────────────┐
│ 7. Subagent决策                                          │
│    • 检查是否需要子代理                                  │
│    • 评估并行化机会                                      │
│    • 计算资源需求                                        │
│    决策结果: 本例中不需要subagent                        │
└──────────────┬───────────────────────────────────────────┘
               │
               ▼
┌──────────────────────────────────────────────────────────┐
│ 8. LLM API调用                                           │
│    模型: claude-haiku-4-5                                │
│    温度: 1.0                                             │
│    采样: nucleus (top_p=0.9)                             │
│    最大tokens: 4096                                      │
│                                                          │
│    输入tokens: ~2500                                     │
│    缓存命中: 系统+工具定义 (~20k)                        │
│    成本计算:                                             │
│    • 新token输入: 2500 × $0.80/M = $0.002               │
│    • 缓存token输入: 20k × $0.10/M = $0.002             │
│    • 输出token: 1200 × $2.40/M = $0.003                │
└──────────────┬───────────────────────────────────────────┘
               │
               ▼
┌──────────────────────────────────────────────────────────┐
│ 9. 推理和工具选择                                        │
│    Agent思考 (2-3秒):                                    │
│    • 分析错误类型: TypeError                             │
│    • 识别问题: 对undefined/null调用map()                │
│    • 选择行动:                                           │
│      1. Read src/app.ts → 查看错误代码                  │
│      2. grep .map() → 找到所有map调用                   │
│      3. Edit src/app.ts → 添加null检查                  │
│    • 生成推理文本                                        │
└──────────────┬───────────────────────────────────────────┘
               │
               ▼
┌──────────────────────────────────────────────────────────┐
│ 10. 权限检查                                             │
│     读取: src/app.ts                                     │
│     • 工具: Read                                         │
│     • 操作: read_file                                    │
│     • 权限检查: 自动批准 ✓                               │
│                                                          │
│     编辑: src/app.ts                                     │
│     • 工具: Edit                                         │
│     • 操作: edit_file                                    │
│     • 权限检查: allowlist有此项 ✓                        │
└──────────────┬───────────────────────────────────────────┘
               │
               ▼
┌──────────────────────────────────────────────────────────┐
│ 11. 工具执行 (并行执行1和2)                              │
│                                                          │
│     工具1: Read src/app.ts                               │
│     • 文件大小: 2.5KB                                    │
│     • 执行时间: 5ms                                      │
│     • 结果: 返回文件内容                                 │
│     状态: ✓ 成功                                         │
│                                                          │
│     工具2: Bash grep                                     │
│     • 命令: grep -n "\.map(" src/app.ts                  │
│     • 执行时间: 10ms                                     │
│     • 结果: 找到第15和42行                               │
│     状态: ✓ 成功                                         │
│                                                          │
│     总执行时间: ~15ms                                    │
└──────────────┬───────────────────────────────────────────┘
               │
               ▼
┌──────────────────────────────────────────────────────────┐
│ 12. 结果收集和分析                                       │
│     • 分析工具输出                                        │
│     • 生成修复建议                                        │
│     • 验证修复的有效性                                    │
│     • 检查副作用                                          │
└──────────────┬───────────────────────────────────────────┘
               │
               ▼
┌──────────────────────────────────────────────────────────┐
│ 13. 代码修改应用                                         │
│     工具3: Edit src/app.ts                               │
│     • 修改内容:                                          │
│       - 第14行前添加: const data = items ?? [];          │
│       - 第15行改为: const mapped = data.map(...)         │
│     • 执行时间: 10ms                                     │
│     • 验证: 语法正确 ✓                                   │
│     状态: ✓ 成功                                         │
└──────────────┬───────────────────────────────────────────┘
               │
               ▼
┌──────────────────────────────────────────────────────────┐
│ 14. 输出生成                                             │
│     文本部分:                                             │
│     "找到了问题。在第15行,items可能为undefined。"       │
│     "我已添加了null检查处理这个问题。"                   │
│     "现在map()会对一个数组调用,不会报错。"              │
│                                                          │
│     代码展示:                                             │
│     ```diff                                              │
│     + const data = items ?? [];                          │
│     - const mapped = items.map(...)                      │
│     + const mapped = data.map(...)                       │
│     ```                                                  │
│                                                          │
│     建议:                                                │
│     "运行npm test验证修复。"                             │
│     "考虑为items参数添加类型注解。"                      │
└──────────────┬───────────────────────────────────────────┘
               │
               ▼
┌──────────────────────────────────────────────────────────┐
│ 15. 执行output钩子                                       │
│     • before:response钩子                                │
│     • 无配置的钩子                                        │
│     • 直接返回输出                                        │
└──────────────┬───────────────────────────────────────────┘
               │
               ▼
┌──────────────────────────────────────────────────────────┐
│ 16. 返回给用户                                           │
│     • 文本在IDE中显示                                     │
│     • 代码修改在编辑器中高亮                              │
│     • 用户可以:                                         │
│       - 接受修改                                         │
│       - 拒绝修改                                         │
│       - 继续对话                                         │
│       - 运行验证命令                                     │
└──────────────┬───────────────────────────────────────────┘
               │
               ▼
┌──────────────────────────────────────────────────────────┐
│ 17. 更新上下文和历史                                     │
│     • 添加用户输入到历史                                 │
│     • 添加Agent响应到历史                                │
│     • 记录已执行的工具                                   │
│     • 更新token计数                                      │
│     • 评估是否需要压缩历史                                │
│     当前token使用: ~65KB / 128KB (51%)                  │
│     压缩需求: 否                                         │
└──────────────┬───────────────────────────────────────────┘
               │
               ▼
┌──────────────────────────────────────────────────────────┐
│ 18. 准备下一轮                                           │
│     • 监听用户后续输入                                    │
│     • 保持会话状态                                        │
│     • 维持Agent就绪状态                                  │
│     准备处理: "运行测试" / "解释更多" / "回滚"           │
└──────────────────────────────────────────────────────────┘

9.2 关键性能指标 (KPIs)

指标                  基准值           优秀值           最大值
─────────────────────────────────────────────────────────
第一个Token延迟      1-2秒           <500ms          <3秒
推理总时间          3-8秒           2-5秒           <15秒
工具执行时间        10-100ms        <50ms           <5秒
输出生成速度        50-100 t/s      100-150 t/s     >200 t/s
缓存命中率          70-80%          >85%            >95%
内存使用           50-70KB         <60KB           <100KB
权限提示频率        5-10%           <3%             0%
错误恢复成功率      85%             >95%            100%

10. 最佳实践和应用建议

10.1 提示工程最佳实践

✅ 高效提示模式
【模式1】: 背景→任务→约束→期望输出

✅ 好的例子:
"背景: 我们正在构建一个React表单组件库。
 任务: 为FileUpload组件添加进度条显示。
 约束: 必须支持拖放, 显示上传百分比, 最大文件10MB。
 期望: 返回可复用的组件代码和使用文档。"

❌ 不好的例子:
"做个上传组件吧"


【模式2】: 上下文注入+具体示例

✅ 好的例子:
"参考这个现有实现: [粘贴3-5行代码]
 现在请按相同风格实现X功能。
 关键点: 使用async/await而不是callbacks。"

❌ 不好的例子:
"实现一个异步函数"


【模式3】: 错误案例+正确方向

✅ 好的例子:
"这段代码有问题: [粘贴代码]
 问题症状: TypeError in production
 已尝试: [描述尝试过的修复]
 应该考虑的因素: [列出约束]"

❌ 不好的例子:
"这个bug很复杂"
⚠️ 需要避免的模式
模式                  问题                     修复方案
─────────────────────────────────────────────────────────
过度依赖记忆          context变化导致误导     明确陈述当前状态
假设隐含知识          Agent不知道项目细节     提供必要的上下文
含糊不清的要求        多重解释可能性高        使用具体示例
忽视资源限制          导致超时或成本高        指定范围和限制
没有验证步骤          生成的代码可能有bug    包含测试指令

10.2 工具组合最佳实践

最有效的工具序列
任务类型              最优工具序列              执行时间
─────────────────────────────────────────────────────────
代码bug修复          Read → Bash → Edit       < 30秒
功能实现              Plan → Read → Edit       < 2分钟
代码审查              Bash(lint) → Read → 分析 < 1分钟
文档生成              Read → Write             < 30秒
重构                  Bash(grep) → Read → Edit < 2分钟
性能调优              Bash → WebFetch → Edit   < 5分钟
工具链优化规则
// 优化规则
const ToolChainOptimization = {
  // 规则1: 信息收集先于修改
  ruleReadBeforeWrite: {
    situation: '需要修改文件',
    before: 'Read(target_file)',
    after: 'Edit(target_file)',
    benefit: '了解上下文,减少错误'
  },

  // 规则2: 验证先于执行
  ruleValidateBeforeRun: {
    situation: '执行可能有副作用的命令',
    before: 'Bash(dry-run)',
    after: 'Bash(actual-run)',
    benefit: '预测问题,提前修正'
  },

  // 规则3: 并行执行独立工具
  ruleParallelizeIndependent: {
    situation: '多个工具不相互依赖',
    timing: '并行执行',
    benefit: '减少总执行时间30-50%'
  },

  // 规则4: 缓存只读结果
  ruleCacheReadResults: {
    situation: '同一会话中多次需要相同信息',
    action: '缓存Read结果,避免重复读取',
    benefit: '节省执行时间和tokens'
  }
};

10.3 上下文管理最佳实践

内存使用优化
操作                  大小节省        执行时间减少
─────────────────────────────────────────────────────────
启用提示词缓存        30-40%         20-30%
压缩重复代码          10-15%         5-10%
删除过期对话          20-25%         10-15%
使用引用而非复制      15-20%         8-12%
缩略关键信息          5-10%          3-5%

总体效果:
- 上下文利用率从60%提升到85%+
- 推理延迟从3秒降低到1.5秒
- 每会话成本降低35-45%

10.4 权限管理最佳实践

安全性与便利性平衡
安全级别    配置策略              提示频率    生产推荐
─────────────────────────────────────────────────────────
严格        所有操作提示          每次       高安全项目
平衡        关键操作提示          3-5%       大多数项目
宽松        仅破坏操作提示        <1%        可信任环境
非常宽松    完全自动              0%         自动化脚本

权限配置示例:
{
  "auto_approve": [
    "read:*",                    // 所有读取自动批准
    "edit:src/**/*.ts",          // 源代码编辑自动批准
    "bash:npm run lint"          // lint命令自动批准
  ],
  "require_prompt": [
    "bash:git push",             // git push需要提示
    "write:sensitive/",          // 敏感文件需要提示
    "bash:rm -rf"                // 删除操作需要提示
  ],
  "deny": [
    "bash:sudo",                 // 禁止sudo
    "bash:rm -rf /"              // 禁止危险操作
  ]
}

10.5 性能调优清单

加速推理的10个步骤
┌─────────────────────────────────────────┐
│ Claude Code 性能优化清单                 │
├─────────────────────────────────────────┤
│                                         │
│ [ ] 1. 启用提示词缓存                    │
│        影响: -20-30% 延迟                │
│        成本: -50% token成本              │
│                                         │
│ [ ] 2. 压缩不相关的历史记录              │
│        影响: -15% 延迟                   │
│        操作: 历史超过30条时自动压缩      │
│                                         │
│ [ ] 3. 配置自动批准权限                  │
│        影响: -50-80% 提示时间            │
│        配置: 白名单常用工具              │
│                                         │
│ [ ] 4. 使用工具并行执行                  │
│        影响: -40-60% 总执行时间          │
│        示例: Read+Bash并行               │
│                                         │
│ [ ] 5. 合理设置Subagent隔离             │
│        影响: +30% 初始化但-50%总时间    │
│        使用: 仅复杂多任务使用            │
│                                         │
│ [ ] 6. 精简提示词                        │
│        影响: -20% 输入tokens            │
│        方法: 移除冗余背景信息             │
│                                         │
│ [ ] 7. 使用结构化输出                    │
│        影响: -30-40% 解析时间            │
│        好处: 避免错误重试                │
│                                         │
│ [ ] 8. 优化工具参数                      │
│        影响: -10-20% 执行时间            │
│        例如: 限制输出大小                │
│                                         │
│ [ ] 9. 批量处理相似任务                  │
│        影响: -60-70% 相对成本            │
│        例如: 多文件编辑用Workflow       │
│                                         │
│ [X] 10. 监控和持续优化                   │
│         工具: /workflows + metrics       │
│         频率: 每周审查一次               │
│                                         │
└─────────────────────────────────────────┘

10.6 常见陷阱和解决方案

陷阱                    症状                      解决方案
─────────────────────────────────────────────────────────
上下文爆炸              超时/成本高              启用自动压缩
权限疲劳                频繁的权限提示           配置allowlist
工具滥用                错误的工具选择           使用tool selector
记忆污染                过期信息导致错误          定期清理memory
缺乏隔离                并行修改冲突              使用worktree隔离
盲目并行                竞争条件/死锁            依赖排序
忽视验证                未测试代码生成           添加验证步骤
提示词含糊              多重解释/重试             使用具体示例
资源耗尽                部分失败                 令牌预算上限
安全过度                效率低下                 分层权限系统

10.7 生产环境最佳实践

// 伪代码:生产环境配置模板
const ProductionConfig = {
  // 1. 错误处理
  errorHandling: {
    retryPolicy: {
      maxRetries: 3,
      backoffMultiplier: 2,
      initialDelayMs: 1000
    },
    fallbackStrategies: [
      '降级到不同的模型',
      '简化任务范围',
      '返回部分结果'
    ]
  },

  // 2. 资源限制
  resources: {
    tokenBudget: 500000,
    timeoutMs: 300000,      // 5分钟
    maxFileSize: 104857600, // 100MB
    maxOutputLength: 100000,
    concurrentAgents: 10
  },

  // 3. 监控和告警
  monitoring: {
    metrics: ['latency', 'errors', 'cost', 'usage'],
    alerts: [
      { metric: 'errorRate', threshold: 5, unit: '%' },
      { metric: 'cost', threshold: 10, unit: '$/hour' },
      { metric: 'latency_p99', threshold: 10, unit: 'seconds' }
    ],
    dashboards: ['overview', 'errors', 'performance']
  },

  // 4. 安全配置
  security: {
    permissionLevel: 'strict',
    auditLogging: true,
    dataEncryption: true,
    IPWhitelist: ['10.0.0.0/8'],
    rateLimit: {
      requestsPerMinute: 60,
      tokensPerHour: 1000000
    }
  },

  // 5. 日志记录
  logging: {
    level: 'info',
    format: 'json',
    destinations: ['stdout', 'file', 'cloudwatch'],
    retention: {
      successLogs: 7,  // 天
      errorLogs: 30,
      auditLogs: 90
    }
  }
};

总结

关键要点

┌─────────────────────────────────────────┐
│ Claude Code 实现的核心特性               │
├─────────────────────────────────────────┤
│                                         │
│ 1. 多层提示词处理                        │
│    → 自动验证和优化                      │
│    → 结构化和标准化                      │
│                                         │
│ 2. 智能Agent编排                        │
│    → 自动Subagent决策                   │
│    → 隔离和资源管理                      │
│                                         │
│ 3. 上下文压缩和管理                      │
│    → 提示词缓存                          │
│    → 分层压缩                            │
│                                         │
│ 4. 灵活的工具生态                        │
│    → 自动工具选择                        │
│    → 权限和安全控制                      │
│                                         │
│ 5. 多维记忆系统                          │
│    → 跨会话学习                          │
│    → 相关度排序                          │
│                                         │
│ 6. 完善的错误处理                        │
│    → 自动重试                            │
│    → 降级策略                            │
│                                         │
│ 7. 可观测和可审计                        │
│    → 详细日志                            │
│    → 权限追踪                            │
│                                         │
└─────────────────────────────────────────┘

架构演进方向

当前阶段 (2024-2025)
├─ 多代理编排 ✓
├─ 提示词缓存 ✓
├─ 工作流自动化 ✓
└─ 持久化内存 ✓

下一阶段 (2025-2026)
├─ 更强大的LLM
├─ 更细粒度的隔离
├─ 更智能的资源调度
└─ 更好的可观测性

未来方向 (2026+)
├─ 自主学习和适应
├─ 跨项目知识转移
├─ 人类-AI协作优化
└─ 完全自动化编程助手

参考资源

  • Claude API 文档https://docs.anthropic.com

  • Claude Code 使用指南/help 命令或项目内 CLAUDE.md

  • 性能优化: 使用 /code-review 和 /verify 评估生成代码

  • 权限配置.claude/settings.json 和 .claude/settings.local.json

  • 内存系统~/.claude/projects/*/memory/ 目录

更多推荐