Skip to content

Commit

Permalink
docs: update preset
Browse files Browse the repository at this point in the history
  • Loading branch information
dingyi222666 committed Sep 23, 2023
1 parent 300abe6 commit 2da7ba7
Show file tree
Hide file tree
Showing 4 changed files with 29 additions and 62 deletions.
6 changes: 3 additions & 3 deletions docs/guide/preset-system/introduction.md
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
# 预设系统

我们将介绍如何使用预设系统来调教模型的对话风格,行为等。
我们接下来将介绍如何使用预设系统来调教模型的对话风格,行为等。

预设系统类似 ChatGPT 的 [custom-instructions](https://openai.com/blog/custom-instructions-for-chatgpt)可自定义模型的对话风格,行为等。
预设系统类似 ChatGPT 的 [custom-instructions](https://openai.com/blog/custom-instructions-for-chatgpt)不同的是我们的预设系统可以伪造多条回复,更适合角色扮演。不过两者可自定义模型的对话风格,行为等。

接下来可根据你的需求,阅读感兴趣的章节
接下来可根据你的需求,自行阅读感兴趣的章节

- [使用预设](./switch-preset.md)

Expand Down
12 changes: 3 additions & 9 deletions docs/guide/preset-system/share-preset.md
Original file line number Diff line number Diff line change
@@ -1,16 +1,10 @@
# 分享预设

我们欢迎所有人分享自己的预设,并且感谢所有为本项目做出贡献的人
我们欢迎所有人分享自己的预设到 ChatHub 的预设仓库

如果你有预设想要分享,你可以按照以下步骤操作:

1. Fork [awesome-chathub-presets](https://github.com/ChatHubLab/awesome-chathub-presets) 项目到你自己的 GitHub 账号下。
2. 把你编写好的预设文件放入 presets 文件夹中,并且确保文件名不重复
3. 提交一个 Pull Request 到本项目,并且在描述中简要介绍你的预设
2. 把你编写好的预设文件放入 presets 文件夹中,并且确保文件和已有的预设文件(包括关键词,文件名)不冲突
3. 提交 Pull Request,在描述中简要介绍你的预设
4. 等待我们审核并合并你的 Pull Request。

## 贡献者名单

感谢以下网友为本项目提供了优秀的预设:

- [dingyi222666](https://github.com/dingyi222666)
10 changes: 0 additions & 10 deletions docs/guide/preset-system/switch-preset.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,13 +8,3 @@
2. 找到你的 Koishi 插件的安装目录,然后将下载的预设文件放入 `data/chathub/presets` 文件夹中。
3. 使用 [`chathub.listpreset`](#预设列表) 命令,查看你已经添加的预设。
4. 使用 [`chathub.setpreset`](#设置预设) 命令,设置你想要使用的预设。

> 我们即将推出官方的预设仓库 Koishi 插件,可直接搜索或下载你喜欢的预设,敬请期待。
## 预设系统

预设是一些包含了模型参数和对话设置的文件,它们存储在预设文件中。

你可以使用预设管理指令来列出、设置、重置、添加或删除预设。这些指令都以 `chathub` 开头,后面跟着子命令和参数。

你可以前往指令列表的 [预设管理](/guide/useful-commands.html#预设管理) 查看相关指令,也可以直接看本节指令介绍,两者基本相同。
63 changes: 23 additions & 40 deletions docs/guide/preset-system/write-preset.md
Original file line number Diff line number Diff line change
@@ -1,24 +1,11 @@
# 编写预设

如果你想要编写自己的预设,你需要了解一些基本的知识和技巧:
谁不想拥有一只自己的赛博猫娘呢?使用预设系统可以轻松的让模型认为自己的猫娘。本章我们将教大家如何编写预设,并应用到 ChatHub 上。

- 预设是一些包含了模型参数和对话设置的 JSON 文件,它们遵循一定的格式和规范。
- 预设文件的名称应该是有意义且不重复的,最好能反映出预设的主题或特点。
- 预设文件中必须包含 `name``description``model``chatMode` 四个字段,分别表示预设的名称、描述、模型和聊天模式。
- 预设文件中可以包含 `initMessage``prompt``context` 三个字段,分别表示初始对话、提示语和上下文信息。这些字段可以帮助你设置模型的初始状态和对话风格。
- 预设文件中还可以包含其他自定义字段,比如 `character``scenario` 等,用于描述预设的角色或场景。这些字段不会影响模型的行为,但可以提供一些额外的信息或灵感。
## 基础格式

## 预设文件
让我们先阅读一下 ChatHub 提供的两个预设文件

预设文件是一种特殊的文本文件,可以使用 `.txt``.yml` 作为扩展名。
- `triggerKeyword`:一个或多个用于触发聊天机器人的关键词,用逗号分隔。
- `promptTemplate`:一个或多个用于生成对话内容的模板,用换行符分隔。模板中可以使用变量、函数和条件语句等。
- `params`:一个对象,用于定义模板中使用的变量和函数的值或逻辑。
- `options`:一个对象,用于定义聊天机器人的一些额外选项,如超时时间、重试次数等。

预设文件的示例:

::: code-group
```yml [chatgpt.yml]
keywords:
- chatgpt
Expand Down Expand Up @@ -57,38 +44,34 @@ prompts:

format_user_prompt: "用户{sender}说: {prompt}"
```
:::
## 预设目录
预设文件需要放在项目根目录下的 `data/chathub/presets` 文件夹中
怎么样,你知道格式了吗?接下来让我们逐个解释吧
如果该文件夹不存在,程序会自动创建,并复制一些默认的预设文件到该文件夹中。
### 关键词
你可以在该文件夹中添加、删除或修改预设文件,程序会自动检测并加载最新的预设内容
关键词(keywords)是预设文件中最重要的属性之一,它代表了预设文件的关键词
## 预设类
一个预设文件可以含有多个关键词,这意味着关键词实际上是一个数组。
为了方便操作和管理预设文件,我们提供了一个 `Preset` 类,它封装了以下几个方法:
预设文件中的关键词可以被 ChatHub 识别,当用户使用命令创建或修改房间时,输入的关键词就会让 ChatHub 去寻找对应的预设文件。
- `loadAllPreset()`:加载所有预设文件,并将其转换为 `PresetTemplate` 对象,存储在 `_presets` 数组中。
- `setDefaultPreset(triggerKeyword)`:设置一个默认的预设,根据给定的触发关键词,在 `_presets` 数组中查找对应的预设对象,并将其缓存到 `chathub/keys` 中。
- `getPreset(triggerKeyword)`:根据给定的触发关键词,在 `_presets` 数组中查找对应的预设对象,并返回它。如果没有找到,抛出一个错误。
- `getDefaultPreset()`:获取默认的预设对象。如果缓存中有值,尝试使用 `getPreset()` 方法获取对应的预设对象。如果没有缓存或者缓存失效,尝试使用 `getPreset('chatgpt')` 方法获取内置的默认预设对象。如果都失败,抛出一个错误。
- `getAllPreset()`:获取所有预设对象的触发关键词,并返回一个字符串数组。
- `resetDefaultPreset()`:重置默认的预设,删除缓存中的值,并重新复制默认的预设文件到预设目录中。
- `resolvePresetDir()`:获取预设目录的绝对路径。
:::warning
请不要让不同预设文件里的关键词一致,这会导致关键词冲突。当使用冲突的关键词时,ChatHub 可能会返回任意一个使用了该关键词的预设(这很可能不会是你想要设置的目标预设)。
:::
### Prompts
## 预设模板
Prompts 属性是预设文件里另一个重要的属性,它代表了预设文件里的对话内容。
为了方便表示和处理预设文件中定义的内容,我们定义了一个 `PresetTemplate` 类型,它包含以下几个属性:
Prompts 本质上就是由多个 Prompt 组成的数组,换一种更通俗的说法就是,Prompts 就是预设文件里的固定消息内容。
- `triggerKeyword`:一个字符串数组,表示触发关键词。
- `promptTemplate`:一个字符串数组,表示对话模板。
- `params`:一个对象,表示模板中使用的变量和函数的值或逻辑。
- `options`:一个对象,表示聊天机器人的一些额外选项。
- `path`:一个字符串,表示预设文件的绝对路径。
这些内容会放置在每次和模型对话的消息数组的最前面(注意部分模型可能不支持这样),无论怎么对话,这些内容始终都不会被移除掉。这和在 ChatGPT 里发送洗脑 Prompt 类似,但是其的效果更强(这样做会让模型永远能阅读这些内容,而不会在多次聊天后被移除)。
我们提供了一个 `loadPreset(rawText)` 函数,用于将预设文件的原始文本转换为 `PresetTemplate` 对象。该函数会根据预设文件的扩展名,使用不同的解析器进行解析。目前支持两种解析器:
## 预设文件
预设文件是一种特殊的文本文件,可以使用 `.txt` 或 `.yml` 作为扩展名。

- `parseTxt(rawText)`:用于解析 `.txt` 格式的预设文件,使用正则表达式进行匹配和提取。
- `parseYml(rawText)`:用于解析 `.yml` 格式的预设文件,使用 [js-yaml](https://github.com/nodeca/js-yaml) 库进行解析。
- `triggerKeyword`:一个或多个用于触发聊天机器人的关键词,用逗号分隔。
- `promptTemplate`:一个或多个用于生成对话内容的模板,用换行符分隔。模板中可以使用变量、函数和条件语句等。
- `params`:一个对象,用于定义模板中使用的变量和函数的值或逻辑。
- `options`:一个对象,用于定义聊天机器人的一些额外选项,如超时时间、重试次数等。

0 comments on commit 2da7ba7

Please sign in to comment.