玩转大模型(四):Python 调用工作流,到 Dify + Xinference 私有化部署全流程
💡第四天是整门课里工程密度最高的一天:先用 Python 把 Coze 和 Dify 的工作流接进自己的程序,再把整套服务从云端搬到自己的服务器上。
低代码平台搭完不是终点。你要接进现有系统,要过数据合规这一关,要算清楚长期 API 账单和自建机器的成本,最后都绕不开"部署"这两个字。
这篇把可运行的调用代码、踩过的坑、服务器配置和完整命令一次列全,照着敲就能跑通。
7. 从平台回到代码:API 调用与私有化部署
低代码平台搭完不是终点。要接进自己的系统、要过数据合规这关,还得回到工程侧。这一天信息密度最高。
7.1 两个平台的调用差异,一张表看完
| 维度 | Dify | Coze |
|---|---|---|
| 端点 | POST https://api.dify.ai/v1/workflows/run | POST https://api.coze.cn/v1/workflow/stream_run |
| 调用方式 | 裸 HTTP 即可 | 官方 SDKpip install cozepy(也可裸 HTTP) |
| 入参字段 | inputs | parameters |
| 必填标识 | API Key | workflow_id+app_id+ token |
| 响应模式 | response_mode:streaming/blocking | 只有流式 |
| 事件类型 | workflow_started/node_started/node_finished/iteration_next/workflow_finished | MESSAGE/ERROR/INTERRUPT(可 resume) |
| 密钥作用域 | Key 与工作流绑定,一个 Key 只能访问特定工作流 | 账号级 PAT,一个 token 可跑多个工作流 |
最后一行是设计哲学差异:Dify 是"应用维度授权",Coze 是"账号维度授权"。做多工作流集成时,Dify 要管一堆 Key。
Dify 的请求体:
{"inputs":{},"response_mode":"streaming","user":"abc-123"}user是随便起的调用者标识,用于区分来源。为什么优先 streaming:blocking 模式下 Cloudflare 会在100 秒无返回时掐断请求,稍长的流程必然超时。
可运行的最小版本(把 Key 换成你自己的):
importjson,requests BASE_URL="https://api.dify.ai/v1"# 本地部署改为 http://localhost/v1API_KEY="{your-api-key}"defstream_dify_workflow(target,mode="streaming"):url=f"{BASE_URL}/workflows/run"payload={"inputs":{"target":target},"response_mode":mode,"user":"python_request"}headers={"Authorization":f"Bearer{API_KEY}","Content-Type":"application/json"}withrequests.post(url,json=payload,headers=headers,stream=True)asr:ifr.status_code!=200:print(r.text);returnforlineinr.iter_lines():ifnotline:continue# 中文乱码必须走这一层text=line.decode("utf-8").encode("utf-8").decode("unicode_escape")iftext.startswith("data: "):text=text[6:]# 剥离 SSE 前缀try:data=json.loads(text).get("data",{})exceptjson.JSONDecodeError:continueifdata.get("status")=="succeeded":returndata.get("outputs",{}).get("output")这四个处理是课程现场踩出来的坑,少一个都跑不通:unicode_escape解中文乱码、剥data:前缀、逐行json.loads包异常、stream=True保持连接。
一次"一键生成行业调研报告"的真实返回:status=succeeded、elapsed_time=90.76s、total_tokens=9010、total_steps=44。90 秒、44 步、9000 token——这三个数字基本就是低代码工作流的成本量级。
Coze 侧有个必踩的坑:官方 Python 示例直接粘到本地会报错,原因是工作流定义了输入变量而示例没传parameters。另外 API 能力必须通过"应用发布"才启用,发布后画布页才有 API 调试入口,在 playground 左侧点"授权"才会自动生成 token。
7.2 本地跑一个大模型:Ollama
满血版 DeepSeek-R1 是 671B,全量文件720GB,个人别想。但蒸馏版够用——官方开源 2+6 个模型,最小 1.5B,10G 显存就能跑:
| 蒸馏模型 | 基座 |
|---|---|
| R1-Distill-Qwen-1.5B / 7B / 14B / 32B | Qwen2.5-Math-1.5B / 7B、Qwen2.5-14B / 32B |
| R1-Distill-Llama-8B / 70B | Llama-3.1-8B、Llama-3.3-70B-Instruct |
Ollama 库里的体积参考:deepseek-r1:1.5b1.1GB、:7b4.7GB、:14b9.0GB、:32b20GB、:70b43GB、:671b404GB。:7b的实际规格是arch qwen2 · parameters 7.62B · quantization Q4_K_M。
ollama run deepseek-r1:7b# 首次自动拉取,Ctrl+C 后按上方向键可断点续传ollama listnetstat-ano|findstr11434# 确认服务在跑两个实操细节值得单独说:
第一,别双击安装。默认全进 C 盘,模型也会堆进 C 盘。正确做法是在安装包目录的地址栏敲cmd,然后:
OllamaSetup.exe /DIR=F:\common_tools\Ollama第二,模型目录要单独迁。默认在C:\Users\{用户名}\.ollama\models,剪切到 E 盘后,新建系统变量OLLAMA_MODELS=E:\ollama\models(变量名固定),重启客户端,用ollama list验证——列表为空说明配置没生效。
选型上 Ollama 支持 CPU/GPU 混合推理,把内存与显存之和当作"总内存空间"看。671B 量化后 404GB,课程的建议是内存+显存 500GB 以上才考虑,因为还要预留上下文缓存。
7.3 为什么要私有化:五个理由
| 维度 | 第三方 API | 企业级部署 |
|---|---|---|
| 安全合规 | 敏感数据外泄风险 | 数据掌握在企业手中 |
| 成本预算 | 高频调用成本不可控 | 成本可预测(服务器+运维) |
| 能力可控 | 黑箱与版本漂移 | 推理性能、模型版本可定制 |
| 可靠性 | 延迟、吞吐不可控 | 内网低延迟,弹性扩缩容 |
| 运维治理 | 模型服务不透明,难定位故障 | 服务可观测,支持故障定位 |
"版本漂移"这个词值得记住——第三方悄悄换版本导致你的系统行为变了,你还查不到原因。
目标架构是三层解耦:
应用层 Dify → 标准 OpenAI-compatible API → 模型推理层(Xinference/vLLM) → GPU好处除了技术解耦,还有运营治理:统一鉴权、限流、审计,独立监测QPS、TTFT、TPS、GPU 利用率。
推理引擎选型:
| 引擎 | 定位 | 结论 |
|---|---|---|
| Ollama | 个人/本地,最简单,效率低 | 不适合高并发 |
| llama.cpp | CPU / 边缘 | 企业级不考虑 |
| vLLM | PagedAttention、P/D 分离,支持英伟达/AMD/昇腾、多卡 | 高并发首选 |
| SGLang | 面向应用编排、结构化生成,合并复用减少推理次数 | 特定场景 |
| HF TEI | 嵌入模型专用 | — |
| Xinference | 托管平台,LLM/Embedding/Rerank 通吃(杭州未来速度科技) | 课程最终选择 |
选 Xinference 的三条理由我认为是这套方案里最值得抄的部分:统一 API 一个链接管多模型;底层接 vLLM 所以推理性能有保障;嵌入和重排只需一次前向、开销很小,用一个平台管所有模型运维成本最低。
7.4 服务器选型与踩坑清单
| 用途 | 平台 | 配置 | 备注 |
|---|---|---|---|
| Dify | 腾讯云轻量服务器 | 4 核 8GB,Ubuntu | Dify 最低要求 CPU≥2 核、RAM≥4GiB;带宽拉满,新建安全组开常用端口 |
| GPU 推理 | AutoDL | 西北 B 区单卡 RTX 4090 | 系统盘 30GB / 数据盘 50GB,约 2 元/小时,只开放 6006 端口 |
AutoDL 推荐 4090/3090/3080,其它卡可能不兼容。
Dify 部署(版本选择是重点):
cd/opt&&sudomkdirdify&&sudochmod-R777/opt/difysudotar-zxvfdify-0.15.5.tar.gz&&cd/opt/dify/dify-0.15.5/dockersudocp.env.example .envsudodockercompose up-dsudodockercomposeps版本一定用 0.15.5,课程原话是"新版本本地部署有各种兼容问题"。.env里端口默认NGINX_PORT=80,冲突就改 8100。起来后应该看到3 个业务服务(api/worker/web)+ 6 个基础组件(weaviate/db/redis/nginx/ssrf_proxy/sandbox),数量不对就是有问题。访问http://{ip}/install设管理员账号。
Windows 本地部署 Dify 的路径类似:装 Docker Desktop →必须重启电脑→ 拉代码(或直接用课件给的dify-0.15.5.tar.gz)→ 复制.env→docker compose up -d。课程特别提醒:首次 up 大概率因网络或镜像缺失报错,再敲一遍命令重跑就行。
镜像拉不动是最高频故障,配/etc/docker/daemon.json:
{"registry-mirrors":["https://docker.m.daocloud.io","https://docker.1panel.live","..."]}然后systemctl daemon-reload && systemctl restart docker。Docker 起不来按这个顺序查:systemctl status docker→systemctl unmask docker.service→systemctl start containerd→ 重装containerd.io。
Xinference 侧(AutoDL):
source/etc/network_turbo conda create-p/root/autodl-tmp/conda_envs/xinfer_envpython=3.10conda activate /root/autodl-tmp/conda_envs/xinfer_env pipinstall"xinference[vllm,embedding,rerank,transformers]==1.16.0"\--extra-index-url https://pypi.tuna.tsinghua.edu.cn/simpleXINFERENCE_MODEL_SRC=modelscope xinference-local--host0.0.0.0--port6006四个要点:环境放数据盘(系统盘只有 30GB);AutoDL 学术加速镜像缺num2words会报错,所以要挂清华备用源;XINFERENCE_MODEL_SRC=modelscope把模型仓库从 HuggingFace 换成魔搭;--port默认 9997,这里必须改成 6006,因为 AutoDL 只放通 6006,改完浏览器才能直接访问 WebUI。
三类模型分别 launch:
# LLMxinference launch --model-engine vllm --model-name qwen3 --size-in-billions 0_6\--model-format pytorch--quantizationnone --model-uid Qwen3-0.6B\--gpu_memory_utilization0.6--max_model_len1024--endpointhttp://localhost:6006# Embeddingxinference launch --model-name bge-small-zh-v1.5 --model-type embedding--endpointhttp://localhost:6006# Rerankxinference launch --model-name bge-reranker-base --model-type rerank--endpointhttp://localhost:6006注意--gpu_memory_utilization是 vLLM 显存占比,单卡 4090(24G)上 0.6 已经够跑 0.6B 的小模型。每类模型起好后都能用 curl 自测:/v1/chat/completions、/v1/embeddings、/v1/rerank(rerank 传query+documents+top_n)。
接进 Dify 的入口比想象中隐蔽:先在插件市场搜 Xinference 并安装插件,然后在该插件下分别"添加 LLM / 添加 Embedding 模型 / 添加 Rerank 模型"——三类模型在同一个插件里按类型分栏配置,endpoint 都指向 6006 那个服务地址。能看到模型列表就算通了。
Q1:为什么 Dify 装 Docker,Xinference 却直接装在 GPU 服务器上?
这是课件 v1.2 专门补的问题。Xinference 当然能进 Docker,但模型推理需要大量 GPU,而 Docker 默认用 CPU 不能用 GPU;要让容器用 GPU 得额外装 nvidia-container-toolkit 之类的东西。课程取了省事的那条路:Xinference 不进 Docker。
Q2:Coze 也能私有化,值得自己搭吗?
2025 年 07 月 26 日开源,Apache 2.0 可商用,48 小时 GitHub 星标 9000+,2 核 4GB 内存就能跑,门槛确实低。组件是 Coze Studio(可视化开发)+ Coze Loop(运维与生命周期)。
gitclone https://gitee.com/shkstart/coze-studio.git copy .env.example .envdockercompose--profile'*'up-d# 首次 5~10 分钟# http://localhost:8888模型配置是复制模板改字段:copy backend\conf\model\template\model_template_ark_doubao-seed-1.6.yaml backend\conf\model\ark_doubao-seed-1.6.yaml,然后改id(5 位以上纯数字、全局唯一、上线后别改)、api_key、model。接本地 Ollama 则是base_url填http://host.docker.internal:11434。
但两个坑我得提前说:Coze Loop要求 Go SDK ≥1.23.4,而且课程实测git clone方式启动服务总报错,建议直接下 zip;端口冲突要同时改两处——.env里的COZE_LOOP_APP_OPENAPI_PORT改成 8889,docker-compose.yml里的${COZE_LOOP_APP_OPENAPI_PORT}必须保持一致。结论:能跑,但远不如云托管版本易用,和第二篇对 Coze 私有化的评价一致。
7.5 成本控制:三条能直接照做的建议
- AutoDL 按"上班开机、下班关机"管理,2 元/小时不是小数目。代价是每次开机要重新
conda activate+source /etc/network_turbo+ 重启 Xinference。 - 腾讯云如果用竞价实例,有人出更高价就会把你踢掉。对策是在控制台设定期快照策略,实例被释放后能凭快照快速恢复。
- Dify 不用时
docker compose down,课件的说法是"一键关停所有相关容器,干净不残留"。
最后总结
- 调用侧记住三个差异:Dify 用
inputs+response_mode,Key 与工作流一一绑定;Coze 用parameters+workflow_id/app_id,账号级 token。两个平台都要优先走流式,Dify 的 blocking 模式 100 秒必超时。 - 本地跑模型已经没什么门槛:Ollama +
deepseek-r1:7b,4.7GB 显存级别就能玩。但一定要用命令行指定安装目录,并且单独配OLLAMA_MODELS。 - 私有化的正确姿势是三层解耦:Dify 进 Docker(锁 0.15.5),Xinference 直接装在 GPU 服务器上(AutoDL 只放通 6006,端口必须改),三类模型用同一个 Xinference 插件接进 Dify。
- 成本靠习惯控制:AutoDL 上下班开关机、竞价实例配定期快照、Dify 不用就
docker compose down。
本系列:第一篇 大模型概述与选型 / 第二篇 RAG 与低代码智能体 / 第三篇 Coze & Dify 工作流案例集 / 第四篇 API 调用与私有化部署。
参考资料
[1] Dify 官网
[2] Dify 0.15.5 Release - GitHub
[3] Coze 扣子官网
[4] Coze Studio - GitHub
[5] Ollama 模型库
[6] DeepSeek-R1 蒸馏模型 - HuggingFace
[7] Xorbits Inference(Xinference)
[8] AutoDL 算力云
[9] Cherry Studio 官网
本文整理自《尚硅谷大模型智能体线上速成班 V2.0》Day04《企业级大模型部署》课件。课程交付脚本中包含的真实 API Key 与 token 已全部脱敏,请勿在任何公开仓库提交明文密钥。