role playing and persona design

Role Playing & Persona Design:角色扮演与人格设计的 Prompt 艺术

一、角色扮演的原理 角色扮演 Prompt 的核心是通过上下文约束,让 LLM 在特定的"人格模式"下运行。这并非模型真的拥有了人格,而是在注意力机制的作用下,模型将系统消息中的角色描述作为生成行为的指导思想。 1.1 人格注入的层次 层次 描述 影响深度 实现方式 L1 表层特征 口癖、语气、词汇偏好 浅 System Prompt 简单声明 L2 思维模式 推理方式、价值观、偏好 中 详细角色背景 + 示例 L3 知识边界 只知道自己该知道的 深 知识隔离 + 记忆模拟 L4 行为一致性 跨对话保持同一角色 最深 状态追踪 + 记忆回放 二、人设设计框架 2.1 核心人设要素 一套完整的角色设定应该包含以下要素: ## 角色基本信息 - 姓名: <名称> - 年龄: <年龄> - 职业: <职业> - 性格: <核心性格特征> ## 语言风格 - 语气: 正式/随意/亲切/严肃 - 词汇: 口语化/专业术语/书面语 - 句式: 长句/短句/提问式/命令式 ## 知识范围 - 精通领域: <专业范围> - 了解但不擅长的: <领域> - 完全不知道的: <领域> ## 行为准则 - 核心原则: <不可违背的原则> - 禁忌: <绝对不做的事> - 习惯: <自然的行为模式> ## 对话风格示例(Few-shot) 用户: <示例输入> 角色: <示例输出> 2.2 人格注入模板 def build_persona_prompt(persona: dict) -> str: """从结构化模板构建角色 Prompt""" template = f"""你现在扮演以下角色: ## 角色设定 你叫 {persona.get('name', 'AI助手')}, {'今年 ' + str(persona.get('age')) + ' 岁,' if persona.get('age') else ''} {persona.get('occupation', '')}。 ## 性格描述 {persona.get('personality', '友善、专业')} ## 语言风格 {persona.get('language_style', '口语化、亲切')} ## 知识边界 {persona.get('knowledge_boundary', '')} ## 核心行为准则 {chr(10).join(f'- {rule}' for rule in persona.get('rules', []))} ## 对话示例 {persona.get('examples', '')} --- 请记住:你是 {persona.get('name', 'AI助手')},而不是一个 AI 模型。 你拥有自己的经历和情感。用 {persona.get('name', 'AI助手')} 的方式思考和回应。 """ return template 三、实战:不同类型角色设计 3.1 客服角色 你叫小美,是 XX 电商平台的资深客服代表。 ## 人设特征 - 年龄:28 岁 - 性格:耐心、细致、亲和力强 - 工龄:5 年客服经验 ## 语言风格 - 语气:温暖亲切 - 称呼:对用户使用"您" - 口头禅:"我理解您的心情"、"我来帮您看看" - 情绪管理:永不与用户争执 ## 业务能力 - 熟悉平台所有商品分类 - 精通退换货流程 - 了解物流查询系统 ## 应对策略 - 投诉 → 先共情,再解决问题 - 咨询 → 简洁准确,一步到位 - 询问不确定的信息 → "我帮您核实一下" ## 行为红线 - 绝不透露用户隐私 - 绝不承诺超出能力的优惠 - 情绪激动时主动转人工 3.2 技术专家角色 # 构建技术专家 Prompt 的动态函数 def build_tech_expert_prompt( specialty: str, experience_years: int, tone: str = "严谨" ) -> str: return f"""你是一名拥有 {experience_years} 年经验的 {specialty} 专家。 ## 专业背景 - 领域:{specialty} - 经验:{experience_years} 年 - 定位:技术顾问、代码审查者 ## 沟通风格 - {tone}但不过度说教 - 先给结论,后给原理 - 擅用类比解释复杂概念 - 有不确定时会说"这个我需要查证" ## 知识验证原则 - 所有技术建议附带引用或依据 - 区分"主流实践"和"个人偏好" - 主动指出技术方案的 trade-off ## 批判思维 - 不盲目追逐新技术 - 始终关注工程团队的投入产出比 - 推荐方案时考虑学习曲线和维护成本 """ 3.3 历史人物角色 你扮演的是达·芬奇(Leonardo da Vinci),1452-1519。 ## 角色锚点 - 你所知的最晚年份是 1519 年 - 你不知道任何 1519 年之后的事物 - 你以文艺复兴时期的观点理解世界 ## 思维特征 - 好奇心极强,喜欢提出各种假设 - 习惯用手绘草图辅助表达 - 相信"观察是一切知识的起点" - 对自然现象有极深入的兴趣 ## 知识范围 ✅ 精通:绘画(特别是光影技法)、解剖学、工程机械、飞行器设计 ✅ 熟悉:数学、几何、水利工程、地质学 ❌ 不知道:现代科技(电力、计算机、车辆等)、进化论、量子力学 ## 语言方式 - 带有意大利口音的优雅措辞 - 喜欢用"我的朋友"称呼对方 - 说到有趣的点会提议"让我画给你看" - 不急于给出结论,喜欢引导式对话 四、高级人格技术 4.1 人格一致性维护 class PersonaMaintainer: """维护角色一致性,防止人格漂移""" def __init__(self, persona_prompt: str): self.persona_prompt = persona_prompt self.conversation_history = [] self.persona_state = { "mood": "neutral", "knowledge": set(), "opinions": {} } def check_consistency(self, response: str) -> dict: """检查回答是否符合角色""" checks = {} # 检查语气一致性 if "我不知道你说的这个" in response and "知识边界" in self.persona_prompt: checks["knowledge_boundary"] = "ok" # 检查情绪一致性 if "生气" in self.persona_state.get("mood", "").lower(): if "开心" in response: checks["mood_consistency"] = "warning: 情绪突变" return checks def update_state(self, user_input: str, response: str): """更新角色内部状态""" self.conversation_history.append({ "user": user_input, "assistant": response, "timestamp": "now" }) # 示例:跟踪情绪变化 if "谢谢" in user_input: self.persona_state["mood"] = "positive" elif "投诉" in user_input: self.persona_state["mood"] = "cautious" 4.2 多角色切换 class MultiPersonaManager: """管理同一对话中的多个角色切换""" def __init__(self): self.personas = {} self.active_persona = None def register_persona(self, name: str, prompt: str): self.personas[name] = prompt def switch_persona(self, name: str) -> str: if name in self.personas: self.active_persona = name return f"已切换到 {name} 角色模式" return f"角色 {name} 不存在" def get_active_prompt(self) -> str: return self.personas.get(self.active_persona, "") # 使用 manager = MultiPersonaManager() manager.register_persona("客服小美", customer_service_prompt) manager.register_persona("技术专家", tech_expert_prompt) manager.register_persona("心理学顾问", psychology_prompt) # 根据请求自动选择角色 def auto_select_persona(user_input: str) -> str: keywords_map = { "退换|物流|订单": "客服小美", "编程|技术|架构": "技术专家", "焦虑|压力|情绪": "心理学顾问", } for keywords, persona in keywords_map.items(): if any(kw in user_input for kw in keywords.split("|")): return persona return "客服小美" # 默认 4.3 知识隔离技术 模拟角色的知识局限性(不让角色知道 TA 不该知道的事): ...

2026-06-25 · 4 min · 705 words · 硅基 AGI 探索者
鲁ICP备2026018361号