手把手教你用 Ollama + Dify 搭建本地 AI 助手(小白也能搞定)
手把手教你用 Ollama + Dify 搭建本地 AI 助手(小白也能搞定)
前言
最近想把大模型"装进"自己的电脑里,完全离线、完全私有,不被任何服务方限流。于是花了一个晚上折腾,用 Ollama 在本地跑起了 DeepSeek 模型,又用 Dify 搭建了一个简单的对话助手,全程不花一分钱,数据全在本机。
这篇教程就把我这次完整的搭建过程记录下来,每一步都配截图,纯新手跟着点也能成。
咱们要达成的目标是:
在自己电脑上跑起来一个大模型 → 用可视化工具做一个聊天助手 → 用 API 把它接到自己的项目里
为什么要在本地跑大模型?
- 隐私安全:对话内容不出本机,适合处理敏感数据
- 完全免费:不用 API Key,不用按 token 付费
- 不受限流:服务方再宕机也与你无关
- 学习价值:搞清楚 AI 应用的底层链路
前置准备
| 项目 | 最低要求 | 推荐配置 |
|---|---|---|
| 操作系统 | Windows 10/11、macOS、Linux | 无所谓 |
| 内存 | 8GB | 16GB 及以上 |
| 可用磁盘 | 10GB | 20GB+ |
| Docker | 已安装 | Docker Desktop 最新版 |
| 网络 | 能拉镜像就行 | — |
| 命令行 | 不怕就行 😊 | — |
💡 小提示:本文以 Windows + Docker Desktop 为主线演示,Mac/Linux 步骤几乎一致,只在安装命令处有差异。
第一步:安装 Ollama
Ollama 是什么?一句话:本地跑大模型的"一键启动器"。你不用关心 PyTorch、CUDA、量化这些底层细节,一条命令就能把模型拉下来跑起来。
1.1 下载安装
直接到官网下载对应系统的安装包:https://ollama.com/download

本篇演示系统说明
本文全程以 Windows 安装方式作为主线演示,但 Ollama 官网同样为 macOS 和 Linux 提供了官方原生安装包。
你只需要根据自己的操作系统选择对应的安装包即可,整体搭建流程几乎一致,只在个别命令(如 Linux 安装脚本)上略有差异。官网下载页面会根据你的操作系统自动推荐适配的安装包。
Windows 安装(本文主线):
- 双击下载好的
OllamaSetup.exe,一路"下一步"到底 - 安装完成后 Ollama 会自动在后台启动,可在任务栏右下角托盘看到一个小羊驼图标

macOS 安装:
- 下载
.dmg安装包,拖进Applications文件夹即可
Linux 安装(以 Ubuntu / Debian 为例):
- 执行官方一键脚本:
curl -fsSL https://ollama.com/install.sh | sh
💡 小提示:如果你想看其他系统的安装包,可以在官网页面顶部的系统选择器手动切换;也可以参考 Ollama 官方文档 了解各平台详细的安装方式。
1.2 验证安装
打开终端(Windows 用 PowerShell 或 Git Bash,Mac/Linux 用 Terminal),执行:
ollama --version看到版本号就说明装好了,类似下面这样:

1.3 几个必备命令速查
| 命令 | 作用 |
|---|---|
ollama pull <模型名> | 拉取模型到本地 |
ollama run <模型名> | 运行模型(自动拉取) |
ollama list | 查看本地已下载的模型 |
ollama rm <模型名> | 删除某个模型 |
ollama ps | 查看当前正在运行的模型 |

第二步:安装 DeepSeek 模型
Ollama 装好了,模型库里有一堆可以用的模型(Llama、Qwen、Mistral 等等)。咱们这次选 DeepSeek,中文能力强、推理能力也在线、开源协议友好。
2.1 选哪个版本?(重要!)
DeepSeek 在 Ollama 上有多个版本,主要是参数量的区别。别一上来就拉最大的,先看自己机器扛不扛得住:
| 模型 | 大小 | 内存要求 | 适用场景 |
|---|---|---|---|
deepseek-r1:1.5b | ~1.1GB | 8GB+ | 普通笔记本、想先跑通流程 |
deepseek-r1:7b | ~4.7GB | 16GB+ | 主流家用机,体验和效果都不错 |
deepseek-r1:14b | ~9GB | 32GB+ | 有独立显卡,质量明显提升 |
deepseek-r1:32b | ~20GB | 64GB+ | 高配台式/工作站 |
deepseek-r1:70b | ~43GB | 64GB+ 显存 | 顶级显卡或 Mac Studio |
💡 我的建议:第一次玩,先拉
deepseek-r1:1.5b把流程跑通,再回头换大模型。跑通比跑大更重要。
也可以在 Ollama 官网的 models 页面 看每个版本的详细说明和推荐配置:

2.2 拉取模型(可选)
-- 为什么说拉取模型的步骤可选:2.3执行ollama run时 如果模型不存在会自动去拉取。
ollama pull deepseek-r1:1.5b下载过程会显示进度条,耐心等一两分钟(模型会缓存在 C:\Users\<用户名>\.ollama\models 下面)
2.3 试聊一下
模型下载完后,直接运行:
ollama run deepseek-r1:1.5b进入交互式对话模式,输入任意内容,看到回复就算成功 🎉:

输入 /bye 退出对话。
⚠️ 下一步关键:Ollama 默认只监听
127.0.0.1:11434(只接受本机连接),而咱们接下来要把 Dify 部署在 Docker 里 — 那是另一个网络空间,连不上你电脑的127.0.0.1。解决方法看下一节 👇
2.4 让 Ollama 监听外部访问(关键!)
为什么必须配置? 要让 Docker 里的 Dify 能连上 Ollama,需要让 Ollama 监听 0.0.0.0(所有网卡),而不是 127.0.0.1(仅本机)。这一步骤是新手最容易栽跟头的地方,务必先配好再继续!
Windows 配置
- 右键 此电脑 → 属性 → 高级系统设置 → 环境变量
- 在 系统变量 区域点 新建:
- 变量名:
OLLAMA_HOST - 变量值:
0.0.0.0
- 变量名:
- 保存后 重启 Ollama(右键托盘图标 → 退出 Ollama,再重新启动)

macOS 配置
launchctl setenv OLLAMA_HOST "0.0.0.0"然后退出 Ollama 应用并重新启动。
Linux 配置
编辑 /etc/systemd/system/ollama.service,在 [Service] 段添加:
Environment="OLLAMA_HOST=0.0.0.0"然后:
sudo systemctl daemon-reload
sudo systemctl restart ollama验证配置生效
先记下你电脑的局域网 IP,后面 4.2 节要用到:
# Windows PowerShell
ipconfig
# Mac/Linux 终端
ifconfig # 或 ip addr找到类似 192.168.x.x 或 10.x.x.x 的 IPv4 地址记下来。
然后浏览器访问 http://你的局域网IP:11434,能看到 Ollama is running 就说明监听 0.0.0.0 生效了 ✅。
第三步:部署 Dify
模型有了,但直接对着终端聊天太原始了。咱们需要一个可视化的工作台来搭建 AI 应用,这里登场的是 Dify。
3.1 Dify 是什么?
Dify 是一个开源的 LLMOps 平台,你可以把它理解为 "AI 应用的低代码编辑器"——拖拖拽拽就能做出一个聊天机器人、AI 助手、知识库问答系统。
版本说明
本文所有截图、操作步骤均基于 Dify v1.16.0(对应 Dify GitHub Releases 的 1.16.0 tag)。
Dify 迭代非常快(几乎每周一个小版本),不同版本在 UI、菜单路径、插件机制上可能有差异,如果你用的不是 1.16.0,看到的界面可能跟截图不完全一致。
跟着教程做时,请先按 3.3 节的操作把源码 checkout 到 1.16.0 tag,这样能保证流程跟本文严格对齐。
3.2 前置要求
- 已安装 Docker Desktop(Windows/Mac/Linux 都有)
- 确保 Docker 内存分配 ≥ 4GB(Docker Desktop → Settings → Resources)
确认 Docker Desktop 已经在跑(右下角小鲸鱼图标亮起):

⚠️ 特别提醒:Docker Desktop 安装后,需要重启一次电脑,否则可能出现虚拟化未启用的问题。
3.3 拉取 Dify 源码并启动
按下面四步依次执行:
步骤 1:克隆仓库 + 切换版本
打开终端,执行:
# 1. 进入你想存放 Dify 的目录(我这里放在 D 盘)
cd D:\software
# 2. 克隆 Dify 官方仓库
git clone https://github.com/langgenius/dify.git
# 3. 切换到与本文对应的 1.16.0 版本
# (默认 main 分支是最新代码,流程可能对不上)
cd dify
git checkout 1.16.0执行过程中能看到 git clone 的下载进度:

步骤 2:进入 docker 配置目录 + 复制环境变量模板
# 进入 docker 配置目录
cd docker
# 复制环境变量模板
copy .env.example .env💡 关于目录名:如果你看到的是
dify-master,那是因为你的 git 默认把master当主分支;新版本 GitHub 默认分支名是main,所以git clone出来的目录直接叫dify。根据实际情况调整上面cd的目录名。
步骤 3:编辑 .env,追加关键配置
用任意编辑器(记事本、VS Code 都行)打开 dify/docker/.env 文件,滚动到文件最末尾,追加下面两行:
# 启用自定义模型(Ollama 接入必须)
CUSTOM_MODEL_ENABLED=true
# 指定 Ollama 的 API 地址(Docker 容器 → 宿主机的 11434 端口)
OLLAMA_API_BASE_URL=host.docker.internal:11434保存后退出。
步骤 4:启动所有服务
在 dify/docker 目录下执行:
docker compose up -d💡 首次启动会自动拉取一堆 Docker 镜像,会等比较久(几分钟),耐心等。
启动成功会看到一堆 Container ... Running:

3.4 访问 Dify 控制台
浏览器打开 http://localhost/install,第一次访问会进入初始化页面:

按提示设置管理员账号、邮箱、密码,提交后就进入了主界面:

📌 小提示:Dify 默认占用
80端口,如果被占用,先去docker/.env里改EXPOSE_NGINX_PORT再重启。
第四步:在 Dify 中接入本地 Ollama 模型
Dify 默认是不带本地模型的,我们要手动把刚才装的 Ollama 接入进来。
4.1 添加 Ollama 模型供应商
Dify 1.16.0 把所有"模型 / 工具 / 数据源"类的扩展都收纳在 左侧菜单的【集成】(Integrations) 里,Ollama 模型供应商的添加入口就在这里。
步骤 1:进入【集成】
点击 Dify 左侧菜单 → 集成:

步骤 2:找到 Ollama 模型供应商
在集成页面下找到 模型供应商 分类,里面列出所有支持的大模型。找到 Ollama(羊驼图标)的那张卡:

💡 小提示:因为我们在 3.3 节已经往
.env里写了CUSTOM_MODEL_ENABLED=true,Dify 启动时通常已自动识别并预装 Ollama 插件。如果卡片显示"已安装 / Configure",直接进入步骤 3;只有显示"安装 / Install"时才需要手动点一下安装。
步骤 3:进入 Ollama 配置页,添加模型
点击 Ollama 卡片,进入 Ollama 详情/配置页,点页面右侧 添加模型 按钮:

4.2 填写模型信息
按下表填写(下面的值是 Windows + 本机 Ollama + Docker Dify 这个推荐组合):
| 字段 | 值 |
|---|---|
| 模型名称 | deepseek-r1:1.5b(用 ollama list 查实际名) |
| 模型类型 | LLM(对话) |
| 基础 URL | http://host.docker.internal:11434 |
| 模型上下文长度 | 4096(默认即可) |
| API 密钥(可选) | 非必填 |
| 是否支持 Vision | 否 |

填完点 保存,Dify 会去 Ollama 那儿验证连通性,显示 ✅ 就成功了。
基础 URL 不同场景的写法
如果你不是在"Windows + 本机 Ollama + Docker Dify"这个组合下,基础 URL 要相应调整:
| Dify 部署方式 | Ollama 所在机器 | 基础 URL |
|---|---|---|
| 本地源码部署 Dify | 本机 | http://localhost:11434 |
| Docker 部署 Dify | 本机(Windows / Mac) | http://host.docker.internal:11434 |
| Docker 部署 Dify | 本机(Linux) | http://<本机局域网IP>:11434 ⚠️ |
| Docker 部署 Dify | 局域网另一台电脑 | http://<Ollama 主机局域网IP>:11434 |
| Docker 部署 Dify | 公网 / 远程服务器 | http://<域名或公网IP>:11434 |
⚠️ 重要:
host.docker.internal在 Linux 上的 Docker 默认不支持,必须用宿主机的局域网 IP。Windows / Mac 的 Docker Desktop 是支持的。
💡 保存之后没反应 / 报错? 别慌,先去文末的常见问题 Q4 排查网络和 OLLAMA_HOST 配置。
4.3 在模型列表里确认能看到
回到 集成 页面,展开 Ollama 模型详情,能看到 Ollama 下挂着刚加的模型,就说明全部联通了:

第五步:搭建第一个聊天助手
万事俱备,咱们开始实操搭建第一个 AI 应用。
5.1 创建应用
主界面左侧菜单 → 工作室 → 创建空白应用:

选择应用类型:
- 聊天助手:一问一答,带多轮对话(我们选这个)
- 文本生成应用:单次输出,适合写作
- Agent:能调用工具的高级模式(后面再玩)

给应用起个名字,比如 本地 DeepSeek 助手,点 创建。
5.2 关联模型
进入应用编排页面,右上角下拉框里选择我们刚加的 deepseek-r1:1.5b:

5.3 编写系统提示词
在 编排 页面的 提示词 框里,给助手一个"人设":
你是一个友好的中文 AI 助手,名叫"小深"。
- 回答简洁清晰,优先用中文
- 遇到不会的问题诚实告知,不要瞎编
- 代码回答请使用 markdown 代码块
5.4 调试预览
页面右侧就是实时调试窗口,直接发条消息试试:
你好,简单介绍一下你自己
模型返回的内容直接显示在右下方,延迟大概几秒到十几秒:

看到正确回复就代表整个链路打通了 🎉🎉🎉
5.5 发布应用
调试没问题后,点右上角 发布 → 发布更新,应用就上线了:

发布后还能在 监测 菜单里看到每次对话的日志、token 消耗等。 
第六步:API 调用 Dify(进阶彩蛋)
Dify 不只是给你一个 Web 界面,它还给每个应用暴露了 REST API,这样你就能把自己搭的 AI 助手集成到任何地方——自己的网站、命令行工具、飞书机器人,通通没问题。
6.1 获取 API Key
进入应用 → 左侧 访问 API:

点 右上角API 密钥 → 新建密钥,复制保存好(只显示一次!):

6.2 curl 调用示例
直接拼 JSON 在命令行里很容易踩 shell 转义的坑(尤其是 Windows),这里推荐最稳的做法:把请求体写到文件里,用 --data @文件 引用。这样 Windows / Mac / Linux 都能跑通。
步骤 1:把请求体写到文件
新建一个 dify-request.json 文件,内容如下(UTF-8 编码):
{
"inputs": {},
"query": "你好,请用一句话介绍你自己",
"response_mode": "streaming",
"conversation_id": "",
"user": "abc-123"
}步骤 2:执行 curl 调用
Git Bash / Mac / Linux 终端(Windows 用户强烈推荐用 Git Bash,见下方说明):
curl -X POST 'http://localhost/v1/chat-messages' \
-H 'Authorization: Bearer app-xxxxxxxxxxxxxxxxxxxxxxxx' \
-H 'Content-Type: application/json' \
--data-binary @dify-request.jsonWindows PowerShell 用户(确认你看到 Q8 节 的"陷阱"提示后再写):
curl.exe -X POST "http://localhost/v1/chat-messages" -H "Authorization: Bearer app-xxxxxxxxxxxxxxxxxxxxxxxx" -H "Content-Type: application/json" --data-binary "@dify-request.json"强烈建议 Windows 用户放弃 PowerShell,改用 Git Bash
PowerShell 里的 curl 是 Invoke-WebRequest(IWR)的内置别名,执行 curl -X POST ... 时,PowerShell 实际上调的是 IWR,IWR 不认 Unix curl 的 -X / -H / --data-binary 这套参数 — 这就是你看到 URL rejected、Could not resolve host: Bearer 报错的根本原因。
虽然写 curl.exe 可以强制调用真正的 curl 程序,但还要处理 PowerShell 对 @ 单引号 ' 反引号 ` 各种特殊字符的解析,异常麻烦。
最省心的路径是直接用 Git Bash(为了克隆 Dify 你已经装过了,同样支持多行 \ 续行、单/双引号、@file),跟 Mac / Linux 完全一致。
实在不会用 Git Bash?那就直接 跳到 6.3 节用 Python — 无 shell 转义烦恼。
看到模型流式返回的内容,就是调用成功了:

6.3 Python 调用示例
如果你是开发者,用 Python 更顺手。下面这段代码只解析 answer 字段并连续输出,不会出现 JSON 元信息刷屏:
import json
import requests
API_KEY = "app-xxxxxxxxxxxxxxxxxxxxxxxx"
BASE_URL = "http://localhost/v1/chat-messages"
headers = {
"Authorization": f"Bearer {API_KEY}",
"Content-Type": "application/json",
}
payload = {
"inputs": {},
"query": "用一句话介绍一下 Python 的列表推导式",
"response_mode": "streaming",
"conversation_id": "",
"user": "test-user-001",
}
response = requests.post(BASE_URL, headers=headers, json=payload, stream=True)
print("AI:", end=" ", flush=True)
for line in response.iter_lines():
if not line or not line.startswith(b"data: "):
continue
try:
chunk = json.loads(line[len(b"data: "):])
except json.JSONDecodeError:
continue
answer = chunk.get("answer", "")
if answer:
print(answer, end="", flush=True)
print() # 最后补一个换行跑起来后,终端里只会看到打字机一样的增量输出,不再有 JSON 整段刷屏:

📌 小贴士:想要多轮对话?把上一次的
conversation_id塞到下一次请求里就行,Dify 会自动维护上下文。
💡 代码解释:SSE(流式响应)每行都是
data: {...JSON...}的格式,我们只解析answer字段并用flush=True立即刷新,才能看到模型一个字一个字地"吐"出来。如果改成response_mode: blocking,则每次只收到完整 JSON,改用print(response.json()["answer"])即可。
6.4 完整可运行的脚本(实战彩蛋)
把上面的内容组合一下,就是一个完整可运行的终端 AI 助手:打字机效果 + 多轮对话 + 退出指令 + 异常处理,一应俱全。
新建一个 dify_chat.py 文件,把下面代码完整粘进去:
"""
dify_chat.py
本地命令行 AI 助手 — 调用本机 Dify + Ollama 上的 DeepSeek 模型,支持多轮对话。
依赖安装:
pip install requests
使用方法:
1. 在 Dify 中创建好一个聊天助手应用(参考本文第五步)
2. 获取该应用的 API Key(参考本文 6.1 节)
3. 修改下面的 API_KEY
4. 终端执行: python dify_chat.py
5. 输入问题回车,看到 AI 打字机式回复
6. 输入 /bye(或 Ctrl+C)退出
"""
import json
import sys
try:
import requests
except ImportError:
print("缺少 requests 库,请先执行: pip install requests", file=sys.stderr)
sys.exit(1)
# ========== 在这里改你的配置 ==========
API_KEY = "app-xxxxxxxxxxxxxxxxxxxxxxxx" # ← 改成 6.1 节拿到的那串
BASE_URL = "http://localhost/v1/chat-messages"
USER_ID = "terminal-user-001"
# =======================================
HEADERS = {
"Authorization": f"Bearer {API_KEY}",
"Content-Type": "application/json",
}
def stream_chat(query: str, conversation_id: str = ""):
"""流式调用 Dify chat-messages,返回(新 conversation_id, 完整回答文本)"""
payload = {
"inputs": {},
"query": query,
"response_mode": "streaming",
"conversation_id": conversation_id,
"user": USER_ID,
}
try:
resp = requests.post(BASE_URL, headers=HEADERS, json=payload,
stream=True, timeout=60)
resp.raise_for_status()
except requests.exceptions.RequestException as e:
print(f"\n[网络错误] {e}", file=sys.stderr)
return conversation_id, ""
new_conv_id = conversation_id
full_answer = []
for line in resp.iter_lines():
if not line or not line.startswith(b"data: "):
continue
try:
chunk = json.loads(line[len(b"data: "):])
except json.JSONDecodeError:
continue
# 第一次响应里拿到 conversation_id,后续保持不变
if not new_conv_id and chunk.get("conversation_id"):
new_conv_id = chunk["conversation_id"]
answer = chunk.get("answer", "")
if answer:
print(answer, end="", flush=True)
full_answer.append(answer)
# 流式结束的标志
if chunk.get("event") == "message_end":
break
return new_conv_id, "".join(full_answer)
def main():
print("=" * 50)
print(" 本地 DeepSeek 命令行助手 (Ctrl+C 或输入 /bye 退出)")
print("=" * 50)
conversation_id = ""
try:
while True:
try:
user_input = input("\n\n你: ").strip()
except EOFError:
break # Ctrl+Z / 管道结束
if not user_input:
continue
if user_input.lower() in ("/bye", "/quit", "/exit"):
print("\n再见 👋")
break
print("\nAI:", end=" ", flush=True)
conversation_id, _ = stream_chat(user_input, conversation_id)
except KeyboardInterrupt:
print("\n\n再见 👋")
if __name__ == "__main__":
main()存盘后,先装依赖(只需要这一次):
pip install requests然后运行:
python dify_chat.py体验一下,效果大概是这样:
==================================================
本地 DeepSeek 命令行助手 (Ctrl+C 或输入 /bye 退出)
==================================================
你: 你好
AI: 你好!我是小深,一个本地部署的 AI 助手,你可以问我任何问题。
你: 刚才我问你什么了?
AI: 你刚才问的是 "你好",我在回复里向你做了自我介绍。
你: /bye
再见 👋💡 小提示:
- 第一次输入时
conversation_id是空字符串,Dify 会自动新建一个会话并通过第一个 SSE chunk 返回,你只要在内存里保留它就行- 想跟别人隔离(比如多人共用一台机器),改
USER_ID即可- 想换聊天助手的"人设"或加知识库,去 Dify 后台编辑应用就行,不用动这个脚本
📌 进一步可玩方向:
- 把
print(answer, end="", flush=True)改成flush=True+sys.stderr,可以让 AI 输出和你的输入互不干扰,看起来更"对话"- 把这段脚本包成一个 Flask / FastAPI 接口,就能给任何前端用了 — 跟第七步的"嵌入网站"是异曲同工
第七步:把 AI 应用嵌入到自己的网站
如果你不想写代码、只想快速把 AI 应用放到自己网站上给访客用,Dify 提供了一种零代码的嵌入方式 — 一段 <script> 标签就能搞定。
7.1 进入嵌入设置
进入应用 → 右上角 发布 旁的下拉菜单 → 找到 嵌入到网站:

7.2 选择嵌入方式
Dify 提供三种主流嵌入模式,各有适用场景:
模式一:浮动聊天按钮(最常用)
在网页右下角出现一个可点击的聊天图标,访客点开后才弹出对话窗口。完全不影响原网页布局,适合给现有网站"加挂"一个 AI 客服或问答助手。

模式二:内嵌 iframe(区块式)
直接把 AI 应用渲染成网页中的一块内容区,适合作为页面主体的展示(比如"AI 体验区"、"智能客服专区")。

模式三: 浏览器插件

不建议使用.
7.3 复制生成的代码
选定模式后,Dify 会自动生成一段嵌入代码,通常长这样:
<!-- 浮动聊天按钮模式示例 -->
<script
src="http://localhost/embed.min.js"
id="dify-chatbot"
data-app-id="你的应用ID"
defer
></script>
<style>
#dify-chatbot {
position: fixed;
bottom: 1rem;
right: 1rem;
z-index: 9999;
}
</style>💡 小提示:上面只是一个示例结构。Dify 实际生成的代码里
data-app-id是真实的应用 ID、script src可能是embed.min.js或embed.js(取决于 Dify 版本)。直接复制 Dify 给你生成的代码,以那个为准。
7.4 粘贴到你的网站
把上面这段代码粘到你网站页面 </body> 之前即可。比如一个最简单的 HTML 页面:
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>我的网站</title>
</head>
<body>
<h1>欢迎来到我的网站</h1>
<p>这里是正文内容...</p>
<!-- 把 Dify 嵌入代码粘到这里 -->
<script
src="http://localhost/embed.min.js"
id="dify-chatbot"
data-app-id="你的应用ID"
defer
></script>
</body>
</html>保存后刷新页面,右下角就会出现一个 AI 聊天图标,点开就能跟你刚搭的 DeepSeek 助手对话:

7.5 几个常用的自定义技巧
| 场景 | 做法 |
|---|---|
| 改按钮位置(从右下角到左下角) | 把 CSS 的 right: 1rem 改成 left: 1rem |
| 调整按钮距离底部高度 | 改 bottom: 1rem 的数值 |
| 修改主题色 / 暗色模式 | 加 data-theme="dark" 或自定义 CSS |
| 只在某些页面显示 | 把嵌入代码包在条件渲染里(模板语法 / JS 判断) |
| 公网部署后嵌入 | 把 localhost 换成你 Dify 实际部署的公网域名 |
7.6 iframe 模式示例
如果想直接把 AI 应用作为页面的一块"主体内容",而不是浮动按钮,用 iframe 更合适:
<iframe
src="http://localhost/chatbot/你的应用ID"
width="100%"
height="600px"
style="border: none; border-radius: 8px; box-shadow: 0 2px 12px rgba(0,0,0,0.08);"
></iframe>效果是把整个 AI 应用嵌进页面的一块矩形区域,适合做"AI 体验区"、"产品演示区"这种主体场景。
7.7 嵌入 vs API 怎么选?
| 维度 | 嵌入(第七步) | API(第六步) |
|---|---|---|
| 上手难度 | ⭐ 复制粘贴即可 | ⭐⭐⭐ 需要写代码 |
| UI 定制 | 受 Dify 限制 | 完全自定义 |
| 适用场景 | 快速集成、产品演示、官网客服 | 深度集成、复杂业务、APP / 小程序 |
| 推荐人群 | 前端 / 产品 / 运营 | 后端 / 全栈开发者 |
💡 重要提示:生产环境记得把
http://localhost换成你 Dify 实际部署的公网域名,否则别人访问你的网站时,嵌入脚本会 404。
常见问题
Q1: Ollama 安装完,终端里输入命令提示"不是内部命令"?
解决:
- 大概率安装程序没把 Ollama 加入 PATH,手动把
C:\Users\<用户名>\AppData\Local\Programs\Ollama加到系统环境变量Path中 - 或者重启电脑再试一次
- Mac/Linux 用户用
which ollama验证一下
Q2: 拉模型特别慢,半天没进度?
解决:
- 默认源是 GitHub Releases,国内可能慢,可以配镜像(参考 Ollama 官方文档里的
OLLAMA_HOST/ 代理配置) - 模型越大越慢,先拉 1.5b 跑通流程再说
Q3: 跑模型时电脑卡到爆?
解决:
- 模型吃的是内存 + CPU,小内存机器就跑小模型
- 可以同时只跑一个模型,关掉其他大应用
- 想用 GPU 加速需要 NVIDIA 显卡 + 安装 CUDA(对新手不友好,先跑 CPU 就行)
Q4: Dify 里填了 Ollama 地址但保存报错 / 连不上?
这是新手最常踩的坑,基本就是两个原因:Ollama 没监听外部访问 或 基础 URL 写错了。按下面的顺序排查:
第 1 步:先确认 Ollama 自己跑没跑起来
在本机终端执行:
curl http://localhost:11434能看到 Ollama is running 就说明 Ollama 进程没问题。继续第 2 步。
第 2 步:确认 Ollama 监听的是 0.0.0.0,不是 127.0.0.1
Ollama 默认只监听 127.0.0.1:11434,只接受本机连接 — Docker 里的 Dify 访问不到这个地址。需要配置 OLLAMA_HOST=0.0.0.0,具体操作看 2.4 节。
验证方法:浏览器访问 http://你的局域网IP:11434,能通就说明监听对了 ✅。
第 3 步:确认基础 URL 写法
不是随便写个地址就行,要看你的部署组合是哪个,对照 4.2 节的 URL 对照表 选正确的那一行。
最常见的两个错:
- Docker 部署 Dify 却填了
localhost/127.0.0.1— 容器里的localhost是它自己,不是宿主机 - Linux 系统用
host.docker.internal— Linux 上 Docker 默认不支持这个魔法地址,要用局域网 IP
第 4 步:看具体报错对症下药
| 报错关键词 | 可能原因 | 解决 |
|---|---|---|
connection refused | Ollama 没监听 0.0.0.0 | 回第 2 步 |
404 not found | Ollama 跑着,但模型名写错 | 用 ollama list 复制正确名字 |
no such host | 域名 / IP 解析失败 | 检查网络 / DNS,Linux 改用局域网 IP |
| 保存按钮一直转圈 | 网络不通 | 检查防火墙 / 端口占用 |
Q5: Dify 启动卡在某个服务上起不来?
解决:
# 查看所有服务状态
docker compose ps
# 看具体某个服务的日志
docker compose logs -f api
# 或
docker compose logs -f worker常见原因:
- 端口被占用(80、5432、6379 这些)
- 磁盘空间不足
- Docker 内存分配太低
Q6: 模型回答太慢,等了半分钟才出字?
解决:
- 换更小的模型(1.5b → 几秒内出字)
- 在 Dify 应用里把
最大 token 上限调小 - 第一次回答会慢(模型预热),后面会快很多
Q7: 怎么彻底卸载?
- Ollama:控制面板卸载程序 + 删除
C:\Users\<用户名>\.ollama文件夹 - Dify:在
dify/docker目录下执行docker compose down -v,然后删除项目目录
Q8: 在 Windows PowerShell 跑 curl 多行命令报"URL rejected / Could not resolve host"?
这是个很经典的 Windows 坑,90% 的人在 PowerShell 里第一次跑 curl 都会翻车。底层原因有三个,但核心是第一条:
- PowerShell 里
curl是Invoke-WebRequest(IWR)的内置别名,根本不是真正的 curl.exe。你执行curl -X POST ...,PowerShell 把它当成 IWR 调用,IWR 不认 Unix curl 的-X / -H / --data-binary参数,会以自己的方式去解析参数 — 各种诡异报错就来了。 - PowerShell 里
\不是行继续符(bash 才是),多行会被 PowerShell 拼成一行后再传给 curl/IWR。 - PowerShell 的
@是 splatting 操作符,@dify-request.json会被 PowerShell 解析为 splatting 表达式(试图找名为dify-request的变量),不是文件名。
所以你看到的报错:
URL rejected: Port number was not a decimal number— header 被当成 URL,因为 PowerShell 把多行命令错误地传给了程序Could not resolve host: Bearer—Bearer app-xxx被当成了主机名去 DNS 解析empty string within braces in position 2: {},query:— JSON body 被当成 URL,curl 看到空{}直接懵
几种修法(任选其一)
方法 A(最推荐):打开 Git Bash
你之前为了克隆 Dify 仓库已经装过 Git 了。用 Git Bash 执行本文所有的 curl / shell 命令,跟 Mac / Linux 完全一样,没有这些坑。
打开方式:在你想操作的目录里按住 Shift + 右键 → "在此处打开 Git Bash",或者直接搜索 "Git Bash" 运行。
# Git Bash 里直接跑这个,无坑
curl -X POST 'http://localhost/v1/chat-messages' \
-H 'Authorization: Bearer app-你的Key' \
-H 'Content-Type: application/json' \
--data-binary @dify-request.json方法 B:坚持用 PowerShell → 必须强制调用 curl.exe,且所有引号用双引号
curl.exe -X POST "http://localhost/v1/chat-messages" -H "Authorization: Bearer app-你的Key" -H "Content-Type: application/json" --data-binary "@dify-request.json"关键改动三个:
curl.exe而不是curl(绕开 IWR 别名)- 所有字符串都用 双引号
"而不是单引号' @file用"@dify-request.json"整体双引号包起来(避坑 PowerShell 的 splatting)
方法 C:直接跳到 6.3 节用 Python
Python 用 requests 库发送请求,根本不走 shell 解析,Windows / Mac / Linux 写得一模一样,没有这些字符转义问题。
import requests
response = requests.post(
"http://localhost/v1/chat-messages",
headers={"Authorization": "Bearer app-你的Key"},
json={"query": "你好", "response_mode": "blocking", "user": "abc"}
)
print(response.json())总结
完整搭建流程回顾:
# 1. 安装 Ollama(各平台见官网)
# 2. 拉取 DeepSeek 模型
ollama pull deepseek-r1:1.5b
# 3. 部署 Dify
git clone https://github.com/langgenius/dify.git
cd dify/docker
copy .env.example .env # Windows
docker compose up -d
# 4. 浏览器访问 http://localhost/install,完成初始化
# 5. 左侧【集成】→ 模型供应商 → 添加 Ollama
# URL 填 http://host.docker.internal:11434
# 6. 工作室 → 创建聊天助手 → 调试 → 发布
# 7. 获取 API Key,curl/Python 调用通过这一套组合拳,你得到的是:
- ✅ 完全本地化的大模型服务
- ✅ 完全免费(电费除外)
- ✅ 完全私有(对话内容不出本机)
- ✅ 可视化的 AI 应用搭建平台
- ✅ 标准 REST API,接入任何项目
后续可玩方向
这只是起点,接下来你可以探索:
- 知识库(RAG):把自己公司的文档喂进去,做一个专属客服
- Agent 工作流:让模型能调用工具、查数据库、执行命令
- 接入聊天平台:把刚搭的助手接进飞书/微信/企业微信,变成群机器人
- 多模型混用:同时挂 Ollama + 云端 API,按场景切换
💡 如果你跟着做下来了,欢迎在评论区晒出你的第一个聊天助手截图 👇
也欢迎留言你踩到的坑,大家一起补充到 FAQ 里。