-
Notifications
You must be signed in to change notification settings - Fork 0
01 ‐ 聊天标签页
用于与模型进行多轮对话。
您可以发现以下按钮。请注意您可以用--chat-buttons
命令行参数来把悬停菜单替换成始终可见的按钮。
- 生成: 发送您的消息,并让模型开始回复。
- 停止: 在下一个词符生成之时停止正在进行的生成(对于一个比较慢的模型来说,这可能会需要一段时间)
- 继续: 让模型尝试续写已经存在的回复。在某些情况下,模型可能会简单地立即结束续写回复,而不生成任何新文本,但是有时候,它可能生成一个更长的回复。
- 重新生成: 类似于生成,但您的上一条消息被用于模型输入,而不是您在输入框里写好的文本。请注意,如果在此UI的 “参数” 标签页中的采样温度/Top P/Top K参数值比较低的话,新生成的回复可能最终和之前的回复一模一样。
- 删除上一条: 从聊天历史里移除最后的输入/输出对,并且把您最后一条消息送回到输入框。
- 替换上一条回复: 把上一条回复替换为您在输入框里打的随便什么东西。如果您想要编辑机器人的回复的话,这和 “复制上一条回复” 一起使用很有用。
- 复制上一条回复: 把机器人最后回复的内容弄到输入框里面。
- AI帮答: 让模型在考虑已有的聊天历史记录的情况下,代表您在输入框里生成您的一条新信息。
- 发送假消息: 在不触发模型生成回复的情况下向聊天历史记录添加一条新消息。
- 触发假回复: 向聊天历史记录添加一条新回复,就好像是模型生成了这条回复一样。这和 “发送假消息” 一起使用很有用。
- 新建聊天: 保存旧聊天,开始新对话。如果您正在和一个有 “问候语” 定义的角色聊天,这个问候语会被自动添加到新的历史记录中。
- 发送至默认: 把目前为止的整个聊天提示词转到 “默认” 标签页。
- 发送至笔记本: 把目前为止的整个聊天提示词转到 “笔记本” 标签页。
显示控件复选框可以让输入文本框下面的输入控件消失。这在让整个页面完全匹配可视范围而无需滚动很有用。
允许您在目前角色的当前聊天和之前的聊天,或当前指令模式下的聊天和之前的聊天之间切换。重命名菜单可以用来为选定的聊天场景起一个独特的名字,垃圾桶图标🗑️可以用来删除聊天。
无论您在这里输入什么,每次机器人回复的开头都会出现。这有助于引导回复朝您期望的方向发展。
最重要的输入字段。它定义了聊天提示词的格式化方式。有三个选项:chat、chat-instruct 和 instruct。这值得深入讨论一下,因为这似乎对很多人来说不是很明显。
有两种类型的模型:基础模型,如 Llama 和 GPT-J,以及经过微调的模型,如 Alpaca 和 Vicuna。微调模型是在基础模型的基础上训练的,其目标通常是让模型理解并响应指令,就像 ChatGPT 一样。让我们称这些模型为遵循指令的模型。
每个遵循指令的模型都是在特定的提示格式下训练的,如果您希望模型尽可能准确地遵循您的指令,就必须使用那一确切的提示词格式。
例如,Alpaca 的格式如下:
以下是描述任务的指令。写出一个恰当地完成请求的回复。
### Instruction:
你好!
### Response:
你好!很高兴认识你。有什么可以帮助你的?
### Instruction:
你好吗?
### Response:
我过得很好,谢谢你的关心!有什么特别想聊的或问我的吗?我可以在这里回答你的任何问题。
这个格式的特征是在顶部有一个上下文字符串,并且有交替的轮次,其中每个用户输入都以 ### Instruction:
开始,每个机器人轮次都以 ### Response:
开始。还有一些更奇特的格式,就像 Meta AI 发布的 Llama-2-chat 模型所使用的那样:
[INST] <<SYS>>
回答以下问题。
<</SYS>>
你好! [/INST] 你好!很高兴认识你。有什么可以帮助你的? </s><s>[INST] 你好吗? [/INST] 我过得很好,谢谢你的关心!有什么特别想聊的或问我的吗?我可以在这里回答你的任何问题。
在这个格式中,每个机器人回复的结尾都有特殊的词符(</s>
,序列结束词符,和 <s>
,序列开始词符);没有新行来分隔轮次;而上下文字符串是写在 <<SYS>>
和 <</SYS>>
之间的。尽管这个格式看起来令人生畏,但逻辑是相同的:有用户轮次和机器人轮次,每个都在模板中的特定位置出现。
需要强调的是,遵循指令的模型必须使用它们训练时的确切提示词格式。使用这些模型的任何其他提示词格式应被视为未定义行为。模型仍然会生成回复,但对您的输入的准确度会降低。
现在我们已经定义了什么是遵循指令的模型,我们可以继续描述三种聊天模式。
用于与在 “参数” > “角色” 下定义的角色进行简单聊天提示的对话,其格式如下:
Chiharu Yamada's Persona: Chiharu Yamada 是一位年轻的电脑工程师宅男,擅长解决问题并对技术充满热情。
You: 你好!
Chiharu Yamada: 你好!很高兴认识你。有什么可以帮助你的?
You: 你好吗?
Chiharu Yamada: 我过得很好,谢谢你的关心!有什么特别想聊的或问我的吗?我可以在这里回答你的任何问题。
在 “参数” > “角色” 下使用了三个可调参数:
- 在提示词顶部出现的上下文字符串。它最常被用来描述机器人的个性,并添加一些示例信息,以指导模型以理想的长度和格式回复。这个字符串永远不会被截断:随着提示词大小的增加,旧信息会逐一被移除,直到提示词小于在 “参数” > “生成” > “将提示词截断至此长度” 下设置的截断长度。
- 您的名字字符串出现在每个用户回复的开头。默认情况下,这个字符串是 “You” 。
- 每个机器人回复开头都会出现角色名称字符串。
此外,每当清除历史记录时,问候字符串会作为机器人的开场白出现。
“Chat” 选项通常应仅用于基础模型或非指令微调模型,不应用于遵循指令的模型。
这个模式使用在 “参数” > “指令模板” 下定义的提示词格式与遵循指令的模型进行对话。把这个模式想象成离线的 ChatGPT。
提示格式由 “参数” > “指令模板” 下的指令模板参数定义,它代表一个 Jinja2 模板。
请注意,当您在 “模型” 标签页中加载模型时,web UI 将尝试自动检测其指令模板(如果有的话),并相应地更新 “参数” > “指令模板” 下的值。这是通过在 models/config.yaml
中定义的一组正则表达式完成的。这种检测不一定准确。您应该检查 Hugging Face 上的模型卡片,以确保您正在使用正确的提示词格式。
如上所述,遵循指令的模型旨在与特定的提示模板一起使用。chat-instruct 模式允许您使用这些模板来生成聊天回复,从而混合了 Chat 和 Instruct 模式(因此得名)。
它通过创建一个遵循指令的轮次,其中给出了一个指令,紧接着是常规聊天提示。这有一个 Alpaca 格式的示例:
以下是描述任务的指令。写出一个恰当地完成请求的回复。
### Instruction:
继续下面的聊天对话。为角色 “Chiharu Yamada” 写一个回复。
Chiharu Yamada's Persona: Chiharu Yamada 是一位年轻的电脑工程师宅男,擅长解决问题并对技术充满热情。
You: 你好!
Chiharu Yamada: 你好!很高兴认识你。有什么可以帮助你的?
You: 你好吗?
### Response:
Chiharu Yamada:
这里的指令是
继续下面的聊天对话。为角色 “Chiharu Yamada” 写一个回复。
在这个指令下面,加入了常规聊天提示词,包括其上下文字符串和聊天历史,然后用户轮次结束。机器人轮次以 “角色的名字” 字符串开始,后跟:
,这样就指示了遵循指令的模型为角色写一条回复。
chat-instruct指令可以在 “聊天” > “chat-instruct模式下的指令” 下自定义。在该指令字符串中,“<|character|>” 是一个占位符,会被替换为机器人的名字,“<|prompt|>” 也是一个占位符,会被替换为完整的聊天提示。
请注意,您可以发挥创意:不用写像 “为角色写一条回复” 这样平凡的内容,您可以添加更复杂的指令,例如
这是一个冒险游戏,你的任务是代表 “<|character|>” 写一个回复,并为用户提供三个选项,然后由用户进行选择。
它的运作方式如下:
这定义了聊天用户界面的视觉风格。每个选项是一个CSS文件,定义在text-generation-webui/css/chat_style-name.css
中,其中 “name” 是此风格在下拉菜单中的名称。您可以通过简单地将chat_style-cai-chat.css
复制到chat_style-myNewStyle.css
并编辑这个新文件的内容来添加新的风格。如果您得到了一个您喜欢的风格,强烈鼓励您将其提交到存储库中。
这些风格只适用于chat和chat-instruct模式。Instruct模式有它独立的风格,定义在text-generation-webui/css/html_instruct_style.css
中。
这个菜单是一个内置扩展,定义在text-generation-webui/extensions/gallery
下。它显示了您的所有角色,如果您点击一个角色,它将自动在 “参数” > “角色” 下的菜单中被选择。