微信扫码
添加专属顾问
我要投稿
Anthropic 发布 Claude Code,提升 AI 编程效率和安全性。核心内容:1. Claude Code 的设计理念和功能特点2. 通用模式和最佳实践的概述3. CLAUDE.md 文件的创建和使用指南
大家好我是 luckySnail,就在昨天 Anthropic 团队发布了他们整理的《Claude 代码:代理式编码的最佳实践》,原文地址: https://www.anthropic.com/engineering/claude-code-best-practices
下面是校验的译文,让我们看看如何更好的 AI 编程吧!
我们最近发布了 Claude Code,这是一个用于智能体编程(Agentic coding)的命令行工具。作为研究项目开发,Claude Code 为 Anthropic 的工程师和研究人员提供了一种更原生的方式,将 Claude 集成到他们的编码工作流中。
Claude Code 刻意设计得比较底层且无预设偏好(unopinionated),提供接近原始模型的访问能力,而不强制用户遵循特定的工作流程。这种设计理念创造了一个灵活、可定制、可脚本化且安全的强大工具。虽然功能强大,但这种灵活性对于刚接触智能体编程工具的工程师来说,意味着需要一定的学习曲线——至少在他们形成自己的最佳实践之前是这样。
本文概述了一些已被证明行之有效的通用模式,这些模式不仅适用于 Anthropic 内部团队,也适用于在各种代码库、语言和环境中使用 Claude Code 的外部工程师。列表中的任何内容都不是一成不变的,也不是普遍适用的;请将这些建议视为起点。我们鼓励你进行实验,找到最适合你的方法!
想了解更详细的信息?我们在 claude.ai/code 上的综合文档涵盖了本文提到的所有功能,并提供了额外的示例、实现细节和高级技巧。
Claude Code 是一个智能体编程助手,它会自动将上下文信息拉取到提示(prompt)中。这种上下文收集过程会消耗时间和 token,但你可以通过调整环境来优化它。
CLAUDE.md
是一个特殊文件,Claude 在开始对话时会自动将其内容拉取到上下文中。这使得它成为记录以下信息的理想场所:
CLAUDE.md
文件没有必需的格式。我们建议保持其简洁且易于人类阅读。例如:
# Bash commands
- npm run build: Build the project
- npm run typecheck: Run the typechecker
# Code style
- Use ES modules (import/export) syntax, not CommonJS (require)
- Destructure imports when possible (eg. import { foo } from 'bar')
# Workflow
- Be sure to typecheck when you’re done making a series of code changes
- Prefer running single tests, and not the whole test suite, for performance
你可以将 CLAUDE.md
文件放置在以下几个位置:
claude
命令的目录(最常见用法)。将其命名为 CLAUDE.md
并提交到 git 中,以便在不同会话和团队成员之间共享(推荐),或者命名为 CLAUDE.local.md
并将其添加到 .gitignore
中。claude
命令的目录的任何父目录。这对于 monorepo(单一代码库管理多个项目)最有用,你可能在 root/foo
目录下运行 claude
,并在 root/CLAUDE.md
和 root/foo/CLAUDE.md
中都有 CLAUDE.md
文件。这两个文件都会被自动拉取到上下文中。claude
命令的目录的任何子目录。这与上面相反,在这种情况下,当你处理子目录中的文件时,Claude 会按需拉取 CLAUDE.md
文件。~/.claude/CLAUDE.md
),这会应用于你所有的 claude
会话。当你运行 /init
命令时,Claude 会自动为你生成一个 CLAUDE.md
文件。
你的 CLAUDE.md
文件会成为 Claude 提示的一部分,因此它们应该像任何经常使用的提示一样被优化改进。一个常见的错误是添加大量内容却没有迭代验证其有效性。花点时间进行实验,确定哪些内容能让模型最好地遵循指令。
你可以手动向 CLAUDE.md
添加内容,或者按 #
键给 Claude 一个指令,它会自动将该指令整合到相关的 CLAUDE.md
中。许多工程师在编码时经常使用 #
来记录命令、文件和风格指南,然后将 CLAUDE.md
的更改包含在提交(commit)中,这样团队成员也能受益。
在 Anthropic,我们偶尔会使用提示词优化器 (prompt improver) 来处理 CLAUDE.md
文件,并经常调整指令(例如,使用 "IMPORTANT" 或 "YOU MUST" 来强调)以提高遵循度。
图:Claude Code 工具允许列表设置界面
默认情况下,Claude Code 会对任何可能修改你系统的操作请求许可:文件写入、许多 bash 命令、MCP 工具等。我们故意采用这种保守的方法来设计 Claude Code,以优先考虑安全性。你可以自定义允许列表,以允许你知道是安全的额外工具,或者允许那些容易撤销的潜在不安全工具(例如,文件编辑、git commit
)。
有四种方法来管理允许的工具:
/allowed-tools
命令来添加或移除允许列表中的工具。例如,你可以添加 Edit
来始终允许文件编辑,Bash(git commit:*)
来允许 git 提交,或者 mcp__puppeteer__puppeteer_navigate
来允许使用 Puppeteer MCP 服务器进行导航。.claude/settings.json
或 ~/.claude.json
(我们建议将前者检入源代码控制以与团队共享)。--allowedTools
命令行标志进行会话特定的权限设置。Claude 知道如何使用 gh
CLI 与 GitHub 交互,以创建 issue、打开 pull request、读取评论等。如果没有安装 gh
,如果你安装了 GitHub API 或 MCP 服务器,Claude 仍然可以使用它们。
Claude 可以访问你的 shell 环境,你可以在其中为它构建一系列便捷的脚本和函数,就像为自己构建一样。它还可以通过 MCP 和 REST API 利用更复杂的工具。
Claude Code 继承了你的 bash 环境,使其可以访问你所有的工具。虽然 Claude 知道常见的实用程序,如 unix 工具和 gh
,但如果没有指令,它不会知道你的自定义 bash 工具:
--help
来查看工具文档CLAUDE.md
中记录常用的工具Claude Code 同时充当 MCP 服务器和客户端。作为客户端,它可以通过三种方式连接到任意数量的 MCP 服务器以访问它们的工具:
.mcp.json
文件中(对在你的代码库中工作的任何人可用)。例如,你可以将 Puppeteer 和 Sentry 服务器添加到你的 .mcp.json
中,这样每个在你仓库工作的工程师都可以开箱即用地使用这些工具。使用 MCP 时,使用 --mcp-debug
标志启动 Claude 也有助于识别配置问题。
对于重复的工作流程——调试循环、日志分析等——将提示模板存储在 .claude/commands
文件夹内的 Markdown 文件中。当你输入 /
时,这些模板就会通过斜杠命令菜单可用。你可以将这些命令检入 git,使其对团队其他成员可用。
自定义斜杠命令可以包含特殊关键字 $ARGUMENTS
,以从命令调用中传递参数。
例如,这是一个可以用来自动拉取和修复 Github issue 的斜杠命令:
Please analyze and fix the GitHub issue: $ARGUMENTS.
Follow these steps:
1. Use `gh issue view` to get the issue details
2. Understand the problem described in the issue
3. Search the codebase for relevant files
4. Implement the necessary changes to fix the issue
5. Write and run tests to verify the fix
6. Ensure code passes linting and type checking
7. Create a descriptive commit message
8. Push and create a PR
Remember to use the GitHub CLI (`gh`) for all GitHub-related tasks.
将上述内容放入 .claude/commands/fix-github-issue.md
文件中,使其在 Claude Code 中作为 /project:fix-github-issue
命令可用。然后你就可以例如使用 /project:fix-github-issue 1234
来让 Claude 修复 issue #1234。类似地,你可以将自己的个人命令添加到 ~/.claude/commands
文件夹中,以便在所有会话中使用。
Claude Code 不强加特定的工作流程,让你能够灵活地按自己的方式使用它。在这种灵活性提供的空间内,我们的用户社区中涌现了几种成功有效使用 Claude Code 的模式:
这个通用的工作流程适用于许多问题:
步骤 #1-#2 至关重要——没有它们,Claude 往往会直接跳到编码解决方案。虽然有时这就是你想要的,但要求 Claude 先研究和计划,对于需要更深入前期思考的问题,可以显著提高性能。
这是 Anthropic 内部最喜欢的工作流程之一,适用于可以通过单元测试、集成测试或端到端测试轻松验证的更改。测试驱动开发 (TDD) 在智能体编程的加持下变得更加强大:
当 Claude 有一个明确的目标可以迭代时——一个视觉模型、一个测试用例或其他类型的输出——它的表现最好。通过提供像测试这样的预期输出,Claude 可以进行更改、评估结果,并逐步改进直到成功。
与测试工作流程类似,你可以为 Claude 提供视觉目标:
像人类一样,Claude 的输出通常会通过迭代显著改善。虽然第一个版本可能不错,但经过 2-3 次迭代后,通常会看起来好得多。给 Claude 工具让它能看到自己的输出,以获得最佳结果。
图:在隔离的容器中使用安全 YOLO 模式
你可以不监督 Claude,而是使用 claude --dangerously-skip-permissions
来绕过所有权限检查,让 Claude 不间断地工作直到完成。这对于修复 lint 错误或生成样板代码等工作流程非常有效。
警告: 让 Claude 运行任意命令是有风险的,可能导致数据丢失、系统损坏甚至数据泄露(例如,通过提示注入攻击)。为了最小化这些风险,请在没有互联网访问的容器中使用 --dangerously-skip-permissions
。你可以遵循这个使用 Docker Dev Containers 的参考实现。
在接触新的代码库时,使用 Claude Code 进行学习和探索。你可以像在结对编程时问项目中的其他工程师一样,向 Claude 提出各种问题。Claude 可以智能地搜索代码库来回答一般性问题,例如:
async move { ... }
是做什么的?CustomerOnboardingFlowImpl
处理了哪些边缘情况?foo()
而不是 bar()
?baz.py
文件第 334 行在 Java 中的等价实现是什么?在 Anthropic,以这种方式使用 Claude Code 已成为我们的核心入职工作流程,显著缩短了熟悉项目的时间,并减轻了其他工程师的负担。无需特殊的提示!只需提问,Claude 就会探索代码以找到答案。
图:使用 Claude 编写 git commit 消息
Claude 可以有效地处理许多 git 操作。许多 Anthropic 工程师使用 Claude 来处理 90% 以上的 git
交互:
git
历史记录以回答诸如“v1.2.3 版本包含了哪些更改?”、“这个特定功能是谁负责的?”或“为什么这个 API 是这样设计的?”等问题。明确提示 Claude 查找 git 历史记录来回答这类查询很有帮助。Claude Code 可以管理许多 GitHub 交互:
这消除了记住 gh
命令行语法的需要,同时自动化了常规任务。
Anthropic 的研究人员和数据科学家使用 Claude Code 来读取和编写 Jupyter notebook。Claude 可以解释输出,包括图像,为探索和与数据交互提供了一种快速的方法。没有必需的提示或工作流程,但我们推荐的一个工作流程是在 VS Code 中并排打开 Claude Code 和一个 .ipynb
文件。
你也可以让 Claude 在向同事展示之前清理或美化你的 Jupyter notebook。明确告诉它让 notebook 或其数据可视化“美观 (aesthetically pleasing)”往往有助于提醒它,它正在为人类的观看体验进行优化。
以下建议适用于所有工作流程:
Claude Code 的成功率会随着更具体的指令而显著提高,尤其是在初次尝试时。预先给出明确的方向可以减少后续修正的需要。
例如:
Claude 可以推断意图,但它无法读懂你的心思。具体性可以更好地与期望保持一致。
图:向 Claude 提供图片作为上下文
Claude 可以通过多种方法出色地处理图像和图表:
这在处理设计模型 (design mocks) 作为 UI 开发的参考点,以及使用可视化图表进行分析和调试时特别有用。即使你不向上下文中添加视觉效果,向 Claude 明确说明结果在视觉上吸引人的重要性仍然是有帮助的。
图:使用 tab 补全来引用文件
使用 tab 键补全功能快速引用仓库中任何位置的文件或文件夹,帮助 Claude 找到或更新正确的资源。
图:向 Claude 提供 URL 作为上下文
将特定的 URL 粘贴到你的提示旁边,让 Claude 获取和阅读。为了避免对相同域名(例如 docs.foo.com)重复弹出权限提示,使用 /allowed-tools
将域名添加到你的允许列表中。
虽然自动接受模式(按 shift+tab 切换)可以让 Claude 自主工作,但通常通过成为积极的协作者并指导 Claude 的方法,你会获得更好的结果。你可以在开始时向 Claude 彻底解释任务以获得最佳结果,但你也可以随时修正 Claude 的方向。
这四个工具有助于修正方向:
尽管 Claude Code 偶尔能在第一次尝试时完美解决问题,但使用这些修正工具通常能更快地产生更好的解决方案。
在长时间的会话中,Claude 的上下文窗口可能会被不相关的对话、文件内容和命令填满。这会降低性能,有时还会分散 Claude 的注意力。在任务之间经常使用 /clear
命令来重置上下文窗口。
对于包含多个步骤或需要详尽解决方案的大型任务——例如代码迁移、修复大量 lint 错误或运行复杂的构建脚本——可以通过让 Claude 使用 Markdown 文件(甚至 GitHub issue!)作为清单和工作草稿板来提高性能:
例如,要修复大量 lint 问题,你可以执行以下操作:
有几种方法可以向 Claude 提供数据:
cat foo.txt | claude
),对于日志、CSV 和大数据特别有用大多数会话都涉及这些方法的组合。例如,你可以通过管道输入一个日志文件,然后告诉 Claude 使用工具拉取额外的上下文来调试日志。
Claude Code 包含无头模式,适用于非交互式环境,如 CI(持续集成)、pre-commit hooks(提交前钩子)、构建脚本和自动化。使用带有提示的 -p
标志来启用无头模式,并使用 --output-format stream-json
来获取流式 JSON 输出。
请注意,无头模式在会话之间不会持久存在。你必须在每个会话中触发它。
无头模式可以驱动由 GitHub 事件触发的自动化,例如当你的仓库中创建了新 issue 时。例如,公共的 Claude Code 仓库 使用 Claude 来检查新传入的 issue 并分配适当的标签。
Claude Code 可以提供主观的代码审查,超越传统 linting 工具所能检测到的问题,识别诸如拼写错误、过时的注释、误导性的函数或变量名等问题。
除了独立使用之外,一些最强大的应用涉及并行运行多个 Claude 实例:
一个简单但有效的方法是让一个 Claude 编写代码,而另一个则审查或测试它。类似于与多位工程师合作,有时拥有独立的上下文是有益的:
/clear
或在另一个终端中启动第二个 Claude。/clear
)来阅读代码和审查反馈。你可以对测试做类似的事情:让一个 Claude 编写测试,然后让另一个 Claude 编写代码以使测试通过。你甚至可以让你的 Claude 实例通过给它们独立的工作草稿板并告诉它们写入哪个、读取哪个来进行通信。
这种分离通常比让单个 Claude 处理所有事情产生更好的结果。
Anthropic 的许多工程师不会等待 Claude 完成每一步,而是这样做:
这种方法对于多个独立任务特别有效,提供了比多个检出更轻量级的替代方案。Git worktrees 允许你将同一仓库的多个分支检出到不同的目录中。每个 worktree 都有自己独立的工作目录和文件,同时共享相同的 Git 历史记录和 reflog。
使用 git worktrees 使你能够同时在项目的不同部分运行多个 Claude 会话,每个会话都专注于其独立的任务。例如,你可能让一个 Claude 重构你的身份验证系统,而另一个则构建一个完全不相关的数据可视化组件。由于任务不重叠,每个 Claude 都可以全速工作,而无需等待对方的更改或处理合并冲突:
git worktree add ../project-feature-a feature-a
cd ../project-feature-a && claude
一些技巧:
git worktree remove ../project-feature-a
claude -p
(无头模式)可以将 Claude Code 以编程方式集成到更大的工作流程中,同时利用其内置工具和系统提示。使用无头模式主要有两种模式:
并行分发 (Fanning out) 处理大型迁移或分析(例如,分析数百个日志中的情绪或分析数千个 CSV):
claude -p "将 foo.py 从 React 迁移到 Vue。完成后,如果成功,你必须返回字符串 OK,如果任务失败则返回 FAIL。" --allowedTools Edit Bash(git\ commit:*)
流水线处理 (Pipelining) 将 Claude 集成到现有的数据/处理流水线中:
claude -p "<your prompt>" --json | your_command
,其中 your_command
是你处理流水线的下一步。对于这两种用例,使用 --verbose
标志进行 Claude 调用的调试可能会很有帮助。我们通常建议在生产环境中关闭详细模式以获得更清晰的输出。
你有哪些使用 Claude Code 的技巧和最佳实践?欢迎 Tag @AnthropicAI,让我们看看你在构建什么!
致谢
由 Boris Cherny 撰写。这项工作借鉴了更广泛的 Claude Code 用户社区的最佳实践,他们富有创意的方法和工作流程持续激励着我们。特别感谢 Daisy Hollman、Ashwin Bhat、Cat Wu、Sid Bidasaria、Cal Rueb、Nodir Turakulov、Barry Zhang、Drew Hodun 以及许多其他 Anthropic 工程师,他们宝贵的见解和使用 Claude Code 的实践经验帮助塑造了这些建议。、
看到这里的你太棒了!点个赞再走吧!感谢
如果你想要学习编程、找工作、准备面试,请后台私信我,这里有丰富的资源和工具帮你更快更好的成为一个好的程序员,还有丰厚福利:
53AI,企业落地大模型首选服务商
产品:场景落地咨询+大模型应用平台+行业解决方案
承诺:免费场景POC验证,效果验证后签署服务协议。零风险落地应用大模型,已交付160+中大型企业
2025-04-21
独家|百度上线“心响”App,平替版Mauns来了?
2025-04-21
Deep Research 类产品深度测评:下一个大模型产品跃迁点到来了吗?
2025-04-21
从“大模型热”到“Agent 潮”,“真风口”还是“伪命题”?
2025-04-21
复盘字节扣子空间开发历程:瞄准工作场景,做一个 Agent 系统
2025-04-21
OpenAI 发布企业 AI 集成技术手册:从评估到自动化
2025-04-21
我所理解的大模型:语言的幻术
2025-04-21
字节 Trae 支持 MCP 了
2025-04-21
星火X1全新升级!首个全国产通用深度推理大模型
2024-08-13
2024-06-13
2024-08-21
2024-09-23
2024-07-31
2024-05-28
2024-08-04
2024-04-26
2024-07-09
2024-09-17
2025-04-21
2025-04-21
2025-04-21
2025-04-20
2025-04-18
2025-04-16
2025-04-13
2025-04-13