新增方法 _get_label_distribution_from_es,从es里读取学习结果,动态调整正负样本比例+1

This commit is contained in:
zhangkun9038@dingtalk.com 2026-01-18 21:44:08 +08:00
parent 8fbd19213a
commit bd8aeb29eb

View File

@ -466,6 +466,7 @@ class FreqaiPrimer(IStrategy):
try:
es_config = get_es_config(self.config)
if not es_config['enabled']:
logger.debug(f"[{pair}] ES 未启用,跳过从 ES 读取标签分布")
return None
# 获取当前年月(用于确定索引)
@ -480,8 +481,10 @@ class FreqaiPrimer(IStrategy):
"size": 1
}
es_url = f"{es_config['url']}{index_name}/_search"
response = requests.post(
f"{es_config['url']}{index_name}/_search",
es_url,
auth=(es_config['username'], es_config['password']) if es_config['username'] else None,
headers={"Content-Type": "application/json"},
data=json.dumps(query),
@ -494,13 +497,31 @@ class FreqaiPrimer(IStrategy):
labels_mean = result['hits']['hits'][0]['_source'].get('labels_mean', {})
value = labels_mean.get(label_name)
if value is not None:
logger.debug(f"[{pair}] 从 ES 读取标签分布: {label_name}={value:.3f}")
return value
logger.info(f"✅ [{pair}] 从 ES 成功读取标签分布: {label_name}={value:.3f}")
return value
else:
logger.warning(f"⚠️ [{pair}] ES 记录中缺少标签 {label_name}")
return None
else:
logger.warning(f"⚠️ [{pair}] ES 中未找到训练记录(索引: {index_name}")
return None
else:
logger.error(
f"❌ [{pair}] ES 查询失败 | "
f"状态码: {response.status_code} | "
f"URL: {es_url} | "
f"响应: {response.text[:200]}"
)
return None
except requests.exceptions.Timeout:
logger.error(f"❌ [{pair}] ES 查询超时(>3秒| URL: {es_config.get('url', 'N/A')}")
return None
except requests.exceptions.ConnectionError as e:
logger.error(f"❌ [{pair}] ES 连接失败 | URL: {es_config.get('url', 'N/A')} | 错误: {e}")
return None
except Exception as e:
logger.debug(f"[{pair}] 无法从 ES 读取标签分布: {e}")
logger.error(f"❌ [{pair}] ES 读取异常 | 错误类型: {type(e).__name__} | 详情: {e}")
return None
def _get_label_distribution_from_redis(self, pair: str, label_name: str) -> float | None: