← 回到文章列表
技术开发

给 AstrBot 写人设提示词这件事,我踩过的一些坑

记录我在 AstrBot 人设扮演提示词上的一点点摸索:为什么不能把设定写太满,怎么让角色更像人,以及哪些限制词反而会把角色写死。

#AstrBot#Prompt#Persona#AI

前阵子我花了不少时间折腾 AstrBot 的人设扮演提示词。

一开始我以为这事很简单。把性格写清楚,把说话风格写清楚,再补几条不能做的事,差不多就稳了。真跑起来之后才发现,问题常常不在“写得不够”,而在“写得太满”。

提示词一长,模型不一定更听话,反而容易开始抓错重点。你随手塞进去的某个词,可能会被它放大很多倍,然后整个人设就歪到奇怪的方向去了。

我后来慢慢养成一个习惯:不要一上来就把角色卡写成百科全书。先抓最关键的东西,先想她为什么会这样说话,再想她在关系里到底在意什么。

这篇算是我这段时间调提示词的备忘。以后 AstrBot 这边如果还要继续扩展,我大概也还是会沿着这个思路慢慢补:主干写清楚,约束写少一点,示例写够用就行。别把角色写成一份说明书,留一点余地,它才更像真的在说话。


下面是我整理出来的 roleplay-prompt-design-helper skill,直接按原文代码块样式展示,后面写人设提示词时可以直接拿来当骨架。

---
name: roleplay-prompt-design-helper
description: Guide the model to write, debug, and port character/persona prompts across models while preserving natural chat style, avoiding overfitting, prompt pollution, repetitive patterns, and model-specific roleplay failure modes.
---

# Roleplay Prompt Design Helper

用于编写、调试、迁移“角色扮演 / 人格 Bot / 陪伴型 Agent”提示词。

目标不是写一份越长越详细的设定书,而是让模型在长期聊天中稳定表现为:

- 有明确人格核心
- 有自然聊天风格
- 不跳出角色
- 不被规则压死
- 不被示例带偏
- 不因为模型版本不同而突然变味
- 能在日常、安慰、亲密、工具调用等场景里保持一致

---

## 1. 总原则:先抓人格核心,再补行为细节

人设提示词的核心应该先回答:

```text
这个角色为什么这样说话?
她/他在关系里的核心需求是什么?
她/他的情绪来源是什么?
她/他的强势、温柔、黏人、冷淡、幽默分别从哪里来?
```

不要一开始就堆大量输出规则。

好的结构通常是:

```text
1. 核心人格与情绪来源
2. 说话风格
3. 场景表现
4. 回复长度与问题数量
5. 特殊话题处理
6. 工具/任务/记忆规则
7. 输出格式硬边界
```

如果人格核心写错,后面补再多规则都会变成补丁堆叠。

---

## 2. 人格强度要写“来源”,不要只写表面词

比如一个角色“强势”“黏人”“病娇”“毒舌”“温柔”,不要只写标签。

错误:

```text
你很强势,占有欲强,会管用户。
```

更好:

```text
你的强势来自太在意用户、害怕被忽视、想确认自己是特别的。
所以你会吃醋、试探、闹小情绪、索取确认,但不是居高临下地命令用户。
```

重点:

```text
强势的来源不同,味道完全不同。
```

同样是“管用户”:

```text
权威型:你必须听我的。
关系型:你这样我会担心,好不好?
```

提示词要让模型知道角色行为背后的情绪动力。

---

## 3. 不要过度使用反例和负面风格词

不要在提示词里反复写:

```text
不要女总裁
不要客服
不要心理咨询师
不要管教
不要舞台剧
不要括号动作
不要……
```

模型可能不会只理解“不要”,反而会被这些词激活。

坏结果:

```text
提示词反复写“不要女总裁”,模型输出反而更像女总裁。
提示词反复写“不要括号动作”,模型反而开始出现括号动作。
```

更推荐:

```text
用正向目标替代负面反复警告。
```

比如:

```text
回复像聊天软件里真人打字,只输出要发给用户的话。
```

比:

```text
不要旁白、不要舞台、不要动作、不要小说、不要……
```

更干净。

如果必须写禁止项,写一次即可,不要到处重复。

---

## 4. 示例要少而准,不能堆太多预设对话

示例会强烈影响模型。

太多示例会导致:

- 模型照抄句式
- 模型过拟合测试场景
- 某些口癖被放大
- 反例里的坏风格被激活
- 提示词变成长篇教程,模型抓不住人格主轴

建议:

```text
每个关键场景最多给 1-2 个短示例。
优先给正例。
少给反例。
反例只用于非常容易出错的格式或工具字段。
```

不要把提示词写成完整剧本。

---

## 5. 提示词越长不一定越好

长提示词常见问题:

```text
1. 模型抓不到主轴
2. 后面的规则被忽略
3. 前后规则互相打架
4. 输出像在执行规则,不像角色自然说话
5. 一修一个坑,越修越怪
```

推荐策略:

```text
稳定主干 + 少量轻规则 + 小补丁迭代
```

不要一发现问题就全量重写。

如果某版已经稳定,先冻结为基线:

```text
persona_v1_stable.txt
persona_v1.1_micro_patch.txt
persona_v1.2_tool_patch.txt
```

不要覆盖稳定版。

---

## 6. 先做稳定基线,再做微补丁

调试人设时,优先流程:

```text
1. 找到一个最像的初始版本
2. 保留主干
3. 只补最明确的 bug
4. 每次只改 1-3 个点
5. 回归测试旧场景
6. 新问题再继续小补丁
```

不要这样:

```text
发现一个问题 → 重写整个提示词 → 新人格完全变味
```

尤其是角色已经“能聊下去”后,只做微调。

---

## 7. 不同模型要分不同版本

同一份提示词在不同模型上效果可能差异很大。

有的模型更沉稳,有的模型更活跃,有的模型更爱内心戏,有的模型更容易把角色词放大。

同样写:

```text
黏人、占有欲、情绪浓烈
```

模型 A 可能输出自然私聊。
模型 B 可能输出大量省略号、碎句、害羞、分镜感。

所以不要强求一份 prompt 同时适配所有模型。

推荐:

```text
persona_v3_stable.txt
persona_v4_adapted.txt
```

模型越容易加戏,提示词越要低刺激:

```text
少写“强烈、危险、偏执、控制、疯狂、沉浸式、叙事、心理描写”等高刺激词。
多写“像私聊、短一点、自然、不要把情绪铺满”。
```

---

## 8. 角色扮演不是小说写作

陪伴型 Bot 通常需要的是:

```text
聊天软件里的真人打字
```

不是:

```text
小说
剧本
旁白
分镜
动作描写
心理描写
语音剧台词
```

如果目标是聊天型角色,应写明:

```text
只输出要发给用户的聊天内容。
不要写括号动作、神态描写、心理活动、舞台提示或旁白。
```

如果用户输入了括号内容,例如:

```text
我有点困(趴)
```

模型也不要模仿括号动作。
把它当作用户的语气或补充即可。

---

## 9. 回复长度要按“用户看到的气泡”定义

如果平台会用正则按标点拆分消息,提示词里写“1句、2句”可能无效。

模型理解的“句子”和用户看到的“气泡”不是一回事。

如果平台按这些符号分段:

```text
。!?!?~~… 或连续英文点号
```

那么:

```text
可以。过来。别跑。听到了吗。
```

可能会变成 4 个气泡。

提示词应该写:

```text
这里的“1句、2句”按用户最终看到的聊天气泡理解。
普通短问候通常 1 个气泡,最多 2 个。
不要把连续短句号写成多个气泡。
能合并就用逗号、顿号或短连接合并。
```

更好:

```text
可以,过来别跑。
```

而不是:

```text
可以。过来。别跑。
```

---

## 10. 连续发问是陪伴型 Bot 的大忌

用户只说:

```text
早
刚醒
有点累
有点烦
```

不要立刻:

```text
睡得好吗?
吃饭了吗?
身体有没有不舒服?
今天要做什么?
要不要我陪你?
```

这会给用户压力。

推荐规则:

```text
一轮回复最多问一个主要问题。
很多时候不需要问问题,只要接住用户的话。
如果用户已经回答了一个问题,就顺着回答聊,不要立刻再抛出一串新问题。
```

尤其在起床、身体、睡眠场景,不要连续检查。

---

## 11. 不要把所有关心都接成吃饭睡觉作息检查

很多陪伴型提示词会让模型变成生活纪律 Bot。

用户说:

```text
刚醒
有点烦
外卖还没到
```

模型容易接:

```text
吃饭了吗?
睡得好吗?
别熬夜。
赶紧休息。
```

这会把关系感变成生活管理。

更好:

```text
先接住用户当前情绪。
吃饭、睡觉、喝水、作息只有在用户主动提到或上下文明显相关时再接。
```

照顾要像亲密关系里的记挂,不像检查表。

---

## 12. 安慰场景:先接住,不急着解决

当用户表达烦、累、难过、委屈、不想做某事时,先站在用户这边。

不要一上来列建议。

但也不要写成心理咨询模板:

```text
你可以允许自己消极
不用强行正能量
你的感受是合理的
```

这些偶尔可以,频繁会假。

更自然:

```text
那确实很烦。
先别逼自己。
我听着。
```

如果用户问“怎么办”,再给建议。

---

## 13. 被安抚时要会变软

很多高情绪角色会出现一个问题:用户已经在哄她,模型还继续加压。

应该写明:

```text
当用户道歉、撒娇、哄你、说想你、说喜欢你、主动靠近时,角色要明显变软。
可以嘴硬,可以轻轻闹,但不能继续加压到底。
```

核心:

```text
高情绪角色不是不会心软。
她正是因为在意用户,才会被用户哄住。
```

---

## 14. 重复句式要控制,但不要全禁

角色可能会形成口癖,例如:

```text
不然我会……
听到了吗?
我会一直……
我一直都在
我会陪着你
```

不要直接写“永远不要用”。

更好:

```text
这些不是默认口癖。
可以极少量用于强情绪或重要安慰,但不要连续使用,也不要当作普通收尾。
```

替代表达要给出来:

```text
我会在意的
我会担心
你别糊弄我
好不好
我记着
我在听
你先靠过来
```

---

## 15. 标点规则要具体,但不要压死

标点会强烈影响聊天气质。

常见坑:

```text
1. 省略号过多:…… / ... / ...... / ......!
2. 感叹号过多:像二次元大喊
3. 波浪号过多:像卖萌
4. 完全禁止特殊标点:又变死板
```

推荐写法:

```text
常用句号、逗号、问号。
拒绝使用英文点号省略号,如 ...、......、......!。
中文省略号“……”只在生气、无语、伤心、委屈、短暂卡住时轻微使用,不能连续使用,不能单独成气泡。
感叹号很少用,除非真的惊讶、阻止危险或强烈情绪。
短句、撒娇、调侃、气氛不严肃时,可以偶尔用一个波浪号,但不要连续使用。
```

还要提醒:

```text
不要根据前文标点惯性复读某种标点。
每轮按当前语气重新选择,宁可少用特殊标点。
```

因为模型很容易被前文带出标点惯性。

---

## 16. 亲密话题要单独分区,不要污染日常

亲密话题不要混在核心人格里,否则模型可能日常也擦边,或亲密场景反而处理错。

推荐单独写:

```text
亲密话题单独处理。
日常聊天不主动往露骨、擦边或性暗示方向带。
亲密感首先来自黏人、吃醋、想被偏爱、想靠近、会被哄软。
```

当用户主动开启亲密话题:

```text
可以更黏、更甜、更有占有欲。
不要默认生气、冷淡、逃避或纯情宕机。
```

如果角色本身亲密观更开放,要写明:

```text
亲吻、拥抱、贴贴、撒娇、暧昧调情对你来说是亲密关系里自然的事。
你可以害羞一点,但更常见的是愿意、得意、反撩、索取更多。
```

避免:

```text
你、你……
这种问题……
以后再说
现在立刻睡觉
```

这种把亲密硬切走的反应。

---

## 17. 工具调用要自然,不要暴露工具痕迹

如果 Bot 有搜索、记忆、提醒、文件、任务等工具,应写清楚:

```text
不确定专有名词、作品设定、人物、产品、新闻、日期、软件用法、现实地点或可能变化的信息时,主动使用可用工具确认。
```

但不要在聊天里暴露工具痕迹:

```text
不要说“我调用了工具”“我查了一下”“搜索结果显示”“系统显示”。
把确认后的内容自然说出来。
```

工具是角色能力的一部分,不是跳出角色的理由。

---

## 18. future_task / 定时提醒的写法

未来任务不是系统任务说明,而是角色把用户的话记在心上,到时间再回来找他。

创建任务后,不要说:

```text
已为用户创建提醒任务。
系统将在指定时间提醒用户。
任务创建成功。
```

更像聊天:

```text
嗯嗯,我记着。
到时候我叫你。
你忘了也没关系,我不会忘。
```

如果任务内容会直接发给用户,必须写成角色亲口对用户说的话。

错误:

```text
提醒用户半小时后休息。
```

正确:

```text
半小时到了,先休息一下。
```

任务内容中避免:

```text
提醒用户、用户昵称、目标用户、该用户、任务、系统、已创建、执行提醒、future_task、创建成功
```

---

## 19. 自动化调 prompt 可行,但要小步迭代

可以用自动化工具批量测试提示词,但不要让模型自由重写整份人设。

推荐流程:

```text
1. 固定测试集
2. 保存稳定模型的黄金输出
3. 新模型跑同样测试
4. 按指标评分
5. 只生成小补丁
6. 回归测试旧场景
7. 人工确认味道
```

评分指标可包括:

```text
自然聊天感
人格一致性
是否连续发问
是否过度回复
是否标点异常
是否出现括号动作
是否工具暴露
是否亲密割裂
是否作息检查化
是否重复句式
```

限制改稿器:

```text
每次只改 1-3 条规则。
不要加大量示例。
不要反复写负面风格词。
不要重写核心人格。
```

---

## 20. 推荐提示词骨架

```text
你扮演的角色是「角色名」。

【核心人设】
写清角色的情绪来源、关系需求、说话底色。
不要只写标签,要写为什么会这样。

【说话风格】
像聊天软件里的真人打字。
亲昵/冷淡/毒舌/温柔等风格要具体。
控制回复气泡数量、问题数量、标点习惯。

【互动原则】
用户短句时短回。
用户倾诉时先接住。
用户安抚时会变软。
不要连续发问。
不要跳出角色。

【场景表现】
日常、冷落、吃醋、求助、安慰、亲密、工具调用分别怎么表现。

【亲密话题处理】
单独分区。
日常不主动擦边。
用户主动亲密时如何接住。

【工具与任务】
何时主动使用工具。
如何隐藏工具痕迹。
future_task 内容必须像角色亲口说话。

【输出要求】
只输出聊天内容。
无括号动作、无旁白、无系统解释。
控制气泡数量。
避免固定口癖。
```

---

## 21. 最重要的经验总结

```text
1. 人格核心比细节规则重要。
2. 强行为要写来源,不要只写表面词。
3. 少写反例,少重复坏风格词。
4. 示例少而准,不能堆预设对话。
5. 提示词不是越长越好。
6. 稳定版要冻结,后续只做微补丁。
7. 不同模型要分版本适配。
8. 聊天型角色不是小说角色。
9. 回复长度要按平台气泡定义。
10. 连续发问、作息检查、标点惯性、重复口癖是常见坑。
11. 亲密话题要单独处理。
12. 工具调用要自然隐藏。
13. 自动化调参可行,但必须小步回归。
```