正在学习

2.1 Claude 如何理解代码

2.2 开发者的提示工程基础

提示工程是一门与 Claude Code 沟通的艺术,旨在获得准确、高效且可靠的结果。它不是关于如何"欺骗"模型——而是提供足够的上下文、清晰度和方向,使其能够进行有效的推理。虽然 Claude Code 能够出色地理解自然语言,但其输出质量始终取决于你输入的精确程度。作为一名开发者,学会与 Claude"交流"与学习一门新的编程语言一样有价值。

当你发出一个提示时,Claude 不仅仅看你问了什么——它会解读你为什么问。它会考虑你消息的意图、结构和语气,构建一条通往答案的逻辑路径。如果你的问题含糊不清,推理路径也会很宽泛,结果可能显得平庸。如果你的问题具体明确,Claude 会缩小推理范围并专注于精确性。优秀回答与平庸回答之间的差异,往往在于你如何设定问题。

一个优质提示的构成

一个强大的 Claude Code 提示通常包含三个关键部分:

  1. 上下文(Context) — Claude 理解你的任务所需的背景信息(例如,你使用的语言或框架)。
  2. 指令(Instruction) — 你希望 Claude 执行的操作(例如,生成、修复、重构、解释或测试)。
  3. 约束或期望(Constraint or Expectation) — 你希望答案如何格式化或限定范围(例如,"使用 async 语法"、"优化可读性"或"仅返回有效的 Python 代码")。

以下是一个简单的示例,用来说明差异:

薄弱提示:

"编写一个处理用户认证的函数。"

优质提示:

"编写一个使用 FastAPI 的 Python 函数,通过 JWT 令牌处理用户认证。该函数应验证凭证,签发 15 分钟内过期的令牌,并返回结构化的 JSON 响应。请包含文档字符串和注释,解释每一步。"

Claude 对优质版本的回应是结构化、文档完善的代码,精确匹配你的意图。薄弱版本则产生功能可用但通用化的结果——可能缺乏错误处理或适当的安全措施。

迭代式提示

向 Claude 发出提示并非一次性命令——而是一种对话。你可以通过后续消息来完善输出,例如:

"Claude,请重构这段代码,使用依赖注入代替硬编码凭证。"

Claude 将重新解读你的原始代码并进行相应调整。迭代是 Claude 擅长的领域;每一次修订都会提升结果的清晰度、性能或可维护性。这对于重构或架构设计等复杂任务尤其有用。

进行交互式工作时,可以将 Claude 视为一个协作者:

  • 从宏观入手,测试理解程度。
  • 在细化期望时,逐步收窄指令。
  • 请它解释推理过程——这有助于验证逻辑并发现潜在的疏忽。

示例与反示例的作用

Claude 通过模式识别来学习你的意图,因此在提示中提供示例或反示例可以提升准确性。例如:

"以下是我期望的 JSON 格式示例。请完全匹配。"或者"避免使用递归;请改用迭代。"

每一条指令都能减少歧义。当约束是明确的而非隐含的时,Claude 的回应效果最佳。

思维链提示

当你鼓励 Claude 一步步思考时——这种称为思维链提示(Chain-of-Thought Prompting)的方法——其推理能力会发挥最大效用。这反映了人类开发者在编写代码前规划代码逻辑的方式。例如:

"在编写代码之前,请列出创建 FastAPI 用户注册端点所需的步骤。然后生成完整的函数实现。"

Claude 首先会生成一个结构化的大纲,验证逻辑流程,然后生成最终代码。这种两步过程会产生更清晰、更易维护的输出,因为推理先于执行。

提示清晰度与模型效率

Claude 的上下文窗口非常庞大,但效率仍然重要。不必要的细节会分散其注意力或增加 token 成本。一个好的原则是:包含对推理至关重要的内容,排除显而易见的内容。例如:

  • 告诉 Claude 目标框架、语言或 API 版本,但除非相关,否则不要粘贴整个依赖列表。
  • 如果 Claude 误解了某些内容,请明确重申,而不是模糊地换种说法。

精心设计的提示可以减少 token 使用量和处理时间,同时提升准确性——既节省时间又降低成本。

提示质量与输出对比

提示类型 描述 预期结果 示例
极简型 过于模糊,缺乏上下文 通用或不完整的代码 "编写一个处理请求的函数。"
结构化 包含上下文和清晰目标 功能性、可复用的代码 "编写一个 Express.js 路由,验证传入的 JSON 并返回 201 响应。"
迭代型 在先前输出基础上构建 精炼的、可投入生产的成果 "现在优化该路由以支持异步操作。"
反思型 要求解释或推理 对 Claude 思维过程的深入洞察 "解释这段代码如何处理并发,并提出改进建议。"

从命令到对话

将 Claude Code 视为同行评审者而非编译器时,它的效能最大——它能够智能地讨论、分析和重写代码。提出开放式问题。征求意见。挑战它的假设。当你以对话方式发出提示时,会激活其推理模式,从而产生具有更深层洞察和上下文的答案。

与其输入:

"修复这个 bug。"

不如尝试:

"这是出错的函数。你能识别原因,解释为什么会失败,并提出两种可能的修复方案——一种最小改动,一种长期方案吗?"

这将一个单一任务转变为一次学习交流。Claude 不仅仅是修补代码;它会解释根本原因和各种权衡,帮助你在保持生产可靠性的同时成长为一名开发者。

总之,良好的提示编写并非一个机械化的过程——它是一种沟通。你越能清晰地表达目标、约束条件和期望,Claude 就越能像一个真正的工程协作伙伴一样工作。每一次提示都是一次完善你与模型对话的机会,逐步形成请求、推理与优化之间直觉性的节奏。

练习题

与 Claude Code 交流时,提示工程的主要目标是什么?

A. 欺骗模型生成特定的输出
B. 提供足够的上下文、清晰度和方向以获得准确的结果
C. 使模型尽可能快地生成输出
D. 减少提示中使用的 token 数量

当 Claude 解读提示时,它会考虑哪些因素来构建通向答案的逻辑路径?

A. 仅提示中的关键词
B. 消息的意图、结构和语气
C. 提示的长度
D. 提示发出的时间

以下哪些是强有力 Claude Code 提示的关键部分?(选择所有适用的)

A. 上下文
B. 指令
C. 约束或期望
D. 情感诉求

像"编写一个处理用户身份验证的函数"这样的弱提示很可能会产生通用或不完整的代码,因为它缺乏上下文和明确的目标。

迭代提示涉及通过后续消息来优化输出,将 Claude 视为一个___。

解释在提示中给出示例或反例如何提高 Claude 的准确性。

思维链提示的目的是什么?

A. 让 Claude 尽可能快速地生成代码
B. 鼓励 Claude 在生成代码之前进行逐步思考
C. 减少提示中使用的 token 数量
D. 让 Claude 以特定格式生成输出

Claude 的上下文窗口是无限的,所以提示的效率并不重要。

当 Claude 误解某事时,最好是___而不是含糊地重新表述。

比较最小提示和结构化提示的预期结果。

以下哪些是将 Claude 视为对话式协作者的好处?(选择所有适用的)

A. 它激活 Claude 的推理模式
B. 它产生具有更深见解和上下文的答案
C. 它减少了对清晰提示的需求
D. 它将单个任务转化为学习交流

以下哪一项是反思性提示(reflective prompt)的例子?

A. "编写一个处理用户身份验证的函数。"
B. "解释这段代码如何处理并发,并提出改进建议。"
C. "使用 FastAPI 编写一个 Python 函数,通过 JWT 令牌处理用户身份验证。"
D. "现在优化该路由以支持异步操作。"

迭代式提示仅对简单任务有用,对重构或架构设计等复杂任务则无用。

当与 Claude 交互工作时,你应该以广泛的范围开始以测试理解。

在提示中提供示例或反例如何帮助 Claude 生成更准确的输出?

在使用 Claude API 创建一个用于对整数列表进行排序的 Python 函数时,以下哪个提示词展示了对"优质提示词构成"原则的最佳运用?

A. 编写一个 Python 函数对列表进行排序。
B. 创建一个使用冒泡排序对列表进行排序的 Python 函数。
C. 编写一个使用快速排序算法对整数列表进行排序的 Python 函数。该函数应接受一个列表作为输入,并返回一个新的已排序列表。包含解释每个步骤的文档字符串。
D. 对以下列表进行排序:[3, 1, 4, 1, 5, 9, 2, 6]。

以下哪些技术有助于在通过 API 与 Claude 进行迭代工作时提高响应的质量?(选择所有适用的项)

A. 以非常模糊的初始提示开始
B. 提供期望输出格式的具体示例
C. 要求 Claude 在生成代码后解释其推理过程
D. 使每个后续提示比前一个更具体
E. 在后续消息中仅使用单词命令

在向 Claude 进行 messages.create API 调用时,在提示中包含 ___ 可以通过提供必要的背景信息来帮助模型生成更准确的回复。

解释你将如何根据本节的原则修改以下较弱的 API 提示,使其更强:'编写一个处理数据的函数。'

登录后解锁笔记、知识点解析、AI 问答

立即登录