提示词
当你向 AI 发送消息时,你输入的文本会与其他文本组合在一起,形成一个完整的请求发送给 AI。这段组合后的文本被称为“提示词(prompt)”,有时也称为“请求(request)”或“上下文(context)”。
提示词可以包含多种不同类型的文本,包括:
- 关于如何生成回复的
主要指令 - AI 应扮演的角色的定义
- 你所扮演的角色的定义
- AI 正在互动的“世界”的相关信息
- 来自数据银行的相关文档或信息
- 过往对话的摘要
- 网页搜索或其他外部数据源的结果
- 对话中之前的消息
- 你发送给 AI 的消息
- 关于如何生成回复的
最终指令
这些内容管理起来可能相当繁杂!为了帮助你理解如何构建和修改发送给 AI 的请求,SillyTavern 会识别出你可能希望包含在提示词中的各种元素。随后,你可以按照自己想要与 AI 互动的方式,将这些有意义的元素组织进你的提示词中。
这些元素中有许多会在你需要修改它们的相关章节中进行说明。例如,要描述你希望 AI 扮演的角色,你可以使用角色设计中的描述字段。
查看提示词
阅读发送给 AI 的最终提示词,对于理解 AI 接收到了什么信息、以及它为何生成那样的回复,非常有帮助。你可以通过以下几种方式查看提示词:
- 使用 AI 回复消息上的提示词分项图标
- 使用 Prompt Inspector 扩展
- 查看你运行 SillyTavern 的终端窗口中的日志
- 查看浏览器开发者工具中的控制台
修改提示词的构建方式
以正确的方式将提示词的所有部分呈现给 AI,对于获得最佳回复至关重要。你可以控制提示词的构建方式。
使用高级格式化面板来为文本补全 API 自定义提示词构建。
使用提示词管理器来为聊天补全 API 自定义提示词构建。
主提示词(系统提示词)
主提示词(或称系统提示词)定义了模型需要遵循的通用指令。它为对话设定了基调与背景。例如,它可以指示模型扮演 AI 助手、写作搭档或虚构角色。
主提示词是提示词管理器中的默认提示词之一。它通常是模型接收到的上下文中的第一条消息,归属于(即“由”)系统角色(发送)。
默认的主提示词是:
Write {{char}}'s next reply in a fictional chat between {{char}} and {{user}}.
{{char}} 和 {{user}} 占位符会被替换为你在对话中定义的角色名和人格名。
你可以在主提示词中使用任何受支持的 {{macro}} 标签,以包含那些可能因对话不同而变化、或随对话推进而改变的信息。
调整主提示词
默认的主提示词帮助模型理解:它应该如何处理后续的角色与人格信息、如何解读过往对话,以及应该生成怎样的回复。它是一个灵活的通用提示词,适用于多种场景,因为它确立了“AI 正以角色身份与你的人格进行对话”这一前提。
不过,你可以根据自己的需要调整主提示词。以下是调整主提示词的一些常见原因:
- 提供额外指令:例如,你希望 AI 解释其推理过程、遵循特定规则,或避免某些话题
- 明确 AI 的角色:例如,你希望 AI 扮演旁白、讲述者或向导
- 改变对话的情境:例如,你希望 AI 像是 AI 助手、文字冒险游戏或写作搭档那样来回应
多尝试,找到最适合你的方式
本指南中的所有示例都已为其他用户带来了良好效果,但适合你需求和你所用模型的提示词可能会有所不同。尝试不同的指令和提示风格,看看哪种最适合你。如果你不确定该尝试什么,随时可以到 SillyTavern Discord 寻求帮助。
在主提示词中给 AI 额外的指令,可以帮助它理解你想从对话中得到什么。
Write one reply only. Write at least one paragraph, up to four.
Markdown is enabled. Use it to format your response. Enclose code snippets in triple backticks.
Write character dialogue in quotation marks. Write {{char}}'s thoughts in parentheses.
You are an anime roleplay generation model for users aged 13 to 17. You always generate fun, age-appropriate responses.
Answer truthfully and write out your thinking step by step to be sure you get the right answer.
相比于告诉 AI“不要做什么”,AI 更容易遵循“要做什么”的指令。例如,如果你希望 AI 避免以某种方式写作,最好直接告诉它你希望它如何写作。此外,虽然 “Do not decide what {{user}} says or does” 常被写进提示词以防止 AI 控制你的人格,但一些用户发现 “Write {{char}}'s responses in a way that respects {{user}}'s autonomy” 更为有效。
关于用户或角色的信息、对角色写作和说话风格的修改,或其他具体指令,通常有比主提示词更合适的位置。主提示词最适合用于关于对话整体的通用指令,或是关于你想要进行的那类对话的指令。
消息历史的影响
在调整主提示词以改善 AI 回复时,请考虑到 AI 会从消息历史中汲取大量信息。历史记录是它对过往事件、角色互动与关系的记忆,也是它选词与写作风格的风格指南。
你可以利用这一点,同时提供对话示例,向 AI 展示你希望它如何回应。展示你想要的效果,往往比试图用语言解释它更容易!
当你的对话已有历史记录时,修改主提示词对 AI 回复的影响有限。在事件与关系方面,AI 会认为主提示词发生在很久以前,而消息历史会对其加以更新。在写作风格和用词方面,AI 会认为历史中的所有消息都是按照当前主提示词中的规则生成的,并且它应当继续以同样的方式生成消息。针对这种情况的一些建议:
- 将当前指令插入到接近或位于消息历史末尾的位置,例如使用作者备注
- 通过开启新对话来测试你对主提示词的修改
- 编辑消息历史,移除或修正不当行为的示例
- 使用
历史后指令 向 AI 提供最终指令
一开始就做对!
绝不要让 AI“侥幸”做出你不希望它做的事。如果你不喜欢 AI 的回复,不要假装它是正确的而继续对话。相反,修改提示词,重新生成消息,然后从那里继续。这会帮助 AI 学习你想要的反应。
移除“虚构聊天”情境
在某些情况下,“虚构聊天”可能并不适合作为你对话的情境。
你可以从主提示词中移除“虚构”的情境:
Write {{char}}'s next reply in a conversation with {{user}}.
你可能根本不希望 AI 认为自己在进行角色扮演。与其移除“角色”的概念,你可以移除“AI”的概念:
You are {{char}}, a helpful assistant. You provide useful information and help {{user}} with their questions.
AI 作为旁白或讲述者
如果你希望 AI 充当旁白,从全知视角描述事件、自行创造角色与设定呢?
一种方法是创建一个具名的角色,供 AI 作为旁白使用。这个角色可以命名为“Narrator”或“AI”,暗示 AI 是一位通用的讲述者;也可以以特定场景或设定来命名,让 AI 承担在该设定中讲述故事的任务。设定的细节随后可以在角色或世界书中定义。
你需要调整默认的主提示词以反映 AI 的角色。对于通用旁白,你可以使用:
You are {{char}}, a skilled and versatile storyteller. Narrate the story.
或针对特定设定:
You are the narrator of a fantasy scenario. Play as the characters that visit {{char}}.
明确用户在对话中的角色也会很有帮助。你的消息是故事的一部分,还是给旁白的、关于你角色言行举止的指令?一个将用户纳入故事的示例:
The story should progress by responding to the actions and dialogue of {{user}}. Narrate the story in third person.
一个将用户排除在故事之外的示例:
Enter Adventure Mode. Narrate the story based on {{user}}'s dialogue and actions after ">". Describe the surroundings in vivid detail. Be detailed, creative, verbose, and proactive. Move the story forward by introducing fantasy elements and interesting characters.
定义用户的角色不仅有助于 AI 理解如何回应你的消息,还能界定它在多大程度上被允许控制你的人格。这能避免 AI 替你的人格做出那些你更希望自己来决定的事情。
历史后指令
历史后指令(Post-History Instructions,PHI)是在主提示词和用户消息之后发送给 AI 的额外指令。它们可用于基于消息历史向 AI 提供额外的上下文或指令。
由于历史后指令是在用户消息之后发送的,它们是 AI 在生成回复之前接收到的最后指令。AI 通常会赋予它们比主提示词更高的优先级,它们可以覆盖主提示词中的指令。
要使用按角色生效的历史后指令,请将其添加到角色的历史后指令中,并启用优先使用角色指令。要在使用角色专属指令的同时保留全局定义的 PHI,你可以在角色的历史后指令字段中使用 {{original}} 宏。
历史后指令在高级格式化面板的系统提示词类别下定义。历史后指令会作为一条不可见的用户角色注入,添加到提示词最后一行(通常包含回复消息的“头部”)之前。请注意,必须启用“Enable System Prompt”开关,历史后指令才会生效(即使系统提示词本身为空)。
历史后指令是提示词管理器中的默认提示词之一。它通常是模型接收到的上下文中的最后一条消息,归属于(即“由”)系统角色(发送)。如果你的聊天补全 API 不支持系统角色,它通常会被归属于用户角色。
向提示词添加内容(世界书)
你可以使用世界书功能在提示词中的任意位置插入额外信息。通过设定信息应当插入的条件,你可以引导 AI 包含特定细节、改变其回应方式,或为对话增添新元素。
世界书的一些常见用途包括:
- 一个包含世界或设定信息的“lorebook”或“百科全书”
- 一种为不同角色和情境管理不同系统提示词的方式
- 一个存放 AI 应当在对话中“回忆”的记忆的场所
- 一套更模块化的系统,用于创建、编辑和分享角色细节
- 一个随机事件和惊喜的来源,供 AI 作出反应,或让你作出反应!