config.py 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381
  1. """
  2. Big Agent 配置文件
  3. ================
  4. 此配置文件包含了Big Agent系统的所有核心配置信息,包括:
  5. - API密钥配置(DeepSeek等)
  6. - 工作流参数设置
  7. - 路径配置
  8. - 环境变量加载
  9. 主要功能:
  10. 1. 从环境变量或.env文件加载API密钥
  11. 2. 定义系统工作流的基本参数
  12. 3. 配置项目文件路径
  13. 4. 验证配置完整性
  14. 作者: Big Agent Team
  15. 版本: 1.0.0
  16. 更新时间: 2024-12-18
  17. """
  18. import os
  19. from dotenv import load_dotenv
  20. # ============================================================================
  21. # 环境变量加载
  22. # ============================================================================
  23. # 从.env文件加载环境变量,确保敏感信息不被硬编码到源码中
  24. load_dotenv()
  25. # ============================================================================
  26. # DeepSeek API 配置
  27. # ============================================================================
  28. # API密钥配置 - 优先从环境变量读取,支持通过.env文件配置
  29. DEEPSEEK_API_KEY = os.getenv("DEEPSEEK_API_KEY")
  30. if not DEEPSEEK_API_KEY:
  31. DEEPSEEK_API_KEY = "sk-d9526c1f01dc488d9aae9624ce4bba14"
  32. # API基础URL配置 - 默认使用DeepSeek官方API地址
  33. DEEPSEEK_BASE_URL = os.getenv("DEEPSEEK_BASE_URL", "https://api.deepseek.com")
  34. # ============================================================================
  35. # 规则引擎 API 配置
  36. # ============================================================================
  37. # 规则引擎基础URL配置 - 用于指标计算和知识库访问
  38. RULES_ENGINE_BASE_URL = os.getenv("RULES_ENGINE_BASE_URL", "http://10.192.72.11:31809")
  39. # ============================================================================
  40. # 项目路径配置
  41. # ============================================================================
  42. # 定义项目中各个功能模块的数据存储路径
  43. PATHS = {
  44. "json_configs": "json_files", # JSON配置文件目录 - 存储指标计算配置
  45. "knowledge_base": "knowledge_base", # 知识库目录 - 存储生成的知识文档
  46. "logs": "logs" # 日志目录 - 存储系统运行日志
  47. }
  48. # ============================================================================
  49. # 目录初始化
  50. # ============================================================================
  51. # 确保所有必要的目录都存在,避免文件操作时的路径错误
  52. for path in PATHS.values():
  53. os.makedirs(path, exist_ok=True)
  54. # ============================================================================
  55. # 配置验证函数
  56. # ============================================================================
  57. # 异常识别配置
  58. anomaly_recognizer_config = {
  59. 'execution_mode': 'direct', # 'direct' 或 'agent',默认使用直接模式
  60. # 启用/禁用识别器
  61. 'enable_balance_recognition': True, # 余额连续性
  62. 'enable_night_recognition': True, # 夜间交易
  63. 'enable_high_frequency_recognition': True, # 高频交易
  64. 'enable_transfer_recognition': True,
  65. 'enable_large_amount_recognition': True,
  66. 'enable_balance_missing_check': True,
  67. 'enable_occasional_high_integer_recognition': True,
  68. 'enable_inactive_account_check': True,
  69. 'enable_low_interest_rate_recognition': True, # 结息异常
  70. 'enable_over_book_transaction_recognition': True, # 疑似过账流水
  71. # ============ 疑似过账流水识别配置 ============
  72. 'over_book_transaction_recognition': { # 配置项名称保持一致
  73. # 启用/禁用选项
  74. 'enabled': True,
  75. # 金额检测参数
  76. 'amount_threshold': 50000.0,
  77. 'amount_tolerance': 0.01,
  78. # 时间窗口参数
  79. 'time_window_days': 7,
  80. 'min_stay_time_hours': 1,
  81. # 合理性判断参数
  82. 'enable_background_check': True,
  83. # 正常业务背景关键词
  84. 'reasonable_background_keywords': [
  85. "工资发放", "奖金发放", "绩效发放", "报销款",
  86. "货款", "租金收入", "投资款", "贷款", "还款",
  87. "采购付款", "支付货款", "缴税", "缴费", "消费",
  88. "日常支出", "生活支出", "业务往来", "贸易款"
  89. ],
  90. # 高风险关键词(过账特征)
  91. 'high_risk_keywords': [
  92. "过账", "过渡", "走账", "倒账", "资金划转",
  93. "临时周转", "无实际业务", "过渡资金", "资金过桥",
  94. "代收代付", "代转", "垫资", "拆借", "内部往来"
  95. ],
  96. # 交易对手关联分析
  97. 'enable_counterparty_check': False,
  98. 'suspicious_counterparty_patterns': [
  99. "相同对手方", "关联公司", "个人账户", "无明显业务关系"
  100. ],
  101. # 严重程度配置
  102. 'severity_level': 'high',
  103. # 模式检测配置
  104. 'detect_single_pair': True,
  105. 'detect_split_pattern': True,
  106. 'detect_merge_pattern': True,
  107. # 详细描述
  108. 'description': '识别疑似过账流水:大额资金在短期内以相同或相近金额进出账户,缺乏真实业务背景',
  109. 'business_rule': '银行流水核查中,若账户在接收大额资金入账后,7个自然日内发生与该入账金额完全一致(或高度接近)的资金流出,且缺乏合理商业背景、实际业务往来支撑或真实收付需求,资金未发生实质性使用或流转,仅通过账户完成过渡划转,可判定为疑似过账流水。',
  110. },
  111. 'low_interest_rate_recognition': {
  112. # 启用/禁用选项
  113. 'enabled': True,
  114. # 利率检测参数
  115. 'base_interest_rate': 0.0035, # 基准活期存款利率(0.35%)
  116. 'threshold_ratio': 0.5, # 异常阈值比例,实际利率低于基准利率的比例时视为异常
  117. # 结息识别关键词
  118. 'interest_keywords': [
  119. '结息', '利息', '存款利息', '存息', '利息收入',
  120. '活期利息', '定期利息', '利息结算'
  121. ],
  122. # 计息参数
  123. 'assumed_interest_days': 90, # 假设计息天数(通常为90天,按季结息)
  124. 'annual_days': 360, # 年计息天数(银行常用360天)
  125. # 计算所需的最小余额
  126. 'min_balance_for_calc': 100.0, # 计算利率所需的最小余额(元)
  127. # 严重程度配置
  128. 'severity_level': 'medium', # 异常严重程度(high/medium/low)
  129. # 模糊匹配设置
  130. 'enable_fuzzy_match': True, # 是否启用模糊匹配
  131. # 详细描述
  132. 'description': '识别银行流水中利率异常低的结息记录,检测结息金额对应的有效利率是否显著低于基准利率',
  133. 'business_rule': '银行流水结息核查中,若实际结息金额对应的有效利率显著低于同档期银行公布的活期存款基准利率,或低于账户所属银行同期执行的活期存款利率标准,且无合理利率下浮依据,可判定为结息记录存在异常',
  134. # 验证规则
  135. 'validation_rules': {
  136. 'base_interest_rate_range': (0.0001, 0.1), # 合理利率范围(0.01% - 10%)
  137. 'threshold_ratio_range': (0.1, 0.9), # 合理阈值比例范围
  138. 'min_balance_for_calc_min': 1.0, # 最小余额最小值
  139. 'assumed_interest_days_range': (1, 365), # 计息天数范围
  140. 'annual_days_allowed': [360, 365] # 允许的年计息天数
  141. }
  142. },
  143. 'inactive_account_check': {
  144. 'inactive_period_days': 3, # 唯一必需的配置
  145. 'severity_level': 'medium' # 可选
  146. },
  147. 'balance_missing_check': {
  148. 'balance_columns_to_check': ['txBalance'],
  149. 'missing_severity': 'high',
  150. 'impact_description': '缺少余额信息将导致无法进行余额连续性检查、资金存量分析等关键异常识别'
  151. },
  152. 'balance_recognition': {
  153. 'balance_tolerance': 0.01,
  154. 'enable_smart_sorting': True, # 新增
  155. 'max_permutation_search': 6, # 新增
  156. },
  157. # 各识别器参数配置
  158. 'integer_recognition': {
  159. 'amount_threshold': 10000.0, # 整数金额阈值
  160. 'multiplier': 5.0, # 平均值倍数阈值
  161. 'frequency': 3 # 高频阈值
  162. },
  163. # 夜间交易识别配置 - 更新为完整版
  164. 'night_recognition': {
  165. 'night_start_hour': 2, # 夜间检测开始小时(0-23)
  166. 'night_end_hour': 5, # 夜间检测结束小时(0-23)
  167. 'frequency_threshold_per_hour': 3, # 高频交易阈值,每小时超过此笔数视为高频
  168. 'large_amount_threshold': 50000.0, # 大额交易阈值(元)
  169. # 夜间经营行业关键词
  170. 'night_industry_keywords': [
  171. "酒店", "宾馆", "KTV", "酒吧", "夜总会", "网吧", "便利店",
  172. "医院", "急救", "急诊", "消防", "公安", "保安", "物流",
  173. "运输", "出租车", "网约车", "外卖", "配送"
  174. ],
  175. # 紧急情况关键词
  176. 'emergency_keywords': [
  177. "急救", "急诊", "抢救", "紧急", "urgent", "emergency",
  178. "抢险", "救援", "救灾", "应急", "加急"
  179. ],
  180. # 合理性检查选项
  181. 'enable_background_check': True, # 是否启用合理背景检查
  182. },
  183. 'high_frequency_recognition': {
  184. 'frequency_threshold': 2, # 高频交易阈值,每小时超过此笔数视为高频交易异常
  185. 'statistic_unit': 'date_hour', # 统计单位:日期+小时
  186. 'severity_level': 'high', # 异常严重级别:high/medium/low
  187. 'description': '单小时交易笔数超过阈值,体现资金往来的集中性与活跃度异常'
  188. },
  189. 'transfer_recognition': {
  190. 'amount_threshold': 100000.0, # 大额阈值
  191. 'window_days': 7 # 时间窗口(天)
  192. },
  193. 'large_amount_recognition': {
  194. 'amount_threshold': 10000.0,
  195. 'history_days': 90,
  196. 'outlier_multiplier': 3.0,
  197. 'enable_background_check': True,
  198. 'reasonable_background_keywords': [ # 合理的交易背景关键词
  199. "工资", "奖金", "绩效", "年终奖", "报销", "货款", "租金",
  200. "购房款", "装修款", "学费", "医疗费", "保险", "理财",
  201. "投资款", "分红", "还款", "借款", "赠与", "遗产"
  202. ],
  203. 'high_risk_keywords': [ # 高风险关键词
  204. "赌博", "赌资", "彩票", "博彩", "虚拟货币", "比特币",
  205. "地下钱庄", "洗钱", "套现", "非法", "不明", "无摘要"
  206. ],
  207. 'description': '单次交易金额超过阈值且与账户历史行为不匹配,缺乏合理背景'
  208. },
  209. 'occasional_high_integer_transaction': {
  210. # 检测规则参数
  211. 'integer_multiple': 10000.0, # 整数倍基数(默认1万元)
  212. 'outlier_multiplier': 2.0, # 异常倍数阈值(默认2倍)
  213. # 频率分析参数
  214. 'frequency_window_days': 7, # 频率分析窗口(7天)
  215. 'min_occurrences_for_high_frequency': 3, # 高频最小次数(3次)
  216. 'gap_std_threshold': 2.0, # 偶发判断阈值(2天标准差)
  217. # 结果参数
  218. 'severity_level': 'high', # 严重程度(高)
  219. # 描述信息
  220. 'description': '金额为10,000元整数倍、超过整体平均金额5倍且呈现偶发高频特征的交易...',
  221. 'business_rule': '银行流水核查中,若存在金额为10,000元整数倍的交易...'
  222. }
  223. }
  224. def validate_night_transaction_config(config):
  225. """
  226. 验证夜间交易配置
  227. Args:
  228. config: 夜间交易配置字典
  229. Returns:
  230. list: 错误信息列表
  231. """
  232. errors = []
  233. night_config = config.get('night_recognition', {})
  234. # 检查时间范围
  235. start_hour = night_config.get('night_start_hour', 2)
  236. end_hour = night_config.get('night_end_hour', 5)
  237. if not (0 <= start_hour <= 23):
  238. errors.append(f"夜间开始小时必须在0-23之间: {start_hour}")
  239. if not (0 <= end_hour <= 23):
  240. errors.append(f"夜间结束小时必须在0-23之间: {end_hour}")
  241. # 检查阈值
  242. if night_config.get('frequency_threshold_per_hour', 3) <= 0:
  243. errors.append("高频阈值必须大于0")
  244. if night_config.get('large_amount_threshold', 50000.0) <= 0:
  245. errors.append("大额阈值必须大于0")
  246. return errors
  247. def validate_config():
  248. """
  249. 验证系统配置是否正确
  250. 此函数检查所有必要的配置项是否已正确设置,包括:
  251. - API密钥是否存在
  252. - API URL格式是否正确
  253. Returns:
  254. list: 配置错误列表,如果为空则表示配置正确
  255. """
  256. errors = []
  257. # 检查API密钥
  258. if not DEEPSEEK_API_KEY:
  259. errors.append("DEEPSEEK_API_KEY环境变量未设置")
  260. # 检查API URL格式
  261. if not DEEPSEEK_BASE_URL.startswith("https://"):
  262. errors.append("DEEPSEEK_BASE_URL必须是HTTPS URL")
  263. # 新增夜间交易配置检查
  264. night_errors = validate_night_transaction_config(anomaly_recognizer_config)
  265. errors.extend(night_errors)
  266. return errors
  267. # ============================================================================
  268. # 配置状态标识
  269. # ============================================================================
  270. # 全局配置状态标识,True表示配置正确,False表示存在配置问题
  271. CONFIG_VALID = len(validate_config()) == 0
  272. # 数据打标引擎入参映射(行业 -> ID)
  273. # metric-农业分类打标-0107
  274. # metric-农业分类打标-1230
  275. DATA_CLASSIFY_ENGINE_PARAM_MAPPER = {
  276. "农业": "metric-农业分类打标-0107"
  277. }
  278. # 千问32B模型配置
  279. qwen3_32B_model = {
  280. "name": "Qwen3-32B",
  281. "api_key": "",
  282. "base_url": "http://10.192.72.12:9996/v1"
  283. }
  284. # deepseek模型配置
  285. deepseek_v3_model = {
  286. "name": "deepseek-chat",
  287. "api_key": DEEPSEEK_API_KEY,
  288. "base_url": "https://api.deepseek.com"
  289. }
  290. LLM_API_KEY=deepseek_v3_model["api_key"]
  291. LLM_BASE_URL=deepseek_v3_model["base_url"]
  292. LLM_MODEL_NAME=deepseek_v3_model["name"]
  293. # 多模型接口地址
  294. multimodal_api_url = "http://103.154.31.78:20012/api/file/read"
  295. #multimodal_api_url="http://10.192.72.11:6300/api/file/read"
  296. # 是否从知识沉淀平台获取报告章节写作提示词
  297. # 0:否 1:是
  298. enable_kp_rc_prompts = 0