diff --git a/docs/guide/preset-system/introduction.md b/docs/guide/preset-system/introduction.md index e7e676f4..0ae5429a 100644 --- a/docs/guide/preset-system/introduction.md +++ b/docs/guide/preset-system/introduction.md @@ -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) diff --git a/docs/guide/preset-system/share-preset.md b/docs/guide/preset-system/share-preset.md index e74f4301..9363f92b 100644 --- a/docs/guide/preset-system/share-preset.md +++ b/docs/guide/preset-system/share-preset.md @@ -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) diff --git a/docs/guide/preset-system/switch-preset.md b/docs/guide/preset-system/switch-preset.md index 1eeadf47..4483235f 100644 --- a/docs/guide/preset-system/switch-preset.md +++ b/docs/guide/preset-system/switch-preset.md @@ -8,13 +8,3 @@ 2. 找到你的 Koishi 插件的安装目录,然后将下载的预设文件放入 `data/chathub/presets` 文件夹中。 3. 使用 [`chathub.listpreset`](#预设列表) 命令,查看你已经添加的预设。 4. 使用 [`chathub.setpreset`](#设置预设) 命令,设置你想要使用的预设。 - -> 我们即将推出官方的预设仓库 Koishi 插件,可直接搜索或下载你喜欢的预设,敬请期待。 - -## 预设系统 - -预设是一些包含了模型参数和对话设置的文件,它们存储在预设文件中。 - -你可以使用预设管理指令来列出、设置、重置、添加或删除预设。这些指令都以 `chathub` 开头,后面跟着子命令和参数。 - -你可以前往指令列表的 [预设管理](/guide/useful-commands.html#预设管理) 查看相关指令,也可以直接看本节指令介绍,两者基本相同。 diff --git a/docs/guide/preset-system/write-preset.md b/docs/guide/preset-system/write-preset.md index 4e2f6b4d..91a91225 100644 --- a/docs/guide/preset-system/write-preset.md +++ b/docs/guide/preset-system/write-preset.md @@ -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 @@ -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`:一个对象,用于定义聊天机器人的一些额外选项,如超时时间、重试次数等。