1. 项目概述
最近在探索如何将本地部署的大语言模型(LLM)通过Dify平台对外提供服务,经过一周的折腾终于跑通了整个流程。这个方案特别适合那些既想用开源模型又需要对外提供API服务的企业或个人开发者。下面我会详细拆解从环境准备到API调用的完整过程,包括几个关键踩坑点。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 环境准备与安装
2.1 Dify平台部署
Dify是一个开源的LLM应用开发平台,支持连接各种大模型。推荐使用Docker方式部署:
bash复制# 克隆仓库
git clone https://github.com/langgenius/dify.git
cd dify/docker
# 启动服务
docker-compose up -d
部署完成后访问 http://localhost 即可进入管理界面。如果遇到端口冲突,可以修改docker-compose.yml中的端口映射。我建议保留Nginx的80端口,方便后续HTTPS配置。
注意:生产环境务必配置.env文件中的SECRET_KEY和数据库密码,默认配置存在安全风险。
2.2 Ollama服务安装
Ollama是本地运行开源大模型的利器,支持Llama、Mistral等主流模型。Linux系统安装命令:
bash复制curl -fsSL https://ollama.com/install.sh | sh
ollama pull llama2 # 下载模型
ollama serve & # 启动服务
验证服务是否正常:
bash复制curl http://localhost:11434/api/tags
如果返回模型列表说明安装成功。我测试时发现Ollama对显存要求较高,7B模型至少需要8GB显存,13B模型建议24GB以上。
3. 模型供应商配置
3.1 Dify连接Ollama
进入Dify的"模型供应商"页面,添加Ollama提供商:
- 供应商类型选择"Ollama"
- 凭据名称自定义(如"local-ollama")
- 基础URL填写
http://<服务器IP>:11434 - 模型列表会自动加载
如果连接失败,检查:
- 防火墙是否开放11434端口
- Ollama服务是否正常运行
- 服务器IP是否正确(内网环境建议用ifconfig查看)
3.2 模型测试
在Dify的" playground"页面选择刚添加的模型,发送测试请求。我建议先用简单问题验证:
code复制请用中文回答:中国的首都是哪里?
如果响应缓慢或报错,可能是:
- 模型未完全加载 - 等待或重启Ollama
- 显存不足 - 换更小模型或增加GPU资源
- 网络延迟 - 同机房部署最佳
4. 工作流搭建
4.1 创建工作流
Dify的工作流功能可以组合多个LLM调用。典型配置包括:
- 输入节点 - 接收用户query
- LLM节点 - 连接Ollama模型
- 输出节点 - 格式化响应
我设计的高速公路养护咨询工作流如下:
code复制用户问题 → 意图识别 → 知识库检索 → LLM生成 → 结果审核 → 输出
4.2 API发布
工作流测试通过后:
- 点击"发布"生成API端点
- 在"凭证管理"创建API Key
- 记录下形如
wf-xxxxx的工作流ID
关键安全建议:
- API Key设置有效期
- 生产环境启用速率限制
- 记录详细的访问日志
5. 外部服务暴露
5.1 端口配置
默认Dify API服务只监听localhost,修改docker-compose.yml:
yaml复制api:
ports:
- "5001:5001" # 暴露端口
environment:
HOST: 0.0.0.0 # 关键配置!
重启服务使配置生效:
bash复制docker-compose down && docker-compose up -d
5.2 网络优化
如果API需要公网访问:
- 配置Nginx反向代理
- 添加SSL证书(Let's Encrypt免费)
- 设置防火墙规则(仅开放必要端口)
我的Nginx配置示例:
code复制location /api/ {
proxy_pass http://localhost:5001;
proxy_set_header Host $host;
}
6. API调用测试
6.1 基础调用
使用curl测试API:
bash复制curl -X POST http://your-domain.com/v1/workflows/run \
-H "Authorization: Bearer your-api-key" \
-H "Content-Type: application/json" \
-d '{"inputs": {"query": "隧道养护要点"}, "response_mode": "blocking"}'
6.2 性能优化
实测中发现几个性能瓶颈:
- 首次响应延迟高 - 预热模型解决
- 长文本处理慢 - 调整max_tokens参数
- 高并发时OOM - 增加SWAP空间
我的监控方案:
- Prometheus采集QPS/延迟指标
- Grafana展示实时数据
- 设置自动告警阈值
7. 生产环境建议
经过一个月生产运行,总结出以下经验:
-
稳定性方面:
- 使用supervisor托管Ollama进程
- 定期检查模型内存泄漏
- 准备降级方案(如备用API)
-
安全方面:
- API增加IP白名单
- 敏感接口添加人机验证
- 传输数据加密处理
-
成本控制:
- 根据流量自动扩缩容
- 使用量化版小模型
- 缓存高频查询结果
这套方案目前每天处理约5000次请求,平均响应时间1.2秒,比直接调用云端API节省了60%以上的成本。对于需要私有化部署的场景特别适合,后续我准备加入微调功能进一步提升准确率。
