从零搭建LLM网关:llm_AIO项目架构全解析
目录
1. 适配器层(app/adapters/)——厂商统一接入
前言
在大模型应用开发中,我们经常面临一个痛点:各家云厂商API不统一、本地模型部署复杂、训练推理流程分散。本文将深入解析一个生产级LLM网关项目——llm_AIO,看看它是如何将这些能力整合在一个统一服务中的。
该项目采用FastAPI + SQLAlchemy + LlamaFactory + Chroma,实现了对话、多模态生成、训练微调、RAG检索等一体化能力。
一、项目概览:这个网关能做什么?
llm_AIO是一个统一大模型网关服务,核心能力包括:
-
✅ 多厂商适配:阿里云DashScope、字节豆包、DeepSeek、讯飞语音
-
✅ 本地模型支持:Ollama、LlamaFactory微调后的模型
-
✅ 多模态生成:文生图、文生视频、TTS/ASR语音合成识别
-
✅ 训练微调:通过LlamaFactory进行LoRA/QLoRA训练
-
✅ 领域RAG:基于Chroma向量库 + LangGraph编排的检索增强生成
-
✅ 业务拓展:竞赛管理、在线考试、在线编程判题
二、目录结构:快速建立心智模型
text
llm_AIO/
├── app/ # FastAPI应用主体
│ ├── main.py # 应用入口、路由挂载
│ ├── config.py # 环境变量配置中心
│ ├── database.py # 双数据库引擎(用户库 + 文件库)
│ ├── security.py # JWT认证与密码哈希
│ ├── permissions.py # 角色权限控制
│ ├── routers/ # 业务路由层(30+接口域)
│ ├── adapters/ # 厂商适配器(阿里、豆包、DeepSeek等)
│ ├── models/ # SQLAlchemy ORM模型
│ ├── services/ # 业务逻辑层
│ │ └── rag/ # 领域RAG子模块
│ └── schemas.py # Pydantic请求/响应模型
├── convert_url/ # 文件上传与训练任务元数据模块
├── tests/ # 自动化测试
├── scripts/ # 运维脚本(如RAG PDF批量入库)
├── requirements.txt
├── start.sh / start.bat # 启动脚本
└── *.md # 各类说明文档
📌 工作区并列目录:
llmfactory/(封装LlamaFactory后端)、教学/(教学文档)
三、请求如何穿过各层?(核心流程)
text
HTTP请求
↓
routers/*.py # 路由层:校验、鉴权、参数解析
↓
services/*.py # 服务层:业务编排
↓
adapters/*.py # 适配器层:调用外部API或本地推理
↓
外部:DashScope / 豆包 / Ollama / LlamaFactory / Chroma
↓
models + database # 持久化
🔐 两种接口模式
| 类型 | 路径 | 鉴权 | 用途 |
|---|---|---|---|
| Playground | /api/playground/* |
❌ 无需JWT | 快速测试对话、图像生成 |
| V1业务接口 | /api/v1/* |
✅ Bearer Token | 用户管理、训练、竞赛等 |
四、关键模块深度解读
1. 适配器层(app/adapters/)——厂商统一接入
python
# 适配器基类约定
class BaseAdapter:
def chat(self, messages, **kwargs): ...
def generate_image(self, prompt, **kwargs): ...
def tts(self, text, **kwargs): ...
| 适配器 | 对应服务 | 能力 |
|---|---|---|
aliyun.py |
阿里云DashScope | 文本/多模态对话 |
aliyun_image.py |
阿里云 | 图像生成 |
doubao.py |
字节豆包 | 文本对话 |
deepseek.py |
DeepSeek | 文本对话 |
local.py |
Ollama | 本地模型推理 |
xunfei_audio.py |
讯飞 | 语音转写 |
💡 设计亮点:新增厂商只需继承BaseAdapter并注册到
services/registry.py,对上层路由透明。
2. LlamaFactory训练微调服务
llm_AIO通过子进程调用llmfactory工程,实现:
python
# app/services/llmfactory_service.py
class LlamaFactoryService:
def start_train(self, dataset_id, model_name, lora_config):
# 组装CLI命令,启动subprocess
# 训练进度通过读取trainer_state.json实时反馈
配套能力:
-
dataset_validator.py:校验Alpaca/ShareGPT格式 -
gpu_vram_guard.py:训练前显存预检 -
qlora_compat.py:检查模型是否支持QLoRA
3. 领域RAG模块(app/services/rag/)
采用LangGraph + Chroma实现多阶段检索增强:
text
用户提问 ↓ rewrite(查询重写) ↓ retrieve(向量检索) ↓ grade(相关性评分) ↓ generate(LLM生成回答)
核心文件:
-
vector_store.py:Chroma向量库封装 -
langgraph_agent.py:LangGraph工作流编排 -
kb_control.py:向量库开关与业务库联动 -
prompts/*.txt:各阶段提示词模板
4. 双数据库设计
python
# database.py
user_engine # 用户、角色、权限、竞赛、考试等业务表
convert_engine # 文件上传记录、训练任务元数据
分离原因:文件与训练任务数据量大且独立,与用户业务解耦便于扩展。
五、部署与运维
开发环境
bash
cp .env.example .env
# 填写数据库、云厂商Key等配置
pip install -r requirements.txt
python init_db.py # 初始化管理员和权限
./start.sh # 启动服务(默认8000端口)
生产环境
bash
sudo ./install_systemd.sh # 安装为systemd服务
sudo systemctl start llm-aio
配置要点(.env)
text
# 数据库
USER_DATABASE_URL=postgresql://...
CONVERT_URL_DATABASE_URL=postgresql://...
# 云厂商
DASHSCOPE_API_KEY=sk-xxx
DOUBAO_API_KEY=xxx
DEEPSEEK_API_KEY=xxx
# LlamaFactory
LLMFACTORY_BASE_PATH=/path/to/llmfactory
LLMFACTORY_MODEL_DIR=/path/to/models
# RAG
CHROMA_PERSIST_DIR=./chroma_db
RAG_LLM_MODEL=qwen-max
六、项目亮点总结
| 亮点 | 说明 |
|---|---|
| 多厂商统一网关 | 一套API对接阿里、豆包、DeepSeek、Ollama |
| 训练微调一体化 | 通过LlamaFactory实现数据集上传→训练→推理全链路 |
| 双库分离 | 用户库与文件/任务库解耦,便于横向扩展 |
| RAG工程化 | LangGraph+Chroma,提示词模板与向量检索可配置 |
| 竞赛/考试业务 | 不只是网关,还内置了教育场景的完整业务流程 |
| 生产就绪 | systemd脚本、环境变量模板、API文档齐全 |
七、扩展建议
-
新增接口:在
routers/添加路由 →schemas.py定义模型 → 必要时扩展services/ -
新增厂商:在
adapters/实现适配器 → 注册到services/registry.py -
新增数据表:在
models/定义ORM →main.py启动时会自动建表 -
自定义RAG:修改
prompts/*.txt或调整langgraph_agent.py的编排逻辑
八、常见问题
Q:Playground接口为什么不需要JWT?
A:方便前端快速体验,密钥在服务端.env中统一管理,不暴露给用户。
Q:训练时显存不足怎么办?
A:gpu_vram_guard.py会在启动前检查,并建议使用QLoRA或调整batch size。
Q:如何将PDF批量入库RAG?
A:使用scripts/rag_ingest_pdfs.py脚本批量处理。
结语
llm_AIO是一个从对话、生成、训练到RAG全覆盖的LLM网关实践。其分层清晰、适配器模式、双库设计等思想,非常适合作为企业级LLM平台的架构参考。
如果你正在构建自己的大模型应用平台,不妨借鉴这个项目的设计思路。当然,实际落地时还需根据业务场景做适当裁剪和增强。
📎 本文基于
llm_AIO项目源码整理,所有路径和设计以仓库实际代码为准。欢迎交流讨论!
更多推荐


所有评论(0)