diff --git a/client/public/docs/chatProblem.md b/client/public/docs/chatProblem.md index 6a14c5d25..34a98accb 100644 --- a/client/public/docs/chatProblem.md +++ b/client/public/docs/chatProblem.md @@ -15,7 +15,8 @@ | 计费项 | 价格: 元/ 1K tokens(包含上下文)| | --- | --- | | 知识库 - 索引 | 0.001 | -| chatgpt - 对话 | 0.025 | +| chatgpt - 对话 | 0.022 | +| chatgpt16K - 对话 | 0.025 | | gpt4 - 对话 | 0.5 | | 文件拆分 | 0.025 | diff --git a/client/public/docs/intro.md b/client/public/docs/intro.md index 49bb21015..0eb929950 100644 --- a/client/public/docs/intro.md +++ b/client/public/docs/intro.md @@ -19,7 +19,8 @@ FastGpt 项目完全开源,可随意私有化部署,去除平台风险忧虑 | 计费项 | 价格: 元/ 1K tokens(包含上下文)| | --- | --- | | 知识库 - 索引 | 0.001 | -| chatgpt - 对话 | 0.025 | +| chatgpt - 对话 | 0.022 | +| chatgpt16K - 对话 | 0.025 | | gpt4 - 对话 | 0.5 | | 文件拆分 | 0.025 | diff --git a/client/src/constants/model.ts b/client/src/constants/model.ts index 073190bd2..95efdf870 100644 --- a/client/src/constants/model.ts +++ b/client/src/constants/model.ts @@ -7,7 +7,8 @@ export const embeddingPrice = 0.1; export type EmbeddingModelType = 'text-embedding-ada-002'; export enum OpenAiChatEnum { - 'GPT35' = 'gpt-3.5-turbo-16k', + 'GPT35' = 'gpt-3.5-turbo', + 'GPT3516k' = 'gpt-3.5-turbo-16k', 'GPT4' = 'gpt-4', 'GPT432k' = 'gpt-4-32k' } @@ -29,7 +30,15 @@ export type ChatModelItemType = { export const ChatModelMap = { [OpenAiChatEnum.GPT35]: { chatModel: OpenAiChatEnum.GPT35, - name: 'ChatGpt', + name: 'Gpt35-4k', + contextMaxToken: 4096, + systemMaxToken: 2400, + maxTemperature: 1.2, + price: 2.2 + }, + [OpenAiChatEnum.GPT3516k]: { + chatModel: OpenAiChatEnum.GPT3516k, + name: 'Gpt35-16k', contextMaxToken: 16000, systemMaxToken: 8000, maxTemperature: 1.2, diff --git a/client/src/pages/_app.tsx b/client/src/pages/_app.tsx index 6968709fa..04d5c31a4 100644 --- a/client/src/pages/_app.tsx +++ b/client/src/pages/_app.tsx @@ -49,14 +49,20 @@ export default function App({ Component, pageProps }: AppProps) { /> - - - + + + {googleVerKey && ( - + <> + + + )} diff --git a/client/src/pages/api/openapi/kb/pushData.ts b/client/src/pages/api/openapi/kb/pushData.ts index 59a7a1c62..7ca3b8e4f 100644 --- a/client/src/pages/api/openapi/kb/pushData.ts +++ b/client/src/pages/api/openapi/kb/pushData.ts @@ -78,7 +78,7 @@ export async function pushDataToKb({ if (mode === TrainingModeEnum.qa) { // count token - const token = modelToolMap[OpenAiChatEnum.GPT35].countTokens({ + const token = modelToolMap[OpenAiChatEnum.GPT3516k].countTokens({ messages: [{ obj: 'System', value: item.q }] }); if (token > modeMaxToken[TrainingModeEnum.qa]) { diff --git a/client/src/pages/api/system/getModels.ts b/client/src/pages/api/system/getModels.ts index 843d5c512..58d331e26 100644 --- a/client/src/pages/api/system/getModels.ts +++ b/client/src/pages/api/system/getModels.ts @@ -8,6 +8,7 @@ export default async function handler(req: NextApiRequest, res: NextApiResponse) const chatModelList: ChatModelItemType[] = []; if (global.systemEnv.openAIKeys) { + chatModelList.push(ChatModelMap[OpenAiChatEnum.GPT3516k]); chatModelList.push(ChatModelMap[OpenAiChatEnum.GPT35]); } if (global.systemEnv.gpt4Key) { diff --git a/client/src/pages/kb/components/SelectFileModal.tsx b/client/src/pages/kb/components/SelectFileModal.tsx index 925b218f6..f1b7d636e 100644 --- a/client/src/pages/kb/components/SelectFileModal.tsx +++ b/client/src/pages/kb/components/SelectFileModal.tsx @@ -31,12 +31,12 @@ const modeMap = { [TrainingModeEnum.qa]: { maxLen: 8000, slideLen: 3000, - price: ChatModelMap[OpenAiChatEnum.GPT35].price, + price: ChatModelMap[OpenAiChatEnum.GPT3516k].price, isPrompt: true }, [TrainingModeEnum.index]: { - maxLen: 1400, - slideLen: 700, + maxLen: 1000, + slideLen: 500, price: embeddingPrice, isPrompt: false } diff --git a/client/src/pages/number/components/PayModal.tsx b/client/src/pages/number/components/PayModal.tsx index 67cae9f4e..6b7ba0b33 100644 --- a/client/src/pages/number/components/PayModal.tsx +++ b/client/src/pages/number/components/PayModal.tsx @@ -114,7 +114,8 @@ const PayModal = ({ onClose }: { onClose: () => void }) => { | 计费项 | 价格: 元/ 1K tokens(包含上下文)| | --- | --- | | 知识库 - 索引 | 0.001 | -| chatgpt - 对话 | 0.025 | +| chatgpt - 对话 | 0.022 | +| chatgpt16K - 对话 | 0.025 | | gpt4 - 对话 | 0.5 | | 文件拆分 | 0.025 |`} /> diff --git a/client/src/service/events/generateQA.ts b/client/src/service/events/generateQA.ts index f603a6bcd..2c7fcc9ee 100644 --- a/client/src/service/events/generateQA.ts +++ b/client/src/service/events/generateQA.ts @@ -87,7 +87,7 @@ export async function generateQA(): Promise { // 请求 chatgpt 获取回答 const response = await Promise.all( [data.q].map((text) => - modelServiceToolMap[OpenAiChatEnum.GPT35] + modelServiceToolMap[OpenAiChatEnum.GPT3516k] .chatCompletion({ apiKey: systemAuthKey, temperature: 0.8, diff --git a/client/src/service/events/pushBill.ts b/client/src/service/events/pushBill.ts index 52f4171d1..110a9b10b 100644 --- a/client/src/service/events/pushBill.ts +++ b/client/src/service/events/pushBill.ts @@ -104,7 +104,7 @@ export const pushSplitDataBill = async ({ await connectToDatabase(); // 获取模型单价格, 都是用 gpt35 拆分 - const unitPrice = ChatModelMap[OpenAiChatEnum.GPT35].price || 3; + const unitPrice = ChatModelMap[OpenAiChatEnum.GPT3516k].price || 3; // 计算价格 const price = unitPrice * totalTokens; @@ -112,7 +112,7 @@ export const pushSplitDataBill = async ({ const res = await Bill.create({ userId, type, - modelName: OpenAiChatEnum.GPT35, + modelName: OpenAiChatEnum.GPT3516k, textLen, tokenLen: totalTokens, price diff --git a/client/src/service/models/model.ts b/client/src/service/models/model.ts index ba96eb9d2..b4c86ce0b 100644 --- a/client/src/service/models/model.ts +++ b/client/src/service/models/model.ts @@ -57,7 +57,7 @@ const ModelSchema = new Schema({ // 聊天时使用的模型 type: String, enum: Object.keys(ChatModelMap), - default: OpenAiChatEnum.GPT35 + default: OpenAiChatEnum.GPT3516k } }, share: { diff --git a/client/src/service/utils/auth.ts b/client/src/service/utils/auth.ts index 2e534f9de..98787c625 100644 --- a/client/src/service/utils/auth.ts +++ b/client/src/service/utils/auth.ts @@ -162,6 +162,10 @@ export const getApiKey = async ({ userOpenAiKey: user.openaiKey || '', systemAuthKey: getSystemOpenAiKey(type) as string }, + [OpenAiChatEnum.GPT3516k]: { + userOpenAiKey: user.openaiKey || '', + systemAuthKey: getSystemOpenAiKey(type) as string + }, [OpenAiChatEnum.GPT4]: { userOpenAiKey: user.openaiKey || '', systemAuthKey: getGpt4Key() as string diff --git a/client/src/service/utils/chat/index.ts b/client/src/service/utils/chat/index.ts index 51219572d..413cd46f6 100644 --- a/client/src/service/utils/chat/index.ts +++ b/client/src/service/utils/chat/index.ts @@ -48,6 +48,15 @@ export const modelServiceToolMap: Record< ...data }) }, + [OpenAiChatEnum.GPT3516k]: { + chatCompletion: (data: ChatCompletionType) => + chatResponse({ model: OpenAiChatEnum.GPT3516k, ...data }), + streamResponse: (data: StreamResponseType) => + openAiStreamResponse({ + model: OpenAiChatEnum.GPT3516k, + ...data + }) + }, [OpenAiChatEnum.GPT4]: { chatCompletion: (data: ChatCompletionType) => chatResponse({ model: OpenAiChatEnum.GPT4, ...data }), diff --git a/client/src/store/chat.ts b/client/src/store/chat.ts index 3536bc722..e6aabb164 100644 --- a/client/src/store/chat.ts +++ b/client/src/store/chat.ts @@ -53,7 +53,7 @@ const defaultChatData = { intro: '', canUse: false }, - chatModel: OpenAiChatEnum.GPT35, + chatModel: OpenAiChatEnum.GPT3516k, history: [] }; const defaultShareChatData: ShareChatType = { @@ -64,7 +64,7 @@ const defaultShareChatData: ShareChatType = { avatar: '/icon/logo.png', intro: '' }, - chatModel: OpenAiChatEnum.GPT35, + chatModel: OpenAiChatEnum.GPT3516k, history: [] }; diff --git a/client/src/utils/plugin/index.ts b/client/src/utils/plugin/index.ts index a714e2005..7eb59b650 100644 --- a/client/src/utils/plugin/index.ts +++ b/client/src/utils/plugin/index.ts @@ -20,6 +20,11 @@ export const modelToolMap: Record< sliceText: (data) => openAiSliceTextByToken({ model: OpenAiChatEnum.GPT35, ...data }), tokenSlice: (data) => gpt_chatItemTokenSlice({ model: OpenAiChatEnum.GPT35, ...data }) }, + [OpenAiChatEnum.GPT3516k]: { + countTokens: ({ messages }) => countOpenAIToken({ model: OpenAiChatEnum.GPT3516k, messages }), + sliceText: (data) => openAiSliceTextByToken({ model: OpenAiChatEnum.GPT3516k, ...data }), + tokenSlice: (data) => gpt_chatItemTokenSlice({ model: OpenAiChatEnum.GPT3516k, ...data }) + }, [OpenAiChatEnum.GPT4]: { countTokens: ({ messages }) => countOpenAIToken({ model: OpenAiChatEnum.GPT4, messages }), sliceText: (data) => openAiSliceTextByToken({ model: OpenAiChatEnum.GPT4, ...data }), diff --git a/client/src/utils/plugin/openai.ts b/client/src/utils/plugin/openai.ts index 7ebfa46df..e19151d6c 100644 --- a/client/src/utils/plugin/openai.ts +++ b/client/src/utils/plugin/openai.ts @@ -16,6 +16,11 @@ export const getOpenAiEncMap = () => { '<|im_end|>': 100265, '<|im_sep|>': 100266 }), + [OpenAiChatEnum.GPT3516k]: encoding_for_model('gpt-3.5-turbo', { + '<|im_start|>': 100264, + '<|im_end|>': 100265, + '<|im_sep|>': 100266 + }), [OpenAiChatEnum.GPT4]: encoding_for_model('gpt-4', { '<|im_start|>': 100264, '<|im_end|>': 100265, @@ -36,6 +41,11 @@ export const getOpenAiEncMap = () => { '<|im_end|>': 100265, '<|im_sep|>': 100266 }), + [OpenAiChatEnum.GPT3516k]: encoding_for_model('gpt-3.5-turbo', { + '<|im_start|>': 100264, + '<|im_end|>': 100265, + '<|im_sep|>': 100266 + }), [OpenAiChatEnum.GPT4]: encoding_for_model('gpt-4', { '<|im_start|>': 100264, '<|im_end|>': 100265, @@ -55,6 +65,11 @@ export const getOpenAiEncMap = () => { '<|im_end|>': 100265, '<|im_sep|>': 100266 }), + [OpenAiChatEnum.GPT3516k]: encoding_for_model('gpt-3.5-turbo', { + '<|im_start|>': 100264, + '<|im_end|>': 100265, + '<|im_sep|>': 100266 + }), [OpenAiChatEnum.GPT4]: encoding_for_model('gpt-4', { '<|im_start|>': 100264, '<|im_end|>': 100265,