app.py
是nkuwiki平台的主入口文件,负责服务启动、配置加载和插件管理。它提供了两种服务模式:
app.py
文件包含以下主要部分:
@singleton
class App:
"""应用程序单例,提供全局访问点"""
def __init__(self):
self.config = config
self.logger = logger
def get_config(self):
"""获取配置对象"""
return self.config
def get_logger(self):
"""获取日志对象"""
return self.logger
App单例类提供了全局配置和日志的统一访问点。
def get_logger():
"""提供日志记录器的依赖注入"""
return logger.bind(request_id=request_id_var.get())
def get_config():
"""提供配置对象的依赖注入"""
return config
依赖注入函数用于在FastAPI路由处理器中获取配置和日志对象。
def run_api_service(host="0.0.0.0", port=8000):
"""启动API服务"""
setup_signal_handlers()
logger.info(f"Starting API service on {host}:{port}")
uvicorn.run(app, host=host, port=port)
def run_qa_service():
"""启动问答服务"""
setup_signal_handlers()
channel_type = config.get("services.channel_type", "terminal")
from services.channel_factory import create_channel
channel = create_channel(channel_type)
if channel:
channel.startup()
这两个函数分别用于启动API服务和问答服务。
应用支持以下命令行参数:
python app.py [--qa] [--api] [--host HOST] [--port PORT]
--qa
: 启动问答服务--api
: 启动API服务--host
: API服务主机地址(默认:0.0.0.0)--port
: API服务端口(默认:8000)如果不指定任何参数,默认只启动问答服务。
python app.py --api --host 0.0.0.0 --port 8000
python app.py --qa
python app.py --qa --api
日志配置使用loguru库,日志文件位于 logs/app.log
,每天轮换一次,保留7天的日志历史。
logger.add("logs/app.log",
rotation="1 day", # 每天轮换一次日志文件
retention="7 days", # 保留7天的日志
level="DEBUG",
encoding="utf-8"
)
应用实现了信号处理机制,可以优雅地响应中断信号:
def setup_signal_handlers():
"""设置信号处理函数,用于优雅退出"""
if threading.current_thread() is threading.main_thread():
import signal
signal.signal(signal.SIGINT, handle_signal)
signal.signal(signal.SIGTERM, handle_signal)
if hasattr(signal, 'SIGUSR1'):
signal.signal(signal.SIGUSR1, handle_signal)
config.py
: 配置管理etl/api/mysql_api.py
: MySQL API路由core/api/agent_api.py
: Agent API路由services/channel_factory.py
: 服务渠道工厂如需扩展应用功能,可以考虑:
app.py
中添加新的API路由services/channel_factory.py
中添加新的服务渠道维护应用时,请确保:
详细的应用入口说明文档。