什么是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 > 添加模型 中填入:

dify添加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 模型

dify使用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. 解决:

在高版本中如何关闭推理呢?

  1. 可以通过修改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

  1. 根据新的模型文件,生成新的模型,该模型不会显示推理过程
ollama create qwen3n:1.7b -f ./qwen3n.mf

然后在Dify中重新添加模型qwen3n:1.7b,具体步骤可以参考这里

最后在Dify中切换模型qwen3:1.7bqwen3n:1.7b,即可使用无推理过程的qwen3

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐