# deepseek和dify环境搭建

dify是一个用于构建AI应用的模型编排软件，开箱即用，可以通过拖拉拽的形式，快速组合出一个AI应用，支持接入各厂商的云上模型，也支持接入本地**ollama**引擎运行的模型。

#### 准备工作

- 需要魔法：<https://iovhm.com/book/books/cee63/page/9872e>
- 镜像代理：<https://iovhm.com/book/books/k8s/page/harbordockerdocker>
- 需要升级docker-compose版本：<https://github.com/docker/compose/releases>
- 安装ollama并下载模型：<https://iovhm.com/book/books/bbcbf/page/deepseek>
- 下载dify源代码：<https://github.com/langgenius/dify>


#### 安装ollama并下载模型

```yaml
version: "3"
services:
  ollama:
    image: harbor.iovhm.com/hub/ollama/ollama:0.5.12
    container_name: ollama
    restart: always
    privileged: true
    ports:
      - "11434:11434"
    volumes:
      - ./ollama:/root/.ollama
    # deploy:
    #   resources:
    #     reservations:
    #       devices:
    #         - driver: nvidia
    #           capabilities: [gpu]
    #           count: all
    networks:
      - vpclub-bridge

# 下载最少2个模型
# ollama pull deepseek-r1
# ollama pull bge-m3

```

#### 下载dify源代码，进入到docker目录，修改被墙的docker镜像地址使用魔法地址


下载到源代码后，进入到**docker**目录，打开**docker-compose.yaml**，里面总共有26个服务，将镜像地址修改为私有仓库。如果并不打算二次开发和在服务器运行，只需要将**docker**目录上传到服务器，不需要把dify的所有源代码全部上传。

##### 真正有用的服务只有10个，其他的是各种不同类型的向量数据库

将如下10个服务的镜像地址修改为镜像代理地址，使用**docker-compose up -d** 即可以将软件运行起来。其他服务是各种不同类型/厂家的向量数据库，根据自己的需要才启动，只有使用 **docker-compose --profile=xxxx up -d** 才会启动特定的服务。不用担心启动了太多的服务。

**为了保持和官方版本升级时候的兼容性**，不建议直接修改docker-compose.yaml，比喻把镜像下载回来了重命名一下。

- api
- worker
- web
- db
- redis
- sandbox ， 一些模型可以调用代码，用于运行代码的沙箱容器
- plugin_daemon ， 开发插件用的
- ssrf_proxy ， 一个用来防止SSRF_PROXY攻击的代理软件
- nginx ， 入口nginx
- weaviate，向量数据库

##### env配置文件

官方指导是将 **.env.example** 复制一个后改名为 **.env** , 但是需配置项太多，从头看到尾很需要时间，在此我摘抄了一个极简的 **.env** ，实际上不提供任何 **.env**文件，也可以运行。如果你的默认的**80和443端口被占用**，那就需要提供 **.env** 进行配置更改。

官方文档：<https://docs.dify.ai/zh-hans/getting-started/install-self-hosted/environments>

```conf

CONSOLE_API_URL=
CONSOLE_WEB_URL=
SERVICE_API_URL=
APP_API_URL=
APP_WEB_URL=
FILES_URL=

# 对外公布的服务端口
EXPOSE_NGINX_PORT=80
EXPOSE_NGINX_SSL_PORT=443

# 是否开启检查版本策略,若设置为 false,则不调用 https://updates.dify.ai 进行版本检查。
# 由于目前国内无法直接访问基于 CloudFlare Worker 的版本接口,
# 设置该变量为空,可以屏蔽该接口调用
CHECK_UPDATE_URL=

# 向量数据库配置
VECTOR_STORE=weaviate

# Weaviate 端点地址,如:http://weaviate:8080
WEAVIATE_ENDPOINT=http://weaviate:8080

# 连接 Weaviate 使用的 api-key 凭据
WEAVIATE_API_KEY=WVF5YThaHlkYwhGUSmCRgsX3tD5ngdN8pkih

```

#### 接入ollama并添加模型

进入dify后，点击右上角自己的用户名图标，点击设置，进行模型供应商接入

[![](https://iovhm.com/book/uploads/images/gallery/2025-03/scaled-1680-/V3RBO9HDf6qpOYVb-image-1741230074543.png)](https://iovhm.com/book/uploads/images/gallery/2025-03/V3RBO9HDf6qpOYVb-image-1741230074543.png)

查看已经增加的模型

[![](https://iovhm.com/book/uploads/images/gallery/2025-03/scaled-1680-/885RQ4DGNZsHsRl3-image-1741230213534.png)](https://iovhm.com/book/uploads/images/gallery/2025-03/885RQ4DGNZsHsRl3-image-1741230213534.png)

增加模型，需要增加2个模型，一个是LLM模型，一个是Text Embeding模型，模型需要先到ollama下载好。

- deepseek-r1 ， LLM模型
- nomic-embed-text ，文本嵌入模型，对中文的支持不太好
- bge-m3 ，文本嵌入模型，支持超过100种语言（建议）

后面的其他参数不知道怎么填，可以使用默认值。

[![](https://iovhm.com/book/uploads/images/gallery/2025-03/scaled-1680-/Am6wAHtbnv2vr7sW-image-1741230261287.png)](https://iovhm.com/book/uploads/images/gallery/2025-03/Am6wAHtbnv2vr7sW-image-1741230261287.png)

#### 创建知识库

可以使用word、markdown等软件将编写好文档后上传，文档要求是需要有分段关系，既标题->正文，有一定的逻辑关系，如果你不介意，可以用wps ai将文章内容更正得更正式。


创建一个新的知识库，并上传文档

[![](https://iovhm.com/book/uploads/images/gallery/2025-03/scaled-1680-/Pa97AIvyk8PhZklL-image-1741234212647.png)](https://iovhm.com/book/uploads/images/gallery/2025-03/Pa97AIvyk8PhZklL-image-1741234212647.png)


对知识库进行设置

[![](https://iovhm.com/book/uploads/images/gallery/2025-03/scaled-1680-/TmNl2c4jtN38rwv0-image-1741234262684.png)](https://iovhm.com/book/uploads/images/gallery/2025-03/TmNl2c4jtN38rwv0-image-1741234262684.png)

设置检索方式和嵌入式文本模型

[![](https://iovhm.com/book/uploads/images/gallery/2025-03/scaled-1680-/tcCzfhcRaDjXQQLc-image-1741234298816.png)](https://iovhm.com/book/uploads/images/gallery/2025-03/tcCzfhcRaDjXQQLc-image-1741234298816.png)

#### 创建一个新的应用

在工作室标签下，选择创建空白应用，选择你要创建的应用类型

[![](https://iovhm.com/book/uploads/images/gallery/2025-03/scaled-1680-/IPwxl4kIGq0wHe7a-image-1741234387917.png)](https://iovhm.com/book/uploads/images/gallery/2025-03/IPwxl4kIGq0wHe7a-image-1741234387917.png)


对应用进行设置


[![](https://iovhm.com/book/uploads/images/gallery/2025-03/scaled-1680-/bZE229Iz7gHm9RVg-image-1741236686712.png)](https://iovhm.com/book/uploads/images/gallery/2025-03/bZE229Iz7gHm9RVg-image-1741236686712.png)


应用的更多设置，比喻开场白，连续提问等。

[![](https://iovhm.com/book/uploads/images/gallery/2025-03/scaled-1680-/zPyfKcfCS8ipZJm6-image-1741236713669.png)](https://iovhm.com/book/uploads/images/gallery/2025-03/zPyfKcfCS8ipZJm6-image-1741236713669.png)


#### 调试体验一下

此时AI的回复特别生硬，需要修改提示词。

[![](https://iovhm.com/book/uploads/images/gallery/2025-03/scaled-1680-/hKSEWoHIAHJivZpf-image-1741236832365.png)](https://iovhm.com/book/uploads/images/gallery/2025-03/hKSEWoHIAHJivZpf-image-1741236832365.png)


#### 提示词设置


一个好的提示词，对AI的影响非常大，deepseek帮助文档给出了一些参考建议


<https://api-docs.deepseek.com/zh-cn/prompt-library/>

还是不知道怎么写？那我们蒸馏一下，让deepseek帮忙生成一个.

[![](https://iovhm.com/book/uploads/images/gallery/2025-03/scaled-1680-/QLEWM89A3nAEdaMN-image-1741234863492.png)](https://iovhm.com/book/uploads/images/gallery/2025-03/QLEWM89A3nAEdaMN-image-1741234863492.png)


如果觉得curl 调用不方便，也可以使用postman工具进行deepseek api调用，此时你需要一个deepseek的api key。

```shell

curl --location 'https://api.deepseek.com/chat/completions' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer sk-xxxxxxxxxxxxxxxx' \
--data '{
        "model": "deepseek-chat",
        "messages": [
          {"role": "system", "content": "你是一位大模型提示词生成专家，请根据用户的需求编写一个智能助手的提示词，来指导大模型进行内容生成，要求：1. 以 Markdown 格式输出\n 2. 贴合用户需求，描述智能助手的定位、能力、知识储备\n 3. 提示词应清晰、精确、易于理解，在保持质量的同时,尽可能简洁\n 4. 使用清晰、简洁的语言回复提问，确保用户容易理解\n 5.使用友好且专业的语气与用户交流，如“您好，关于您的这个问题，我可以为您详细解答。"},
          {"role": "user", "content": "请帮我生成一个'\''智慧园区智能问答助手'\''的提示词"}
        ],
        "stream": false
}'

```

#### 蒸馏一下deepseek,用魔法打败魔法

到deepseek注册一个账号：<https://www.deepseek.com/> 

[![](https://iovhm.com/book/uploads/images/gallery/2025-03/scaled-1680-/5PmUAWZBdhcde6p3-image-1741235212948.png)](https://iovhm.com/book/uploads/images/gallery/2025-03/5PmUAWZBdhcde6p3-image-1741235212948.png)

创建一个api key

[![](https://iovhm.com/book/uploads/images/gallery/2025-03/scaled-1680-/YtSo9JQMkojGLyPa-image-1741235303952.png)](https://iovhm.com/book/uploads/images/gallery/2025-03/YtSo9JQMkojGLyPa-image-1741235303952.png)

充值10块钱，就可以用啦。顺便吐槽一下，老说程序员工资太高，但是你们看到别人背后的持续学习成本了吗？5-10年就技术更新一次，知识全部作废，熬夜写文档，买key，买机器，这些成本你们算过吗？你们某些行业，一本小破书就可以用到退休。就别整天BBB了。

[![](https://iovhm.com/book/uploads/images/gallery/2025-03/scaled-1680-/emEN9prClqLgvE0k-image-1741235341899.png)](https://iovhm.com/book/uploads/images/gallery/2025-03/emEN9prClqLgvE0k-image-1741235341899.png)


看下deepseek蒸馏生成的提示词，我们此基础上稍微修改下。



```markdown

# 威海智慧谷智慧园区智能问答助手小智提示词

## 定位
我叫小智，我是威海智慧谷智慧园区智能问答助手，是一个专为园区管理、企业员工及访客设计的智能交互平台。旨在通过自然语言处理技术，提供即时、准确的园区相关信息和服务支持。

## 能力
1. **信息查询**：能够快速响应关于园区设施、服务、活动等信息的查询。
2. **导航指引**：提供园区内的导航服务，包括建筑物位置、会议室预订等。
3. **问题解答**：解答关于园区政策、安全规定、技术支持等常见问题。
4. **服务预约**：协助用户进行会议室预订、设备租赁等服务预约。
5. **反馈收集**：收集用户对园区服务的反馈和建议，帮助园区管理方优化服务。

## 知识储备
1. **园区信息**：包括园区地图、设施介绍、服务项目等。
2. **政策法规**：园区相关的政策、规定及安全指南。
3. **技术支持**：常见技术问题的解决方案和操作指南。
4. **服务流程**：各类服务的预约流程、使用指南等。

## 交互示例
- **用户**：最近的咖啡厅在哪里？
- **助手**：贵宾，您好，园区内最近的咖啡厅位于A栋一楼，营业时间为早上8点到晚上8点。您可以通过园区导航系统找到具体位置。希望我的服务能帮助您。如有任何问题，欢迎随时咨询。

- **用户**：预订一个会议室
- **助手**：贵宾，您好，园区内可预订的会议室有A栋101、B栋202和C栋303，您可以通过园区APP或前台进行预订。希望我的服务能帮助您。如有任何问题，欢迎随时咨询。

- **用户**：...漏水...灯不亮了...门打不开了
- **助手**：贵宾，您好，感谢您的反馈，如果你需要报修，请在智慧谷app提交工单，收到您的工单后，我们会立即安排维修部门上门维修。希望我的服务能帮助您。如有任何问题，欢迎随时咨询。


## 提示词
- **查询信息**：请告诉我关于...
- **导航指引**：我需要找到...
- **问题解答**：关于...的问题，我需要帮助。
- **服务预约**：我想预订...
- **反馈收集**：我有一些建议/反馈...



```

#### 再来体验一下

此时AI回复已经很客气啦！

[![](https://iovhm.com/book/uploads/images/gallery/2025-03/scaled-1680-/vBpW8eT6Rzox8fTn-image-1741238620736.png)](https://iovhm.com/book/uploads/images/gallery/2025-03/vBpW8eT6Rzox8fTn-image-1741238620736.png)

**记得要点右上角的发布按钮哦。找了半天都没找到保存按钮，直接刷新或者关闭页面，可能导致部分内容没有保存**

#### 发布应用

点击左上角的应用图标，会弹出来dify已经嵌入好的聊天页面，如果页面风格你不太满意，可以使用API对接自己的定制页面。

[![](https://iovhm.com/book/uploads/images/gallery/2025-03/scaled-1680-/jhle3W6njDxY6co3-image-1741238769940.png)](https://iovhm.com/book/uploads/images/gallery/2025-03/jhle3W6njDxY6co3-image-1741238769940.png)