📌 摘要
本文以**“让大模型真正跑在自己服务器上”**为主线,手把手带你完成
RAGFlow(文档知识库) ➕ Dify(LLM 应用编排) ➕ Prompt-Optimizer(提示词优化)
三大开源组件的本地化部署。涵盖:
- 环境准备与架构设计
- 通义千问 API 接入
- 插件故障排查
- 性能监控与成本优化
📚 目录
1️⃣ 背景与挑战
在当前 AI 应用开发中,数据隐私、成本控制和系统可控性是企业最为关注的三个核心问题。许多企业希望能够拥有完全自主可控的 AI 应用平台,避免数据泄露风险并降低长期运营成本。
| 痛点 | 现状 | 目标 |
|---|---|---|
| 数据隐私 | 公有云大模型泄露风险 | 本地私有化,数据不出内网 |
| 成本不可控 | OpenAI 按 token 收费 | 本地显卡一次性投入 |
| 插件黑盒 | 无法调试第三方插件 | 全链路日志可观测 |
2️⃣ 整体架构设计
🗺️ 系统架构图(Mermaid)
我们的整体架构分为四个层次:用户层、应用层、服务层和模型层,确保各组件之间的清晰分离和高内聚低耦合。
3️⃣ 环境准备
在开始部署之前,我们需要准备好合适的硬件和软件环境。
| 组件 | 最低配置 | 推荐配置 | 说明 |
|---|---|---|---|
| OS | Ubuntu 22.04 | Ubuntu 24.04 | 支持 Docker 24+ |
| CPU | 4C8T | 8C16T | 向量检索吃 CPU |
| RAM | 16 GB | 64 GB | 大模型显存映射 |
| GPU | RTX 3060 12G | RTX 4090 24G | 本地 7B/13B |
| Docker | 24.0+ | 25.0+ | 支持 compose v2 |
🧰 一键安装脚本
为了简化 Docker 环境的安装,我们可以使用以下脚本:
#!/bin/bash
# install_docker.sh
sudo apt update && sudo apt install -y docker.io docker-compose-plugin
sudo usermod -aG docker $USER && newgrp docker
4️⃣ RAGFlow 部署实战
RAGFlow 是一个强大的文档知识库系统,支持多种文档格式的解析和检索。
📁 目录结构
ragflow/
├── docker-compose.yml
├── .env
└── data/
🐳 docker-compose.yml(节选)
version: "3.9"
services:
ragflow-server:
image: infiniflow/ragflow:v0.19.1-slim
ports:
- "9380:9380"
environment:
- ES_HOSTS=http://es01:9200
- MINIO_HOST=minio:9000
- REDIS_HOST=redis:6379
- SECRET_KEY=${SECRET_KEY:-changeme}
volumes:
- ./data:/ragflow/data
depends_on:
- es01
- minio
- redis
🚀 启动命令
cd ragflow
echo "SECRET_KEY=$(openssl rand -hex 32)" > .env
docker compose up -d
✅ 验证
浏览器打开 http://localhost:9380,首次登录设置管理员密码。
5️⃣ Dify 部署与插件接入
Dify 是一个强大的 LLM 应用编排平台,支持多种插件扩展。
🔌 插件列表
| 插件 | 作用 | 状态 |
|---|---|---|
| langgenius/xinference | 本地模型推理 | ✅ |
| langgenius/dingtalk | 钉钉机器人 | ✅ |
| langgenius/wecom | 企微机器人 | ✅ |
| seekerliu/bocha | 知识库增强 | ⚠️ SDK 版本错误 |
🛠️ 修复 bocha 插件
当遇到插件版本不兼容问题时,可以通过以下步骤修复:
- 进入插件容器
docker exec -it dify-plugin_daemon-1 bash - 手动安装 SDK
pip install langgenius-plugin-sdk==0.0.5 - 重启插件
docker compose -p dify restart plugin_daemon-1
6️⃣ Prompt-Optimizer 部署
Prompt-Optimizer 是一个专门用于优化提示词的工具,可以显著提升模型输出质量。
🔑 .env 示例(通义千问)
VITE_CUSTOM_API_KEY=sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
VITE_CUSTOM_API_BASE_URL=https://dashscope.aliyuncs.com/compatible-mode/v1
VITE_CUSTOM_API_MODEL=qwen-plus
🚀 启动
cd prompt-optimizer
docker compose -p prompt up -d
🌐 访问
http://localhost:9380 → 选择"通义千问"模型
7️⃣ 通义千问 API 接入
通过 OpenAI 兼容接口接入通义千问,可以充分利用其强大的中文处理能力。
📞 完整 Python 示例
import os
from openai import OpenAI
def call_qwen_api(prompt, system_message="你是一个资深 Python 专家"):
"""
调用通义千问 API
Args:
prompt (str): 用户问题
system_message (str): 系统提示词
Returns:
str: 模型回答
"""
# 初始化客户端
client = OpenAI(
api_key=os.getenv("DASHSCOPE_API_KEY"),
base_url="https://dashscope.aliyuncs.com/compatible-mode/v1"
)
try:
# 发起请求
resp = client.chat.completions.create(
model="qwen-plus",
messages=[
{"role": "system", "content": system_message},
{"role": "user", "content": prompt}
],
max_tokens=512,
temperature=0.7
)
# 返回结果
return resp.choices[0].message.content
except Exception as e:
print(f"调用 API 时发生错误: {e}")
return None
if __name__ == "__main__":
# 测试调用
question = "如何写出线程安全的单例?"
answer = call_qwen_api(question)
if answer:
print("问题:", question)
print("回答:", answer)
else:
print("API 调用失败")
8️⃣ 性能调优与排坑
在实际部署过程中,我们可能会遇到各种性能问题和系统警告,需要及时处理。
⚠️ Redis overcommit_memory 警告
Redis 在运行时可能会出现内存分配警告,可以通过以下方式解决:
# 临时生效
sudo sysctl vm.overcommit_memory=1
# 永久生效
echo "vm.overcommit_memory=1" | sudo tee -a /etc/sysctl.conf
📊 资源监控(Prometheus + Grafana)
为了更好地监控系统性能,我们可以部署监控组件:
# docker-compose.monitoring.yml
version: "3.9"
services:
prometheus:
image: prom/prometheus
ports: ["9090:9090"]
grafana:
image: grafana/grafana
ports: ["3001:3000"]
📈 成本饼图
本地部署的成本分布如下:
9️⃣ 项目排期甘特图
制定详细的项目计划有助于确保按时完成部署任务:
🔟 总结与展望
通过本次部署实践,我们已经成功搭建了完整的本地大模型应用平台:
| 维度 | 达成 | 下一步 |
|---|---|---|
| 数据隐私 | 本地私有化 ✅ | 启用 TLS 双向认证 |
| 成本控制 | 显卡一次性投入 ✅ | 动态扩缩容 K8s |
| 生态扩展 | 三大平台打通 ✅ | 接入 LangSmith 可观测 |
855

被折叠的 条评论
为什么被折叠?



