adaptive_rag / config.py
lanny xu
delete urls
bdd9c39
raw
history blame
2.91 kB
"""
配置和环境设置模块
包含API密钥管理、模型配置和URL配置
"""
import getpass
import os
# 尝试加载.env文件,如果没有安装dotenv则跳过
try:
from dotenv import load_dotenv
load_dotenv()
print("✅ .env文件已加载")
except ImportError:
print("⚠️ python-dotenv未安装,将使用系统环境变量")
print("提示:运行 'pip install python-dotenv' 来安装")
def _set_env(var: str):
"""设置环境变量,优先从.env文件读取,如果不存在则提示用户输入"""
if not os.environ.get(var):
os.environ[var] = getpass.getpass(f"{var}: ")
def setup_environment():
"""设置所有必需的环境变量"""
_set_env("TAVILY_API_KEY")
# 不再需要NOMIC_API_KEY,使用HuggingFace本地嵌入
# 验证API密钥是否已设置
tavily_key = os.environ.get("TAVILY_API_KEY")
if tavily_key:
print("✅ TAVILY_API_KEY 已从环境变量中加载")
else:
print("⚠️ TAVILY_API_KEY 未找到")
# 模型配置
# Kaggle环境推荐使用较小的模型以加快下载速度
# 可选模型:
# - "mistral" (4GB) - 质量最好,但下载慢
# - "phi" (1.6GB) - 平衡选择,速度较快
# - "tinyllama" (600MB) - 最快,质量稍低
# - "qwen:0.5b" (350MB) - 极小模型,速度极快
LOCAL_LLM = "mistral" # 在Kaggle中可改为 "phi" 或 "tinyllama"
# 知识库URL配置
KNOWLEDGE_BASE_URLS = [
"https://lilianweng.github.io/posts/2023-06-23-agent/",
# "https://lilianweng.github.io/posts/2023-03-15-prompt-engineering/",
# "https://lilianweng.github.io/posts/2023-10-25-adv-attack-llm/",
]
# 文档分块配置
CHUNK_SIZE = 250
CHUNK_OVERLAP = 0
# 向量数据库配置
COLLECTION_NAME = "rag-chroma"
EMBEDDING_MODEL = "sentence-transformers/all-MiniLM-L6-v2" # HuggingFace嵌入模型
# 搜索配置
WEB_SEARCH_RESULTS_COUNT = 3
# GraphRAG配置
ENABLE_GRAPHRAG = True # 是否启用GraphRAG功能
GRAPHRAG_INDEX_PATH = "./data/knowledge_graph.json" # 图谱索引保存路径
# 确保数据目录存在
import os
os.makedirs("./data", exist_ok=True)
GRAPHRAG_COMMUNITY_ALGORITHM = "louvain" # 社区检测算法: louvain, greedy, label_propagation
GRAPHRAG_MAX_HOPS = 2 # 本地查询最大跳数
GRAPHRAG_TOP_K_COMMUNITIES = 5 # 全局查询使用的社区数量
GRAPHRAG_BATCH_SIZE = 10 # 实体提取批处理大小
def get_api_keys():
"""获取API密钥并返回字典"""
return {
"tavily": os.environ.get("TAVILY_API_KEY")
}
def validate_api_keys():
"""验证API密钥是否已设置"""
keys = get_api_keys()
missing_keys = []
if not keys["tavily"]:
missing_keys.append("TAVILY_API_KEY")
if missing_keys:
raise ValueError(f"缺少必需的API密钥: {', '.join(missing_keys)}\n请在.env文件中设置这些密钥")
return True