从零部署企业知识库:用 Dify 和 Docker 把公司文档变成智能问答系统
ChatGPT 企业知识库搭建|附完整命令
在企业内部,知识往往分散在各种地方:飞书文档、企业微信、PDF 制度文件、产品手册、技术文档、客服 FAQ、销售话术、项目复盘、合同模板等。员工想找到一个准确答案,常常需要翻群消息、问同事、搜网盘,效率很低。
而基于 ChatGPT 搭建企业知识库,可以把企业资料统一整理成可检索、可问答的智能知识系统。员工只需要像聊天一样提问,例如:
“公司报销差旅费需要哪些材料?”
“我们产品 A 和产品 B 的区别是什么?”
“客户问某个功能不支持时,客服应该怎么回复?”
“这个接口的鉴权方式是什么?”
系统就能基于企业内部文档进行回答,并尽量给出引用来源,减少人工查找成本。
本文将介绍一种适合企业落地的知识库搭建方案,并附上完整部署命令。整体方案基于 Dify + Docker + OpenAI / Azure OpenAI / 兼容大模型 API,适合中小团队快速搭建,也适合企业作为知识库原型验证。
一、企业知识库的核心原理
ChatGPT 企业知识库通常不是直接把所有企业文档一次性塞进模型里,而是采用 RAG 技术。
RAG 的全称是:
Retrieval-Augmented Generation,检索增强生成。
它的基本流程如下:
- 企业上传文档,例如 PDF、Word、Markdown、网页、FAQ;
- 系统将文档切分成多个小片段;
- 使用 Embedding 模型把文本片段转换为向量;
- 向量存入向量数据库;
- 用户提问时,系统先把问题转成向量;
- 从向量数据库中检索最相关的文档片段;
- 将检索到的内容和用户问题一起交给大模型;
- 大模型基于检索内容生成答案。
这样做有几个好处:
- 不需要重新训练大模型;
- 企业文档可以持续更新;
- 成本相对较低;
- 可以控制知识来源;
- 支持权限、引用、日志和审计;
- 回答更贴近企业真实资料。
二、推荐技术方案
本文采用如下方案:
| 模块 | 工具 |
|---|---|
| 知识库平台 | Dify |
| 部署方式 | Docker Compose |
| 大语言模型 | OpenAI / Azure OpenAI / 兼容 OpenAI API 的模型 |
| 向量数据库 | Weaviate / 内置服务 |
| 数据库 | PostgreSQL |
| 缓存 | Redis |
| 反向代理 | Nginx |
| HTTPS | Certbot / Let’s Encrypt |
为什么选择 Dify?
Dify 是一个开源的大模型应用开发平台,支持:
- 可视化创建聊天机器人;
- 上传企业知识库;
- 支持 RAG;
- 支持 OpenAI、Azure OpenAI、Anthropic、通义千问、智谱、DeepSeek、Ollama 等模型;
- 支持 API 调用;
- 支持工作流;
- 支持团队协作;
- 支持 Docker 快速部署。
对于企业内部知识库来说,Dify 的门槛比较低,不需要从零开发前端、后端、向量检索和文档解析系统。
三、服务器准备
建议服务器配置如下:
1. 最低配置
| 项目 | 配置 |
|---|---|
| CPU | 2 核 |
| 内存 | 4 GB |
| 硬盘 | 40 GB |
| 系统 | Ubuntu 22.04 LTS |
2. 推荐配置
| 项目 | 配置 |
|---|---|
| CPU | 4 核及以上 |
| 内存 | 8 GB 及以上 |
| 硬盘 | 100 GB SSD |
| 系统 | Ubuntu 22.04 LTS |
如果企业文档较多,建议至少准备 8GB 内存。
如果需要本地部署大模型,例如 Qwen、Llama、DeepSeek 等,则需要更高配置,最好配备 GPU。
本文默认使用 Ubuntu 22.04。
四、安装基础环境
先登录服务器。
ssh root@你的服务器IP
更新系统软件包:
apt update && apt upgrade -y
安装常用工具:
apt install -y curl wget git vim unzip htop net-tools ca-certificates gnupg lsb-release
设置服务器时区:
timedatectl set-timezone Asia/Shanghai
查看时间是否正确:
date
五、安装 Docker
如果服务器还没有 Docker,可以使用下面命令安装。
卸载旧版本 Docker:
apt remove -y docker docker-engine docker.io containerd runc
安装依赖:
apt install -y ca-certificates curl gnupg
创建 Docker GPG 目录:
install -m 0755 -d /etc/apt/keyrings
添加 Docker 官方 GPG Key:
curl -fsSL https://download.docker.com/linux/ubuntu/gpg \
| gpg --dearmor -o /etc/apt/keyrings/docker.gpg
设置权限:
chmod a+r /etc/apt/keyrings/docker.gpg
添加 Docker 软件源:
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] \
https://download.docker.com/linux/ubuntu \
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" \
| tee /etc/apt/sources.list.d/docker.list > /dev/null
更新软件源:
apt update
安装 Docker 和 Docker Compose:
apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
启动 Docker:
systemctl enable docker
systemctl start docker
检查 Docker 版本:
docker version
检查 Docker Compose 版本:
docker compose version
六、部署 Dify 企业知识库平台
进入安装目录:
mkdir -p /opt
cd /opt
拉取 Dify 源码:
git clone https://github.com/langgenius/dify.git
进入 Docker 部署目录:
cd /opt/dify/docker
复制环境变量配置文件:
cp .env.example .env
编辑配置文件:
vim .env
在 .env 文件中,需要重点关注以下配置。
1. 修改访问域名
如果你暂时没有域名,可以先用服务器 IP。
CONSOLE_WEB_URL=http://你的服务器IP
APP_WEB_URL=http://你的服务器IP
SERVICE_API_URL=http://你的服务器IP
如果你已经准备好域名,例如:
kb.example.com
则可以配置为:
CONSOLE_WEB_URL=https://kb.example.com
APP_WEB_URL=https://kb.example.com
SERVICE_API_URL=https://kb.example.com
2. 设置密钥
为了安全,建议修改密钥字段。可以使用下面命令生成随机密钥:
openssl rand -base64 42
然后在 .env 中修改类似字段,例如:
SECRET_KEY=你生成的随机字符串
3. 配置上传文件大小
企业知识库经常需要上传 PDF、Word、Excel 等文件,可以适当调大上传限制。
UPLOAD_FILE_SIZE_LIMIT=100
表示单个文件最大 100MB。
七、启动 Dify
在 /opt/dify/docker 目录下执行:
docker compose up -d
查看容器状态:
docker compose ps
正常情况下,你会看到多个服务处于 running 状态,例如:
api
worker
web
db
redis
nginx
weaviate
查看日志:
docker compose logs -f
如果只想查看 API 日志:
docker compose logs -f api
如果只想查看 Web 日志:
docker compose logs -f web
等待几分钟后,访问:
http://你的服务器IP
或者:
https://你的域名
首次访问时,按照页面提示创建管理员账号。
八、配置大模型 API
登录 Dify 后,进入:
设置 -> 模型供应商
根据你的实际情况选择模型。
方案一:使用 OpenAI
如果使用 OpenAI,需要准备:
- OpenAI API Key;
- 可访问 OpenAI API 的网络环境。
常见配置:
Provider: OpenAI
API Key: sk-xxxx
Model: gpt-4o-mini / gpt-4.1-mini / gpt-4o
Embedding Model: text-embedding-3-small
推荐组合:
| 用途 | 模型 |
|---|---|
| 聊天问答 | gpt-4o-mini |
| 高质量问答 | gpt-4o / gpt-4.1 |
| 向量嵌入 | text-embedding-3-small |
| 高质量嵌入 | text-embedding-3-large |
方案二:使用 Azure OpenAI
如果企业已经采购 Azure OpenAI,可以选择 Azure OpenAI,并填写:
API Key
API Base
API Version
Deployment Name
示例:
API Base: https://你的资源名.openai.azure.com
API Version: 2024-02-15-preview
Deployment Name: gpt-4o-mini
方案三:使用兼容 OpenAI API 的模型
很多国产模型平台也支持 OpenAI Compatible API,例如:
- DeepSeek;
- 通义千问;
- 智谱;
- Moonshot;
- 火山方舟;
- 零一万物;
- 本地 vLLM;
- One API;
- LiteLLM。
如果使用兼容 OpenAI API 的服务,通常需要填写:
Base URL
API Key
Model Name
例如 DeepSeek:
Base URL: https://api.deepseek.com
API Key: sk-xxxx
Model: deepseek-chat
九、创建企业知识库
登录 Dify 后,进入:
知识库 -> 创建知识库
建议按照部门或业务场景拆分知识库,例如:
公司制度知识库
产品资料知识库
客服话术知识库
技术文档知识库
销售培训知识库
项目交付知识库
不要把所有资料都混在一个知识库里。
合理拆分可以提高检索准确率,也方便后续权限管理。
十、上传企业文档
Dify 支持多种文档格式,常见包括:
- PDF;
- TXT;
- Markdown;
- HTML;
- DOCX;
- CSV;
- Excel;
- 网页内容。
上传文档时,建议注意以下几点:
1. 文档标题要清晰
不建议使用:
新建文档1.pdf
最终版.docx
最终版修改版.docx
销售资料.pdf
建议使用:
2024版员工报销制度.pdf
产品A用户操作手册-v1.3.pdf
客服售后问题处理SOP.docx
销售标准话术-企业客户版.md
2. 文档内容要结构化
知识库并不是魔法。
如果原始文档非常混乱,模型也很难给出稳定答案。
建议文档使用清晰结构:
# 标题
## 一、适用范围
## 二、具体规则
## 三、操作流程
## 四、常见问题
## 五、联系方式
3. 避免过多无意义内容
例如页眉、页脚、重复声明、乱码、目录页、广告图等,都会影响检索质量。
4. 推荐使用 Markdown
对于制度、流程、FAQ、产品说明等内容,Markdown 往往比 PDF 更适合知识库。
示例:
# 差旅报销制度
## 适用范围
本制度适用于公司正式员工因公出差产生的费用报销。
## 报销材料
员工提交差旅报销时,需要提供以下材料:
1. 出差申请单;
2. 发票;
3. 行程单;
4. 付款凭证;
5. 部门负责人审批记录。
## 报销时限
员工应在出差结束后 7 个工作日内提交报销申请。
十一、创建聊天应用
知识库创建完成后,需要创建一个聊天应用。
进入:
工作室 -> 创建应用 -> 聊天助手
应用名称可以设置为:
企业知识库助手
然后在应用配置中添加刚才创建的知识库。
建议系统提示词设置如下:
你是公司的企业知识库助手。请严格基于已提供的知识库内容回答问题。
如果知识库中没有相关信息,请明确说明“根据当前知识库资料,暂未找到相关信息”,不要编造答案。
回答时请尽量使用清晰的条目结构。
如果检索结果包含来源,请在答案末尾列出参考来源。
这个提示词很重要,它可以降低模型胡编乱造的概率。
十二、推荐的知识库参数
不同平台版本界面略有差异,但一般会有以下参数。
1. Top K
表示每次从知识库中取多少个相关片段。
推荐值:
3 - 8
如果文档内容较短,可以设置为 3。
如果业务复杂,可以设置为 5 或 8。
2. 相似度阈值
表示检索结果与问题的相关程度。
推荐值:
0.4 - 0.7
如果阈值太低,可能引入无关内容。
如果阈值太高,可能检索不到内容。
3. 分段长度
推荐:
500 - 1000 tokens
制度类、FAQ 类文档可以分段短一点。
技术文档、产品手册可以适当长一点。
4. 是否开启引用来源
建议开启。
企业知识库不是普通聊天机器人,答案最好可以追溯来源。
这样员工可以知道答案来自哪份制度、哪份手册、哪份 SOP。
十三、通过 API 调用企业知识库
Dify 支持 API 调用。你可以把企业知识库集成到:
- 企业微信机器人;
- 飞书机器人;
- 钉钉机器人;
- 内部 OA;
- CRM;
- 工单系统;
- 官网客服;
- 浏览器插件;
- 内部管理后台。
在 Dify 应用中获取 API Key 后,可以使用下面命令测试。
1. 阻塞式调用
curl -X POST 'http://你的服务器IP/v1/chat-messages' \
-H 'Authorization: Bearer app-你的APIKey' \
-H 'Content-Type: application/json' \
-d '{
"inputs": {},
"query": "员工差旅报销需要提交哪些材料?",
"response_mode": "blocking",
"conversation_id": "",
"user": "employee-001"
}'
如果使用 HTTPS 域名:
curl -X POST 'https://kb.example.com/v1/chat-messages' \
-H 'Authorization: Bearer app-你的APIKey' \
-H 'Content-Type: application/json' \
-d '{
"inputs": {},
"query": "产品A支持哪些支付方式?",
"response_mode": "blocking",
"conversation_id": "",
"user": "employee-001"
}'
2. 流式调用
流式调用适合聊天窗口,可以边生成边展示。
curl -X POST 'https://kb.example.com/v1/chat-messages' \
-H 'Authorization: Bearer app-你的APIKey' \
-H 'Content-Type: application/json' \
-d '{
"inputs": {},
"query": "请总结客服处理退款问题的标准流程",
"response_mode": "streaming",
"conversation_id": "",
"user": "employee-001"
}'
十四、配置 Nginx 和 HTTPS
如果你已经在 Dify Docker 中使用自带 Nginx,可以先通过 HTTP 访问。
但企业正式使用时,建议配置 HTTPS。
假设你的域名是:
kb.example.com
并且已经将域名 A 记录解析到服务器 IP。
安装 Nginx:
apt install -y nginx
安装 Certbot:
apt install -y certbot python3-certbot-nginx
创建 Nginx 配置:
vim /etc/nginx/sites-available/kb.example.com
写入以下内容:
server {
listen 80;
server_name kb.example.com;
client_max_body_size 100M;
location / {
proxy_pass http://127.0.0.1:80;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_read_timeout 300;
proxy_connect_timeout 300;
proxy_send_timeout 300;
}
}
启用站点:
ln -s /etc/nginx/sites-available/kb.example.com /etc/nginx/sites-enabled/
检查配置:
nginx -t
重启 Nginx:
systemctl restart nginx
申请 HTTPS 证书:
certbot --nginx -d kb.example.com
查看证书自动续期:
certbot renew --dry-run
注意:如果 Dify 自带的 Docker Nginx 已经占用了服务器 80 端口,则外部 Nginx 可能无法启动。实际部署时可以选择一种方式:
- 使用 Dify 自带 Nginx;
- 修改 Dify Docker 端口,例如映射到 8080;
- 再由宿主机 Nginx 反向代理到 8080。
如果需要修改 Dify 的端口,可以编辑:
cd /opt/dify/docker
vim docker-compose.yaml
找到 Nginx 服务端口映射,例如:
ports:
- "80:80"
- "443:443"
改成:
ports:
- "8080:80"
然后重启:
docker compose down
docker compose up -d
此时宿主机 Nginx 的 proxy_pass 应该改为:
proxy_pass http://127.0.0.1:8080;
十五、数据备份与恢复
企业知识库一定要做备份。
至少需要备份:
- PostgreSQL 数据;
- 上传文件;
- 向量数据库数据;
.env配置文件;- docker-compose 配置。
进入部署目录:
cd /opt/dify/docker
查看容器名称:
docker compose ps
1. 备份 PostgreSQL
创建备份目录:
mkdir -p /opt/backup/dify
执行数据库备份:
docker compose exec db pg_dump -U postgres dify > /opt/backup/dify/dify_db_$(date +%F).sql
如果数据库用户名或库名不同,请以 .env 配置为准。
2. 备份 Dify 配置
cp /opt/dify/docker/.env /opt/backup/dify/.env_$(date +%F)
cp /opt/dify/docker/docker-compose.yaml /opt/backup/dify/docker-compose_$(date +%F).yaml
3. 备份 Docker Volume
查看 volume:
docker volume ls
可以用 tar 备份指定 volume,例如:
docker run --rm \
-v docker_app_storage:/data \
-v /opt/backup/dify:/backup \
alpine \
tar czf /backup/app_storage_$(date +%F).tar.gz -C /data .
实际 volume 名称可能不同,可以通过以下命令确认:
docker volume ls | grep dify
4. 定时备份
编辑定时任务:
crontab -e
添加每天凌晨 2 点备份:
0 2 * * * cd /opt/dify/docker && docker compose exec -T db pg_dump -U postgres dify > /opt/backup/dify/dify_db_$(date +\%F).sql
十六、系统升级命令
Dify 会持续更新。升级前一定要先备份。
进入目录:
cd /opt/dify
拉取最新代码:
git pull
进入 Docker 目录:
cd /opt/dify/docker
拉取最新镜像:
docker compose pull
重启服务:
docker compose down
docker compose up -d
查看状态:
docker compose ps
查看日志:
docker compose logs -f
十七、常见问题排查
1. 容器没有启动
查看容器状态:
docker compose ps
查看日志:
docker compose logs -f
如果某个服务异常,例如 api:
docker compose logs -f api
2. 端口被占用
查看 80 端口占用:
lsof -i:80
或:
netstat -tunlp | grep :80
如果是 Nginx 占用,可以停止:
systemctl stop nginx
如果是其他容器占用:
docker ps
停止指定容器:
docker stop 容器ID
3. 上传文件失败
检查上传大小限制:
cd /opt/dify/docker
vim .env
确认:
UPLOAD_FILE_SIZE_LIMIT=100
然后重启:
docker compose down
docker compose up -d
同时也要检查 Nginx 配置:
client_max_body_size 100M;
4. 知识库回答不准确
可以从以下几个方向优化:
- 原始文档是否清晰;
- 文档是否有重复内容;
- 分段是否过大或过小;
- Top K 是否合适;
- 相似度阈值是否过高;
- 提示词是否要求“基于知识库回答”;
- 是否开启了引用来源;
- 问题是否过于模糊;
- 是否需要拆分多个知识库。
5. 模型调用失败
检查模型 API Key 是否正确。
也可以在服务器上测试网络:
curl https://api.openai.com/v1/models \
-H "Authorization: Bearer 你的OpenAI_API_Key"
如果使用兼容 API,例如 DeepSeek:
curl https://api.deepseek.com/v1/models \
-H "Authorization: Bearer 你的APIKey"
十八、企业落地建议
搭建完成只是第一步,真正决定知识库效果的是后续运营。
1. 建立知识负责人制度
每个部门指定知识负责人,例如:
| 部门 | 负责人职责 |
|---|---|
| 人事 | 维护制度、考勤、福利、报销文档 |
| 产品 | 维护产品介绍、功能说明、版本更新 |
| 技术 | 维护接口文档、部署文档、故障处理手册 |
| 客服 | 维护 FAQ、售后 SOP、投诉处理流程 |
| 销售 | 维护销售话术、竞品对比、报价规则 |
2. 定期清理旧文档
知识库中最危险的问题不是“没有答案”,而是“拿旧答案当新答案”。
建议:
- 每月检查高频文档;
- 每季度清理过期资料;
- 文档标题标注版本号;
- 废弃文档及时下线;
- 重要制度保留发布日期和生效日期。
3. 建立反馈机制
员工使用知识库时,应该能够反馈:
- 答案不准确;
- 答案过期;
- 没有找到答案;
- 来源文档错误;
- 需要补充知识。
这些反馈可以帮助知识库持续优化。
4. 控制敏感数据
不要随意上传以下内容:
- 客户隐私;
- 员工身份证信息;
- 银行账号;
- 合同敏感条款;
- 未公开财务数据;
- 源代码密钥;
- API Token;
- 数据库密码。
如果确实需要上传,应做好权限隔离和脱敏处理。
十九、适合接入的企业场景
ChatGPT 企业知识库可以优先落地以下场景:
1. HR 助手
可回答:
- 入职流程;
- 转正流程;
- 请假规则;
- 报销制度;
- 社保公积金;
- 公司福利;
- 绩效考核。
2. 客服助手
可回答:
- 产品常见问题;
- 退款规则;
- 投诉处理流程;
- 售后话术;
- 故障排查步骤;
- 客户升级策略。
3. 销售助手
可回答:
- 产品卖点;
- 竞品对比;
- 报价规则;
- 客户异议处理;
- 行业案例;
- 标准销售话术。
4. 技术助手
可回答:
- API 文档;
- 部署流程;
- 数据库规范;
- 故障排查;
- 代码规范;
- 运维 SOP。
5. 管理助手
可回答:
- 公司制度;
- 审批流程;
- 项目管理规范;
- 会议纪要;
- 战略资料;
- 经营分析口径。
二十、总结
通过 Dify、Docker 和大模型 API,我们可以较快搭建一套 ChatGPT 企业知识库系统。它不需要重新训练大模型,而是通过 RAG 技术,把企业文档转换成可检索、可问答的知识系统。
完整流程包括:
- 准备服务器;
- 安装 Docker;
- 部署 Dify;
- 配置模型 API;
- 创建知识库;
- 上传企业文档;
- 创建聊天助手;
- 配置检索参数;
- 接入企业内部系统;
- 做好备份、安全和持续运营。
需要注意的是,企业知识库不是一次性项目,而是持续运营项目。
模型能力决定回答上限,文档质量决定回答下限,知识运营决定长期价值。
如果企业希望快速验证 AI 知识库价值,可以先选择一个小范围场景,例如 HR 制度问答或客服 FAQ,整理 20 到 50 份高质量文档,搭建一个 MVP 版本。等效果稳定后,再逐步扩展到产品、销售、技术、交付、管理等更多业务场景。
只要文档质量足够好,权限控制足够清晰,反馈机制足够完善,ChatGPT 企业知识库就能成为企业内部非常实用的 AI 助手。