正在学习
3.1 编写用于代码生成的有效提示
内存中的用户存储
users_db: List[dict] = []
定义请求体模式
class UserCreate(BaseModel):
username: str
email: EmailStr
password: str
@app.post("/register")
async def register_user(request: UserCreate):
"""注册一个新用户,使用哈希密码。"""
# 检查用户是否已存在
for user in users_db:
if user["email"] == request.email:
raise HTTPException(status_code=400, detail="该邮箱已注册")
# 对密码进行哈希处理
hashed_password = bcrypt.hashpw(request.password.encode('utf-8'), bcrypt.gensalt()).decode('utf-8')
# 存储用户记录
user_data = {"username": request.username, "email": request.email, "password": hashed_password}
users_db.append(user_data)
return {"message": f"用户 {request.username} 注册成功"}
此代码可在安装了 FastAPI 和 bcrypt 的 Python 3.11 环境中按原样运行。它包含内联文档,遵循良好的实践,并精确地展示了 Claude 如何利用你提示中的上下文来构建逻辑、验证输入和管理状态。
如果你的提示只是简单地说"创建一个注册 API",Claude 可能会省略密码哈希或错误处理。每缺失一个细节都会削弱其推理过程。
澄清表
下表总结了有助于 Claude 生成高质量结果的关键提示组件:
| 提示组件 | 用途 | 示例 |
| --- | --- | --- |
| 目标 | 告诉 Claude 要构建什么 | "构建一个 FastAPI /register 端点" |
| 语言/框架 | 指导代码语法和依赖项 | "使用 Python 3.11 配合 FastAPI 和 bcrypt" |
| 行为上下文 | 定义预期逻辑或规则 | "验证输入、对密码进行哈希处理、处理重复项" |
| 输出格式 | 控制输出的结构 | "返回包含成功消息的 JSON 响应" |
| 文档请求 | 提高可读性和可理解性 | "包含文档字符串和内联注释" |
通过遵循此框架,你教会了 Claude 如何思考你的请求,而不是从其训练数据中复制什么。
有效的提示在于通过清晰实现精确。当 Claude Code 不仅理解技术请求,还理解其背后的意图时,它能发挥最佳表现。你提示中的每个字都是一个设计决策:指定行为、引导推理、定义格式。通过实践这种程度的意图性,你可以将 Claude 转变为一个纪律严明的编码伙伴,而非一个通用的助手。
## 3.2 逐步推理与思维链技术
Claude Code 不仅仅是一个代码生成器——它还是一个推理伙伴。当你学会一步步引导它解决问题时,它表现得像一位高级工程师:在写出第一行代码之前会进行思考、规划和验证。这个过程称为思维链提示,它改变了 Claude 处理复杂编码任务的方式。Claude 不会急于输出,而是将你的请求分解为更小的逻辑步骤,对每个部分进行推理,然后生成完整、准确且可维护的代码。理解并应用此技术将使你能够在实际开发中释放 Claude 最先进的推理能力。
概念发展
从技术角度讲,思维链提示指导 Claude 模拟开发人员在解决问题时遵循的相同认知过程。它涉及两个关键阶段:推理和实现。
在推理阶段,Claude 检查请求,概述逻辑方法,并识别依赖关系或潜在的陷阱。在实现阶段,它将推理转化为结构化的、可执行的代码。这种两阶段模式使 Claude 的响应既准确又可解释。
例如,像"编写一个计算复利的 Python 函数"这样的提示可能产生快速可用的代码,但缺乏解释或输入验证。然而,如果你要求 Claude"先解释其推理过程,然后再编写函数",它会停下来概述公式、预期输入和步骤——从而产生更一致、更稳健的结果。
这种方法反映了一个深思熟虑的开发人员的工作流程。你首先概述逻辑,测试假设,然后才编写实现代码。使用 Claude 时,同样的思维纪律通过仔细的提示得以贯彻。
动手示例
为了实际看到这一点,让我们构建一个计算数字阶乘的小型 FastAPI 服务。我们将构建一个提示,在 Claude 编写实现之前激活其推理过程。
提示
"Claude,在编码之前,请概述你创建 FastAPI 端点的推理过程,该端点接受一个数字作为输入并返回其阶乘。然后,使用输入验证、注释和清晰的错误处理编写完整的实现。"
Claude 的推理(预期响应)
Claude 通常会首先将问题分解为步骤:
1. 定义 FastAPI 应用和输入模式。
2. 使用递归和错误检查实现阶乘函数。
3. 处理无效输入,例如负数。
4. 创建一个 /factorial 端点,用于验证输入并返回 JSON 输出。
完成此大纲后,Claude 生成以下代码。
生成的代码
```python
from fastapi import FastAPI, HTTPException
from pydantic import BaseModel
app = FastAPI()
练习题
在给定的代码中,users_db 变量的用途是什么?
A. 用于存储用于身份验证的 API 密钥
B. 用于在内存中存储用户数据
C. 用于跟踪已注册用户的数量
D. 用于验证用户电子邮件
在 FastAPI 中,哪个装饰器用于定义 /register 端点?
A. @app.get
B. @app.put
C. @app.post
D. @app.delete
在给定代码中,用户注册过程执行了哪些检查?
A. 验证用户名格式
B. 检查邮箱是否已被注册
C. 验证密码强度
D. 在存储前对密码进行哈希处理
hashed_password 在 users_db 中以字节字符串的形式存储。
用户数据以___的形式存储在 users_db 中。
注册端点中抛出的 HTTPException 的目的是什么?
成功用户注册后返回的响应是什么?
A. 哈希后的密码
B. 用户的电子邮件
C. 包含用户名的成功消息
D. 整个用户记录
用户注册的思维链过程涉及哪些知识点?
A. 内存用户存储初始化
B. 思维链推理阶段
C. 密码哈希实现
D. 思维链实现阶段
UserCreate 类定义了请求体的架构,包括用户的密码。
代码如何在存储过程中确保密码安全?
在实现用户注册端点时,重复检查逻辑的主要目的是什么?
A. 确保密码被正确哈希
B. 防止多次存储同一用户
C. 验证电子邮件格式
D. 生成成功响应消息
哪些组件对于创建有效的提示以让 Claude 生成用户注册端点是必不可少的?请选择所有适用的选项。
A. 目标:'构建一个 FastAPI /register 端点'
B. 语言/框架:'使用 Python 3.11 与 FastAPI 和 bcrypt'
C. 输出格式:'返回包含成功消息的 JSON 响应'
D. 文档请求:'包含内联注释'
E. 行为上下文:'验证输入、哈希密码、处理重复项'
实现用户注册端点的思维链推理阶段将涉及在编写任何代码之前识别依赖项,例如密码哈希所需的 bcrypt。
在用户注册端点中,___ 方法用于遍历 users_db 列表以检查重复的电子邮件。
登录后解锁笔记、知识点解析、AI 问答
立即登录