Claude Code 实现机制和规则详细指南
目录
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/目录
更多推荐
所有评论(0)