在人工智能浪潮下,大型语言模型(LLM)应用的开发已成为热点。然而,从想法到可部署的应用,开发者往往面临着复杂的工程挑战。Dify,作为一个开源的 LLM 应用开发平台,旨在简化这一过程。它通过直观的图形化界面,让开发者可以像编排工作流一样构建、测试和部署 AI 应用。

本文将为您提供一份完整的实战指南,详细介绍如何利用 Docker 自托管 Dify,并将其与强大的本地模型运行工具 Ollama 相结合,最终构建一个具备联网搜索功能的智能问答应用。无论您是初学者还是经验丰富的开发者,本文都将为您提供一个清晰、有序且易于实践的知识体系。

第一步:准备与部署——自托管 Dify 环境

首先,我们需要在本地环境中将 Dify 成功运行起来。借助 Docker,这个过程变得异常简单。

前提条件:
请确保您的系统中已安装 Docker 和 Docker Compose。

部署流程:

  1. 克隆 Dify 官方仓库
    打开终端,执行以下命令从 GitHub 克隆 Dify 的代码库:

    git clone https://github.com/langgenius/dify.git
    
  2. 进入 Docker 目录并配置
    进入项目中的 docker 目录。在此目录下,您会看到一个 docker-compose.yml 文件和一个 .env.example 文件。后者是环境变量的模板,我们可以直接使用默认配置,也可以根据需要进行修改。例如,如果您希望 Dify 在 8088 端口上运行,可以创建一个 .env 文件并指定端口:

    cd dify/docker
    # (可选) 如果需要修改端口,可以执行以下操作
    # cp .env.example .env
    # vim .env  # 将 PORT 修改为 8088
    
  3. 启动 Dify 服务
    docker 目录下,执行以下命令以后台模式启动所有服务:

    docker-compose up -d
    

    Docker 将自动拉取所需的镜像并启动包括 Web 服务、API 和数据库在内的所有容器。

  4. 初始化设置
    启动成功后,通过浏览器访问 http://localhost:8088(或您指定的端口)。首次访问时,系统会引导您创建一个管理员账户。完成设置后,您将进入 Dify 的主控制台。

第二步:模型集成——连接 Ollama 作为核心引擎

Dify 本身不提供模型,它是一个模型“编排者”。因此,我们需要为其配置一个模型提供商(Model Provider)。这里,我们选择与本地运行的 Ollama 集成。

配置流程:

  1. 导航至模型提供商设置
    在 Dify 界面左侧导航栏中,点击 设置 > 模型提供商

  2. 添加 Ollama
    在众多提供商中找到并选择 Ollama。现在,我们需要配置两个关键模型:

    • LLM (大型语言模型): 用于推理和生成。
    • Embedding Model (嵌入模型): 用于文本向量化,常用于 RAG 场景。
  3. 配置模型参数
    以添加 Llama 3 为例:

    • 模型名称 (Model Name): 填写 llama3
    • 模型 ID (Model ID): Dify 会自动填充为 ollama/llama3
    • 服务器 URL (Server URL): 这是最关键的一步。由于 Dify 和 Ollama 都运行在 Docker 容器中,Dify 容器需要访问宿主机上的 Ollama 服务。此时,不能使用 localhost。正确的地址是 http://host.docker.internal:11434host.docker.internal 是 Docker 提供的一个特殊 DNS 名称,它会解析为宿主机的内部 IP 地址。
    • 其他参数: 根据模型特性设置上下文长度(Context Length)等参数。

    按照同样的方式,添加嵌入模型,例如 nomic-embed-text

第三步:功能扩展——集成 SearXNG 实现联网搜索

为了让我们的 AI 应用能够获取实时信息,我们需要为其添加工具(Tools)。这里我们以集成开源的元搜索引擎 SearXNG 为例。

  1. 导航至工具设置
    在 Dify 左侧导航栏中,点击 工具

  2. 添加 SearXNG
    点击 添加工具,从列表中找到 SearXNG。

  3. 配置工具参数
    唯一的必填项是 基础 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 时代的开发者提供了坚实的基石和广阔的舞台。

Logo

一座年轻的奋斗人之城,一个温馨的开发者之家。在这里,代码改变人生,开发创造未来!

更多推荐