Files

164 lines
5.2 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
tags: [ai, claude-code, dev-env]
create time: 2026-07-01 00:00
---
# AI Coding Agent 用法指南
## 概述
在实训环境中使用 AI 辅助开发的规范化方法:Claude Code 作为首选 Coding Agent,配合 GitHub CLI 等工具形成闭环工作流。重点在于 **提示词工程、权限边界、上下文组织** 三要素。
## 核心概念
### Prompting 四原则
无论使用何种 AI 编码工具,以下原则通用:
| 原则 | 要点 | 反面示例 |
|------|------|---------|
| **具体** | 精确到文件名、行号、函数名 | "帮我优化一下登录页面" |
| **限定范围** | 明确说"只改什么",不说"改什么" | 无范围约束 → 过度改动 |
| **可验证** | 给出预期结果或验收标准 | "让它能跑就行" |
| **分步** | 复杂任务拆成小步骤逐步确认 | 一次性描述整个重构 |
### Claude Code 上下文注入机制
Claude Code 在启动后会自动收集以下上下文:
```
当前工作目录结构
├── CLAUDE.md ← 知识库/项目规范(固定注入)
├── .claude/settings.local.json ← 权限配置(可选)
├── .gitignore
├── src/ ← 当前打开/选中的文件
└── ...
```
| 注入方式 | 说明 |
|---------|------|
| **CLAUDE.md** | 项目级指令,Claude Code 启动时自动加载到 system prompt |
| **当前文件** | 你正在查看/编辑的文件自动加入 context |
| **选中文本** | 在编辑器选中后用 `@` 引用或直接在对话中使用 |
| **文件附件** | 用 `@file` 语法显式追加任意文件到上下文窗口 |
### CLAUDE.md 模板结构
```markdown
# Project Context
## 技术栈
- Go 1.23 + Gin, Node.js 20 + React 19
## 代码规范
- 错误处理必须 wrapping(fmt.Errorf("failed to X: %w", err))
- API handler 命名:HandlerSuffix(CreateUserHandler)
## 工作流约定
- PR 标题格式:type(scope): description(feat(auth): add login endpoint)
- 每个 commit 必须是 squash-friendly 的小粒度
```
## 代码示例
### 典型任务工作流
#### 场景 1:实现一个 API 接口
```
在 internal/handler/user.go 中增加 GetUserByID handler,
只改这一个文件,不要动其他代码。
要求:参数绑定使用 gin 的 query binding,错误码使用 pkg/errno 包定义的常量。
```
#### 场景 2:审查已有改动
```
审查刚才的改动(src/auth/middleware.ts),有没有潜在 bug 或性能问题。
重点关注:token 过期处理、中间件执行顺序、内存泄漏风险。
```
#### 场景 3:围绕 Issue 工作
```
查看 #42 issue 的描述,创建一个修复分支 fix-42-rate-limit,
实现限流逻辑后提交并创建 PR。PR 描述中包含复现步骤和修复说明。
```
### 与 GitHub CLI 组合使用
```bash
# Step 1:查看任务清单
gh issue list --state=open --label="internship"
# Step 2:让 Claude Code 直接在这个上下文中工作
# (在 Claude Code 中直接输入上述命令的输出或使用 @)
# Step 3:完成后再切回来发 PR
gh pr create --title "feat(limit): add rate limiter for signup API" \
--body "@@projects/rate-limiter-design.md"
```
## 常见陷阱与最佳实践
### 1. 上下文窗口溢出
Claude Code 的上下文窗口有限,当项目很大时不要一次性追加太多文件:
```
# ❌ 不好:把整个 src/ 文件夹丢进去
@src/*.go
# ✅ 好:只追加当前文件和相关接口定义
@internal/handler/user.go
@pkg/errno/code.go
```
需要跨文件理解时,先用 Grep 定位关键词再精准追加。
### 2. AI 生成代码不直接提交
AI 生成的代码可能存在 **隐蔽的逻辑错误或安全隐患**,务必经过人工审查:
```
审查流程:
1. 让 Claude Code 生成代码 → diff 输出
2. 人工阅读 diff,逐行检查
3. 如有问题,用自然语言指出("这里少了 nil check")→ 让其修正
4. 确认无误后再手动 staged + commit
```
> [!warning] 绝对不要做的事
> - 不要信任 AI 生成的数据库 migration SQL 不经 review 就执行
> - 不要 trust AI 生成的敏感信息(AK/SK、token)直接 commit
> - 不要在 prod 环境让 AI 直接操作
### 3. Prompt 太长反而降低质量
一个超过 500 字的 prompt 通常意味着意图不够聚焦。遵循 **STAR 原则**:
| 元素 | 说明 | 示例 |
|------|------|------|
| **S**ituation | 当前背景 | "我在写一个用户注册的 API handler" |
| **T**ask | 你要做什么 | "需要加上邮箱验证码校验" |
| **A**ction | 具体要求 | "用 Redis SETEX 做 1 分钟有效期,key 前缀 `code:email:`" |
| **R**esult | 期望输出 | "返回 Go struct 并在注释中标明 error code" |
### 4. 利用会话历史进行迭代
不要试图一次性完美。采用增量反馈循环:
```
第一轮:实现功能 → AI 出代码 → 我 review
第二轮:"这个实现有个问题,XX 没处理" → AI 修正
第三轮:"再加个单元测试" → AI 补测试
第四轮:"把错误处理改为 errors.Is 兼容风格" → AI 微调
```
每轮控制在 2-3 次交互内,超出就停下来自己总结。
## 延伸阅读
- [[mac-dev-env-setup/homebrew-intro]] — Claude Code 安装前置(npm/nvm 环境)
- [[CLAUDE.md]] — 本笔记库的 CLAUDE.md 本身就是一个实战范例