Windows10下用WSL2部署Dify1.9,并对接Ollama部署的通义千问qwen3
摘要: 本文介绍了如何在Windows10环境下通过WSL2部署开源LLM应用开发平台Dify 1.9.2,并解决因Windows与Ubuntu用户名不一致导致的PostgreSQL权限问题。通过将项目移至Ubuntu的home目录成功启动后,进一步指导如何将Dify与本地Ollama部署的离线模型对接,包括添加Ollama插件及配置模型参数(如模型名称、服务地址、类型和上下文长度)。文章为开发者
什么是Dify
官方介绍是:Dify 是一个开源的 LLM 应用开发平台。其直观的界面结合了 AI 工作流、RAG 管道、Agent、模型管理、可观测性功能等,让开发者可以快速从原型到生产。
简言之,Dify 是一个开源的低代码开发平台,旨在帮助用户快速构建LLM应用程序(如LLM驱动的 Web 应用、API 服务等)。
window10下部署Dify
截止当前(2025-11-6)Dify的最新版本为1.9.2,这是一个“更锋利、更快、更可靠”的版本。根据官方部署文档:
1. 打开WSL的Ubuntu控制台
wsl -l -v
NAME STATE VERSION
* Ubuntu-22.04 Running 2
docker-desktop Running 2
wsl -d Ubuntu-22.04
2. 拉取源码
git clone https://github.com/langgenius/dify.git --branch 1.9.2
3. 启动Dify
cd dify/docker
cp .env.example .env
docker compose up -d
但是发现报错:
[+] Running 13/13
✔ Network docker_default Created 0.0s
✔ Network docker_ssrf_proxy_network Created 0.0s
✔ Container docker-redis-1 Started 0.8s
✔ Container docker-ssrf_proxy-1 Started 0.9s
✔ Container docker-sandbox-1 Started 0.7s
✔ Container docker-web-1 Started 0.8s
✘ Container docker-db-1 Error 9.6s
✔ Container docker-weaviate-1 Started 0.8s
✔ Container docker-plugin_daemon-1 Created 0.1s
✔ Container docker-api-1 Created 0.1s
✔ Container docker-worker_beat-1 Created 0.1s
✔ Container docker-worker-1 Created 0.1s
✔ Container docker-nginx-1 Created 0.1s
dependency failed to start: container docker-db-1 is unhealthy
4. 查看日志
docker logs -f docker-db-1
发现如下错误:
chmod: /var/lib/postgresql/data/pgdata: Operation not permitted
PostgreSQL Database directory appears to contain a database; Skipping initialization
2025-11-06 03:00:46.929 UTC [1] FATAL: data directory "/var/lib/postgresql/data/pgdata" has wrong ownership
2025-11-06 03:00:46.929 UTC [1] HINT: The server must be started by the user that owns the data directory.
这个错误提示是说没有操作权限,这是由于我们是在/mnt/f/pycharm_project目录下,也就是在windows本地的盘符里,windows和ubuntu的用户名不一致,也就是windows的管理员角色的用户名和ubuntu管理员角色的用户名不一致导致的。
解决这个问题,有三种途径,一种途径是修改ubuntu的用户名和windows一致,另一种途径是移动文件夹到ubuntu的home目录下,还有一种途径就是不用ubuntu控制台,直接用windows的powershell控制台,以管理员身份打开powershell,在powershell中输入同样的命令:docker compose up -d。我们选择第二种途径(其实最简单是第三种):
mv /mnt/f/pycharm_project/dify1.9.2 ~/pycharm_project/
然后再启动
cd ~/pycharm_project/dify1.9.2/docker
docker compose up -d
显示:
[+] Running 13/13
✔ Network docker_ssrf_proxy_network Created 0.0s
✔ Network docker_default Created 0.0s
✔ Container docker-db-1 Healthy 2.1s
✔ Container docker-ssrf_proxy-1 Started 0.8s
✔ Container docker-web-1 Started 0.8s
✔ Container docker-sandbox-1 Started 0.6s
✔ Container docker-weaviate-1 Started 0.4s
✔ Container docker-redis-1 Started 0.6s
✔ Container docker-api-1 Started 2.5s
✔ Container docker-plugin_daemon-1 Started 2.5s
✔ Container docker-worker_beat-1 Started 2.7s
✔ Container docker-worker-1 Started 2.7s
✔ Container docker-nginx-1 Started 2.7s
即表示正常启动Dify。
Dify对接Ollama部署的离线模型
关于Ollama部署离线模型,可以参考这篇文章"windows10下用wsl2部署Ollama同时用docker部署nginx开放外网访问"
1. Dify安装Ollama插件
2. 在 Dify 中接入 Ollama
在界面右上角点击, 设置 > 模型供应商 > Ollama > 添加模型 中填入:

-
模型名称:
qwen3:1.7b -
基础 URL:
http://<your-ollama-endpoint-domain>:11434此处需填写 Ollama 服务地址。该地址可以使 Ollama 服务被所有 IP 访问。对于我们服务地址,填写:
http://10.1.101.248:18080 -
模型类型:
对话 -
模型上下文长度:
4096模型的最大上下文长度,若不清楚可填写默认值 4096。
-
最大 token 上限:
4096模型返回内容的最大 token 数量,若模型无特别说明,则可与模型上下文长度保持一致。
-
是否支持 Vision:
否当模型支持图片理解(多模态)勾选此项,如
llava。
点击 “保存” 校验无误后即可在应用中使用该模型。
Embedding 模型接入方式与 LLM 类似,只需将模型类型改为 Text Embedding 即可。
3. 使用 Ollama 模型

进入需要配置的 App 提示词编排页面,选择 Ollama 供应商下的 qwen3:1.7b 模型,配置模型参数后即可使用。
Dify使用Ollama(0.12.9)部署的qwen3:1.7b模型
1. 问题:
在聊天助手类应用中使用qwen3:1.7b大模型,会发现这个推理模型,一直输出推理过程,但是Dify界面上却没有输出,长期处于等待状态。这是由于Ollama版本升级导致的,Ollama≥ 0.1.47的版本都有这个问题,切换回Ollama≤0.1.45版本,可以正常显示:
并且通过在提示词中添加/no_think来切换是否开启推理。
2. 解决:
在高版本中如何关闭推理呢?
- 可以通过修改Ollama的模型文件实现,在WSL的Ubuntu控制台下,新建模型文件qwen3n.mf:
vim qwen3n.mf
填写如下内容:
FROM qwen3:1.7b
TEMPLATE """
{{- if .Messages }}
{{- if or .System .Tools }}<|im_start|>system
{{- if .System }}
{{ .System }}
{{- end }}
{{- if .Tools }}
# Tools
You may call one or more functions to assist with the user query.
You are provided with function signatures within <tools></tools> XML tags:
<tools>
{{- range .Tools }}
{"type": "function", "function": {{ .Function }}}
{{- end }}
</tools>
For each function call, return a json object with function name and arguments within <tool_call></tool_call> XML tags:
<tool_call>
{"name": <function-name>, "arguments": <args-json-object>}
</tool_call>
{{- end }}<|im_end|>
{{ end }}
{{- range $i, $_ := .Messages }}
{{- $last := eq (len (slice $.Messages $i)) 1 -}}
{{- if eq .Role "user" }}<|im_start|>user
/nothink{{ .Content }}<|im_end|>
{{ else if eq .Role "assistant" }}<|im_start|>assistant
{{ if .Content }}{{ .Content }}
{{- else if .ToolCalls }}<tool_call>
{{ range .ToolCalls }}{"name": "{{ .Function.Name }}", "arguments": {{ .Function.Arguments }}}
{{ end }}</tool_call>
{{- end }}{{ if not $last }}<|im_end|>
{{ end }}
{{- else if eq .Role "tool" }}<|im_start|>user
<tool_response>
{{ .Content }}
</tool_response><|im_end|>
{{ end }}
{{- if and (ne .Role "assistant") $last }}<|im_start|>assistant
{{ end }}
{{- end }}
{{- else }}
{{- if .System }}<|im_start|>system
{{ .System }}<|im_end|>
{{ end }}{{ if .Prompt }}<|im_start|>user
{{ .Prompt }}<|im_end|>
{{ end }}<|im_start|>assistant
{{ end }}{{ .Response }}{{ if .Response }}<|im_end|>{{ end }}
"""
关键部分是这里
...
{{- if eq .Role "user" }}<|im_start|>user
/nothink{{ .Content }}<|im_end|>
{{ else if eq .Role "assistant" }}<|im_start|>assistant
...
高版本的Ollama,控制推理的命令改成了/nothink
- 根据新的模型文件,生成新的模型,该模型不会显示推理过程
ollama create qwen3n:1.7b -f ./qwen3n.mf
然后在Dify中重新添加模型qwen3n:1.7b,具体步骤可以参考这里
最后在Dify中切换模型qwen3:1.7b到qwen3n:1.7b,即可使用无推理过程的qwen3
更多推荐


所有评论(0)