Dify + Ollama 实战:从零开始构建并部署你的专属 AI 应用
本文提供了一份完整实战指南,介绍如何通过Docker自托管开源LLM开发平台Dify,并集成本地模型工具Ollama构建智能问答应用。指南详细分五步:1)部署Dify环境;2)配置Ollama作为核心模型;3)集成SearXNG实现联网搜索;4)创建工作流进行问答处理;5)发布与监控应用。该方案降低了AI应用开发门槛,支持快速原型验证,同时保持灵活性和数据控制权,为开发者提供了从零构建LLM应用的
在人工智能浪潮下,大型语言模型(LLM)应用的开发已成为热点。然而,从想法到可部署的应用,开发者往往面临着复杂的工程挑战。Dify,作为一个开源的 LLM 应用开发平台,旨在简化这一过程。它通过直观的图形化界面,让开发者可以像编排工作流一样构建、测试和部署 AI 应用。
本文将为您提供一份完整的实战指南,详细介绍如何利用 Docker 自托管 Dify,并将其与强大的本地模型运行工具 Ollama 相结合,最终构建一个具备联网搜索功能的智能问答应用。无论您是初学者还是经验丰富的开发者,本文都将为您提供一个清晰、有序且易于实践的知识体系。
第一步:准备与部署——自托管 Dify 环境
首先,我们需要在本地环境中将 Dify 成功运行起来。借助 Docker,这个过程变得异常简单。
前提条件:
请确保您的系统中已安装 Docker 和 Docker Compose。
部署流程:
-
克隆 Dify 官方仓库
打开终端,执行以下命令从 GitHub 克隆 Dify 的代码库:git clone https://github.com/langgenius/dify.git
-
进入 Docker 目录并配置
进入项目中的docker
目录。在此目录下,您会看到一个docker-compose.yml
文件和一个.env.example
文件。后者是环境变量的模板,我们可以直接使用默认配置,也可以根据需要进行修改。例如,如果您希望 Dify 在8088
端口上运行,可以创建一个.env
文件并指定端口:cd dify/docker # (可选) 如果需要修改端口,可以执行以下操作 # cp .env.example .env # vim .env # 将 PORT 修改为 8088
-
启动 Dify 服务
在docker
目录下,执行以下命令以后台模式启动所有服务:docker-compose up -d
Docker 将自动拉取所需的镜像并启动包括 Web 服务、API 和数据库在内的所有容器。
-
初始化设置
启动成功后,通过浏览器访问http://localhost:8088
(或您指定的端口)。首次访问时,系统会引导您创建一个管理员账户。完成设置后,您将进入 Dify 的主控制台。
第二步:模型集成——连接 Ollama 作为核心引擎
Dify 本身不提供模型,它是一个模型“编排者”。因此,我们需要为其配置一个模型提供商(Model Provider)。这里,我们选择与本地运行的 Ollama 集成。
配置流程:
-
导航至模型提供商设置
在 Dify 界面左侧导航栏中,点击设置
>模型提供商
。 -
添加 Ollama
在众多提供商中找到并选择 Ollama。现在,我们需要配置两个关键模型:- LLM (大型语言模型): 用于推理和生成。
- Embedding Model (嵌入模型): 用于文本向量化,常用于 RAG 场景。
-
配置模型参数
以添加 Llama 3 为例:- 模型名称 (Model Name): 填写
llama3
。 - 模型 ID (Model ID): Dify 会自动填充为
ollama/llama3
。 - 服务器 URL (Server URL): 这是最关键的一步。由于 Dify 和 Ollama 都运行在 Docker 容器中,Dify 容器需要访问宿主机上的 Ollama 服务。此时,不能使用
localhost
。正确的地址是http://host.docker.internal:11434
。host.docker.internal
是 Docker 提供的一个特殊 DNS 名称,它会解析为宿主机的内部 IP 地址。 - 其他参数: 根据模型特性设置上下文长度(Context Length)等参数。
按照同样的方式,添加嵌入模型,例如
nomic-embed-text
。 - 模型名称 (Model Name): 填写
第三步:功能扩展——集成 SearXNG 实现联网搜索
为了让我们的 AI 应用能够获取实时信息,我们需要为其添加工具(Tools)。这里我们以集成开源的元搜索引擎 SearXNG 为例。
-
导航至工具设置
在 Dify 左侧导航栏中,点击工具
。 -
添加 SearXNG
点击添加工具
,从列表中找到 SearXNG。 -
配置工具参数
唯一的必填项是 基础 URL (Base URL)。如果您的 SearXNG 同样以 Docker 容器的形式运行在本地,请同样使用http://host.docker.internal:PORT
的格式填写其访问地址。保存后,该工具即可在应用构建中被调用。
第四步:构建应用——从零到一创建智能问答工作流
万事俱备,现在我们可以开始构建应用了。
1. 初始化工作流
进入 工作室 (Studio)
,点击 创建新应用
。选择 工作流 (Workflow)
模式,因为它提供了最高的灵活性。
2. 设计工作流节点
工作流由一系列相互连接的节点组成,数据从 开始
节点流向 结束
节点。
-
开始
节点:定义输入
这是工作流的入口。我们需要在这里定义用户输入。点击开始
节点,在右侧的配置面板中添加一个变量,命名为query
,类型为字符串 (String)
。这将作为用户提出的问题。 -
工具
节点:执行网络搜索
从节点列表中拖拽一个工具
节点到画布上。在配置面板中,选择我们之前添加的SearXNG
工具。然后,将其输入(query
)与开始
节点的query
输出连接起来。这样,用户的提问就会被传递给搜索引擎。 -
LLM
节点:进行推理和回答
拖拽一个LLM
节点到画布。这是我们应用的核心。- 选择模型: 选择我们配置好的
ollama/llama3
。 - 构建提示词 (Prompt): 这是最关键的部分。我们需要设计一个提示词,让模型能够理解上下文并根据搜索结果回答问题。在提示词输入框中,我们可以引用前面节点的输出。一个优秀的 Prompt 模板示例如下:
这里请根据以下搜索结果,简洁地回答用户的问题。 搜索结果: {{#tools.0.result#}} 用户问题: {{#start.query#}}
{{#tools.0.result#}}
表示引用第一个工具(SearXNG)节点的输出结果,{{#start.query#}}
表示引用开始
节点的用户输入。 - 连接输入: 将
SearXNG
节点的输出(result
)连接到LLM
节点的对应变量上。
- 选择模型: 选择我们配置好的
-
结束
节点:输出答案
最后,将LLM
节点的输出(text
)连接到结束
节点。这样,模型生成的答案就可以作为最终结果返回给用户。
3. 测试与调试
在工作流界面右上方,您可以直接输入问题进行测试。点击运行后,可以看到数据在节点间流动的过程。如果结果不符合预期,可以点击 日志与标注
或查看 追踪 (Tracing)
细节,检查每个节点的具体输入和输出,这对于调试非常有帮助。
第五步:发布、监控与反思
当您对工作流感到满意后,点击右上角的 发布
。发布后,Dify 会为您的应用生成一个可公开访问的 Web 界面和一个 API 接口。
您可以在 应用概览
> 日志
中监控应用的调用情况和用户反馈。
优点与思考:
- 快速原型验证: Dify 极大地降低了 AI 应用的开发门槛,让开发者可以快速验证想法。
- 可视化编排: 图形化界面使得复杂的逻辑变得清晰易懂。
- 灵活性: 支持多种模型和工具,并且通过自托管可以完全掌控数据和成本。
当然,作为一个仍在快速发展的项目,它在某些方面(如 UI 导航、界面定制化)还有提升空间。但总体而言,它无疑是当下构建 LLM 应用的绝佳工具之一。
总结与展望
通过本指南,我们完整地经历了从环境部署、模型集成、工具配置到应用构建和发布的全部流程。您不仅学会了如何使用 Dify,更重要的是,掌握了一套将本地模型(Ollama)与强大应用框架相结合的系统性方法。
这仅仅是一个开始。您可以继续探索更复杂的工作流,例如集成知识库实现 RAG(检索增强生成),或者添加更多自定义工具来满足特定的业务需求。Dify 的潜力远不止于此,它为每一位希望拥抱 AI 时代的开发者提供了坚实的基石和广阔的舞台。
更多推荐
所有评论(0)