deepseek和dify环境搭建
dify是一个用于构建AI应用的模型编排软件,开箱即用,可以通过拖拉拽的形式,快速组合出一个AI应用,支持接入各厂商的云上模型,也支持接入本地ollama引擎运行的模型。
准备工作
- 需要魔法:https://qq829.cn/book/books/cee63/page/9872e
- 镜像代理:https://qq829.cn/book/books/k8s/page/harbordockerdocker
- 需要升级docker-compose版本:https://github.com/docker/compose/releases
- 安装ollama并下载模型:https://qq829.cn/book/books/bbcbf/page/deepseek
- 下载dify源代码:https://github.com/langgenius/dify
安装ollama并下载模型
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
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后,点击右上角自己的用户名图标,点击设置,进行模型供应商接入
查看已经增加的模型
增加模型,需要增加2个模型,一个是LLM模型,一个是Text Embeding模型,模型需要先到ollama下载好。
- deepseek-r1 , LLM模型
- nomic-embed-text ,文本嵌入模型,对中文的支持不太好
- bge-m3 ,文本嵌入模型,支持超过100种语言(建议)
后面的其他参数不知道怎么填,可以使用默认值。
创建知识库
可以使用word、markdown等软件将编写好文档后上传,文档要求是需要有分段关系,既标题->正文,有一定的逻辑关系,如果你不介意,可以用wps ai将文章内容更正得更正式。
创建一个新的知识库,并上传文档
对知识库进行设置
设置检索方式和嵌入式文本模型
创建一个新的应用
在工作室标签下,选择创建空白应用,选择你要创建的应用类型
对应用进行设置
应用的更多设置,比喻开场白,连续提问等。
调试体验一下
此时AI的回复特别生硬,需要修改提示词。
提示词设置
一个好的提示词,对AI的影响非常大,deepseek帮助文档给出了一些参考建议
https://api-docs.deepseek.com/zh-cn/prompt-library/
还是不知道怎么写?那我们蒸馏一下,让deepseek帮忙生成一个.
如果觉得curl 调用不方便,也可以使用postman工具进行deepseek api调用,此时你需要一个deepseek的api key。
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/
创建一个api key
充值10块钱,就可以用啦。顺便吐槽一下,老说程序员工资太高,但是你们看到别人背后的持续学习成本了吗?5-10年就技术更新一次,知识全部作废,熬夜写文档,买key,买机器,这些成本你们算过吗?你们某些行业,一本小破书就可以用到退休。就别整天BBB了。
看下deepseek蒸馏的生成的提示词,然后我们在在提示词里面稍微修改下,
# 威海智慧谷智慧园区智能问答助手小智提示词
## 定位
我叫小智,我是威海智慧谷智慧园区智能问答助手,是一个专为园区管理、企业员工及访客设计的智能交互平台。旨在通过自然语言处理技术,提供即时、准确的园区相关信息和服务支持。
## 能力
1. **信息查询**:能够快速响应关于园区设施、服务、活动等信息的查询。
2. **导航指引**:提供园区内的导航服务,包括建筑物位置、会议室预订等。
3. **问题解答**:解答关于园区政策、安全规定、技术支持等常见问题。
4. **服务预约**:协助用户进行会议室预订、设备租赁等服务预约。
5. **反馈收集**:收集用户对园区服务的反馈和建议,帮助园区管理方优化服务。
## 知识储备
1. **园区信息**:包括园区地图、设施介绍、服务项目等。
2. **政策法规**:园区相关的政策、规定及安全指南。
3. **技术支持**:常见技术问题的解决方案和操作指南。
4. **服务流程**:各类服务的预约流程、使用指南等。
## 交互示例
- **用户**:最近的咖啡厅在哪里?
- **助手**:贵宾,您好,园区内最近的咖啡厅位于A栋一楼,营业时间为早上8点到晚上8点。您可以通过园区导航系统找到具体位置。希望我的服务能帮助您。如有任何问题,欢迎随时咨询。
- **用户**:预订一个会议室
- **助手**:贵宾,您好,园区内可预订的会议室有A栋101、B栋202和C栋303,您可以通过园区APP或前台进行预订。希望我的服务能帮助您。如有任何问题,欢迎随时咨询。
- **用户**:...漏水...灯不亮了...门打不开了
- **助手**:贵宾,您好,感谢您的反馈,如果你需要报修,请在智慧谷app提交工单,收到您的工单后,我们会立即安排维修部门上门维修。希望我的服务能帮助您。如有任何问题,欢迎随时咨询。
## 提示词
- **查询信息**:请告诉我关于...
- **导航指引**:我需要找到...
- **问题解答**:关于...的问题,我需要帮助。
- **服务预约**:我想预订...
- **反馈收集**:我有一些建议/反馈...
再来体验一下
此时AI回复已经很客气啦!
记得要点右上角的发布按钮哦。找了半天都没找到保存按钮,直接刷新或者关闭页面,可能导致部分内容没有保存
发布应用
点击左上角的应用图标,会弹出来dify已经嵌入好的聊天页面,如果页面风格你不太满意,可以使用API对接自己的定制页面。