正在学习
2.1 Claude 如何理解代码
2.2 开发者的提示工程基础
提示工程是一门与 Claude Code 沟通的艺术,旨在获得准确、高效且可靠的结果。它不是关于如何"欺骗"模型——而是提供足够的上下文、清晰度和方向,使其能够进行有效的推理。虽然 Claude Code 能够出色地理解自然语言,但其输出质量始终取决于你输入的精确程度。作为一名开发者,学会与 Claude"交流"与学习一门新的编程语言一样有价值。
当你发出一个提示时,Claude 不仅仅看你问了什么——它会解读你为什么问。它会考虑你消息的意图、结构和语气,构建一条通往答案的逻辑路径。如果你的问题含糊不清,推理路径也会很宽泛,结果可能显得平庸。如果你的问题具体明确,Claude 会缩小推理范围并专注于精确性。优秀回答与平庸回答之间的差异,往往在于你如何设定问题。
一个优质提示的构成
一个强大的 Claude Code 提示通常包含三个关键部分:
- 上下文(Context) — Claude 理解你的任务所需的背景信息(例如,你使用的语言或框架)。
- 指令(Instruction) — 你希望 Claude 执行的操作(例如,生成、修复、重构、解释或测试)。
- 约束或期望(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 交流时,提示工程的主要目标是什么?
当 Claude 解读提示时,它会考虑哪些因素来构建通向答案的逻辑路径?
以下哪些是强有力 Claude Code 提示的关键部分?(选择所有适用的)
像"编写一个处理用户身份验证的函数"这样的弱提示很可能会产生通用或不完整的代码,因为它缺乏上下文和明确的目标。
迭代提示涉及通过后续消息来优化输出,将 Claude 视为一个___。
解释在提示中给出示例或反例如何提高 Claude 的准确性。
思维链提示的目的是什么?
Claude 的上下文窗口是无限的,所以提示的效率并不重要。
当 Claude 误解某事时,最好是___而不是含糊地重新表述。
比较最小提示和结构化提示的预期结果。
以下哪些是将 Claude 视为对话式协作者的好处?(选择所有适用的)
以下哪一项是反思性提示(reflective prompt)的例子?
迭代式提示仅对简单任务有用,对重构或架构设计等复杂任务则无用。
当与 Claude 交互工作时,你应该以广泛的范围开始以测试理解。
在提示中提供示例或反例如何帮助 Claude 生成更准确的输出?
在使用 Claude API 创建一个用于对整数列表进行排序的 Python 函数时,以下哪个提示词展示了对"优质提示词构成"原则的最佳运用?
以下哪些技术有助于在通过 API 与 Claude 进行迭代工作时提高响应的质量?(选择所有适用的项)
在向 Claude 进行 messages.create API 调用时,在提示中包含 ___ 可以通过提供必要的背景信息来帮助模型生成更准确的回复。
解释你将如何根据本节的原则修改以下较弱的 API 提示,使其更强:'编写一个处理数据的函数。'
登录后解锁笔记、知识点解析、AI 问答
立即登录