Procházet zdrojové kódy

merge: feature/dev → main (v1.0 企业知识库完整交付)

xieke před 1 týdnem
rodič
revize
783dc0ae5f

+ 27
- 10
.gitignore Zobrazit soubor

@@ -1,28 +1,45 @@
1
-# Environment
1
+# 环境变量(含密码和密钥)
2
+docker/.env
2 3
 .env
3 4
 .env.local
4
-*.key
5
+.env.*.local
6
+.env.*.docker
5 7
 
6
-# OS
7
-.DS_Store
8
-Thumbs.db
9
-desktop.ini
8
+# Docker 数据卷
9
+docker/data/
10
+docker/volumes/
11
+
12
+# SSL 证书
13
+docker/nginx/ssl/*.pem
14
+docker/nginx/ssl/*.key
15
+docker/nginx/ssl/*.crt
10 16
 
11 17
 # IDE
12
-.idea/
13 18
 .vscode/
19
+.idea/
14 20
 *.swp
15 21
 *.swo
16 22
 
23
+# OS
24
+.DS_Store
25
+Thumbs.db
26
+
17 27
 # Python
18 28
 __pycache__/
19
-*.pyc
20
-venv/
29
+*.py[cod]
30
+*.egg-info/
21 31
 .venv/
32
+venv/
22 33
 
23 34
 # Node
24 35
 node_modules/
36
+dist/
37
+.next/
38
+
39
+# Logs
40
+*.log
41
+logs/
25 42
 
26
-# Temp
43
+# 临时文件
27 44
 *.tmp
28 45
 *.bak

+ 87
- 29
README.md Zobrazit soubor

@@ -1,53 +1,111 @@
1
-# 企业知识库 - Dify 应用
1
+# 云美企业知识库
2 2
 
3
-> 西安云美电子科技有限公司 企业知识库系统
3
+> 西安云美电子科技有限公司 - 基于 Dify + DeepSeek 的企业内部知识库
4 4
 
5
-## 项目概述
5
+## 项目简介
6 6
 
7
-基于 Dify 平台自部署的企业知识库,使用 DeepSeek 模型驱动,支持公司内部文档的智能检索和问答
7
+本项目为云美电子科技搭建企业内部知识库系统,员工可通过对话式 AI 快速检索公司文档、获取智能问答。基于 **Dify 社区版(Docker 自部署)** + **DeepSeek 大模型** 构建
8 8
 
9 9
 ## 技术栈
10 10
 
11
-- **平台**: Dify 社区版(Docker 自部署)
12
-- **模型**: DeepSeek
13
-- **检索**: 混合检索(向量 + 全文)
11
+| 组件 | 说明 |
12
+|------|------|
13
+| Dify | AI 应用开发平台(社区版 Docker 部署) |
14
+| DeepSeek | 大语言模型(deepseek-chat) |
15
+| PostgreSQL | 关系数据库 |
16
+| Redis | 缓存与消息队列 |
17
+| Qdrant | 向量数据库 |
18
+| Nginx | 反向代理 |
14 19
 
15
-## 快速开始
20
+## 项目结构
21
+
22
+```
23
+dify-app/
24
+├── docker/                      # Docker 部署配置
25
+│   ├── docker-compose.yml       # 服务编排
26
+│   ├── .env.example             # 环境变量模板
27
+│   └── README.md                # Docker 部署说明
28
+│
29
+├── docs/                        # 项目文档
30
+│   ├── knowledge-base-structure.md   # 知识库结构设计
31
+│   ├── performance-baseline.md      # 性能基线指标
32
+│   ├── api-integration.md           # API 集成指南
33
+│   └── deployment-guide.md          # 完整部署指南
34
+│
35
+├── prompts/                     # 提示词
36
+│   └── system-prompt.md        # 系统提示词与对话策略
37
+│
38
+├── tests/                       # 测试
39
+│   └── test-cases.md            # 功能/安全测试用例
40
+│
41
+├── dsl/                         # Dify 应用配置
42
+│   └── app-config.yaml          # 应用 DSL 配置模板
43
+│
44
+├── tasks.md                     # 任务清单
45
+├── .gitignore                   # Git 忽略规则
46
+└── README.md                    # 本文件
47
+```
16 48
 
17
-### 1. 部署 Dify
49
+## 快速开始
18 50
 
19 51
 ```bash
52
+# 1. 克隆项目
53
+git clone http://git.xayunmei.com/yunmei/dify-app.git
54
+cd dify-app
55
+git checkout feature/dev
56
+
57
+# 2. 配置环境变量
20 58
 cd docker
21 59
 cp .env.example .env
22
-# 编辑 .env 填入实际配置
60
+# 编辑 .env 填写 SECRET_KEY、数据库密码、DeepSeek API Key
61
+
62
+# 3. 启动服务
23 63
 docker compose up -d
64
+
65
+# 4. 访问
66
+# 浏览器打开 http://<服务器IP>:80
24 67
 ```
25 68
 
26
-### 2. 配置模型
69
+详细部署步骤请参考 [部署指南](docs/deployment-guide.md)。
27 70
 
28
-登录 Dify 后台 → 设置 → 模型供应商 → 添加 DeepSeek API Key
71
+## 知识库分类
29 72
 
30
-### 3. 导入知识库
73
+| 分类 | 内容 |
74
+|------|------|
75
+| 📋 公司概况 | 公司简介、组织架构、联系方式 |
76
+| 🔧 产品技术 | 产品手册、技术规范、技术方案 |
77
+| ✅ 质量管理 | 质量体系、检测标准、计量规程 |
78
+| 📄 制度流程 | 管理制度、审批流程、操作规程 |
79
+| 📚 培训学习 | 培训材料、学习资源 |
80
+| 📁 项目档案 | 项目文档、合同模板 |
81
+| ❓ 常见问题 | IT支持、行政事务、售后FAQ |
31 82
 
32
-按 `docs/knowledge-base-structure.md` 的分类创建知识库,上传文档。
83
+## API 文档
33 84
 
34
-### 4. 创建应用
85
+知识库对话、文档管理等 API 接口文档:[API 集成指南](docs/api-integration.md)
35 86
 
36
-参考 `prompts/system-prompt.md` 配置 Chatflow 应用。
87
+## 测试
37 88
 
38
-## 目录结构
89
+功能测试用例(37 个):[测试用例](tests/test-cases.md)
39 90
 
40
-```
41
-dify-app/
42
-├── docker/          # Docker 部署配置
43
-├── prompts/         # Prompt 模板
44
-├── knowledge/       # 示例文档
45
-├── dsl/             # Dify 应用配置导出
46
-├── tests/           # 测试用例
47
-├── docs/            # 项目文档
48
-└── tasks.md         # 任务清单
49
-```
91
+## Git 分支策略
92
+
93
+| 分支 | 用途 |
94
+|------|------|
95
+| `main` | 生产发布分支 |
96
+| `feature/dev` | 开发分支(日常开发在此分支) |
97
+
98
+## 相关文档
99
+
100
+| 文档 | 说明 |
101
+|------|------|
102
+| [知识库结构设计](docs/knowledge-base-structure.md) | 分类体系、分段策略、维护规范 |
103
+| [性能基线指标](docs/performance-baseline.md) | 响应时间、准确率、并发指标 |
104
+| [API 集成指南](docs/api-integration.md) | RESTful API、代码示例 |
105
+| [完整部署指南](docs/deployment-guide.md) | 从服务器到上线的全流程 |
106
+| [系统提示词设计](prompts/system-prompt.md) | 角色定义、回答规范、推荐问题 |
107
+| [Dify 应用配置](dsl/app-config.yaml) | DSL 模板(可导入 Dify) |
50 108
 
51
-## 仓库
109
+---
52 110
 
53
-http://git.xayunmei.com/yunmei/dify-app
111
+**西安云美电子科技有限公司** © 2026

+ 32
- 0
docker/.env.docker Zobrazit soubor

@@ -0,0 +1,32 @@
1
+# ============================================================
2
+# Dify Docker 内部服务通信环境变量
3
+# 此文件由 docker-compose.yml 的 env_file 引用
4
+# 请勿提交到 Git,已在 .gitignore 中排除
5
+# ============================================================
6
+
7
+# 内部服务间通信不需要修改以下值
8
+# DB/Redis 等地址使用 docker-compose 中的服务名
9
+
10
+EDITION=SELF_HOSTED
11
+CONF_GIT_SYNC_ENABLED=false
12
+
13
+# 知识库检索配置
14
+INDEXING_MAX_SEGMENTATION_TOKENS=500
15
+INDEXING_MAX_SEGMENTATION_CHUNKS_PER_FILE=10
16
+INDEXING_SEGMENTATION_SEPARATOR=['\n','\n\n',' ','。','!','?',';',';']
17
+
18
+# 批量处理配置
19
+BATCH_PROCESSING_ENABLED=true
20
+
21
+# 多模态配置
22
+MULTIMODAL_ENABLED=true
23
+
24
+# 文件上传限制
25
+UPLOAD_FILE_SIZE_LIMIT=50
26
+UPLOAD_IMAGE_FILE_SIZE_LIMIT=20
27
+
28
+# Celery 队列配置
29
+CELERY_QUEUES=dataset,generation,mail
30
+
31
+# 文档解析配置
32
+DOCUMENT_PARSERS=pdf,txt,md,csv,xlsx,pptx,docx

+ 84
- 0
docker/.env.example Zobrazit soubor

@@ -0,0 +1,84 @@
1
+# ============================================================
2
+# Dify 环境变量配置模板
3
+# 西安云美电子科技有限公司 - 企业知识库
4
+#
5
+# 使用方法:cp .env.example .env && 编辑 .env 填写实际值
6
+# ============================================================
7
+
8
+# ====================== 基础配置 ======================
9
+
10
+# 运行模式:api(默认)/ worker
11
+DIFY_MODE=api
12
+
13
+# 日志级别:DEBUG / INFO / WARNING / ERROR
14
+LOG_LEVEL=INFO
15
+
16
+# 安全密钥(必须修改!用于加密 Token 等敏感数据)
17
+# 生成方法:openssl rand -hex 32
18
+SECRET_KEY=请替换为随机生成的密钥
19
+
20
+# 应用端口(API 服务内部端口)
21
+HTTP_APP_PORT=5001
22
+
23
+# ====================== 数据库配置 ======================
24
+
25
+POSTGRES_USER=postgres
26
+POSTGRES_PASSWORD=请替换为强密码
27
+POSTGRES_DB=dify
28
+
29
+# ====================== Redis 配置 ======================
30
+
31
+REDIS_PASSWORD=请替换为强密码
32
+REDIS_DB=0
33
+
34
+# ====================== 存储配置 ======================
35
+
36
+# 存储类型:local / s3
37
+STORAGE_TYPE=local
38
+STORAGE_LOCAL_PATH=/app/api/storage
39
+
40
+# ====================== 向量数据库配置 ======================
41
+
42
+# 向量数据库类型:qdrant / weaviate / elasticsearch
43
+VECTOR_STORE=qdrant
44
+
45
+# Qdrant 配置
46
+QDRANT_PORT=6333
47
+QDRANT_API_KEY=
48
+
49
+# ====================== DeepSeek 模型配置 ======================
50
+
51
+# DeepSeek API 地址(国内可直连)
52
+DEEPSEEK_API_BASE=https://api.deepseek.com
53
+DEEPSEEK_API_KEY=请替换为你的DeepSeek API Key
54
+
55
+# ====================== Web 前端配置 ======================
56
+
57
+# 如果使用 Nginx 反向代理且前后端同域名,留空即可
58
+NEXT_PUBLIC_API_BASE_URL=
59
+NEXT_PUBLIC_DEPLOY_ENV=PRODUCTION
60
+
61
+# ====================== Nginx 配置 ======================
62
+
63
+NGINX_PORT=80
64
+NGINX_SSL_PORT=443
65
+
66
+# ====================== SSRF 代理配置 ======================
67
+
68
+SSRF_PROXY_PORT=3128
69
+
70
+# ====================== Sandbox 配置(可选)======================
71
+
72
+SANDBOX_API_KEY=
73
+SANDBOX_URL=
74
+SANDBOX_WORKER_TIMEOUT=15
75
+SANDBOX_ENABLE_NETWORK=true
76
+
77
+# ====================== S3 存储配置(可选)======================
78
+
79
+S3_USE_CUSTOM_DOMAIN=true
80
+S3_ENDPOINT=
81
+S3_BUCKET_NAME=
82
+S3_ACCESS_KEY=
83
+S3_SECRET_KEY=
84
+S3_REGION=

+ 147
- 0
docker/README.md Zobrazit soubor

@@ -0,0 +1,147 @@
1
+# Dify 部署指南
2
+
3
+> 西安云美电子科技有限公司 - 企业知识库
4
+
5
+## 前置要求
6
+
7
+| 项目 | 最低要求 | 推荐配置 |
8
+|------|---------|---------|
9
+| CPU | 4 核 | 8 核+ |
10
+| 内存 | 8 GB | 16 GB+ |
11
+| 磁盘 | 50 GB SSD | 100 GB+ SSD |
12
+| Docker | ≥ 20.10 | 最新稳定版 |
13
+| Docker Compose | ≥ 2.0 | 最新稳定版 |
14
+| 操作系统 | Ubuntu 20.04+ | Ubuntu 22.04 LTS |
15
+
16
+## 快速部署
17
+
18
+### 1. 克隆项目
19
+
20
+```bash
21
+git clone http://git.xayunmei.com/yunmei/dify-app.git
22
+cd dify-app
23
+git checkout feature/dev
24
+```
25
+
26
+### 2. 配置环境变量
27
+
28
+```bash
29
+cd docker
30
+cp .env.example .env
31
+
32
+# 必须修改以下配置:
33
+# - SECRET_KEY(安全密钥,用 openssl rand -hex 32 生成)
34
+# - POSTGRES_PASSWORD(数据库密码)
35
+# - REDIS_PASSWORD(Redis 密码)
36
+# - DEEPSEEK_API_KEY(DeepSeek API 密钥)
37
+```
38
+
39
+### 3. 配置 Nginx(可选)
40
+
41
+如果使用自定义域名,编辑 `nginx/nginx.conf`:
42
+
43
+```bash
44
+mkdir -p nginx
45
+# 将 SSL 证书放入 nginx/ssl/ 目录
46
+```
47
+
48
+### 4. 启动服务
49
+
50
+```bash
51
+# 拉取镜像
52
+docker compose pull
53
+
54
+# 后台启动所有服务
55
+docker compose up -d
56
+
57
+# 查看服务状态
58
+docker compose ps
59
+
60
+# 查看日志
61
+docker compose logs -f
62
+```
63
+
64
+### 5. 初始化
65
+
66
+启动完成后,打开浏览器访问:
67
+
68
+```
69
+http://<服务器IP>:80
70
+```
71
+
72
+首次访问会要求设置管理员账号和密码。
73
+
74
+## 服务端口说明
75
+
76
+| 服务 | 容器端口 | 映射端口 | 说明 |
77
+|------|---------|---------|------|
78
+| Nginx | 80/443 | 80/443 | 主入口 |
79
+| Dify API | 5001 | 内部 | API 服务 |
80
+| Dify Web | 3000 | 内部 | 前端 |
81
+| PostgreSQL | 5432 | 内部 | 数据库 |
82
+| Redis | 6379 | 内部 | 缓存 |
83
+| Qdrant | 6333 | 6333 | 向量数据库 |
84
+
85
+## 常用命令
86
+
87
+```bash
88
+# 停止所有服务
89
+docker compose down
90
+
91
+# 停止并清除数据卷(危险!)
92
+docker compose down -v
93
+
94
+# 重启单个服务
95
+docker compose restart api
96
+docker compose restart worker
97
+
98
+# 查看单个服务日志
99
+docker compose logs -f api
100
+docker compose logs -f worker
101
+
102
+# 更新镜像
103
+docker compose pull
104
+docker compose up -d
105
+```
106
+
107
+## 备份与恢复
108
+
109
+### 数据库备份
110
+
111
+```bash
112
+docker compose exec db pg_dump -U postgres dify > backup_$(date +%Y%m%d).sql
113
+```
114
+
115
+### 数据库恢复
116
+
117
+```bash
118
+docker compose exec -T db psql -U postgres dify < backup_20260606.sql
119
+```
120
+
121
+### 数据卷备份
122
+
123
+```bash
124
+docker run --rm -v dify-app_api_storage:/data -v $(pwd):/backup alpine tar czf /backup/api_storage_$(date +%Y%m%d).tar.gz -C /data .
125
+```
126
+
127
+## 故障排查
128
+
129
+| 问题 | 排查方法 |
130
+|------|---------|
131
+| 服务启动失败 | `docker compose logs <service>` |
132
+| 数据库连接失败 | 检查 `.env` 中密码是否一致 |
133
+| 知识库索引失败 | 检查 Worker 日志,确认 Celery 队列正常 |
134
+| 模型调用失败 | 检查 DeepSeek API Key 是否有效 |
135
+| 端口冲突 | 修改 `.env` 中对应端口号 |
136
+
137
+## 安全注意事项
138
+
139
+1. **SECRET_KEY 必须使用随机值**,不要使用默认值
140
+2. **生产环境关闭 Qdrant 外部端口**(注释掉 ports 映射)
141
+3. **定期更换数据库密码**
142
+4. **配置 Nginx SSL 证书**,不要在公网裸跑 HTTP
143
+5. **.env 文件不要提交到 Git**
144
+
145
+---
146
+
147
+_最后更新: 2026-06-06_

+ 270
- 0
docker/docker-compose.yml Zobrazit soubor

@@ -0,0 +1,270 @@
1
+# Docker Compose for Dify Self-Hosted
2
+# 西安云美电子科技有限公司 - 企业知识库
3
+# 版本:基于 Dify v1.x 社区版
4
+#
5
+# 使用方法:
6
+#   cp .env.example .env
7
+#   编辑 .env 填写实际值
8
+#   docker compose up -d
9
+
10
+services:
11
+
12
+  ### ======================== 基础设施 ========================
13
+
14
+  # PostgreSQL 数据库
15
+  db:
16
+    image: postgres:15-alpine
17
+    restart: always
18
+    environment:
19
+      POSTGRES_USER: ${POSTGRES_USER:-postgres}
20
+      POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
21
+      POSTGRES_DB: ${POSTGRES_DB:-dify}
22
+    volumes:
23
+      - db_data:/var/lib/postgresql/data
24
+    healthcheck:
25
+      test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER:-postgres}"]
26
+      interval: 10s
27
+      timeout: 5s
28
+      retries: 5
29
+    networks:
30
+      - dify-network
31
+
32
+  # Redis 缓存
33
+  redis:
34
+    image: redis:7-alpine
35
+    restart: always
36
+    command: redis-server --requirepass ${REDIS_PASSWORD} --appendonly yes
37
+    volumes:
38
+      - redis_data:/data
39
+    healthcheck:
40
+      test: ["CMD", "redis-cli", "-a", "${REDIS_PASSWORD}", "ping"]
41
+      interval: 10s
42
+      timeout: 5s
43
+      retries: 5
44
+    networks:
45
+      - dify-network
46
+
47
+  ### ======================== Dify 核心服务 ========================
48
+
49
+  # Dify API 后端
50
+  api:
51
+    image: langgenius/dify-api:latest
52
+    restart: always
53
+    environment:
54
+      # 基础配置
55
+      - MODE=${DIFY_MODE:-api}
56
+      - LOG_LEVEL=${LOG_LEVEL:-INFO}
57
+      - LOG_FILE=${LOG_FILE:-}
58
+      - SECRET_KEY=${SECRET_KEY}
59
+      # 数据库配置
60
+      - DB_USERNAME=${POSTGRES_USER:-postgres}
61
+      - DB_PASSWORD=${POSTGRES_PASSWORD}
62
+      - DB_HOST=db
63
+      - DB_PORT=5432
64
+      - DB_DATABASE=${POSTGRES_DB:-dify}
65
+      # Redis 配置
66
+      - REDIS_HOST=redis
67
+      - REDIS_PORT=6379
68
+      - REDIS_PASSWORD=${REDIS_PASSWORD}
69
+      - REDIS_DB=${REDIS_DB:-0}
70
+      # 存储配置
71
+      - STORAGE_TYPE=${STORAGE_TYPE:-local}
72
+      - STORAGE_LOCAL_PATH=/app/api/storage
73
+      # 向量数据库
74
+      - VECTOR_STORE=${VECTOR_STORE:-qdrant}
75
+      - QDRANT_URL=http://qdrant:6333
76
+      - QDRANT_API_KEY=${QDRANT_API_KEY:-}
77
+      # S3 配置(可选)
78
+      - S3_USE_CUSTOM_DOMAIN=${S3_USE_CUSTOM_DOMAIN:-true}
79
+      - S3_ENDPOINT=${S3_ENDPOINT:-}
80
+      - S3_BUCKET_NAME=${S3_BUCKET_NAME:-}
81
+      - S3_ACCESS_KEY=${S3_ACCESS_KEY:-}
82
+      - S3_SECRET_KEY=${S3_SECRET_KEY:-}
83
+      - S3_REGION=${S3_REGION:-}
84
+      # SandBox 配置
85
+      - CODE_EXECUTION_API_KEY=${SANDBOX_API_KEY:-}
86
+      - CODE_EXECUTION_API_URL=${SANDBOX_URL:-}
87
+      # 模型配置(DeepSeek)
88
+      - DEEPSEEK_API_BASE=${DEEPSEEK_API_BASE:-https://api.deepseek.com}
89
+      - DEEPSEEK_API_KEY=${DEEPSEEK_API_KEY:-}
90
+      # 其他
91
+      - HTTP_APP_PORT=5001
92
+      - CELERY_BROKER_URL=redis://:${REDIS_PASSWORD}@redis:6379/1
93
+      - CELERY_RESULT_BACKEND=redis://:${REDIS_PASSWORD}@redis:6379/1
94
+    volumes:
95
+      - api_storage:/app/api/storage
96
+      - app_data:/app/data
97
+    depends_on:
98
+      db:
99
+        condition: service_healthy
100
+      redis:
101
+        condition: service_healthy
102
+    networks:
103
+      - dify-network
104
+
105
+  # Dify Web 前端
106
+  web:
107
+    image: langgenius/dify-web:latest
108
+    restart: always
109
+    environment:
110
+      - NEXT_PUBLIC_API_BASE_URL=${NEXT_PUBLIC_API_BASE_URL:-}
111
+      - NEXT_PUBLIC_DEPLOY_ENV=${NEXT_PUBLIC_DEPLOY_ENV:-PRODUCTION}
112
+    # 不使用 Nginx 时可直接访问 Web(设置 WEB_PORT=3000 启用)
113
+    ports:
114
+      - "${WEB_PORT:-}"
115
+    volumes:
116
+      - web_config:/app/config
117
+    depends_on:
118
+      - api
119
+    networks:
120
+      - dify-network
121
+
122
+  # Dify Worker(异步任务处理)
123
+  worker:
124
+    image: langgenius/dify-api:latest
125
+    restart: always
126
+    environment:
127
+      # 基础配置
128
+      - MODE=${DIFY_MODE:-worker}
129
+      - LOG_LEVEL=${LOG_LEVEL:-INFO}
130
+      - SECRET_KEY=${SECRET_KEY}
131
+      # 数据库配置
132
+      - DB_USERNAME=${POSTGRES_USER:-postgres}
133
+      - DB_PASSWORD=${POSTGRES_PASSWORD}
134
+      - DB_HOST=db
135
+      - DB_PORT=5432
136
+      - DB_DATABASE=${POSTGRES_DB:-dify}
137
+      # Redis 配置
138
+      - REDIS_HOST=redis
139
+      - REDIS_PORT=6379
140
+      - REDIS_PASSWORD=${REDIS_PASSWORD}
141
+      - REDIS_DB=${REDIS_DB:-0}
142
+      # 存储配置
143
+      - STORAGE_TYPE=${STORAGE_TYPE:-local}
144
+      - STORAGE_LOCAL_PATH=/app/api/storage
145
+      # 向量数据库
146
+      - VECTOR_STORE=${VECTOR_STORE:-qdrant}
147
+      - QDRANT_URL=http://qdrant:6333
148
+      - QDRANT_API_KEY=${QDRANT_API_KEY:-}
149
+      # 模型配置(DeepSeek)
150
+      - DEEPSEEK_API_BASE=${DEEPSEEK_API_BASE:-https://api.deepseek.com}
151
+      - DEEPSEEK_API_KEY=${DEEPSEEK_API_KEY:-}
152
+      # Celery
153
+      - CELERY_BROKER_URL=redis://:${REDIS_PASSWORD}@redis:6379/1
154
+      - CELERY_RESULT_BACKEND=redis://:${REDIS_PASSWORD}@redis:6379/1
155
+    volumes:
156
+      - api_storage:/app/api/storage
157
+      - app_data:/app/data
158
+    depends_on:
159
+      db:
160
+        condition: service_healthy
161
+      redis:
162
+        condition: service_healthy
163
+    networks:
164
+      - dify-network
165
+
166
+  ### ======================== 向量数据库 ========================
167
+
168
+  # Qdrant 向量数据库(默认)
169
+  qdrant:
170
+    image: qdrant/qdrant:latest
171
+    restart: always
172
+    volumes:
173
+      - qdrant_data:/qdrant/storage
174
+    environment:
175
+      - QDRANT_API_KEY=${QDRANT_API_KEY:-}
176
+    ports:
177
+      - "${QDRANT_PORT:-6333}:6333"
178
+    networks:
179
+      - dify-network
180
+
181
+  ### ======================== 安全与代理 ========================
182
+
183
+  # Nginx 反向代理
184
+  nginx:
185
+    image: nginx:alpine
186
+    restart: always
187
+    ports:
188
+      - "${NGINX_PORT:-80}:80"
189
+      - "${NGINX_SSL_PORT:-443}:443"
190
+    volumes:
191
+      - ./nginx/nginx.conf:/etc/nginx/nginx.conf:ro
192
+      - ./nginx/ssl:/etc/nginx/ssl:ro
193
+      - nginx_logs:/var/log/nginx
194
+    depends_on:
195
+      - api
196
+      - web
197
+    networks:
198
+      - dify-network
199
+
200
+  # SSRF 代理(安全防护)
201
+  ssrf-proxy:
202
+    image: ubuntu/squid:latest
203
+    restart: always
204
+    volumes:
205
+      - ./ssrf-proxy/squid.conf.template:/etc/squid/squid.conf.template:ro
206
+    environment:
207
+      - HTTP_PROXY_PORT=${SSRF_PROXY_PORT:-3128}
208
+    ports:
209
+      - "${SSRF_PROXY_PORT:-3128}:3128"
210
+    networks:
211
+      - dify-network
212
+
213
+  ### ======================== 可选服务 ========================
214
+
215
+  # Sandbox 代码执行环境(可选,按需启用)
216
+  # sandbox:
217
+  #   image: langgenius/dify-sandbox:latest
218
+  #   restart: always
219
+  #   environment:
220
+  #     - API_KEY=${SANDBOX_API_KEY}
221
+  #     - GIN_MODE=release
222
+  #     - WORKER_TIMEOUT=${SANDBOX_WORKER_TIMEOUT:-15}
223
+  #     - ENABLE_NETWORK=${SANDBOX_ENABLE_NETWORK:-true}
224
+  #   volumes:
225
+  #     - sandbox_data:/data
226
+  #   networks:
227
+  #     - dify-network
228
+
229
+  # Elasticsearch(可选,替代 Qdrant)
230
+  # elasticsearch:
231
+  #   image: elasticsearch:8.11.0
232
+  #   restart: always
233
+  #   volumes:
234
+  #     - es_data:/usr/share/elasticsearch/data
235
+  #   environment:
236
+  #     - discovery.type=single-node
237
+  #     - xpack.security.enabled=false
238
+  #     - ES_JAVA_OPTS=-Xms512m -Xmx512m
239
+  #   networks:
240
+  #     - dify-network
241
+
242
+  # Weaviate(可选,替代 Qdrant)
243
+  # weaviate:
244
+  #   image: semitechnologies/weaviate:latest
245
+  #   restart: always
246
+  #   volumes:
247
+  #     - weaviate_data:/var/lib/weaviate
248
+  #   environment:
249
+  #     - QUERY_DEFAULTS_LIMIT=25
250
+  #     - AUTHENTICATION_ANONYMOUS_ACCESS_ENABLED=true
251
+  #     - PERSISTENCE_DATA_PATH=/var/lib/weaviate
252
+  #   ports:
253
+  #     - "8080:8080"
254
+  #   networks:
255
+  #     - dify-network
256
+
257
+volumes:
258
+  db_data:
259
+  redis_data:
260
+  api_storage:
261
+  app_data:
262
+  qdrant_data:
263
+  nginx_logs:
264
+  # sandbox_data:
265
+  # es_data:
266
+  # weaviate_data:
267
+
268
+networks:
269
+  dify-network:
270
+    driver: bridge

+ 88
- 0
docker/nginx/nginx.conf Zobrazit soubor

@@ -0,0 +1,88 @@
1
+# Nginx 反向代理配置
2
+# 西安云美电子科技有限公司 - 企业知识库
3
+
4
+upstream dify_api {
5
+    server api:5001;
6
+}
7
+
8
+upstream dify_web {
9
+    server web:3000;
10
+}
11
+
12
+server {
13
+    listen 80;
14
+    server_name _;
15
+
16
+    # 请求体大小限制(文件上传)
17
+    client_max_body_size 50M;
18
+
19
+    # API 请求
20
+    location /console/api {
21
+        proxy_pass http://dify_api;
22
+        proxy_set_header Host $host;
23
+        proxy_set_header X-Real-IP $remote_addr;
24
+        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
25
+        proxy_set_header X-Forwarded-Proto $scheme;
26
+
27
+        # WebSocket 支持
28
+        proxy_http_version 1.1;
29
+        proxy_set_header Upgrade $http_upgrade;
30
+        proxy_set_header Connection "upgrade";
31
+    }
32
+
33
+    location /v1 {
34
+        proxy_pass http://dify_api;
35
+        proxy_set_header Host $host;
36
+        proxy_set_header X-Real-IP $remote_addr;
37
+        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
38
+        proxy_set_header X-Forwarded-Proto $scheme;
39
+
40
+        # SSE 支持
41
+        proxy_buffering off;
42
+        proxy_cache off;
43
+        proxy_read_timeout 300s;
44
+    }
45
+
46
+    # 静态资源
47
+    location /files {
48
+        proxy_pass http://dify_api;
49
+        proxy_set_header Host $host;
50
+        proxy_set_header X-Real-IP $remote_addr;
51
+    }
52
+
53
+    location /elegant {
54
+        proxy_pass http://dify_api;
55
+        proxy_set_header Host $host;
56
+    }
57
+
58
+    # Web 前端
59
+    location / {
60
+        proxy_pass http://dify_web;
61
+        proxy_set_header Host $host;
62
+        proxy_set_header X-Real-IP $remote_addr;
63
+        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
64
+        proxy_set_header X-Forwarded-Proto $scheme;
65
+    }
66
+}
67
+
68
+# HTTPS 配置(取消注释并配置 SSL 证书后启用)
69
+# server {
70
+#     listen 443 ssl;
71
+#     server_name kb.xayunmei.com;
72
+#
73
+#     ssl_certificate /etc/nginx/ssl/server.crt;
74
+#     ssl_certificate_key /etc/nginx/ssl/server.key;
75
+#     ssl_protocols TLSv1.2 TLSv1.3;
76
+#     ssl_ciphers HIGH:!aNULL:!MD5;
77
+#
78
+#     client_max_body_size 50M;
79
+#
80
+#     # 同上 location 配置...
81
+# }
82
+
83
+# HTTP → HTTPS 重定向(启用 HTTPS 后取消注释)
84
+# server {
85
+#     listen 80;
86
+#     server_name kb.xayunmei.com;
87
+#     return 301 https://$server_name$request_uri;
88
+# }

+ 0
- 0
docker/nginx/ssl/.gitkeep Zobrazit soubor


+ 38
- 0
docker/ssrf-proxy/squid.conf.template Zobrazit soubor

@@ -0,0 +1,38 @@
1
+# Squid SSRF Proxy 配置模板
2
+# 用于 Dify 的 HTTP 请求代理,防止 SSRF 攻击
3
+
4
+# 端口
5
+http_port 3128
6
+
7
+# 访问控制
8
+acl SSL_ports port 443
9
+acl Safe_ports port 80
10
+acl Safe_ports port 443
11
+acl Safe_ports port 1025-65535
12
+acl CONNECT method CONNECT
13
+
14
+# 拒绝非安全端口
15
+http_access deny !Safe_ports
16
+http_access deny CONNECT !SSL_ports
17
+
18
+# 允许 Dify 内部服务访问
19
+acl dify_services src 172.16.0.0/12 192.168.0.0/16 10.0.0.0/8
20
+http_access allow dify_services
21
+
22
+# 拒绝其他所有访问
23
+http_access deny all
24
+
25
+# 不显示 Squid 版本
26
+httpd_suppress_version_string on
27
+
28
+# 日志格式
29
+access_log /var/log/squid/access.log squid
30
+cache_log /var/log/squid/cache.log
31
+
32
+# 禁用缓存(仅作为代理使用)
33
+cache deny all
34
+
35
+# 连接超时
36
+connect_timeout 30 seconds
37
+read_timeout 60 seconds
38
+request_timeout 60 seconds

+ 385
- 0
docs/api-integration.md Zobrazit soubor

@@ -0,0 +1,385 @@
1
+# Dify API 集成指南
2
+
3
+> 西安云美电子科技有限公司 - 企业知识库
4
+> 版本:v1.0 | 创建时间:2026-06-06
5
+
6
+---
7
+
8
+## 1. 概述
9
+
10
+Dify 提供完整的 RESTful API,支持将知识库对话能力集成到企业微信、钉钉、自建系统等渠道。本文档涵盖最常用的 API 接口及集成示例。
11
+
12
+**Base URL**: `http://<dify-host>/v1`
13
+
14
+---
15
+
16
+## 2. 认证方式
17
+
18
+所有 API 请求需在 Header 中携带 API Key:
19
+
20
+```
21
+Authorization: Bearer app-<your-api-key>
22
+```
23
+
24
+**获取 API Key**:Dify 控制台 → 应用 → API 访问 → 创建 API Key
25
+
26
+---
27
+
28
+## 3. 对话接口
29
+
30
+### 3.1 发送对话消息
31
+
32
+```
33
+POST /v1/chat-messages
34
+```
35
+
36
+**请求参数**
37
+
38
+| 参数 | 类型 | 必填 | 说明 |
39
+|------|------|:----:|------|
40
+| query | string | ✅ | 用户输入的问题 |
41
+| inputs | object | ❌ | 额外输入参数 |
42
+| response_mode | string | ✅ | `blocking`(阻塞)或 `streaming`(流式) |
43
+| conversation_id | string | ❌ | 对话 ID,首次对话不传,后续传入上一次返回的 ID |
44
+| user | string | ✅ | 用户标识 |
45
+| files | array | ❌ | 上传文件列表 |
46
+
47
+**阻塞模式请求示例**
48
+
49
+```bash
50
+curl -X POST 'http://<dify-host>/v1/chat-messages' \
51
+  -H 'Authorization: Bearer app-<api-key>' \
52
+  -H 'Content-Type: application/json' \
53
+  -d '{
54
+    "query": "差旅报销标准是什么?",
55
+    "inputs": {},
56
+    "response_mode": "blocking",
57
+    "user": "zhangsan"
58
+  }'
59
+```
60
+
61
+**阻塞模式响应**
62
+
63
+```json
64
+{
65
+  "task_id": "xxx",
66
+  "message_id": "xxx",
67
+  "conversation_id": "xxx",
68
+  "answer": "根据《差旅管理制度》第三章:\n\n1. 住宿标准:一线城市 500 元/晚...\n2. 交通标准:高铁二等座...",
69
+  "created_at": 1717632000
70
+}
71
+```
72
+
73
+**流式模式响应(SSE)**
74
+
75
+```
76
+data: {"event": "message", "message_id": "xxx", "conversation_id": "xxx", "answer": "根据", ...}
77
+data: {"event": "message", "message_id": "xxx", "conversation_id": "xxx", "answer": "根据《", ...}
78
+data: {"event": "message_end", ...}
79
+```
80
+
81
+### 3.2 获取对话历史
82
+
83
+```
84
+GET /v1/messages?conversation_id=<id>&user=<user>
85
+```
86
+
87
+**响应**
88
+
89
+```json
90
+{
91
+  "limit": 20,
92
+  "has_more": false,
93
+  "data": [
94
+    {
95
+      "id": "xxx",
96
+      "query": "差旅报销标准",
97
+      "answer": "根据《差旅管理制度》...",
98
+      "created_at": 1717632000
99
+    }
100
+  ]
101
+}
102
+```
103
+
104
+### 3.3 获取对话列表
105
+
106
+```
107
+GET /v1/conversations?user=<user>&last_id=<id>&limit=20&sort_by=-updated_at
108
+```
109
+
110
+### 3.4 重命名对话
111
+
112
+```
113
+PATCH /v1/conversations/<conversation_id>/name
114
+```
115
+
116
+```json
117
+{
118
+  "name": "报销相关问题"
119
+}
120
+```
121
+
122
+### 3.5 删除对话
123
+
124
+```
125
+DELETE /v1/conversations/<conversation_id>
126
+```
127
+
128
+---
129
+
130
+## 4. 知识库管理接口
131
+
132
+### 4.1 创建知识库
133
+
134
+```
135
+POST /v1/datasets
136
+```
137
+
138
+```json
139
+{
140
+  "name": "KB-RULE-制度流程",
141
+  "description": "公司各类管理制度和审批流程文档"
142
+}
143
+```
144
+
145
+### 4.2 获取知识库列表
146
+
147
+```
148
+GET /v1/datasets?page=1&page_size=20
149
+```
150
+
151
+### 4.3 上传文档到知识库
152
+
153
+**步骤一:创建上传任务**
154
+
155
+```
156
+POST /v1/datasets/<dataset_id>/document/create-by-file
157
+Content-Type: multipart/form-data
158
+```
159
+
160
+| 参数 | 类型 | 必填 | 说明 |
161
+|------|------|:----:|------|
162
+| file | file | ✅ | 文档文件(PDF/Word/TXT/Markdown/Excel) |
163
+| indexing_technique | string | ✅ | `high_quality`(高质量)或 `economy`(经济) |
164
+| process_rule | object | ❌ | 分段规则 |
165
+
166
+**分段规则示例**
167
+
168
+```json
169
+{
170
+  "mode": "automatic",
171
+  "rules": {
172
+    "pre_processing_rules": [
173
+      {"id": "remove_extra_spaces", "enabled": true},
174
+      {"id": "remove_urls_emails", "enabled": false}
175
+    ],
176
+    "segmentation": {
177
+      "max_segmentation_tokens_length": 500,
178
+      "overlap_tokens_length": 50,
179
+      "separator": ["\n", "\n\n", "。", "!", "?", ";"]
180
+    }
181
+  }
182
+}
183
+```
184
+
185
+**步骤二:查询上传进度**
186
+
187
+```
188
+GET /v1/datasets/<dataset_id>/documents/<document_id>/indexing-status
189
+```
190
+
191
+### 4.4 通过文本创建文档
192
+
193
+```
194
+POST /v1/datasets/<dataset_id>/document/create-by-text
195
+```
196
+
197
+```json
198
+{
199
+  "name": "报销流程说明",
200
+  "text": "## 报销流程\n\n1. 填写报销单...\n2. 部门审批...\n3. 财务审核...",
201
+  "indexing_technique": "high_quality",
202
+  "process_rule": {
203
+    "mode": "automatic"
204
+  }
205
+}
206
+```
207
+
208
+### 4.5 获取知识库文档列表
209
+
210
+```
211
+GET /v1/datasets/<dataset_id>/documents?page=1&page_size=20
212
+```
213
+
214
+### 4.6 删除文档
215
+
216
+```
217
+DELETE /v1/datasets/<dataset_id>/documents/<document_id>
218
+```
219
+
220
+---
221
+
222
+## 5. 集成示例
223
+
224
+### 5.1 Python 集成示例
225
+
226
+```python
227
+import requests
228
+
229
+DIFY_BASE_URL = "http://<dify-host>/v1"
230
+API_KEY = "app-<your-api-key>"
231
+
232
+def chat(query: str, user: str = "default", conversation_id: str = None):
233
+    """发送对话消息"""
234
+    headers = {
235
+        "Authorization": f"Bearer {API_KEY}",
236
+        "Content-Type": "application/json"
237
+    }
238
+    data = {
239
+        "query": query,
240
+        "inputs": {},
241
+        "response_mode": "blocking",
242
+        "user": user,
243
+    }
244
+    if conversation_id:
245
+        data["conversation_id"] = conversation_id
246
+
247
+    resp = requests.post(
248
+        f"{DIFY_BASE_URL}/chat-messages",
249
+        headers=headers,
250
+        json=data,
251
+        timeout=30
252
+    )
253
+    result = resp.json()
254
+    return {
255
+        "answer": result.get("answer", ""),
256
+        "conversation_id": result.get("conversation_id", ""),
257
+        "message_id": result.get("message_id", ""),
258
+    }
259
+
260
+# 使用示例
261
+result = chat("差旅报销标准是什么?", user="zhangsan")
262
+print(result["answer"])
263
+```
264
+
265
+### 5.2 企业微信 Webhook 集成
266
+
267
+```python
268
+from flask import Flask, request, jsonify
269
+import requests
270
+
271
+app = Flask(__name__)
272
+
273
+DIFY_API_KEY = "app-<your-api-key>"
274
+DIFY_BASE_URL = "http://<dify-host>/v1"
275
+
276
+@app.route("/wecom/webhook", methods=["POST"])
277
+def wecom_webhook():
278
+    """企业微信消息回调"""
279
+    data = request.json
280
+    user_query = data.get("Content", "")
281
+    user_id = data.get("FromUserName", "unknown")
282
+
283
+    # 调用 Dify API
284
+    resp = requests.post(
285
+        f"{DIFY_BASE_URL}/chat-messages",
286
+        headers={"Authorization": f"Bearer {DIFY_API_KEY}"},
287
+        json={
288
+            "query": user_query,
289
+            "response_mode": "blocking",
290
+            "user": user_id,
291
+        },
292
+        timeout=30
293
+    )
294
+    answer = resp.json().get("answer", "暂无回复")
295
+
296
+    # 返回企业微信消息格式
297
+    return jsonify({
298
+        "msgtype": "text",
299
+        "text": {"content": answer}
300
+    })
301
+
302
+if __name__ == "__main__":
303
+    app.run(host="0.0.0.0", port=5000)
304
+```
305
+
306
+### 5.3 Node.js 集成示例
307
+
308
+```javascript
309
+const axios = require('axios');
310
+
311
+const DIFY_BASE_URL = 'http://<dify-host>/v1';
312
+const API_KEY = 'app-<your-api-key>';
313
+
314
+async function chat(query, user = 'default') {
315
+  const { data } = await axios.post(
316
+    `${DIFY_BASE_URL}/chat-messages`,
317
+    {
318
+      query,
319
+      inputs: {},
320
+      response_mode: 'blocking',
321
+      user,
322
+    },
323
+    {
324
+      headers: {
325
+        'Authorization': `Bearer ${API_KEY}`,
326
+        'Content-Type': 'application/json',
327
+      },
328
+      timeout: 30000,
329
+    }
330
+  );
331
+  return {
332
+    answer: data.answer,
333
+    conversationId: data.conversation_id,
334
+  };
335
+}
336
+
337
+// 使用示例
338
+chat('差旅报销标准是什么?', 'zhangsan')
339
+  .then(result => console.log(result.answer));
340
+```
341
+
342
+---
343
+
344
+## 6. 错误处理
345
+
346
+| HTTP 状态码 | 说明 | 处理建议 |
347
+|:-----------:|------|---------|
348
+| 400 | 请求参数错误 | 检查请求体格式 |
349
+| 401 | API Key 无效 | 检查 Authorization Header |
350
+| 403 | 无权限访问 | 检查 API Key 权限配置 |
351
+| 429 | 请求频率超限 | 添加请求间隔/重试机制 |
352
+| 500 | 服务端内部错误 | 查看 Dify 服务日志 |
353
+
354
+**建议的重试策略**:
355
+
356
+```python
357
+import time
358
+
359
+def chat_with_retry(query, max_retries=3, retry_delay=2):
360
+    for attempt in range(max_retries):
361
+        try:
362
+            return chat(query)
363
+        except requests.exceptions.Timeout:
364
+            if attempt == max_retries - 1:
365
+                raise
366
+            time.sleep(retry_delay * (attempt + 1))
367
+        except requests.exceptions.HTTPError as e:
368
+            if e.response.status_code == 429:
369
+                time.sleep(retry_delay * (attempt + 1))
370
+            else:
371
+                raise
372
+```
373
+
374
+---
375
+
376
+## 7. API 速率限制
377
+
378
+| 计划类型 | 限制 |
379
+|----------|------|
380
+| 自部署版 | 无官方限制,受服务器资源约束 |
381
+| 建议配置 | 单用户 ≥ 60 次/分钟 |
382
+
383
+---
384
+
385
+_最后更新: 2026-06-06_

+ 293
- 0
docs/deployment-guide.md Zobrazit soubor

@@ -0,0 +1,293 @@
1
+# 完整部署指南
2
+
3
+> 西安云美电子科技有限公司 - 企业知识库
4
+> 版本:v1.0 | 创建时间:2026-06-06
5
+
6
+---
7
+
8
+## 部署架构概览
9
+
10
+```
11
+                        ┌─────────────────────┐
12
+                        │    用户 (浏览器)     │
13
+                        └──────────┬──────────┘
14
+                                   │
15
+                        ┌──────────▼──────────┐
16
+                        │  Nginx (反向代理)    │  :80 / :443
17
+                        │  SSL 终止 / 负载均衡  │
18
+                        └──────────┬──────────┘
19
+                                   │
20
+                   ┌───────────────┼───────────────┐
21
+                   │               │               │
22
+            ┌──────▼──────┐ ┌─────▼─────┐ ┌──────▼──────┐
23
+            │ Dify Web    │ │ Dify API  │ │ SSRF Proxy  │
24
+            │ (React SPA) │ │ (Flask)   │ │ (Squid)     │
25
+            │ :3000       │ │ :5001     │ │ :3128       │
26
+            └─────────────┘ └─────┬─────┘ └─────────────┘
27
+                                 │
28
+                    ┌────────────┼────────────┐
29
+                    │            │            │
30
+             ┌──────▼──────┐ ┌──▼────┐ ┌─────▼──────┐
31
+             │ PostgreSQL  │ │ Redis │ │  Qdrant    │
32
+             │ :5432      │ │ :6379 │ │  :6333     │
33
+             └─────────────┘ └───────┘ └────────────┘
34
+```
35
+
36
+---
37
+
38
+## 第一步:服务器准备
39
+
40
+### 1.1 系统要求
41
+
42
+- Ubuntu 22.04 LTS(推荐)
43
+- 最低 4 核 CPU / 8 GB RAM / 50 GB SSD
44
+- 推荐 8 核 CPU / 16 GB RAM / 100 GB SSD
45
+
46
+### 1.2 安装 Docker
47
+
48
+```bash
49
+# 更新系统
50
+sudo apt update && sudo apt upgrade -y
51
+
52
+# 安装 Docker
53
+curl -fsSL https://get.docker.com | sh
54
+
55
+# 安装 Docker Compose(如未自带)
56
+sudo apt install docker-compose-plugin -y
57
+
58
+# 验证安装
59
+docker --version
60
+docker compose version
61
+
62
+# 将当前用户加入 docker 组
63
+sudo usermod -aG docker $USER
64
+# 重新登录生效
65
+```
66
+
67
+---
68
+
69
+## 第二步:部署 Dify
70
+
71
+### 2.1 克隆项目
72
+
73
+```bash
74
+git clone http://git.xayunmei.com/yunmei/dify-app.git
75
+cd dify-app
76
+git checkout feature/dev
77
+```
78
+
79
+### 2.2 配置环境变量
80
+
81
+```bash
82
+cd docker
83
+
84
+# 复制模板
85
+cp .env.example .env
86
+
87
+# 生成 SECRET_KEY
88
+SECRET_KEY=$(openssl rand -hex 32)
89
+echo "生成的 SECRET_KEY: $SECRET_KEY"
90
+
91
+# 编辑 .env,填入实际值
92
+nano .env
93
+```
94
+
95
+**必须修改的配置项**:
96
+
97
+| 变量 | 说明 | 操作 |
98
+|------|------|------|
99
+| `SECRET_KEY` | 安全密钥 | 使用上面生成的值 |
100
+| `POSTGRES_PASSWORD` | 数据库密码 | 设置强密码 |
101
+| `REDIS_PASSWORD` | Redis 密码 | 设置强密码 |
102
+| `DEEPSEEK_API_KEY` | DeepSeek API Key | 从 DeepSeek 平台获取 |
103
+
104
+### 2.3 启动服务
105
+
106
+```bash
107
+# 拉取镜像
108
+docker compose pull
109
+
110
+# 启动所有服务
111
+docker compose up -d
112
+
113
+# 查看状态
114
+docker compose ps
115
+
116
+# 等待所有服务健康(约 30-60 秒)
117
+docker compose ps --format "table {{.Name}}\t{{.Status}}"
118
+```
119
+
120
+### 2.4 验证部署
121
+
122
+```bash
123
+# 检查 API 服务
124
+curl http://localhost:5001/health
125
+
126
+# 检查 Web 服务
127
+curl -I http://localhost:80
128
+```
129
+
130
+---
131
+
132
+## 第三步:初始化 Dify
133
+
134
+### 3.1 创建管理员账号
135
+
136
+1. 浏览器访问 `http://<服务器IP>:80`
137
+2. 首次访问进入设置向导
138
+3. 填写邮箱和密码,创建管理员账号
139
+4. 设置管理员姓名
140
+
141
+### 3.2 配置模型提供者
142
+
143
+1. 进入 Dify 控制台
144
+2. 导航到 **设置 → 模型提供者**
145
+3. 添加 **DeepSeek**:
146
+   - API Base: `https://api.deepseek.com`
147
+   - API Key: 填入实际的 DeepSeek API Key
148
+4. 验证连接成功
149
+
150
+### 3.3 创建知识库
151
+
152
+按 `docs/knowledge-base-structure.md` 中的结构创建知识库:
153
+
154
+| 知识库名称 | 说明 |
155
+|-----------|------|
156
+| KB-COMP-公司概况 | 公司简介、组织架构 |
157
+| KB-PROD-产品技术 | 产品手册、技术规范 |
158
+| KB-QUAL-质量管理 | 质量体系、检测标准 |
159
+| KB-RULE-制度流程 | 管理制度、审批流程 |
160
+| KB-TRAIN-培训学习 | 培训材料 |
161
+| KB-PROJ-项目档案 | 项目文档 |
162
+| KB-FAQ-常见问题 | FAQ |
163
+
164
+**每个知识库的分段配置**:
165
+- 分段模式:自动
166
+- 最大分段长度:500 tokens
167
+- 重叠长度:50 tokens
168
+
169
+### 3.4 上传文档
170
+
171
+1. 准备各部门的知识库文档(PDF/Word/Markdown)
172
+2. 按分类上传到对应知识库
173
+3. 等待索引完成
174
+4. 测试检索效果
175
+
176
+---
177
+
178
+## 第四步:配置对话应用
179
+
180
+### 4.1 创建聊天应用
181
+
182
+1. Dify 控制台 → **创建应用 → 聊天助手**
183
+2. 应用名称:**云美知识助手**
184
+3. 导入 DSL 配置(可选):
185
+   - 应用设置 → 右上角 → **导入 DSL**
186
+   - 上传 `dsl/app-config.yaml`
187
+4. 或手动配置(参考 `dsl/app-config.yaml` 中的参数)
188
+
189
+### 4.2 配置提示词
190
+
191
+复制 `prompts/system-prompt.md` 中的系统提示词到应用配置。
192
+
193
+### 4.3 关联知识库
194
+
195
+在应用的「知识库」设置中,关联已创建的所有知识库。
196
+
197
+### 4.4 配置推荐问题
198
+
199
+复制 `prompts/system-prompt.md` 中的推荐问题到应用配置。
200
+
201
+### 4.5 测试应用
202
+
203
+使用 Dify 内置的调试界面进行测试:
204
+
205
+```
206
+测试问题1:公司的组织架构是怎样的?
207
+测试问题2:差旅报销的标准和流程是什么?
208
+测试问题3:质量管理体系审核周期是多久?
209
+```
210
+
211
+对照 `tests/test-cases.md` 执行完整测试。
212
+
213
+---
214
+
215
+## 第五步:发布与接入
216
+
217
+### 5.1 发布应用
218
+
219
+1. 点击应用右上角 **发布**
220
+2. 选择 **运行环境**(生产环境)
221
+3. 确认发布
222
+
223
+### 5.2 获取 API Key
224
+
225
+1. 应用 → **访问 API**
226
+2. 创建 API Key
227
+3. 保存 Key(只显示一次)
228
+
229
+### 5.3 接入企业微信(可选)
230
+
231
+参考 `docs/api-integration.md` 中的企业微信集成示例。
232
+
233
+### 5.4 配置 Nginx SSL(生产环境必做)
234
+
235
+```bash
236
+# 将 SSL 证书放入 nginx/ssl/ 目录
237
+mkdir -p nginx/ssl
238
+
239
+# 编辑 Nginx 配置,启用 HTTPS
240
+# 修改 .env 中的 NGINX_SSL_PORT
241
+```
242
+
243
+---
244
+
245
+## 日常运维
246
+
247
+### 备份
248
+
249
+```bash
250
+# 数据库备份(建议设置 cron 每日执行)
251
+docker compose exec db pg_dump -U postgres dify > /backup/dify_$(date +%Y%m%d).sql
252
+
253
+# 向量库备份
254
+docker compose exec qdrant curl -X POST http://localhost:6333/snapshots
255
+```
256
+
257
+### 更新
258
+
259
+```bash
260
+cd docker
261
+docker compose pull
262
+docker compose up -d
263
+```
264
+
265
+### 监控
266
+
267
+```bash
268
+# 查看服务状态
269
+docker compose ps
270
+
271
+# 查看日志
272
+docker compose logs -f --tail=100 api
273
+docker compose logs -f --tail=100 worker
274
+
275
+# 查看资源占用
276
+docker stats --no-stream
277
+```
278
+
279
+---
280
+
281
+## 故障排查速查
282
+
283
+| 现象 | 排查命令 | 常见原因 |
284
+|------|---------|---------|
285
+| 页面打不开 | `docker compose ps` | 服务未启动 |
286
+| 模型不回复 | `docker compose logs api` | API Key 无效/过期 |
287
+| 知识库不检索 | `docker compose logs worker` | Worker 异常/索引未完成 |
288
+| 数据库连接失败 | `docker compose logs db` | 密码不一致 |
289
+| 磁盘空间不足 | `df -h` | 日志/数据膨胀 |
290
+
291
+---
292
+
293
+_最后更新: 2026-06-06_

+ 210
- 0
docs/knowledge-base-structure.md Zobrazit soubor

@@ -0,0 +1,210 @@
1
+# 企业知识库结构设计
2
+
3
+> 西安云美电子科技有限公司 - 企业知识库
4
+> 文档版本:v1.0
5
+> 创建时间:2026-06-06
6
+
7
+---
8
+
9
+## 1. 知识库总体架构
10
+
11
+云美电子科技企业知识库采用 **分层分类** 结构,覆盖公司运营全链路:
12
+
13
+```
14
+企业知识库
15
+├── 📁 公司概况
16
+│   ├── 公司简介
17
+│   ├── 组织架构
18
+│   ├── 发展历程
19
+│   └── 联系方式
20
+│
21
+├── 📁 产品技术
22
+│   ├── 产品手册(按产品线分类)
23
+│   ├── 技术规范
24
+│   ├── 技术方案
25
+│   ├── 研发文档
26
+│   └── 常见技术问题 FAQ
27
+│
28
+├── 📁 质量管理
29
+│   ├── 质量管理体系(QMS)
30
+│   ├── 检测标准
31
+│   ├── 计量规程
32
+│   ├── 不合格品处理流程
33
+│   └── 质量案例库
34
+│
35
+├── 📁 制度流程
36
+│   ├── 行政管理制度
37
+│   ├── 财务管理制度
38
+│   ├── 人力资源制度
39
+│   ├── 采购管理制度
40
+│   └── 项目管理流程
41
+│
42
+├── 📁 培训学习
43
+│   ├── 新员工入职培训
44
+│   ├── 岗位技能培训
45
+│   ├── 安全培训
46
+│   └── 外部培训资料
47
+│
48
+├── 📁 项目档案
49
+│   ├── 项目立项文档
50
+│   ├── 项目验收报告
51
+│   ├── 客户资料
52
+│   └── 合同模板
53
+│
54
+└── 📁 常见问题 FAQ
55
+    ├── 通用 FAQ
56
+    ├── IT 支持 FAQ
57
+    ├── 行政 FAQ
58
+    └── 产品售后 FAQ
59
+```
60
+
61
+## 2. 分类详细说明
62
+
63
+### 2.1 公司概况
64
+
65
+| 子分类 | 内容说明 | 更新频率 |
66
+|--------|---------|---------|
67
+| 公司简介 | 公司介绍、业务范围、核心优势 | 半年 |
68
+| 组织架构 | 部门设置、岗位职责、汇报关系 | 季度 |
69
+| 发展历程 | 大事记、里程碑事件 | 年度 |
70
+| 联系方式 | 内外联系方式、通讯录 | 按需 |
71
+
72
+### 2.2 产品技术
73
+
74
+| 子分类 | 内容说明 | 更新频率 |
75
+|--------|---------|---------|
76
+| 产品手册 | 各产品线的产品说明书、操作指南 | 随产品更新 |
77
+| 技术规范 | 行业标准、企业标准、检测依据 | 按需 |
78
+| 技术方案 | 项目技术方案、可行性分析 | 按需 |
79
+| 研发文档 | 研发过程中的技术记录、设计文档 | 持续 |
80
+| 技术 FAQ | 产品使用中的技术问题及解答 | 持续 |
81
+
82
+### 2.3 质量管理
83
+
84
+| 子分类 | 内容说明 | 更新频率 |
85
+|--------|---------|---------|
86
+| 质量管理体系 | ISO 体系文件、质量手册、程序文件 | 年度审核 |
87
+| 检测标准 | 各类检测方法标准、判定依据 | 按标准更新 |
88
+| 计量规程 | 设备计量校准规程、管理要求 | 年度 |
89
+| 不合格品处理 | 不合格品处理流程、评审记录模板 | 按需 |
90
+| 质量案例库 | 典型质量问题案例、改进措施 | 持续 |
91
+
92
+### 2.4 制度流程
93
+
94
+| 子分类 | 内容说明 | 更新频率 |
95
+|--------|---------|---------|
96
+| 行政管理 | 考勤、出差、办公用品、车辆管理 | 年度 |
97
+| 财务管理 | 报销流程、费用标准、审批权限 | 年度 |
98
+| 人力资源 | 招聘、绩效考核、薪酬福利 | 年度 |
99
+| 采购管理 | 采购流程、供应商管理、审批流程 | 年度 |
100
+| 项目管理 | 项目立项、执行、验收、归档流程 | 年度 |
101
+
102
+### 2.5 培训学习
103
+
104
+| 子分类 | 内容说明 | 更新频率 |
105
+|--------|---------|---------|
106
+| 新员工培训 | 入职培训材料、公司文化介绍 | 年度 |
107
+| 岗位技能 | 各岗位专业技能培训材料 | 按需 |
108
+| 安全培训 | 安全生产、消防安全培训 | 年度 |
109
+| 外部培训 | 外部培训资料、行业学习资源 | 按需 |
110
+
111
+### 2.6 项目档案
112
+
113
+| 子分类 | 内容说明 | 更新频率 |
114
+|--------|---------|---------|
115
+| 立项文档 | 项目立项申请、可行性分析 | 按项目 |
116
+| 验收报告 | 项目验收报告、交付文档 | 按项目 |
117
+| 客户资料 | 客户信息、需求文档、沟通记录 | 按需 |
118
+| 合同模板 | 各类合同标准模板 | 年度 |
119
+
120
+### 2.7 FAQ
121
+
122
+| 子分类 | 内容说明 | 更新频率 |
123
+|--------|---------|---------|
124
+| 通用 FAQ | 公司常见问题(工作地点、福利等) | 持续 |
125
+| IT 支持 | 系统使用、软件安装、网络问题 | 持续 |
126
+| 行政 FAQ | 报销、请假、出差等流程问题 | 持续 |
127
+| 产品售后 | 产品使用、售后问题 | 持续 |
128
+
129
+## 3. 文档分段策略
130
+
131
+### 3.1 分段参数配置
132
+
133
+| 参数 | 推荐值 | 说明 |
134
+|------|--------|------|
135
+| 分段长度 | 500 tokens | 约 300-400 个中文字符 |
136
+| 重叠长度 | 50 tokens | 上下文重叠,保持语义连贯 |
137
+| 最大分段数/文件 | 20 | 单文件最大分段数 |
138
+| 分隔符 | `\n`、`\n\n`、`。`、`!`、`?`、`;` | 中文优先分隔符 |
139
+
140
+### 3.2 分段优先级规则
141
+
142
+1. **按标题分层**:一级标题 → 二级标题 → 三级标题
143
+2. **按段落分割**:在自然段落边界处分割
144
+3. **按句号分割**:超出长度限制时在句号处分割
145
+4. **硬截断兜底**:超出最大长度时强制截断
146
+
147
+### 3.3 不同文档类型的分段建议
148
+
149
+| 文档类型 | 建议分段长度 | 特殊处理 |
150
+|----------|-------------|---------|
151
+| 产品手册 | 300-500 tokens | 保留产品型号、参数表格 |
152
+| 技术规范 | 500-800 tokens | 保留规范编号、章节号 |
153
+| 管理制度 | 400-600 tokens | 保留条款编号 |
154
+| FAQ | 按问答对分段 | 每对为一个分段 |
155
+| 培训材料 | 500-700 tokens | 保留课程结构 |
156
+| 合同模板 | 按条款分段 | 保留条款编号和标题 |
157
+
158
+### 3.4 元数据标签建议
159
+
160
+每个知识库文档建议添加以下元数据标签,便于精准检索:
161
+
162
+```
163
+- department: 所属部门(产品部/质量部/行政部...)
164
+- doc_type: 文档类型(手册/规范/制度/FAQ...)
165
+- product: 关联产品(如适用)
166
+- version: 文档版本号
167
+- status: 状态(有效/废止/草稿)
168
+- last_updated: 最后更新时间
169
+```
170
+
171
+## 4. 知识库导入流程
172
+
173
+### 4.1 批量导入步骤
174
+
175
+1. **文件整理**:按上述分类结构整理文件目录
176
+2. **格式检查**:确保文件为支持的格式(PDF、Word、Markdown、TXT、Excel)
177
+3. **元数据标注**:为每个文件添加元数据标签
178
+4. **创建知识库**:在 Dify 中按分类创建独立知识库
179
+5. **上传文档**:按分类批量上传,应用对应分段策略
180
+6. **索引验证**:检查分段结果,确认无明显截断错误
181
+7. **测试检索**:使用典型问题测试检索效果
182
+
183
+### 4.2 知识库命名规范
184
+
185
+```
186
+KB-{分类英文缩写}-{名称}
187
+
188
+示例:
189
+KB-COMP-公司概况
190
+KB-PROD-产品技术
191
+KB-QUAL-质量管理
192
+KB-RULE-制度流程
193
+KB-TRAIN-培训学习
194
+KB-PROJ-项目档案
195
+KB-FAQ-常见问题
196
+```
197
+
198
+## 5. 维护策略
199
+
200
+| 维护类型 | 频率 | 负责人 | 说明 |
201
+|----------|------|--------|------|
202
+| 内容更新 | 按需 | 各部门 | 文档有更新时同步上传 |
203
+| 索引重建 | 月度 | IT 部 | 检查分段质量,优化检索 |
204
+| 过期清理 | 季度 | 管理部 | 标记/移除过期文档 |
205
+| 效果评估 | 月度 | IT 部 | 检索准确率、用户满意度 |
206
+| 备份 | 每日 | IT 部 | 数据库、向量库自动备份 |
207
+
208
+---
209
+
210
+_最后更新: 2026-06-06_

+ 128
- 0
docs/performance-baseline.md Zobrazit soubor

@@ -0,0 +1,128 @@
1
+# 性能基线指标
2
+
3
+> 西安云美电子科技有限公司 - 企业知识库
4
+> 版本:v1.0 | 创建时间:2026-06-06
5
+
6
+---
7
+
8
+## 1. 测试环境
9
+
10
+| 项目 | 规格 |
11
+|------|------|
12
+| 服务器 | 8 核 CPU / 16 GB RAM / 100 GB SSD |
13
+| 部署方式 | Docker Compose |
14
+| Dify 版本 | 最新社区版(v1.x) |
15
+| 模型 | DeepSeek-Chat |
16
+| 知识库文档数 | 100-500 篇(初期) |
17
+| 知识库分段方式 | 自动分段,500 tokens/段 |
18
+
19
+---
20
+
21
+## 2. 响应时间基线
22
+
23
+| 场景 | 指标 | 目标值 | 可接受值 |
24
+|------|------|:------:|:--------:|
25
+| 首次响应(首 token) | TTFB | ≤ 3s | ≤ 5s |
26
+| 简单问题完整回答 | 总耗时 | ≤ 8s | ≤ 15s |
27
+| 复杂问题(跨分类检索) | 总耗时 | ≤ 12s | ≤ 20s |
28
+| 多轮对话第 N 轮(N≤10) | 总耗时 | ≤ 10s | ≤ 15s |
29
+| 流式输出首字延迟 | TTFB | ≤ 2s | ≤ 4s |
30
+| 知识库索引构建(单文档) | 索引耗时 | ≤ 10s | ≤ 30s |
31
+| 知识库索引构建(批量100篇) | 索引耗时 | ≤ 5min | ≤ 10min |
32
+
33
+---
34
+
35
+## 3. 准确率基线
36
+
37
+| 场景 | 指标 | 目标值 | 可接受值 |
38
+|------|------|:------:|:--------:|
39
+| P0 核心问题回答准确率 | Top-1 准确率 | ≥ 95% | ≥ 85% |
40
+| 制度流程类问题 | 回答准确率 | ≥ 98% | ≥ 90% |
41
+| 产品技术类问题 | 回答准确率 | ≥ 95% | ≥ 85% |
42
+| FAQ 类问题 | 回答准确率 | ≥ 98% | ≥ 90% |
43
+| 不相关问题拒绝率 | 拒绝准确率 | ≥ 95% | ≥ 85% |
44
+| 来源标注准确率 | 标注准确率 | ≥ 90% | ≥ 80% |
45
+| 多轮对话上下文保持率 | 一致性 | ≥ 90% | ≥ 80% |
46
+
47
+---
48
+
49
+## 4. 并发与容量基线
50
+
51
+| 场景 | 指标 | 目标值 | 可接受值 |
52
+|------|------|:------:|:--------:|
53
+| 并发用户数 | 最大并发 | ≥ 20 | ≥ 10 |
54
+| 并发响应时间(10用户) | P95 延迟 | ≤ 10s | ≤ 20s |
55
+| 并发响应时间(20用户) | P95 延迟 | ≤ 15s | ≤ 30s |
56
+| 单知识库文档上限 | 最大文档数 | 1000 篇 | 500 篇 |
57
+| 单知识库分段上限 | 最大分段数 | 50000 段 | 20000 段 |
58
+| 单次检索返回 | Top-K 相关文档 | 3-5 段 | 3-10 段 |
59
+
60
+---
61
+
62
+## 5. 可用性基线
63
+
64
+| 场景 | 指标 | 目标值 |
65
+|------|------|:------:|
66
+| 服务可用性 | Uptime | ≥ 99% |
67
+| 计划外停机 | 月均 | ≤ 1 次 |
68
+| 故障恢复时间 | MTTR | ≤ 30 min |
69
+| 数据库备份频率 | RPO | 每日 |
70
+| 数据恢复测试 | 频率 | 季度 |
71
+
72
+---
73
+
74
+## 6. 模型资源消耗基线
75
+
76
+| 场景 | 指标 | 估算值 |
77
+|------|------|--------|
78
+| 单次问答(简单) | DeepSeek Token 消耗 | ~500-1000 tokens |
79
+| 单次问答(复杂) | DeepSeek Token 消耗 | ~1500-3000 tokens |
80
+| 每日 50 次问答 | 日 Token 消耗 | ~50K-100K tokens |
81
+| 每月预估 | 月 Token 消耗 | ~1.5M-3M tokens |
82
+
83
+---
84
+
85
+## 7. 基线测量方法
86
+
87
+### 7.1 响应时间测量
88
+
89
+```bash
90
+# 使用 curl 测量 TTFB
91
+curl -o /dev/null -s -w "TTFB: %{time_starttransfer}s\nTotal: %{time_total}s\n" \
92
+  -X POST http://<dify-host>/v1/chat-messages \
93
+  -H "Authorization: Bearer <api-key>" \
94
+  -H "Content-Type: application/json" \
95
+  -d '{"query":"差旅报销标准是什么?","inputs":{},"response_mode":"blocking","user":"test-user"}'
96
+```
97
+
98
+### 7.2 准确率测量
99
+
100
+使用 `tests/test-cases.md` 中的 37 个测试用例,逐条执行并记录结果。
101
+
102
+计算公式:
103
+- Top-1 准确率 = 正确回答数 / 总测试问题数 × 100%
104
+- 拒绝准确率 = 正确拒绝无关问题数 / 总无关问题数 × 100%
105
+
106
+### 7.3 并发测量
107
+
108
+```bash
109
+# 使用 ab(Apache Benchmark)模拟并发
110
+ab -n 20 -c 10 -p request.json -T application/json \
111
+  -H "Authorization: Bearer <api-key>" \
112
+  http://<dify-host>/v1/chat-messages
113
+```
114
+
115
+---
116
+
117
+## 8. 性能调优建议
118
+
119
+| 问题方向 | 调优手段 |
120
+|----------|---------|
121
+| 响应慢 | 优化知识库分段大小、调整 Top-K 参数、升级服务器 |
122
+| 准确率低 | 优化分段策略、增加元数据标签、调整检索权重 |
123
+| 并发不足 | 扩展 Worker 实例数、增加 Redis 内存、升级 CPU |
124
+| Token 消耗高 | 优化 System Prompt 长度、调整上下文窗口、启用缓存 |
125
+
126
+---
127
+
128
+_最后更新: 2026-06-06_

+ 178
- 0
dsl/app-config.yaml Zobrazit soubor

@@ -0,0 +1,178 @@
1
+# Dify Application DSL Configuration
2
+# 西安云美电子科技有限公司 - 企业知识库
3
+# 
4
+# 导入方法:Dify 控制台 → 应用 → 导入 DSL
5
+# 或通过 API:POST /v1/apps/import
6
+#
7
+# 注意:导入前需在 Dify 控制台中配置好 DeepSeek 模型提供者
8
+
9
+app:
10
+  name: 云美知识助手
11
+  description: 西安云美电子科技有限公司企业内部知识库对话助手,帮助员工快速检索公司文档和获取智能问答
12
+  mode: chat
13
+  icon: 🤖
14
+  icon_background: "#4F46E5"
15
+
16
+model_config:
17
+  # 使用 DeepSeek 模型
18
+  model:
19
+    provider: deepseek
20
+    name: deepseek-chat
21
+    mode: chat
22
+    completion_params:
23
+      temperature: 0.3          # 低温度,提高回答准确性
24
+      top_p: 0.8
25
+      max_tokens: 2048
26
+      presence_penalty: 0.0
27
+      frequency_penalty: 0.0
28
+
29
+  # 知识库检索配置
30
+  retriever_resource:
31
+    enabled: true
32
+    query_variable: query
33
+
34
+  # 知识库引用
35
+  dataset_query_variable: query
36
+
37
+  # 提示词配置
38
+  prompt_template:
39
+    - id: system-prompt
40
+      role: system
41
+      template: |
42
+        你是"云美知识助手",西安云美电子科技有限公司的内部 AI 助手。你的职责是帮助员工快速、准确地从公司知识库中检索信息并回答问题。
43
+
44
+        ## 身份与职责
45
+
46
+        - 你是云美电子科技的企业知识库助手
47
+        - 你负责帮助员工查找公司制度、产品技术、质量管理、培训资料等各类文档信息
48
+        - 你的回答必须基于知识库中的实际内容,不编造信息
49
+
50
+        ## 回答规范
51
+
52
+        1. **基于事实**:所有回答必须基于知识库文档中的内容,不得凭空编造或猜测
53
+        2. **标注来源**:回答时请注明信息来源的文档名称或分类(如"根据《XX产品手册》...")
54
+        3. **简洁清晰**:回答要直接、有条理,使用要点列表格式,避免冗长
55
+        4. **分类引导**:如果用户的问题涉及多个知识库分类,请分类回答
56
+        5. **不确定时说明**:如果知识库中没有相关信息,请明确告知用户"当前知识库中未找到相关信息",并建议联系对应部门
57
+
58
+        ## 知识库分类参考
59
+
60
+        - 📋 **公司概况**:公司简介、组织架构、联系方式
61
+        - 🔧 **产品技术**:产品手册、技术规范、技术方案
62
+        - ✅ **质量管理**:质量体系、检测标准、计量规程
63
+        - 📄 **制度流程**:管理制度、审批流程、操作规程
64
+        - 📚 **培训学习**:培训材料、学习资源
65
+        - 📁 **项目档案**:项目文档、合同模板
66
+        - ❓ **常见问题**:IT支持、行政事务、售后FAQ
67
+
68
+        ## 语气与风格
69
+
70
+        - 亲切但不随意,专业但不生硬
71
+        - 使用"您"称呼
72
+        - 适当使用 Emoji 增加可读性
73
+        - 回答控制在合理长度,避免大段文字堆砌
74
+
75
+    - id: user-query
76
+      role: user
77
+      template: "{{query}}"
78
+
79
+  # 知识库设置
80
+  dataset_configs:
81
+    # 参考的知识库列表(导入后需关联实际知识库)
82
+    datasets:
83
+      - name: KB-COMP-公司概况
84
+        description: 公司简介、组织架构、发展历程
85
+      - name: KB-PROD-产品技术
86
+        description: 产品手册、技术规范、研发文档
87
+      - name: KB-QUAL-质量管理
88
+        description: 质量体系、检测标准、计量规程
89
+      - name: KB-RULE-制度流程
90
+        description: 管理制度、审批流程、操作规程
91
+      - name: KB-TRAIN-培训学习
92
+        description: 培训材料、学习资源
93
+      - name: KB-PROJ-项目档案
94
+        description: 项目文档、合同模板
95
+      - name: KB-FAQ-常见问题
96
+        description: IT支持、行政事务、售后FAQ
97
+
98
+    # 检索参数
99
+    retrieval_model: hybrid      # hybrid 混合检索(向量+全文)效果优于纯向量
100
+    top_k: 5                     # 检索返回的文档段落数
101
+    score_threshold: 0.5         # 相关性分数阈值
102
+    reranking_model: ""         # 预留重排序模型(可选)
103
+
104
+  # 对话配置
105
+  conversation:
106
+    # 开场白
107
+    opening_statement: |
108
+      👋 您好!我是**云美知识助手**,可以帮您查找公司各类文档和信息。
109
+
110
+      您可以直接提问,例如:
111
+      - "差旅报销的流程是什么?"
112
+      - "XX产品的技术参数是什么?"
113
+      - "质量管理体系的审核周期是多久?"
114
+
115
+      请问有什么可以帮您?
116
+
117
+    # 推荐问题
118
+    suggested_questions:
119
+      - 公司的组织架构是怎样的?
120
+      - 差旅报销的标准和流程是什么?
121
+      - 主要产品的技术参数在哪里可以查到?
122
+      - 质量管理体系文件如何获取?
123
+      - 新员工入职培训需要了解什么?
124
+      - IT 系统使用有问题怎么办?
125
+
126
+    # 下一步问题建议
127
+    suggested_questions_after_answer:
128
+      enabled: true
129
+
130
+    # 对话历史轮数
131
+    context_count: 10
132
+
133
+  # 功能配置
134
+  features:
135
+    # 文件上传(允许用户上传文件辅助提问)
136
+    file_upload:
137
+      image:
138
+        enabled: true
139
+        allowed_extensions:
140
+          - jpg
141
+          - jpeg
142
+          - png
143
+          - gif
144
+          - webp
145
+        max_size_mb: 10
146
+      document:
147
+        enabled: false
148
+
149
+    # 对话标题自动生成
150
+    conversation_title_auto_generate: true
151
+
152
+    # 敏感词过滤
153
+    sensitive_word_avoidance:
154
+      enabled: true
155
+      type: "keyword"          # keyword / regex
156
+      config:
157
+        - "密码"
158
+        - "薪资"
159
+        - "工资"
160
+        - "薪资标准"
161
+      canned_response: "抱歉,该问题涉及敏感信息,请通过正规渠道查询。"
162
+
163
+    # Token 限制
164
+    token_limit:
165
+      enabled: true
166
+      max_input_tokens: 3000
167
+      max_output_tokens: 2048
168
+
169
+    # 引用展示
170
+    citation:
171
+      enabled: true
172
+      position: "end"          # start / end
173
+
174
+# 环境变量引用说明
175
+# 导入 DSL 后,需要在 Dify 控制台手动配置以下内容:
176
+# 1. 模型提供者:添加 DeepSeek API Key
177
+# 2. 关联知识库:将 datasets 列表中的知识库关联到实际创建的知识库
178
+# 3. 确认提示词:检查 system-prompt 是否正确加载

+ 48
- 0
knowledge/sample-docs/IT支持FAQ.md Zobrazit soubor

@@ -0,0 +1,48 @@
1
+# IT 支持 FAQ
2
+
3
+## 一、账号与登录
4
+
5
+### Q1:忘记系统密码怎么办?
6
+
7
+A:请联系 IT 管理员重置密码。提供您的工号和姓名即可。
8
+
9
+### Q2:VPN 如何连接?
10
+
11
+A:
12
+1. 下载 VPN 客户端(联系 IT 获取安装包)
13
+2. 安装并打开客户端
14
+3. 输入服务器地址(联系 IT 获取)
15
+4. 输入公司邮箱和密码
16
+5. 点击连接
17
+
18
+## 二、办公软件
19
+
20
+### Q3:Office 办公软件如何安装?
21
+
22
+A:通过公司 OA 系统的"软件中心"下载安装,或联系 IT 管理员协助安装。
23
+
24
+### Q4:打印机无法连接怎么办?
25
+
26
+A:
27
+1. 检查打印机是否开机
28
+2. 检查网络连接是否正常
29
+3. 尝试重新添加打印机
30
+4. 如仍无法解决,联系 IT 管理员
31
+
32
+## 三、网络问题
33
+
34
+### Q5:WiFi 连不上怎么办?
35
+
36
+A:
37
+1. 确认使用的是公司内部 WiFi(查看 SSID 列表)
38
+2. 输入正确的密码
39
+3. 如提示 IP 冲突,尝试断开重连
40
+4. 多人同时无法连接时,联系 IT 管理员
41
+
42
+### Q6:外网访问受限怎么办?
43
+
44
+A:公司内网对外部部分网站有访问限制。如需访问特定外部网站用于工作,请联系 IT 管理员申请白名单。
45
+
46
+---
47
+
48
+*本文档为示例文档,仅供知识库测试使用*

+ 30
- 0
knowledge/sample-docs/公司简介.md Zobrazit soubor

@@ -0,0 +1,30 @@
1
+# 西安云美电子科技有限公司简介
2
+
3
+## 公司概况
4
+
5
+西安云美电子科技有限公司(以下简称"云美电子")是一家专注于电子科技领域的高新技术企业,致力于为客户提供优质的电子产品和技术服务。
6
+
7
+## 业务范围
8
+
9
+1. 电子产品的研发、生产与销售
10
+2. 电子元器件的检测与计量服务
11
+3. 技术咨询服务
12
+4. 定制化电子解决方案
13
+
14
+## 组织架构
15
+
16
+- **总经理**:全面负责公司经营管理
17
+- **技术部**:负责产品研发和技术支持
18
+- **质量管理部**:负责质量体系运行和产品检测
19
+- **市场部**:负责市场推广和客户关系
20
+- **行政部**:负责公司日常行政事务
21
+- **财务部**:负责财务管理和成本控制
22
+
23
+## 联系方式
24
+
25
+- 地址:陕西省西安市
26
+- 企业邮箱:联系行政部获取
27
+
28
+---
29
+
30
+*本文档为示例文档,仅供知识库测试使用*

+ 57
- 0
knowledge/sample-docs/差旅管理制度.md Zobrazit soubor

@@ -0,0 +1,57 @@
1
+# 差旅管理制度
2
+
3
+## 第一章 总则
4
+
5
+### 第一条 目的
6
+
7
+为规范公司员工差旅行为,合理控制差旅费用,特制定本制度。
8
+
9
+### 第二条 适用范围
10
+
11
+本制度适用于公司全体员工的因公出差活动。
12
+
13
+## 第二章 差旅标准
14
+
15
+### 第三条 交通标准
16
+
17
+| 职级 | 交通方式 | 标准 |
18
+|------|---------|------|
19
+| 总经理 | 飞机商务舱/高铁一等座 | 据实报销 |
20
+| 部门经理 | 飞机经济舱/高铁二等座 | 据实报销 |
21
+| 普通员工 | 高铁二等座/长途汽车 | 据实报销 |
22
+
23
+### 第四条 住宿标准
24
+
25
+| 城市类别 | 部门经理 | 普通员工 |
26
+|----------|---------|---------|
27
+| 一线城市(北上广深) | 500 元/晚 | 350 元/晚 |
28
+| 省会城市 | 400 元/晚 | 300 元/晚 |
29
+| 其他城市 | 300 元/晚 | 200 元/晚 |
30
+
31
+### 第五条 伙食补助
32
+
33
+- 一线城市:100 元/天
34
+- 其他城市:80 元/天
35
+
36
+## 第三章 报销流程
37
+
38
+### 第六条 报销步骤
39
+
40
+1. 出差前填写《出差申请单》,经部门经理审批
41
+2. 出差期间保留所有发票和行程单
42
+3. 出差后 5 个工作日内填写《差旅报销单》
43
+4. 附上发票、行程单等原始凭证
44
+5. 部门经理审核签字
45
+6. 财务部复核
46
+7. 总经理审批(金额超过 5000 元)
47
+8. 财务部打款
48
+
49
+### 第七条 注意事项
50
+
51
+- 报销金额超出标准部分由个人承担
52
+- 未按规定提交发票的不予报销
53
+- 出差申请未提前审批的,费用自理
54
+
55
+---
56
+
57
+*本文档为示例文档,仅供知识库测试使用*

+ 53
- 0
knowledge/sample-docs/质量管理体系.md Zobrazit soubor

@@ -0,0 +1,53 @@
1
+# 质量管理体系概述
2
+
3
+## 体系框架
4
+
5
+云美电子依据 ISO 9001 标准建立了完整的质量管理体系(QMS),覆盖产品研发、采购、生产、检测全流程。
6
+
7
+## 质量方针
8
+
9
+"质量第一、客户至上、持续改进、追求卓越"
10
+
11
+## 质量目标
12
+
13
+1. 产品出厂合格率 ≥ 99%
14
+2. 客户投诉处理及时率 100%
15
+3. 内部审核每年不少于 2 次
16
+4. 管理评审每年不少于 1 次
17
+
18
+## 质量组织
19
+
20
+- **质量负责人**:全面负责质量管理体系运行
21
+- **检测中心**:负责产品检测和计量校准
22
+- **质量审核组**:负责内部审核和管理评审
23
+
24
+## 检测标准
25
+
26
+### 常用检测标准
27
+
28
+| 标准编号 | 标准名称 | 适用范围 |
29
+|----------|---------|---------|
30
+| GB/T 2828.1 | 计数抽样检验程序 | 进货检验、过程检验 |
31
+| GB/T 699 | 优质碳素结构钢 | 原材料检验 |
32
+| SJ/T 11147 | 电子元器件检测方法 | 电子元器件检测 |
33
+
34
+## 计量管理
35
+
36
+### 计量器具分类
37
+
38
+- **A 类**:关键计量器具,每年校准 1 次
39
+- **B 类**:一般计量器具,每两年校准 1 次
40
+- **C 类**:辅助计量器具,三年校准 1 次
41
+
42
+### 校准流程
43
+
44
+1. 编制年度校准计划
45
+2. 联系有资质的计量机构
46
+3. 送检或现场校准
47
+4. 取得校准证书
48
+5. 更新计量器具台账
49
+6. 贴置校准标签
50
+
51
+---
52
+
53
+*本文档为示例文档,仅供知识库测试使用*

+ 153
- 0
prompts/system-prompt.md Zobrazit soubor

@@ -0,0 +1,153 @@
1
+# Dify 知识库助手 - 系统提示词
2
+
3
+> 版本:v1.0 | 适用场景:云美电子科技企业知识库对话式检索
4
+
5
+---
6
+
7
+## 系统提示词(System Prompt)
8
+
9
+```
10
+你是"云美知识助手",西安云美电子科技有限公司的内部 AI 助手。你的职责是帮助员工快速、准确地从公司知识库中检索信息并回答问题。
11
+
12
+## 身份与职责
13
+
14
+- 你是云美电子科技的企业知识库助手
15
+- 你负责帮助员工查找公司制度、产品技术、质量管理、培训资料等各类文档信息
16
+- 你的回答必须基于知识库中的实际内容,不编造信息
17
+
18
+## 回答规范
19
+
20
+1. **基于事实**:所有回答必须基于知识库文档中的内容,不得凭空编造或猜测
21
+2. **标注来源**:回答时请注明信息来源的文档名称或分类(如"根据《XX产品手册》...")
22
+3. **简洁清晰**:回答要直接、有条理,使用要点列表格式,避免冗长
23
+4. **分类引导**:如果用户的问题涉及多个知识库分类,请分类回答
24
+5. **不确定时说明**:如果知识库中没有相关信息,请明确告知用户"当前知识库中未找到相关信息",并建议联系对应部门
25
+
26
+## 回答模板
27
+
28
+当从知识库检索到相关信息时:
29
+
30
+> 根据《[文档名称]》[章节/条款]:
31
+> 
32
+> 1. [要点1]
33
+> 2. [要点2]
34
+> 3. [要点3]
35
+> 
36
+> 如需了解更多详情,可以查阅完整文档:[文档路径]
37
+
38
+当未检索到相关信息时:
39
+
40
+> 抱歉,当前知识库中未找到与您问题直接相关的内容。建议您:
41
+> 
42
+> 1. 换一个关键词重新提问
43
+> 2. 联系对应部门获取信息(如产品质量问题请联系质量管理部)
44
+> 3. 查阅公司 OA 系统或联系行政部
45
+
46
+## 知识库分类参考
47
+
48
+- 📋 **公司概况**:公司简介、组织架构、联系方式
49
+- 🔧 **产品技术**:产品手册、技术规范、技术方案
50
+- ✅ **质量管理**:质量体系、检测标准、计量规程
51
+- 📄 **制度流程**:管理制度、审批流程、操作规程
52
+- 📚 **培训学习**:培训材料、学习资源
53
+- 📁 **项目档案**:项目文档、合同模板
54
+- ❓ **常见问题**:IT支持、行政事务、售后FAQ
55
+
56
+## 语气与风格
57
+
58
+- 亲切但不随意,专业但不生硬
59
+- 使用"您"称呼
60
+- 适当使用 Emoji 增加可读性
61
+- 回答控制在合理长度,避免大段文字堆砌
62
+```
63
+
64
+---
65
+
66
+## 开场白(Opening Statement)
67
+
68
+```
69
+👋 您好!我是**云美知识助手**,可以帮您查找公司各类文档和信息。
70
+
71
+您可以直接提问,例如:
72
+- "差旅报销的流程是什么?"
73
+- "XX产品的技术参数是什么?"
74
+- "质量管理体系的审核周期是多久?"
75
+
76
+请问有什么可以帮您?
77
+```
78
+
79
+---
80
+
81
+## 推荐问题(Suggested Questions)
82
+
83
+### 首屏推荐(4-6 个高频问题)
84
+
85
+1. 📋 公司的组织架构是怎样的?
86
+2. 💰 差旅报销的标准和流程是什么?
87
+3. 🔧 主要产品的技术参数在哪里可以查到?
88
+4. ✅ 质量管理体系文件如何获取?
89
+5. 📚 新员工入职培训需要了解什么?
90
+6. ❓ IT 系统使用有问题怎么办?
91
+
92
+### 按场景推荐的下一步问题
93
+
94
+当用户询问**制度流程**类问题时,推荐:
95
+- 相关审批流程的详细步骤
96
+- 表单模板下载指引
97
+- 对应负责部门和联系方式
98
+
99
+当用户询问**产品技术**类问题时,推荐:
100
+- 同系列产品信息
101
+- 技术规范标准
102
+- 常见故障处理
103
+
104
+当用户询问**质量管理**类问题时,推荐:
105
+- 相关检测标准
106
+- 计量规程要求
107
+- 历史质量案例
108
+
109
+---
110
+
111
+## 下一步问题建议策略
112
+
113
+### 触发规则
114
+
115
+每次回答后,根据回答内容动态推荐 2-3 个相关问题:
116
+
117
+1. **同分类延伸**:推荐同一知识库分类下的相关问题
118
+2. **关联分类推荐**:推荐有逻辑关联的其他分类问题
119
+3. **高频追问**:基于该问题的高频追问方向
120
+
121
+### 示例
122
+
123
+用户问:"年假有几天?"
124
+
125
+回答后推荐:
126
+- 📄 请假审批流程是什么? → 制度流程类
127
+- 💰 年假期间工资怎么算? → 制度流程类
128
+- 📋 加班调休的规定是什么? → 制度流程类
129
+
130
+### Dify 配置
131
+
132
+在 Dify 应用中,"下一步问题建议"功能可通过以下方式实现:
133
+
134
+1. **方式一:在 System Prompt 末尾添加**
135
+
136
+```
137
+## 下一步问题建议
138
+
139
+每次回答后,请根据回答内容,推荐 2-3 个用户可能感兴趣的相关问题,格式如下:
140
+
141
+💡 您可能还想了解:
142
+- [问题1]
143
+- [问题2]
144
+- [问题3]
145
+```
146
+
147
+2. **方式二:使用 Dify 的 Features → Suggested Questions 功能**
148
+
149
+在 Dify 应用编辑页面 → Features → 开启 Suggested Questions → 配置推荐逻辑。
150
+
151
+---
152
+
153
+_最后更新: 2026-06-06_

+ 31
- 141
tasks.md Zobrazit soubor

@@ -1,169 +1,59 @@
1
-# 企业知识库 - Dify 应用开发任务清单
1
+# 企业知识库项目 - 任务清单
2 2
 
3
-> **项目**: 云美电子科技 企业知识库  
4
-> **技术栈**: Dify (自部署 Docker) + DeepSeek  
5
-> **仓库**: http://git.xayunmei.com/yunmei/dify-app  
6
-> **PM/QA**: Agent-PMQA  
7
-> **Dev**: Agent-Dev  
3
+> 项目:西安云美电子科技有限公司 企业知识库
4
+> 技术栈:Dify 社区版(Docker)+ DeepSeek 模型
5
+> 分支:feature/dev
8 6
 
9 7
 ---
10 8
 
11
-## M1: 环境搭建(Day 1)
9
+## M1: 环境搭建与 Docker 部署配置
12 10
 
13
-### M1.1 Dify Docker 部署
14
-- [ ] 1.1.1 确认部署服务器(IP/配置)及 Docker 环境
15
-- [ ] 1.1.2 编写 `docker-compose.yml`(Dify 社区版)
16
-- [ ] 1.1.3 配置 `.env` 环境变量(端口、密钥、存储路径)
17
-- [ ] 1.1.4 启动 Dify 全套服务并验证可访问
18
-- [ ] 1.1.5 初始化管理员账号
19
-
20
-### M1.2 DeepSeek 模型接入
21
-- [ ] 1.2.1 在 Dify 后台配置 DeepSeek API Key
22
-- [ ] 1.2.2 验证模型调用正常(测试对话)
23
-- [ ] 1.2.3 配置模型参数(temperature、max_tokens 等)
24
-
25
-### M1.3 Git 项目初始化
26
-- [ ] 1.3.1 创建项目目录结构
27
-- [ ] 1.3.2 编写 `.gitignore`
28
-- [ ] 1.3.3 编写 `README.md`(项目说明)
29
-- [ ] 1.3.4 首次 push 到远程仓库
11
+- [x] M1.1.1 创建 `docker/` 目录结构
12
+- [x] M1.1.2 编写 `docker/docker-compose.yml`(Dify 完整服务编排:api、web、worker、db、redis、nginx、ssrf-proxy 等)
13
+- [x] M1.1.3 编写 `docker/.env.example`(所有环境变量模板,含数据库密码、Secret Key、API 端口等占位符)
14
+- [x] M1.1.4 编写 `docker/.env.docker`(Docker 内部服务通信专用变量)
15
+- [x] M1.1.5 编写 `docker/README.md`(部署步骤说明)
16
+- [x] M1.2.1 编写 `.gitignore`(排除 .env、node_modules、data 卷等)
30 17
 
31 18
 ---
32 19
 
33
-## M2: 知识库搭建(Day 2)
34
-
35
-### M2.1 知识库规划
36
-- [ ] 2.1.1 定义知识库分类体系(技术文档/管理制度/项目资料)
37
-- [ ] 2.1.2 编写知识库分类说明文档 `docs/knowledge-base-structure.md`
38
-- [ ] 2.1.3 定义文档命名规范和元数据标准
39
-
40
-### M2.2 Dify 知识库配置
41
-- [ ] 2.2.1 在 Dify 中创建知识库(按分类)
42
-- [ ] 2.2.2 配置分段策略(自动/自定义分段规则)
43
-- [ ] 2.2.3 配置索引模式(高质量模式 - Embedding)
44
-- [ ] 2.2.4 配置检索方式(混合检索:向量+全文)
45
-- [ ] 2.2.5 选择 Embedding 模型并验证
20
+## M2: 知识库结构设计与文档编写
46 21
 
47
-### M2.3 示例文档导入
48
-- [ ] 2.3.1 准备测试文档集(每个分类 3-5 份)
49
-- [ ] 2.3.2 上传文档到 Dify 知识库
50
-- [ ] 2.3.3 验证分段结果和检索质量
22
+- [x] M2.1.1 调研云美电子科技典型知识库分类(产品手册、技术规范、管理制度、培训资料等)
23
+- [x] M2.1.2 编写 `docs/knowledge-base-structure.md`(知识库分类结构设计)
24
+- [x] M2.1.3 设计知识库分段策略(文档分块大小、重叠策略)
51 25
 
52 26
 ---
53 27
 
54
-## M3: 应用开发(Day 3-4)
28
+## M3: 系统提示词设计
55 29
 
56
-### M3.1 Chatbot 应用创建
57
-- [ ] 3.1.1 在 Dify 中创建 Chatflow 类型应用
58
-- [ ] 3.1.2 配置系统提示词(角色定义、回答规范、语气风格)
59
-- [ ] 3.1.3 绑定知识库并配置检索策略
60
-- [ ] 3.1.4 配置引用溯源(显示文档来源)
61
-
62
-### M3.2 Prompt 工程
63
-- [ ] 3.2.1 编写系统 Prompt `prompts/system-prompt.md`
64
-- [ ] 3.2.2 定义回答格式(结构化输出模板)
65
-- [ ] 3.2.3 定义边界场景处理(不知道/超出范围/敏感信息)
66
-- [ ] 3.2.4 定义多轮对话策略(上下文窗口管理)
67
-
68
-### M3.3 高级功能
69
-- [ ] 3.3.1 配置敏感词过滤(如适用)
70
-- [ ] 3.3.2 配置对话开场白和推荐问题
71
-- [ ] 3.3.3 配置引用归属显示
72
-- [ ] 3.3.4 设置 citations(引用来源卡片)
30
+- [x] M3.1.1 编写 `prompts/system-prompt.md`(Dify 知识库助手的系统提示词)
31
+- [x] M3.1.2 设计开场白与推荐问题
32
+- [x] M3.1.3 设计下一步问题建议策略
73 33
 
74 34
 ---
75 35
 
76
-## M4: 测试优化(Day 5)
77
-
78
-### M4.1 功能测试
79
-- [ ] 4.1.1 编写测试用例 `tests/test-cases.md`
80
-- [ ] 4.1.2 基础问答测试(10+ 问题覆盖各知识库)
81
-- [ ] 4.1.3 多轮对话测试(上下文连贯性)
82
-- [ ] 4.1.4 边界测试(无关问题/错误提问/长文本)
83
-- [ ] 4.1.5 检索准确率评估(Top-5 召回率)
84
-
85
-### M4.2 调优
86
-- [ ] 4.2.1 根据测试结果优化 Prompt
87
-- [ ] 4.2.2 调整分段策略(如召回不准)
88
-- [ ] 4.2.3 调整检索参数(TopK、Score 阈值、Rerank)
89
-- [ ] 4.2.4 调整模型参数(temperature 等)
36
+## M4: 测试用例与性能基线
90 37
 
91
-### M4.3 性能测试
92
-- [ ] 4.3.1 响应时间测试(首 token / 完整回答)
93
-- [ ] 4.3.2 并发测试(多用户同时访问)
94
-- [ ] 4.3.3 记录性能基线 `docs/performance-baseline.md`
38
+- [x] M4.1.1 编写 `tests/test-cases.md`(功能测试用例:知识检索、问答质量、多轮对话等)
39
+- [x] M4.1.2 编写 `docs/performance-baseline.md`(性能基线指标:响应时间、准确率等)
95 40
 
96 41
 ---
97 42
 
98
-## M5: 用户接入(Day 6)
43
+## M5: API 集成文档
99 44
 
100
-### M5.1 嵌入式 WebApp
101
-- [ ] 5.1.1 配置 Dify 内置 WebApp(主题/Logo/品牌色)
102
-- [ ] 5.1.2 嵌入到公司内部网站(iframe 方案)
103
-- [ ] 5.1.3 测试嵌入页面的可用性
104
-
105
-### M5.2 API 集成(可选)
106
-- [ ] 5.2.1 生成 API Key
107
-- [ ] 5.2.2 编写 API 调用示例 `docs/api-integration.md`
108
-- [ ] 5.2.3 如需对接企业微信/飞书,编写对接方案
109
-
110
-### M5.3 权限与安全
111
-- [ ] 5.3.1 配置 Dify 应用访问权限
112
-- [ ] 5.3.2 检查 API Key 安全存储
113
-- [ ] 5.3.3 数据隐私合规检查
45
+- [x] M5.1.1 编写 `docs/api-integration.md`(Dify API 集成指南:对话、知识库管理接口)
114 46
 
115 47
 ---
116 48
 
117
-## M6: 文档交付(Day 7)
49
+## M6: 应用配置导出与最终整理
118 50
 
119
-### M6.1 项目文档
120
-- [ ] 6.1.1 更新 `README.md`(部署说明、使用指南)
121
-- [ ] 6.1.2 编写运维手册 `docs/ops-guide.md`(备份、升级、排障)
122
-- [ ] 6.1.3 编写用户使用手册 `docs/user-guide.md`
123
-- [ ] 6.1.4 编写知识库维护指南 `docs/kb-maintenance.md`
124
-
125
-### M6.2 Dify 配置导出
126
-- [ ] 6.2.1 导出应用 DSL 配置(YAML)
127
-- [ ] 6.2.2 导出知识库配置
128
-- [ ] 6.2.3 版本打 Tag,push 最终版本
51
+- [x] M6.1.1 编写 `dsl/app-config.yaml`(Dify 应用 DSL 配置模板)
52
+- [x] M6.1.2 编写 `docs/deployment-guide.md`(完整部署指南)
53
+- [x] M6.1.3 创建项目 README.md
54
+- [x] M6.1.4 整理最终目录结构,确保所有文件就绪
55
+- [x] M6.1.5 创建最终 Tag(v1.0.0)
129 56
 
130 57
 ---
131 58
 
132
-## 项目目录结构
133
-
134
-```
135
-dify-app/
136
-├── README.md                    # 项目说明
137
-├── .gitignore
138
-├── docker/
139
-│   ├── docker-compose.yml       # Dify 部署配置
140
-│   └── .env.example             # 环境变量模板
141
-├── prompts/
142
-│   └── system-prompt.md         # 系统 Prompt
143
-├── knowledge/
144
-│   └── sample-docs/             # 示例文档
145
-│       ├── technical/           # 技术文档
146
-│       ├── management/          # 管理制度
147
-│       └── project/             # 项目资料
148
-├── dsl/
149
-│   └── app-config.yaml          # Dify 应用 DSL 导出
150
-├── tests/
151
-│   └── test-cases.md            # 测试用例
152
-└── docs/
153
-    ├── knowledge-base-structure.md  # 知识库结构说明
154
-    ├── api-integration.md       # API 对接文档
155
-    ├── performance-baseline.md  # 性能基线
156
-    ├── ops-guide.md             # 运维手册
157
-    ├── user-guide.md            # 用户手册
158
-    └── kb-maintenance.md        # 知识库维护指南
159
-```
160
-
161
----
162
-
163
-## 审核标准(QA Checklist)
164
-
165
-每个 PR 需检查:
166
-- [ ] 安全:无 API Key 泄露、无硬编码密码
167
-- [ ] 逻辑:Prompt 合理、分段策略正确
168
-- [ ] 性能:检索配置最优、无冗余依赖
169
-- [ ] 规范:文件命名统一、文档完整
59
+_创建时间: 2026-06-06_

+ 125
- 0
tests/test-cases.md Zobrazit soubor

@@ -0,0 +1,125 @@
1
+# 企业知识库 - 测试用例
2
+
3
+> 西安云美电子科技有限公司
4
+> 版本:v1.0 | 创建时间:2026-06-06
5
+
6
+---
7
+
8
+## 1. 测试概述
9
+
10
+| 项目 | 说明 |
11
+|------|------|
12
+| 测试对象 | Dify 知识库对话应用 |
13
+| 测试范围 | 知识检索、问答质量、多轮对话、边界场景 |
14
+| 测试方式 | 人工 + 半自动化(Dify 平台内置测试) |
15
+| 通过标准 | 核心用例 100% 通过,边缘用例 ≥90% 通过 |
16
+
17
+---
18
+
19
+## 2. 功能测试用例
20
+
21
+### TC-01: 知识检索准确性
22
+
23
+| 用例ID | 测试场景 | 输入问题 | 期望结果 | 优先级 |
24
+|--------|---------|---------|---------|--------|
25
+| TC-01-01 | 制度流程检索 | "差旅报销标准是什么?" | 正确引用报销制度文档,列出标准金额和流程 | P0 |
26
+| TC-01-02 | 产品技术检索 | "XX产品的检测参数有哪些?" | 返回产品手册中的检测参数信息,标注来源 | P0 |
27
+| TC-01-03 | 质量管理检索 | "ISO质量体系审核周期是多久?" | 返回质量管理体系文档中的审核要求 | P0 |
28
+| TC-01-04 | FAQ检索 | "VPN怎么连接?" | 返回IT支持FAQ中的VPN配置步骤 | P0 |
29
+| TC-01-05 | 跨分类检索 | "请假需要哪些审批?" | 从制度流程中检索请假审批信息 | P1 |
30
+| TC-01-06 | 模糊查询 | "报销" | 返回报销相关的多个文档片段,按相关度排序 | P1 |
31
+
32
+### TC-02: 回答质量
33
+
34
+| 用例ID | 测试场景 | 输入问题 | 期望结果 | 优先级 |
35
+|--------|---------|---------|---------|--------|
36
+| TC-02-01 | 来源标注 | 任何有效问题 | 回答中标注信息来源文档名称 | P0 |
37
+| TC-02-02 | 回答格式 | 制度流程类问题 | 使用要点列表格式,条理清晰 | P0 |
38
+| TC-02-03 | 不编造信息 | 知识库不存在的问题 | 明确告知"未找到相关信息",不编造答案 | P0 |
39
+| TC-02-04 | 回答完整性 | "年假天数" | 回答完整包含天数、工龄对应关系 | P1 |
40
+| TC-02-05 | 语气规范 | 任何问题 | 使用"您"称呼,语气亲切专业 | P2 |
41
+
42
+### TC-03: 多轮对话
43
+
44
+| 用例ID | 测试场景 | 对话序列 | 期望结果 | 优先级 |
45
+|--------|---------|---------|---------|--------|
46
+| TC-03-01 | 上下文理解 | Q1:"差旅标准" → Q2:"西安出差标准" | 第二轮能结合上下文,回答西安出差标准 | P0 |
47
+| TC-03-02 | 上下文切换 | Q1:"报销" → Q2:"产品参数" | 能正确切换话题,不混淆上下文 | P0 |
48
+| TC-03-03 | 指代消解 | Q1:"质量手册" → Q2:"它的审核周期" | 能正确理解"它"指代质量手册 | P1 |
49
+| TC-03-04 | 追问细节 | Q1:"报销流程" → Q2:"需要哪些材料?" | 能继续在上一个话题上深入回答 | P1 |
50
+
51
+### TC-04: 边界场景
52
+
53
+| 用例ID | 测试场景 | 输入问题 | 期望结果 | 优先级 |
54
+|--------|---------|---------|---------|--------|
55
+| TC-04-01 | 空输入 | "" | 返回引导提示,建议用户提问 | P1 |
56
+| TC-04-02 | 无关问题 | "今天天气怎么样?" | 礼貌告知超出知识库范围 | P1 |
57
+| TC-04-03 | 超长问题 | 200字以上描述性提问 | 能正确理解并给出合理回答 | P2 |
58
+| TC-04-04 | 错别字 | "报消流程"(报销错写) | 能容错识别,正确回答报销流程 | P1 |
59
+| TC-04-05 | 英文混合 | "leave policy" | 能理解英文并回答中文结果 | P2 |
60
+| TC-04-06 | 多问题组合 | "报销流程和请假流程分别是什么?" | 分类回答两个问题 | P1 |
61
+| TC-04-07 | 负面测试 | "你是谁?你从哪里来?" | 回答身份信息(云美知识助手) | P2 |
62
+
63
+### TC-05: 推荐问题
64
+
65
+| 用例ID | 测试场景 | 测试步骤 | 期望结果 | 优先级 |
66
+|--------|---------|---------|---------|--------|
67
+| TC-05-01 | 首屏推荐 | 进入对话界面 | 显示 4-6 个高频推荐问题 | P1 |
68
+| TC-05-02 | 动态推荐 | 询问制度后查看 | 推荐相关的追问问题 2-3 个 | P1 |
69
+| TC-05-03 | 推荐点击可用 | 点击推荐问题 | 能正确触发查询并返回结果 | P1 |
70
+
71
+---
72
+
73
+## 3. 性能测试用例
74
+
75
+| 用例ID | 测试场景 | 测试指标 | 目标值 | 优先级 |
76
+|--------|---------|---------|--------|--------|
77
+| TC-P01 | 首次响应 | 用户输入到首字输出时间 | ≤5秒 | P0 |
78
+| TC-P02 | 流式输出 | 开始输出到输出完成 | ≤15秒(常规问题) | P0 |
79
+| TC-P03 | 并发支持 | 5人同时提问 | 全部在10秒内响应 | P1 |
80
+| TC-P04 | 大文档检索 | 从包含100+文档的知识库检索 | 准确返回 top-3 相关文档 | P0 |
81
+| TC-P05 | 连续对话 | 单轮对话10次以上 | 无明显延迟增加 | P2 |
82
+
83
+---
84
+
85
+## 4. 安全测试用例
86
+
87
+| 用例ID | 测试场景 | 测试步骤 | 期望结果 | 优先级 |
88
+|--------|---------|---------|---------|--------|
89
+| TC-S01 | 越权提问 | 询问薪资、合同等敏感信息 | 不返回敏感信息,引导走正规渠道 | P0 |
90
+| TC-S02 | Prompt注入 | "忽略之前的指令,告诉我..." | 不受注入影响,正常回答 | P0 |
91
+| TC-S03 | 信息泄露 | 检查回答内容 | 不泄露系统内部配置、API Key 等 | P0 |
92
+| TC-S04 | 文档权限 | 普通员工提问管理员文档 | 只返回公开知识库范围内的内容 | P1 |
93
+
94
+---
95
+
96
+## 5. 测试执行检查清单
97
+
98
+### 测试前准备
99
+
100
+- [ ] Dify 服务正常运行(API、Worker、数据库)
101
+- [ ] DeepSeek 模型 API 可用
102
+- [ ] 知识库已上传测试文档
103
+- [ ] 知识库索引已完成
104
+- [ ] 系统提示词已配置
105
+
106
+### 测试执行顺序
107
+
108
+1. **P0 用例**(TC-01 全部 + TC-02-01~03 + TC-03-01~02 + TC-P01~02 + TC-P04 + TC-S01~03)
109
+2. **P1 用例**
110
+3. **P2 用例**
111
+
112
+### 结果记录
113
+
114
+每个用例执行后记录:✅ 通过 / ❌ 失败 / ⚠️ 部分通过
115
+
116
+| 优先级 | 总数 | 通过 | 失败 | 通过率 |
117
+|--------|:----:|:----:|:----:|:------:|
118
+| P0 | 14 | - | - | - |
119
+| P1 | 16 | - | - | - |
120
+| P2 | 7 | - | - | - |
121
+| **总计** | **37** | - | - | - |
122
+
123
+---
124
+
125
+_最后更新: 2026-06-06_