你是否遇到过这些情况:
同样的需求,不同的问法得到质量迥异的答案?
想要 Claude Code 按特定风格编写代码,但结果总不理想?
看到别人用 AI 编程效率很高,自己用起来却差强人意?
问题的核心往往不在工具,而在提示词(Prompt) 。
使用 Claude Code 这段时间,我发现提示词工程是决定效果的关键因素。好的提示词能让 Claude Code 准确理解意图,生成高质量代码;而不好的提示词则可能导致模糊、错误的结果。
提示词的核心原则 清晰具体 模糊的提示词 :
问题很明显:什么语言?什么功能?什么参数?什么返回值?
清晰的提示词 :
1 2 3 claude "用 Python 写一个函数,接收一个整数列表, 返回去重后的列表,保持原始顺序, 使用集合操作优化性能,包含类型提示和文档字符串"
这样 Claude Code 就知道:
语言:Python
功能:去重 + 保持顺序
方法:集合操作
要求:类型提示 + 文档
提供上下文 缺少上下文 :
充足上下文 :
1 2 3 4 claude "我的用户登录 API 返回 401 错误。 这是错误日志:[日志内容] 这是相关代码:[代码] 请帮我分析原因并提供修复方案"
结构化表达 我习惯用结构化的格式:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 claude "请帮我完成以下任务: 【任务描述】 创建一个用户认证中间件 【技术要求】 - 框架:Express.js - 认证方式:JWT - 加密算法:bcrypt 【功能要求】 1. 验证请求头中的 token 2. 解析用户信息 3. 将用户信息添加到 req 对象 4. 处理错误情况 【输出格式】 完整的代码 + 使用示例"
Few-shot Learning 的威力 **Few-shot Learning(少样本学习)**是通过提供示例来引导 AI 理解任务的方法。
对比示例 Zero-shot(无示例) :
结果是通用的,不一定符合需求。
One-shot(单个示例) :
1 2 3 4 5 6 7 8 9 10 11 claude "创建一个用户验证函数,类似这样的风格: 示例: function validateEmail(email) { const regex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/; if (!email) return { valid: false, error: '邮箱不能为空' }; if (!regex.test(email)) return { valid: false, error: '邮箱格式错误' }; return { valid: true }; } 请创建 validatePassword 函数,遵循相同的模式"
结果会和示例风格一致。
Few-shot(多个示例) :
1 2 3 4 5 6 7 claude "按照以下模式创建验证函数: 示例 1:validateEmail 示例 2:validatePhone 示例 3:validateAge 请创建 validateUsername 函数"
结果会高度一致地复现模式。
我的最佳实践 选择好的示例 :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 claude "参考这些示例创建 API 路由: // 用户列表(GET) app.get('/api/users', async (req, res) => { try { const users = await User.find(); res.json({ success: true, data: users }); } catch (error) { res.status(500).json({ success: false, error: error.message }); } }); // 用户详情(GET) app.get('/api/users/:id', async (req, res) => { try { const user = await User.findById(req.params.id); if (!user) return res.status(404).json({ success: false, error: '未找到' }); res.json({ success: true, data: user }); } catch (error) { res.status(500).json({ success: false, error: error.message }); } }); // 创建用户(POST) app.post('/api/users', async (req, res) => { try { const user = await User.create(req.body); res.status(201).json({ success: true, data: user }); } catch (error) { res.status(400).json({ success: false, error: error.message }); } }); 请创建更新用户(PUT)和删除用户(DELETE)的路由"
渐进式示例 (简单 → 复杂):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 claude "参考这些示例: 示例 1(简单): function add(a, b) { return a + b; } 示例 2(中等): function sum(arr) { return arr.reduce((acc, val) => acc + val, 0); } 示例 3(复杂): function sumBy(arr, key) { return arr.reduce((acc, obj) => acc + obj[key], 0); } 请创建函数:groupBy(arr, key)"
Chain-of-Thought 的应用 **Chain-of-Thought(思维链)**是让 AI 展示推理过程的技术,能显著提高复杂任务的准确性。
基础应用 直接要求答案 :
1 2 3 4 5 6 7 8 claude "这个函数的时间复杂度是多少? function foo(arr) { for (let i = 0; i < arr.length; i++) { for (let j = 0; j < arr.length; j++) { console.log(arr[i], arr[j]); } } }"
要求推理过程 :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 claude "请分析这个函数的时间复杂度: function foo(arr) { for (let i = 0; i < arr.length; i++) { for (let j = 0; j < arr.length; j++) { console.log(arr[i], arr[j]); } } } 请按以下步骤分析: 1. 识别循环结构 2. 计算每个循环的迭代次数 3. 分析循环间的关系 4. 得出最终的时间复杂度"
输出会展示完整的推理过程,更加准确可靠。
结构化思维链 对于复杂任务,我使用结构化的思维链:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 claude "请帮我设计一个用户认证系统,请按以下步骤思考: 【步骤 1:需求分析】 系统需要支持什么? 【步骤 2:技术选型】 选择什么技术栈? 【步骤 3:架构设计】 如何组织代码? 【步骤 4:安全考虑】 需要注意什么? 【步骤 5:实现计划】 具体实现步骤"
角色扮演技巧 设定角色能让 AI 采用特定的视角、知识和表达方式。
基础角色设定 普通提问 :
角色扮演 :
1 2 3 4 5 6 7 8 claude "你是一个有 10 年经验的性能优化专家。 请审查这段代码,从以下角度分析: 1. 算法效率 2. 内存使用 3. 可维护性 4. 最佳实践 [代码内容]"
我常用的角色模板 架构师视角 :
1 2 3 4 5 6 7 8 9 claude "作为系统架构师,请评估这个设计: [设计描述] 从以下维度分析: - 可扩展性 - 可维护性 - 性能 - 安全性 - 成本"
代码审查者 :
1 2 3 4 5 6 7 8 9 10 claude "你是一个严格的代码审查者, 请审查这段 PR: [代码内容] 关注点: - 潜在 bug - 代码规范 - 测试覆盖 - 文档完整性 - 性能问题"
安全专家 :
1 2 3 4 5 6 7 8 9 10 claude "作为网络安全专家, 请审计这段代码的安全问题: [代码内容] 检查: - SQL 注入 - XSS 漏洞 - CSRF 防护 - 认证授权 - 敏感数据处理"
技术写作专家 :
1 2 3 4 5 6 7 8 9 claude "你是技术文档写作专家, 请为这个 API 编写文档: [代码内容] 要求: - 清晰易懂 - 包含示例 - 说明参数和返回值 - 添加使用场景"
我的提示词模板库 经过长时间积累,我建立了一套提示词模板。
代码生成模板 函数生成模板 :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 claude "【任务】生成一个函数 【语言】${LANGUAGE} 【功能】${FUNCTION_DESCRIPTION} 【输入】 - 参数:${PARAMETERS} - 类型:${TYPES} 【输出】 - 返回值:${RETURN_VALUE} - 类型:${RETURN_TYPE} 【要求】 - 包含错误处理 - 添加类型提示 - 编写文档字符串 - 遵循最佳实践"
代码审查模板 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 claude "【任务】代码审查 【角色】资深开发者 + 安全专家 【代码】 ${CODE} 【审查维度】 1. 正确性(逻辑、边界、错误处理) 2. 性能(时间复杂度、空间复杂度) 3. 安全性(输入验证、注入风险) 4. 可维护性(代码风格、命名、注释) 【输出格式】 - 总体评分(1-10) - 问题列表(按优先级) - 改进建议 - 重构版本(如需要)"
调试模板 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 claude "【任务】调试帮助 【问题】${PROBLEM_DESCRIPTION} 【错误信息】 ${ERROR_MESSAGE} 【相关代码】 ${CODE} 【环境信息】 - 语言/框架:${TECH_STACK} - 运行环境:${ENVIRONMENT} 【分析步骤】 1. 识别错误类型 2. 分析可能原因 3. 提供诊断方法 4. 给出解决方案"
重构模板 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 claude "【任务】代码重构 【当前代码】 ${CODE} 【重构目标】 ${REFACTOR_GOALS} 【约束条件】 - 保持功能不变 - 不破坏现有测试 - 遵循团队规范 【输出】 - 重构后的代码 - 改进说明 - 对比分析"
实战案例 创建 RESTful API 简单提问 :
结果是通用的。
结构化提示词 :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 claude "【角色】你是一个 Express.js 后端开发专家 【任务】创建一个完整的用户管理 API 【技术栈】 - 框架:Express.js 4.x - 数据库:MongoDB + Mongoose - 认证:JWT - 验证:joi 【需要实现的端点】 1. POST /api/users/register - 用户注册 2. POST /api/users/login - 用户登录 3. GET /api/users - 获取用户列表(分页) 4. GET /api/users/:id - 获取用户详情 5. PUT /api/users/:id - 更新用户信息 6. DELETE /api/users/:id - 删除用户 【要求】 1. 密码使用 bcrypt 加密 2. 使用 JWT 进行身份验证 3. 实现请求验证中间件 4. 统一的错误处理 5. 完整的代码注释 【数据模型】 { username: String (unique, required), email: String (unique, required), password: String (required), role: String (default: 'user') }"
算法优化 模糊提问 :
详细指导 :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 claude "【当前代码】 function findDuplicates(arr) { const duplicates = []; for (let i = 0; i < arr.length; i++) { for (let j = i + 1; j < arr.length; j++) { if (arr[i] === arr[j] && !duplicates.includes(arr[i])) { duplicates.push(arr[i]); } } } return duplicates; } 【优化目标】 1. 降低时间复杂度 2. 提高代码可读性 3. 处理边界情况 【分析步骤】 1. 分析当前算法的时间复杂度 2. 识别性能瓶颈 3. 提出优化方案 4. 对比优化前后的性能"
常见陷阱 假设太多 错误示例 :
正确做法 :
1 2 claude "使用 React + Tailwind CSS 创建登录页面, 包含邮箱、密码输入和登录按钮"
指令矛盾 错误示例 :
1 2 claude "创建一个简洁但功能全面的函数"
正确做法 :
1 2 claude "创建一个函数,优先考虑简洁性, 在可读性和性能之间平衡"
缺少反馈循环 一次性完成 :
迭代优化 :
1 2 3 4 5 6 7 8 claude "设计电商系统的数据模型" claude "基于上面的模型,实现商品列表 API" claude "为商品 API 添加搜索和筛选功能"
构建个人模板库 我按以下结构组织模板:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 ~/.claude/prompts/ ├── code-generation/ │ ├── function.md │ ├── class.md │ └── api.md ├── code-review/ │ ├── security.md │ ├── performance.md │ └── style.md ├── debugging/ │ ├── error-analysis.md │ └── bug-fix.md └── refactoring/ ├── optimization.md └── modernization.md
使用时:
1 2 3 4 5 cat ~/.claude/prompts/code-generation/function.mdclaude "$(envsubst < template.md) "
提示词效果对比
提示词类型
准确率
适用场景
简单直接
60%
快速原型
清晰具体
80%
日常开发
Few-shot
90%
风格统一
CoT
95%
复杂推理
角色扮演
85%
特定视角
选择建议:
简单任务 → 清晰具体
风格统一 → Few-shot
复杂推理 → Chain-of-Thought
专业视角 → 角色扮演
重复使用 → 模板库
总结 提示词工程是与 AI 有效沟通的关键:
清晰具体是基础
Few-shot Learning 能统一风格
Chain-of-Thought 提高准确性
角色扮演获取专业视角
模板库提高复用性
掌握这些技巧后,你会发现 Claude Code 的效果大幅提升。
下一步,让我们探索多语言编程。
相关资源
继续加油!