先说结论
掘金今天有篇文章标题是"用了大半年Claude Code才醒悟:我一直在'裸聊',怪不得它总听不懂我的需求"。
标题起得好,说的也是实话。
大部分人用 Claude Code 的方式是:打开终端,直接说需求,等它写代码,不满意再骂一句"AI不行"。
问题不在 AI,在于你没给它上下文。
今天说说怎么给 Claude Code 喂上下文------不是写 prompt 技巧,是工程层面的做法。
"裸聊"是什么状态
先对号入座。
如果你的 Claude Code 使用流程是这样的,你就是在"裸聊":
- 打开终端,cd 到项目目录,直接
claude - 说"帮我写一个用户登录接口"
- Claude 写完了,你看一眼,能用,完事
- 下次开新会话,它完全忘了上次写了什么
- 你说"帮我改一下上次那个登录接口的密码加密方式",它问你"什么登录接口?"
这就是裸聊------每次对话都是从零开始,AI 对你的项目一无所知。
三个层次喂上下文
第一层:CLAUDE.md
Claude Code 启动时会自动读取项目根目录的 CLAUDE.md 文件。这是最基础的上下文注入。
大部分人不写这个文件。所以 Claude 每次都是"裸眼"看你的项目。
一个好的 CLAUDE.md 至少包含:
markdown
# 项目说明
## 技术栈
- 后端:Python 3.12 + FastAPI + SQLAlchemy 2.0
- 数据库:PostgreSQL 16
- 缓存:Redis
- 消息队列:Celery
- 部署:Docker + K8s
## 代码规范
- 用 async/await,不用同步函数
- 数据库操作用 SQLAlchemy 2.0 风格(Session + select)
- API 路由统一前缀 /api/v1
- 错误返回统一格式:{"code": 0, "msg": "", "data": {}}
- 所有模型字段加 type hint 和注释
## 目录结构
src/
api/ # 路由层,只做参数校验和调用 service
service/ # 业务逻辑层
model/ # 数据模型
schema/ # Pydantic 模型
utils/ # 工具函数
config.py # 配置
## 注意事项
- 不要用 print,用 loguru 的 logger
- 数据库迁移用 alembic,不要手动改表
- 敏感信息在 .env 文件里,不要硬编码
写了这个文件,Claude Code 每次启动就知道你的技术栈、代码规范和目录结构。它写的代码就不会再用同步函数或者 print 了。
第二层:@文件引用
裸聊的人只说"改一下登录接口"。
喂了上下文的人会说:
less
@src/api/auth.py @src/service/user_service.py @src/schema/user.py
把登录接口的密码加密从 MD5 换成 bcrypt,同时更新对应的测试文件 @tests/test_auth.py
Claude Code 支持 @文件路径 语法引用具体文件。它会先读这些文件,再开始干活。
区别有多大?
不引用文件:Claude 猜你的代码结构,写出来大概率对不上,你要手动改。
引用文件:Claude 看到实际代码,改的是真实存在的函数,改完直接能用。
这不是技巧,是基本操作。但 80% 的人不知道。
第三层:上下文压缩和会话管理
Claude Code 有一个上下文窗口(128K token)。聊得越多,窗口越满,AI 越笨。
很多人开会话就一直聊,从登录接口聊到部署配置,最后 Claude 开始"失忆"------前面说过的东西全忘了。
正确做法:按任务粒度开新会话。
bash
# 会话1:写登录接口
claude
> 帮我写用户登录接口,需求如下... @src/model/user.py @src/schema/user.py
# 会话1结束,Ctrl+C 退出
# 会话2:写测试
claude
> 为 @src/api/auth.py 里的登录接口写单元测试,覆盖正常登录、密码错误、用户不存在三个场景 @tests/conftest.py
# 会话2结束
# 会话3:改加密方式
claude
> 把 @src/service/user_service.py 里的密码加密从 MD5 换成 bcrypt
每个会话只做一件事。上下文干净,AI 不会跑偏。
一个实战对比
同一个任务:给项目加日志中间件。
裸聊方式:
markdown
claude
> 帮我加一个日志中间件
Claude 写了一个,用了同步函数、print 打印、日志格式不匹配项目规范。你花 30 分钟改。
喂上下文方式:
shell
# CLAUDE.md 里已经写了:用 async/await、用 loguru、FastAPI
claude
> 加一个 FastAPI 中间件,记录每个请求的 method/path/status/耗时
> 参考 @src/middleware/cors.py 的写法
> 日志用 loguru,格式:{method} {path} {status} {ms}ms
Claude 写出来直接能用------async 函数、loguru 日志、格式正确、中间件注册方式也和现有代码一致。
省了多少时间?
裸聊:写+改 = 40 分钟。
喂上下文:写+验证 = 5 分钟。
差距是 8 倍。
常见误区
误区一:CLAUDE.md 写太长
有人把整个项目文档塞进 CLAUDE.md,写了 3000 字。结果每次启动 Claude Code 都要先读 3000 字,占上下文不说,关键信息被淹没在废话里。
CLAUDE.md 控制在 50 行以内。只写 Claude 写代码时必须知道的东西:技术栈、代码规范、目录结构、注意事项。
误区二:什么都喂给 AI
有人把整个项目目录 @ 一遍。Claude 光读文件就占满了上下文窗口,后面啥也干不了。
只喂相关的文件。改登录接口就只 @ auth.py 和 user_service.py,不要把 payment.py 也拖进来。
误区三:一个会话干所有事
从写接口到改样式到配 nginx,全在一个会话里干。Claude 到后面完全糊涂了,写的代码串味。
一个会话一件事。干完就退出,下次重新开。
总结
掘金那篇文章说得好------"裸聊"的问题不在 AI 笨,在你没给上下文。
三层喂法:
- CLAUDE.md --- 项目全局上下文,50 行以内,每次启动自动加载
- @文件引用 --- 任务级上下文,只喂相关文件,不要全拖进来
- 会话管理 --- 一事一会话,干完就退出,不积攒上下文垃圾
这不是 prompt engineering 的技巧,是工程习惯。养成习惯,效率翻 8 倍不是吹的。
数据出处:掘金首页 2026-08-18,Claude Code 相关文章 3 篇上首页推荐。效率对比基于个人实际使用 Claude Code 的计时记录。