1. Dify V1.4.0 本地部署与 Ollama 模型接入的完整场景
Dify 是一个开源的 LLM 应用开发平台,能让你用可视化编排的方式把大模型、工具、知识库串成可用的 AI 应用。它适合想快速验证 Agent 想法、又不想从零写后端的前后端开发者,也适合需要给团队搭一套内部 AI 工作台的运维同学。我这次要做的,是在本地用 Docker 部署 Dify V1.4.0,把 Ollama 里的 qwen3 系列模型接进来,然后分别用 Chatflow 和 Agent 两种方式搭应用,最后通过 MCP 插件接入高德地图 MCP Server,让模型能查天气、做路径规划、搜周边。
整个链路里最容易卡住的地方有三个:一是 Dify 容器访问宿主机 Ollama 的网络地址写错,导致添加模型时一直转圈或报连接失败;二是插件守护进程初始化超时,MCP 插件装到一半就中断;三是 Agent 应用里 MCP 工具调用顺序不对,模型不知道先列工具再调工具。下面我会把 docker-compose 配置、.env 关键参数、Ollama 连通性验证命令、MCP 插件配置 JSON 都贴出来,你照着改就能跑通。
先明确版本:Dify 1.4.0 对 Ollama 的支持比 1.3.x 稳定不少,尤其是PROVIDER_OLLAMA_API_BASE_URL这个变量,1.3.1 里经常出现添加模型后列表不显示的问题,1.4.0 修掉了。所以如果你还在 1.3.x,建议直接切到 1.4.0 分支重新拉代码。
环境假设:一台 Linux 服务器或本地虚拟机,IP 为 192.168.1.100,已装 Docker 和 Docker Compose,Ollama 跑在宿主机 11434 端口,模型有 qwen3:8b 和 qwen3:14b。Dify 代码放在 /root/dify。下面所有路径和 IP 你按自己环境替换。
2. TaoToken 前置准备与 API Key 获取
在开始 Dify 编排之前,建议先把模型调用的入口统一好。我自己的做法是:本地 Ollama 跑小模型做快速验证,同时准备一个云端 API 作为能力补充,这样 Agent 在需要强推理或长上下文时不会因为本地显存不够而卡死。TaoToken 在这里的角色就是提供兼容 OpenAI 协议的模型调用入口,你可以在 Dify 里把它当成一个自定义 OpenAI 供应商来配。
具体操作:打开 https://taotoken.net/api-keys ,注册后创建一个 API Key,复制保存。这个 Key 后面会用在 Dify 的模型供应商配置里。注意不要把它写进前端代码或公开仓库,Dify 的环境变量里也不建议硬编码,最好通过界面添加。
然后确认你要用的模型 ID。进入模型对话页面 https://taotoken.net/models 可以看到当前可用的模型列表,记下你要用的那个 ID,比如某个支持 Function Calling 的模型。Agent 应用对模型的工具调用能力要求比较高,选模型时优先看是否支持 function calling 和工具调用,否则 MCP 工具挂上去也不会被正确触发。
如果你打算长期跑编码类或 Agent 类任务,可以看一下 Coding Plan https://taotoken.net/coding-plan ,它适合需要稳定额度和较长上下文的场景。接入文档在 https://taotoken.net/doc ,里面有 Base URL 和鉴权方式的说明。Base URL 统一用 https://taotoken.net/api ,不要加多余路径。
配置到 Dify 时,在「设置」-「模型供应商」里找到 OpenAI-API-compatible 或自定义供应商,填入:
- Base URL: https://taotoken.net/api
- API Key: 你刚创建的那串
- Model ID: 从模型列表里复制的那个
保存后点测试,能返回模型列表就说明通了。这一步做完,后面 Agent 应用里就可以在本地 qwen3 和云端模型之间切换,哪个跑得顺用哪个。
3. Dify V1.4.0 安装与 Ollama 模型配置片段
先拉代码。注意分支写 1.4.0:
git clone -b 1.4.0 https://github.com/langgenius/dify.git cd dify/docker cp .env.example .env接下来改 .env。下面这段是解决「无法添加 Ollama 模型」的核心,直接复制到 .env 对应位置,不要改 docker-compose.yml:
# 启用自定义模型 CUSTOM_MODEL_ENABLED=true # 指定 Ollama 的 API 地址,host.docker.internal 让容器访问宿主机 OLLAMA_API_BASE_URL=http://host.docker.internal:11434 PROVIDER_OLLAMA_API_BASE_URL=http://host.docker.internal:11434 # 插件工作路径,1.4.0 需要显式指定 PLUGIN_WORKING_PATH=/app/cwd # 避免插件安装超时中断 PLUGIN_PYTHON_ENV_INIT_TIMEOUT=640 PLUGIN_MAX_EXECUTION_TIMEOUT=2400 # 加速依赖安装,用国内镜像 PIP_MIRROR_URL=https://mirrors.aliyun.com/pypi/simple这里有个坑:host.docker.internal在 Linux 上默认不解析,需要在 docker-compose.yml 的 api 和 plugin_daemon 服务里加 extra_hosts。如果你不想改 compose 文件,也可以直接把 IP 写成宿主机局域网 IP,比如http://192.168.1.100:11434,前提是 Ollama 监听 0.0.0.0。验证 Ollama 是否对外监听:
ss -tlnp | grep 11434如果显示 127.0.0.1:11434,说明只监听本地,容器访问不到。改法:
sudo systemctl edit ollama加入:
[Service] Environment="OLLAMA_HOST=0.0.0.0:11434"然后sudo systemctl daemon-reload && sudo systemctl restart ollama。再验证:
curl http://192.168.1.100:11434/api/tags能返回模型列表 JSON 就说明通了。这一步不做,Dify 里添加 Ollama 模型必然失败。
启动 Dify:
docker-compose down docker-compose up -d等所有容器 healthy 后,浏览器打开 http://192.168.1.100 进入 Dify。首次进入会让你设管理员账号,设完登录。
接下来装插件。进入「插件」页面,依次安装:
- Agent 策略插件(Agent Strategy),选 ReAct (Support MCP Tools)
- MCP SSE 插件
- Ollama 插件
Agent 策略插件是后面 Agent 节点调用 MCP 工具的关键,不装的话 Agent 节点里选不到 ReAct 策略。MCP SSE 插件负责和 MCP Server 通信。Ollama 插件负责把本地模型接进来。
装完后去「设置」-「模型供应商」-「Ollama」,点「添加模型」。Model Name 填qwen3:8b,Base URL 填http://host.docker.internal:11434或你的宿主机 IP。保存后如果列表里能看到模型,说明配置成功。如果一直转圈或报错,回到上面检查 OLLAMA_HOST 和 .env 里的两个变量。
4. 验证 Ollama 连通性与 MCP 插件调用高德地图
先验证 Dify 容器能不能访问 Ollama。进 api 容器:
docker exec -it docker-api-1 bash curl http://host.docker.internal:11434/api/tags如果返回 JSON,说明网络通。如果报 Could not resolve host,说明 extra_hosts 没配。在 docker-compose.yml 的 api 和 plugin_daemon 服务下加:
extra_hosts: - "host.docker.internal:host-gateway"然后重启。
接着配高德地图 MCP Server。先去高德开放平台 https://lbs.amap.com/ 注册账号,个人开发者认证后创建应用,拿到 Web 服务 API Key。然后在 Dify 的 MCP SSE 插件里添加服务,配置 JSON 如下:
{ "server_name": { "transport": "sse", "url": "https://mcp.amap.com/sse?key=你的高德Key", "headers": {}, "timeout": 60, "sse_read_timeout": 300 } }保存后点测试连接,能列出工具列表就说明通了。高德 MCP Server 提供 12 个核心工具,包括 maps_weather、maps_geo、maps_ip_location、maps_direction_bicycling、maps_around_search 等。
然后建 Chatflow 应用验证。新建应用选 Chatflow,删掉默认 LLM 节点,添加 Agent 节点。Agent 策略选 ReAct (Support MCP Tools),模型选 qwen3:8b 或 qwen3:14b。工具里勾选 MCP SSE 相关工具,以及你需要的其他工具。指令写:
你是一位智能生活助手。能够根据输入的指令,进行推理和自主调用工具,并按回复规则做专业的回复。 高德MCPServer能力介绍: 1、生成专属地图。2、导航到目的地。3、打车。4、地理编码。5、逆地理编码。6、IP定位。7、天气查询。8、骑行路径规划。9、步行路径规划。10、驾车路径规划。11、公交路径规划。12、距离测量。13、关键词搜索。14、周边搜索。15、详细搜索。 回复规则: 1、回复的内容必须保持中立、客观,避免涉及敏感内容; 2、需要判断是否调用高德MCP来获取对应工具协助你完成任务,调用mcp_sse_call_tool之前要调用mcp_sse_list_tools获取工具列表; 3、在有数据支撑的情况下,回复的内容一定要详细、真实,不能捏造虚假内容; 4、回复内容必须使用中文,表达上尽量口语化。发布后运行,输入「获取杭州市的天气」,观察日志里是否先调 mcp_sse_list_tools 再调 mcp_sse_call_tool,最后返回天气数据。如果模型直接调 call_tool 没先 list_tools,会报 tool not found。实测 qwen3:8b 有时会跳过 list_tools,qwen3:14b 更稳。
再测 IP 定位:输入「本地ip为58.100.7.207,请定位 IP 的所在位置」。正确流程是模型先 list_tools 拿到 maps_ip_location,再 call_tool 传{"ip": "58.100.7.207"},返回浙江省杭州市。如果模型把工具名写成「IP地位」这种中文,就会报 there is not a tool named IP地位,这时候在指令里强调工具名必须用英文原名。
5. 本篇常见报错排查
报错一:添加 Ollama 模型时提示 local proxy failed 或连接超时。原因:Dify 容器访问不到宿主机 Ollama。排查:进 api 容器 curl 宿主机 11434。解决:Ollama 设 OLLAMA_HOST=0.0.0.0:11434,.env 里 OLLAMA_API_BASE_URL 和 PROVIDER_OLLAMA_API_BASE_URL 都指向宿主机可达地址,docker-compose.yml 加 extra_hosts。
报错二:插件安装到一半中断,日志显示 PLUGIN_PYTHON_ENV_INIT_TIMEOUT。原因:依赖下载慢或超时太短。解决:.env 里把 PLUGIN_PYTHON_ENV_INIT_TIMEOUT 调到 640,PLUGIN_MAX_EXECUTION_TIMEOUT 调到 2400,PIP_MIRROR_URL 换成国内镜像,然后 docker-compose down && docker-compose up -d 重来。
报错三:Agent 节点报 reading choices 或返回空。原因:模型不支持 function calling,或 MCP 工具没挂到 Agent 节点上。解决:换支持工具调用的模型,Agent 节点工具列表里确认勾选了 mcp_sse_list_tools 和 mcp_sse_call_tool。
报错四:MCP 调用报 401 或 OAuth 相关错误。原因:高德 Key 无效或没配到 URL 里。解决:检查 URL 里 key 参数是否正确,高德开放平台确认应用已启用 Web 服务。如果用的是 TaoToken 的模型入口,确认 API Key 没写错,Base URL 是 https://taotoken.net/api 。
报错五:Agent 应用里模型不调工具,直接编答案。原因:指令没强调必须先 list_tools。解决:在提示词里写死执行步骤:先推理需要哪些工具,再调 mcp_sse_list_tools 确认工具名,再调 mcp_sse_call_tool,最后按规则回复。
报错六:Chatflow 里 Agent 节点输出乱码或截断。原因:sse_read_timeout 太短。解决:MCP 配置里 timeout 设 60,sse_read_timeout 设 300。
6. 继续用 Agent 应用接入高德 MCP 与模型入口
Agent 应用和 Chatflow 的区别在于:Agent 应用是对话式,模型自主决定调哪些工具;Chatflow 是编排式,你控制流程节点。两种都建一遍,能帮你理解 Dify 的两种用法。
建 Agent 应用:新建「Agent」类型应用,模型选 qwen3:14b 或 TaoToken 上的强模型。提示词写:
你是一位智能生活助手。能够根据输入的指令,并按执行步骤做专业的回复。 高德MCPServer能力介绍: 1、生成专属地图。2、导航到目的地。3、打车。4、地理编码。5、逆地理编码。6、IP定位。7、天气查询。8、骑行路径规划。9、步行路径规划。10、驾车路径规划。11、公交路径规划。12、距离测量。13、关键词搜索。14、周边搜索。15、详细搜索。 执行步骤: 1、通过推理思考得到需要执行的高德MCP工具(可能有多个工具)。 2、通过调用mcp_sse_list_tools工具获取MCP工具列表,查询第一步需要的工具是否在列表中,获取MCP工具名称。 3、通过mcp_sse_call_tool 调用上一步得到的MCP工具。 4、按照回复规则做出专业回复。 回复规则: 1、回复的内容必须保持中立、客观,避免涉及敏感内容; 2、在有数据支撑的情况下,回复的内容一定要详细、真实,不能捏造虚假内容; 3、回复内容必须使用中文,表达上尽量口语化,按照markdown格式输出。工具里添加 mcp_sse_list_tools、mcp_sse_call_tool,以及你需要的其他工具。发布后测试「获取杭州市的天气」,看日志里 Thought 阶段是否先 list_tools 再 call_tool。实测 qwen3:14b 在 18 秒左右完成推理并正确调用 maps_weather,返回未来几天天气。qwen3:8b 有时会跳过 list_tools 直接猜工具名,导致报错。
如果你本地显存不够跑 14b,可以把模型切到 TaoToken 的模型对话入口 https://taotoken.net/chat ,在 Dify 里配好 OpenAI-API-compatible 供应商后直接选云端模型。Base URL 用 https://taotoken.net/api ,Key 用你在 API Keys 页面创建的那串。这样 Agent 的推理和工具调用都走云端,本地只跑 Dify 和 Ollama 做备用。
最后提醒一点:MCP 工具调用对模型能力要求高,qwen3:8b 能跑但偶尔会漏步骤,qwen3:14b 更稳。如果你要长期跑 Agent 类任务,建议把模型入口统一到 TaoToken,本地 Ollama 只做离线兜底。配置路径就是「设置」-「模型供应商」-「OpenAI-API-compatible」,填 Base URL、Key、Model ID 三件套,保存后测试通过即可在 Agent 应用里选用。