目录

前言

一、项目概览:这个网关能做什么?

二、目录结构:快速建立心智模型

三、请求如何穿过各层?(核心流程)

🔐 两种接口模式

四、关键模块深度解读

1. 适配器层(app/adapters/)——厂商统一接入

2. LlamaFactory训练微调服务

3. 领域RAG模块(app/services/rag/)

4. 双数据库设计

五、部署与运维

开发环境

生产环境

配置要点(.env)

六、项目亮点总结

七、扩展建议

八、常见问题

结语


前言

在大模型应用开发中,我们经常面临一个痛点:各家云厂商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文档齐全

七、扩展建议

  1. 新增接口:在routers/添加路由 → schemas.py定义模型 → 必要时扩展services/

  2. 新增厂商:在adapters/实现适配器 → 注册到services/registry.py

  3. 新增数据表:在models/定义ORM → main.py启动时会自动建表

  4. 自定义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项目源码整理,所有路径和设计以仓库实际代码为准。欢迎交流讨论!

Logo

欢迎加入DeepSeek 技术社区。在这里,你可以找到志同道合的朋友,共同探索AI技术的奥秘。

更多推荐