hr-eval-api-v2 / config.py
KarenYYH
Initial commit - HR Evaluation API v2
c8b1f17
"""
配置文件
"""
import os
from pathlib import Path
from typing import List
# 项目根目录
BASE_DIR = Path(__file__).parent
# API配置
API_CONFIG = {
"title": "HR对话质量评估API",
"description": "基于ML模型的HR对话质量评估系统",
"version": "v1.0",
"host": os.getenv("API_HOST", "0.0.0.0"),
"port": int(os.getenv("API_PORT", 8000)),
"debug": os.getenv("DEBUG", "false").lower() == "true",
"reload": os.getenv("DEBUG", "false").lower() == "true",
}
# 模型配置 - 使用 HuggingFace Hub 上的微调模型(已设为公开)
HF_SBERT_MODEL = "KarenYYH/sbert-hr-v2"
HF_SENTIMENT_MODEL = "KarenYYH/sentiment-hr"
local_sbert_path = BASE_DIR / "models" / "sbert-hr-v2"
# 优先使用 HuggingFace Hub 上的微调模型
default_sbert = HF_SBERT_MODEL
# 情绪分析微调模型路径
local_sentiment_path = BASE_DIR / "models" / "sentiment-hr" / "final_model"
default_sentiment = HF_SENTIMENT_MODEL
MODEL_CONFIG = {
"cache_dir": os.getenv("MODEL_CACHE_DIR", str(BASE_DIR / "models" / "checkpoints")),
"sentence_transformer_model": os.getenv(
"SENTENCE_TRANSFORMER_MODEL",
default_sbert
),
# 情绪分析模型(微调版本)
"sentiment_model_path": os.getenv(
"SENTIMENT_MODEL_PATH",
default_sentiment
),
# 本地对话模型已移除,推荐使用 LLM API
"dialogue_model_path": None,
"device": "mps" if os.getenv("USE_MPS", "true").lower() == "true" and os.uname().sysname == "Darwin" else ("cuda" if os.getenv("USE_CUDA", "true").lower() == "true" else "cpu"),
}
# 数据路径
DATA_CONFIG = {
"knowledge_base_path": os.getenv(
"KNOWLEDGE_BASE_PATH",
str(BASE_DIR / "data" / "knowledge_base.json")
),
"sensitive_words_path": os.getenv(
"SENSITIVE_WORDS_PATH",
str(BASE_DIR / "data" / "sensitive_words.json")
),
"whitelist_path": os.getenv(
"WHITELIST_PATH",
str(BASE_DIR / "data" / "whitelist.json")
),
}
# 评估阈值
EVALUATION_CONFIG = {
"correctness": {
"threshold": float(os.getenv("CORRECTNESS_THRESHOLD", 0.85)),
"partial_threshold": float(os.getenv("PARTIAL_THRESHOLD", 0.6)),
},
"sentiment": {
"confidence_threshold": float(os.getenv("SENTIMENT_CONFIDENCE_THRESHOLD", 0.6)),
},
"compliance": {
"severity_levels": {
"high": ["discrimination", "illegal_employment"],
"medium": ["privacy_violation", "threat"],
"low": ["other"]
}
}
}
# CORS配置
CORS_CONFIG = {
"origins": os.getenv("CORS_ORIGINS", "*").split(","),
"allow_credentials": os.getenv("CORS_ALLOW_CREDENTIALS", "true").lower() == "true",
"allow_methods": ["*"],
"allow_headers": ["*"],
}
# 日志配置
LOG_CONFIG = {
"level": os.getenv("LOG_LEVEL", "INFO"),
"format": "{time:YYYY-MM-DD HH:mm:ss} | {level} | {name}:{function}:{line} | {message}",
"rotation": "1 day",
"retention": "7 days",
"compression": "zip",
}
# API认证(可选)
AUTH_CONFIG = {
"enabled": os.getenv("API_KEY") is not None,
"api_key": os.getenv("API_KEY", ""),
}
# 缓存配置
CACHE_CONFIG = {
"enabled": True,
"ttl": 3600, # 1小时
"backend": "redis" if os.getenv("USE_REDIS", "false").lower() == "true" else "memory",
"redis": {
"host": os.getenv("REDIS_HOST", "localhost"),
"port": int(os.getenv("REDIS_PORT", 6379)),
"password": os.getenv("REDIS_PASSWORD", None),
"db": int(os.getenv("REDIS_DB", 0)),
"socket_timeout": 5,
"max_connections": 100, # 连接池优化
}
}
# 意图识别模型配置
INTENT_MODEL_CONFIG = {
"model_name": os.getenv("INTENT_MODEL_NAME", "bert-base-chinese"),
"model_path": os.getenv("INTENT_MODEL_PATH", str(BASE_DIR / "models" / "intent_bert")),
"confidence_threshold": 0.85,
}
# 对话生成模型 API 配置
LLM_API_CONFIG = {
# 启用 API 模式(true=使用API, false=使用本地模型)
"enabled": os.getenv("LLM_API_ENABLED", "false").lower() == "true",
# API 提供商: openai, anthropic, deepseek, moonshot, zhipu, dashscope, ollama, custom
"provider": os.getenv("LLM_API_PROVIDER", "openai"),
# API 密钥
"api_key": os.getenv("LLM_API_KEY", ""),
# API 端点(用于自定义 API)
"base_url": os.getenv("LLM_API_BASE_URL", ""),
# 模型名称
"model": os.getenv("LLM_API_MODEL", "gpt-4o-mini"),
# API 参数
"temperature": float(os.getenv("LLM_API_TEMPERATURE", "0.7")),
"max_tokens": int(os.getenv("LLM_API_MAX_TOKENS", "512")),
"top_p": float(os.getenv("LLM_API_TOP_P", "0.9")),
# 超时设置(秒)
"timeout": int(os.getenv("LLM_API_TIMEOUT", "30")),
}