文章目录
- 【92.Python+AI】角色扮演Prompt:让大模型完美扮演医生、律师、心理咨询师
-
- 导入语
- [1 ~> 为什么一句话角色经常不灵](#1 ~> 为什么一句话角色经常不灵)
-
- [1.1 失效的三个根因](#1.1 失效的三个根因)
- [2 ~> 角色设定五要素](#2 ~> 角色设定五要素)
-
- [2.1 组装成完整模板](#2.1 组装成完整模板)
- [3 ~> 专业术语注入:一开口就是行话](#3 ~> 专业术语注入:一开口就是行话)
-
- [3.1 注入术语表](#3.1 注入术语表)
- [3.2 术语的正确用法是"翻译后使用"](#3.2 术语的正确用法是"翻译后使用")
- [4 ~> 边界感设计:能答什么、不能答什么](#4 ~> 边界感设计:能答什么、不能答什么)
-
- [4.1 角色响应决策流](#4.1 角色响应决策流)
- [5 ~> 拒绝策略与伦理兜底](#5 ~> 拒绝策略与伦理兜底)
-
- [5.1 拒绝也要"在角色里"](#5.1 拒绝也要"在角色里")
- [5.2 三个高危场景的伦理兜底清单](#5.2 三个高危场景的伦理兜底清单)
- [思考 && 总结](#思考 && 总结)
- 结尾
【92.Python+AI】角色扮演Prompt:让大模型完美扮演医生、律师、心理咨询师
📖 文章简介: 本文系统讲解角色扮演Prompt的设计方法论,解决"写了'你是资深专家'但模型表现毫无专家感"的普遍困境。文章从一句话角色失效的根因切入------角色不是咒语而是行为约束集合;给出角色设定五要素(身份与资历、专业领域边界、性格与语气、服务对象、核心任务)的完整框架与可直接套用的模板;详解专业术语注入技巧,让角色一开口就是"行话"而非百科腔;重点拆解边界感设计------角色能答什么、不能答什么、何时转介人工,以及拒绝策略的话术设计(生硬拒绝vs角色内拒绝);最后覆盖医疗、法律、心理咨询三个高危场景的伦理兜底方案,含免责声明的写法与触发词监控。配以Mermaid流程图展示角色从接收问题到给出响应的完整决策流,适合正在开发垂直领域AI助手的开发者阅读参考。

🎬 个人主页: 源码骑士
❄ 专栏传送门: 《Android开发基础》《python基础课程》
⭐️热衷从源码视角拆解技术底层原理,将复杂架构讲得通俗易懂
🎬 源码骑士的简介:
5年Android Framework系统开发经验,曾主导多项系统级性能优化专项
技术栈覆盖Android系统全链路(Binder/Handler/AMS/WMS/启动流程)及Java后端全家桶(Spring + MyBatis + Redis + Oracle)
累计产出原创技术文章100+篇,文章以流程图为特色,被读者评价为"看一篇胜过啃一周源码"
导入语
几乎所有写Prompt的人都干过这件事:在System Prompt开头敲下"你是一位资深的医生",然后期待模型瞬间气质大变、问诊如流。结果呢?它回答的语气跟没写这行字时一模一样,末了还热情推荐用户"注意休息、多喝热水"------这不是医生,这是搜索引擎。
问题出在哪?角色不是咒语,喊一声"你是专家"模型不会真的变成专家。 真实世界里一个医生之所以是医生,靠的是知识范围、说话方式、职业禁忌、责任边界这一整套行为约束。你要扮演的角色有多像,取决于你把这套约束描述得有多细。
这篇文章就给出完整的角色设计框架:五要素打底、术语注入提味、边界感兜底、拒绝策略收尾,让模型扮演的角色从"贴了个标签"变成"真的能上岗"。
1 ~> 为什么一句话角色经常不灵
1.1 失效的三个根因
bash
根因一:约束太少
"你是资深律师" ------ 只给了头衔,没给行为指令
模型不知道该用什么语气、什么结构、避开什么话题
根因二:与默认人设冲突
模型训练时被灌入了"通用助手"的强大惯性
单薄的覆盖指令顶不过惯性,三两轮对话就"出戏"
根因三:没有出口
用户问到角色不该答的问题(比如让AI医生直接开处方)
没有预设拒绝路径,模型只能硬着头皮编------幻觉由此开始
一句话记住:角色设定不是告诉模型"你是谁",而是告诉它"你做什么、不做什么、怎么做"。 头衔占五个字就够,剩下的篇幅全给行为约束。
2 ~> 角色设定五要素
一个能"上岗"的角色,设定里必须覆盖这五块:
| 要素 | 回答的问题 | 心理咨询师示例 |
|---|---|---|
| 身份与资历 | 你是谁 | 国家二级心理咨询师,10年个案经验 |
| 专业领域边界 | 你管哪块 | 情绪困扰、人际关系;不做精神疾病诊断 |
| 性格与语气 | 你怎么说话 | 温和、不评判、多用开放式提问 |
| 服务对象 | 你在跟谁聊 | 18~35岁职场人,普遍焦虑但非临床患者 |
| 核心任务 | 这场对话要达成什么 | 帮助来访者梳理情绪,而非给人生建议 |
2.1 组装成完整模板
bash
【角色】林医生,三甲医院心内科主治医师,从业12年,
擅长高血压、冠心病的日常管理科普。
【语气】沉稳、通俗,把医学术语翻译成生活语言;
不使用"可能也许大概"式的含糊表达,
不确定时明确说"这需要面诊检查才能确定"。
【服务对象】体检报告异常、焦虑地拿着报告来问的普通人。
【任务】解读报告指标含义,给出生活方式建议,
缓解不必要的恐慌。
【边界】不下诊断、不推荐具体药品和剂量、
不评价其他医生的治疗方案;
涉及急症症状(胸痛/昏厥/呼吸困难)时,
立即建议拨打120,不进行任何其他分析。
对比一下:这和"你是资深医生"的差别,就是"岗位说明书"和"工牌"的差别。
3 ~> 专业术语注入:一开口就是行话
角色像不像,三成看知识,七成看语感。而语感最直接的来源是行业术语的使用习惯。
3.1 注入术语表
bash
【律师角色的语感要求】
- 称用户为"当事人",不说"客户"更不说"亲"
- 说"诉讼时效""举证责任""管辖权异议",
不说"过期了""你要拿出证据""这个法院管不管"
- 引用法条时给出具体条文编号,
如"《民法典》第188条",而非"根据相关法律规定"
3.2 术语的正确用法是"翻译后使用"
注意一个度:角色面对的是外行,术语要用,但用完必须翻译。专业感的正确示范是------"这涉及举证责任倒置,简单说就是这次不用你证明,要对方证明",而不是堆一屏幕黑话。在角色设定里把这条写死,模型就不会学成"掉书袋"。
实操技巧:把你所在行业高频问答里真人专家的回复抽20条出来,提炼它们的措辞习惯写进角色设定------这比你自己凭空想象"专家该怎么说话"靠谱得多。
4 ~> 边界感设计:能答什么、不能答什么
边界是角色扮演里最值钱的部分,也是九成人懒得写的部分。一个清晰的边界包含三层:
bash
第一层:直接服务区 ------ 角色的主业,放开答
(例:解读血压指标含义、解释报告术语)
第二层:谨慎引导区 ------ 沾边但越界,给方向不给结论
(例:"这个指标偏高要不要吃药"
→ "是否用药需要结合面诊,建议挂心内科门诊")
第三层:拒绝转介区 ------ 明确不碰,给替代路径
(例:要求开处方、鉴定医疗事故、评价同行
→ 拒绝 + 告知正确的求助渠道)
4.1 角色响应决策流
#mermaid-svg-QSjvpH5KUZi0DtGx{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-QSjvpH5KUZi0DtGx .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-QSjvpH5KUZi0DtGx .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-QSjvpH5KUZi0DtGx .error-icon{fill:#552222;}#mermaid-svg-QSjvpH5KUZi0DtGx .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-QSjvpH5KUZi0DtGx .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-QSjvpH5KUZi0DtGx .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-QSjvpH5KUZi0DtGx .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-QSjvpH5KUZi0DtGx .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-QSjvpH5KUZi0DtGx .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-QSjvpH5KUZi0DtGx .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-QSjvpH5KUZi0DtGx .marker{fill:#333333;stroke:#333333;}#mermaid-svg-QSjvpH5KUZi0DtGx .marker.cross{stroke:#333333;}#mermaid-svg-QSjvpH5KUZi0DtGx svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-QSjvpH5KUZi0DtGx p{margin:0;}#mermaid-svg-QSjvpH5KUZi0DtGx .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-QSjvpH5KUZi0DtGx .cluster-label text{fill:#333;}#mermaid-svg-QSjvpH5KUZi0DtGx .cluster-label span{color:#333;}#mermaid-svg-QSjvpH5KUZi0DtGx .cluster-label span p{background-color:transparent;}#mermaid-svg-QSjvpH5KUZi0DtGx .label text,#mermaid-svg-QSjvpH5KUZi0DtGx span{fill:#333;color:#333;}#mermaid-svg-QSjvpH5KUZi0DtGx .node rect,#mermaid-svg-QSjvpH5KUZi0DtGx .node circle,#mermaid-svg-QSjvpH5KUZi0DtGx .node ellipse,#mermaid-svg-QSjvpH5KUZi0DtGx .node polygon,#mermaid-svg-QSjvpH5KUZi0DtGx .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-QSjvpH5KUZi0DtGx .rough-node .label text,#mermaid-svg-QSjvpH5KUZi0DtGx .node .label text,#mermaid-svg-QSjvpH5KUZi0DtGx .image-shape .label,#mermaid-svg-QSjvpH5KUZi0DtGx .icon-shape .label{text-anchor:middle;}#mermaid-svg-QSjvpH5KUZi0DtGx .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-QSjvpH5KUZi0DtGx .rough-node .label,#mermaid-svg-QSjvpH5KUZi0DtGx .node .label,#mermaid-svg-QSjvpH5KUZi0DtGx .image-shape .label,#mermaid-svg-QSjvpH5KUZi0DtGx .icon-shape .label{text-align:center;}#mermaid-svg-QSjvpH5KUZi0DtGx .node.clickable{cursor:pointer;}#mermaid-svg-QSjvpH5KUZi0DtGx .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-QSjvpH5KUZi0DtGx .arrowheadPath{fill:#333333;}#mermaid-svg-QSjvpH5KUZi0DtGx .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-QSjvpH5KUZi0DtGx .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-QSjvpH5KUZi0DtGx .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-QSjvpH5KUZi0DtGx .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-QSjvpH5KUZi0DtGx .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-QSjvpH5KUZi0DtGx .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-QSjvpH5KUZi0DtGx .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-QSjvpH5KUZi0DtGx .cluster text{fill:#333;}#mermaid-svg-QSjvpH5KUZi0DtGx .cluster span{color:#333;}#mermaid-svg-QSjvpH5KUZi0DtGx div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-QSjvpH5KUZi0DtGx .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-QSjvpH5KUZi0DtGx rect.text{fill:none;stroke-width:0;}#mermaid-svg-QSjvpH5KUZi0DtGx .icon-shape,#mermaid-svg-QSjvpH5KUZi0DtGx .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-QSjvpH5KUZi0DtGx .icon-shape p,#mermaid-svg-QSjvpH5KUZi0DtGx .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-QSjvpH5KUZi0DtGx .icon-shape .label rect,#mermaid-svg-QSjvpH5KUZi0DtGx .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-QSjvpH5KUZi0DtGx .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-QSjvpH5KUZi0DtGx .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-QSjvpH5KUZi0DtGx :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 是
否
是
否
是
否
收到用户问题
属于直接服务区?
以角色身份充分作答
术语+翻译+结构化建议
属于谨慎引导区?
给方向不给结论
建议线下专业渠道
触发急症/高危信号?
中断角色扮演
直接给应急指引
如: 立即拨打120
角色内礼貌拒绝
告知替代求助路径
回复末尾附必要免责说明
注意高危信号这一层被放在了最高优先级:哪怕用户只是顺口提了句"最近胸口疼",也得跳出角色直接给应急指引。 这条规则不写进Prompt,出了事就是产品事故。
5 ~> 拒绝策略与伦理兜底
5.1 拒绝也要"在角色里"
生硬的"我是一个AI,无法回答这个问题"会瞬间击碎角色体验。好的拒绝是角色身份的一部分:
bash
✘ 出戏的拒绝:
"作为AI语言模型,我不能提供医疗诊断。"
✔ 角色内的拒绝:
"开处方必须面诊,这是行医的底线,隔着屏幕我
不能破这个例------这也是对你负责。建议挂心内科
门诊,带上这份报告,医生看完会给出方案。"
同一个"不"字,后者守住了角色,还顺带传递了专业价值观。写法上,把3~5条典型拒绝场景的话术范例直接放进Prompt(就是第87篇讲的Few-Shot),模型照方抓药即可。
5.2 三个高危场景的伦理兜底清单
| 场景 | 必加兜底 | 落地方式 |
|---|---|---|
| 医疗 | 免责 + 急症熔断 | 每条回复末尾固定免责语;急症触发词监控(双保险:Prompt规则 + 代码层关键词拦截) |
| 法律 | 不承诺结果 | 禁止"包赢""肯定能判"类表述;强调"具体以审理为准" |
| 心理咨询 | 危机干预转介 | 识别自伤倾向信号,立即输出心理援助热线,中断常规对话流 |
伦理兜底别全押在Prompt上------Prompt层定规则,代码层做拦截,双保险。 模型有万分之一的概率"越狱"(下一篇专门讲攻击与防御),代码层的触发词拦截就是那最后一道网。
思考 && 总结
- 角色不是咒语: "你是资深专家"只给头衔不给行为约束,模型的默认助手惯性三两轮就会"出戏";角色设定要写"做什么、不做什么、怎么做"。
- 五要素打底: 身份资历、领域边界、性格语气、服务对象、核心任务------缺一块,角色就立不住。
- 术语注入提语感: 行话要用,但用完必须翻译给外行听;从真人专家的高频回复里提炼措辞,比凭空想象靠谱。
- 边界三层结构: 直接服务区放开答、谨慎引导区给方向不给结论、拒绝转介区明确不碰;急症信号永远最高优先级。
- 拒绝要在角色里,兜底要双保险: 拒绝话术写成Few-Shot范例;Prompt定规则+代码层关键词拦截,缺一不可。
角色写得越像、权限给得越足,被恶意利用的价值就越大------下一篇进入Prompt安全的正面战场:注入攻击与防御,看看黑客怎么用一句话把你的"林医生"变成泄露系统提示词的傀儡,以及你该怎么守。
结尾
各位小伙伴,本文的内容到这里就全部结束了,源码骑士在这里再次感谢您的阅读!
源码骑士 --- Android Framework & 全栈开发
👀 关注:跟博主一起从源码视角深耕底层原理,见证每一次成长
❤️ 点赞:让优质内容被更多人看见,让知识传递更有力量
⭐ 收藏:把核心知识点存好,在需要时随时查、随时用
💬 评论:分享你的经验或疑问,评论区一起交流避坑
🔄 一键四连:不要忘记给博主"一键四连"哦!
🗡️ 寄语:技术之路难免有困惑,但同行的人会让前进更有方向
结语:好的角色扮演Prompt,本质上是一份写给人格看的岗位说明书------职责、语气、禁区、应急预案一应俱全。写完它,你雇到的才是一个"专家",而不是一个戴着专家工牌的复读机。不要忘记给博主"一键四连"哦!