From 2ae920a7987d4e8f401b9f4f7bf55cb625500edb Mon Sep 17 00:00:00 2001 From: xieke Date: Sat, 6 Jun 2026 06:31:21 +0800 Subject: [PATCH] =?UTF-8?q?feat(M6):=20=E5=BA=94=E7=94=A8=E9=85=8D?= =?UTF-8?q?=E7=BD=AEDSL=E3=80=81=E9=83=A8=E7=BD=B2=E6=8C=87=E5=8D=97?= =?UTF-8?q?=E3=80=81=E9=A1=B9=E7=9B=AEREADME=E3=80=81=E6=9C=80=E7=BB=88?= =?UTF-8?q?=E6=95=B4=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 112 +++++++++++++++ docs/deployment-guide.md | 293 +++++++++++++++++++++++++++++++++++++++ dsl/app-config.yaml | 178 ++++++++++++++++++++++++ tasks.md | 8 +- 4 files changed, 587 insertions(+), 4 deletions(-) create mode 100644 README.md create mode 100644 docs/deployment-guide.md create mode 100644 dsl/app-config.yaml diff --git a/README.md b/README.md new file mode 100644 index 0000000..1f828bb --- /dev/null +++ b/README.md @@ -0,0 +1,112 @@ +# 云美企业知识库 + +> 西安云美电子科技有限公司 - 基于 Dify + DeepSeek 的企业内部知识库 + +## 项目简介 + +本项目为云美电子科技搭建企业内部知识库系统,员工可通过对话式 AI 快速检索公司文档、获取智能问答。基于 **Dify 社区版(Docker 自部署)** + **DeepSeek 大模型** 构建。 + +## 技术栈 + +| 组件 | 说明 | +|------|------| +| Dify | AI 应用开发平台(社区版 Docker 部署) | +| DeepSeek | 大语言模型(deepseek-chat) | +| PostgreSQL | 关系数据库 | +| Redis | 缓存与消息队列 | +| Qdrant | 向量数据库 | +| Nginx | 反向代理 | + +## 项目结构 + +``` +dify-app/ +├── docker/ # Docker 部署配置 +│ ├── docker-compose.yml # 服务编排 +│ ├── .env.example # 环境变量模板 +│ ├── .env.docker # Docker 内部变量 +│ └── README.md # Docker 部署说明 +│ +├── docs/ # 项目文档 +│ ├── knowledge-base-structure.md # 知识库结构设计 +│ ├── performance-baseline.md # 性能基线指标 +│ ├── api-integration.md # API 集成指南 +│ └── deployment-guide.md # 完整部署指南 +│ +├── prompts/ # 提示词 +│ └── system-prompt.md # 系统提示词与对话策略 +│ +├── tests/ # 测试 +│ └── test-cases.md # 功能/安全测试用例 +│ +├── dsl/ # Dify 应用配置 +│ └── app-config.yaml # 应用 DSL 配置模板 +│ +├── tasks.md # 任务清单 +├── .gitignore # Git 忽略规则 +└── README.md # 本文件 +``` + +## 快速开始 + +```bash +# 1. 克隆项目 +git clone http://git.xayunmei.com/yunmei/dify-app.git +cd dify-app +git checkout feature/dev + +# 2. 配置环境变量 +cd docker +cp .env.example .env +# 编辑 .env 填写 SECRET_KEY、数据库密码、DeepSeek API Key + +# 3. 启动服务 +docker compose up -d + +# 4. 访问 +# 浏览器打开 http://<服务器IP>:80 +``` + +详细部署步骤请参考 [部署指南](docs/deployment-guide.md)。 + +## 知识库分类 + +| 分类 | 内容 | +|------|------| +| 📋 公司概况 | 公司简介、组织架构、联系方式 | +| 🔧 产品技术 | 产品手册、技术规范、技术方案 | +| ✅ 质量管理 | 质量体系、检测标准、计量规程 | +| 📄 制度流程 | 管理制度、审批流程、操作规程 | +| 📚 培训学习 | 培训材料、学习资源 | +| 📁 项目档案 | 项目文档、合同模板 | +| ❓ 常见问题 | IT支持、行政事务、售后FAQ | + +## API 文档 + +知识库对话、文档管理等 API 接口文档:[API 集成指南](docs/api-integration.md) + +## 测试 + +功能测试用例(37 个):[测试用例](tests/test-cases.md) + +## Git 分支策略 + +| 分支 | 用途 | +|------|------| +| `main` | 生产发布分支 | +| `feature/dev` | 开发分支(日常开发在此分支) | + +## 相关文档 + +| 文档 | 说明 | +|------|------| +| [知识库结构设计](docs/knowledge-base-structure.md) | 分类体系、分段策略、维护规范 | +| [性能基线指标](docs/performance-baseline.md) | 响应时间、准确率、并发指标 | +| [API 集成指南](docs/api-integration.md) | RESTful API、代码示例 | +| [完整部署指南](docs/deployment-guide.md) | 从服务器到上线的全流程 | +| [系统提示词设计](prompts/system-prompt.md) | 角色定义、回答规范、推荐问题 | +| [Dify 应用配置](dsl/app-config.yaml) | DSL 模板(可导入 Dify) | + +--- + +**西安云美电子科技有限公司** © 2026 diff --git a/docs/deployment-guide.md b/docs/deployment-guide.md new file mode 100644 index 0000000..076811c --- /dev/null +++ b/docs/deployment-guide.md @@ -0,0 +1,293 @@ +# 完整部署指南 + +> 西安云美电子科技有限公司 - 企业知识库 +> 版本:v1.0 | 创建时间:2026-06-06 + +--- + +## 部署架构概览 + +``` + ┌─────────────────────┐ + │ 用户 (浏览器) │ + └──────────┬──────────┘ + │ + ┌──────────▼──────────┐ + │ Nginx (反向代理) │ :80 / :443 + │ SSL 终止 / 负载均衡 │ + └──────────┬──────────┘ + │ + ┌───────────────┼───────────────┐ + │ │ │ + ┌──────▼──────┐ ┌─────▼─────┐ ┌──────▼──────┐ + │ Dify Web │ │ Dify API │ │ SSRF Proxy │ + │ (React SPA) │ │ (Flask) │ │ (Squid) │ + │ :3000 │ │ :5001 │ │ :3128 │ + └─────────────┘ └─────┬─────┘ └─────────────┘ + │ + ┌────────────┼────────────┐ + │ │ │ + ┌──────▼──────┐ ┌──▼────┐ ┌─────▼──────┐ + │ PostgreSQL │ │ Redis │ │ Qdrant │ + │ :5432 │ │ :6379 │ │ :6333 │ + └─────────────┘ └───────┘ └────────────┘ +``` + +--- + +## 第一步:服务器准备 + +### 1.1 系统要求 + +- Ubuntu 22.04 LTS(推荐) +- 最低 4 核 CPU / 8 GB RAM / 50 GB SSD +- 推荐 8 核 CPU / 16 GB RAM / 100 GB SSD + +### 1.2 安装 Docker + +```bash +# 更新系统 +sudo apt update && sudo apt upgrade -y + +# 安装 Docker +curl -fsSL https://get.docker.com | sh + +# 安装 Docker Compose(如未自带) +sudo apt install docker-compose-plugin -y + +# 验证安装 +docker --version +docker compose version + +# 将当前用户加入 docker 组 +sudo usermod -aG docker $USER +# 重新登录生效 +``` + +--- + +## 第二步:部署 Dify + +### 2.1 克隆项目 + +```bash +git clone http://git.xayunmei.com/yunmei/dify-app.git +cd dify-app +git checkout feature/dev +``` + +### 2.2 配置环境变量 + +```bash +cd docker + +# 复制模板 +cp .env.example .env + +# 生成 SECRET_KEY +SECRET_KEY=$(openssl rand -hex 32) +echo "生成的 SECRET_KEY: $SECRET_KEY" + +# 编辑 .env,填入实际值 +nano .env +``` + +**必须修改的配置项**: + +| 变量 | 说明 | 操作 | +|------|------|------| +| `SECRET_KEY` | 安全密钥 | 使用上面生成的值 | +| `POSTGRES_PASSWORD` | 数据库密码 | 设置强密码 | +| `REDIS_PASSWORD` | Redis 密码 | 设置强密码 | +| `DEEPSEEK_API_KEY` | DeepSeek API Key | 从 DeepSeek 平台获取 | + +### 2.3 启动服务 + +```bash +# 拉取镜像 +docker compose pull + +# 启动所有服务 +docker compose up -d + +# 查看状态 +docker compose ps + +# 等待所有服务健康(约 30-60 秒) +docker compose ps --format "table {{.Name}}\t{{.Status}}" +``` + +### 2.4 验证部署 + +```bash +# 检查 API 服务 +curl http://localhost:5001/health + +# 检查 Web 服务 +curl -I http://localhost:80 +``` + +--- + +## 第三步:初始化 Dify + +### 3.1 创建管理员账号 + +1. 浏览器访问 `http://<服务器IP>:80` +2. 首次访问进入设置向导 +3. 填写邮箱和密码,创建管理员账号 +4. 设置管理员姓名 + +### 3.2 配置模型提供者 + +1. 进入 Dify 控制台 +2. 导航到 **设置 → 模型提供者** +3. 添加 **DeepSeek**: + - API Base: `https://api.deepseek.com` + - API Key: 填入实际的 DeepSeek API Key +4. 验证连接成功 + +### 3.3 创建知识库 + +按 `docs/knowledge-base-structure.md` 中的结构创建知识库: + +| 知识库名称 | 说明 | +|-----------|------| +| KB-COMP-公司概况 | 公司简介、组织架构 | +| KB-PROD-产品技术 | 产品手册、技术规范 | +| KB-QUAL-质量管理 | 质量体系、检测标准 | +| KB-RULE-制度流程 | 管理制度、审批流程 | +| KB-TRAIN-培训学习 | 培训材料 | +| KB-PROJ-项目档案 | 项目文档 | +| KB-FAQ-常见问题 | FAQ | + +**每个知识库的分段配置**: +- 分段模式:自动 +- 最大分段长度:500 tokens +- 重叠长度:50 tokens + +### 3.4 上传文档 + +1. 准备各部门的知识库文档(PDF/Word/Markdown) +2. 按分类上传到对应知识库 +3. 等待索引完成 +4. 测试检索效果 + +--- + +## 第四步:配置对话应用 + +### 4.1 创建聊天应用 + +1. Dify 控制台 → **创建应用 → 聊天助手** +2. 应用名称:**云美知识助手** +3. 导入 DSL 配置(可选): + - 应用设置 → 右上角 → **导入 DSL** + - 上传 `dsl/app-config.yaml` +4. 或手动配置(参考 `dsl/app-config.yaml` 中的参数) + +### 4.2 配置提示词 + +复制 `prompts/system-prompt.md` 中的系统提示词到应用配置。 + +### 4.3 关联知识库 + +在应用的「知识库」设置中,关联已创建的所有知识库。 + +### 4.4 配置推荐问题 + +复制 `prompts/system-prompt.md` 中的推荐问题到应用配置。 + +### 4.5 测试应用 + +使用 Dify 内置的调试界面进行测试: + +``` +测试问题1:公司的组织架构是怎样的? +测试问题2:差旅报销的标准和流程是什么? +测试问题3:质量管理体系审核周期是多久? +``` + +对照 `tests/test-cases.md` 执行完整测试。 + +--- + +## 第五步:发布与接入 + +### 5.1 发布应用 + +1. 点击应用右上角 **发布** +2. 选择 **运行环境**(生产环境) +3. 确认发布 + +### 5.2 获取 API Key + +1. 应用 → **访问 API** +2. 创建 API Key +3. 保存 Key(只显示一次) + +### 5.3 接入企业微信(可选) + +参考 `docs/api-integration.md` 中的企业微信集成示例。 + +### 5.4 配置 Nginx SSL(生产环境必做) + +```bash +# 将 SSL 证书放入 nginx/ssl/ 目录 +mkdir -p nginx/ssl + +# 编辑 Nginx 配置,启用 HTTPS +# 修改 .env 中的 NGINX_SSL_PORT +``` + +--- + +## 日常运维 + +### 备份 + +```bash +# 数据库备份(建议设置 cron 每日执行) +docker compose exec db pg_dump -U postgres dify > /backup/dify_$(date +%Y%m%d).sql + +# 向量库备份 +docker compose exec qdrant curl -X POST http://localhost:6333/snapshots +``` + +### 更新 + +```bash +cd docker +docker compose pull +docker compose up -d +``` + +### 监控 + +```bash +# 查看服务状态 +docker compose ps + +# 查看日志 +docker compose logs -f --tail=100 api +docker compose logs -f --tail=100 worker + +# 查看资源占用 +docker stats --no-stream +``` + +--- + +## 故障排查速查 + +| 现象 | 排查命令 | 常见原因 | +|------|---------|---------| +| 页面打不开 | `docker compose ps` | 服务未启动 | +| 模型不回复 | `docker compose logs api` | API Key 无效/过期 | +| 知识库不检索 | `docker compose logs worker` | Worker 异常/索引未完成 | +| 数据库连接失败 | `docker compose logs db` | 密码不一致 | +| 磁盘空间不足 | `df -h` | 日志/数据膨胀 | + +--- + +_最后更新: 2026-06-06_ diff --git a/dsl/app-config.yaml b/dsl/app-config.yaml new file mode 100644 index 0000000..35e0a44 --- /dev/null +++ b/dsl/app-config.yaml @@ -0,0 +1,178 @@ +# Dify Application DSL Configuration +# 西安云美电子科技有限公司 - 企业知识库 +# +# 导入方法:Dify 控制台 → 应用 → 导入 DSL +# 或通过 API:POST /v1/apps/import +# +# 注意:导入前需在 Dify 控制台中配置好 DeepSeek 模型提供者 + +app: + name: 云美知识助手 + description: 西安云美电子科技有限公司企业内部知识库对话助手,帮助员工快速检索公司文档和获取智能问答 + mode: chat + icon: 🤖 + icon_background: "#4F46E5" + +model_config: + # 使用 DeepSeek 模型 + model: + provider: deepseek + name: deepseek-chat + mode: chat + completion_params: + temperature: 0.3 # 低温度,提高回答准确性 + top_p: 0.8 + max_tokens: 2048 + presence_penalty: 0.0 + frequency_penalty: 0.0 + + # 知识库检索配置 + retriever_resource: + enabled: true + query_variable: query + + # 知识库引用 + dataset_query_variable: query + + # 提示词配置 + prompt_template: + - id: system-prompt + role: system + template: | + 你是"云美知识助手",西安云美电子科技有限公司的内部 AI 助手。你的职责是帮助员工快速、准确地从公司知识库中检索信息并回答问题。 + + ## 身份与职责 + + - 你是云美电子科技的企业知识库助手 + - 你负责帮助员工查找公司制度、产品技术、质量管理、培训资料等各类文档信息 + - 你的回答必须基于知识库中的实际内容,不编造信息 + + ## 回答规范 + + 1. **基于事实**:所有回答必须基于知识库文档中的内容,不得凭空编造或猜测 + 2. **标注来源**:回答时请注明信息来源的文档名称或分类(如"根据《XX产品手册》...") + 3. **简洁清晰**:回答要直接、有条理,使用要点列表格式,避免冗长 + 4. **分类引导**:如果用户的问题涉及多个知识库分类,请分类回答 + 5. **不确定时说明**:如果知识库中没有相关信息,请明确告知用户"当前知识库中未找到相关信息",并建议联系对应部门 + + ## 知识库分类参考 + + - 📋 **公司概况**:公司简介、组织架构、联系方式 + - 🔧 **产品技术**:产品手册、技术规范、技术方案 + - ✅ **质量管理**:质量体系、检测标准、计量规程 + - 📄 **制度流程**:管理制度、审批流程、操作规程 + - 📚 **培训学习**:培训材料、学习资源 + - 📁 **项目档案**:项目文档、合同模板 + - ❓ **常见问题**:IT支持、行政事务、售后FAQ + + ## 语气与风格 + + - 亲切但不随意,专业但不生硬 + - 使用"您"称呼 + - 适当使用 Emoji 增加可读性 + - 回答控制在合理长度,避免大段文字堆砌 + + - id: user-query + role: user + template: "{{query}}" + + # 知识库设置 + dataset_configs: + # 参考的知识库列表(导入后需关联实际知识库) + datasets: + - name: KB-COMP-公司概况 + description: 公司简介、组织架构、发展历程 + - name: KB-PROD-产品技术 + description: 产品手册、技术规范、研发文档 + - name: KB-QUAL-质量管理 + description: 质量体系、检测标准、计量规程 + - name: KB-RULE-制度流程 + description: 管理制度、审批流程、操作规程 + - name: KB-TRAIN-培训学习 + description: 培训材料、学习资源 + - name: KB-PROJ-项目档案 + description: 项目文档、合同模板 + - name: KB-FAQ-常见问题 + description: IT支持、行政事务、售后FAQ + + # 检索参数 + retrieval_model: vector # vector / keyword / hybrid + top_k: 5 # 检索返回的文档段落数 + score_threshold: 0.5 # 相关性分数阈值 + reranking_model: "" # 预留重排序模型(可选) + + # 对话配置 + conversation: + # 开场白 + opening_statement: | + 👋 您好!我是**云美知识助手**,可以帮您查找公司各类文档和信息。 + + 您可以直接提问,例如: + - "差旅报销的流程是什么?" + - "XX产品的技术参数是什么?" + - "质量管理体系的审核周期是多久?" + + 请问有什么可以帮您? + + # 推荐问题 + suggested_questions: + - 公司的组织架构是怎样的? + - 差旅报销的标准和流程是什么? + - 主要产品的技术参数在哪里可以查到? + - 质量管理体系文件如何获取? + - 新员工入职培训需要了解什么? + - IT 系统使用有问题怎么办? + + # 下一步问题建议 + suggested_questions_after_answer: + enabled: true + + # 对话历史轮数 + context_count: 10 + + # 功能配置 + features: + # 文件上传(允许用户上传文件辅助提问) + file_upload: + image: + enabled: true + allowed_extensions: + - jpg + - jpeg + - png + - gif + - webp + max_size_mb: 10 + document: + enabled: false + + # 对话标题自动生成 + conversation_title_auto_generate: true + + # 敏感词过滤 + sensitive_word_avoidance: + enabled: true + type: "keyword" # keyword / regex + config: + - "密码" + - "薪资" + - "工资" + - "薪资标准" + canned_response: "抱歉,该问题涉及敏感信息,请通过正规渠道查询。" + + # Token 限制 + token_limit: + enabled: true + max_input_tokens: 3000 + max_output_tokens: 2048 + + # 引用展示 + citation: + enabled: true + position: "end" # start / end + +# 环境变量引用说明 +# 导入 DSL 后,需要在 Dify 控制台手动配置以下内容: +# 1. 模型提供者:添加 DeepSeek API Key +# 2. 关联知识库:将 datasets 列表中的知识库关联到实际创建的知识库 +# 3. 确认提示词:检查 system-prompt 是否正确加载 diff --git a/tasks.md b/tasks.md index 78f6938..386cfd8 100644 --- a/tasks.md +++ b/tasks.md @@ -48,10 +48,10 @@ ## M6: 应用配置导出与最终整理 -- [ ] M6.1.1 编写 `dsl/app-config.yaml`(Dify 应用 DSL 配置模板) -- [ ] M6.1.2 编写 `docs/deployment-guide.md`(完整部署指南) -- [ ] M6.1.3 创建项目 README.md -- [ ] M6.1.4 整理最终目录结构,确保所有文件就绪 +- [x] M6.1.1 编写 `dsl/app-config.yaml`(Dify 应用 DSL 配置模板) +- [x] M6.1.2 编写 `docs/deployment-guide.md`(完整部署指南) +- [x] M6.1.3 创建项目 README.md +- [x] M6.1.4 整理最终目录结构,确保所有文件就绪 - [ ] M6.1.5 创建最终 Tag(v1.0.0) ---