最新大模型及智能体开发平台全套部署方案
大家好,我是技术探索者。随着大模型应用的深入,从单纯的对话机器人向具备多模态能力的智能体进化已成为必然趋势。今天,我将带大家手把手部署一套多模态大模型及智能体开发平台,涵盖 LLM 推理加速、嵌入模型、重排序、语音识别与合成,并结合 Dify 这个强大的 LLMOps 平台,让你快速构建企业级智能应用。
📌 技术栈概览
- 推理引擎:vLLM(高吞吐、低延迟,支持 PagedAttention)
- 智能体开发平台:Dify(可视化编排、数据集管理、插件机制)
- 基础模型:Qwen2.5(或通义千问系列,ModelScope 下载)
- 嵌入模型:bge-large-zh-v1.5(用于 RAG 向量化)
- 重排序模型:bge-reranker-v2-m3(优化检索结果)
- 语音识别:Whisper(通过 Faster-Whisper 或 ModelScope 模型)
- 语音合成:Edge-TTS(微软免费 TTS,或 VITS 模型)
整套方案全部基于开源工具,可私有化部署,完全掌控数据。
一、环境准备
1.1 硬件要求
- GPU:建议 NVIDIA 显卡,显存至少 16GB(运行 7B~14B 模型), 我用的 2 块 4090
- 内存:32GB+
- 硬盘:200GB+(存放多个模型)
- 操作系统:Ubuntu 20.04 / 22.04(本文基于 Ubuntu)
1.2 安装基础软件
# 更新系统
sudo apt update && sudo apt upgrade -y
# 安装 Python 3.10+ 及工具
sudo apt install python3-pip python3-venv git wget curl -y
# 安装 CUDA 12.1(请根据显卡驱动选择合适的版本)
# 这里以 CUDA 12.1 为例
wget https://developer.download.nvidia.com/compute/cuda/12.1.0/local_installers/cuda_12.1.0_530.30.02_linux.run
sudo sh cuda_12.1.0_530.30.02_linux.run
# 安装 Docker(可选,但推荐)
curl -fsSL https://get.docker.com | bash
sudo usermod -aG docker $USER
newgrp docker
二、模型下载(ModelScope + HuggingFace)
我们使用阿里云 ModelScope 加速下载(国内速度快),同时准备多个模型。
2.1 安装 modelscope 和 huggingface_hub
pip install modelscope huggingface_hub
2.2 下载 Qwen2.5 系列模型(以 7B 为例)
# download_qwen.py
from modelscope.hub.snapshot_download import snapshot_download
model_dir = snapshot_download('Qwen/Qwen2.5-7B-Instruct', cache_dir='/data/models/')
print(f'模型下载完成,保存在:{model_dir}')
2.3 下载嵌入模型(bge-large-zh-v1.5)
snapshot_download('BAAI/bge-large-zh-v1.5', cache_dir='/data/models/')
2.4 下载重排序模型(bge-reranker-v2-m3)
snapshot_download('BAAI/bge-reranker-v2-m3', cache_dir='/data/models/')
2.5 下载语音识别模型(Whisper-large-v3)
可通过 faster-whisper 直接使用,无需手动下载,或使用 ModelScope 版本:
snapshot_download('iic/speech_whisper-large-v3', cache_dir='/data/models/')
2.6 语音合成模型
本文使用 Edge-TTS(在线服务,无需下载),若需离线可考虑 VITS 或 CosyVoice,部署方法类似。
三、部署 vLLM 推理服务
vLLM 支持 Qwen2.5 系列模型,我们用它启动 OpenAI 兼容的 API 服务,供 Dify 调用。
3.1 安装 vLLM
pip install vllm
3.2 启动服务
# 指定模型路径,监听 0.0.0.0:8000
python -m vllm.entrypoints.openai.api_server \
--model /data/models/Qwen/Qwen2.5-7B-Instruct \
--served-model-name qwen2.5-7b \
--port 8000 \
--host 0.0.0.0 \
--tensor-parallel-size 1 \ # 根据 GPU 数量调整
--gpu-memory-utilization 0.9 \
--max-model-len 8192 \
--enforce-eager
说明:
--enforce-eager可避免 CUDA graph 捕获失败,生产环境建议去掉以提升性能。
测试 API 是否正常:
curl http://localhost:8000/v1/models
应返回包含 qwen2.5-7b 的模型列表。
四、部署嵌入模型与重排序模型服务
我们需要两个独立服务:嵌入(embedding)和重排序(reranker)。可以使用 text-embeddings-inference 或 FastAPI 自己封装。这里使用开源项目 m3e 或 FlagEmbedding 快速搭建。
4.1 安装依赖
pip install fastapi uvicorn sentence-transformers
4.2 编写嵌入服务(embedding_server.py)
from fastapi import FastAPI, Request
from sentence_transformers import SentenceTransformer
import uvicorn
app = FastAPI()
model = SentenceTransformer('/data/models/BAAI/bge-large-zh-v1.5')
@app.post("/embed")
async def embed(request: Request):
data = await request.json()
texts = data.get('texts', [])
embeddings = model.encode(texts).tolist()
return {"embeddings": embeddings}
if __name__ == "__main__":
uvicorn.run(app, host="0.0.0.0", port=8001)
4.3 编写重排序服务(reranker_server.py)
from fastapi import FastAPI, Request
from sentence_transformers import CrossEncoder
import uvicorn
app = FastAPI()
model = CrossEncoder('/data/models/BAAI/bge-reranker-v2-m3')
@app.post("/rerank")
async def rerank(request: Request):
data = await request.json()
pairs = data.get('pairs', []) # [[query, doc1], [query, doc2], ...]
scores = model.predict(pairs).tolist()
return {"scores": scores}
if __name__ == "__main__":
uvicorn.run(app, host="0.0.0.0", port=8002)
分别启动两个服务:
python embedding_server.py &
python reranker_server.py &
五、部署语音识别(ASR)与语音合成(TTS)
5.1 ASR:使用 faster-whisper 搭建服务
pip install faster-whisper
编写 asr_server.py:
from fastapi import FastAPI, File, UploadFile
from faster_whisper import WhisperModel
import uvicorn
app = FastAPI()
model = WhisperModel("large-v3", device="cuda", compute_type="float16")
@app.post("/asr")
async def asr(file: UploadFile = File(...)):
audio_data = await file.read()
# 保存临时文件
with open("temp_audio.wav", "wb") as f:
f.write(audio_data)
segments, info = model.transcribe("temp_audio.wav", language="zh")
text = "".join([seg.text for seg in segments])
return {"text": text}
if __name__ == "__main__":
uvicorn.run(app, host="0.0.0.0", port=8003)
5.2 TTS:使用 Edge-TTS(无需模型下载)
Edge-TTS 提供微软在线语音合成,简单易用。但注意在线依赖,若需离线可替换为 Coqui TTS。
安装:
pip install edge-tts
编写 tts_server.py:
from fastapi import FastAPI, Request
from fastapi.responses import StreamingResponse
import edge_tts
import uuid
import asyncio
app = FastAPI()
@app.post("/tts")
async def tts(request: Request):
data = await request.json()
text = data.get('text')
voice = data.get('voice', 'zh-CN-XiaoxiaoNeural')
output_file = f"/tmp/{uuid.uuid4()}.mp3"
tts = edge_tts.Communicate(text=text, voice=voice)
await tts.save(output_file)
return StreamingResponse(open(output_file, "rb"), media_type="audio/mpeg")
if __name__ == "__main__":
uvicorn.run(app, host="0.0.0.0", port=8004)
分别启动 ASR 和 TTS 服务:
python asr_server.py &
python tts_server.py &
六、部署 Dify 社区版
Dify 是核心的智能体开发平台,我们使用 Docker Compose 快速部署。
6.1 克隆 Dify 仓库并配置
git clone https://github.com/langgenius/dify.git
cd dify/docker
cp .env.example .env
6.2 修改 .env 文件
确保配置了外部模型服务地址(vLLM、嵌入、重排序等)。我们将在 Dify 界面配置,所以这里保持默认即可。
6.3 启动 Dify
docker-compose up -d
等待几分钟后,访问 http://your-server-ip:3000 初始化管理员账号。
七、在 Dify 中集成所有服务
7.1 添加模型供应商
进入 Dify 后台 -> 设置 -> 模型供应商。
- LLM:选择
OpenAI-API-compatible,填写:- 模型名称:
qwen2.5-7b - API URL:
http://宿主机IP:8000/v1 - API Key:任意值(vLLM 默认不校验,可置空)
- 模型名称:
- Embedding:同样选择
OpenAI-API-compatible(因为 Dify 嵌入格式与 OpenAI 兼容),URL 填写http://宿主机IP:8001(即我们的嵌入服务),模型名称填bge-large-zh-v1.5。 - Rerank:Dify 支持重排序,选择
Cohere或Jina等,但我们的自定义服务需使用 HTTP 请求节点实现(Dify 工作流支持)。也可以考虑为 Dify 写一个简单的插件,但工作流方式更灵活。
7.2 创建应用并配置知识库
- 新建应用(如聊天助手)。
- 在提示词编排中,添加“知识库”功能。
- 上传文档,选择嵌入模型为刚才配置的
bge-large-zh-v1.5。 - 在知识库检索设置中,可以开启重排序,填入我们的重排序服务地址(通过 HTTP 请求节点实现,后面说明)。
7.3 使用工作流集成重排序、ASR、TTS
Dify 工作流允许自定义节点。我们创建一个多模态聊天助手,包含:
- 开始节点:接收用户输入(文本或文件)
- IF/ELSE 分支:判断输入类型(文本、音频、图片等)
- ASR 节点:如果用户上传音频,调用我们的 ASR 服务
- LLM 节点:调用 vLLM 的 Qwen 模型
- 知识库检索节点:获取相关文档
- 重排序节点:使用 HTTP 请求调用重排序服务,优化检索结果
- TTS 节点:如果需要语音回复,调用 TTS 服务
- 结束节点:返回最终结果(文本或音频)
重排序节点配置示例:
- 方法:POST
- URL:
http://宿主机IP:8002/rerank - Body:
{ "pairs": [ ["{{#sys.query#}}", "{{#item.content#}}"] for item in knowledge_retrieval.results ] } - 输出解析:根据分数排序后,取 top_k 传入 LLM。
ASR 节点:
- 方法:POST,文件上传
- URL:
http://宿主机IP:8003/asr - 文件字段名:
file - 输出:提取
text字段作为后续输入。
TTS 节点:
- 方法:POST
- URL:
http://宿主机IP:8004/tts - Body:
{"text": "{{#llm.response#}}", "voice": "zh-CN-XiaoxiaoNeural"} - 返回音频文件,Dify 可展示为可播放的链接。
7.4 测试
上传一段语音:“请介绍一下 Dify 平台”。工作流会:
- ASR 转为文本。
- 知识库检索相关文档。
- 重排序优化结果。
- LLM 生成回答。
- TTS 转为语音回复。
- 用户得到语音+文本答案。
八、优化与生产建议
- 使用 Docker 统一部署:为每个服务编写 Dockerfile,使用 docker-compose 管理所有容器(vLLM、embedding、reranker、asr、tts、dify)。
- 模型量化:vLLM 支持 AWQ/GPTQ 量化,可降低显存占用,提升推理速度。
- 负载均衡:如果请求量高,可使用 Nginx 代理多个推理实例。
- 监控与日志:接入 Prometheus + Grafana,监控 GPU 使用率、延迟等。
- 安全:为各 API 服务增加鉴权(如 API Key),避免未授权访问。
- 离线 TTS:如果担心在线依赖,可部署 CosyVoice 或 ChatTTS,自行封装服务。
九、总结
通过以上步骤,我们成功搭建了一个完整的多模态大模型及智能体开发平台,核心组件包括:
- vLLM 提供高效的 LLM 推理。
- Dify 提供可视化的智能体编排。
- Qwen2.5 作为基座模型。
- bge 系列提供嵌入与重排序能力。
- Whisper 与 Edge-TTS 实现语音交互。
这套方案完全基于开源,可私有化部署,适用于企业构建智能客服、知识问答、语音助手等场景。程序员朋友们只需按照本文一步步操作,即可复现并在此基础上二次开发。
如果你在部署过程中遇到问题,欢迎在评论区留言交流。后续我将带来更多关于智能体开发、微调、RAG 优化的实战文章。
关注我,一起探索 AI 工程化的前沿实践!
注:本文涉及的所有服务端口、IP 地址请根据实际环境修改。模型下载路径建议统一管理,方便维护。




