diff --git a/client/data/config.json b/client/data/config.json index 55cbc458e..fa8bfdddb 100644 --- a/client/data/config.json +++ b/client/data/config.json @@ -10,8 +10,9 @@ }, "SystemParams": { "beianText": "", - "googleVerKey": "", "baiduTongji": "", + "googleClientVerKey": "", + "googleServiceVerKey": "", "vectorMaxProcess": 15, "qaMaxProcess": 15, "pgIvfflatProbe": 20, diff --git a/client/src/hooks/useSendCode.ts b/client/src/hooks/useSendCode.ts index ee43b5a31..8bb9de2e8 100644 --- a/client/src/hooks/useSendCode.ts +++ b/client/src/hooks/useSendCode.ts @@ -4,7 +4,7 @@ import { UserAuthTypeEnum } from '@/constants/common'; let timer: any; import { useToast } from './useToast'; import { getClientToken } from '@/utils/plugin/google'; -import { googleVerKey } from '@/store/static'; +import { googleClientVerKey } from '@/store/static'; export const useSendCode = () => { const { toast } = useToast(); @@ -27,7 +27,7 @@ export const useSendCode = () => { await sendAuthCode({ username, type, - googleToken: await getClientToken(googleVerKey) + googleToken: await getClientToken(googleClientVerKey) }); setCodeCountDown(60); timer = setInterval(() => { diff --git a/client/src/pages/_app.tsx b/client/src/pages/_app.tsx index c8dffa156..7fc40e8be 100644 --- a/client/src/pages/_app.tsx +++ b/client/src/pages/_app.tsx @@ -31,7 +31,7 @@ const queryClient = new QueryClient({ }); function App({ Component, pageProps, isPc }: AppProps & { isPc?: boolean; response: any }) { - const [googleVerKey, setGoogleVerKey] = useState(); + const [googleClientVerKey, setGoogleVerKey] = useState(); const [baiduTongji, setBaiduTongji] = useState(); const { initIsPc } = useGlobalStore(); @@ -42,9 +42,9 @@ function App({ Component, pageProps, isPc }: AppProps & { isPc?: boolean; respon useEffect(() => { (async () => { const { - systemEnv: { googleVerKey, baiduTongji } + systemEnv: { googleClientVerKey, baiduTongji } } = await clientInitData(); - setGoogleVerKey(googleVerKey); + setGoogleVerKey(googleClientVerKey); setBaiduTongji(baiduTongji); })(); }, []); @@ -65,10 +65,10 @@ function App({ Component, pageProps, isPc }: AppProps & { isPc?: boolean; respon {baiduTongji && } - {googleVerKey && ( + {googleClientVerKey && ( <> diff --git a/client/src/pages/api/user/sendAuthCode.ts b/client/src/pages/api/user/sendAuthCode.ts index f65f1cbde..c0a95ac23 100644 --- a/client/src/pages/api/user/sendAuthCode.ts +++ b/client/src/pages/api/user/sendAuthCode.ts @@ -23,9 +23,9 @@ export default async function handler(req: NextApiRequest, res: NextApiResponse) } // google auth - process.env.SERVICE_GOOGLE_VER_TOKEN && + global.systemEnv.googleServiceVerKey && (await authGoogleToken({ - secret: process.env.SERVICE_GOOGLE_VER_TOKEN, + secret: global.systemEnv.googleServiceVerKey, response: googleToken, remoteip: requestIp.getClientIp(req) || undefined })); diff --git a/client/src/service/events/generateQA.ts b/client/src/service/events/generateQA.ts index 7a4c286f0..184e0c8cd 100644 --- a/client/src/service/events/generateQA.ts +++ b/client/src/service/events/generateQA.ts @@ -7,6 +7,8 @@ import { sendInform } from '@/pages/api/user/inform/send'; import { authBalanceByUid } from '../utils/auth'; import { axiosConfig, getOpenAIApi } from '../ai/openai'; import { ChatCompletionRequestMessage } from 'openai'; +import { modelToolMap } from '@/utils/plugin'; +import { gptMessage2ChatType } from '@/utils/adapt'; const reduceQueue = () => { global.qaQueueLen = global.qaQueueLen > 0 ? global.qaQueueLen - 1 : 0; @@ -58,6 +60,8 @@ export async function generateQA(): Promise { // 请求 chatgpt 获取回答 const response = await Promise.all( [data.q].map((text) => { + const modelTokenLimit = + chatModels.find((item) => item.model === data.model)?.contextMaxToken || 16000; const messages: ChatCompletionRequestMessage[] = [ { role: 'system', @@ -74,13 +78,20 @@ A2: content: text } ]; + + const promptsToken = modelToolMap.countTokens({ + messages: gptMessage2ChatType(messages) + }); + const maxToken = modelTokenLimit - promptsToken; + return chatAPI .createChatCompletion( { model: data.model, temperature: 0.8, messages, - stream: false + stream: false, + max_tokens: maxToken }, { timeout: 480000, diff --git a/client/src/store/static.ts b/client/src/store/static.ts index 5d7de1a3b..7a54b2963 100644 --- a/client/src/store/static.ts +++ b/client/src/store/static.ts @@ -9,7 +9,7 @@ import { delay } from '@/utils/tools'; import { FeConfigsType } from '@/types'; export let beianText: string | undefined; -export let googleVerKey: string | undefined; +export let googleClientVerKey: string | undefined; export let baiduTongji: string | undefined; export let chatModelList: ChatModelItemType[] = []; export let qaModelList: QAModelItemType[] = []; @@ -26,10 +26,9 @@ export const clientInitData = async (): Promise => { qaModelList = res.qaModels; vectorModelList = res.vectorModels; feConfigs = res.feConfigs; - beianText = res.systemEnv.beianText; - googleVerKey = res.systemEnv.googleVerKey; - baiduTongji = res.systemEnv.baiduTongji; - console.log(res); + beianText = res.systemEnv?.beianText; + googleClientVerKey = res.systemEnv?.googleClientVerKey; + baiduTongji = res.systemEnv?.baiduTongji; return res; } catch (error) { diff --git a/client/src/types/index.d.ts b/client/src/types/index.d.ts index 78c8a5ede..402142e03 100644 --- a/client/src/types/index.d.ts +++ b/client/src/types/index.d.ts @@ -24,7 +24,8 @@ export type FeConfigsType = { }; export type SystemEnvType = { beianText?: string; - googleVerKey?: string; + googleClientVerKey?: string; + googleServiceVerKey?: string; baiduTongji?: string; vectorMaxProcess: number; qaMaxProcess: number; diff --git a/client/src/utils/plugin/google.ts b/client/src/utils/plugin/google.ts index 1e1e3788e..513883c71 100644 --- a/client/src/utils/plugin/google.ts +++ b/client/src/utils/plugin/google.ts @@ -1,12 +1,13 @@ import axios from 'axios'; import { Obj2Query } from '../tools'; -export const getClientToken = (googleVerKey: string) => { - if (typeof window.grecaptcha === 'undefined' || !window.grecaptcha?.ready) return ''; +export const getClientToken = (googleClientVerKey?: string) => { + if (!googleClientVerKey || typeof window.grecaptcha === 'undefined' || !window.grecaptcha?.ready) + return ''; return new Promise((resolve, reject) => { window.grecaptcha.ready(async () => { try { - const token = await window.grecaptcha.execute(googleVerKey, { + const token = await window.grecaptcha.execute(googleClientVerKey, { action: 'submit' }); resolve(token);