基础模块(base)¶
学习目标¶
- 1.理解并掌握如何通过Config类集中管理系统的配置参数。
- 2.学会配置和使用日志记录器,实现对系统运行状态的监控。
- 3.认识base模块在系统架构中的作用,为学习后续核心逻辑奠定基础。
base模块是EduRAG智慧问答系统的基础,负责提供系统运行所需的核心功能,包括配置管理、日志记录。这些功能为系统的其他模块提供了稳定的支持,确保系统能够灵活配置、监控运行状态。
2.1 配置管理¶
功能¶
config.py文件定义了Config类,用于集中管理系统中的所有配置参数。这些参数包括数据库连接信息、模型选择、分块策略、API设置等。通过集中管理配置,系统可以方便地调整参数、适配不同环境,并支持通过环境变量进行灵活配置。
代码实现¶
# 导入配置解析库
import configparser
# 导入路径操作库
import os
class Config:
# 初始化配置,加载 config.ini 文件
def __init__(self, config_file='/Users/ligang/PycharmProjects/LLM/Itcast_qa_system/config.ini'):
# 创建配置解析器
self.config = configparser.ConfigParser()
# 读取配置文件
self.config.read(config_file)
# MySQL 配置
# MySQL 主机地址
self.MYSQL_HOST = self.config.get('mysql', 'host', fallback='localhost')
# MySQL 用户名
self.MYSQL_USER = self.config.get('mysql', 'user', fallback='root')
# MySQL 密码
self.MYSQL_PASSWORD = self.config.get('mysql', 'password', fallback='123456')
# MySQL 数据库名
self.MYSQL_DATABASE = self.config.get('mysql', 'database', fallback='subjects_kg')
# Redis 配置
# Redis 主机地址
self.REDIS_HOST = self.config.get('redis', 'host', fallback='localhost')
# Redis 端口
self.REDIS_PORT = self.config.getint('redis', 'port', fallback=6379)
# Redis 密码
self.REDIS_PASSWORD = self.config.get('redis', 'password', fallback='1234')
# Redis 数据库编号
self.REDIS_DB = self.config.getint('redis', 'db', fallback=0)
# Milvus 配置
# Milvus 主机地址
self.MILVUS_HOST = self.config.get('milvus', 'host', fallback='localhost')
# Milvus 端口
self.MILVUS_PORT = self.config.get('milvus', 'port', fallback='19530')
# Milvus 数据库名
self.MILVUS_DATABASE_NAME = self.config.get('milvus', 'database_name', fallback='itcast')
# Milvus 集合名
self.MILVUS_COLLECTION_NAME = self.config.get('milvus', 'collection_name', fallback='edurag_final')
# LLM 配置
# LLM 模型名
self.LLM_MODEL = self.config.get('llm', 'model', fallback='qwen-plus')
# DashScope API 密钥
self.DASHSCOPE_API_KEY = self.config.get('llm', 'dashscope_api_key')
# DashScope API 地址
self.DASHSCOPE_BASE_URL = self.config.get('llm', 'dashscope_base_url',
fallback='https://dashscope.aliyuncs.com/compatible-mode/v1')
# 检索参数
# 父块大小
self.PARENT_CHUNK_SIZE = self.config.getint('retrieval', 'parent_chunk_size', fallback=1200)
# 子块大小
self.CHILD_CHUNK_SIZE = self.config.getint('retrieval', 'child_chunk_size', fallback=300)
# 块重叠大小
self.CHUNK_OVERLAP = self.config.getint('retrieval', 'chunk_overlap', fallback=50)
# 检索返回数量
self.RETRIEVAL_K = self.config.getint('retrieval', 'retrieval_k', fallback=5)
# 最终候选数量
self.CANDIDATE_M = self.config.getint('retrieval', 'candidate_m', fallback=2)
# 应用配置
# 有效来源列表
self.VALID_SOURCES = eval(
self.config.get('app', 'valid_sources', fallback='["ai", "java", "test", "ops", "bigdata"]'))
# 客服电话
self.CUSTOMER_SERVICE_PHONE = self.config.get('app', 'customer_service_phone', fallback='12345678')
# 日志文件路径
self.LOG_FILE = self.config.get('logger', 'log_file', fallback='logs/app.log')
if __name__ == '__main__':
conf = Config()
print(conf.CHILD_CHUNK_SIZE)
说明¶
- 环境变量支持:使用
dotenv加载.env文件中的环境变量,避免敏感信息硬编码。 - 默认值:每个参数设有默认值,确保未配置环境变量时系统仍可运行。
- 参数分类:按功能分类(如数据库、模型、分块等),便于管理和维护。
2.2 日志记录(logger.py)¶
功能¶
logger.py文件定义了setup_logging函数,用于配置系统的日志记录器。日志记录器将运行信息、警告和错误输出到文件和控制台,便于开发、调试和运维人员监控系统状态。
代码实现¶
# 导入日志库
import logging
# 导入路径操作库
import os
# 导入配置类
from config import Config
def setup_logging(log_file=Config().LOG_FILE):
# 创建日志目录
os.makedirs(os.path.dirname(log_file), exist_ok=True)
# 获取日志器
logger = logging.getLogger("EduRAG")
# 设置日志级别
logger.setLevel(logging.INFO)
# 避免重复添加处理器
if not logger.handlers:
# 创建文件处理器
file_handler = logging.FileHandler(log_file, encoding='utf-8')
# 设置文件处理器级别
file_handler.setLevel(logging.INFO)
# 创建控制台处理器
console_handler = logging.StreamHandler()
# 设置控制台处理器级别
console_handler.setLevel(logging.INFO)
# 设置日志格式
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
# 为文件处理器设置格式
file_handler.setFormatter(formatter)
# 为控制台处理器设置格式
console_handler.setFormatter(formatter)
# 添加文件处理器
logger.addHandler(file_handler)
# 添加控制台处理器
logger.addHandler(console_handler)
# 返回日志器
return logger
# 初始化日志器
logger = setup_logging()
说明¶
- 日志级别:默认设为
INFO,记录关键运行信息。 - 双重输出:同时输出到文件和控制台,便于实时监控和后续分析。
- 格式化:日志包含时间戳、名称、级别和内容,便于问题定位。
总结¶
base模块为EduRAG系统提供了以下核心支持:
- 配置管理:通过
Config类实现灵活的参数配置。 - 日志记录:通过
logger实现运行状态的实时监控和记录。
本章内容为学习者理解EduRAG系统的基础功能奠定了基础,为后续深入学习核心逻辑提供了支持。