服务端配置与启动
服务器配置与启动
相关源文件
本章引用的主要源码文件:
docs/LightRAG-API-Server-zh.mddocs/LightRAG-API-Server.mdenv.examplelightrag/api/config.pylightrag/api/gunicorn_config.pylightrag/api/lightrag_server.pylightrag/api/run_with_gunicorn.pylightrag/api/runtime_validation.pylightrag/api/utils_api.pylightrag/constants.pylightrag/kg/shared_storage.pytests/test_api_config_bedrock.pytests/test_runtime_target_validation.py
LightRAG API 服务器是一个基于 FastAPI 的应用程序,旨在为 LightRAG 引擎提供健壮的 REST 接口。它支持通过 Gunicorn 实现多进程执行、基于工作区的数据隔离以及灵活的 LLM/嵌入向量提供者配置。该服务器充当核心检索增强生成(RAG)逻辑与外部客户端之间的桥梁,并包含一个兼容 Ollama 的模拟层。
应用工厂与配置代理
服务器使用工厂模式创建 FastAPI 应用实例,从而支持延迟配置和依赖注入。
create_app 工厂函数
create_app 函数 lightrag/api/lightrag_server.py:280-330 是初始化 FastAPI 应用的入口点。它执行以下关键任务:
- 生命周期管理:注册
lifespan上下文管理器,用于资源设置和清理。 - 中间件:根据
CORS_ORIGINS环境变量配置 CORS(跨域资源共享)lightrag/api/lightrag_server.py:302-311。 - 路由注册:挂载文档、查询和图操作的路由器,以及 Ollama 模拟层
lightrag/api/lightrag_server.py:321-326。 - 静态文件:在
/webui路径下挂载 WebUI 构建制品lightrag/api/lightrag_server.py:328-329。
_GlobalArgsProxy 延迟配置
为了处理从 CLI 参数到应用状态的过渡,LightRAG 使用 _GlobalArgsProxy lightrag/api/config.py:338-349。该代理允许应用在从 sys.argv 或 .env 文件完全解析配置参数之前引用这些参数。实际值会在调用 initialize_config() 时填充。
parse_args 函数
parse_args 函数 lightrag/api/config.py:352-600 使用 argparse 定义服务器的配置接口。它按优先级从高到低从三个来源协调配置值:
- 命令行参数(例如
--port 9621)。 - 系统环境变量(例如
LLM_BINDING=openai)。 - 启动目录中的
.env文件。
来源: lightrag/api/lightrag_server.py:280-330() lightrag/api/config.py:338-600()
LLM 与嵌入向量初始化
服务器实现了缓存和包装策略,以优化 LLM 和嵌入向量函数的性能与可靠性。
LLMConfigCache 类
LLMConfigCache 类 lightrag/api/lightrag_server.py:131-255 管理通用服务器参数与特定提供者选项(例如 OpenAILLMOptions、OllamaLLMOptions)之间的复杂映射。它确保仅为活跃的绑定初始化并记录配置,从而避免对未使用的提供者产生不必要的开销或凭证检查。
嵌入向量函数优化
服务器包装标准嵌入向量函数以提供额外能力:
- 属性包装:使用
wrap_embedding_func_with_attrs将维度、批次大小等元数据附加到函数上lightrag/api/lightrag_server.py:347-350。 - 优化执行:
create_optimized_embedding_functionlightrag/api/lightrag_server.py:258-277应用priority_limit_async_func_call装饰器。这将并发嵌入请求的数量限制为EMBEDDING_FUNC_MAX_ASYNC(默认值为 16),以防止过载提供者 API 或本地 GPU 内存lightrag/api/config.py:41。
来源: lightrag/api/lightrag_server.py:131-277() lightrag/api/config.py:41()
工作区隔离与请求流程
LightRAG 通过"工作区"支持逻辑数据隔离。这使得单个服务器实例可以服务于多个不同的知识库。
LIGHTRAG-工作空间请求头
工作区隔离主要由 LIGHTRAG-WORKSPACE HTTP 请求头驱动。
- 当请求到达时,服务器会从此请求头中识别目标工作区。
- 如果缺少此请求头,则会回退到
shared_storage.py中定义的DEFAULT_WORKSPACElightrag/kg/shared_storage.py:79-80。 get_final_namespace函数lightrag/kg/shared_storage.py:99-112将工作区名称与存储命名空间(例如kv_storage、graph_storage)组合,以确保数据存储在隔离的分区中。
请求流程示意图
下图说明了请求如何被路由以及工作区上下文如何应用。
请求处理与工作区路由
来源: lightrag/api/lightrag_server.py:280-330() lightrag/kg/shared_storage.py:79-112() lightrag/api/utils_api.py:91-180()
生产部署
LightRAG 支持两种主要执行模式:单进程开发模式和多进程生产模式。
Uvicorn(开发模式)
lightrag-server 命令使用 uvicorn.run 启动应用。这适用于本地测试,但缺少高并发生产环境所需的工作进程管理能力。
Gunicorn(生产模式)
lightrag-gunicorn 命令 lightrag/api/run_with_gunicorn.py:32-193 将 FastAPI 应用包装在 Gunicorn 的 BaseApplication 中。
| 特性 | 实现方式 |
|---|---|
| 工作进程类 | uvicorn.workers.UvicornWorker lightrag/api/gunicorn_config.py:35 |
| 共享数据 | 使用 preload_app = True 在主进程分叉之前初始化存储锁和共享字典 lightrag/api/gunicorn_config.py:32。 |
| 清理 | on_exit 钩子 lightrag/api/gunicorn_config.py:124-138 调用 finalize_share_data() 以确保文件锁和多进程管理器被优雅关闭。 |
| macOS 分叉安全性 | 强制设置 OBJC_DISABLE_INITIALIZE_FORK_SAFETY=YES 以防止在多工作进程嵌入调用期间 Accelerate 框架崩溃 lightrag/api/run_with_gunicorn.py:53-94。 |
服务器启动生命周期
此图展示了从进程启动到工作进程就绪的序列。
启动与多进程生命周期
来源:
lightrag/api/run_with_gunicorn.py:32-193()lightrag/api/gunicorn_config.py:1-163()lightrag/kg/shared_storage.py:57-95()