一、环境准备
1.1 安装git工具
1.2 安装docker
1.2.1 下载 Docker Desktop:
- 访问 Docker 官网:https://www.docker.com/。
- 点击页面上的“Download for Windows - AMD64”按钮,以下载适用于 Windows 系统的 Docker Desktop 安装文件。
1.2.2 安装 Docker Desktop:
- 双击下载的安装文件,开始安装 Docker Desktop。
- 按照安装向导的指示完成安装。在安装过程中,将提示安装 WSL 2,建议勾选此选项以获得更好的性能。
1.2.3 配置 Docker Desktop:
安装完成后,启动 Docker Desktop。
首次打开时,将出现 Docker 订阅协议,点击
Accept
(接受)以继续。随后,系统将提示用户登录。您可以选择使用 GitHub 账户或 Google 账户登录,若无上述账户,可选择跳过登录步骤。
接下来,将出现调查问卷,您可以根据个人喜好选择填写,或直接跳过此步骤。
1.3 汉化 Docker Desktop(可选)
若想使 Docker Desktop 显示中文界面,按照以下步骤进行汉化:
1.3.1 下载对应版本的中文语言包:
- 访问 GitHub,下载适用于 Docker Desktop 的中文语言包,Windows系统下下载
app-Windows-x86.asar
包即可,链接地址为:DockerDesktop-CN。 - 将下载的文件移动到
C:\Program Files\Docker
目录下(即 Docker 的安装根目录)。
1.3.2 检查 Docker Desktop 版本:
- 启动 Docker Desktop,版本号将在右下角显示。
1.3.3 备份并替换 app.asar 文件:
- 打开 Docker Desktop 中文语言包,选择与您 Docker 版本相符的
app.asar
文件并复制。 - 导航至 Docker 的安装目录,路径默认为:
C:\Program Files\Docker\Docker\frontend\resources
- 在该目录下找到
app.asar
文件,建议先备份原文件,然后将复制的中文语言包中的app.asar
文件粘贴并替换原有文件。
1.3.4 重新启动 Docker Desktop:
- 完成替换后,请关闭 Docker Desktop,然后重新启动该程序。此时,Docker Desktop 应该以中文界面显示。
二、 Dify本地部署步骤详解
先运行我们安装的docker Desktop
软件
2.1 克隆dify本地,输入命令(科学上网环境自备):
git clone https://github.com/langgenius/dify.git
**2.2 使用Docker一键部署(推荐新手)
进入dify/docker
目录,打开终端,输入命令:
cd dify/docker
cp .env.example .env
docker-compose up -d # 启动中间件(PostgreSQL/Redis/Weaviate)
- 验证服务:访问
http://localhost/apps
,首次需设置管理员账号。
如果成功部署,终端出现内容如下:
[+] Running 12/12
✔ Network docker_default Created 0.4s
✔ Network docker_ssrf_proxy_network Created 0.1s
✔ Container docker-db-1 Healthy 3.2s
✔ Container docker-redis-1 Starte... 1.9s
✔ Container docker-web-1 Started 1.2s
✔ Container docker-ssrf_proxy-1 S... 2.5s
✔ Container docker-sandbox-1 Star... 2.5s
✔ Container docker-weaviate-1 Sta... 2.5s
✔ Container docker-plugin_daemon-1 Started 4.3s
✔ Container docker-api-1 Started 4.1s
✔ Container docker-worker-1 Start... 4.2s
✔ Container docker-nginx-1 Starte... 4.9s
如果出现报错,我们打开Docker,在设置的Docker 引擎
里面,一个json配置文件的入口,我们在里面添加下面内容开启国内镜像加速:
方法一:
{
"registry-mirrors": [
"https://docker.1ms.run",
"https://docker.xuanyuan.me"
],
"proxies": {
"default": {
"httpProxy": "http://127.0.0.1:7890",
"httpsProxy": "http://127.0.0.1:7890",
"noProxy": "localhost,127.0.0.1,registry-1.docker.io,docker.io,docker.1ms.run,docker.xuanyuan.me"
}
}
}
方法二:
{
"proxies": {
"default": {
"httpProxy": "http://host.docker.internal:7890",
"httpsProxy": "http://host.docker.internal:7890",
"noProxy": "localhost,127.0.0.1,.local,host.docker.internal"
}
}
}
重新启动Docker,然后重新进入dify/docker
目录执行命令:
docker-compose up -d
如果需要重启所有服务,可以执行命令:
docker-compose -f docker/docker-compose.yaml down && docker-compose -f docker/docker-compose.yaml up -d
三、接入 Ollama 部署的本地模型
Ollama 是一款跨平台推理框架客户端(MacOS、Windows、Linux),专为无缝部署大型语言模型(LLM)(如 Llama 2、Mistral、Llava 等)而设计。通过一键式设置,Ollama 可以在本地运行 LLM,将所有交互数据保存在自己的机器上,从而提高数据的私密性和安全性。
下载并启动 Ollama
下载 Ollama
访问 Ollama 下载页,下载对应系统 Ollama 客户端。运行 Ollama 并与 Llama3.2 聊天
ollama run llama3.2
启动成功后,ollama 在本地 11434 端口启动了一个 API 服务,可通过
http://localhost:11434
访问。
如需运行其它模型,访问 Ollama Models 了解详情。在 Dify 中接入 Ollama
在
设置 > 模型供应商 > Ollama
中填入:
模型名称:
llama3.2
基础 URL:
http://<your-ollama-endpoint-domain>:11434
此处需填写 Ollama 服务地址。这里分几种情况:- 若 Dify 为 Docker 部署,建议填写局域网 IP 地址,例如:
http://192.168.1.3:11434
或 Docker 容器的内部 IP 地址,例如:http://host.docker.internal:11434
。 - 若为本地源码部署,可填写
http://localhost:11434
。
- 若 Dify 为 Docker 部署,建议填写局域网 IP 地址,例如:
模型类型:
对话
模型上下文长度:
4096
模型的最大上下文长度,若不清楚可填写默认值 4096。最大 token 上限:
4096
模型返回内容的最大 token 数量,若模型无特别说明,则可与模型上下文长度保持一致。是否支持 Vision:
是
当模型支持图片理解(多模态)勾选此项,如llava
。是否支持函数调用:
是
点击 “保存” 校验无误后即可在应用中使用该模型。
Embedding 模型接入方式与 LLM 类似,只需将模型类型改为 Text Embedding 即可。
使用 Ollama 模型
进入需要配置的 App 提示词编排页面,选择 Ollama 供应商下的
llava
模型,配置模型参数后即可使用。也可以配置你自己在Ollama中下载的模型
四、使用Dify构建RAG
4.1 ollama安装 Embedding 模型
通过 ollama 来安装Embedding模型,运行命令下载:
ollama run nn200433/text2vec-bge-large-chinese
4.2 在 Dify 中接入 Ollama
在 设置 > 模型供应商 > Ollama
中填入:
设置同上面添加大模型一样,只需要在选择模型类型时选:Text Embedding
4.3 知识库创建
进入Dify知识库界面,点击创建知识库
进入界面后,我们对知识库进行一个基础设置:
知识库配置好后,我们就可以在我们创建的应用下引用我们的知识库
问题记录
系统环境:
WSL2-Ubuntu22.04 + docker desktop + dify
dify添加 OpenAI API Key没有反应
docker容器中日志:
2025/05/14 10:53:50 run.go:132: [ERROR]plugin langgenius/openai:0.0.22 exited with error: exit status 1
0453ede311196acaad0531ad9e3d5561cd622e6508cd3254/main.py", line 7, in <module>
plugin = Plugin(DifyPluginEnv())
^^^^^^^^^^^^^^^
File "/app/storage/cwd/langgenius/openai-0.0.22@fa668d0ec3b434270453ede311196acaad0531ad9e3d5561cd622e6508cd3254/.venv/lib/python3.12/site-packages/pydantic_settings/main.py", line 176, in __init__
super().__init__(
File "/app/storage/cwd/langgenius/openai-0.0.22@fa668d0ec3b434270453ede311196acaad0531ad9e3d5561cd622e6508cd3254/.venv/lib/python3.12/site-packages/pydantic/main.py", line 253, in __init__
validated_self = self.__pydantic_validator__.validate_python(data, self_instance=self)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
pydantic_core._pydantic_core.ValidationError: 1 validation error for DifyPluginEnv
REMOTE_INSTALL_URL
Field required [type=missing, input_value={'INSTALL_METHOD': 'local'}, input_type=dict]
For further information visit [https://errors.pydantic.dev/2.11/v/missing](https://errors.pydantic.dev/2.11/v/missing)
docker容器中API容器日志:
2025-05-14 11:00:50.513 ERROR [Dummy-2] [app.py:875] - Exception on /console/api/workspaces/current/model-providers/langgenius/openai/openai [POST]
Traceback (most recent call last):
File "/app/api/.venv/lib/python3.12/site-packages/flask/app.py", line 917, in full_dispatch_request
rv = self.dispatch_request()
^^^^^^^^^^^^^^^^^^^^^^^
File "/app/api/.venv/lib/python3.12/site-packages/flask/app.py", line 902, in dispatch_request
return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args) # type: ignore[no-any-return]
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/app/api/.venv/lib/python3.12/site-packages/flask_restful/__init__.py", line 489, in wrapper
resp = resource(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^
File "/app/api/.venv/lib/python3.12/site-packages/flask/views.py", line 110, in view
return current_app.ensure_sync(self.dispatch_request)(**kwargs) # type: ignore[no-any-return]