From 9903ea80e650cd2f016749a0452cd1a07d3fab2c Mon Sep 17 00:00:00 2001 From: dingyi Date: Sun, 10 Sep 2023 03:41:32 +0800 Subject: [PATCH] feat(core): better wipe command --- packages/core/src/config.ts | 50 +++++++++++----------- packages/core/src/index.ts | 2 +- packages/core/src/llm-core/chat/default.ts | 2 +- packages/core/src/middlewares/wipe.ts | 5 ++- 4 files changed, 31 insertions(+), 28 deletions(-) diff --git a/packages/core/src/config.ts b/packages/core/src/config.ts index 6e841255..b5e11922 100644 --- a/packages/core/src/config.ts +++ b/packages/core/src/config.ts @@ -39,16 +39,16 @@ export interface Config { export const Config: Schema = Schema.intersect([ Schema.object({ botName: Schema.string().description('bot 姓名').default('香草'), - isNickname: Schema.boolean().description('是否允许 bot 配置中的昵称引发回复').default(true) + isNickname: Schema.boolean().description('允许 bot 配置中的昵称引发回复').default(true) }).description('bot 配置'), Schema.object({ - allowPrivate: Schema.boolean().description('是否允许私聊').default(true), - allowAtReply: Schema.boolean().description('是否允许 at 回复').default(true), - isReplyWithAt: Schema.boolean().description('是否在回复时引用原消息').default(false), - isForwardMsg: Schema.boolean().description('是否将消息以转发消息的形式发送').default(false), + allowPrivate: Schema.boolean().description('允许私聊触发').default(true), + allowAtReply: Schema.boolean().description('允许 at 回复').default(true), + isReplyWithAt: Schema.boolean().description('回复时引用原消息').default(false), + isForwardMsg: Schema.boolean().description('让消息以转发消息的形式发送').default(false), privateChatWithoutCommand: Schema.boolean() - .description('是否允许私聊不调用命令直接和 bot 聊天') + .description('私聊可不调用命令直接和 bot 聊天') .default(false), msgCooldown: Schema.number() .description('全局消息冷却时间,单位为秒,防止适配器调用过于频繁') @@ -60,7 +60,7 @@ export const Config: Schema = Schema.intersect([ outputMode: Schema.union([ Schema.const('raw').description('原始(直接输出,不做任何处理)'), Schema.const('text').description('文本(把回复当成 markdown 渲染)'), - Schema.const('image').description('图片(需要 puppeteer服务)'), + Schema.const('image').description('图片(需要 Puppeteer服务)'), Schema.const('voice').description('语音(需要 vits 服务)'), Schema.const('mixed-image').description('混合(图片和文本)'), Schema.const('mixed-voice').description('混合(语音和文本)') @@ -70,22 +70,22 @@ export const Config: Schema = Schema.intersect([ splitMessage: Schema.boolean() .description( - '是否分割消息发送(看起来更像普通水友(并且会不支持引用消息,不支持原始模式和图片模式。开启流式响应后启用该项会进行更加进阶的分割消息)' + '分割消息发送(看起来更像普通水友(并且会不支持引用消息,不支持原始模式和图片模式。开启流式响应后启用该项会进行更加进阶的分割消息))' ) .default(false), - censor: Schema.boolean() - .description('是否开启文本审核服务(需要安装censor服务') - .default(false), + censor: Schema.boolean().description('文本审核服务(需要安装censor服务').default(false), - sendThinkingMessage: Schema.boolean().description('是否发送思考中的消息').default(true), + sendThinkingMessage: Schema.boolean() + .description('发送等待消息,在请求时会发送这条消息') + .default(true), sendThinkingMessageTimeout: Schema.number() - .description('当请求多少毫秒后未响应时发送思考中的消息') + .description('请求多少毫秒后未响应时发送等待消息') .default(15000), thinkingMessage: Schema.string() - .description('思考中的消息内容') + .description('等待消息内容') .default('我还在思考中,前面还有 {count} 条消息等着我回复呢,稍等一下哦~'), randomReplyFrequency: Schema.percent() @@ -97,16 +97,18 @@ export const Config: Schema = Schema.intersect([ }).description('回复选项'), Schema.object({ longMemory: Schema.boolean() - .description('是否开启长期记忆(需要提供向量数据库和 Embeddings 服务的支持)') + .description( + '长期记忆(让模型能记住久远对话内容,需要提供向量数据库和 Embeddings 服务)' + ) .default(false), blackList: Schema.union([Schema.boolean(), Schema.any().hidden()]) .role('computed') .description( - '黑名单列表 (请只对需要拉黑的用户或群开启,其他(如默认)请不要打开,否则会导致全部聊天都会被拉黑无法回复' + '黑名单列表 (请只对需要拉黑的用户或群开启,其他(如默认)请不要打开,否则会导致全部聊天都会被拉黑无法响应))' ) .default(false), blockText: Schema.string() - .description('黑名单回复内容') + .description('被拉黑用户的固定回复内容') .default('哎呀(キ`゚Д゚´)!!,你怎么被拉入黑名单了呢?要不你去问问我的主人吧。'), messageCount: Schema.number() @@ -121,12 +123,12 @@ export const Config: Schema = Schema.intersect([ streamResponse: Schema.boolean() .description( - '是否启用流式响应(会在响应时就开始发送消息,而不是等待完全响应后再发送。开启后渲染输出模式选项将无效)' + '流式响应(会在响应时就开始发送消息,而不是等待完全响应后再发送。开启后渲染输出模式选项可能会无效)' ) .default(false), historyMode: Schema.union([ - Schema.const('default').description('保存最近几轮的对话'), + Schema.const('default').description('保存最近的对话'), Schema.const('summary').description('保存对话的摘要') ]) .default('default') @@ -134,9 +136,9 @@ export const Config: Schema = Schema.intersect([ }).description('对话选项'), Schema.object({ - defaultEmbeddings: Schema.dynamic('embeddings').description('默认使用的的嵌入模型'), + defaultEmbeddings: Schema.dynamic('embeddings').description('默认使用的嵌入模型'), - defaultVectorStore: Schema.dynamic('vector-store').description('默认使用的的向量数据库') + defaultVectorStore: Schema.dynamic('vector-store').description('默认使用的向量数据库') }).description('模型选项'), Schema.object({ @@ -147,10 +149,10 @@ export const Config: Schema = Schema.intersect([ Schema.object({ isProxy: Schema.boolean() - .description('是否使用代理,开启后会为相关插件的网络服务使用代理') + .description('代理网络连接,开启后会为相关插件的网络服务使用代理') .default(false), - isLog: Schema.boolean().description('是否开始调试模式输出Log,调试用').default(false) + isLog: Schema.boolean().description('调试模式').default(false) }).description('杂项'), Schema.union([ @@ -158,7 +160,7 @@ export const Config: Schema = Schema.intersect([ isProxy: Schema.const(true).required(), proxyAddress: Schema.string() .description( - '插件网络请求的代理地址,填写后 chathub 相关插件的网络服务都将使用该代理地址。如不填写会尝试使用 koishi 的全局配置里的代理设置' + '网络请求的代理地址,填写后 ChatHub 相关插件的网络服务都将使用该代理地址。如不填写会尝试使用 Koishi 的全局配置里的代理设置' ) .default('') }).description('代理设置'), diff --git a/packages/core/src/index.ts b/packages/core/src/index.ts index 90c1333b..7beefd3a 100644 --- a/packages/core/src/index.ts +++ b/packages/core/src/index.ts @@ -7,7 +7,7 @@ import { middleware } from './middleware' import { command } from './command' import { defaultFactory } from './llm-core/chat/default' -export * from "./config" +export * from './config' export const name = '@dingyi222666/chathub' export const using = ['cache', 'database'] diff --git a/packages/core/src/llm-core/chat/default.ts b/packages/core/src/llm-core/chat/default.ts index 0e1590de..9e0e7e42 100644 --- a/packages/core/src/llm-core/chat/default.ts +++ b/packages/core/src/llm-core/chat/default.ts @@ -3,7 +3,7 @@ import { ChatHubBrowsingChain } from '../chain/browsing_chat_chain' import { ChatHubChatChain } from '../chain/chat_chain' import { ChatHubFunctionCallBrowsingChain } from '../chain/function_calling_browsing_chain' import { ChatHubPluginChain } from '../chain/plugin_chat_chain' -import { Context, Schema, sleep } from 'koishi' +import { Context, Schema } from 'koishi' import { PlatformService } from '../platform/service' import { CreateToolParams, ModelType } from '../platform/types' diff --git a/packages/core/src/middlewares/wipe.ts b/packages/core/src/middlewares/wipe.ts index d576ad29..07fa1ca7 100644 --- a/packages/core/src/middlewares/wipe.ts +++ b/packages/core/src/middlewares/wipe.ts @@ -14,8 +14,8 @@ export function apply(ctx: Context, config: Config, chain: ChatChain) { if (command !== 'wipe') return ChainMiddlewareRunStatus.SKIPPED const buffer = [ - '您接下来将要操作的是清除 chathub 的全部相关数据!这些数据包括', - '\n1. 所有的会话数据', + '您接下来将要操作的是清除 ChatHub 的全部相关数据!这些数据包括:', + '\n1. 所有会话数据', '2. 其他缓存在数据库的数据', '3. 本地向量数据库的相关数据' ] @@ -51,6 +51,7 @@ export function apply(ctx: Context, config: Config, chain: ChatChain) { await ctx.cache.clear('chathub/chat_limit') await ctx.cache.clear('chathub/keys') + await ctx.cache.clear('chathub/client_config') // delete local database and tmps