| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116 |
- import time
- from math import log
- import os
- from dotenv import load_dotenv
- from enums.common_enums import BusinessSceneEnum, ErrorCodeEnum, UserRoleEnum
- from functools import wraps
- from logger.loggering import server_logger
- from utils.common import handler_err
- from base.config import config_handler
- # 获取当前文件的目录
- current_dir = os.path.dirname(__file__)
- # 构建到 .env 的相对路径
- conf_file_path = os.path.join(current_dir , '../', '.env')
- #server_logger.info(f"当前目录: {conf_file_path}")
- # 加载环境变量
- load_dotenv(dotenv_path=conf_file_path)
- def verify_param(param: dict):
- """
- 验证请求参数
- """
- input_data = param.get("input")
- session_id = param.get("config").get("session_id")
- businessScene = param.get("businessScene")
- if input_data is None:
- raise ValueError(ErrorCodeEnum.INPUT_INFO_EMPTY.__str__)
- if session_id is None:
- raise ValueError(ErrorCodeEnum.SESSION_ID_EMPTY.__str__)
- # 是否可使用默认的通用模型查询 默认 False
- use_default_common_model_query = os.environ.get("USE_DEFAULT_COMMON_MODEL_QUERY" , False)
- server_logger.info(f"使用可默认的通用模型查询: {use_default_common_model_query}")
-
- if not use_default_common_model_query:
- if businessScene is None:
- raise ValueError(ErrorCodeEnum.BUSINSESS_SCENE_EMPTY.__str__)
- if not BusinessSceneEnum.get_item_by_code(param.get('businessScene')):
- raise ValueError(ErrorCodeEnum.BUSINSESS_SCENE_ERROR.__str__)
- def get_system_prompt() -> str:
- """
- 获取系统提示语
- """
- system_prompt = config_handler.get("system", "SYSTEM_PROMPT")
- server_logger.info(f"获取系统提示语: {system_prompt}")
- return str(system_prompt)
- def get_business_scene_prompt(business_scene):
- """
- 获取业务场景的提示语
- """
- # 默认公共查询提示语
- business_scene_enum = BusinessSceneEnum.COMMON_MODEL_QUERY
- prompt_file = business_scene_enum.prompt_file
- # 是否可使用默认的通用模型查询 默认 False
- use_default_common_model_query = os.environ.get("USE_DEFAULT_COMMON_MODEL_QUERY" , False)
- if not business_scene is None:
- business_scene_enum = BusinessSceneEnum.get_item_by_code(business_scene)
- if not business_scene_enum:
- raise ValueError("未找到枚举值")
- if business_scene_enum.prompt_file is None:
- raise ValueError("业务场景不存在")
- prompt_file = business_scene_enum.prompt_file
-
- prompt_file = os.path.join(current_dir , '../', 'config', 'prompt' , prompt_file)
- server_logger.info(f"获取业务场景提示语: {prompt_file}")
- if not os.path.exists(prompt_file):
- raise ValueError("业务场景不存在")
-
- try:
- with open(prompt_file, 'r', encoding='utf-8') as f:
- return business_scene_enum , '\n'.join(f.readlines())
- except Exception as e:
- handler_err(server_logger, e,err_name="get_business_scene_prompt")
- server_logger.error(f"获取业务场景提示语失败: {e}")
- raise e
- def get_fixed_problem_answer_txt_content(file_name: str):
- """
- 获取固定问题答案内容
- """
- file_name = file_name+".txt"
- answer_txt_file = os.path.join(current_dir , '../', 'config', 'fixed_answer' , file_name)
- server_logger.info(f"固定回答文本内容: {answer_txt_file}")
- if not os.path.exists(answer_txt_file):
- raise ValueError("固定回答文本不存在")
-
- try:
- result_list = []
- with open(answer_txt_file, 'r', encoding='utf-8') as f:
- result_list=f.readlines()
- return "".join(result_list)
- except Exception as e:
- handler_err(server_logger, e,err_name="get_fixed_problem_answer_txt_content")
- server_logger.error(f"获取固定回答文本失败: {e}")
- raise e
- def verify_user_role(user_role: str):
- """
- 验证用户角色
- 普通用户 common ,不能检索查询知识库
- 租户用户 tenant ,只有租户才能检索查询知识库
- """
- if user_role in [UserRoleEnum.TENANT.code]:
- return True
-
- return False
|