Files
16gagent/research/claude-code-learnings.md
2026-06-06 10:40:48 +08:00

3.7 KiB
Raw Permalink Blame History

Claude Code 学习笔记 - 可落地部分

从 fazxes/Claude-code 提取的实战精华
适用于构建自己的 AI Agent / 编程助手 2026-05-30 小龙 🐉


一、提示词设计十大准则

1. 人格一句话定义身份

你是X。用Y方式。注意Z。

→ 不要啰嗦。没人读长介绍。

2. 行为约束用否定句

❌ "请帮助用户" → 空洞
✅ "不要增加需求以外的功能" → 有执行力
  • 不要加功能、不要重构、不要注释——这些否定限制才是真正有用的 prompt

3. 工具优先级显式声明

专用工具 > Bash
FileRead 代替 cat
FileEdit 代替 sed
Glob 代替 find

→ 不说"合理使用工具",直接说"用X不要用Y"

4. 风险分层锁定行动范围

可逆本地 → 自由
中等 → 确认
不可逆 → 绝对确认

→ 模糊的"小心操作"不如分层的具体规则

5. 错误处理要内嵌法

如果失败 → 诊断 → 修正 → 重试
如果3次失败 → circuit breaker → 报告用户
如果权限被拒 → 换方案,不重复尝试

→ 不赌模型能自己判断好所有场景

6. 诚实优先于体面

"测试没有通过" > "部分测试可能有轻微问题"
"我没做验证" > "看起来应该可以"

→ 模型天然倾向于讨好用户,要刻意压制

7. Feature Flag 门控

if (feature('UNRELEASED')) {
  // 只有内部构建才生效
}

→ 所有未发布功能用 feature flag 开关,泄露也不怕

8. 上下文注入机制

CLAUDE.md + MEMORY.md + frontmatter paths

→ 在系统提示词中注入项目知识,让AI"理解"项目

9. 流式输出 + 异步使用

文本 → 即时输出
tool_use → 走权限流程 → 异步执行

→ 不让用户等

10. 自动压缩 + 记忆保持

消息接近窗口 → 压缩旧消息为摘要
关键决策 + 未完成任务 → 保留

→ context window 管理是 agent 产品的核心壁垒


二、工具架构最佳实践

工具定义范本

class MyTool extends Tool {
  // 1. 描述给模型看(决定模型会不会用它)
  description(): string { return "..." }
  
  // 2. 输入 Schema(模型按这个填参数)
  inputSchema = z.object({ ... })
  
  // 3. 提示词注入(告诉模型什么时候用)
  prompt = "..."
  
  // 4. 权限检查(自动/手动/拒绝)
  checkPermissions(input, context): PermissionResult
  
  // 5. 执行逻辑
  call(input, context): ToolResultBlockParam[]
}

工具设计原则

  • 每个工具一个目录,包含 constants/prompt/tool 三个文件
  • 工具间可感知 — Bash读过的 FileEdit 知道,不重复操作
  • 工具可以被搜索 — ToolSearchTool 让模型自己发现工具
  • 并行调用最大化 — 没有依赖的工具调用全部并行

三、Hook 系统模式

事件驱动架构

触发 → Pre Hook → 执行 → Post Hook → 继续

Hook 返回值决定行为

Hook 返回 "继续" → 正常执行
Hook 返回 "拒绝" → 工具不执行
Hook 返回 "修改" → 用修改后的参数执行

Hook 配置格式

{
  "hooks": {
    "PreToolUse": [
      {"matcher": "Bash.*", "hooks": [{"command": "check.sh"}]}
    ]
  }
}

四、最重要的是什么

提示词工程 > 工具数量 > UI精致度

Claude Code 真正值钱的是 prompts.ts 里那176条原则,不是45个工具。工具只是手脚,提示词是大脑。

拿到任何一个 AI Agent 源码,第一件事读 prompts.ts,第二件事读 query.ts(对话循环),第三件事看 Tool.ts(抽象层)。其他的都是辅助。


小龙学习笔记 🐉