const default_max_token = 1024 const getContextContent = (context, max_token=default_max_token) => { if (context && context.length > 0) { let id = 0 let len = context.length let contextContent = '' while(contextContent.length < max_token && id < len) { let tempContext = context[id].page_content if (tempContext) { const regex = /(<([^>]+)>)/ig; tempContext = tempContext.replace(regex, ' '); if (tempContext.length + contextContent.length < max_token) { contextContent = contextContent + '\n' + tempContext } } id++ } return contextContent } else { return '' } } export default { getPromptByTemplate: (config, context, prompt, history) => { if (config.api_prompt_prefix) { prompt = config?.api_prompt_prefix + ' ' + prompt } if (config?.prompt_template) { const contextContent = getContextContent(context, config?.max_request_len??1024) return config?.prompt_template.replace(/\{question\}/ig, prompt).replace(/\{context\}/ig, contextContent) } else { return prompt } }, getPromptByChatMode (config, context, history) { const history_length = Math.min(Math.max(parseInt(config?.history_length??4), 4), 10) let message = [] if (history && history.length >= 2) { const end = history.length - 2 // 结束位置 const start = Math.max(history.length - 2 - history_length + 1, 0) // 开始位置 for(let id = start; id <= end; id++) { const item = history[id] if(!item?.ignore??false) { message.push({ "role": item.user === 'AI' ? "system" : "user", "content": item.message }) } } } if (config?.prompt_template) { const contextContent = getContextContent(context, config?.max_request_len??1024) message.unshift({ "role": "system", "content": config.prompt_template.replace(/\{question\}/ig, '').replace(/\{context\}/ig, contextContent).replace(/\{user_call_name\}/ig, config.user_call_name) }) } if (message.length > 0 && config.api_prompt_prefix) { message[message.length - 1].content = config.api_prompt_prefix + message[message.length - 1].content } return message } }