diff --git a/.env.template b/.env.template index 0d1b43381..6ea350d67 100644 --- a/.env.template +++ b/.env.template @@ -1,6 +1,6 @@ AXIOS_PROXY_HOST=127.0.0.1 -AXIOS_PROXY_PORT=33210 -MONGODB_URI= +AXIOS_PROXY_PORT_FAST=7890 +AXIOS_PROXY_PORT_NORMAL=7890 MY_MAIL= MAILE_CODE= TOKEN_KEY= diff --git a/src/pages/api/chat/chatGpt.ts b/src/pages/api/chat/chatGpt.ts index 00b9b917f..c9cf6b6a0 100644 --- a/src/pages/api/chat/chatGpt.ts +++ b/src/pages/api/chat/chatGpt.ts @@ -96,7 +96,7 @@ export default async function handler(req: NextApiRequest, res: NextApiResponse) { timeout: 40000, responseType: 'stream', - httpsAgent + httpsAgent: httpsAgent(!userApiKey) } ); diff --git a/src/pages/api/chat/vectorGpt.ts b/src/pages/api/chat/vectorGpt.ts index 64a70d16d..92c594f23 100644 --- a/src/pages/api/chat/vectorGpt.ts +++ b/src/pages/api/chat/vectorGpt.ts @@ -141,7 +141,7 @@ export default async function handler(req: NextApiRequest, res: NextApiResponse) { timeout: 40000, responseType: 'stream', - httpsAgent + httpsAgent: httpsAgent(!userApiKey) } ); diff --git a/src/pages/api/model/data/fetchingUrlData.ts b/src/pages/api/model/data/fetchingUrlData.ts index 9c8fba4a0..5919b54b4 100644 --- a/src/pages/api/model/data/fetchingUrlData.ts +++ b/src/pages/api/model/data/fetchingUrlData.ts @@ -22,7 +22,7 @@ export default async function handler(req: NextApiRequest, res: NextApiResponse) const data = await axios .get(url, { - httpsAgent + httpsAgent: httpsAgent(false) }) .then((res) => res.data as string); diff --git a/src/pages/api/model/del.ts b/src/pages/api/model/del.ts index e97d5557a..be2780619 100644 --- a/src/pages/api/model/del.ts +++ b/src/pages/api/model/del.ts @@ -68,12 +68,14 @@ export default async function handler(req: NextApiRequest, res: NextApiResponse< if (training) { const { openai } = await getUserApiOpenai(userId); // 获取训练记录 - const tuneRecord = await openai.retrieveFineTune(training.tuneId, { httpsAgent }); + const tuneRecord = await openai.retrieveFineTune(training.tuneId, { + httpsAgent: httpsAgent(false) + }); // 删除训练文件 - openai.deleteFile(tuneRecord.data.training_files[0].id, { httpsAgent }); + openai.deleteFile(tuneRecord.data.training_files[0].id, { httpsAgent: httpsAgent(false) }); // 取消训练 - openai.cancelFineTune(training.tuneId, { httpsAgent }); + openai.cancelFineTune(training.tuneId, { httpsAgent: httpsAgent(false) }); } // 删除对应训练记录 diff --git a/src/pages/api/model/train/putTrainStatus.ts b/src/pages/api/model/train/putTrainStatus.ts index 413055c90..cde2869d5 100644 --- a/src/pages/api/model/train/putTrainStatus.ts +++ b/src/pages/api/model/train/putTrainStatus.ts @@ -46,11 +46,13 @@ export default async function handler(req: NextApiRequest, res: NextApiResponse) const { openai } = await getUserApiOpenai(userId); // 获取 openai 的训练情况 - const { data } = await openai.retrieveFineTune(training.tuneId, { httpsAgent }); + const { data } = await openai.retrieveFineTune(training.tuneId, { + httpsAgent: httpsAgent(false) + }); // console.log(data); if (data.status === OpenAiTuneStatusEnum.succeeded) { // 删除训练文件 - openai.deleteFile(data.training_files[0].id, { httpsAgent }); + openai.deleteFile(data.training_files[0].id, { httpsAgent: httpsAgent(false) }); // 更新模型状态和模型内容 await Model.findByIdAndUpdate(modelId, { @@ -75,7 +77,7 @@ export default async function handler(req: NextApiRequest, res: NextApiResponse) /* 取消微调 */ if (data.status === OpenAiTuneStatusEnum.cancelled) { // 删除训练文件 - openai.deleteFile(data.training_files[0].id, { httpsAgent }); + openai.deleteFile(data.training_files[0].id, { httpsAgent: httpsAgent(false) }); // 更新模型 await Model.findByIdAndUpdate(modelId, { diff --git a/src/pages/api/model/train/train.ts b/src/pages/api/model/train/train.ts index 814f31a75..9a6d9ed71 100644 --- a/src/pages/api/model/train/train.ts +++ b/src/pages/api/model/train/train.ts @@ -75,7 +75,7 @@ export default async function handler(req: NextApiRequest, res: NextApiResponse) // @ts-ignore fs.createReadStream(file.filepath), 'fine-tune', - { httpsAgent } + { httpsAgent: httpsAgent(false) } ); uploadFileId = uploadRes.data.id; // 记录上传文件的 ID @@ -87,7 +87,7 @@ export default async function handler(req: NextApiRequest, res: NextApiResponse) suffix: model.name, n_epochs: 4 }, - { httpsAgent } + { httpsAgent: httpsAgent(false) } ); trainId = trainRes.data.id; // 记录训练 ID @@ -117,9 +117,9 @@ export default async function handler(req: NextApiRequest, res: NextApiResponse) // @ts-ignore if (openai) { // @ts-ignore - uploadFileId && openai.deleteFile(uploadFileId, { httpsAgent }); + uploadFileId && openai.deleteFile(uploadFileId, { httpsAgent: httpsAgent(false) }); // @ts-ignore - trainId && openai.cancelFineTune(trainId, { httpsAgent }); + trainId && openai.cancelFineTune(trainId, { httpsAgent: httpsAgent(false) }); } jsonRes(res, { diff --git a/src/pages/api/openapi/chat/lafGpt.ts b/src/pages/api/openapi/chat/lafGpt.ts index 6c3bd830d..1b8255649 100644 --- a/src/pages/api/openapi/chat/lafGpt.ts +++ b/src/pages/api/openapi/chat/lafGpt.ts @@ -111,7 +111,7 @@ export default async function handler(req: NextApiRequest, res: NextApiResponse) }, { timeout: 120000, - httpsAgent + httpsAgent: httpsAgent(true) } ); @@ -201,7 +201,7 @@ export default async function handler(req: NextApiRequest, res: NextApiResponse) { timeout: 120000, responseType: isStream ? 'stream' : 'json', - httpsAgent + httpsAgent: httpsAgent(true) } ); diff --git a/src/pages/api/openapi/chat/vectorGpt.ts b/src/pages/api/openapi/chat/vectorGpt.ts index 934131379..5a04f2ff1 100644 --- a/src/pages/api/openapi/chat/vectorGpt.ts +++ b/src/pages/api/openapi/chat/vectorGpt.ts @@ -163,7 +163,7 @@ export default async function handler(req: NextApiRequest, res: NextApiResponse) { timeout: 120000, responseType: isStream ? 'stream' : 'json', - httpsAgent + httpsAgent: httpsAgent(true) } ); diff --git a/src/service/events/generateAbstract.ts b/src/service/events/generateAbstract.ts index d9ca38418..d432e6bb8 100644 --- a/src/service/events/generateAbstract.ts +++ b/src/service/events/generateAbstract.ts @@ -76,7 +76,7 @@ export async function generateAbstract(next = false): Promise { }, { timeout: 120000, - httpsAgent + httpsAgent: httpsAgent(!userApiKey) } ); diff --git a/src/service/events/generateQA.ts b/src/service/events/generateQA.ts index 610919d9d..afeea837e 100644 --- a/src/service/events/generateQA.ts +++ b/src/service/events/generateQA.ts @@ -91,7 +91,7 @@ export async function generateQA(next = false): Promise { }, { timeout: 180000, - httpsAgent + httpsAgent: httpsAgent(!userApiKey) } ) .then((res) => { diff --git a/src/service/mongo.ts b/src/service/mongo.ts index 0d6963603..610a1c5e8 100644 --- a/src/service/mongo.ts +++ b/src/service/mongo.ts @@ -1,7 +1,7 @@ import mongoose from 'mongoose'; import { generateQA } from './events/generateQA'; -import { generateAbstract } from './events/generateAbstract'; import { generateVector } from './events/generateVector'; +import tunnel from 'tunnel'; /** * 连接 MongoDB 数据库 @@ -28,8 +28,27 @@ export async function connectToDatabase(): Promise { } generateQA(); - // generateAbstract(); generateVector(true); + + // 创建代理对象 + if ( + process.env.AXIOS_PROXY_HOST && + process.env.AXIOS_PROXY_PORT_FAST && + process.env.AXIOS_PROXY_PORT_NORMAL + ) { + global.httpsAgentFast = tunnel.httpsOverHttp({ + proxy: { + host: process.env.AXIOS_PROXY_HOST, + port: +process.env.AXIOS_PROXY_PORT_FAST + } + }); + global.httpsAgentNormal = tunnel.httpsOverHttp({ + proxy: { + host: process.env.AXIOS_PROXY_HOST, + port: +process.env.AXIOS_PROXY_PORT_NORMAL + } + }); + } } export * from './models/authCode'; diff --git a/src/service/utils/openai.ts b/src/service/utils/openai.ts index c15478778..4c0fcdf8a 100644 --- a/src/service/utils/openai.ts +++ b/src/service/utils/openai.ts @@ -85,7 +85,7 @@ export const openaiCreateEmbedding = async ({ }, { timeout: 60000, - httpsAgent + httpsAgent: httpsAgent(isPay) } ) .then((res) => ({ diff --git a/src/service/utils/tools.ts b/src/service/utils/tools.ts index 1bb8a9709..6cfb82d69 100644 --- a/src/service/utils/tools.ts +++ b/src/service/utils/tools.ts @@ -83,15 +83,8 @@ export const authOpenApiKey = async (req: NextApiRequest) => { }; /* 代理 */ -export const httpsAgent = - process.env.AXIOS_PROXY_HOST && process.env.AXIOS_PROXY_PORT - ? tunnel.httpsOverHttp({ - proxy: { - host: process.env.AXIOS_PROXY_HOST, - port: +process.env.AXIOS_PROXY_PORT - } - }) - : undefined; +export const httpsAgent = (fast: boolean) => + fast ? global.httpsAgentFast : global.httpsAgentNormal; /* tokens 截断 */ export const openaiChatFilter = (prompts: ChatItemType[], maxTokens: number) => { diff --git a/src/types/index.d.ts b/src/types/index.d.ts index 75fef8231..8bbb57ee8 100644 --- a/src/types/index.d.ts +++ b/src/types/index.d.ts @@ -1,5 +1,6 @@ import type { Mongoose } from 'mongoose'; import type { RedisClientType } from 'redis'; +import type { Agent } from 'http'; declare global { var mongodb: Mongoose | string | null; @@ -8,6 +9,9 @@ declare global { var generatingAbstract: boolean; var generatingVector: boolean; var QRCode: any; + var httpsAgentFast: Agent; + var httpsAgentNormal: Agent; + interface Window { ['pdfjs-dist/build/pdf']: any; }