想象你是一位舞台剧导演。演员已经站在台上,但他不知道“自己是谁”——你递给他一张人物小传,上面写着这个角色的姓名、年龄、职业、过往、执念;你又在耳边交代几句“这人外冷内热,说话带刺但心软”,帮他拿捏性格;你示范一句台词,让他学会整部戏的腔调;你提醒他记住前几幕的伏笔,别把剧情演丢了;最后让场务把布景灯光调好,几个角色站上各自的点位——大幕拉开,好戏开场。 这台戏,就是 AI 角色扮演。你在 Character.AI 这类产品里写的每一段 Prompt,本质上都是给大语言模型这位“全能但暂无灵魂”的演员递人物小传、讲角色性格、定说话腔调、存剧情记忆。本文要拆解这套“导演工作流”:角色定义、性格设定、对话风格、记忆管理、多角色交互、场景沉浸、迭代调优。学会这套方法,你就能让 AI 扮演任何角色,帮你写故事、练口语、做游戏 NPC,甚至成为产品的虚拟代言人。

岗位关联

掌握角色扮演 Prompt 设计,是 Prompt 工程师的核心内功:让 AI 从“万能聊天机器人”变成“有灵魂的虚拟角色”,直接决定聊天陪伴、游戏 NPC、虚拟 IP 三类产品的体验上限。

目录
  1. 可视化演示
  2. 角色定义
  3. 性格设定
  4. 对话风格
  5. 记忆管理
  6. 多角色交互
  7. 场景沉浸
  8. 迭代调优
  9. AI 应用场景
  10. Python 演示
  11. 常见误区
  12. 面试题

可视化演示

展示Character.AI角色定义与性格五维属性、对话风格参数控制(正式度/语气/详细度)及记忆管理上下文窗口滑动机制,切换模式理解角色扮演Prompt设计核心。

本节配有交互动效(进入视口后自动加载,约 3KB)。

角色定义与性格五维属性 角色定义Prompt包含身份背景、性格特征、说话风格三大核心要素,构建角色一致性 Big Five模型量化性格:开放性、尽责性、外向性、宜人性、神经质,每维0-1连续值 Character = {identity, personality(OCEAN), style} | consistency = key 角色扮演Prompt核心是定义清晰的角色身份和性格特征

角色定义

导演开排第一件事,不是走位,而是把人物小传塞给演员。小传上写着:这人叫什么、几岁、干什么、从前经历过什么、心里憋着什么没说出口的话。演员读上十分钟,再开口就有了底气。AI 的“人物小传”就是角色定义 Prompt——它是角色扮演的地基,地基不稳,后面所有设定都会塌。

角色定义 Prompt 回答大语言模型一个根本问题:“你是谁?”大模型本身像一个天赋极佳但暂时失忆的演员,你给它一段“工作牌文字”,它就能立刻进入状态。这段文字通常放在系统提示(System Prompt)最前面,相当于把工作牌贴在舞台入口,让模型每次生成前都先确认身份。

完整的角色定义由四块拼成。身份锚点给明确可验证的信息——姓名、年龄、职业,写“一位咖啡店老板娘”比写“一个神秘的人”有力得多;背景故事解释行为动机,“在雨夜失去过重要的人”比“有点忧郁”更有叙事力量;目标给角色行动方向,比如“她想攒钱把店开成百年老店”;限制挡住越界行为,比如“绝不主动谈论自己的过去”。这四块合起来就是一张标准角色卡(RoleCard)。

有了人物小传,演员才敢开口。你递出去的这张卡越具体,AI 的第一句台词就越有灵魂——角色扮演的地基,就是让模型在每次生成前都先回答“我是谁”。

RoleCard=⟨身份,背景,目标,限制⟩\text{RoleCard} = \langle \text{身份}, \text{背景}, \text{目标}, \text{限制} \rangle
这张“配方表”告诉你:一个能立住的角色,必须同时回答“我是谁、我经历过什么、我要什么、我不能做什么”四个问题。
  1. RoleCard(角色卡)整套角色信息的容器,相当于导演手中那份人物小传的总称。
    RoleCard\text{RoleCard}
  2. 身份(Identity)姓名、年龄、职业等锚点信息,让 AI 一开口就知道“此刻我是谁”。
    身份=姓名+年龄+职业\text{身份} = \text{姓名} + \text{年龄} + \text{职业}
  3. 背景(Background)过往经历构成动机来源,决定角色为什么这样想、那样做。
    背景→动机\text{背景} \rightarrow \text{动机}
  4. 目标与限制(Goal \& Constraint)目标给角色向前走的牵引力,限制拦住越界行为,二者共同画定角色边界。
    目标∧限制⇒角色边界\text{目标} \wedge \text{限制} \Rightarrow \text{角色边界}

性格设定

人物小传是骨架,性格是血肉。导演拿到小传后会跟演员讲戏:“你这人固执,但讲义气;有人求你帮忙,你嘴上嫌弃,最后总会出手。”演员听完这句话,才知道遇到求助时该皱眉还是该伸手。性格设定,就是给 AI 讲这段“人物个性”。

性格设定本质上是一组行为偏置。大模型在预训练时读过成千上万个“固执讲义气”的角色,你只需几个标签,就能唤醒那类角色的行为分布,让模型的输出偏向某种反应模式。这比在小传里加十句外貌描写更管用——演员不需要知道角色的发色,需要知道的是“他会怎么做”。

性格设定有三个层次。性格标签要克制,3-5 个足够,堆太多模型反而“选择困难”,标签之间互相冲突会让人设混乱;行为模式给出具体反应剧本,“先嘴硬后心软”这类指令能稳定约束回合级行为,让每次应对都有连贯性;情感倾向决定情绪底色,乐观的角色在烂天气里会说“适合窝着看书”,悲观的角色只会叹气。三者合起来,角色的行为就有了可预测的内部逻辑。

演员靠什么进入状态?靠的是你讲的那几句性格戏。你写进 Prompt 的几个性格标签,就是帮助 AI 调整姿态的道具——人设两个字,一半是身份,一半是性格。

Behavior=f(Personality,Situation)\text{Behavior} = f(\text{Personality}, \text{Situation})
角色在某个情境下的行为,等于“性格参数”加上“当前处境”经过大模型这个函数映射后的输出。
  1. Behavior(行为)角色对外界事件的最终反应,具体表现为模型生成的下一句台词或动作描述。
    Behavior\text{Behavior}
  2. Personality(性格)写进角色卡的性格标签,是保持稳定的“角色参数”,如固执、讲义气、外冷内热。
    Personality={固执,讲义气,外冷内热}\text{Personality} = \{\text{固执}, \text{讲义气}, \text{外冷内热}\}
  3. Situation(情境)当前的事件或对话场景,是行为被触发的条件,同一个性格在不同情境下反应不同。
    Situation\text{Situation}
  4. f(映射函数)大语言模型本质上扮演这个函数,它把“性格 + 情境”翻译成具体行为输出。
    f(⋅) 由大模型参数实现f(\cdot) \text{ 由大模型参数实现}

对话风格

同一句“我等你”,老刑警说出来像命令,大学教授说出来像论文引言,初恋说出来像撒娇。导演只要示范一句“把你那把破伞收好,别滴得到处都是”,演员立刻懂了整部戏的语感。对话风格,就是你给 AI 的那句“示范台词”。

风格指令不会改变模型的知识储备,它改变的是输出的概率倾向——让模型更频繁地选中温柔短句,而不是书面长句。你可以把语言风格理解为一句句话在“词库地图”上的落点区域:风格设定就是在告诉模型“往这片区域走,别去那边”。

对话风格有三个旋钮可调。语气口吻管整体氛围,温柔、冷冽、俏皮,定下角色说话的“温度”;用词偏好管辨识度,爱用俚语还是书面语、有没有口头禅,一两句指定就能让角色有“人味”;句式特征管节奏,短句连发像刀锋,长句绵延像雾气。高手还会写“负例约束”——明确写出“禁止说'作为一个人工智能'”,能有效减少 AI 腔。

风格是角色最容易被观众记住的声纹。你把示范台词写明白,AI 说出的每一句话都会带着角色的“指纹”——不用看名字,只听语气就知道是谁在说话。

Utterance∼Pθ(⋅∣Context,Style)\text{Utterance} \sim P_{\theta}(\cdot \mid \text{Context}, \text{Style})
角色说出的台词,是从“上下文 + 风格”条件下的概率分布中抽样得到的随机结果,所以同一角色每次回应都不会一模一样。
  1. Utterance(台词)角色最终说出口的具体话语,是风格最直接的载体。
    Utterance\text{Utterance}
  2. Context(上下文)场景、历史对话、用户输入等信息共同构成生成条件,是台词的内容来源。
    Context=场景+历史+用户输入\text{Context} = \text{场景} + \text{历史} + \text{用户输入}
  3. Style(风格)语气、用词、句式三件套,把模型的采样区域拉向特定语感区间。
    Style=语气+用词+句式\text{Style} = \text{语气} + \text{用词} + \text{句式}
  4. 概率采样台词不是唯一确定的答案,而是从分布中抽取,因此同一角色每次回复会略有变化,这是对话自然的来源。
    ∼Pθ(⋅∣⋅)\sim P_{\theta}(\cdot \mid \cdot)

记忆管理

好演员记得前几幕埋下的伏笔。第三幕再提到那把伞,观众立刻起鸡皮疙瘩。AI 没有天生的记忆,它只记得“被写进上下文窗口里的那几段话”。上下文窗口是舞台的物理边界,窗口之外的对话,模型一眨眼就忘得干干净净。

角色扮演的连续性,全靠记忆管理硬撑。所谓记忆管理,就是有策略地决定“哪些信息留在窗口内、哪些信息压缩后留下摘要、哪些信息直接丢弃”。Character.AI 这类产品之所以能陪你聊几百轮不串戏,靠的不是模型记性好,而是工程上把记忆安排得井井有条。

三类记忆手段缺一不可。核心记忆最稳固——身份、性格、风格写进系统提示最前部,永远不会滑出窗口;短期记忆是当前窗口内的对话现场,直接决定模型对最近话题的感知;长期记忆靠摘要压缩实现——早期对话即将滑出窗口时,抽取关键事实写成几句话再放回来。工业界还常用时间衰减权重:越久远的记忆权重越小,让最近的剧情更有存在感,避免旧事过度淹没新话题。

记忆是角色连续性的生命线。没有记忆的 AI 像每一场都失忆的演员,每幕戏都从“你好,初次见面”开始,观众很快就出戏了。

Recall(t)=Core⊕∑τe−λ(t−τ)⋅Event(τ)\displaystyle \text{Recall}(t) = \text{Core} \oplus \sum_{\tau} e^{-\lambda (t - \tau)} \cdot \text{Event}(\tau)
角色在 t 时刻能想起来的内容,等于永不丢失的核心记忆,加上历史上每个事件按时间衰减后加权汇总的“印象”。
  1. Recall(t)(记忆回召)角色在第 t 轮对话时能够调用出来的信息总量,决定它此刻“还记得什么”。
    Recall(t)\text{Recall}(t)
  2. Core(核心记忆)身份、性格、风格等固定设定,处于上下文最前部,优先级最高、永不滑窗。
    Core=角色卡固定信息\text{Core} = \text{角色卡固定信息}
  3. Event(τ)(历史事件)发生在 τ 时刻的具体对话或剧情事件,是记忆的原材料。
    Event(τ)\text{Event}(\tau)
  4. 衰减系数$e^{-\lambda (t-\tau)}$ 让越久远的事件权重越小,模拟人脑“近事清晰、旧事模糊”的特性。
    e−λ(t−τ)e^{-\lambda (t-\tau)}
  5. ⊕ 与 Σ(拼接与汇总)核心记忆与加权后的事件记忆拼接成完整上下文,共同输入模型。
    Core⊕∑τwτ⋅Event(τ)\text{Core} \oplus \sum_{\tau} w_{\tau} \cdot \text{Event}(\tau)

多角色交互

群戏最难导。舞台上三个角色,谁先开口、谁在踱步、谁在角落里翻白眼,都得安排明白,否则观众分不清谁是谁。AI 角色扮演也一样,当你想让多个角色同台对话时,核心挑战是“别让角色串戏”。

多角色交互的技术核心是“标记”。大模型靠文本标记来区分说话人:你给每个角色的台词加上名字前缀,再规定旁白和动作的格式,模型就能在多个角色之间来回切换人格。这相当于给每个演员发一块写着名字的胸牌,谁开口先亮牌。

三个设计要点最常用。角色名前缀锁定发言权,格式写成“林岚:”和“沈默:”,模型读到不同前缀就切换对应人格;动作旁白独立标记,用星号或方括号包住,比如“(推开门)”,让舞台指示和台词分开层次;群像调度规定轮流次序,比如“店长先开口招呼客人,其他人再逐人回应”,避免冷场或抢话。多角色的关键,是让每个角色的角色卡独立存在,且彼此可见——角色能“听到”对方说的话。

好的群戏像围炉夜话,每个声部都清晰可辨。你把名字标记、旁白格式和发言次序立好,AI 就把舞台指挥权交给角色们自己——你只需坐在台下看戏。

Linet∼PSpeakeri(⋅∣Contextt,Rolei)\text{Line}_{t} \sim P_{\text{Speaker}^{i}}(\cdot \mid \text{Context}_{t}, \text{Role}_{i})
第 t 回合的台词,由当前发言角色 i 的人设,结合全局上下文共同决定,不同角色就是不同的条件概率分布。
  1. Line_t(当前回合台词)多角色对话中第 t 回合实际输出的一行文本,包含说话人标记和内容。
    Linet\text{Line}_{t}
  2. Speaker^i(说话人标记)“林岚:”这样的名字前缀,明确当前由哪个角色发声,防止串戏。
    Speakeri,  i=角色编号\text{Speaker}^{i}, \; i = \text{角色编号}
  3. Role_i(角色人设)每个角色独立的角色卡参数,决定该角色说话的内容倾向与风格。
    Rolei\text{Role}_{i}
  4. Context_t(全局上下文)场景描述、旁白、其他角色最近的台词,共同构成这一回合的舞台信息。
    Contextt\text{Context}_{t}

场景沉浸

舞台布景一亮,观众就入戏了。雨声、咖啡香、暖黄的灯光——不着一句台词,情绪已经到位。场景描写是角色扮演的场域魔法,它不直接推动情节,却给一切对话染上底色。

场景设定不仅给模型信息,更给输出定调。一段“深夜的雨街”描写,会牵引模型生成更安静、更潮湿质感的句子;一段“熙攘的婚礼现场”则让台词更轻快喧闹。场景本质上是一种全局风格偏置,影响角色每一句台词的情绪浓度。

沉浸感设计分三层。场景构建要调动五感——视觉、听觉、嗅觉、触觉、味觉,一句“雨点敲在铁皮棚顶,空气里全是潮湿的咖啡香”立刻把用户拉进现场;情节推进要给出明确目标,“这场戏让客人说出心事”比“随便聊聊”有效十倍,目标给对话以方向;情感渲染控制情绪强度,让角色从“淡淡不安”到“几近哽咽”有梯度推进,别第一幕就嚎啕大哭。三者叠加,用户才会忘了自己在跟 AI 聊天。

人、景、情齐了,大幕一拉即是好戏。你写在 Prompt 里的那段场景描写,就是观众入场时听到的第一记钟声——戏还没开演,人已经坐稳了。

Immersion=Setting+Goal+Emotion\text{Immersion} = \text{Setting} + \text{Goal} + \text{Emotion}
沉浸感不是单一技巧,而是场景设定、情节目标、情感渲染三路信号的叠加效果,缺一路都显得“平面”。
  1. Immersion(沉浸感)用户“入戏”程度的主观体验,是场景设计要优化的目标函数。
    Immersion\text{Immersion}
  2. Setting(场景设定)时间、地点、天气、五感信息构成的舞台背景,为所有台词提供氛围底座。
    Setting=时间+地点+五感\text{Setting} = \text{时间} + \text{地点} + \text{五感}
  3. Goal(情节目标)本幕玩家或角色要做的事,为对话提供推进方向,避免漫无边际。
    Goal\text{Goal}
  4. Emotion(情感渲染)角色当前的情绪强度与变化轨迹,是控制剧情温度的旋钮。
    Emotion\text{Emotion}

迭代调优

再好的戏也是排出来的。导演看首演录像,记下哪里笑场、哪里节奏拖沓,第二天改剧本重排。角色扮演 Prompt 的优化是同一件事:没有一次写好的 Prompt,只有不断打磨的 Prompt。

Prompt 工程天然是一个迭代循环:写初版 → 跑几轮对话 → 观察症状 → 修改角色卡 → 再测。Character.AI 的资深玩家和 Prompt 工程师都有一个共同习惯:把每一次“演砸了”的记录当成改进依据,而不是重新推翻重来。

优化有三板斧。病症反推修改点:人设崩了就加限制约束,风格跑了就补负例和示范台词,记忆丢了就压缩摘要给更多空间;A/B 测试:同一处设定写两个版本,在相同情境下各跑一遍,对比哪个输出更贴人设;效果评估看三个维度——一致性(角色行为前后是否矛盾)、风格贴合度(台词腔调是否统一)、记忆保持率(关键伏笔是否被回召),三维加权得到综合分。

好角色是迭代出来的。你每次记录下的“人设崩了”“风格跑了”,就是导演笔记本上的修改批注——改一版,演一版,AI 就会一版比一版有戏。

Score=w1⋅Coherence+w2⋅StyleFit+w3⋅MemoryRate\text{Score} = w_1 \cdot \text{Coherence} + w_2 \cdot \text{StyleFit} + w_3 \cdot \text{MemoryRate}
综合评价等于“一致性、风格贴合、记忆保持”三个指标的加权求和,权重按产品需求调节,比如陪伴产品更看重记忆,游戏更看重风格。
  1. Score(综合评分)衡量角色扮演 Prompt 质量的量化目标,用于横向对比不同版本。
    Score\text{Score}
  2. Coherence(一致性)角色行为与设定是否自洽,有没有出现前后矛盾、性格漂移。
    Coherence\text{Coherence}
  3. StyleFit(风格贴合度)输出台词与目标风格的吻合程度,评估“像不像这个角色说的话”。
    StyleFit\text{StyleFit}
  4. MemoryRate(记忆保持率)关键历史信息被正确回召的比例,衡量记忆管理是否有效。
    MemoryRate\text{MemoryRate}
  5. 权重 w按产品目标调节三项的相对重要性,权重总和通常归一化为 1。
    w1+w2+w3=1w_1 + w_2 + w_3 = 1

AI 应用场景

游戏 NPC 对话设计

阶段:内容生成

解决的问题:传统游戏 NPC 的台词是写死的脚本,玩家一追问就露馅,千人一面没有灵魂。用角色扮演 Prompt,每个 NPC 都有独立的身份、性格、风格和记忆,对话可以无限变化且保持人设。

具体案例:某开放世界游戏里,酒馆老板“老 R”昨天被玩家赊过账。今天玩家再进酒馆,NPC 通过记忆管理还记得这件事,冷着脸说“先把昨天的账结了再点单”——玩家的世界感瞬间就立住了。

虚拟陪伴与情感倾诉应用

阶段:产品设计

解决的问题:陪伴类产品最怕“机械感”,用户三句话就察觉对面是个程序。角色扮演 Prompt 中的性格设定与情感渲染,让 AI 具备稳定的情绪底色;记忆管理让用户感觉“它真的记得我”。

具体案例:某情绪陪伴应用给 AI 设定“温柔但不盲目共情”的性格标签,用户隔了十天才回来,AI 还记得她上周提过的那只生病的猫,自然地追问一句“猫咪好点了吗”——用户留存率因此明显提升。

品牌虚拟代言人运营

阶段:营销运营

解决的问题:品牌 IP 需要人格化的表达方式,官方账号的回复往往冷冰冰、像公告。用角色扮演 Prompt 给虚拟店长设定俏皮语气与固定口头禅,让粉丝愿意主动互动。

具体案例:某茶饮品牌让虚拟店长在粉丝群“营业”,它有自己的人物小传(在店里干了五年、最爱新品)、专属口癖(“整一杯不啦?”),还会调用记忆对老粉说“你上次说减肥,这次给你换了零卡糖”。

Python 演示

python55 行
class RoleCard:    def __init__(self, name, age, job, traits, style):        self.name = name        self.age = age        self.job = job        self.traits = traits        self.style = style        self.history = []        self.keep_size = 5     def build_prompt(self, scene, user_msg):        identity = "你是{0},{1}岁,职业是{2}。".format(self.name, self.age, self.job)        personality = "性格:" + "、".join(self.traits) + "。"        style_guide = "说话风格:" + self.style + ",永远不要打破人设。"        if self.history:            memory_block = "共同记忆:" + ";".join(self.history[-self.keep_size:])        else:            memory_block = "共同记忆:你们今天第一次见面。"        return "\n".join([            identity, personality, style_guide,            "场景:" + scene, memory_block, "玩家:" + user_msg        ])     def speak(self, pool, index):        return pool[index % len(pool)]  def run_demo():    lanyun = RoleCard(        "林岚", 28, "咖啡店老板娘",        ["温柔", "敏锐", "外冷内热"],        "轻声细语,爱用短句"    )    reply_pool = [        "这杯拿铁,为你调的。",        "下雨了,进店坐坐吧。",        "你心里有事,我看得出来。"    ]    scenes = [        ("深夜的街角咖啡店", "老板,来杯咖啡"),        ("深夜的街角咖啡店", "你怎么知道我不开心?"),        ("深夜的街角咖啡店", "你记得我上次说过的事吗?")    ]    for i, (scene, msg) in enumerate(scenes):        print("--- 第{0}轮 ---".format(i + 1))        print(lanyun.build_prompt(scene, msg))        reply = lanyun.speak(reply_pool, i)        print("林岚:" + reply)        lanyun.history.append("玩家说:" + msg)        lanyun.history.append("林岚说:" + reply)        print()  if __name__ == "__main__":    run_demo()
目的:实现一个最小可用的“角色卡组装器”,把身份、性格、风格、记忆按顺序拼成完整 Prompt,并模拟三轮带记忆的角色扮演对话。
  1. self.history = []用列表保存历史对话,模拟角色的“记忆仓库”。
  2. def build_prompt(self, scene, user_msg):组装角色卡的统一入口,每次对话前先生成完整 Prompt。
  3. identity = "你是{0},{1}岁,职业是{2}。".format(...)身份锚点放在 Prompt 最前部,让模型先确认“我是谁”。
  4. personality = "性格:" + "、".join(self.traits) + "。"性格标签用顿号连接,3-5 个标签即可控制行为基调。
  5. style_guide = "说话风格:" + self.style + ",永远不要打破人设。"风格指令与“防崩约束”一次写好。
  6. memory_block = ... self.history[-self.keep_size:]只取最近 5 条记忆,模拟上下文窗口边界,防止无限膨胀。
  7. lanyun.history.append(...)每轮对话结束后把新内容写进“记忆”,下一轮才能 call back 前面的情节。

常见误区

误区总觉得角色卡写得不够多,于是拼命堆细节:发色、瞳色、服饰、星座、血型、喜欢的颜色……写了满满一屏,觉得这样 AI 才能演得立体。

正解这就像导演给演员塞了三十页户籍档案,演员反而抓不住重点。大模型的注意力有限,特征越密集,核心性格越容易被稀释。角色卡应该“少而精”:3-5 个性格标签、一段关键背景、一个明确目标、几条硬性限制——每句话都要服务于“这个角色会怎么说话、怎么做决定”。

为何常见:因为新手把“描写充分”误当成“细节堆砌”,忽略了 Prompt 是约束条件而非小说正文。

误区以为角色扮演只需要在开头写“你是林岚,咖啡店老板娘”,AI 之后的所有回复就都会自动带上老板娘的人设。

正解身份只是角色卡的骨架,没有性格、风格、记忆的支撑,这个角色很快就会“飘”成通用助手。就像只告诉演员“你演个警察”,却不告诉他性格刚正还是圆滑、说话冷硬还是温柔,他只能演成套路化的标签。角色定义只是第一步,性格决定反应、风格决定腔调、记忆决定连续性,四者缺一不可。

为何常见:因为“你是XX”是角色扮演最直观的写法,视觉效果上似乎立刻生效,让人误以为已经完成了全部设定。

误区想让 AI 同时扮演 A 和 B,就在开头写“你是 A,也是 B”,结果 AI 经常混淆两个角色,说话时人格来回跳。

正解多角色交互的关键是“各自独立、彼此可见”。A 和 B 需要各自的角色卡,回合输出时用“林岚:”和“沈默:”这样的名字前缀锁定发言权,动作旁白用星号或方括号单独标记。就像群戏要分别给每个演员讲戏,而不是把两个人喊到台上说“你们都是主角”。

为何常见:因为单角色经验让人以为“角色数量”只是名单问题,没意识到模型需要靠结构标记才能区分说话人。

误区为了让 AI“记住”,把过去几十轮对话全部原样拼到新 Prompt 里,结果不仅经常超出上下文窗口上限,AI 还抓不住重点。

正解记忆管理的本质是“取舍”。核心记忆(身份、性格)永远放在最前面;短期记忆保留最近几轮;更早的内容要压缩成摘要,只留关键事实和伏笔。就像记日记要写要点而不是逐字誊写全部对话。窗口是有限的,摘要越精炼,模型的处理空间越大。

为何常见:因为“记住一切”听起来最保险,没意识到上下文窗口的物理上限和注意力稀释问题。

面试题

Q1. 在角色扮演中给 AI 写“人物小传”,核心作用是?

单选题 · easy

  • A.为角色建立稳定的人设锚点← 正确答案
  • B.限制每句输出的字数上限
  • C.提高回复内容的随机程度
  • D.自动压缩对话的上下文

答案:A。人物小传即角色定义,核心是回答“我是谁”,为后续行为提供稳定的身份锚点。限制字数、提高随机性、压缩上下文都不是角色定义的功能,它们属于风格控制或工程优化手段。

Q2. 以下哪个写法最适合定义角色“性格”?

单选题 · easy

  • A.请控制在五百字以内
  • B.固执但讲义气、外冷内热← 正确答案
  • C.请回复JSON格式数据
  • D.将温度参数设为最低

答案:B。性格设定要用 3-5 个标签直接描述行为倾向,像“固执但讲义气”这样的标签能约束模型的行为分布。控制字数、要求 JSON、调温度参数都不是性格设定,它们分别属于输出格式和采样控制。

Q3. 上下文窗口塞满时,最先丢失的信息通常是?

单选题 · easy

  • A.系统提示中的角色卡
  • B.用户最近一条消息
  • C.最早几轮的对话细节← 正确答案
  • D.模型训练好的权重

答案:C。上下文窗口采用“先进先出”的截断策略,最早的历史细节最容易被挤出窗口。系统提示中的角色卡通常有较高优先级,最近的用户消息刚进来,模型权重则根本不占上下文空间。

Q4. 想让角色说话带港腔、爱用短句,应写在哪里?

单选题 · mid

  • A.写在身份锚点区域
  • B.写在对话风格区域← 正确答案
  • C.写在记忆管理区域
  • D.写在场景构建区域

答案:B。语气口吻、用词偏好、句式特征都属于对话风格的三个旋钮。身份锚点管“我是谁”,记忆管理管“记得什么”,场景构建管“身处何地”,都不直接约束说话腔调。

Q5. 多角色交互中,避免“串角色”的有效措施有?

多选题 · mid

  • A.每个角色贴上独立姓名标签← 正确答案
  • B.用星号或括号标注动作← 正确答案
  • C.开场写明角色的站位次序← 正确答案
  • D.让回复完全自由发挥

答案:ABC。角色名前缀锁定发言权、星号括号标记动作旁白、开场设定轮流次序,三者都是多角色调度的核心手段。“完全自由发挥”恰恰是导致人格混乱的原因。

Q6. 记忆管理的正确做法是?

单选题 · mid

  • A.把所有历史原文塞进提示
  • B.每轮对话前清空所有记忆
  • C.让AI忘掉一切只回应当前
  • D.抽取关键事实做成摘要回填← 正确答案

答案:D。记忆管理核心是“取舍”——核心记忆放最前、短期记忆留最近、早期对话压缩成摘要再回填。全量塞入会超窗口,清空记忆则会失去连续性,正确做法是抽取关键事实做摘要。

Q7. 角色扮演中“人设崩塌”的最常见原因是?

单选题 · mid

  • A.输入画布尺寸设置太大
  • B.用户连续发送消息次数太多
  • C.角色卡太短且缺少约束← 正确答案
  • D.采样温度参数设置过高

答案:C。人设崩塌多数因为角色卡没有写清楚性格、风格和限制,模型在长对话中失去了行为参照。画布尺寸、消息频率不是直接原因,温度参数影响的是随机性而非一致性。

Q8. 以下哪些做法能提升角色扮演的沉浸感?

多选题 · hard

  • A.开场加入五感场景描写← 正确答案
  • B.给角色明确目标与限制← 正确答案
  • C.完全让AI自由随机编情节
  • D.把关键历史记忆放进上下文← 正确答案

答案:ABD。五感描写建立场景,明确目标给情节方向,关键记忆保持连续性,三者叠加提升沉浸感。完全让 AI 自由编情节会导致剧情失控,反而破坏入戏体验。

Q9. 迭代调优中发现“角色说话风格漂移”,最优先的修改是?

单选题 · hard

  • A.提高采样的随机性参数
  • B.删掉角色的背景故事设定
  • C.缩短开场场景描写的篇幅
  • D.在风格指令里加负例约束← 正确答案

答案:D。风格漂移时,最直接的手段是在风格指令中补充负例约束,比如“禁止书面腔、禁止说'作为AI'”。提高随机性会加剧漂移,删背景或缩场景与风格问题无关。

Q10. 工程化角色扮演的记忆管理,下列说法正确的是?

多选题 · extreme

  • A.长对话必须做摘要压缩← 正确答案
  • B.角色卡固定信息放提示最前← 正确答案
  • C.记忆权重应随时间衰减← 正确答案
  • D.多角色对话无需区分说话人

答案:ABC。长对话摘要压缩防止窗口溢出,角色卡固定信息放最前保证优先级,时间衰减让近期记忆更有存在感,三者是工程标配。多角色对话恰恰必须严格区分说话人,否则必然串戏。