# 指令模式

指令模式允许您调整针对各种提示词格式训练的指令遵循模型的提示词,如 Alpaca、ChatML、Llama2 等。

# API 支持

# Text Completion API

完全支持。这包括:

  • Text Completion 下的所有来源
  • KoboldAI Classic
  • AI Horde

# 选择格式

选择的指令模板必须与后端运行的实际模型的期望相匹配。

这通常反映在 HuggingFace 上的模型卡片中,有些甚至提供 SillyTavern 兼容的 JSON 文件。

示例:NeverSleep/Noromaid-13b-v0.1.1

# Chat Completion API(OpenAI、Claude 等)

这不支持**(也不需要)**Chat Completion API。它们使用完全不同的提示词构建器。

# NovelAI

虽然 NovelAI 技术上支持,但他们的模型都没有经过训练来理解指令格式。NovelAI 模型可以使用一个特殊的指令模块,当在聊天消息中遇到用大括号包裹的指令时自动激活,因此对整个提示词使用指令模式将导致输出质量降低

以下是自动激活 NovelAI 指令模块的示例:

User: { Write a happy song about Nintendo Switch. }

# 指令模式设置

# 系统提示词

# 模板

为一些知名的指令模型提供带有序列的现成模板。

更改模板会将未保存的设置重置为最后保存的状态!如果您进行了任何不想丢失的更改,请记得保存您的模板。

# 激活正则表达式

如果定义为有效的正则表达式,当连接到模型且其名称匹配此正则表达式时,将自动选择此模板。

需要预先启用指令模式。只有模板中的第一个正则表达式匹配会被选中(按字母顺序评估)。

# 用换行符包装序列

在插入提示词时,每个序列文本都会用换行符包装。Alpaca 及其衍生品需要此功能。

如果您想完全控制行终止符,请禁用此功能。

# 替换序列中的宏

如果启用,在消息包装序列中定义的已知 {{macro}} 替换将被替换。

此外,可以在消息前缀中使用特殊的 {{name}} 宏来引用附加到消息的实际名称(而不是当前活动的 {{char}} 或 {{user}}),这在使用群组聊天或 /sendas 命令时很有帮助。如果无法确定名称,则使用"System"作为后备占位符。

# 包含名称

如果启用,在前缀序列后将角色和用户名添加到聊天历史记录中。

以下选项可用:

  • 从不:不在消息内容前添加名称前缀。
  • 群组和过去的个性:仅为群组角色和过去的个性的消息添加名称前缀。
  • 始终:始终在消息内容前添加名称前缀。

# 序列:系统提示词包装

定义系统提示词的包装方式。

# 系统提示词前缀

插入在系统提示词之前。

# 系统提示词后缀

插入在系统提示词之后。

**重要:**这适用于系统提示词本身,适用于整个故事字符串!如果您想包装故事字符串,请将这些序列添加到上下文模板部分中的故事字符串模板。

# 序列:聊天消息包装

这些设置定义了在构建提示词时如何包装属于不同角色的消息。

所有前缀序列也会自动用作停止字符串。

# 用户消息前缀

在用户消息之前插入,并在扮演时作为最后一行提示词。

# 用户消息后缀

在用户消息之后插入。

# 助手消息前缀

在助手消息之前插入,并在生成 AI 回复时作为最后一行提示词。

# 助手消息后缀

在助手消息之后插入。

# 系统消息前缀

在系统(由斜杠命令或扩展添加)消息之前插入。

# 系统消息后缀

在系统消息之后插入。

# 系统与用户相同

如果选中为真,系统消息将使用用户角色消息序列。

否则,系统消息使用它们自己的序列(如果不为空)或根本不进行任何包装(如果为空)。

# 其他序列

用于提示词构建的更精细调整的各种高级配置

# 第一个助手前缀

在第一个助手的消息之前插入。

只有聊天历史中的第一条消息才算数,而不是实际首先进入提示词的消息!

# 最后一个助手前缀

在最后一个助手的消息之前插入,或在生成 AI 回复时作为最后一行提示词。

在后台生成文本时不使用(例如 Stable Diffusion 提示词或摘要)。将使用系统指令前缀或常规助手前缀。

# 系统指令前缀

在后台生成中性/系统文本时(例如 Stable Diffusion 提示词或摘要)作为最后一行提示词插入。

# 用户填充消息

如果聊天历史不是以用户消息开始,将在聊天历史开始时插入。

**用例:**当指令格式严格要求提示词必须以用户开始,并且消息角色只能交替出现时,例如:Llama 2 Chat、Mistral Instruct。

# 停止序列

表示回复结束的文本。也作为停止字符串发送到后端 API。

如果生成了停止序列,输出中该序列之后的所有内容都将被删除(包括序列本身)。