Claude Code 的角色扮演 Prompt:同一个问题,问法不同,代码质量能差3个档

我做了一个实验:同样让 Claude Code 写一个用户认证模块,一次直接问,一次先设定角色。
直接问的结果:能跑,逻辑通,但没有错误边界,JWT 过期处理是简化版,密码哈希用的是 MD5(!!)。
设定角色之后:主动提醒我 MD5 不安全,换成了 bcrypt,补上了 refresh token 轮换逻辑,还顺带写了 rate limiting 的骨架。
代码量差不多,时间差不多。差的只是开头那句话。
为什么大多数人用 Claude Code 会”浪费”它
我最开始用 Claude Code 的姿势,跟大多数人一样:帮我写一个支付模块,这里有个 bug 帮我改一下,加一个邮件发送功能。
Claude Code 的确都能完成。它不会拒绝你,不会说”你说得不够清楚”,它会尽职尽责地给你一段”够用”的代码。
问题就出在这个”够用”上。
够用的代码和生产级代码之间,有一道很深的鸿沟。 够用的代码能通过基本测试,但在出海产品里,你可能面对的是:多时区的时间处理、Stripe Webhook 的幂等性、GDPR 合规的数据删除逻辑、并发写入的数据库事务……
这些场景里,”够用”可能意味着凌晨三点的故障告警。
我花了大概两个月才想清楚一件事:Claude Code 的默认模式,是”聪明的实习生”。它会做你说的,但不会主动帮你想你没说的。 而角色扮演 Prompt 的本质,是把它从实习生升级成专家顾问。
核心套路:角色扮演 Prompt 的三层结构
不是随便说一句”你是个专家”就完事了。我踩了很多坑之后,总结出一套可以直接复用的结构:
身份层 → 经历层 → 行为约束层
缺一不可。光有身份,Claude 会给你一个表面上正确但缺乏深度的答案。加上经历层,它才知道哪些是真正的关键点。加上行为约束层,它才会主动暴露问题而不是替你掩盖。
第一层:身份层
告诉它”你是谁”,但要具体,不能只说”专家”。
❌ 弱:你是一个 Node.js 专家
✅ 强:你是一个有 8 年经验的 Node.js 后端工程师,主要方向是 SaaS 产品的 API 设计和生产环境性能优化
具体的工作方向很重要。”后端工程师”和”专注 SaaS API 的后端工程师”,关注点完全不同。前者可能给你一个通用解法,后者会自然而然地考虑 multi-tenancy、API rate limiting、webhook 可靠性这些 SaaS 特有问题。
第二层:经历层
给它”假简历”,让它相信自己踩过某些具体的坑。
你曾经处理过 Stripe 支付在高并发场景下的重复扣款问题,深知幂等性设计的重要性。你也在生产环境里见过时区处理不当导致的数据错乱,对国际化产品的时间处理有严格要求。
这层是大多数教程不会告诉你的细节。Claude 的训练数据里包含大量有关”专家踩坑经历”的文本,当你给它这样的背景时,它会自动调用与这些经历相关的知识权重,输出的内容质量会有明显提升。
说人话就是:你在帮它”热身”,激活它知识库里最相关的那部分。
第三层:行为约束层
这层最关键,也最容易被忽视。
当你发现代码存在安全隐患、性能瓶颈或不符合生产标准的写法时,必须主动指出,不能只实现功能。如果需求本身存在设计问题,先说明问题再给出实现。
没有这一层,Claude Code 的默认行为是”你让我做什么我做什么”。你说”帮我写个登录接口”,它就写一个登录接口,哪怕里面用了 MD5。
加上这层约束,它会变成一个”挑剔的同事”:功能实现了,但它会主动说”顺便提一下,这里的密码存储方式有安全风险,建议换成 bcrypt”。
完整模板:直接可用的角色扮演 Prompt
这是我在出海 SaaS 项目里实际用的版本,放在 CLAUDE.md 的 project 级配置里:
1 | `# 角色定义 |
这个文件放在项目根目录,Claude Code 每次启动时会自动读取。
场景化专家:按需切换
全局角色适合定义通用准则,但具体任务往往需要更专精的角色。这里是几个我常用的场景化 Prompt:
场景一:写 Stripe 支付相关代码
1 | `你现在是一个 Stripe 集成专家,曾经处理过 Webhook 重复消费导致用户被重复扣款的生产事故。 |
场景二:做代码 Review
1 | `你是一个对代码质量极其挑剔的 CTO,正在 review 一个出海 SaaS 产品的代码。 |
场景三:数据库设计
1 | `你是一个 PostgreSQL 专家,曾经在一个 DAU 50 万的 SaaS 产品里做过数据库架构优化。 |
踩坑实录
坑一:角色设定太宽泛,等于没设定
第一次尝试的时候,我的 Prompt 是这样的:
你是一个经验丰富的全栈工程师,请帮我写高质量的代码。
卡了两天,发现输出质量和没写这句话差不多。原因我后来想明白了:”经验丰富”是一个没有锚点的形容词,Claude 不知道”经验”体现在哪些具体决策上。
解决方法:把”经验”翻译成具体的技术决策偏好。不是”我经验丰富”,是”我倾向于在任何数据库操作里加事务,即使看起来不需要”。具体到行为层面,Claude 才能模拟。
坑二:在 CLAUDE.md 里堆了太多规则,反而降低了遵守率
这个坑更隐蔽。我一度把 CLAUDE.md 写到 300 行,各种规定密密麻麻。后来发现 Claude Code 对超长的 system prompt 会出现”注意力稀释”——重要的规则和不重要的规则混在一起,它没办法很好地权衡优先级。
怎么发现的:我在 CLAUDE.md 里明确写了”密码存储只使用 bcrypt”,但有一次它给我用了 crypto.createHash('sha256') 做密码哈希。我把 CLAUDE.md 精简到 80 行以内,把最关键的安全规则用 **加粗** 标注后,这个问题就消失了。
经验总结:CLAUDE.md 要当”核心价值观”写,不要当”操作手册”写。前者 3 条,后者 50 条,遵守率反而是前者更高。
总结
Claude Code 的能力上限,远比你日常用到的要高得多。大多数人用到的只是它的”接单模式”——给什么做什么。
角色扮演 Prompt 做的事情,是把它从接单模式切换到”专家顾问模式”:它不仅完成你的任务,还会主动帮你想到你没想到的风险。
三层结构记住了:身份层说清楚专精方向,经历层激活相关知识权重,行为约束层让它主动暴露问题而不是替你掩盖。
AI 是思维的放大器,不是思维的替代品。你设定的角色有多专业,它给你的答案就有多专业。
最后问你一个问题
你现在用 Claude Code 时,CLAUDE.md 里有没有角色设定?如果有的话,你是怎么写”行为约束层”的——是列规则清单,还是模拟专家的决策逻辑?
这两种写法在我这里效果差距挺大的,想听听你的实际体验。
本文转载自微信公众号,如有侵权请联系删除。
- 标题: Claude Code 的角色扮演 Prompt:同一个问题,问法不同,代码质量能差3个档
- 作者: lxiol
- 创建于 : 2026-04-19 22:03:29
- 更新于 : 2026-05-12 16:47:34
- 链接: https://blog.lxiol.cn/2026/04/19/Claude-Code-的角色扮演-Prompt同一个问题问法不同代码质量能差3个档/
- 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。