mirror of
https://github.com/ikechan8370/chatgpt-plugin.git
synced 2025-12-16 13:27:08 +00:00
fix: config
This commit is contained in:
parent
a16538f322
commit
116479e34e
4 changed files with 156 additions and 19 deletions
34
apps/chat.js
34
apps/chat.js
|
|
@ -0,0 +1,34 @@
|
||||||
|
import Config from '../config/config.js'
|
||||||
|
import { Chaite, SendMessageOption } from 'chaite'
|
||||||
|
export class Chat extends plugin {
|
||||||
|
constructor () {
|
||||||
|
let toggleMode = Config.basic.toggleMode
|
||||||
|
let prefix = Config.basic.togglePrefix
|
||||||
|
super({
|
||||||
|
name: 'ChatGPT-Plugin对话',
|
||||||
|
dsc: 'ChatGPT-Plugin对话',
|
||||||
|
event: 'message',
|
||||||
|
priority: 0,
|
||||||
|
rule: [
|
||||||
|
{
|
||||||
|
reg: toggleMode === 'at' ? '^[^#][sS]*' : `^#?(图片)?${prefix}[^gpt][sS]*`,
|
||||||
|
fnc: 'chat'
|
||||||
|
}
|
||||||
|
]
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
async chat (e) {
|
||||||
|
|
||||||
|
const state = await Chaite.getInstance().getUserStateStorage().getItem(e.sender.user_id + '')
|
||||||
|
const userSettings = state.settings
|
||||||
|
const sendMessageOptions = SendMessageOption.create({
|
||||||
|
model: userSettings.model,
|
||||||
|
temperature: userSettings.temperature,
|
||||||
|
max_tokens: userSettings.maxToken,
|
||||||
|
systemOverride: userSettings.systemOverride,
|
||||||
|
|
||||||
|
})
|
||||||
|
Chaite.getInstance().sendMessage(msg, e, )
|
||||||
|
}
|
||||||
|
}
|
||||||
120
config/config.js
120
config/config.js
|
|
@ -1,15 +1,115 @@
|
||||||
class ChatGPTConfig {
|
class ChatGPTConfig {
|
||||||
dataDir = 'data'
|
/**
|
||||||
processorsDirPath = 'utils/processors'
|
* 版本号
|
||||||
toolsDirPath = 'utils/tools'
|
* @type {string}
|
||||||
cloudBaseUrl = ''
|
*/
|
||||||
cloudApiKey = ''
|
|
||||||
|
|
||||||
embeddingModel = 'gemini-embedding-exp-03-07'
|
|
||||||
dimensions = 0
|
|
||||||
|
|
||||||
serverAuthKey = ''
|
|
||||||
version = '3.0.0'
|
version = '3.0.0'
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 基本配置
|
||||||
|
* @type {{
|
||||||
|
* toggleMode: 'at' | 'prefix',
|
||||||
|
* debug: boolean,
|
||||||
|
* }}
|
||||||
|
*/
|
||||||
|
basic = {
|
||||||
|
// 触发方式,at触发或者前缀触发
|
||||||
|
toggleMode: 'at',
|
||||||
|
// 触发前缀,仅在前缀触发时有效
|
||||||
|
togglePrefix: '#chat',
|
||||||
|
// 是否开启调试模式
|
||||||
|
debug: false
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 模型和对话相关配置
|
||||||
|
* @type {{
|
||||||
|
* defaultModel: string,
|
||||||
|
* embeddingModel: string,
|
||||||
|
* defaultChatPresetId: string,
|
||||||
|
* enableCustomPreset: boolean,
|
||||||
|
* customPresetUserWhiteList: string[],
|
||||||
|
* customPresetUserBlackList: string[],
|
||||||
|
* promptBlockWords: string[],
|
||||||
|
* responseBlockWords: string[],
|
||||||
|
* blockStrategy: 'full' | 'mask',
|
||||||
|
* blockWordMask: string
|
||||||
|
* }}
|
||||||
|
*/
|
||||||
|
llm = {
|
||||||
|
// 默认模型,初始化构建预设使用
|
||||||
|
defaultModel: '',
|
||||||
|
// 嵌入模型
|
||||||
|
embeddingModel: 'gemini-embedding-exp-03-07',
|
||||||
|
// 嵌入结果维度,0表示自动
|
||||||
|
dimensions: 0,
|
||||||
|
// 默认对话预设ID
|
||||||
|
defaultChatPresetId: '',
|
||||||
|
// 是否启用允许其他人切换预设
|
||||||
|
enableCustomPreset: false,
|
||||||
|
// 允许切换预设的用户白名单
|
||||||
|
customPresetUserWhiteList: [],
|
||||||
|
// 禁止切换预设的用户黑名单
|
||||||
|
customPresetUserBlackList: [],
|
||||||
|
// 用户对话屏蔽词
|
||||||
|
promptBlockWords: [],
|
||||||
|
// 机器人回复屏蔽词
|
||||||
|
responseBlockWords: [],
|
||||||
|
// 触发屏蔽词的策略,完全屏蔽或仅屏蔽关键词
|
||||||
|
blockStrategy: 'full',
|
||||||
|
// 如果blockStrategy为mask,屏蔽词的替换字符
|
||||||
|
blockWordMask: '***'
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 管理相关配置
|
||||||
|
* @type {{
|
||||||
|
* blackGroups: number[],
|
||||||
|
* whiteGroups: number[],
|
||||||
|
* blackUsers: string[],
|
||||||
|
* whiteUsers: string[],
|
||||||
|
* defaultRateLimit: number
|
||||||
|
* }}
|
||||||
|
*/
|
||||||
|
management = {
|
||||||
|
blackGroups: [],
|
||||||
|
whiteGroups: [],
|
||||||
|
blackUsers: [],
|
||||||
|
whiteUsers: [],
|
||||||
|
// 默认对话速率限制,0表示不限制,数字表示每分钟最多对话次数
|
||||||
|
defaultRateLimit: 0
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* chaite相关配置
|
||||||
|
* @type {
|
||||||
|
* { dataDir: string,
|
||||||
|
* processorsDirPath: string,
|
||||||
|
* toolsDirPath: string,
|
||||||
|
* cloudBaseUrl: string,
|
||||||
|
* cloudApiKey: string,
|
||||||
|
* authKey: string,
|
||||||
|
* host: string,
|
||||||
|
* port: number}}
|
||||||
|
*/
|
||||||
|
chaite = {
|
||||||
|
// 数据目录,相对于插件下
|
||||||
|
dataDir: 'data',
|
||||||
|
// 处理器目录,相对于插件下
|
||||||
|
processorsDirPath: 'utils/processors',
|
||||||
|
// 工具目录,相对于插件目录下
|
||||||
|
toolsDirPath: 'utils/tools',
|
||||||
|
// 云端API url
|
||||||
|
cloudBaseUrl: '',
|
||||||
|
// 云端API Key
|
||||||
|
cloudApiKey: '',
|
||||||
|
// jwt key,非必要勿修改
|
||||||
|
authKey: '',
|
||||||
|
// 管理面板监听地址
|
||||||
|
host: '',
|
||||||
|
// 管理面板监听端口
|
||||||
|
port: 48370
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export default new ChatGPTConfig()
|
export default new ChatGPTConfig()
|
||||||
|
|
|
||||||
|
|
@ -17,7 +17,7 @@ import fs from 'fs'
|
||||||
* @param apiKey
|
* @param apiKey
|
||||||
* @returns {Promise<import('chaite').User> | null}
|
* @returns {Promise<import('chaite').User> | null}
|
||||||
*/
|
*/
|
||||||
export async function authCloud (apiKey = ChatGPTConfig.cloudApiKey) {
|
export async function authCloud (apiKey = ChatGPTConfig.chaite.cloudApiKey) {
|
||||||
await Chaite.getInstance().auth(apiKey)
|
await Chaite.getInstance().auth(apiKey)
|
||||||
return Chaite.getInstance().getToolsManager().cloudService.getUser()
|
return Chaite.getInstance().getToolsManager().cloudService.getUser()
|
||||||
}
|
}
|
||||||
|
|
@ -56,7 +56,10 @@ export async function initRagManager (model, dimensions) {
|
||||||
}
|
}
|
||||||
const channel = channels[0]
|
const channel = channels[0]
|
||||||
const client = await getIClientByChannel(channel)
|
const client = await getIClientByChannel(channel)
|
||||||
const result = await client.getEmbedding(text)
|
const result = await client.getEmbedding(text, {
|
||||||
|
model,
|
||||||
|
dimensions
|
||||||
|
})
|
||||||
return result.embeddings[0]
|
return result.embeddings[0]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -90,7 +93,7 @@ export async function initRagManager (model, dimensions) {
|
||||||
return results
|
return results
|
||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
const vectorDBPath = path.resolve('./plugins/chatgpt-plugin', ChatGPTConfig.dataDir, 'vector_index')
|
const vectorDBPath = path.resolve('./plugins/chatgpt-plugin', ChatGPTConfig.chaite.dataDir, 'vector_index')
|
||||||
if (!fs.existsSync(vectorDBPath)) {
|
if (!fs.existsSync(vectorDBPath)) {
|
||||||
fs.mkdirSync(vectorDBPath, { recursive: true })
|
fs.mkdirSync(vectorDBPath, { recursive: true })
|
||||||
}
|
}
|
||||||
|
|
@ -103,12 +106,12 @@ export async function initRagManager (model, dimensions) {
|
||||||
export async function initChaite () {
|
export async function initChaite () {
|
||||||
await ChatGPTStorage.init()
|
await ChatGPTStorage.init()
|
||||||
const channelsManager = await ChannelsManager.init(new LowDBChannelStorage(ChatGPTStorage), new DefaultChannelLoadBalancer())
|
const channelsManager = await ChannelsManager.init(new LowDBChannelStorage(ChatGPTStorage), new DefaultChannelLoadBalancer())
|
||||||
const toolsDir = path.resolve('./plugins/chatgpt-plugin', ChatGPTConfig.toolsDirPath)
|
const toolsDir = path.resolve('./plugins/chatgpt-plugin', ChatGPTConfig.chaite.toolsDirPath)
|
||||||
if (!fs.existsSync(toolsDir)) {
|
if (!fs.existsSync(toolsDir)) {
|
||||||
fs.mkdirSync(toolsDir, { recursive: true })
|
fs.mkdirSync(toolsDir, { recursive: true })
|
||||||
}
|
}
|
||||||
const toolsManager = await ToolManager.init(toolsDir, new LowDBToolsStorage(ChatGPTStorage))
|
const toolsManager = await ToolManager.init(toolsDir, new LowDBToolsStorage(ChatGPTStorage))
|
||||||
const processorsDir = path.resolve('./plugins/chatgpt-plugin', ChatGPTConfig.processorsDirPath)
|
const processorsDir = path.resolve('./plugins/chatgpt-plugin', ChatGPTConfig.chaite.processorsDirPath)
|
||||||
if (!fs.existsSync(processorsDir)) {
|
if (!fs.existsSync(processorsDir)) {
|
||||||
fs.mkdirSync(processorsDir, { recursive: true })
|
fs.mkdirSync(processorsDir, { recursive: true })
|
||||||
}
|
}
|
||||||
|
|
@ -120,10 +123,10 @@ export async function initChaite () {
|
||||||
let chaite = Chaite.init(channelsManager, toolsManager, processorsManager, chatPresetManager,
|
let chaite = Chaite.init(channelsManager, toolsManager, processorsManager, chatPresetManager,
|
||||||
userModeSelector, userStateStorage, historyManager, logger)
|
userModeSelector, userStateStorage, historyManager, logger)
|
||||||
logger.info('Chaite 初始化完成')
|
logger.info('Chaite 初始化完成')
|
||||||
chaite.setCloudService(ChatGPTConfig.cloudBaseUrl)
|
chaite.setCloudService(ChatGPTConfig.chaite.cloudBaseUrl)
|
||||||
logger.info('Chaite.Cloud 初始化完成')
|
logger.info('Chaite.Cloud 初始化完成')
|
||||||
ChatGPTConfig.cloudApiKey && await chaite.auth(ChatGPTConfig.cloudApiKey)
|
ChatGPTConfig.chaite.cloudApiKey && await chaite.auth(ChatGPTConfig.chaite.cloudApiKey)
|
||||||
await initRagManager(ChatGPTConfig.embeddingModel, ChatGPTConfig.dimensions)
|
await initRagManager(ChatGPTConfig.llm.embeddingModel, ChatGPTConfig.dimensions)
|
||||||
// 监听Chaite配置变化,同步需要同步的配置
|
// 监听Chaite配置变化,同步需要同步的配置
|
||||||
chaite.on('config-change', obj => {
|
chaite.on('config-change', obj => {
|
||||||
const { key, newVal, oldVal } = obj
|
const { key, newVal, oldVal } = obj
|
||||||
|
|
|
||||||
|
|
@ -348,7 +348,7 @@ export class LowDBCollection {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const dataDir = path.resolve('./plugins/chatgpt-plugin', ChatGPTConfig.dataDir)
|
const dataDir = path.resolve('./plugins/chatgpt-plugin', ChatGPTConfig.chaite.dataDir)
|
||||||
if (!fs.existsSync(dataDir)) {
|
if (!fs.existsSync(dataDir)) {
|
||||||
fs.mkdirSync(dataDir, { recursive: true })
|
fs.mkdirSync(dataDir, { recursive: true })
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue