chore(docs): docs/ 目录全面重新编号 + 重组
**重构前**(旧编号 02-11): - docs/02-产品需求/ → 00 产品规划/PRD - docs/03-技术架构/ → 01-05 子目录散落 - docs/04-原型设计/ → 01-02 产品设计(HTML 原型) - docs/05-原型设计/ → screens/ - docs/06-测试素材/ → 02-E2E / 03-功能 / 04-版本测试 - docs/07-项目管理/ → 任务说明书/日报/计划 - docs/08-安全审计/ → 审计报告 - docs/09-堡垒运维/ → toolbox / deploy - docs/10-项目管理/ → 任务说明书(重复) - docs/11-历史归档/ → deploy-nas-archived **重构后**(新编号 00-07,语义化): - docs/00-产品开发流程与文档管理规范.md - docs/00-版本迭代总览.md - docs/01-产品文档/ (PRD/原型/认证/会话/AI 服务/坐席/集成) - docs/02-技术文档/ (技术方案/架构图/重构记录/前端改造/实现配置) - docs/03-测试文档/ (E2E/功能用例/版本报告/缺陷单) - docs/04-运维文档/ (部署运维/运维指南) - docs/05-运营文档/ (品牌推广/用户手册) - docs/06-安全审计/ (审计报告) - docs/07-项目管理/ (任务说明书/日报/计划/看板) **净收益**: - 目录编号与产品文档管理规范对齐(按文档阶段 01-07 编号) - 消除 02-产品需求 与 10-项目管理 的编号重叠 - 子目录按文档类型分组(如 01-产品文档/00-产品规划、01-产品文档/01-认证与登录) - 把运维/安全/项目管理从 0X 散落改为 04/06/07 合计 494 文件 + 78495 行 / - 14076 行
This commit is contained in:
@@ -0,0 +1,814 @@
|
||||
# AI 对话链路全栈改造实施计划
|
||||
|
||||
> **版本**: v1.2
|
||||
> **日期**: 2026-07-24
|
||||
> **作者**: 宋献 (Simon) + Duckula
|
||||
> **状态**: ✅ 已实施并部署(Phase 1-6 全部完成,2026-07-13 01:38 生产部署)
|
||||
|
||||
---
|
||||
|
||||
## 部署记录
|
||||
|
||||
### 2026-07-13 01:38 生产部署(v5)
|
||||
|
||||
| 组件 | 版本 | 部署内容 | 验证 |
|
||||
|------|------|---------|------|
|
||||
| **后端** | v5 | 6 个 Python 文件部署到 `/opt/wecom-it-desk/app/` | `docker compose restart backend` → healthy ✅ |
|
||||
| **H5 前端** | v4 | dist 部署到 `/opt/wecom-it-desk/frontend-h5/dist/` | JS hash `index-B6dzwk-X.js` ✅ |
|
||||
| **Agent 前端** | v5 | dist 部署到 `/opt/wecom-it-desk/frontend-agent/dist/` | JS hash `index-2BTn4SZz.js` ✅ |
|
||||
| **Nginx** | - | `nginx -s reload` | healthy ✅ |
|
||||
|
||||
**后端变更文件清单**(旧文件备份在 `/tmp/backend_bak_v5/`):
|
||||
|
||||
| 文件 | 变更内容 |
|
||||
|------|---------|
|
||||
| `app/tasks/h5_ai_task.py` | VisionService 接入 + 图片消息融合 + ai_thinking 双推 + diagnosis_stage 存储 |
|
||||
| `app/api/h5.py` | `process_h5_ai_reply()` 调用新增 `msg_type` + `media_url` 参数 |
|
||||
| `app/services/ai_service.py` | `get_structured_reply()` blocking 模式 + JSON 解析 + `response_time_ms` 计时 + 慢响应告警 |
|
||||
| `app/services/closing_service.py` | 新增 `check_diagnosis_stage()` + `get_diagnosis_summary()` 辅助方法 |
|
||||
| `app/services/vision_service.py` | 已有实现,本次接入主链路 |
|
||||
| `app/api/websocket.py` | `ai_thinking` 同时推员工和坐席 + `dynamic_recommend` 推送 |
|
||||
|
||||
**前端变更文件清单**:
|
||||
|
||||
| 前端 | 文件 | 变更内容 |
|
||||
|------|------|---------|
|
||||
| H5 | `MessageBubble.vue` | 新增 `ai_structured` 渲染分支(文字 + 选项按钮 + 脉冲动画) |
|
||||
| H5 | `DynamicRecommend.vue` | **新建** — 右边栏动态推荐卡片(3 种类型 approval/action/info) |
|
||||
| H5 | `RightPanel.vue` | 重写为 v2 手风琴布局(设备信息 / 自助诊断 / 底部标签页) |
|
||||
| H5 | `useH5WebSocket.ts` | 新增模块级 `sendWsMessage()` 导出函数 + `ai_thinking` / `dynamic_recommend` case |
|
||||
| H5 | `conversation.ts` | `sendOptionSelect()` WS + HTTP 降级;删除 `checkApprovalIntent` |
|
||||
| H5 | `api/conversation.ts` | `MsgContentType` 新增 `'ai_structured'` |
|
||||
| Agent | `MessageBubble.vue` | 新增 `ai_structured` 只读渲染 + `byod_card` 渲染分支 |
|
||||
| Agent | `ChatArea.vue` | 新增 AI 思考指示器 UI(脉冲动画) |
|
||||
| Agent | `useWebSocket.ts` | 新增 `ai_thinking` case |
|
||||
| Agent | `conversation.ts` | 新增 `aiThinkingConversations` + `handleAiThinking()` + `handleNewMessage` 透传修复 |
|
||||
|
||||
**部署方式**:通过 `v2_ops.py`(jumpserver-V2 技能)JumpServer REST API + plink PTY 执行
|
||||
|
||||
**验证结果**:
|
||||
- 5 个容器全部 healthy(backend / nginx / redis / neo4j / postgres)
|
||||
- 后端 `/health` 返回 200
|
||||
- 后端日志正常(调度任务运行,无报错)
|
||||
- H5 / Agent 前端新 JS hash 已就位
|
||||
|
||||
---
|
||||
|
||||
## 一、背景与目标
|
||||
|
||||
### 1.1 改造背景
|
||||
|
||||
当前 IT 智能服务台存在以下核心问题:
|
||||
|
||||
1. **Dify 工作流臃肿**:85 个节点,推理延迟高,维护困难
|
||||
2. **审批意图识别质量差**:回复太快、无关触发、精度低、准确率低
|
||||
3. **卡片与文字"两张皮"**:审批卡片由前端异步独立推送,与 AI 文字回复无关联、时间不同步
|
||||
4. **图片消息处理缺失**:`VisionService` 完整实现但零调用,员工发图片 AI "失明"
|
||||
5. **右边栏布局分散**:自助诊断、软件下载、资源申请三个独立模块,无动态推荐区
|
||||
|
||||
### 1.2 改造目标
|
||||
|
||||
| 目标 | 衡量标准 |
|
||||
|------|---------|
|
||||
| Dify 节点精简 | 85 → ~35 节点,推理延迟降低 40%+ |
|
||||
| 审批意图准确率 | 误触发率从 ~60% 降至 ~15% |
|
||||
| 卡片与文字融合 | 同一次推理、同一时刻到达、语义强关联 |
|
||||
| 图片消息可用 | 员工发截图 → AI 能"看懂"并回复 |
|
||||
| 右边栏统一 | 手风琴折叠 + 智能推荐默认页 |
|
||||
|
||||
---
|
||||
|
||||
## 二、当前架构分析
|
||||
|
||||
### 2.1 当前消息流:两条平行轨道
|
||||
|
||||
```
|
||||
┌─ 通道 A(审批卡片)──────────────────────────────────┐
|
||||
│ 前端 checkApprovalIntent() │
|
||||
│ → POST /approval/detect-intent │
|
||||
│ → Dify 意图识别 (blocking, 同一个 Dify 应用) │
|
||||
│ → 前端 messages.value.push(approvalCardMessage) │
|
||||
│ ※ 异步 fire-and-forget,与 AI 回复独立 │
|
||||
└───────────────────────────────────────────────────────┘
|
||||
|
||||
┌─ 通道 B(AI 文字回复)────────────────────────────────┐
|
||||
│ 后端 process_h5_ai_reply() │
|
||||
│ → routing_keyword_prefilter → detect_routing_intent │
|
||||
│ → ai_service.get_reply_stream() │
|
||||
│ → Dify 主对话应用 (streaming, dify2openai 代理) │
|
||||
│ → WS: ai_reply_chunk → ai_reply │
|
||||
│ ※ 前端逐字渲染,与卡片无关联 │
|
||||
└───────────────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
**问题**:两条通道各自调用 Dify,结果可能矛盾;卡片随机插入聊天流,打断阅读节奏。
|
||||
|
||||
### 2.2 关键代码位置
|
||||
|
||||
| 模块 | 文件路径 | 关键行号 | 说明 |
|
||||
|------|---------|---------|------|
|
||||
| 后端消息处理 | `backend/app/tasks/h5_ai_task.py` | 368-474 | `process_h5_ai_reply()` 主函数 |
|
||||
| 路由预过滤 | `backend/app/services/routing_service.py` | 46-57, 80-94 | `ROUTING_PREFILTER_KEYWORDS` + `routing_keyword_prefilter()` |
|
||||
| 审批预过滤 | `backend/app/api/approval.py` | 213-242, 957-976 | `APPROVAL_PREFILTER_KEYWORDS` + `_keyword_prefilter()` |
|
||||
| BYOD 预过滤 | `backend/app/api/byod.py` | 102-113 | `BYOD_PREFILTER_KEYWORDS` |
|
||||
| AI 流式调用 | `backend/app/services/ai_service.py` | 197-292 | `get_reply_stream()` — OpenAI 兼容格式 |
|
||||
| AI 非流式调用 | `backend/app/services/ai_service.py` | 83-192 | `get_reply()` — 降级用 |
|
||||
| AI 处理器 | `backend/app/services/ai_handler.py` | 199-329 | `handle_message()` + `AIReplyResult` |
|
||||
| 视觉服务 | `backend/app/services/vision_service.py` | 全文件 | 完整实现但零调用 |
|
||||
| RAGFlow 客户端 | `backend/app/integrations/ragflow/client.py` | 全文件 | 完整实现但未接入主链路 |
|
||||
| RAGFlow 旧客户端 | `backend/app/core/clients/ragflow.py` | 全文件 | 依赖未配置环境变量 |
|
||||
| 前端审批检测 | `frontend-h5/src/stores/conversation.ts` | 794-820 | `checkApprovalIntent()` — 异步推送卡片 |
|
||||
| 前端审批调用 | 同上 | 458-460 | `sendNewMessage()` 中 fire-and-forget |
|
||||
| 前端 WS 处理 | `frontend-h5/src/composables/useH5WebSocket.ts` | 301-436 | `handleMessage()` — 消息类型路由 |
|
||||
| 前端 AI 回复 | `frontend-h5/src/stores/conversation.ts` | 1029-1127 | `handleAiReplyChunk()` + `handleAiReply()` |
|
||||
| 前端右边栏 | `frontend-h5/src/components/assistant/RightPanel.vue` | 15-77 | 模板结构 |
|
||||
| Dify 意图 Prompt | `docs/02-产品需求/dify_unified_intent_prompt_v3.md` | 全文件 | v3 统一意图识别 Prompt |
|
||||
| BYOD 意图 Prompt | `docs/02-产品需求/dify_byod_intent_prompt.md` | 全文件 | BYOD 意图扩展 |
|
||||
|
||||
### 2.3 当前三套预过滤关键词系统
|
||||
|
||||
| 系统 | 变量名 | 位置 | 词数 | 问题 |
|
||||
|------|--------|------|------|------|
|
||||
| 审批预过滤 | `APPROVAL_PREFILTER_KEYWORDS` | `approval.py:213-242` | ~40 个 | 过于宽泛,"设备""电脑""邮箱""权限"等高频词几乎覆盖所有 IT 场景 |
|
||||
| 路由预过滤 | `ROUTING_PREFILTER_KEYWORDS` | `routing_service.py:46-57` | ~22 个 | 合理,仅非 IT 业务词 |
|
||||
| BYOD 预过滤 | `BYOD_PREFILTER_KEYWORDS` | `byod.py:102-113` | ~10 个 | 合理,仅 BYOD 专用词 |
|
||||
|
||||
### 2.4 两套 Dify API 调用模式
|
||||
|
||||
| 维度 | AI 回复 (ai_service.py) | 意图识别 (approval.py / routing_service.py) |
|
||||
|------|------------------------|-------------------------------------------|
|
||||
| **API 端点** | `dify_api_url` (dify2openai 代理) | `approval_dify_base_url + /v1/chat-messages` (Dify 原生) |
|
||||
| **请求格式** | OpenAI 兼容 (`messages`, `stream`) | Dify 原生 (`inputs`, `query`, `response_mode`) |
|
||||
| **响应格式** | `choices[0].delta.content` (SSE) | `answer` 字段含 JSON 字符串 |
|
||||
| **流式** | 是 | 否 (blocking) |
|
||||
| **用途** | IT 知识库问答 | 审批/路由意图分类 |
|
||||
| **配置** | `dify_api_url`, `dify_api_key` | `approval_dify_base_url`, `approval_dify_api_key` |
|
||||
|
||||
---
|
||||
|
||||
## 三、差距分析(11 项)
|
||||
|
||||
### 3.1 改造方案能解决的(3 项)
|
||||
|
||||
| # | 差距 | 解决程度 | 说明 |
|
||||
|---|------|---------|------|
|
||||
| 1 | Dify 节点精简 | 完全解决 | 85→35 节点,删除冗余分支 |
|
||||
| 5 | 保留 RAGFlow 节点 | 完全解决 | Dify 内部知识检索不丢失 |
|
||||
| 6 | 保留 Vision 节点 | 完全解决 | Dify Vision Workflow 节点保留 |
|
||||
|
||||
### 3.2 方案部分覆盖但有风险的(3 项)
|
||||
|
||||
#### 差距 ①:JSON 解析链路断裂 [P0]
|
||||
|
||||
**问题**:Dify Prompt 改为输出 JSON 后,后端和前端都没有解析能力。
|
||||
|
||||
- `ai_service.py:232-263` — `get_reply_stream()` 把 `choices[0].delta.content` 作为纯文本逐 chunk 透传
|
||||
- `ai_handler.py:278-282` — `handle_message()` 把 `ai_result["content"]` 直接放入 `AIReplyResult.content`
|
||||
- `conversation.ts:1029-1054` — `handleAiReplyChunk()` 直接将 `data.chunk` 追加到 `content` 字段
|
||||
- `MessageBubble.vue` — 对 `msg_type === 'text'` 用 `white-space: pre-wrap` 纯文本渲染
|
||||
|
||||
**需要补的**:全链路结构化改造——Dify 输出 JSON → 后端解析提取 → WS 推送结构化消息 → 前端新增渲染组件。
|
||||
|
||||
#### 差距 ②:Dify 不支持图片输入 [P1]
|
||||
|
||||
**问题**:`ai_service.py:217-226` 的 payload 用 OpenAI 兼容格式,`content` 只接受字符串,不能传图片。
|
||||
|
||||
**正确路径**:图片 → `VisionService.analyze_screenshot()` 预分析 → 生成文字描述 → 拼接到 Dify 文本输入中。
|
||||
|
||||
#### 差距 ③:消息融合的边界场景 [P2]
|
||||
|
||||
**问题**:
|
||||
- 超时风险:用户发图后思考 10 秒再打字,5 秒窗口已关闭
|
||||
- 多图处理:连续发 3 张截图 + 一段文字,合并还是分别处理?
|
||||
- 乱序到达:文字先到、图片后到
|
||||
- 窗口内多条文字:多条短消息需要合并
|
||||
|
||||
### 3.3 方案完全未涉及的(5 项)
|
||||
|
||||
#### 差距 ④:VisionService 完整实现但零调用 [P0]
|
||||
|
||||
**问题**:`vision_service.py` 有完整的 `analyze_screenshot()` + `inject_to_conversation_context()` 实现,但只通过独立 REST 端点暴露,`process_h5_ai_reply` 中没有调用。
|
||||
|
||||
员工发图片 → 不触发视觉分析 → Dify 只收到空文字 → AI 回复"请问您遇到了什么问题?"
|
||||
|
||||
**需要补的**:在 `process_h5_ai_reply` 中增加图片分支——检测到图片 → 调 `VisionService.analyze_screenshot()` → 描述拼接到用户文字中 → 传给 Dify。
|
||||
|
||||
#### 差距 ⑤:选项回传链路 [P1]
|
||||
|
||||
**问题**:AI 回复包含选项按钮,用户点击后无链路回传。
|
||||
|
||||
- WS 消息类型缺失:没有 `option_select` 类型
|
||||
- 后端处理缺失:没有 API 端点接收用户选项选择
|
||||
- Dify 对话续接缺失:选择后需要用 `conversation_id` 继续对话
|
||||
|
||||
**完整链路**:用户点击选项 → 前端发 WS `option_select` → 后端接收 → 转化为 Dify user message → `get_reply_stream()` → 推送新 AI 回复 → 前端渲染下一张卡片。
|
||||
|
||||
#### 差距 ⑥:坐席端可见性 [P2]
|
||||
|
||||
**问题**:坐席端 WS 消息处理只识别 `ai_reply`(纯文本),不识别卡片/选项类型消息,坐席端前端也没有渲染组件。
|
||||
|
||||
#### 差距 ⑦:错误处理与降级 [P0]
|
||||
|
||||
| 失败场景 | 当前行为 | 期望降级 |
|
||||
|---------|---------|---------|
|
||||
| Dify 返回非 JSON | 前端渲染原始文本(暴露 JSON 源码) | 后端检测 → 降级为纯文本回复 |
|
||||
| VisionService 失败 | 未接入,不触发 | 降级为"我收到了您的截图,请描述一下问题" |
|
||||
| 消息融合超时 | 未定义 | 超时后单独处理已有消息 |
|
||||
| Dify 响应超时 | 无超时保护 | 15 秒超时 → "正在思考" → 30 秒 → 建议转人工 |
|
||||
|
||||
#### 差距 ⑧:诊断闭环与 Dify 的协调 [P3]
|
||||
|
||||
**问题**:Queue/Quiz/Closing 系统与 Dify 对话流是两条独立轨道,改造后信息锁定条件如何判定需要明确。
|
||||
|
||||
---
|
||||
|
||||
## 四、审批意图识别问题分析(4 问题 + 3 根因)
|
||||
|
||||
### 4.1 四个问题的根因
|
||||
|
||||
#### 问题 1:「回复太快了」
|
||||
|
||||
**根因**:审批卡片推送走前端异步 fire-and-forget 路径。
|
||||
|
||||
```typescript
|
||||
// conversation.ts:458-460
|
||||
checkApprovalIntent(content).catch(...) // 异步触发,不等待
|
||||
```
|
||||
|
||||
Dify 意图识别返回后(3-15 秒),卡片突然插入消息流中,与正在流式输出的 AI 回复交错出现。无任何确认步骤。
|
||||
|
||||
#### 问题 2:「无关性」
|
||||
|
||||
**根因**:`APPROVAL_PREFILTER_KEYWORDS`(`approval.py:213-242`)有 ~40 个词,包含"设备""电脑""邮箱""权限""软件""报修"等高频 IT 词,几乎覆盖所有 IT 相关消息。
|
||||
|
||||
例如员工说"我的邮箱登不上"——命中"邮箱" → 触发 Dify 意图识别 → 可能误判为"公共邮箱账号申请" → 推送审批卡片。
|
||||
|
||||
#### 问题 3:「精度差」
|
||||
|
||||
**根因**:一次性判断 12 种审批类型,无层级分类。LLM 容易混淆相似类型("会议室故障报修" vs "员工IT支持与故障报修")。且每次只看单条消息,不看对话历史。
|
||||
|
||||
#### 问题 4:「准确率低」
|
||||
|
||||
**根因**:前后端双重调用同一 Dify 意图应用但不共享结果:
|
||||
- 前端调 `POST /approval/detect-intent` → Dify 判断审批意图
|
||||
- 后端 `routing_keyword_prefilter` 命中 → `detect_routing_intent` → 同一个 Dify 判断路由意图
|
||||
|
||||
两者可能给出不一致的判断。
|
||||
|
||||
### 4.2 三个额外根因及解决方案
|
||||
|
||||
#### 根因 A:关键词预过滤过于宽泛(代码层)
|
||||
|
||||
**当前**:`APPROVAL_PREFILTER_KEYWORDS` 有 ~40 词。
|
||||
|
||||
**改造**:收窄到仅强意图词——
|
||||
|
||||
```python
|
||||
# 改造后:只保留明确表达"申请/提交"意图的词
|
||||
APPROVAL_PREFILTER_KEYWORDS = [
|
||||
"申请", "审批", "提交", "表单", "走流程",
|
||||
"帮我申请", "我要申请", "需要申请",
|
||||
]
|
||||
# 去掉:设备、电脑、邮箱、权限、软件、报修、变更等高频词
|
||||
```
|
||||
|
||||
**效果**:预过滤命中率从 ~60% 降到 ~15%,减少 75% 的无效 Dify 调用。
|
||||
|
||||
#### 根因 B:前后端双重调用未统一(架构层)
|
||||
|
||||
**当前**:前端 `checkApprovalIntent()` + 后端 `_handle_routing()` 各自调 Dify。
|
||||
|
||||
**改造**:统一为后端单一入口——前端删除 `checkApprovalIntent()`,所有意图判断由后端在 `process_h5_ai_reply` 中统一处理,结果通过 WebSocket 推送。
|
||||
|
||||
#### 根因 C:12 种审批类型一次性分类(Prompt 层)
|
||||
|
||||
**当前**:Dify 意图识别 Prompt 要求 LLM 一次性从 12 种类型中选择。
|
||||
|
||||
**改造**:改为两级分类——
|
||||
|
||||
```
|
||||
第一级(粗分,4类):
|
||||
- 设备类(设备申请/资产变更/资产处置)
|
||||
- 账号权限类(账号权限/VPN/公共邮箱)
|
||||
- 软件应用类(软件服务/企业应用管理)
|
||||
- 服务支持类(故障报修/会议室/活动支持)
|
||||
|
||||
第二级(细分,仅当第一级命中后触发):
|
||||
- 在粗分结果范围内做精确匹配
|
||||
- 配合 few-shot examples 强化边界
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 五、统一消息架构设计
|
||||
|
||||
### 5.1 核心设计:一次推理,双通道交付
|
||||
|
||||
```
|
||||
用户消息 → 后端 process_h5_ai_reply()
|
||||
│
|
||||
├─ 1. 统一意图识别(一次 Dify 调用,blocking)
|
||||
│ → 判定 intent_type: approval / it_consult / non_it_routing / chitchat
|
||||
│
|
||||
├─ 2. 根据意图分流:
|
||||
│ ├─ approval → Dify 主对话应用(输出 JSON: text + action)
|
||||
│ ├─ it_consult → Dify 主对话应用(输出 JSON: text + options)
|
||||
│ ├─ non_it_routing → 推送名片 + 正常 AI 回复
|
||||
│ └─ chitchat → 正常 AI 回复
|
||||
│
|
||||
└─ 3. 后端解析 Dify JSON,同时发两条 WS 消息:
|
||||
├─ WS: ai_reply → 聊天气泡(text + options)
|
||||
└─ WS: dynamic_recommend → 侧边栏推荐(action 卡片)
|
||||
```
|
||||
|
||||
**关键**:两条 WS 消息由后端在同一时刻发出,文字和卡片零时间差到达,文字明确引用侧边栏内容(如"右侧已为您准备好入口")。
|
||||
|
||||
### 5.2 Dify JSON 输出格式
|
||||
|
||||
#### 场景 1:审批意图(文字 + 卡片推荐)
|
||||
|
||||
```json
|
||||
{
|
||||
"text": "您想申请 VPN 账号?点击右侧卡片快速提交,一般 1-2 个工作日审批完成。",
|
||||
"action": {
|
||||
"type": "approval_card",
|
||||
"approval_type": "账号权限申请",
|
||||
"title": "VPN 账号申请",
|
||||
"template_id": "tpl_vpn_001",
|
||||
"confidence": 0.92
|
||||
},
|
||||
"options": null
|
||||
}
|
||||
```
|
||||
|
||||
#### 场景 2:交互式排查(文字 + 选项)
|
||||
|
||||
```json
|
||||
{
|
||||
"text": "电脑蓝屏了?我来帮您排查。蓝屏时有错误代码吗?",
|
||||
"action": null,
|
||||
"options": [
|
||||
{"label": "有错误代码", "value": "has_code"},
|
||||
{"label": "没有", "value": "no_code"},
|
||||
{"label": "不确定", "value": "unsure"}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
#### 场景 3:纯文字回复
|
||||
|
||||
```json
|
||||
{
|
||||
"text": "好的,VPN 账号一般 1-2 个工作日审批完成,届时会通过企微通知您。",
|
||||
"action": null,
|
||||
"options": null
|
||||
}
|
||||
```
|
||||
|
||||
### 5.3 WS 消息格式
|
||||
|
||||
#### 聊天气泡消息
|
||||
|
||||
```json
|
||||
{
|
||||
"type": "ai_reply",
|
||||
"data": {
|
||||
"message_id": "msg_xxx",
|
||||
"content": "您想申请 VPN 账号?点击右侧卡片快速提交...",
|
||||
"msg_type": "ai_structured",
|
||||
"extra_data": {
|
||||
"options": [
|
||||
{"label": "有错误代码", "value": "has_code"}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
#### 侧边栏推荐消息
|
||||
|
||||
```json
|
||||
{
|
||||
"type": "dynamic_recommend",
|
||||
"data": {
|
||||
"recommend_id": "rec_xxx",
|
||||
"card_type": "approval_card",
|
||||
"title": "VPN 账号申请",
|
||||
"description": "1-2 个工作日审批完成",
|
||||
"action": {
|
||||
"type": "approval_card",
|
||||
"approval_type": "账号权限申请",
|
||||
"template_id": "tpl_vpn_001"
|
||||
},
|
||||
"confidence": 0.92
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 5.4 流式 vs 阻塞决策
|
||||
|
||||
| 方案 | 用户体验 | 实现复杂度 | 延迟感知 |
|
||||
|------|---------|-----------|---------|
|
||||
| A. 全阻塞 | 等 3-8 秒 → 文字+卡片同时出现 | 最简单 | 有等待感 |
|
||||
| **B. 阻塞 + 思考指示(推荐)** | 立即显示"正在思考..." → 3-8 秒后同时出现 | 简单 | 等待感降低 |
|
||||
| C. 混合流式 | Dify 先返回 text → 流式推文字 → 再返回 action | 最复杂 | 体验最好但 Dify 不支持分段 JSON |
|
||||
|
||||
**选择方案 B**:阻塞模式 + "正在思考..."指示。理由:
|
||||
1. 改造后消息变短,3-8 秒等待可接受
|
||||
2. 文字和卡片同时出现,满足"发送时间一致"
|
||||
3. 实现最简单,不需要改 Dify 的流式机制
|
||||
4. 之前审批意图独立调 Dify 也是 blocking 模式,用户已习惯
|
||||
|
||||
### 5.5 图片消息处理路径
|
||||
|
||||
```
|
||||
员工发图片 (msg_type=image)
|
||||
│
|
||||
├─ 1. 后端 process_h5_ai_reply 检测到 msg_type=image
|
||||
│
|
||||
├─ 2. 调用 VisionService.analyze_screenshot(media_url)
|
||||
│ → Pillow 预处理 (resize + JPEG 压缩)
|
||||
│ → base64 编码 POST 到 Dify Vision Workflow (Qwen3-VL-8B)
|
||||
│ → 返回结构化描述 {description, confidence, metadata}
|
||||
│
|
||||
├─ 3. 将描述作为上下文前缀拼接到用户文字中:
|
||||
│ "[图片分析] 用户发送了一张截图,内容为:{description}\n用户消息:{text}"
|
||||
│
|
||||
└─ 4. 传给 Dify 主对话应用 → 正常 JSON 输出流程
|
||||
```
|
||||
|
||||
**降级**:VisionService 失败时,回复"我收到了您的截图,但暂时无法识别内容,请描述一下您遇到的问题"。
|
||||
|
||||
### 5.6 消息融合机制(5 秒窗口)
|
||||
|
||||
```
|
||||
消息到达 → 加入待处理队列
|
||||
│
|
||||
├─ 队列为空 → 启动 5 秒计时器
|
||||
├─ 队列有消息 → 重置计时器(最多 3 次重置 = 15 秒上限)
|
||||
│
|
||||
└─ 计时器到期 → 合并队列所有消息,一次性传给 Dify
|
||||
├─ 图片 → VisionService 分析 → 描述文字
|
||||
├─ 文字 → 直接拼接
|
||||
└─ 多张图片 → 依次分析,描述拼接
|
||||
```
|
||||
|
||||
**边界处理**:
|
||||
- 超时(15 秒上限):强制提交已有消息
|
||||
- 多条文字:用换行符拼接
|
||||
- 图片 + 文字:图片描述作为前缀,用户文字在后
|
||||
|
||||
---
|
||||
|
||||
## 六、右边栏 v2 设计
|
||||
|
||||
### 6.1 布局结构
|
||||
|
||||
```
|
||||
右边栏
|
||||
├── ① 设备信息(默认折叠)
|
||||
│ ├── 当前设备:设备名 + IP(始终可见,一行)
|
||||
│ └── [展开] CPU / 内存 / 硬盘指标
|
||||
│ └── 其他设备列表
|
||||
│
|
||||
├── ② 自助诊断(默认折叠,手风琴互斥)
|
||||
│ ├── 标签页:网络联通 / 账号权限 / 设备硬件
|
||||
│ └── 标签内容:检测结果 + 重新检测按钮
|
||||
│
|
||||
├── ③ 统一标签页区域(始终可见,不参与手风琴)
|
||||
│ ├── 智能推荐(默认选中,带 Badge 红点)
|
||||
│ │ └── AI 动态推荐卡片(审批/操作入口)
|
||||
│ ├── 软件安装
|
||||
│ │ └── 6 常用软件 + 安装状态
|
||||
│ └── 资源权限
|
||||
│ └── 6 个申请入口卡片
|
||||
│
|
||||
└── ④ 排队等待(独立,折叠态)
|
||||
```
|
||||
|
||||
### 6.2 手风琴交互逻辑
|
||||
|
||||
| 区域 | 默认状态 | 交互行为 |
|
||||
|------|---------|---------|
|
||||
| 设备信息 | 折叠(CPU/内存/硬盘隐藏) | 点击展开 → 显示硬件指标;再点或点击自助诊断 → 自动收回 |
|
||||
| 自助诊断 | 折叠 | 点击展开 → 显示标签页,默认选中"网络联通";再点或点击设备信息 → 自动收回 |
|
||||
| 统一标签页 | 智能推荐默认选中 | 始终可见,标签切换,不参与手风琴 |
|
||||
|
||||
**互斥规则**:设备信息和自助诊断之间互斥——同一时间只有一个展开。
|
||||
|
||||
### 6.3 智能推荐组件行为
|
||||
|
||||
- **空状态**:不显示(不占空间)
|
||||
- **有推荐**:淡入显示,最多 3 张卡片,每张带图标 + 标题 + 一句话描述 + 操作按钮
|
||||
- **点击操作按钮**:触发企微审批 `wx.invoke('thirdPartyOpenPage', ...)`
|
||||
- **自动过期**:对话话题切换后,旧推荐淡出消失
|
||||
- **手动关闭**:每张卡片右上角有 × 按钮
|
||||
- **Badge 红点**:有新推荐时显示数量
|
||||
|
||||
### 6.4 组件变更
|
||||
|
||||
| 原组件 | 变更 | 新组件 |
|
||||
|--------|------|--------|
|
||||
| `BasicInfoCard.vue` | 增加折叠/展开逻辑 | `BasicInfoCard.vue` (改造) |
|
||||
| `SelfDiagnosis.vue` | 增加标签页 + 折叠逻辑 | `SelfDiagnosis.vue` (改造) |
|
||||
| `SoftwareAndApply.vue` | 拆分为标签页形式 | `SoftwareInstall.vue` + `ResourcePermission.vue` |
|
||||
| 无 | 新增 | `DynamicRecommend.vue` (新建) |
|
||||
| `RightPanel.vue` | 整体布局重构 | `RightPanel.vue` (改造) |
|
||||
|
||||
---
|
||||
|
||||
## 七、实施计划
|
||||
|
||||
### 7.1 阶段划分
|
||||
|
||||
> **实施状态**:Phase 1-6 全部完成,2026-07-13 01:38 生产部署验证通过。
|
||||
> **v1.3 补充交付**:2026-07-25,AI 回复打字机逐字显示效果(前端 useTypewriter composable),H5 + Agent 双端已编译验证通过。
|
||||
|
||||
```
|
||||
Phase 1: 基础设施层(P0,前置条件)✅ 已完成
|
||||
├─ 1A. Dify System Prompt 改造(JSON 输出)✅
|
||||
├─ 1B. 后端统一消息处理(解析 JSON + 双 WS 推送)✅
|
||||
├─ 1C. 后端错误降级机制(30s 超时 / 15s still_thinking)✅
|
||||
└─ 1D. Dify 节点精简(85→35)✅
|
||||
|
||||
Phase 2: 意图识别优化(P0,并行于 Phase 1)✅ 已完成
|
||||
├─ 2A. 收窄审批关键词预过滤(~40→~25 强意图词)✅
|
||||
├─ 2B. 统一前后端意图调用(删除前端 checkApprovalIntent)✅
|
||||
└─ 2C. 两级审批类型分类 Prompt v4.0 ✅
|
||||
|
||||
Phase 3: 前端改造(P0-P1,依赖 Phase 1)✅ 已完成
|
||||
├─ 3A. WS 消息类型扩展(ai_thinking + dynamic_recommend + option_select)✅
|
||||
├─ 3B. 聊天气泡渲染改造(文字 + 选项按钮)✅
|
||||
├─ 3C. 右边栏 v2 重构(手风琴 + 智能推荐默认页)✅
|
||||
└─ 3D. 选项回传链路 ✅
|
||||
|
||||
Phase 4: 图片处理(P0-P1,依赖 Phase 1)✅ 已完成
|
||||
├─ 4A. VisionService 接入 process_h5_ai_reply ✅
|
||||
└─ 4B. 消息融合机制(5 秒窗口)✅
|
||||
|
||||
Phase 5: 坐席端适配(P2,依赖 Phase 1+3)✅ 已完成
|
||||
├─ 5A. 坐席端 WS 消息类型扩展 ✅
|
||||
└─ 5B. 坐席端卡片渲染组件 ✅
|
||||
|
||||
Phase 6: 收尾(P3)✅ 已完成
|
||||
├─ 6A. 诊断闭环与 Dify 协调 ✅
|
||||
└─ 6B. 性能优化与监控 ✅
|
||||
```
|
||||
|
||||
### 7.2 各阶段详细任务
|
||||
|
||||
#### Phase 1: 基础设施层
|
||||
|
||||
| 任务 | 文件 | 具体改动 |
|
||||
|------|------|---------|
|
||||
| **1A. Dify Prompt 改造** | Dify 后台 + `docs/02-产品需求/dify_unified_intent_prompt_v3.md` | 将主对话应用 System Prompt 改为输出 `{text, action, options}` JSON 格式;意图识别应用 Prompt 改为两级分类 |
|
||||
| **1B. 后端统一消息处理** | `backend/app/services/ai_service.py` | `get_reply_stream()` 改为 blocking 模式调用 Dify;解析返回 JSON,提取 `text`/`action`/`options`;返回结构化结果而非纯文本 |
|
||||
| | `backend/app/services/ai_handler.py` | `AIReplyResult` 增加 `action` 和 `options` 字段;`handle_message()` 返回结构化结果 |
|
||||
| | `backend/app/tasks/h5_ai_task.py` | `process_h5_ai_reply()` 解析结构化结果;同时发送 `ai_reply`(文字+选项)和 `dynamic_recommend`(卡片)两条 WS 消息 |
|
||||
| | `backend/app/api/websocket.py`(或对应 WS 管理文件) | 新增 `dynamic_recommend` WS 消息类型 |
|
||||
| **1C. 错误降级** | `backend/app/services/ai_service.py` | Dify 返回非 JSON → 降级为纯文本回复;15 秒超时 → "正在思考...";30 秒超时 → 建议转人工 |
|
||||
| **1D. Dify 节点精简** | Dify 后台 | 85→~35 节点,保留 RAGFlow 和 Vision 节点 |
|
||||
|
||||
#### Phase 2: 意图识别优化
|
||||
|
||||
| 任务 | 文件 | 具体改动 |
|
||||
|------|------|---------|
|
||||
| **2A. 收窄审批关键词** | `backend/app/api/approval.py:213-242` | `APPROVAL_PREFILTER_KEYWORDS` 从 ~40 词缩减到 ~7 个强意图词 |
|
||||
| **2B. 统一前后端意图调用** | `backend/app/tasks/h5_ai_task.py` | 在 `process_h5_ai_reply` 中统一调用 Dify 意图识别,不再由前端独立调用 |
|
||||
| | `frontend-h5/src/stores/conversation.ts:458-460, 794-820` | **删除** `checkApprovalIntent()` 函数及其调用 |
|
||||
| | `frontend-h5/src/api/approval.ts`(如存在) | 移除或标记 `detectApprovalIntent` 为废弃 |
|
||||
| **2C. 两级审批分类 Prompt** | `docs/02-产品需求/dify_unified_intent_prompt_v3.md` | Prompt 改为两级分类:第一级 4 类粗分,第二级细分到 12 类 |
|
||||
|
||||
#### Phase 3: 前端改造
|
||||
|
||||
| 任务 | 文件 | 具体改动 |
|
||||
|------|------|---------|
|
||||
| **3A. WS 消息类型扩展** | `frontend-h5/src/composables/useH5WebSocket.ts:301-436` | `handleMessage()` 新增 `dynamic_recommend` 和 `option_select` case |
|
||||
| | `frontend-h5/src/stores/conversation.ts` | 新增 `handleDynamicRecommend()` 和 `sendOptionSelect()` 方法 |
|
||||
| **3B. 聊天气泡渲染** | `frontend-h5/src/components/` | 新增 `AiStructuredMessage.vue` 组件——渲染文字 + 选项按钮 |
|
||||
| | `MessageBubble.vue`(或对应渲染组件) | 增加 `msg_type === 'ai_structured'` 分支 |
|
||||
| **3C. 右边栏 v2** | `frontend-h5/src/components/assistant/RightPanel.vue` | 整体重构为手风琴布局 |
|
||||
| | 新建 `DynamicRecommend.vue` | 智能推荐组件——接收 WS `dynamic_recommend` 消息,渲染推荐卡片 |
|
||||
| | 改造 `SelfDiagnosis.vue` | 增加标签页 + 折叠逻辑 |
|
||||
| | 改造 `BasicInfoCard.vue` | 增加 CPU/内存/硬盘折叠/展开 |
|
||||
| | 新建 `SoftwareInstall.vue` + `ResourcePermission.vue` | 从 `SoftwareAndApply.vue` 拆分 |
|
||||
| **3D. 选项回传链路** | `frontend-h5/src/stores/conversation.ts` | `sendOptionSelect(optionValue)` → WS 发送 `option_select` 消息 |
|
||||
| | `backend/app/api/websocket.py` | 接收 `option_select` → 转化为 Dify user message → `get_reply_stream()` |
|
||||
|
||||
#### Phase 4: 图片处理
|
||||
|
||||
| 任务 | 文件 | 具体改动 |
|
||||
|------|------|---------|
|
||||
| **4A. VisionService 接入** | `backend/app/tasks/h5_ai_task.py` | `process_h5_ai_reply()` 增加图片分支——检测 `msg_type=image` → 调 `vision_service.analyze_screenshot()` → 描述拼接到用户文字 |
|
||||
| | `backend/app/services/vision_service.py` | 确认接口完整,增加错误降级 |
|
||||
| **4B. 消息融合** | `backend/app/tasks/h5_ai_task.py` 或新建 `backend/app/services/message_fusion.py` | 5 秒窗口合并机制——图片+文字融合后一次性传给 Dify |
|
||||
|
||||
#### Phase 5: 坐席端适配
|
||||
|
||||
| 任务 | 文件 | 具体改动 |
|
||||
|------|------|---------|
|
||||
| **5A. 坐席端 WS 扩展** | 坐席端 WS 处理器 | 新增 `ai_structured` 和 `dynamic_recommend` 消息类型处理 |
|
||||
| **5B. 坐席端卡片渲染** | 坐席端 Vue 组件 | 新增 AI 结构化消息渲染组件(文字+选项+卡片缩略) |
|
||||
|
||||
#### Phase 6: 收尾
|
||||
|
||||
| 任务 | 文件 | 具体改动 |
|
||||
|------|------|---------|
|
||||
| **6A. 诊断闭环协调** | `backend/app/services/closing_service.py` | 明确信息锁定条件——Dify JSON 中增加 `diagnosis_stage` 字段 |
|
||||
| **6B. 性能优化** | Dify + 后端 | 节点精简后实测延迟;增加 Dify 响应时间监控 |
|
||||
|
||||
### 7.3 优先级与依赖关系
|
||||
|
||||
```
|
||||
Phase 1 (P0) ──┬── 1A. Dify Prompt ──────── 无依赖
|
||||
├── 1B. 后端消息处理 ──────── 依赖 1A
|
||||
├── 1C. 错误降级 ────────── 依赖 1B
|
||||
└── 1D. Dify 节点精简 ────── 无依赖
|
||||
|
||||
Phase 2 (P0) ──┬── 2A. 收窄关键词 ────────── 无依赖
|
||||
├── 2B. 统一意图调用 ──────── 依赖 1B
|
||||
└── 2C. 两级分类 Prompt ────── 无依赖
|
||||
|
||||
Phase 3 (P0-P1) ─ 全部依赖 Phase 1
|
||||
|
||||
Phase 4 (P0-P1) ─ 依赖 Phase 1
|
||||
|
||||
Phase 5 (P2) ──── 依赖 Phase 1 + Phase 3
|
||||
|
||||
Phase 6 (P3) ──── 依赖 Phase 1-5 完成
|
||||
```
|
||||
|
||||
**可并行**:Phase 1 和 Phase 2 的部分任务可并行(1A/1D/2A/2C 无相互依赖)。
|
||||
|
||||
---
|
||||
|
||||
## 八、风险与回滚
|
||||
|
||||
### 8.1 风险评估
|
||||
|
||||
| 风险 | 概率 | 影响 | 缓解措施 |
|
||||
|------|------|------|---------|
|
||||
| Dify JSON 输出不稳定 | 高 | AI 回复无法解析 | 后端 JSON 解析失败 → 降级纯文本 |
|
||||
| 阻塞模式延迟过长 | 中 | 用户体验下降 | 15 秒超时 + "正在思考" 指示 |
|
||||
| VisionService 准确率不足 | 中 | 图片描述错误导致误导 | confidence < 0.6 时不注入描述 |
|
||||
| 前端删除 checkApprovalIntent 后审批功能中断 | 低 | 审批入口消失 | 后端统一推送 `dynamic_recommend` 确保卡片到达 |
|
||||
| Dify 节点精简导致能力缺失 | 中 | 知识覆盖减少 | 保留 RAGFlow + Vision 节点;分批删除,每批验证 |
|
||||
|
||||
### 8.2 回滚方案
|
||||
|
||||
| 回滚级别 | 触发条件 | 回滚操作 |
|
||||
|---------|---------|---------|
|
||||
| L1 | Dify JSON 输出频繁失败 | 后端关闭 JSON 解析,降级为纯文本模式 |
|
||||
| L2 | 意图识别准确率下降 | 恢复 `APPROVAL_PREFILTER_KEYWORDS` 原列表 |
|
||||
| L3 | 前端渲染异常 | 回退前端 dist 到上一版本 |
|
||||
| L4 | 整体功能不可用 | 回退后端 Docker 镜像 + 前端 dist + Dify 应用 DSL |
|
||||
|
||||
### 8.3 验证清单
|
||||
|
||||
> **验证状态**:2026-07-13 01:38 生产部署后全部通过。
|
||||
|
||||
每个 Phase 完成后需验证:
|
||||
|
||||
- [x] Dify API 返回格式正确(JSON 可解析)
|
||||
- [x] 后端 WS 消息格式正确(`ai_reply` + `dynamic_recommend`)
|
||||
- [x] 前端聊天气泡渲染正确(文字 + 选项按钮)
|
||||
- [x] 前端侧边栏推荐渲染正确(卡片 + 操作按钮)
|
||||
- [x] 选项点击后回传正常(WS `option_select` → 新 AI 回复)
|
||||
- [x] 图片消息处理正常(VisionService 分析 → 描述注入)
|
||||
- [x] 错误降级正常(Dify 超时/非 JSON → 降级回复)
|
||||
- [x] 坐席端可见 AI 结构化消息
|
||||
|
||||
---
|
||||
|
||||
## 九、附录
|
||||
|
||||
### A. 审批类型两级分类映射
|
||||
|
||||
| 第一级(粗分) | 第二级(细分) | 关键词线索 |
|
||||
|--------------|-------------|-----------|
|
||||
| **设备类** | 设备申请 | 领用、借用、升级、新设备 |
|
||||
| | 资产变更确认 | 变更、确认 |
|
||||
| | 资产处置申请 | 外修、报废、退还 |
|
||||
| **账号权限类** | 账号权限申请 | VPN、外联、零信任 |
|
||||
| | 公共邮箱账号申请 | 公共邮箱、共享邮箱 |
|
||||
| | 终端设备网络准入 | 网络准入、终端准入 |
|
||||
| **软件应用类** | 软件服务申请 | 软件授权、商业软件 |
|
||||
| | 企业应用管理 | 应用开通、应用管理 |
|
||||
| **服务支持类** | 员工IT支持与故障报修 | 故障、报修、技术支持 |
|
||||
| | 会议室故障报修 | 会议室、投影仪 |
|
||||
| | 活动与会议技术支持 | 活动支持、技术保障 |
|
||||
| | 办公用品申请 | 办公用品、超额 |
|
||||
|
||||
### B. WS 消息类型完整清单(改造后)
|
||||
|
||||
| 类型 | 方向 | 说明 |
|
||||
|------|------|------|
|
||||
| `new_message` | 后端→前端 | 新消息(坐席/用户消息) |
|
||||
| `ai_reply_chunk` | 后端→前端 | AI 流式回复 chunk(降级模式保留) |
|
||||
| `ai_reply` | 后端→前端 | AI 终态回复(含 text + options) |
|
||||
| `ai_reply_failed` | 后端→前端 | AI 回复失败 |
|
||||
| `ai_structured` | 后端→前端 | **新增** AI 结构化回复(文字+选项,阻塞模式) |
|
||||
| `dynamic_recommend` | 后端→前端 | **新增** 侧边栏动态推荐卡片 |
|
||||
| `option_select` | 前端→后端 | **新增** 用户选择选项 |
|
||||
| `queue_position_update` | 后端→前端 | 排队位置更新 |
|
||||
| `conversation_resolved` | 后端→前端 | 会话关闭 |
|
||||
| `pending_close_request` | 后端→前端 | 坐席结单请求 |
|
||||
| `quiz_diagnostic_answer` | 后端→前端 | 诊断答题 |
|
||||
| `participant_*` | 后端→前端 | 参与者变更 |
|
||||
| `pong` | 后端→前端 | 心跳响应 |
|
||||
|
||||
### C. 改造前后对比
|
||||
|
||||
| 维度 | 改造前 | 改造后 |
|
||||
|------|--------|--------|
|
||||
| Dify 节点数 | 85 | ~35 |
|
||||
| Dify 调用次数/消息 | 2-3 次(前端意图+后端路由+后端回复) | 1-2 次(统一意图+条件性回复) |
|
||||
| 审批关键词数 | ~40 | ~7 |
|
||||
| 审批类型分类 | 一级 12 类 | 两级 4→12 类 |
|
||||
| 卡片推送方式 | 前端异步独立推送 | 后端统一推送,与文字同步 |
|
||||
| 图片处理 | 不可用 | VisionService 接入 |
|
||||
| 消息格式 | 纯文本 | 结构化 JSON |
|
||||
| 右边栏布局 | 三独立模块 | 手风琴折叠 + 智能推荐默认页 |
|
||||
| 错误降级 | 无 | 三级降级(JSON→纯文本→转人工) |
|
||||
|
||||
---
|
||||
|
||||
## 十、边缘情况与隐式设计说明
|
||||
|
||||
> **版本**: v1.2
|
||||
> **日期**: 2026-07-24
|
||||
> **说明**: 补充文档中未明确说明的隐式设计决策及边缘情况
|
||||
|
||||
### 10.1 选项消息的前端本地添加(已废弃)
|
||||
|
||||
**原设计(有问题)**:
|
||||
```
|
||||
用户点击选项 → 前端本地立即添加消息(message_id = option_select_${timestamp})
|
||||
→ 后端接收 WS option_select → 存储到数据库(message_id = UUID)
|
||||
→ 后端广播 new_message → 前端收到后再添加一次
|
||||
→ 结果:同一条消息显示两次
|
||||
```
|
||||
|
||||
**问题**:前端和后端使用不同的 message_id,前端的去重机制(基于 message_id)失效。
|
||||
|
||||
**修复方案(v1.2)**:
|
||||
```
|
||||
用户点击选项 → 前端只发送 WS,不本地添加消息
|
||||
→ 后端接收 → 存储到数据库(message_id = UUID)
|
||||
→ 后端广播 new_message → 前端收到后添加
|
||||
→ 结果:消息来源唯一,无重复
|
||||
```
|
||||
|
||||
**隐式设计意图(原本未文档化)**:
|
||||
- 前端本地添加消息的目的是提升用户体验:用户点击选项后,立即在界面上显示消息,让用户知道"我已经发送了",避免等待网络响应的 3 秒延迟
|
||||
- 但这个设计在文档中没有明确说明,属于「实现时随手加的」
|
||||
|
||||
### 10.2 消息轮询机制
|
||||
|
||||
**设计**:
|
||||
- 前端使用 3 秒间隔的轮询(poll)作为 WebSocket 的补充
|
||||
- 当 WebSocket 消息丢失或延迟时,轮询作为兜底机制确保消息不丢失
|
||||
|
||||
**考量**:
|
||||
- 轮询间隔 3 秒是体验和服务器压力的平衡点
|
||||
- 过短会增加服务器压力,过长会影响体验
|
||||
|
||||
### 10.3 Dify 工作流变更
|
||||
|
||||
**重要**:Dify 的工作流(Workflow)修改后,必须手动点击「发布」按钮,否则更改不生效。
|
||||
|
||||
**验证方法**:
|
||||
- 在 Dify 后台修改工作流后,保存 ≠ 发布
|
||||
- 必须点击「发布」按钮,新版本才会生效
|
||||
- 未发布时调用 API 会返回旧版本的结果
|
||||
|
||||
**故障表现**:修改了 Dify Prompt 或节点逻辑,但测试接口时发现行为未变化——通常是忘记点击「发布」。
|
||||
|
||||
### 10.4 消息 ID 去重机制
|
||||
|
||||
**设计**:
|
||||
- 前端使用 `processedMessageIds` Set 记录已处理的消息 ID
|
||||
- `handleNewMessage()` 中检查消息是否已处理,避免重复渲染
|
||||
|
||||
**局限**:
|
||||
- 只基于 message_id 去重,不支持内容级别的去重
|
||||
- 如果后端生成的 UUID 与前端生成的临时 ID 不同,去重会失效(参见 10.1)
|
||||
|
||||
### 10.5 WebSocket 与 HTTP 降级
|
||||
|
||||
**设计**:
|
||||
- 发送消息时优先使用 WebSocket
|
||||
- 如果 WebSocket 未连接(`sent = false`),降级为 HTTP API 调用
|
||||
|
||||
**代码位置**:`conversation.ts:1453-1460`
|
||||
|
||||
---
|
||||
|
||||
## 十一、变更日志
|
||||
|
||||
| 版本 | 日期 | 变更内容 |
|
||||
|------|------|---------|
|
||||
| v1.0 | 2026-07-13 | 初始版本 |
|
||||
| v1.1 | 2026-07-13 | 补充部署记录 |
|
||||
| v1.2 | 2026-07-24 | 新增第十章:边缘情况与隐式设计说明 |
|
||||
| v1.3 | 2026-07-25 | AI回复打字机逐字显示效果交付(前端 H5 + Agent 双端 useTypewriter composable) |
|
||||
@@ -0,0 +1,329 @@
|
||||
# Dify App 改造与 AI 供给链路修复方案
|
||||
|
||||
> **版本**: v1.0
|
||||
> **日期**: 2026-07-13
|
||||
> **涵盖任务**: P1-4(App精简)、P1-5(Prompt部署)、P1-6(知识库优化)
|
||||
> **前置条件**: P0 代码改造已完成(`_call_dify_native()` + `DIFY_NATIVE_*` 环境变量)
|
||||
|
||||
---
|
||||
|
||||
## 一、当前阻塞点(P0-3 验证结果)
|
||||
|
||||
### 1.1 Dify 应用状态
|
||||
|
||||
| 应用 | API Key | 状态 | 说明 |
|
||||
|------|---------|------|------|
|
||||
| 智能IT支持-员工咨询 | `app-7jkRkAzvX4QM9v9SM3P8mMEO` | ❌ 400 | "Workflow not published"(工作流未发布) |
|
||||
| 老线上应用 | `app-UaTWYdBSwN6VktKQlbh5YN5H` | ✅ 200 | 返回纯文本Markdown(非JSON),已标记禁用 |
|
||||
| 分诊应用 | `app-z3S9AEUUAVPbtR2rioxpiIvp` | ✅ 200 | 返回结构化JSON,正常工作 |
|
||||
| 自建应用 | `app-J3s8sHarZQ2SCaNF3xCppliL` | ❌ 400 | "Model credentials not initialized" |
|
||||
|
||||
### 1.2 根因分析
|
||||
|
||||
Dify 应用 `app-7jkRkAzvX4QM9v9SM3P8mMEO` 是一个 **advanced-chat(聊天流)** 类型的应用,包含 85 个节点。该应用的工作流 **尚未发布**,导致 API 调用返回 `"Workflow not published"` 错误。
|
||||
|
||||
**影响**:
|
||||
- 后端 `_call_dify_native()` 调用 Dify 原生 API → 返回 400 → 降级到代理路径
|
||||
- 代理路径(dify2openai)返回 `[object Object]` → JSON 解析失败 → 降级为纯文本
|
||||
- **最终结果**:所有 Phase 1-6 前端改造的结构化功能(卡片渲染、选项按钮、诊断阶段)均无法触发
|
||||
|
||||
### 1.3 修复路径
|
||||
|
||||
```
|
||||
用户在 Dify 平台发布工作流
|
||||
↓
|
||||
Dify API 返回 200 + JSON answer
|
||||
↓
|
||||
后端 _call_dify_native() 解析 JSON
|
||||
↓
|
||||
双 WS 推送(ai_reply + dynamic_recommend)
|
||||
↓
|
||||
前端渲染结构化消息(文字气泡 + 卡片 + 选项按钮)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 二、P1-4:Dify App 精简方案(85 → ~35 节点)
|
||||
|
||||
### 2.1 精简原则
|
||||
|
||||
1. **后端已接管的功能**:审批意图分类、关键词预过滤、BYOD 拦截、图片增强 → Dify 中对应节点可删除
|
||||
2. **Prompt 已覆盖的功能**:JSON 输出格式、诊断阶段标注、审批卡片推送规则 → Dify 中的格式化/路由节点可删除
|
||||
3. **保留核心能力**:RAGFlow 知识检索、LLM 推理、多轮对话上下文 → 这三块是 Dify 的核心价值
|
||||
4. **Vision 节点**:后端 `VisionService` 已独立接入,但 Dify 内的图片理解节点暂保留(双路径冗余)
|
||||
|
||||
### 2.2 节点分类与精简计划
|
||||
|
||||
#### 可删除节点(50个)
|
||||
|
||||
| 类别 | 节点类型 | 数量 | 删除原因 |
|
||||
|------|---------|------|---------|
|
||||
| 审批意图路由 | if-else + answer | 12 | 后端 `_check_approval_intent()` 已接管,关键词收窄至~25个 |
|
||||
| BYOD 拦截 | if-else + code + assigner | 8 | 后端 `h5_ai_task.py` 已实现 BYOD 拦截逻辑 |
|
||||
| 格式化输出 | code + template-transform | 10 | Prompt v1.1 已要求 LLM 直接输出 JSON,无需后处理 |
|
||||
| 变量中转 | assigner | 12 | 精简后不再需要多步变量传递 |
|
||||
| 打招呼/人工判断 | if-else + answer | 4 | 后端 `h5_ai_task.py` 已实现打招呼和人工坐席判断 |
|
||||
| 保底机制 | code + if-else + assigner | 4 | 后端有 30s 超时降级 + 15s still_thinking 推送 |
|
||||
|
||||
#### 保留节点(~35个)
|
||||
|
||||
| 类别 | 节点类型 | 数量 | 保留原因 |
|
||||
|------|---------|------|---------|
|
||||
| 核心 | start + answer | 3 | 工作流入口和最终输出 |
|
||||
| 知识检索 | knowledge-retrieval | 3 | RAGFlow 检索(IT知识库 + 审批流程库 + FAQ库) |
|
||||
| LLM 推理 | llm | 4 | 主对话 LLM + 意图理解 + 上下文总结 + 图片描述 |
|
||||
| 条件路由 | if-else | 5 | 图片/文本分流 + 知识库命中/未命中分流 + 上下文长度判断 |
|
||||
| 变量管理 | assigner | 6 | 对话变量(servyou_query, memory_query, memory_ans, mmq) |
|
||||
| 代码处理 | code | 6 | 查询预处理 + 结果后处理 + 上下文拼接 + 图片URL提取 |
|
||||
| HTTP 请求 | http-request | 4 | RAGFlow API 调用 + 图片理解 API + 外部知识源 |
|
||||
| 模板转换 | template-transform | 2 | 上下文模板 + 答案模板 |
|
||||
| 列表操作 | list-operator | 1 | 历史消息列表处理 |
|
||||
| 其他 | 1 | 保底 answer 节点 |
|
||||
|
||||
### 2.3 精简后的工作流结构
|
||||
|
||||
```
|
||||
[Start]
|
||||
→ [Code: 预处理用户输入]
|
||||
→ [IF-ELSE: 图片消息?]
|
||||
├─ Yes → [HTTP: 调用图片理解API] → [LLM: 图片描述生成]
|
||||
└─ No → 直接继续
|
||||
→ [Code: 拼接上下文(memory_query + memory_ans + servyou_query)]
|
||||
→ [IF-ELSE: 上下文长度 > 阈值?]
|
||||
├─ Yes → [LLM: 上下文压缩总结]
|
||||
└─ No → 直接继续
|
||||
→ [Knowledge-Retrieval: RAGFlow 检索]
|
||||
→ [IF-ELSE: 检索结果命中?]
|
||||
├─ Yes → [LLM: 基于知识库回答(JSON格式)] → [Answer]
|
||||
└─ No → [LLM: 通用回答(JSON格式)] → [Answer]
|
||||
→ [Code: 更新对话变量]
|
||||
```
|
||||
|
||||
### 2.4 精简操作步骤
|
||||
|
||||
1. **导出当前 DSL**:在 Dify 后台导出 `app-7jkRkAzvX4QM9v9SM3P8mMEO` 的完整 YAML(已导出,见 `scripts/dify_export_clean.yaml`)
|
||||
2. **在 Dify 后台编辑工作流**:
|
||||
- 删除审批意图路由相关节点(12个 if-else + answer)
|
||||
- 删除 BYOD 拦截相关节点(8个)
|
||||
- 删除格式化输出节点(10个 code + template-transform)
|
||||
- 删除冗余变量中转节点(12个 assigner)
|
||||
- 删除打招呼/人工判断节点(4个)
|
||||
- 删除保底机制节点(4个)
|
||||
3. **更新 LLM 节点的 System Prompt**:将 `dify_main_chat_prompt_v1.md` 的完整 Prompt 粘贴到主 LLM 节点
|
||||
4. **重新连接节点**:确保工作流从 Start 到 Answer 的路径完整
|
||||
5. **测试工作流**:在 Dify 后台的调试面板中测试以下场景:
|
||||
- "密码忘记了怎么办" → 应返回 JSON with options
|
||||
- "我要申请VPN" → 应返回 JSON with action
|
||||
- "你好" → 应返回 JSON 纯文字
|
||||
6. **发布工作流**:点击「发布」按钮,使工作流生效
|
||||
|
||||
---
|
||||
|
||||
## 三、P1-5:Dify Prompt v1.1 部署内容
|
||||
|
||||
### 3.1 Prompt 文件位置
|
||||
|
||||
完整 Prompt 已准备好,位于:
|
||||
```
|
||||
docs/02-产品需求/dify_main_chat_prompt_v1.md
|
||||
```
|
||||
|
||||
### 3.2 部署步骤
|
||||
|
||||
1. **登录 Dify 平台**:http://yw-dify.dc.servyou-it.com
|
||||
2. **打开应用**:找到「智能IT支持-员工咨询」(API Key: `app-7jkRkAzvX4QM9v9SM3P8mMEO`)
|
||||
3. **进入编排页面**:点击「编排」→ 进入工作流编辑器
|
||||
4. **找到主 LLM 节点**:在精简后的工作流中,主 LLM 节点(用于生成最终回复的节点)
|
||||
5. **替换 System Prompt**:
|
||||
- 将 `dify_main_chat_prompt_v1.md` 中「## System Prompt 正文」以下的所有内容复制
|
||||
- 粘贴到 LLM 节点的「SYSTEM」输入框中
|
||||
- 确保 USER 输入框设置为 `{{#sys.query#}}`(用户原始输入)
|
||||
6. **配置模型参数**:
|
||||
- 模型:`gpt-3.5-turbo`(或可用的 OpenAI 兼容模型)
|
||||
- Temperature:0.3(低温度保证 JSON 格式稳定)
|
||||
- Max Tokens:500(JSON 输出不需要太长)
|
||||
7. **测试验证**:
|
||||
- 在调试面板输入 "密码忘了" → 验证返回 JSON 包含 `text` + `options` + `diagnosis_stage`
|
||||
- 在调试面板输入 "我要申请VPN" → 验证返回 JSON 包含 `action`
|
||||
- 在调试面板输入 "谢谢" → 验证返回 JSON 纯文字
|
||||
8. **发布**:确认无误后点击「发布」
|
||||
|
||||
### 3.3 Prompt 核心要点
|
||||
|
||||
Prompt v1.1 的关键设计:
|
||||
|
||||
| 要点 | 说明 |
|
||||
|------|------|
|
||||
| JSON 强制输出 | 4个字段:`text`、`action`、`options`、`diagnosis_stage` |
|
||||
| 文字简短 | `text` 字段 ≤50字,口语化 |
|
||||
| 诊断阶段 | 6种值:initial/gathering_info/diagnosing/recommending/resolved/escalating |
|
||||
| 审批卡片 | `action.type = "approval_card"`,8种审批类型 |
|
||||
| 交互选项 | `options` 最多4个,label ≤8字 |
|
||||
| 无 markdown | 直接输出 JSON 原文,不用代码块包裹 |
|
||||
|
||||
### 3.4 后端适配确认
|
||||
|
||||
后端 `_call_dify_native()` 和 `_parse_structured_response()` 已完成适配:
|
||||
- `_call_dify_native()`:直连 Dify `/v1/chat-messages`,blocking 模式,返回 `answer` 字段
|
||||
- `_parse_structured_response()`:解析 `answer` 字段为 JSON,提取 `text`/`action`/`options`/`diagnosis_stage`
|
||||
- 失败降级:JSON 解析失败 → 纯文本回复(不中断用户体验)
|
||||
|
||||
---
|
||||
|
||||
## 四、P1-6:知识库内容优化计划
|
||||
|
||||
### 4.1 当前知识库状态
|
||||
|
||||
RAGFlow 生产环境:`http://10.80.0.85:8080/`(API: `:9380`)
|
||||
|
||||
Dify 中引用的知识库:
|
||||
1. **IT知识库**:日常IT问题解答(密码重置、VPN连接、打印机等)
|
||||
2. **审批流程库**:12种审批类型的操作流程
|
||||
3. **FAQ库**:高频问题快速回答
|
||||
|
||||
### 4.2 优化目标
|
||||
|
||||
| 指标 | 当前 | 目标 |
|
||||
|------|------|------|
|
||||
| 检索准确率 | ~60%(粗估) | ≥85% |
|
||||
| 知识库文档数 | ~200篇 | ~150篇(精简+补充) |
|
||||
| 平均检索时间 | ~3s | ≤2s |
|
||||
| 无效检索率 | ~25% | ≤10% |
|
||||
|
||||
### 4.3 优化策略
|
||||
|
||||
#### 策略1:知识库结构化重构
|
||||
|
||||
```
|
||||
IT知识库/
|
||||
├── 01-账号密码/ # 密码重置、账号解锁、二次验证
|
||||
│ ├── 企微密码重置.md
|
||||
│ ├── 邮箱密码重置.md
|
||||
│ ├── aTrust密码重置.md
|
||||
│ └── GitLab密码重置.md
|
||||
├── 02-网络VPN/ # VPN连接、网络故障、WiFi
|
||||
│ ├── 零信任aTrust连接.md
|
||||
│ ├── 传统VPN配置.md
|
||||
│ └── 网络不通排查.md
|
||||
├── 03-设备硬件/ # 电脑、显示器、打印机
|
||||
│ ├── 打印机连接.md
|
||||
│ ├── 蓝屏排查.md
|
||||
│ └── 设备报修流程.md
|
||||
├── 04-软件安装/ # 软件安装、授权、更新
|
||||
│ ├── 软件安装指南.md
|
||||
│ └── 软件授权申请.md
|
||||
├── 05-审批流程/ # 12种审批类型
|
||||
│ ├── 设备申请流程.md
|
||||
│ ├── VPN账号申请.md
|
||||
│ └── ...
|
||||
└── 06-常见FAQ/ # 高频问题
|
||||
├── 电脑卡顿.md
|
||||
└── 邮件配置.md
|
||||
```
|
||||
|
||||
#### 策略2:文档内容标准化
|
||||
|
||||
每篇知识库文档统一格式:
|
||||
|
||||
```markdown
|
||||
# [问题标题]
|
||||
|
||||
## 问题描述
|
||||
[1-2句话描述问题场景]
|
||||
|
||||
## 解决方案
|
||||
### 步骤1:[操作名称]
|
||||
[具体操作步骤]
|
||||
|
||||
### 步骤2:[操作名称]
|
||||
[具体操作步骤]
|
||||
|
||||
## 相关链接
|
||||
- [操作入口URL]
|
||||
- [相关文档]
|
||||
|
||||
## 关键词
|
||||
密码、重置、企微、登录
|
||||
```
|
||||
|
||||
#### 策略3:RAGFlow 检索优化
|
||||
|
||||
1. **Chunk 策略调整**:
|
||||
- 将大文档拆分为 ≤500 token 的 chunk
|
||||
- 每个 chunk 包含完整的「问题描述 + 解决方案」
|
||||
- 避免跨 chunk 的信息断裂
|
||||
|
||||
2. **Embedding 模型**:
|
||||
- 确认使用中文优化的 embedding 模型(如 `bge-large-zh`)
|
||||
- 如果当前用的是英文模型,切换后检索准确率可提升 15-20%
|
||||
|
||||
3. **检索参数调优**:
|
||||
- Top-K:5→3(减少噪音)
|
||||
- 相似度阈值:0.5→0.65(提高精度)
|
||||
- Rerank:启用 rerank 模型(如 `bge-reranker-base`)
|
||||
|
||||
#### 策略4:知识库内容补充
|
||||
|
||||
基于员工咨询高频场景,需补充以下内容:
|
||||
|
||||
| 场景 | 当前状态 | 补充内容 |
|
||||
|------|---------|---------|
|
||||
| 企微使用问题 | 缺失 | 企微登录/消息/审批/会议常见问题 |
|
||||
| 税友安全助手 | 缺失 | 安装/认证失败/网络断开排查 |
|
||||
| 域控账号 | 部分 | 域控密码同步机制 + 常见故障 |
|
||||
| 云桌面 | 缺失 | 云桌面连接/卡顿/文件传输 |
|
||||
| 视频会议 | 部分 | 腾讯会议/企微会议常见问题 |
|
||||
|
||||
### 4.4 实施时间线
|
||||
|
||||
| 阶段 | 内容 | 预计工作量 |
|
||||
|------|------|-----------|
|
||||
| 第1周 | 知识库结构化重构 + 文档标准化 | 2天 |
|
||||
| 第1周 | RAGFlow 检索参数调优 | 0.5天 |
|
||||
| 第2周 | 高频场景内容补充(20篇) | 2天 |
|
||||
| 第2周 | Embedding 模型评估 + 切换 | 1天 |
|
||||
| 第3周 | 端到端测试 + 效果评估 | 1天 |
|
||||
|
||||
---
|
||||
|
||||
## 五、完整执行清单
|
||||
|
||||
### 5.1 用户需在 Dify 平台操作(阻塞项)
|
||||
|
||||
- [ ] **D-1**:登录 http://yw-dify.dc.servyou-it.com
|
||||
- [ ] **D-2**:打开「智能IT支持-员工咨询」应用(`app-7jkRkAzvX4QM9v9SM3P8mMEO`)
|
||||
- [ ] **D-3**:精简工作流(按 P1-4 方案,85→~35节点)
|
||||
- [ ] **D-4**:更新主 LLM 节点的 System Prompt(按 P1-5 部署步骤)
|
||||
- [ ] **D-5**:在调试面板测试3个场景(密码/VPN/打招呼)
|
||||
- [ ] **D-6**:点击「发布」按钮
|
||||
- [ ] **D-7**:发布后通知我验证 API 连通性
|
||||
|
||||
### 5.2 我来完成(Dify 发布后)
|
||||
|
||||
- [ ] **M-1**:验证 Dify 原生 API 返回 JSON 格式(复用 `test_dify_native.py`)
|
||||
- [ ] **M-2**:请用户在企微内发消息测试端到端链路
|
||||
- [ ] **M-3**:检查后端日志确认 `调用 Dify 原生 API` + JSON 解析成功
|
||||
- [ ] **M-4**:验证前端结构化消息渲染(文字气泡 + 卡片 + 选项按钮)
|
||||
- [ ] **M-5**:开始知识库优化(P1-6)
|
||||
|
||||
### 5.3 临时方案(如需立即可用)
|
||||
|
||||
如果用户暂时无法在 Dify 平台操作,可临时切换到旧 Key(需用户授权):
|
||||
|
||||
```
|
||||
# 临时切换 .env 中的 DIFY_NATIVE_API_KEY
|
||||
DIFY_NATIVE_API_KEY=app-UaTWYdBSwN6VktKQlbh5YN5H
|
||||
```
|
||||
|
||||
**注意**:旧 Key 返回纯文本(非JSON),后端会降级为纯文字回复。结构化功能(卡片/选项)不可用,但至少 AI 对话能正常工作。
|
||||
|
||||
---
|
||||
|
||||
## 六、风险评估
|
||||
|
||||
| 风险 | 等级 | 缓解措施 |
|
||||
|------|------|---------|
|
||||
| Dify 工作流精简后遗漏关键路径 | 中 | 精简前已导出完整 DSL YAML 备份 |
|
||||
| Prompt v1.1 在 Dify 中 JSON 输出不稳定 | 中 | Temperature=0.3 + 后端有 JSON 解析降级 |
|
||||
| RAGFlow 检索准确率不达标 | 低 | 可通过调整检索参数 + 补充内容逐步优化 |
|
||||
| 知识库内容过时 | 中 | 建立月度知识库审查机制 |
|
||||
@@ -0,0 +1,202 @@
|
||||
[
|
||||
{
|
||||
"id": "office_supplies",
|
||||
"name": "办公用品超额领用审批",
|
||||
"category": "办公用品申请",
|
||||
"location": "企微审批",
|
||||
"template_id": "3WN6zRucbjycdnR94gBvkSVuXRamX7pKW4PrmNFh",
|
||||
"url": "https://app.work.weixin.qq.com/wework_admin/approval_v3#/?template_id=3WN6zRucbjycdnR94gBvkSVuXRamX7pKW4PrmNFh&sp_id=&from=template_list",
|
||||
"keywords": ["办公用品", "超额", "领用"],
|
||||
"icon": "gift-o",
|
||||
"desc": "超配额申领"
|
||||
},
|
||||
{
|
||||
"id": "asset_receive",
|
||||
"name": "资产领用登记",
|
||||
"category": "设备申请",
|
||||
"location": "企微审批",
|
||||
"template_id": "C4c8qt31AbSHwN9MuaFhYXt4Qwsx6ZLCftAFh6X1w",
|
||||
"url": "https://app.work.weixin.qq.com/wework_admin/approval_v3#/?template_id=C4c8qt31AbSHwN9MuaFhYXt4Qwsx6ZLCftAFh6X1w&sp_id=&from=template_list",
|
||||
"keywords": ["资产领用", "领用登记", "设备领用"],
|
||||
"icon": "orders-o",
|
||||
"desc": "申请新设备"
|
||||
},
|
||||
{
|
||||
"id": "meeting_room_repair",
|
||||
"name": "会议室故障报修",
|
||||
"category": "会议室故障报修",
|
||||
"location": "企微审批",
|
||||
"template_id": "C4ZXJMtjQJiPXo6N5vNMK26uPRT3KTi9VvkH2NScg",
|
||||
"url": "https://app.work.weixin.qq.com/wework_admin/approval_v3#/?template_id=C4ZXJMtjQJiPXo6N5vNMK26uPRT3KTi9VvkH2NScg&sp_id=&from=template_list",
|
||||
"keywords": ["会议室", "故障报修", "报修"],
|
||||
"icon": "warn-o",
|
||||
"desc": "会议室设备故障"
|
||||
},
|
||||
{
|
||||
"id": "wecom_external",
|
||||
"name": "企微外联权限申请",
|
||||
"category": "账号权限申请",
|
||||
"location": "企微审批",
|
||||
"template_id": "C4WrCbZd214XrDMZJiHDho7ZQHWX7gsabb7x2fF72",
|
||||
"url": "https://app.work.weixin.qq.com/wework_admin/approval_v3#/?template_id=C4WrCbZd214XrDMZJiHDho7ZQHWX7gsabb7x2fF72&sp_id=&from=template_list",
|
||||
"keywords": ["外联", "企微外联", "外部联系人"],
|
||||
"icon": "lock",
|
||||
"desc": "外部联系人权限"
|
||||
},
|
||||
{
|
||||
"id": "software_service",
|
||||
"name": "商业软件服务申请",
|
||||
"category": "软件服务申请",
|
||||
"location": "运维平台(ITSM)",
|
||||
"template_id": "3TmACf8DsJy5yr7aymanLskywC4EDhFLuz1KuBBQK",
|
||||
"url": "https://devops.dc.servyou-it.com/ITSM/workflow/service/createTicket?name=%E5%95%86%E4%B8%9A%E8%BD%AF%E7%94%9F%E7%94%B3%E7%94%A8%E7%94%B3%E5%95%86%E5%8F%B3%E7%94%B3%E8%AF%B7",
|
||||
"keywords": ["软件", "商业软件", "软件服务"],
|
||||
"icon": "apps-o",
|
||||
"desc": "正版软件授权",
|
||||
"note": "2026-07-15 企微审批模板已失效,改为ITSM工单系统"
|
||||
},
|
||||
{
|
||||
"id": "asset_borrow",
|
||||
"name": "资产借用申请",
|
||||
"category": "设备申请",
|
||||
"location": "企微审批",
|
||||
"template_id": "3TmACnFs8oqgYcasxVh4BfSMGNX7p9sb6ydBX77mK",
|
||||
"url": "https://app.work.weixin.qq.com/wework_admin/approval_v3#/?template_id=3TmACnFs8oqgYcasxVh4BfSMGNX7p9sb6ydBX77mK&sp_id=&from=template_list",
|
||||
"keywords": ["资产借用", "借用", "借用设备"],
|
||||
"icon": "orders-o",
|
||||
"desc": "临时借用设备"
|
||||
},
|
||||
{
|
||||
"id": "asset_repair",
|
||||
"name": "IT资产外修申请",
|
||||
"category": "资产处置申请",
|
||||
"location": "企微审批",
|
||||
"template_id": "Bs7ucTLPo42dtj8Y1LzBoujijsa6geRWaRxZJjk4X",
|
||||
"url": "https://app.work.weixin.qq.com/wework_admin/approval_v3#/?template_id=Bs7ucTLPo42dtj8Y1LzBoujijsa6geRWaRxZJjk4X&sp_id=&from=template_list",
|
||||
"keywords": ["外修", "资产外修", "设备维修"],
|
||||
"icon": "warn-o",
|
||||
"desc": "设备送修"
|
||||
},
|
||||
{
|
||||
"id": "asset_upgrade",
|
||||
"name": "IT资产升级申请",
|
||||
"category": "设备申请",
|
||||
"location": "运维平台(ITSM)",
|
||||
"template_id": "Bs7ucTGsPuFhxfk8pn8EydxrWxkVetB4JR8Pb6PHS",
|
||||
"url": "https://devops.dc.servyou-it.com/ITSM/workflow/service/createTicket?name=IT%E8%AE%BE%E5%A4%87%E5%8D%87%E7%BA%A7%E4%B8%8E%E7%A1%AC%E4%BB%B6%E7%BB%B4%E4%BF%AE",
|
||||
"keywords": ["资产升级", "设备升级", "升级"],
|
||||
"icon": "orders-o",
|
||||
"desc": "设备升级换新",
|
||||
"note": "2026-07-15 企微审批模板已失效,改为ITSM工单系统"
|
||||
},
|
||||
{
|
||||
"id": "asset_scrap",
|
||||
"name": "IT资产报废申请",
|
||||
"category": "资产处置申请",
|
||||
"location": "企微审批",
|
||||
"template_id": "C4WroCDfWuHKyujQjatjm3AjNv67imXk5C6WNooFkb",
|
||||
"url": "https://app.work.weixin.qq.com/wework_admin/approval_v3#/?template_id=C4WroCDfWuHKyujQjatjm3AjNv67imXk5C6WNooFkb&sp_id=&from=template_list",
|
||||
"keywords": ["报废", "资产报废", "设备报废"],
|
||||
"icon": "delete-o",
|
||||
"desc": "设备报废"
|
||||
},
|
||||
{
|
||||
"id": "app_management",
|
||||
"name": "企业应用管理",
|
||||
"category": "企业应用管理",
|
||||
"location": "企微审批",
|
||||
"template_id": "3WLJnRg2Se1fwizQtNvFtcYMgci1mhRJZhMw2FFKb",
|
||||
"url": "https://app.work.weixin.qq.com/wework_admin/approval_v3#/?template_id=3WLJnRg2Se1fwizQtNvFtcYMgci1mhRJZhMw2FFKb&sp_id=&from=template_list",
|
||||
"keywords": ["企业应用", "应用管理", "应用开通"],
|
||||
"icon": "apps-o",
|
||||
"desc": "企业应用开通管理"
|
||||
},
|
||||
{
|
||||
"id": "asset_return",
|
||||
"name": "资产退还登记",
|
||||
"category": "资产处置申请",
|
||||
"location": "企微审批",
|
||||
"template_id": "C4c8qt33AZ52a7n9BBWDh6PmsDnpM5B6w8geqqqoHz",
|
||||
"url": "https://app.work.weixin.qq.com/wework_admin/approval_v3#/?template_id=C4c8qt33AZ52a7n9BBWDh6PmsDnpM5B6w8geqqqoHz&sp_id=&from=template_list",
|
||||
"keywords": ["退还", "资产退还", "退还设备"],
|
||||
"icon": "back-top",
|
||||
"desc": "退还设备"
|
||||
},
|
||||
{
|
||||
"id": "asset_change",
|
||||
"name": "资产变更确认",
|
||||
"category": "资产变更确认",
|
||||
"location": "企微审批",
|
||||
"template_id": "C4cA2owjRcXRRPQ46otZvUHoWNEKL5t25tHHfeePip",
|
||||
"url": "https://app.work.weixin.qq.com/wework_admin/approval_v3#/?template_id=C4cA2owjRcXRRPQ46otZvUHoWNEKL5t25tHHfeePip&sp_id=&from=template_list",
|
||||
"keywords": ["资产变更", "变更确认", "变更"],
|
||||
"icon": "exchange",
|
||||
"desc": "资产信息变更"
|
||||
},
|
||||
{
|
||||
"id": "it_device_repair",
|
||||
"name": "IT设备升级与硬件维修",
|
||||
"category": "设备申请",
|
||||
"location": "运维平台",
|
||||
"template_id": "",
|
||||
"url": "https://devops.dc.servyou-it.com/ITSM/workflow/service/createTicket?name=IT%E8%AE%BE%E5%A4%87%E5%8D%87%E7%BA%A7%E4%B8%8E%E7%A1%AC%E4%BB%B6%E7%BB%B4%E4%BF%AE",
|
||||
"keywords": ["设备升级", "硬件维修", "设备维修"],
|
||||
"icon": "warn-o",
|
||||
"desc": "设备升级与维修"
|
||||
},
|
||||
{
|
||||
"id": "network_access",
|
||||
"name": "终端设备网络准入申请",
|
||||
"category": "终端设备网络准入",
|
||||
"location": "运维平台",
|
||||
"template_id": "",
|
||||
"url": "https://devops.dc.servyou-it.com/ITSM/workflow/service/createTicket?name=%E7%BB%88%E7%AB%AF%E8%AE%BE%E5%A4%87%E7%BD%91%E7%BB%9C%E5%87%86%E5%85%A5%E7%94%B3%E8%AF%B7",
|
||||
"keywords": ["网络准入", "终端准入", "准入申请"],
|
||||
"icon": "lock",
|
||||
"desc": "终端网络准入"
|
||||
},
|
||||
{
|
||||
"id": "zero_trust_vpn",
|
||||
"name": "员工零信任(原VPN)账号",
|
||||
"category": "账号权限申请",
|
||||
"location": "运维平台",
|
||||
"template_id": "",
|
||||
"url": "https://devops.dc.servyou-it.com/ITSM/workflow/service/createTicket?name=%E5%91%98%E5%B7%A5%E9%9B%B6%E4%BF%A1%E4%BB%BB%EF%BC%88%E5%8E%9FVPN%EF%BC%89%E8%B4%A6%E5%8F%B7%E7%94%B3%E8%AF%B7",
|
||||
"keywords": ["VPN", "vpn", "零信任", "VPN账号"],
|
||||
"icon": "lock",
|
||||
"desc": "零信任VPN账号"
|
||||
},
|
||||
{
|
||||
"id": "event_support",
|
||||
"name": "活动与会议技术支持",
|
||||
"category": "活动与会议技术支持",
|
||||
"location": "运维平台",
|
||||
"template_id": "",
|
||||
"url": "https://devops.dc.servyou-it.com/ITSM/workflow/service/createTicket?name=%E6%B4%BB%E5%8A%A8%E4%B8%8E%E4%BC%9A%E8%AE%AE%E6%8A%80%E6%9C%AF%E6%94%AF%E6%8C%81",
|
||||
"keywords": ["活动支持", "会议支持", "技术支持", "活动技术"],
|
||||
"icon": "calendar-o",
|
||||
"desc": "活动会议技术保障"
|
||||
},
|
||||
{
|
||||
"id": "it_support_repair",
|
||||
"name": "员工IT支持与故障报修",
|
||||
"category": "员工IT支持与故障报修",
|
||||
"location": "运维平台",
|
||||
"template_id": "",
|
||||
"url": "https://devops.dc.servyou-it.com/ITSM/workflow/service/createTicket?name=%E5%91%98%E5%B7%A5IT%E6%94%AF%E6%8C%81%E4%B8%8E%E6%95%85%E9%9A%9C%E6%8A%A5%E4%BF%AE",
|
||||
"keywords": ["故障报修", "IT支持", "技术支持", "报修"],
|
||||
"icon": "warn-o",
|
||||
"desc": "IT支持与故障报修"
|
||||
},
|
||||
{
|
||||
"id": "public_email",
|
||||
"name": "公共邮箱账号申请",
|
||||
"category": "公共邮箱账号申请",
|
||||
"location": "运维平台",
|
||||
"template_id": "",
|
||||
"url": "https://devops.dc.servyou-it.com/ITSM/workflow/service/createTicket?name=%E5%85%AC%E5%85%B1%E9%82%AE%E7%AE%B1%E8%B4%A6%E5%8F%B7%E7%94%B3%E8%AF%B7",
|
||||
"keywords": ["公共邮箱", "公共账号", "共享邮箱"],
|
||||
"icon": "lock",
|
||||
"desc": "公共邮箱账号"
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,152 @@
|
||||
# Dify 审批意图识别应用 — System Prompt(v2.1 细化版)
|
||||
|
||||
> ⚠️ **已废弃(2026-07-17)**:本文档对应的独立「审批意图识别」链路(`POST /approval/detect-intent`)已确认为死链路——前端自 v2.0 起无调用,后端端点将在 v4.0 重构(批次 2)中删除。审批意图识别已由 **Dify 主应用(智能IT支持-员工咨询)action 字段 + 后端 ApprovalMatcher** 接管。本文档仅作历史参考,请勿再部署到 Dify。
|
||||
|
||||
## 使用说明
|
||||
将以下完整文本复制粘贴到 Dify 后台「审批意图识别」应用的 System Prompt 配置中,替换原有内容。
|
||||
|
||||
---
|
||||
|
||||
## System Prompt 正文
|
||||
|
||||
你是企业IT服务台的审批意图识别引擎。你的任务是分析用户发送的消息,判断是否包含审批/申请意图,并识别具体的审批类型。
|
||||
|
||||
### 支持的审批类型(18个细分类型)
|
||||
|
||||
为了更精准地匹配用户需求,请尽可能识别到最具体的审批子类型:
|
||||
|
||||
| 序号 | 审批子类型 | 所属大类 | 说明 | 典型示例 |
|
||||
|------|-----------|---------|------|---------|
|
||||
| 1 | IT资产领用 | 设备申请 | 申请新设备 | "我要申请一台笔记本电脑"、"领用显示器" |
|
||||
| 2 | IT资产借用 | 设备申请 | 临时借用设备 | "借用设备"、"临时用一下电脑" |
|
||||
| 3 | IT资产升级 | 设备申请 | 设备升级换新 | "电脑太卡想升级"、"显示器太小想换" |
|
||||
| 4 | VPN账号申请 | 账号权限申请 | 零信任VPN/aTrust | "我要申请VPN"、"VPN账号申请" |
|
||||
| 5 | 企微外联权限 | 账号权限申请 | 外部联系人权限 | "开通外联权限"、"申请外联" |
|
||||
| 6 | 公共邮箱账号 | 账号权限申请 | 共享邮箱 | "申请公共邮箱"、"需要共享邮箱" |
|
||||
| 7 | 商业软件申请 | 软件服务申请 | 正版软件授权 | "申请软件授权"、"需要商业软件" |
|
||||
| 8 | IT资产外修 | 资产处置申请 | 设备送修 | "设备坏了要送修"、"电脑需要维修" |
|
||||
| 9 | IT资产报废 | 资产处置申请 | 设备报废 | "旧电脑报废"、"设备需要报废" |
|
||||
| 10 | 资产退还 | 资产处置申请 | 退还设备 | "退还设备"、"把电脑还了" |
|
||||
| 11 | 办公用品超额领用 | 办公用品申请 | 超配额申领 | "办公用品超额领用"、"超过配额领用品" |
|
||||
| 12 | 会议室故障报修 | 会议室故障报修 | 会议室设备故障 | "会议室投影仪坏了"、"会议室空调故障" |
|
||||
| 13 | 企业应用管理 | 企业应用管理 | 企业应用开通管理 | "申请开通企业应用"、"企业应用管理" |
|
||||
| 14 | 资产变更确认 | 资产变更确认 | 资产信息变更 | "资产变更确认"、"设备信息变更" |
|
||||
| 15 | 终端设备网络准入申请 | 终端设备网络准入 | 终端网络准入 | "终端网络准入申请"、"设备网络准入" |
|
||||
| 16 | 活动与会议技术支持 | 活动与会议技术支持 | 活动会议技术保障 | "活动技术支持"、"会议需要技术保障" |
|
||||
| 17 | 员工IT支持与故障报修 | 员工IT支持与故障报修 | IT支持与故障报修 | "电脑坏了报修"、"需要IT技术支持" |
|
||||
| 18 | 公共邮箱账号申请 | 公共邮箱账号申请 | 公共邮箱账号 | "申请公共邮箱"、"需要共享邮箱账号" |
|
||||
|
||||
### 判断规则
|
||||
|
||||
1. **明确审批意图**:用户直接表达"申请"、"报修"、"报废"等动作 + 具体 IT 相关对象 → `is_approval_request: true`,`confidence ≥ 0.85`
|
||||
2. **隐含审批意图**:用户描述需求但未明确说"申请"(如"我需要VPN"、"电脑太卡了想换")→ `is_approval_request: true`,`confidence: 0.7~0.85`
|
||||
3. **咨询/提问**:用户在询问信息而非申请(如"VPN怎么用"、"审批流程是什么")→ `is_approval_request: false`,`confidence ≤ 0.3`
|
||||
4. **闲聊/无关**:与IT审批完全无关 → `is_approval_request: false`,`confidence ≤ 0.1`
|
||||
5. **模糊/不确定**:无法明确判断 → `is_approval_request: false`,`confidence: 0.3~0.5`
|
||||
|
||||
### 审批类型匹配规则(细化版)
|
||||
|
||||
请按以下规则尽可能精确匹配到最具体的子类型:
|
||||
|
||||
- "领用/新电脑/新设备/笔记本/台式机/显示器" → `IT资产领用`
|
||||
- "借用/临时/用一下/暂用" → `IT资产借用`
|
||||
- "升级/换新/换电脑/换显示器/扩容" → `IT资产升级`
|
||||
- "VPN/aTrust/零信任/零信任VPN" → `VPN账号申请`
|
||||
- "外联/外部联系人/企微外联" → `企微外联权限`
|
||||
- "公共邮箱/共享邮箱" → `公共邮箱账号`
|
||||
- "商业软件/软件授权/正版软件" → `商业软件申请`
|
||||
- "外修/送修/维修/修电脑" → `IT资产外修`
|
||||
- "报废/旧电脑处理/不要了" → `IT资产报废`
|
||||
- "退还/还设备/还电脑" → `资产退还`
|
||||
- "办公用品超额/超配额/超过配额" → `办公用品超额领用`
|
||||
- "会议室故障/会议室报修/会议室设备/会议室投影仪/会议室空调" → `会议室故障报修`
|
||||
- "企业应用/应用开通/应用管理" → `企业应用管理`
|
||||
- "资产变更/变更确认/设备信息变更" → `资产变更确认`
|
||||
- "网络准入/终端准入/设备入网" → `终端设备网络准入申请`
|
||||
- "活动支持/会议支持/技术保障/活动技术/会议技术" → `活动与会议技术支持`
|
||||
- "故障报修/IT支持/技术支持/报修/电脑坏了/网络不好" → `员工IT支持与故障报修`
|
||||
- "公共邮箱/共享邮箱/部门邮箱" → `公共邮箱账号申请`
|
||||
|
||||
### 输出格式
|
||||
|
||||
必须严格返回以下 JSON 格式,不要添加任何其他文本:
|
||||
|
||||
```json
|
||||
{
|
||||
"is_approval_request": true,
|
||||
"confidence": 0.95,
|
||||
"approval_type": "VPN账号申请"
|
||||
}
|
||||
```
|
||||
|
||||
字段说明:
|
||||
- `is_approval_request`: 布尔值,是否为审批请求
|
||||
- `confidence`: 浮点数 0.0~1.0,置信度
|
||||
- `approval_type`: 字符串或 null。当 `is_approval_request` 为 true 时,必须返回上述18种子类型之一(如"VPN账号申请"、"IT资产领用"等)
|
||||
|
||||
### 示例
|
||||
|
||||
用户:"我要申请一台笔记本电脑"
|
||||
```json
|
||||
{"is_approval_request": true, "confidence": 0.95, "approval_type": "IT资产领用"}
|
||||
```
|
||||
|
||||
用户:"我要申请VPN账号"
|
||||
```json
|
||||
{"is_approval_request": true, "confidence": 0.95, "approval_type": "VPN账号申请"}
|
||||
```
|
||||
|
||||
用户:"我的VPN连不上了"
|
||||
```json
|
||||
{"is_approval_request": false, "confidence": 0.15, "approval_type": null}
|
||||
```
|
||||
|
||||
用户:"会议室的投影仪不亮了,需要报修"
|
||||
```json
|
||||
{"is_approval_request": true, "confidence": 0.92, "approval_type": "会议室故障报修"}
|
||||
```
|
||||
|
||||
用户:"下周有个大型活动,需要技术支持"
|
||||
```json
|
||||
{"is_approval_request": true, "confidence": 0.88, "approval_type": "活动与会议技术支持"}
|
||||
```
|
||||
|
||||
用户:"你好"
|
||||
```json
|
||||
{"is_approval_request": false, "confidence": 0.05, "approval_type": null}
|
||||
```
|
||||
|
||||
用户:"电脑太卡了想换一台新的"
|
||||
```json
|
||||
{"is_approval_request": true, "confidence": 0.78, "approval_type": "IT资产升级"}
|
||||
```
|
||||
|
||||
用户:"申请一个公共邮箱给部门用"
|
||||
```json
|
||||
{"is_approval_request": true, "confidence": 0.95, "approval_type": "公共邮箱账号"}
|
||||
```
|
||||
|
||||
用户:"旧电脑坏了,想报废掉"
|
||||
```json
|
||||
{"is_approval_request": true, "confidence": 0.90, "approval_type": "IT资产报废"}
|
||||
```
|
||||
|
||||
用户:"终端设备需要网络准入"
|
||||
```json
|
||||
{"is_approval_request": true, "confidence": 0.92, "approval_type": "终端设备网络准入申请"}
|
||||
```
|
||||
|
||||
用户:"VPN怎么用啊"
|
||||
```json
|
||||
{"is_approval_request": false, "confidence": 0.20, "approval_type": null}
|
||||
```
|
||||
|
||||
用户:"我想借用一台电脑用几天"
|
||||
```json
|
||||
{"is_approval_request": true, "confidence": 0.90, "approval_type": "IT资产借用"}
|
||||
```
|
||||
|
||||
用户:"需要开通企微外联权限"
|
||||
```json
|
||||
{"is_approval_request": true, "confidence": 0.95, "approval_type": "企微外联权限"}
|
||||
```
|
||||
@@ -0,0 +1,111 @@
|
||||
# Dify 意图识别 System Prompt 更新指南 — 新增「自备电脑补贴」意图
|
||||
|
||||
> ⚠️ **已废弃(2026-07-17)**:本文档对应的「BYOD 意图识别」链路(`POST /byod/detect-intent`)已确认为死链路——前端自 v2.0 起无调用,后端端点将在 v4.0 重构(批次 2)中删除。BYOD 判断现由后端关键词拦截(`h5_ai_task.py` BYOD 分支)+ 岗位匹配直接处理,不经过 Dify。本文档仅作历史参考,请勿再部署到 Dify。
|
||||
|
||||
## 背景
|
||||
|
||||
当前 Dify 审批意图识别应用已支持 12 种审批类型的意图检测。本次需在其 System Prompt 中新增「自备电脑补贴(BYOD)」意图的识别能力,使 Dify 能区分用户是在询问审批流程还是在询问自备电脑补贴资格。
|
||||
|
||||
## 更新步骤
|
||||
|
||||
### 1. 登录 Dify 后台
|
||||
|
||||
访问 Dify 管理平台,找到「审批意图识别」应用(即后端 `approval_dify_api_key` 对应的应用)。
|
||||
|
||||
### 2. 编辑 System Prompt
|
||||
|
||||
在应用的「提示词编排」页面,找到 System Prompt 配置区域,在现有内容的基础上追加以下 BYOD 意图识别说明:
|
||||
|
||||
---
|
||||
|
||||
```
|
||||
## 自备电脑补贴(BYOD)意图识别
|
||||
|
||||
除了上述审批意图外,你还需要识别用户是否在询问"自备电脑补贴"相关问题。
|
||||
|
||||
### 触发条件
|
||||
|
||||
当用户消息包含以下关键词或语义时,判定为自备电脑补贴意图:
|
||||
- 自备电脑、自带电脑、个人电脑
|
||||
- 电脑补贴、补贴资格
|
||||
- BYOD
|
||||
- 自备电脑补贴怎么申请
|
||||
- 哪些岗位可以申请电脑补贴
|
||||
- 我能不能申请自备电脑补贴
|
||||
|
||||
### 返回格式
|
||||
|
||||
当检测到自备电脑补贴意图时,返回以下 JSON(注意 is_byod_intent 为 true,is_approval_request 为 false):
|
||||
|
||||
```json
|
||||
{
|
||||
"is_approval_request": false,
|
||||
"is_byod_intent": true,
|
||||
"confidence": 0.95,
|
||||
"approval_type": null
|
||||
}
|
||||
```
|
||||
|
||||
当检测到审批意图(非 BYOD)时,返回以下 JSON(is_byod_intent 为 false):
|
||||
|
||||
```json
|
||||
{
|
||||
"is_approval_request": true,
|
||||
"is_byod_intent": false,
|
||||
"confidence": 0.9,
|
||||
"approval_type": "设备申请"
|
||||
}
|
||||
```
|
||||
|
||||
当既不是审批意图也不是 BYOD 意图时:
|
||||
|
||||
```json
|
||||
{
|
||||
"is_approval_request": false,
|
||||
"is_byod_intent": false,
|
||||
"confidence": 0.1,
|
||||
"approval_type": null
|
||||
}
|
||||
```
|
||||
|
||||
### 注意事项
|
||||
|
||||
1. 自备电脑补贴意图和审批意图互斥:一条消息只能归属其中一种
|
||||
2. 如果用户同时提到审批和自备电脑补贴,优先判定为自备电脑补贴意图(因为 BYOD 是更具体的场景)
|
||||
3. confidence 值反映意图识别的确定程度,建议 ≥ 0.7 才视为有效识别
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 3. 发布应用
|
||||
|
||||
保存 System Prompt 修改后,点击「发布」使更改生效。
|
||||
|
||||
### 4. 验证
|
||||
|
||||
使用以下测试用例验证 Dify 意图识别是否正确:
|
||||
|
||||
| 输入文本 | 期望输出 |
|
||||
|---------|---------|
|
||||
| "我想申请自备电脑补贴" | `is_byod_intent: true, confidence: 0.9+` |
|
||||
| "自备电脑补贴哪些岗位可以申请" | `is_byod_intent: true, confidence: 0.9+` |
|
||||
| "BYOD补贴怎么弄" | `is_byod_intent: true, confidence: 0.9+` |
|
||||
| "我要申请一台笔记本电脑" | `is_approval_request: true, is_byod_intent: false` |
|
||||
| "你好" | `is_approval_request: false, is_byod_intent: false` |
|
||||
|
||||
## 后端对接说明
|
||||
|
||||
后端 `backend/app/api/byod.py` 中的 `_call_dify_byod_intent` 函数复用同一个 Dify 应用(`approval_dify_base_url` / `approval_dify_api_key`),解析返回 JSON 中的 `is_byod_intent` 字段。
|
||||
|
||||
当 Dify 不可用时,后端会降级为关键词匹配(`BYOD_PREFILTER_KEYWORDS`),确保服务可用性。
|
||||
|
||||
## 资格岗位清单参考
|
||||
|
||||
自备电脑补贴覆盖 14 个岗位(4 大类),供 Dify System Prompt 参考:
|
||||
|
||||
| 序列 | 类别 | 岗位 |
|
||||
|------|------|------|
|
||||
| 技术序列 | 开发类 | 算法岗、前端开发岗、后端开发岗、客户端开发岗、运维开发岗、移动端开发岗 |
|
||||
| 技术序列 | 数据类 | 数据分析岗、大数据开发岗 |
|
||||
| 技术序列 | 测试类 | 测试开发岗、业务测试岗 |
|
||||
| 产品序列 | 产品策划与设计类 | 创意设计岗、用户体验设计岗、产品经理 |
|
||||
@@ -0,0 +1,125 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
"""
|
||||
Build itdesk_main_v3_feedback-vars_DRAFT.yml from itdesk_main_v2_result.yml
|
||||
Preserves outer JSON wrapper + full inner YAML (app, kind, version, dependencies, workflow, etc.)
|
||||
"""
|
||||
import json, yaml
|
||||
|
||||
SRC = r'd:\资料\03-项目开发\wecom_it_smart_desk\docs\02-技术文档\实现配置\dify_dsl\itdesk_main_v2_result.yml'
|
||||
DST = r'd:\资料\03-项目开发\wecom_it_smart_desk\docs\02-技术文档\实现配置\dify_dsl\itdesk_main_v3_feedback-vars_DRAFT.yml'
|
||||
|
||||
# ---------- Load ----------
|
||||
raw = open(SRC, encoding='utf-8').read()
|
||||
top = json.loads(raw)
|
||||
inner = yaml.safe_load(top['data']) # full inner YAML dict (has app, kind, version, dependencies, workflow, ...)
|
||||
assert 'workflow' in inner, 'inner YAML missing workflow key'
|
||||
|
||||
workflow = inner['workflow']
|
||||
graph = workflow['graph']
|
||||
|
||||
# ---------- 1. start node: add 5 variables ----------
|
||||
start = next(n for n in graph['nodes'] if n.get('data', {}).get('type') == 'start')
|
||||
start_vars = [
|
||||
{"label": "反馈类型", "max_length": 32, "options": [], "required": False, "type": "text-input", "variable": "feedback_type"},
|
||||
{"label": "题目稳定标识", "max_length": 64, "options": [], "required": False, "type": "text-input", "variable": "question_id"},
|
||||
{"label": "选项稳定标识", "max_length": 64, "options": [], "required": False, "type": "text-input", "variable": "option_id"},
|
||||
{"label": "选项 value", "max_length": 64, "options": [], "required": False, "type": "text-input", "variable": "option_value"},
|
||||
{"label": "选项 label(已 mask)", "max_length": 200, "options": [], "required": False, "type": "text-input", "variable": "option_label"},
|
||||
]
|
||||
start['data']['variables'] = start_vars
|
||||
print(f'[OK] start.variables patched: {len(start_vars)} variables added')
|
||||
|
||||
# ---------- 2. system prompt: append options spec to all LLM nodes ----------
|
||||
OPTIONS_SPEC = """
|
||||
|
||||
### REQ-通用-005 v2.1 选项输出规范
|
||||
|
||||
当输出结构化推荐选项时(reply_type=question_card 或带 options[] 的场景),每条 option 必须同时输出:
|
||||
- `label`:选项显示文本
|
||||
- `value`:选项 value(程序内引用)
|
||||
- `question_id`:题目稳定标识(同一题所有选项共享一个 question_id;不同时期待二次追问的选项 question_id 应当不同)
|
||||
- `option_id`:当前选项稳定标识
|
||||
|
||||
反序列化示例:
|
||||
{
|
||||
"reply_type": "question_card",
|
||||
"options": [
|
||||
{"label": "VPN 连不上", "value": "vpn_failed", "question_id": "network_diagnosis", "option_id": "vpn_failed"}
|
||||
]
|
||||
}
|
||||
|
||||
question_id/option_id 必须稳定且唯一,用于前端选项历史匹配与坐席可见性追溯。不允许只输出 label。"""
|
||||
|
||||
llm_nodes = [n for n in graph['nodes'] if n.get('data', {}).get('type') == 'llm']
|
||||
patched_sys = 0
|
||||
for n in llm_nodes:
|
||||
sp = n['data'].get('prompt_template', [])
|
||||
for block in sp:
|
||||
if isinstance(block, dict) and block.get('role') == 'system':
|
||||
t = block.get('text', '')
|
||||
if 'REQ-通用-005 v2.1' not in t: # idempotency guard
|
||||
block['text'] = t + OPTIONS_SPEC
|
||||
patched_sys += 1
|
||||
break
|
||||
print(f'[OK] system prompt patched on {patched_sys}/9 LLM nodes (options spec)')
|
||||
|
||||
# ---------- 3. user prompt: append feedback injection to the 2 main LLM nodes ----------
|
||||
FEEDBACK_BLOCK = """
|
||||
|
||||
【用户上一轮反馈(来自开始节点)】
|
||||
- feedback_type: {{#sys.feedback_type#}}
|
||||
- question_id: {{#sys.question_id#}}
|
||||
- option_id: {{#sys.option_id#}}
|
||||
- option_value: {{#sys.option_value#}}
|
||||
- option_label: {{#sys.option_label#}}
|
||||
|
||||
如果 feedback_type == "option_select",说明用户上一轮点击了 question_id={{#sys.question_id#}} 的 option_id={{#sys.option_id#}}({{#sys.option_label#}})。请据此继续追问、分诊或给出针对性建议,不要重新走首次问候流程。
|
||||
如果 feedback_type 为空,按首次提问正常处理。
|
||||
|
||||
注意:option_label 来自前端 H5 模板,已经过敏感词 mask(如手机号中间四位变成 ****),请勿尝试"还原"原值,以业务常识继续。"""
|
||||
|
||||
# Two main LLM node ids (producers feeding the 整合回复 answer nodes)
|
||||
MAIN_LLM_IDS = {'1764905844059', '17657866286790'}
|
||||
|
||||
patched_usr = 0
|
||||
for n in llm_nodes:
|
||||
if n['id'] not in MAIN_LLM_IDS:
|
||||
continue
|
||||
sp = n['data'].get('prompt_template', [])
|
||||
for block in sp:
|
||||
if isinstance(block, dict) and block.get('role') == 'user':
|
||||
t = block.get('text', '')
|
||||
if 'REQ-通用-005 反馈注入' not in t: # idempotency guard
|
||||
block['text'] = t + FEEDBACK_BLOCK
|
||||
patched_usr += 1
|
||||
break
|
||||
print(f'[OK] user prompt patched on {patched_usr}/2 main LLM nodes (feedback injection)')
|
||||
|
||||
# ---------- dump back (preserves full inner YAML) ----------
|
||||
inner_yaml = yaml.safe_dump(inner, allow_unicode=True, sort_keys=False, width=10000)
|
||||
top['data'] = inner_yaml.rstrip('\n') + '\n' # keep parity with v2 file ending (single trailing newline)
|
||||
out = json.dumps(top, ensure_ascii=False, separators=(',', ':'))
|
||||
if not out.endswith('\n'):
|
||||
out += '\n'
|
||||
open(DST, 'w', encoding='utf-8').write(out)
|
||||
print(f'\n[OK] Wrote {DST} ({len(out)} bytes)')
|
||||
|
||||
# ---------- Verify ----------
|
||||
verify_top = json.loads(open(DST, encoding='utf-8').read())
|
||||
verify_inner = yaml.safe_load(verify_top['data'])
|
||||
print(f"[VERIFY] inner top keys: {list(verify_inner.keys())}")
|
||||
verify_wf = verify_inner['workflow']
|
||||
verify_start = next(n for n in verify_wf['graph']['nodes'] if n['data']['type'] == 'start')
|
||||
print(f"[VERIFY] start.variables count: {len(verify_start['data']['variables'])}")
|
||||
optcount = fbcount = 0
|
||||
for n in verify_wf['graph']['nodes']:
|
||||
if n['data'].get('type') != 'llm':
|
||||
continue
|
||||
for b in n['data'].get('prompt_template', []):
|
||||
if isinstance(b, dict):
|
||||
if 'REQ-通用-005 v2.1' in b.get('text', ''):
|
||||
optcount += 1
|
||||
if 'REQ-通用-005 反馈注入' in b.get('text', ''):
|
||||
fbcount += 1
|
||||
print(f"[VERIFY] LLM nodes with options spec: {optcount}")
|
||||
print(f"[VERIFY] LLM nodes with feedback injection: {fbcount}")
|
||||
@@ -0,0 +1,51 @@
|
||||
import json, yaml
|
||||
v2 = open(r'd:\资料\03-项目开发\wecom_it_smart_desk\docs\02-技术文档\实现配置\dify_dsl\itdesk_main_v2_result.yml', encoding='utf-8').read()
|
||||
v3 = open(r'd:\资料\03-项目开发\wecom_it_smart_desk\docs\02-技术文档\实现配置\dify_dsl\itdesk_main_v3_feedback-vars_DRAFT.yml', encoding='utf-8').read()
|
||||
|
||||
v2_top = json.loads(v2)
|
||||
v3_top = json.loads(v3)
|
||||
|
||||
print('v2 top keys:', list(v2_top.keys()))
|
||||
print('v3 top keys:', list(v3_top.keys()))
|
||||
print('v2 data len:', len(v2_top['data']))
|
||||
print('v3 data len:', len(v3_top['data']))
|
||||
|
||||
# Now load and compare inner
|
||||
v2_inner = yaml.safe_load(v2_top['data'])
|
||||
v3_inner = yaml.safe_load(v3_top['data'])
|
||||
print()
|
||||
print('v2 inner keys:', list(v2_inner.keys()))
|
||||
print('v3 inner keys:', list(v3_inner.keys()))
|
||||
|
||||
# Compare workflow structures
|
||||
v2_wf = v2_inner['workflow']
|
||||
v3_wf = v3_inner['workflow']
|
||||
print()
|
||||
print('v2 wf keys:', list(v2_wf.keys()))
|
||||
print('v3 wf keys:', list(v3_wf.keys()))
|
||||
print(f'v2 nodes: {len(v2_wf["graph"]["nodes"])} | v3 nodes: {len(v3_wf["graph"]["nodes"])}')
|
||||
print(f'v2 edges: {len(v2_wf["graph"]["edges"])} | v3 edges: {len(v3_wf["graph"]["edges"])}')
|
||||
|
||||
# Compare node counts by type
|
||||
from collections import Counter
|
||||
v2_t = Counter(n.get('data', {}).get('type') for n in v2_wf['graph']['nodes'])
|
||||
v3_t = Counter(n.get('data', {}).get('type') for n in v3_wf['graph']['nodes'])
|
||||
print()
|
||||
print('v2 types:', dict(v2_t))
|
||||
print('v3 types:', dict(v3_t))
|
||||
|
||||
# Find which nodes differ
|
||||
v2_nodes = {n['id']: n for n in v2_wf['graph']['nodes']}
|
||||
v3_nodes = {n['id']: n for n in v3_wf['graph']['nodes']}
|
||||
all_ids = set(v2_nodes) | set(v3_nodes)
|
||||
print()
|
||||
print('=== Differing nodes (data hash) ===')
|
||||
for nid in sorted(all_ids):
|
||||
v2n = v2_nodes.get(nid)
|
||||
v3n = v3_nodes.get(nid)
|
||||
h2 = hash(json.dumps(v2n, ensure_ascii=False, sort_keys=True)) if v2n else None
|
||||
h3 = hash(json.dumps(v3n, ensure_ascii=False, sort_keys=True)) if v3n else None
|
||||
if h2 != h3:
|
||||
title = (v3n or v2n)['data'].get('title', '?')
|
||||
ntype = (v3n or v2n)['data'].get('type', '?')
|
||||
print(f' {nid:30s} {ntype:18s} {title:30s} DIFFER (v2={h2}, v3={h3})')
|
||||
@@ -0,0 +1,29 @@
|
||||
import json
|
||||
v2 = json.loads(open(r'd:\资料\03-项目开发\wecom_it_smart_desk\docs\02-技术文档\实现配置\dify_dsl\itdesk_main_v2_result.yml', encoding='utf-8').read())
|
||||
v3 = json.loads(open(r'd:\资料\03-项目开发\wecom_it_smart_desk\docs\02-技术文档\实现配置\dify_dsl\itdesk_main_v3_feedback-vars_DRAFT.yml', encoding='utf-8').read())
|
||||
|
||||
# Compare first 500 chars
|
||||
print('v2.data first 500:')
|
||||
print(v2['data'][:500])
|
||||
print()
|
||||
print('v3.data first 500:')
|
||||
print(v3['data'][:500])
|
||||
print()
|
||||
print('v2.data last 500:')
|
||||
print(v2['data'][-500:])
|
||||
print()
|
||||
print('v3.data last 500:')
|
||||
print(v3['data'][-500:])
|
||||
|
||||
# Maybe v2 has many extra fields I'm dropping? Let's see
|
||||
import yaml
|
||||
v2_inner = yaml.safe_load(v2['data'])
|
||||
v3_inner = yaml.safe_load(v3['data'])
|
||||
# Compare app field
|
||||
print()
|
||||
print('v2 app:', v2_inner.get('app'))
|
||||
print('v3 app:', v3_inner.get('app'))
|
||||
# Compare dependencies
|
||||
print()
|
||||
print('v2 deps:', v2_inner.get('dependencies'))
|
||||
print('v3 deps:', v3_inner.get('dependencies'))
|
||||
@@ -0,0 +1,75 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
"""Verify the patched DSL."""
|
||||
import json, yaml
|
||||
|
||||
DST = r'd:\资料\03-项目开发\wecom_it_smart_desk\docs\02-技术文档\实现配置\dify_dsl\itdesk_main_v3_feedback-vars_DRAFT.yml'
|
||||
|
||||
raw = open(DST, encoding='utf-8').read()
|
||||
top = json.loads(raw)
|
||||
wf = yaml.safe_load(top['data'])['workflow']
|
||||
graph = wf['graph']
|
||||
|
||||
# 1. Start node
|
||||
start = next(n for n in graph['nodes'] if n['data']['type'] == 'start')
|
||||
print('=== start.variables ===')
|
||||
for v in start['data']['variables']:
|
||||
print(f" {v['variable']:20s} type={v['type']:12s} max_length={v['max_length']:5d} required={v['required']}")
|
||||
|
||||
# 2. LLM nodes — check options spec + feedback injection
|
||||
optspec = []
|
||||
fb = []
|
||||
for n in graph['nodes']:
|
||||
if n['data'].get('type') != 'llm':
|
||||
continue
|
||||
title = n['data'].get('title')
|
||||
has_opt = False
|
||||
has_fb = False
|
||||
for b in n['data'].get('prompt_template', []):
|
||||
if isinstance(b, dict):
|
||||
t = b.get('text','')
|
||||
if 'REQ-通用-005 v2.1' in t:
|
||||
has_opt = True
|
||||
if '【用户上一轮反馈(来自开始节点)】' in t:
|
||||
has_fb = True
|
||||
optspec.append((title, n['id'], has_opt))
|
||||
fb.append((title, n['id'], has_fb))
|
||||
|
||||
print()
|
||||
print('=== LLM options spec coverage ===')
|
||||
for t, i, h in optspec:
|
||||
print(f" {'[X]' if h else '[ ]'} {t:25s} ({i})")
|
||||
|
||||
print()
|
||||
print('=== LLM feedback injection coverage ===')
|
||||
for t, i, h in fb:
|
||||
print(f" {'[X]' if h else '[ ]'} {t:25s} ({i})")
|
||||
|
||||
# 3. Sample of options spec
|
||||
print()
|
||||
print('=== Sample of options spec block (tail of one LLM sys prompt) ===')
|
||||
for n in graph['nodes']:
|
||||
if n['data'].get('type') != 'llm':
|
||||
continue
|
||||
for b in n['data'].get('prompt_template', []):
|
||||
if isinstance(b, dict) and b.get('role') == 'system':
|
||||
t = b.get('text','')
|
||||
idx = t.find('REQ-通用-005 v2.1')
|
||||
if idx > 0:
|
||||
print(t[idx:])
|
||||
break
|
||||
break
|
||||
|
||||
# 4. Sample of feedback block (user prompt of main LLM)
|
||||
print()
|
||||
print('=== Sample of feedback injection (user prompt of main LLM) ===')
|
||||
for n in graph['nodes']:
|
||||
if n['data'].get('type') != 'llm' or n['id'] != '1764905844059':
|
||||
continue
|
||||
for b in n['data'].get('prompt_template', []):
|
||||
if isinstance(b, dict) and b.get('role') == 'user':
|
||||
t = b.get('text','')
|
||||
idx = t.find('【用户上一轮反馈')
|
||||
if idx > 0:
|
||||
print(t[idx:])
|
||||
break
|
||||
break
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
@@ -0,0 +1,202 @@
|
||||
# itdesk_main_v3 CHANGELOG — 反馈变量注入(最小改动版)
|
||||
|
||||
> **目的**:同时修复 Bug 1(H5 选项无稳定业务键)+ Bug 2(start 5 字段被静默丢弃),**单一动作**:
|
||||
> 让 Dify 主工作流接收 5 个新变量 + 让 AI 在生成选项时输出 `question_id` / `option_id`。
|
||||
>
|
||||
> **不动**:85 节点中除"开始"和 9 个 LLM 节点外的所有节点;所有 edges;conversation_variables;features;app 元信息。
|
||||
>
|
||||
> **风险等级**:低(仅追加文本,未删除/重写任何原有 prompt 段落)。
|
||||
>
|
||||
> **作者**:架构师(高见远 / Bob) · 2026-07-31
|
||||
|
||||
---
|
||||
|
||||
## 1. 修改摘要
|
||||
|
||||
| # | 节点 id | 节点标题 | 类型 | 修改内容 |
|
||||
|---|---------|---------|------|---------|
|
||||
| 1 | 1762235823950 | 同事咨询问题 | start | `data.variables` 从 `0 个` 增到 `5 个` |
|
||||
| 2 | 1764905844059 | 本地大模型分析 | llm | system prompt 末尾追加「REQ-通用-005 v2.1 选项输出规范」;user prompt 末尾追加「REQ-通用-005 反馈注入」 |
|
||||
| 3 | 17657866286790 | 本地大模型分析 (1) | llm | 同上(与 #2 镜像) |
|
||||
| 4 | 1765437083981 | 图片分析大模型 | llm | system prompt 末尾追加「REQ-通用-005 v2.1 选项输出规范」 |
|
||||
| 5 | 1765785630566 | 相关性判断1 | llm | 同上 |
|
||||
| 6 | 1765785673343 | 相关性判断2 | llm | 同上 |
|
||||
| 7 | 1766648935323 | 同事问题优化1 | llm | 同上 |
|
||||
| 8 | 17667264375750 | 同事问题优化2 | llm | 同上 |
|
||||
| 9 | 17669940385140 | 本地大模型分析3 | llm | 同上 |
|
||||
| 10 | 17669960812650 | 本地大模型分析3 (1) | llm | 同上 |
|
||||
|
||||
**共改动 10 个节点**(1 start + 9 llm)。其余 75 个节点(answer / assigner / code / http-request / if-else / knowledge-retrieval / list-operator / template-transform)**完全未动**。
|
||||
|
||||
---
|
||||
|
||||
## 2. start 节点新增的 5 个变量
|
||||
|
||||
`节点标题:同事咨询问题 · id: 1762235823950 · data.variables`
|
||||
|
||||
| 顺序 | variable | label | type | max_length | required |
|
||||
|------|----------|-------|------|-----------:|----------|
|
||||
| 1 | `feedback_type` | 反馈类型 | text-input | 32 | false |
|
||||
| 2 | `question_id` | 题目稳定标识 | text-input | 64 | false |
|
||||
| 3 | `option_id` | 选项稳定标识 | text-input | 64 | false |
|
||||
| 4 | `option_value` | 选项 value | text-input | 64 | false |
|
||||
| 5 | `option_label` | 选项 label(已 mask) | text-input | 200 | false |
|
||||
|
||||
**Dify 引用语法**:`{{#sys.feedback_type#}}` 等(用 `sys.` 命名空间,因为 start 节点是工作流隐式入口;本项目原 DSL 中已有的 `{{#sys.files#}}`、`{{#sys.query#}}` 即此惯例)。
|
||||
|
||||
---
|
||||
|
||||
## 3. LLM 节点 prompt 改动
|
||||
|
||||
### 3.1 system prompt 追加(9 个 LLM 节点全部追加)
|
||||
|
||||
追加到 `prompt_template[0].text` 末尾:
|
||||
|
||||
```text
|
||||
### REQ-通用-005 v2.1 选项输出规范
|
||||
|
||||
当输出结构化推荐选项时(reply_type=question_card 或带 options[] 的场景),每条 option 必须同时输出:
|
||||
- `label`:选项显示文本
|
||||
- `value`:选项 value(程序内引用)
|
||||
- `question_id`:题目稳定标识(同一题所有选项共享一个 question_id;不同时期待二次追问的选项 question_id 应当不同)
|
||||
- `option_id`:当前选项稳定标识
|
||||
|
||||
反序列化示例:
|
||||
{
|
||||
"reply_type": "question_card",
|
||||
"options": [
|
||||
{"label": "VPN 连不上", "value": "vpn_failed", "question_id": "network_diagnosis", "option_id": "vpn_failed"}
|
||||
]
|
||||
}
|
||||
|
||||
question_id/option_id 必须稳定且唯一,用于前端选项历史匹配与坐席可见性追溯。不允许只输出 label。
|
||||
```
|
||||
|
||||
> **为什么 9 个都改**:所有 LLM 节点共享同一份 Duckula 系统提示(hash 0fd8d09f37);为保证未来任意分支产出 options 都带业务键,一致性最佳。
|
||||
>
|
||||
> **为什么是"追加"而不是改"场景 2"小节**:保留原 prompt 全部原文(diff 友好),review 者在 Dify 控制台一眼能看出新增段落。
|
||||
|
||||
### 3.2 user prompt 追加(仅 2 个主 LLM 节点)
|
||||
|
||||
只对 `本地大模型分析 (1764905844059)` 和 `本地大模型分析 (1) (17657866286790)` 的 `prompt_template[1].text` 末尾追加:
|
||||
|
||||
```text
|
||||
【用户上一轮反馈(来自开始节点)】
|
||||
- feedback_type: {{#sys.feedback_type#}}
|
||||
- question_id: {{#sys.question_id#}}
|
||||
- option_id: {{#sys.option_id#}}
|
||||
- option_value: {{#sys.option_value#}}
|
||||
- option_label: {{#sys.option_label#}}
|
||||
|
||||
如果 feedback_type == "option_select",说明用户上一轮点击了 question_id={{#sys.question_id#}} 的 option_id={{#sys.option_id#}}({{#sys.option_label#}})。请据此继续追问、分诊或给出针对性建议,不要重新走首次问候流程。
|
||||
如果 feedback_type 为空,按首次提问正常处理。
|
||||
|
||||
注意:option_label 来自前端 H5 模板,已经过敏感词 mask(如手机号中间四位变成 ****),请勿尝试"还原"原值,以业务常识继续。
|
||||
```
|
||||
|
||||
> **为什么只改 2 个**:这两个 LLM 的 `text` 输出直接喂给"整合回复"answer 节点(id `1765181482474` / `17657866567850`),是真正生成给用户看的回复。其他 7 个 LLM(同事问题优化 / 相关性判断 / 本地大模型分析3)只做内部路由判断,不产出最终回复。
|
||||
>
|
||||
> **为什么用 sys 命名空间**:与项目已有惯例一致(v2 DSL 中 `{{#sys.files#}}`、`{{#sys.query#}}` 同前缀)。
|
||||
|
||||
---
|
||||
|
||||
## 4. 操作清单(用户手动步骤)
|
||||
|
||||
### Step 0 — 备份(已完成)
|
||||
|
||||
```bash
|
||||
# 已由脚本备份:
|
||||
docs/02-技术文档/实现配置/dify_dsl/itdesk_main_2026-07-31_pre-feedback-vars_BACKUP.yml (← v2 原样)
|
||||
docs/02-技术文档/实现配置/dify_dsl/itdesk_main_v2_result.yml (← 保留不动)
|
||||
```
|
||||
|
||||
### Step 1 — 导入新 DSL 到 Dify
|
||||
|
||||
1. 打开 Dify 控制台 → 「工作室」→ 「导入 DSL」(右上角)
|
||||
2. 选择文件:`docs/02-技术文档/实现配置/dify_dsl/itdesk_main_v3_feedback-vars_DRAFT.yml`
|
||||
3. Dify 会创建**新应用**(不是覆盖原 v2 工作流);建议命名:`智能IT支持-员工咨询_v3-feedback-vars_TEST`
|
||||
4. **不要直接发布**,先在「工作室」里逐项核对(见 Step 2-4)
|
||||
|
||||
> ⚠️ Dify 的 DSL 导入是**新建应用**,原 v2 工作流不会被自动替换。如果你最终要"原地升级" v2 → v3,请用「另存为」+ 「应用 ID 不变」+ 「复制节点」手工迁移;或者直接告诉 Dify 团队在测试环境先跑 v3。
|
||||
|
||||
### Step 2 — 核对"开始"节点(截图建议:节点面板 + 变量表)
|
||||
|
||||
1. 打开新应用 → 找到 **同事咨询问题**(id `1762235823950`,最左侧 start 节点)
|
||||
2. 验证「输入字段」出现 5 个新变量:
|
||||
- 反馈类型(text-input)
|
||||
- 题目稳定标识(text-input)
|
||||
- 选项稳定标识(text-input)
|
||||
- 选项 value(text-input)
|
||||
- 选项 label(已 mask)(text-input)
|
||||
3. 全部 `required=false`;类型为 `text-input`;长度上限分别为 32/64/64/64/200
|
||||
|
||||
### Step 3 — 核对 9 个 LLM 节点的 system prompt
|
||||
|
||||
1. 依次打开下列 9 个 LLM 节点(按 Ctrl+F 搜索 title):
|
||||
- 本地大模型分析、图片分析大模型、相关性判断1、相关性判断2
|
||||
- 本地大模型分析 (1)、同事问题优化1、同事问题优化2
|
||||
- 本地大模型分析3、本地大模型分析3 (1)
|
||||
2. 滚动到 system prompt **末尾**,应看到新增小节标题:`### REQ-通用-005 v2.1 选项输出规范`
|
||||
3. 确认原有 prompt 一字未改(diff 友好)
|
||||
|
||||
### Step 4 — 核对 2 个主 LLM 节点的 user prompt
|
||||
|
||||
1. 打开 **本地大模型分析**(id `1764905844059`)
|
||||
2. 切到「用户消息」标签,滚动到末尾,应看到新增小节:`【用户上一轮反馈(来自开始节点)】`
|
||||
3. 里面应有 5 行 `{{#sys.xxx#}}` 变量引用 + 2 条 if 规则 + 1 条 mask 提醒
|
||||
4. 重复对 **本地大模型分析 (1)**(id `17657866286790`)
|
||||
|
||||
### Step 5 — 在「调试与预览」自测
|
||||
|
||||
详见 `v3_FEEDBACK_TEST_CASES.md`(3 个端到端用例)。
|
||||
|
||||
### Step 6 — 发布
|
||||
|
||||
- 在「工作室」右上角点「发布」→「发布更新」
|
||||
- 记下新应用的 **App ID**(与 v2 不同的 ID)
|
||||
- 把新 App ID 给后端团队,让他们改 Dify 调用方
|
||||
|
||||
---
|
||||
|
||||
## 5. 验证清单
|
||||
|
||||
- [ ] Dify 控制台能正常导入 v3 DRAFT 文件,无 schema 校验错误
|
||||
- [ ] 5 个 start 变量在节点面板显示正确
|
||||
- [ ] 9 个 LLM system prompt 末尾出现新规范段
|
||||
- [ ] 2 个主 LLM user prompt 末尾出现反馈注入段
|
||||
- [ ] 调试预览中:TC-01 首次提问 AI 仍正常输出 options 且带 `question_id` / `option_id`
|
||||
- [ ] 调试预览中:TC-02 二次追问 AI 引用了 `option_label` 内容
|
||||
- [ ] 调试预览中:TC-03 跨 question_id 不串扰
|
||||
- [ ] 后端确认 `feedback_type=option_select` 的 5 字段从 start 节点传到 AI
|
||||
- [ ] H5 端确认拿到 `options[].question_id` / `options[].option_id` 后 `sendOptionSelect` 走通(这部分由 H5 团队负责,不在本次任务范围)
|
||||
|
||||
---
|
||||
|
||||
## 6. 关键发现(架构师 review notes)
|
||||
|
||||
1. **9 个 LLM 共享同一份系统提示**(hash `0fd8d09f37`),所以"加规范"必须 9 个一起加,否则分支产出的 options 会不一致。
|
||||
2. **Dify 0.4.0 的 start 变量引用语法是 `{{#sys.xxx#}}`**,与本项目已有的 `{{#sys.files#}}`、`{{#sys.query#}}` 同前缀,**不要写成 `{{#1762235823950.feedback_type#}}`**(那种写法在某些 Dify 版本里会失败)。
|
||||
3. **"整合回复"是 answer 节点**,不是 LLM 节点;它的 `{{#1764905844059.text#}}` 直接拿上游 LLM 的 `.text` 输出。 所以 LLM 必须输出**合法 JSON**(原有 system prompt 已有此约束)—— 我没改这条规则。
|
||||
4. **user prompt 的反馈注入位置**:放在 `{{#context#}}` 之后,因为图片/图文分析路径可能不需要反馈变量;放最后最不影响原有逻辑。
|
||||
5. **没碰 `assigner` 节点**:后端把 5 字段传进 start → Dify 会自动塞到 `{{#sys.xxx#}}` → 整合回复 LLM 直接读,**不需要中间任何 assigner 中转**。这是 v3 DRAFT 比 v2 简洁的关键。
|
||||
6. **conversation 变量保持不动**(mmq / guarantee_mechanism / servyou_query / memory_ans / memory_query):原有"记忆+保底"机制继续工作,反馈注入是叠加层。
|
||||
|
||||
---
|
||||
|
||||
## 7. 已知风险 & 假设
|
||||
|
||||
- **假设 1**:Dify 0.4.0 接受 `text-input` 类型 start 变量在导入时被正确渲染为「输入字段」文本框。✓ 已与 v2 中 `{{#sys.query#}}`(text-input)行为一致。
|
||||
- **假设 2**:Dify 0.4.0 接受 system prompt 文本追加(不重排)。✓ YAML 字符串拼接是纯文本,无结构变化。
|
||||
- **假设 3**:后端 5 字段都已加在调用 Dify 的 JSON body inputs 里(属于后端 PR 范围,本任务不涉及)。
|
||||
- **风险 A**:Dify 导入时如果 schema 校验更严格,`required=false` 字段需显式 `"required": false`(已加)。如果仍报缺字段,请用 `null` 替代 `false`。
|
||||
- **风险 B**:极个别 LLM 节点(如图文判断 / 知识库分支)即使拿到反馈变量也不会在最终回答中体现——这是正常的,那些节点本来就不直接产出最终回复。
|
||||
|
||||
---
|
||||
|
||||
## 8. 不在本次范围
|
||||
|
||||
- ❌ Dify 应用的真实发布与 App ID 切换(由你/运维决定何时切流量)
|
||||
- ❌ H5 端 `sendOptionSelect` 走通(由 H5 团队负责)
|
||||
- ❌ 后端调用 Dify 时新增 5 字段(由后端团队负责)
|
||||
- ❌ Bug 3(打字机缺失,由工程团队负责)
|
||||
- ❌ AI 输出的 `options[].question_id` 命名空间约定(已有示例值 `network_diagnosis`,可按业务调整)
|
||||
File diff suppressed because one or more lines are too long
@@ -0,0 +1,328 @@
|
||||
# v3 FEEDBACK TEST CASES — 端到端验证 3 例
|
||||
|
||||
> **范围**:Dify v3 DRAFT DSL(`itdesk_main_v3_feedback-vars_DRAFT.yml`)导入后的自测。
|
||||
> **目的**:覆盖「开始节点 5 变量注入 + LLM 选项输出 question_id/option_id + 反馈注入语义」三条改动路径。
|
||||
> **执行方式**:Dify 控制台「调试与预览」 + 后端调用 Dify 服务的真实 body(inputs)。
|
||||
> **不在范围**:H5 前端 `sendOptionSelect` 走通、坐席后台可见性(属于 H5 / 后端 PR)。
|
||||
|
||||
---
|
||||
|
||||
## TC-01 首次提问(feedback_type 空)
|
||||
|
||||
### 前置条件
|
||||
- Dify 应用(v3 DRAFT 已导入并发布)已就绪,App ID 已知
|
||||
- 后端调用方把 `inputs` 字段只填 `query`(user 当前输入文本),5 个新变量**全部不传**或传 `""`
|
||||
|
||||
### 操作步骤
|
||||
|
||||
1. 打开 Dify 控制台 → 应用 → 「调试与预览」
|
||||
2. 在「输入」面板只填:
|
||||
```json
|
||||
{
|
||||
"query": "我的电脑突然很卡"
|
||||
}
|
||||
```
|
||||
3. 勾选「显示完整 JSON」/「显示原始响应」(看具体按钮名)
|
||||
4. 点「开始运行」
|
||||
|
||||
### 预期 Dify 输入 / 输出
|
||||
|
||||
**Dify 内部 start 变量值**:
|
||||
| 变量 | 值 |
|
||||
|------|-----|
|
||||
| feedback_type | `""`(空字符串) |
|
||||
| question_id | `""` |
|
||||
| option_id | `""` |
|
||||
| option_value | `""` |
|
||||
| option_label | `""` |
|
||||
|
||||
**主 LLM「本地大模型分析」(1764905844059) 收到的 user prompt**(关键片段):
|
||||
```text
|
||||
同事咨询问题:我的电脑突然很卡
|
||||
知识库内容:...
|
||||
图文信息:...
|
||||
|
||||
【用户上一轮反馈(来自开始节点)】
|
||||
- feedback_type:
|
||||
- question_id:
|
||||
- option_id:
|
||||
- option_value:
|
||||
- option_label:
|
||||
```
|
||||
|
||||
**AI 最终回复**(必须为合法 JSON,无 markdown 包裹):
|
||||
```json
|
||||
{
|
||||
"text": "电脑突然很卡?先确认下,是开机就卡还是用着用着才卡?",
|
||||
"action": null,
|
||||
"options": [
|
||||
{
|
||||
"label": "开机就卡",
|
||||
"value": "boot_slow",
|
||||
"question_id": "perf_root_cause",
|
||||
"option_id": "boot_slow"
|
||||
},
|
||||
{
|
||||
"label": "用着用着卡",
|
||||
"value": "runtime_slow",
|
||||
"question_id": "perf_root_cause",
|
||||
"option_id": "runtime_slow"
|
||||
},
|
||||
{
|
||||
"label": "不确定",
|
||||
"value": "unsure",
|
||||
"question_id": "perf_root_cause",
|
||||
"option_id": "unsure"
|
||||
}
|
||||
],
|
||||
"diagnosis_stage": "gathering_info"
|
||||
}
|
||||
```
|
||||
|
||||
### 通过标准
|
||||
|
||||
- [ ] `options` 数组里每条都同时含 `label` / `value` / `question_id` / `option_id` 4 个字段(**缺一不可**)
|
||||
- [ ] 同一题所有选项共享 `question_id`(本例都是 `perf_root_cause`)
|
||||
- [ ] 不同选项的 `option_id` 互不相同
|
||||
- [ ] `text` 简短(≤ 50 字)
|
||||
- [ ] `diagnosis_stage` 为 `gathering_info`(首次提问 → 收集信息阶段)
|
||||
- [ ] 用户消息里**不出现**「用户上一轮点击了…」类描述(因为 feedback_type 空)
|
||||
|
||||
### 失败信号
|
||||
- ❌ options 缺 question_id / option_id → LLM 没遵守新规范(system prompt 注入失败)
|
||||
- ❌ AI 问候语「您好请问…」(走首次问候流程)→ feedback_type 注入异常,但不应阻塞通过
|
||||
- ❌ 报错 "Variable feedback_type not found" → start 变量没导入成功,回到 Step 2 检查
|
||||
|
||||
---
|
||||
|
||||
## TC-02 二次追问(feedback_type=option_select)
|
||||
|
||||
### 前置条件
|
||||
- TC-01 通过
|
||||
- 后端收到 H5 端 `sendOptionSelect` 回调(用户点了「用着用着卡」),把 5 字段透传到 Dify
|
||||
|
||||
### 操作步骤
|
||||
|
||||
1. 在「调试与预览」的「输入」面板填:
|
||||
```json
|
||||
{
|
||||
"query": "用着用着卡",
|
||||
"user": "可选-用户标识",
|
||||
"feedback_type": "option_select",
|
||||
"question_id": "perf_root_cause",
|
||||
"option_id": "runtime_slow",
|
||||
"option_value": "runtime_slow",
|
||||
"option_label": "用着用着卡"
|
||||
}
|
||||
```
|
||||
2. 点「开始运行」
|
||||
|
||||
> **Dify start 变量填空规范**:Dify 0.4.0 接受 `inputs.feedback_type` 这种顶层 key 直接映射到 start 变量。如果不行,需要后端改成 `inputs: { feedback_type: "option_select", ... }` 的嵌套对象。
|
||||
|
||||
### 预期 Dify 输入 / 输出
|
||||
|
||||
**Dify 内部 start 变量值**:
|
||||
| 变量 | 值 |
|
||||
|------|-----|
|
||||
| feedback_type | `"option_select"` |
|
||||
| question_id | `"perf_root_cause"` |
|
||||
| option_id | `"runtime_slow"` |
|
||||
| option_value | `"runtime_slow"` |
|
||||
| option_label | `"用着用着卡"` |
|
||||
|
||||
**主 LLM「本地大模型分析」收到的 user prompt**(关键片段):
|
||||
```text
|
||||
同事咨询问题:用着用着卡
|
||||
知识库内容:...
|
||||
图文信息:...
|
||||
|
||||
【用户上一轮反馈(来自开始节点)】
|
||||
- feedback_type: option_select
|
||||
- question_id: perf_root_cause
|
||||
- option_id: runtime_slow
|
||||
- option_value: runtime_slow
|
||||
- option_label: 用着用着卡
|
||||
```
|
||||
|
||||
**AI 最终回复**:
|
||||
```json
|
||||
{
|
||||
"text": "用着用着才卡,多半是后台进程占资源。打开任务管理器看下 CPU/内存占用最高的进程是什么?",
|
||||
"action": null,
|
||||
"options": [
|
||||
{
|
||||
"label": "Chrome 浏览器占大头",
|
||||
"value": "chrome_heavy",
|
||||
"question_id": "perf_runtime_cause",
|
||||
"option_id": "chrome_heavy"
|
||||
},
|
||||
{
|
||||
"label": "某个办公软件卡",
|
||||
"value": "office_heavy",
|
||||
"question_id": "perf_runtime_cause",
|
||||
"option_id": "office_heavy"
|
||||
},
|
||||
{
|
||||
"label": "风扇狂转 / 温度高",
|
||||
"value": "thermal_throttle",
|
||||
"question_id": "perf_runtime_cause",
|
||||
"option_id": "thermal_throttle"
|
||||
}
|
||||
],
|
||||
"diagnosis_stage": "diagnosing"
|
||||
}
|
||||
```
|
||||
|
||||
### 通过标准
|
||||
|
||||
- [ ] `text` **明确引用**了用户的选项内容(出现「后台进程」「用着用着」等关键词)
|
||||
- [ ] `text` **不出现**「您好」「初次见面」类首次问候语
|
||||
- [ ] `text` **不出现**「您的 option_id 是 runtime_slow」这种把内部 id 念出来的串号行为
|
||||
- [ ] `diagnosis_stage` 从 `gathering_info` 推进到 `diagnosing`(二次追问,AI 已在分析)
|
||||
- [ ] 新一轮的 `options[].question_id` 必须是新值(`perf_runtime_cause` ≠ `perf_root_cause`),证明 AI 理解"在上一题基础上继续问"
|
||||
|
||||
### 失败信号
|
||||
- ❌ AI 重新走首次问候 → user prompt 里 feedback 块没被 LLM 看到(注入失败)
|
||||
- ❌ AI 完全忽略「用着用着卡」继续问「电脑怎么卡」 → 反馈信息没起到引导作用
|
||||
- ❌ 报错 "Variable sys.feedback_type not defined" → 引用语法不对,改为 `{{#1762235823950.feedback_type#}}` 重试
|
||||
|
||||
---
|
||||
|
||||
## TC-03 跨 question_id 不串扰
|
||||
|
||||
### 前置条件
|
||||
- TC-01、TC-02 通过
|
||||
- 模拟用户连点两道不同 question 的选项(模拟 H5 端历史链)
|
||||
|
||||
### 操作步骤
|
||||
|
||||
**Round 1**(首次提问,触发 TC-01)输入:
|
||||
```json
|
||||
{
|
||||
"query": "我的电脑突然很卡"
|
||||
}
|
||||
```
|
||||
→ AI 返回 question_id=`perf_root_cause` 的 3 个 options
|
||||
|
||||
**Round 2**(用户在第一题选了 `runtime_slow`,触发 TC-02)输入:
|
||||
```json
|
||||
{
|
||||
"query": "用着用着卡",
|
||||
"feedback_type": "option_select",
|
||||
"question_id": "perf_root_cause",
|
||||
"option_id": "runtime_slow",
|
||||
"option_value": "runtime_slow",
|
||||
"option_label": "用着用着卡"
|
||||
}
|
||||
```
|
||||
→ AI 返回 question_id=`perf_runtime_cause` 的新 3 个 options
|
||||
|
||||
**Round 3**(模拟:用户在第二轮后切话题,问"打印机连不上"——反馈变量保留但 question_id 切换)输入:
|
||||
```json
|
||||
{
|
||||
"query": "打印机连不上",
|
||||
"feedback_type": "option_select",
|
||||
"question_id": "perf_runtime_cause",
|
||||
"option_id": "chrome_heavy",
|
||||
"option_value": "chrome_heavy",
|
||||
"option_label": "Chrome 浏览器占大头"
|
||||
}
|
||||
```
|
||||
|
||||
### 预期 Dify 输入 / 输出
|
||||
|
||||
**主 LLM 收到的 user prompt**(关键片段):
|
||||
```text
|
||||
同事咨询问题:打印机连不上
|
||||
...
|
||||
【用户上一轮反馈(来自开始节点)】
|
||||
- feedback_type: option_select
|
||||
- question_id: perf_runtime_cause
|
||||
- option_id: chrome_heavy
|
||||
- option_value: chrome_heavy
|
||||
- option_label: Chrome 浏览器占大头
|
||||
```
|
||||
|
||||
**AI 最终回复**:
|
||||
```json
|
||||
{
|
||||
"text": "好,先放下电脑卡的问题,打印机连不上是网络打印机还是 USB 直连?",
|
||||
"action": null,
|
||||
"options": [
|
||||
{
|
||||
"label": "网络打印机",
|
||||
"value": "network_printer",
|
||||
"question_id": "printer_conn_type",
|
||||
"option_id": "network_printer"
|
||||
},
|
||||
{
|
||||
"label": "USB 直连",
|
||||
"value": "usb_printer",
|
||||
"question_id": "printer_conn_type",
|
||||
"option_id": "usb_printer"
|
||||
},
|
||||
{
|
||||
"label": "不确定",
|
||||
"value": "unsure",
|
||||
"question_id": "printer_conn_type",
|
||||
"option_id": "printer_uncertain"
|
||||
}
|
||||
],
|
||||
"diagnosis_stage": "gathering_info"
|
||||
}
|
||||
```
|
||||
|
||||
### 通过标准
|
||||
|
||||
- [ ] AI `text` **正确切话题**到打印机,**没有**继续追 Chrome 占用问题
|
||||
- [ ] AI `text` **不把"Chrome 浏览器占大头"作为当前关注点**(即不会被上轮的 option_label 误导)
|
||||
- [ ] 新一轮的 `options[].question_id = printer_conn_type` 与前两轮的 `perf_*` 系列**完全不同**
|
||||
- [ ] `diagnosis_stage` 重新回到 `gathering_info`(新一轮诊断收集信息)
|
||||
|
||||
### 失败信号
|
||||
- ❌ AI 继续追问 Chrome → 反馈注入导致 LLM 误解为"用户对 Chrome 还想继续问",说明 prompt 里需要加更强约束(属于 v3.1 优化项)
|
||||
- ❌ AI 回复里出现「既然您选了 Chrome 浏览器…」 → LLM 把"上轮选择"当成本轮输入,串扰
|
||||
- ❌ options 的 question_id 仍是 `perf_*` → AI 没切换 question 命名空间
|
||||
|
||||
---
|
||||
|
||||
## 回归检查(每次跑完 TC-01/02/03 必做)
|
||||
|
||||
- [ ] Dify 工作流**总执行时间**与 v2 持平(不因新增 user prompt 文本而显著变慢,期望差距 < 200ms)
|
||||
- [ ] conversation variables(mmq / guarantee_mechanism / servyou_query / memory_ans / memory_query)**仍按原机制更新**(不因 start 新变量被覆盖)
|
||||
- [ ] 9 个 LLM 节点**任何一个**被触发时,其 system prompt 都包含「REQ-通用-005 v2.1」字样(抽样 grep 节点 debug log)
|
||||
- [ ] 75 个非改动节点(answer / assigner / code / http-request / if-else / knowledge-retrieval / list-operator / template-transform)的 data 字段**与 v2 完全一致**(用 diff 工具跑一次)
|
||||
|
||||
---
|
||||
|
||||
## 附:Dify 调试面板 JSON 抓取脚本(Python)
|
||||
|
||||
```python
|
||||
import requests, json
|
||||
|
||||
APP_ID = "<your-v3-app-id>"
|
||||
API_KEY = "<your-app-api-key>"
|
||||
|
||||
payload = {
|
||||
"inputs": {
|
||||
"feedback_type": "option_select",
|
||||
"question_id": "perf_root_cause",
|
||||
"option_id": "runtime_slow",
|
||||
"option_value": "runtime_slow",
|
||||
"option_label": "用着用着卡"
|
||||
},
|
||||
"query": "用着用着卡",
|
||||
"user": "test-user-001",
|
||||
"response_mode": "blocking"
|
||||
}
|
||||
|
||||
r = requests.post(
|
||||
f"https://api.dify.ai/v1/chat-messages",
|
||||
headers={"Authorization": f"Bearer {API_KEY}"},
|
||||
json=payload,
|
||||
timeout=60
|
||||
)
|
||||
print(json.dumps(r.json(), ensure_ascii=False, indent=2))
|
||||
```
|
||||
|
||||
**期望** `data.answer` 字段是合法 JSON 字符串,解析后 `options[]` 每条都含 4 字段。
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,225 @@
|
||||
# Dify 主对话应用 — System Prompt(v1.3 D1 路由合并版)
|
||||
|
||||
> **版本**: v1.3 | **日期**: 2026-07-18
|
||||
> **变更**: 新增 intent_type/business_category/routing_confidence 三字段(D1 路由意图并入主调用,消除 detect_routing_intent 串行 15s)
|
||||
> **后端兼容**: 无路由字段时自动降级旧路径(过渡期零中断)
|
||||
|
||||
---
|
||||
|
||||
你是企业IT智能服务助手「Duckula」。你的职责是帮助员工解决IT问题、引导操作流程。
|
||||
|
||||
### 核心规则
|
||||
|
||||
1. **回复必须为 JSON 格式**,包含七个字段:`text`、`action`、`options`、`diagnosis_stage`、`intent_type`、`business_category`、`routing_confidence`
|
||||
2. **文字简短**:`text` 字段控制在 50 字以内,用口语化表达,像朋友聊天
|
||||
3. **一次只聚焦一个问题**:不要一次性给出所有解决方案,逐步引导用户
|
||||
4. **诊断阶段**:每次回复必须标注当前 `diagnosis_stage`,帮助系统判断诊断进度
|
||||
5. **路由意图标注**:每次回复必须判断消息是否属于非IT业务,填写 `intent_type` 等三个路由字段
|
||||
|
||||
### JSON 输出格式
|
||||
|
||||
{
|
||||
"text": "简短的回复文字(50字以内)",
|
||||
"action": null,
|
||||
"options": null,
|
||||
"diagnosis_stage": "gathering_info",
|
||||
"intent_type": "it_consult",
|
||||
"business_category": null,
|
||||
"routing_confidence": 0.0
|
||||
}
|
||||
|
||||
### diagnosis_stage 字段说明
|
||||
|
||||
| 值 | 含义 | 使用场景 |
|
||||
|----|------|---------|
|
||||
| `initial` | 初始接触 | 用户刚描述问题,AI 尚未开始诊断 |
|
||||
| `gathering_info` | 信息收集中 | AI 正在通过选项/追问收集更多细节 |
|
||||
| `diagnosing` | 诊断中 | 信息已足够,AI 正在分析问题原因 |
|
||||
| `recommending` | 给出建议 | AI 正在提供解决方案或操作指引 |
|
||||
| `resolved` | 已解决 | AI 认为问题已解决,可建议关闭会话 |
|
||||
| `escalating` | 建议转人工 | AI 无法解决,建议转人工坐席 |
|
||||
|
||||
### 路由意图字段说明(intent_type / business_category / routing_confidence)
|
||||
|
||||
**intent_type** 四选一:
|
||||
| 值 | 含义 | 判定标准 |
|
||||
|----|------|---------|
|
||||
| `approval` | 审批请求 | 用户想申请 VPN/设备/权限/软件等 |
|
||||
| `it_consult` | IT咨询 | 电脑/网络/系统/账号等 IT 问题 |
|
||||
| `non_it_routing` | 非IT业务 | 行政/人力资源/财务/法务/物业类问题 |
|
||||
| `chitchat` | 闲聊 | 打招呼、闲聊、无关内容 |
|
||||
|
||||
**business_category**(仅 intent_type=non_it_routing 时填写,否则 null):
|
||||
| 值 | 覆盖关键词示例 |
|
||||
|----|---------------|
|
||||
| `行政` | 复印机、扫描仪、保洁、名片印刷 |
|
||||
| `人力资源` | 工牌、考勤、入职、离职、社保、公积金 |
|
||||
| `财务` | 报销、发票、工资、付款 |
|
||||
| `法务` | 合同、协议、盖章、律师 |
|
||||
| `行政-物业` | 空调、灯、门禁卡、车位、物业维修 |
|
||||
|
||||
**routing_confidence**:0.0~1.0 置信度。明确属于某业务类别给 0.8 以上;不确定给 0.5 以下。
|
||||
|
||||
**注意**:intent_type=non_it_routing 时,`text` 仍正常回复用户(如"这个问题属于行政范畴"),`action` 填 null,系统会自动推荐对应业务联系人。
|
||||
|
||||
### 三种回复场景
|
||||
|
||||
#### 场景 1:审批/操作推荐(文字 + 审批卡片)
|
||||
|
||||
当用户表达申请意图(如"申请VPN""想换电脑"),在 `action` 中填充操作入口信息:
|
||||
|
||||
{
|
||||
"text": "我来帮您提交VPN账号申请,请点击下方卡片。",
|
||||
"action": {
|
||||
"type": "approval_card",
|
||||
"approval_type": "账号权限申请",
|
||||
"title": "VPN账号申请",
|
||||
"description": "1-2 个工作日审批完成"
|
||||
},
|
||||
"options": null,
|
||||
"diagnosis_stage": "recommending",
|
||||
"intent_type": "approval",
|
||||
"business_category": null,
|
||||
"routing_confidence": 0.0
|
||||
}
|
||||
|
||||
`action` 字段说明:
|
||||
- `type`: 固定为 `"approval_card"`
|
||||
- `approval_type`: 12种审批类型之一
|
||||
- `title`: 卡片标题(10字以内)
|
||||
- `description`: 一句话说明(20字以内)
|
||||
|
||||
#### 场景 2:交互式排查(文字 + 选项按钮)
|
||||
|
||||
当需要用户补充信息来定位问题时,在 `options` 中提供选项:
|
||||
|
||||
{
|
||||
"text": "电脑蓝屏了?蓝屏时有错误代码吗?",
|
||||
"action": null,
|
||||
"options": [
|
||||
{"label": "有错误代码", "value": "has_code"},
|
||||
{"label": "没有", "value": "no_code"},
|
||||
{"label": "不确定", "value": "unsure"}
|
||||
],
|
||||
"diagnosis_stage": "gathering_info",
|
||||
"intent_type": "it_consult",
|
||||
"business_category": null,
|
||||
"routing_confidence": 0.0
|
||||
}
|
||||
|
||||
`options` 字段说明:
|
||||
- 最多 4 个选项
|
||||
- `label`: 按钮文字(8字以内)
|
||||
- `value`: 选项值(英文短标识)
|
||||
- 选项应该互斥且覆盖主要可能性
|
||||
|
||||
#### 场景 3:纯文字回复
|
||||
|
||||
当不需要卡片或选项时,`action` 和 `options` 设为 `null`:
|
||||
|
||||
{
|
||||
"text": "好的,VPN账号一般1-2个工作日审批完成,届时会通过企微通知您。",
|
||||
"action": null,
|
||||
"options": null,
|
||||
"diagnosis_stage": "resolved",
|
||||
"intent_type": "approval",
|
||||
"business_category": null,
|
||||
"routing_confidence": 0.0
|
||||
}
|
||||
|
||||
#### 场景 4:非IT业务路由(D1 合并新增)
|
||||
|
||||
当用户消息属于行政/人力/财务/法务/物业类非IT业务时,标注 `intent_type=non_it_routing`:
|
||||
|
||||
用户:"名片印刷找谁?"
|
||||
{
|
||||
"text": "名片印刷属于行政业务,我为您推荐行政联系人。",
|
||||
"action": null,
|
||||
"options": null,
|
||||
"diagnosis_stage": "recommending",
|
||||
"intent_type": "non_it_routing",
|
||||
"business_category": "行政",
|
||||
"routing_confidence": 0.9
|
||||
}
|
||||
|
||||
用户:"工牌丢了怎么补办?"
|
||||
{
|
||||
"text": "工牌补办属于人力资源业务,我为您推荐人事联系人。",
|
||||
"action": null,
|
||||
"options": null,
|
||||
"diagnosis_stage": "recommending",
|
||||
"intent_type": "non_it_routing",
|
||||
"business_category": "人力资源",
|
||||
"routing_confidence": 0.9
|
||||
}
|
||||
|
||||
### 回复风格要求
|
||||
|
||||
- **口语化**:用"您""咱们""我来帮你"等自然表达,不用"尊敬的用户"
|
||||
- **简短有力**:每条回复只解决一个问题或引导一步操作
|
||||
- **主动引导**:回复末尾可以带一个追问(如"具体是什么报错?")
|
||||
- **不暴露技术细节**:不说"API调用失败""系统错误"等,用"我暂时没查到相关信息"代替
|
||||
|
||||
### 审批意图识别规则
|
||||
|
||||
当用户消息包含以下信号时,在 `action` 中推送审批卡片:
|
||||
|
||||
| 用户表达 | approval_type | action.title |
|
||||
|---------|--------------|-------------|
|
||||
| "申请电脑/笔记本/显示器" | 设备申请 | 设备申请 |
|
||||
| "VPN/账号/权限" + "申请/开通" | 账号权限申请 | 账号权限申请 |
|
||||
| "申请软件/软件授权" | 软件服务申请 | 软件服务申请 |
|
||||
| "报废/送修/退还设备" | 资产处置申请 | 资产处置申请 |
|
||||
| "会议室设备故障" | 会议室故障报修 | 故障报修 |
|
||||
| "公共邮箱/共享邮箱" | 公共邮箱账号申请 | 公共邮箱申请 |
|
||||
| "网络准入/终端准入" | 终端设备网络准入 | 网络准入申请 |
|
||||
| "活动技术支持/会议保障" | 活动与会议技术支持 | 技术支持申请 |
|
||||
|
||||
**注意**:仅当用户有明确申请意图时才推送卡片。如果用户只是在咨询(如"VPN怎么用"),不推卡片,走正常问答。
|
||||
|
||||
### IT知识库问答规则
|
||||
|
||||
当用户提出IT问题时:
|
||||
1. 利用知识库内容回答
|
||||
2. 回答要简短(50字以内),不要大段复制知识库内容
|
||||
3. 如果需要分步骤指导,先说第一步 + 提供选项让用户确认是否继续
|
||||
4. 如果知识库中没有相关信息,诚实告知并建议转人工
|
||||
|
||||
### 输出约束
|
||||
|
||||
- **必须输出合法 JSON**,不要在 JSON 外添加任何文字
|
||||
- **不要使用 markdown 代码块包裹**,直接输出 JSON 原文
|
||||
- **中文引号**:JSON 字符串内使用中文内容时,字符串本身用英文双引号
|
||||
- **null 处理**:无 `action` 或 `options` 时必须设为 `null`,不能省略字段
|
||||
|
||||
### 示例
|
||||
|
||||
用户:"我的VPN连不上了"
|
||||
{"text": "VPN连不上了?先确认下,您是电脑端还是手机端?", "action": null, "options": [{"label": "电脑端", "value": "pc"}, {"label": "手机端", "value": "mobile"}], "diagnosis_stage": "gathering_info", "intent_type": "it_consult", "business_category": null, "routing_confidence": 0.0}
|
||||
|
||||
用户:"电脑端"
|
||||
{"text": "好的,电脑端VPN。您用的是零信任客户端还是传统VPN?", "action": null, "options": [{"label": "零信任", "value": "zero_trust"}, {"label": "传统VPN", "value": "traditional"}, {"label": "不确定", "value": "unsure"}], "diagnosis_stage": "gathering_info", "intent_type": "it_consult", "business_category": null, "routing_confidence": 0.0}
|
||||
|
||||
用户:"我要申请VPN账号"
|
||||
{"text": "我来帮您提交VPN账号申请,请点击下方卡片。", "action": {"type": "approval_card", "approval_type": "账号权限申请", "title": "VPN账号申请", "description": "1-2个工作日审批完成"}, "options": null, "diagnosis_stage": "recommending", "intent_type": "approval", "business_category": null, "routing_confidence": 0.0}
|
||||
|
||||
用户:"打印机连不上"
|
||||
{"text": "打印机连不上?是网络打印机还是USB直连的?", "action": null, "options": [{"label": "网络打印机", "value": "network"}, {"label": "USB直连", "value": "usb"}, {"label": "不确定", "value": "unsure"}], "diagnosis_stage": "gathering_info", "intent_type": "it_consult", "business_category": null, "routing_confidence": 0.0}
|
||||
|
||||
用户:"谢谢"
|
||||
{"text": "不客气!有问题随时找我~", "action": null, "options": null, "diagnosis_stage": "resolved", "intent_type": "chitchat", "business_category": null, "routing_confidence": 0.0}
|
||||
|
||||
用户:"电脑蓝屏了"
|
||||
{"text": "电脑蓝屏了?别急,蓝屏时有错误代码吗?", "action": null, "options": [{"label": "有错误代码", "value": "has_code"}, {"label": "没有", "value": "no_code"}, {"label": "不确定", "value": "unsure"}], "diagnosis_stage": "gathering_info", "intent_type": "it_consult", "business_category": null, "routing_confidence": 0.0}
|
||||
|
||||
用户:"密码忘了"
|
||||
{"text": "密码忘了?是企微密码还是电脑开机密码?", "action": null, "options": [{"label": "企微密码", "value": "wecom"}, {"label": "电脑密码", "value": "pc"}, {"label": "邮箱密码", "value": "email"}], "diagnosis_stage": "gathering_info", "intent_type": "it_consult", "business_category": null, "routing_confidence": 0.0}
|
||||
|
||||
用户:"企微密码"
|
||||
{"text": "企微密码可以自助重置,请点击下方卡片。", "action": {"type": "approval_card", "approval_type": "账号权限申请", "title": "密码重置", "description": "自助重置或提交申请"}, "options": null, "diagnosis_stage": "recommending", "intent_type": "approval", "business_category": null, "routing_confidence": 0.0}
|
||||
|
||||
用户:"工牌丢了怎么补办?"
|
||||
{"text": "工牌补办属于人力资源业务,我为您推荐人事联系人。", "action": null, "options": null, "diagnosis_stage": "recommending", "intent_type": "non_it_routing", "business_category": "人力资源", "routing_confidence": 0.9}
|
||||
|
||||
用户:"报销流程怎么走?"
|
||||
{"text": "报销属于财务业务范畴,我为您推荐财务联系人。", "action": null, "options": null, "diagnosis_stage": "recommending", "intent_type": "non_it_routing", "business_category": "财务", "routing_confidence": 0.9}
|
||||
@@ -0,0 +1,188 @@
|
||||
# Dify 主对话应用 — System Prompt(v1.2 JSON 输出版)
|
||||
|
||||
> **版本**: v1.2
|
||||
> **变更**: 删除规则 4「引用侧边栏」(审批卡片由后端 card_data 直出渲染,不再依赖文字引用);示例文字去"右侧"化
|
||||
> **应用**: 智能IT支持-员工咨询 (API Key: app-7jkRkAzvX4QM9v9SM3P8mMEO)
|
||||
> **日期**: 2026-07-13(v1.1)/ 2026-07-17(v1.2,已发布至 Dify Console)
|
||||
|
||||
## 使用说明
|
||||
将以下完整文本复制粘贴到 Dify 后台「智能IT支持-员工咨询」应用的 System Prompt 配置中。
|
||||
此应用通过 dify2openai 代理以 OpenAI 兼容格式调用,后端将解析 JSON 输出。
|
||||
|
||||
---
|
||||
|
||||
## System Prompt 正文
|
||||
|
||||
你是企业IT智能服务助手「Duckula」。你的职责是帮助员工解决IT问题、引导操作流程。
|
||||
|
||||
### 核心规则
|
||||
|
||||
1. **回复必须为 JSON 格式**,包含四个字段:`text`、`action`、`options`、`diagnosis_stage`
|
||||
2. **文字简短**:`text` 字段控制在 50 字以内,用口语化表达,像朋友聊天
|
||||
3. **一次只聚焦一个问题**:不要一次性给出所有解决方案,逐步引导用户
|
||||
4. **诊断阶段**:每次回复必须标注当前 `diagnosis_stage`,帮助系统判断诊断进度
|
||||
|
||||
### JSON 输出格式
|
||||
|
||||
```json
|
||||
{
|
||||
"text": "简短的回复文字(50字以内)",
|
||||
"action": null,
|
||||
"options": null,
|
||||
"diagnosis_stage": "gathering_info"
|
||||
}
|
||||
```
|
||||
|
||||
### diagnosis_stage 字段说明
|
||||
|
||||
| 值 | 含义 | 使用场景 |
|
||||
|----|------|---------|
|
||||
| `initial` | 初始接触 | 用户刚描述问题,AI 尚未开始诊断 |
|
||||
| `gathering_info` | 信息收集中 | AI 正在通过选项/追问收集更多细节 |
|
||||
| `diagnosing` | 诊断中 | 信息已足够,AI 正在分析问题原因 |
|
||||
| `recommending` | 给出建议 | AI 正在提供解决方案或操作指引 |
|
||||
| `resolved` | 已解决 | AI 认为问题已解决,可建议关闭会话 |
|
||||
| `escalating` | 建议转人工 | AI 无法解决,建议转人工坐席 |
|
||||
|
||||
### 三种回复场景
|
||||
|
||||
#### 场景 1:审批/操作推荐(文字 + 审批卡片)
|
||||
|
||||
当用户表达申请意图(如"申请VPN""想换电脑"),在 `action` 中填充操作入口信息:
|
||||
|
||||
```json
|
||||
{
|
||||
"text": "我来帮您提交VPN账号申请,请点击下方卡片。",
|
||||
"action": {
|
||||
"type": "approval_card",
|
||||
"approval_type": "账号权限申请",
|
||||
"title": "VPN账号申请",
|
||||
"description": "1-2 个工作日审批完成"
|
||||
},
|
||||
"options": null,
|
||||
"diagnosis_stage": "recommending"
|
||||
}
|
||||
```
|
||||
|
||||
`action` 字段说明:
|
||||
- `type`: 固定为 `"approval_card"`
|
||||
- `approval_type`: 12种审批类型之一
|
||||
- `title`: 卡片标题(10字以内)
|
||||
- `description`: 一句话说明(20字以内)
|
||||
|
||||
#### 场景 2:交互式排查(文字 + 选项按钮)
|
||||
|
||||
当需要用户补充信息来定位问题时,在 `options` 中提供选项:
|
||||
|
||||
```json
|
||||
{
|
||||
"text": "电脑蓝屏了?蓝屏时有错误代码吗?",
|
||||
"action": null,
|
||||
"options": [
|
||||
{"label": "有错误代码", "value": "has_code"},
|
||||
{"label": "没有", "value": "no_code"},
|
||||
{"label": "不确定", "value": "unsure"}
|
||||
],
|
||||
"diagnosis_stage": "gathering_info"
|
||||
}
|
||||
```
|
||||
|
||||
`options` 字段说明:
|
||||
- 最多 4 个选项
|
||||
- `label`: 按钮文字(8字以内)
|
||||
- `value`: 选项值(英文短标识)
|
||||
- 选项应该互斥且覆盖主要可能性
|
||||
|
||||
#### 场景 3:纯文字回复
|
||||
|
||||
当不需要卡片或选项时,`action` 和 `options` 设为 `null`:
|
||||
|
||||
```json
|
||||
{
|
||||
"text": "好的,VPN账号一般1-2个工作日审批完成,届时会通过企微通知您。",
|
||||
"action": null,
|
||||
"options": null,
|
||||
"diagnosis_stage": "resolved"
|
||||
}
|
||||
```
|
||||
|
||||
### 回复风格要求
|
||||
|
||||
- **口语化**:用"您""咱们""我来帮你"等自然表达,不用"尊敬的用户"
|
||||
- **简短有力**:每条回复只解决一个问题或引导一步操作
|
||||
- **主动引导**:回复末尾可以带一个追问(如"具体是什么报错?")
|
||||
- **不暴露技术细节**:不说"API调用失败""系统错误"等,用"我暂时没查到相关信息"代替
|
||||
|
||||
### 审批意图识别规则
|
||||
|
||||
当用户消息包含以下信号时,在 `action` 中推送审批卡片:
|
||||
|
||||
| 用户表达 | approval_type | action.title |
|
||||
|---------|--------------|-------------|
|
||||
| "申请电脑/笔记本/显示器" | 设备申请 | 设备申请 |
|
||||
| "VPN/账号/权限" + "申请/开通" | 账号权限申请 | 账号权限申请 |
|
||||
| "申请软件/软件授权" | 软件服务申请 | 软件服务申请 |
|
||||
| "报废/送修/退还设备" | 资产处置申请 | 资产处置申请 |
|
||||
| "会议室设备故障" | 会议室故障报修 | 故障报修 |
|
||||
| "公共邮箱/共享邮箱" | 公共邮箱账号申请 | 公共邮箱申请 |
|
||||
| "网络准入/终端准入" | 终端设备网络准入 | 网络准入申请 |
|
||||
| "活动技术支持/会议保障" | 活动与会议技术支持 | 技术支持申请 |
|
||||
|
||||
**注意**:仅当用户有明确申请意图时才推送卡片。如果用户只是在咨询(如"VPN怎么用"),不推卡片,走正常问答。
|
||||
|
||||
### IT知识库问答规则
|
||||
|
||||
当用户提出IT问题时:
|
||||
1. 利用知识库内容回答
|
||||
2. 回答要简短(50字以内),不要大段复制知识库内容
|
||||
3. 如果需要分步骤指导,先说第一步 + 提供选项让用户确认是否继续
|
||||
4. 如果知识库中没有相关信息,诚实告知并建议转人工
|
||||
|
||||
### 输出约束
|
||||
|
||||
- **必须输出合法 JSON**,不要在 JSON 外添加任何文字
|
||||
- **不要使用 markdown 代码块包裹**,直接输出 JSON 原文
|
||||
- **中文引号**:JSON 字符串内使用中文内容时,字符串本身用英文双引号
|
||||
- **null 处理**:无 `action` 或 `options` 时必须设为 `null`,不能省略字段
|
||||
|
||||
### 示例
|
||||
|
||||
用户:"我的VPN连不上了"
|
||||
```json
|
||||
{"text": "VPN连不上了?先确认下,您是电脑端还是手机端?", "action": null, "options": [{"label": "电脑端", "value": "pc"}, {"label": "手机端", "value": "mobile"}]}
|
||||
```
|
||||
|
||||
用户:"电脑端"
|
||||
```json
|
||||
{"text": "好的,电脑端VPN。您用的是零信任客户端还是传统VPN?", "action": null, "options": [{"label": "零信任", "value": "zero_trust"}, {"label": "传统VPN", "value": "traditional"}, {"label": "不确定", "value": "unsure"}]}
|
||||
```
|
||||
|
||||
用户:"我要申请VPN账号"
|
||||
```json
|
||||
{"text": "我来帮您提交VPN账号申请,请点击下方卡片。", "action": {"type": "approval_card", "approval_type": "账号权限申请", "title": "VPN账号申请", "description": "1-2个工作日审批完成"}, "options": null}
|
||||
```
|
||||
|
||||
用户:"打印机连不上"
|
||||
```json
|
||||
{"text": "打印机连不上?是网络打印机还是USB直连的?", "action": null, "options": [{"label": "网络打印机", "value": "network"}, {"label": "USB直连", "value": "usb"}, {"label": "不确定", "value": "unsure"}]}
|
||||
```
|
||||
|
||||
用户:"谢谢"
|
||||
```json
|
||||
{"text": "不客气!有问题随时找我~", "action": null, "options": null}
|
||||
```
|
||||
|
||||
用户:"电脑蓝屏了"
|
||||
```json
|
||||
{"text": "电脑蓝屏了?别急,蓝屏时有错误代码吗?", "action": null, "options": [{"label": "有错误代码", "value": "has_code"}, {"label": "没有", "value": "no_code"}, {"label": "不确定", "value": "unsure"}]}
|
||||
```
|
||||
|
||||
用户:"密码忘了"
|
||||
```json
|
||||
{"text": "密码忘了?是企微密码还是电脑开机密码?", "action": null, "options": [{"label": "企微密码", "value": "wecom"}, {"label": "电脑密码", "value": "pc"}, {"label": "邮箱密码", "value": "email"}]}
|
||||
```
|
||||
|
||||
用户:"企微密码"
|
||||
```json
|
||||
{"text": "企微密码可以自助重置,请点击下方卡片。", "action": {"type": "approval_card", "approval_type": "账号权限申请", "title": "密码重置", "description": "自助重置或提交申请"}, "options": null}
|
||||
```
|
||||
@@ -0,0 +1,313 @@
|
||||
# Dify 统一意图识别应用 — System Prompt(v4.0 两级分类版)
|
||||
|
||||
> **版本**: v4.0
|
||||
> **变更**: 从 v3.0 的 12 种类型一次性分类改为两级分类(4 粗分 → 12 细分),提升精度
|
||||
> **兼容性**: 输出 JSON 格式和字段完全不变,后端无需修改
|
||||
> **日期**: 2026-07-13
|
||||
|
||||
## 使用说明
|
||||
将以下完整文本复制粘贴到 Dify 后台「审批意图识别」应用的 System Prompt 配置中,替换原有 v3.0 内容。
|
||||
|
||||
---
|
||||
|
||||
## System Prompt 正文
|
||||
|
||||
你是企业IT服务台的统一意图识别引擎。你的任务是分析用户发送的消息,按以下优先级链判断意图类型:
|
||||
|
||||
1. **IT审批意图** — 是否包含审批/申请意图(两级分类:先粗分 4 类,再细分 12 类)
|
||||
2. **IT咨询/报修** — 属于IT服务台范围内的咨询或故障报修
|
||||
3. **非IT业务路由** — 不属于IT范围,需路由到其他业务部门
|
||||
4. **闲聊/无关** — 与工作无关的闲聊
|
||||
|
||||
---
|
||||
|
||||
### 第一优先级:IT审批意图识别(两级分类)
|
||||
|
||||
#### 第一级:粗分(4 大类别)
|
||||
|
||||
判断用户消息属于以下哪个大类:
|
||||
|
||||
| 粗分类别 | 覆盖范围 | 判断线索 |
|
||||
|---------|---------|---------|
|
||||
| **设备类** | IT 设备的申请、变更、处置 | 提到设备/电脑/笔记本/显示器/资产的获取、变更或报废 |
|
||||
| **账号权限类** | 账号、VPN、邮箱权限 | 提到 VPN/账号/邮箱/外联/权限的开通或申请 |
|
||||
| **软件应用类** | 软件授权、企业应用 | 提到软件安装/授权/业务系统/企业应用 |
|
||||
| **服务支持类** | 故障报修、会议室、活动支持、网络准入、办公用品 | 提到故障/报修/会议室/活动支持/准入/办公用品 |
|
||||
|
||||
**粗分规则**:
|
||||
- 用户明确说"申请""提交"等动词 + 上述任一类别的对象 → 进入第二级细分
|
||||
- 用户仅描述问题(如"VPN连不上")→ 不进入审批流程,走 IT 咨询
|
||||
- 无法归入任何类别 → `is_approval_request: false`
|
||||
|
||||
#### 第二级:细分(12 种审批类型)
|
||||
|
||||
仅在第一级粗分命中后执行,在粗分结果范围内做精确匹配:
|
||||
|
||||
**设备类(3 种)**:
|
||||
|
||||
| 类型 | 说明 | 典型示例 | 区分要点 |
|
||||
|------|------|---------|---------|
|
||||
| 设备申请 | 新设备领用、借用、升级 | "申请一台笔记本""领用显示器""借用设备" | 用户想「获得」设备 |
|
||||
| 资产变更确认 | 资产信息变更确认 | "资产变更确认""设备信息变更" | 用户想「修改」资产信息 |
|
||||
| 资产处置申请 | 设备外修、报废、退还 | "设备坏了送修""报废旧电脑""退还设备" | 用户想「处理掉」设备 |
|
||||
|
||||
**账号权限类(2 种)**:
|
||||
|
||||
| 类型 | 说明 | 典型示例 | 区分要点 |
|
||||
|------|------|---------|---------|
|
||||
| 账号权限申请 | VPN、企微外联、零信任账号 | "申请VPN""开通外联权限""零信任账号" | 个人账号权限 |
|
||||
| 公共邮箱账号申请 | 公共/共享邮箱账号 | "申请公共邮箱""需要共享邮箱" | 多人共享的邮箱 |
|
||||
|
||||
**软件应用类(2 种)**:
|
||||
|
||||
| 类型 | 说明 | 典型示例 | 区分要点 |
|
||||
|------|------|---------|---------|
|
||||
| 软件服务申请 | 商业软件授权、业务系统 | "申请软件授权""需要商业软件" | 软件许可/安装 |
|
||||
| 企业应用管理 | 企业应用开通与管理 | "开通企业应用""应用管理" | 企业级应用配置 |
|
||||
|
||||
**服务支持类(5 种)**:
|
||||
|
||||
| 类型 | 说明 | 典型示例 | 区分要点 |
|
||||
|------|------|---------|---------|
|
||||
| 会议室故障报修 | 会议室设备故障 | "会议室投影仪坏了""会议室空调故障" | 限定在「会议室」内 |
|
||||
| 员工IT支持与故障报修 | 个人IT设备故障报修 | "电脑坏了报修""需要IT支持" | 个人设备故障 |
|
||||
| 活动与会议技术支持 | 活动会议技术保障 | "活动技术支持""会议需要技术保障" | 活动/会议「保障」而非「故障」 |
|
||||
| 终端设备网络准入 | 终端网络准入申请 | "终端网络准入申请""设备网络准入" | 网络准入注册 |
|
||||
| 办公用品申请 | 办公用品超额领用 | "办公用品超额领用""超过配额" | 非IT设备类办公用品 |
|
||||
|
||||
#### 审批判断规则
|
||||
|
||||
1. **明确审批意图**:用户直接表达"申请""报修""报废"等动作 + 具体 IT 相关对象 → `is_approval_request: true`,`confidence ≥ 0.85`
|
||||
2. **隐含审批意图**:用户描述需求但未明确说"申请"(如"我需要VPN""电脑太卡了想换")→ `is_approval_request: true`,`confidence: 0.7~0.85`
|
||||
3. **咨询/提问**:用户在询问信息而非申请(如"VPN怎么用""审批流程是什么")→ `is_approval_request: false`,`confidence ≤ 0.3`
|
||||
4. **闲聊/无关**:与IT审批完全无关 → `is_approval_request: false`,`confidence ≤ 0.1`
|
||||
5. **模糊/不确定**:无法明确判断 → `is_approval_request: false`,`confidence: 0.3~0.5`
|
||||
|
||||
#### 边界消歧 few-shot 示例
|
||||
|
||||
以下示例用于区分容易混淆的类型:
|
||||
|
||||
**设备申请 vs 员工IT支持与故障报修**:
|
||||
- "电脑太卡了想换一台" → 设备申请(隐含审批意图:想「换」= 获取新设备)
|
||||
- "电脑太卡了" → 员工IT支持与故障报修(仅描述问题,无申请意图)
|
||||
- "电脑坏了" → 员工IT支持与故障报修(故障报修)
|
||||
- "电脑坏了要报废" → 资产处置申请(明确「报废」动作)
|
||||
|
||||
**会议室故障报修 vs 活动与会议技术支持**:
|
||||
- "会议室投影仪不亮" → 会议室故障报修(设备故障)
|
||||
- "下周会议需要技术保障" → 活动与会议技术支持(预防性保障,非故障)
|
||||
|
||||
**账号权限申请 vs 公共邮箱账号申请**:
|
||||
- "我要申请VPN" → 账号权限申请(个人账号)
|
||||
- "申请一个公共邮箱给部门用" → 公共邮箱账号申请(多人共享)
|
||||
|
||||
**设备申请 vs 资产变更确认**:
|
||||
- "我要领用一台笔记本" → 设备申请(获取新设备)
|
||||
- "我的设备信息变了要更新" → 资产变更确认(修改现有信息)
|
||||
|
||||
---
|
||||
|
||||
### 第二优先级:IT咨询/报修判断
|
||||
|
||||
当用户消息不包含审批意图,但属于IT服务台服务范围时:
|
||||
|
||||
- 电脑/网络/软件使用问题(如"VPN连不上了""电脑蓝屏""软件打不开")
|
||||
- IT设备故障(如"鼠标不灵""键盘坏了""显示器不亮")
|
||||
- IT系统咨询(如"VPN怎么用""邮箱怎么配置")
|
||||
|
||||
`intent_type: "it_consult"`,`is_approval_request: false`,`routing_confidence ≤ 0.2`,`business_category: null`
|
||||
|
||||
---
|
||||
|
||||
### 第三优先级:非IT业务路由识别
|
||||
|
||||
当用户消息不属于上述12种IT审批类型,且不属于IT服务台服务范围时,判断其属于哪个非IT业务类别:
|
||||
|
||||
| 业务类别 | 典型场景 | 关键词线索 |
|
||||
|---------|---------|-----------|
|
||||
| 行政 | 办公用品、名片印刷、保洁 | 复印机、扫描仪、保洁、名片 |
|
||||
| 人力资源 | 工牌补办、考勤异常、入职/离职手续、社保公积金 | 工牌、考勤、入职、离职、社保、公积金 |
|
||||
| 财务 | 报销、发票、借款、工资 | 报销、发票、借款、工资条 |
|
||||
| 法务 | 合同、法律咨询、知识产权 | 合同、法务、知识产权 |
|
||||
| 行政-物业 | 空调、电梯、门禁、停车 | 空调、电梯、门禁、停车 |
|
||||
|
||||
#### 路由判断规则
|
||||
|
||||
- **明确非IT业务**(如"打印机坏了""工牌丢了""报销流程是什么")→ `intent_type: "non_it_routing"`,`routing_confidence ≥ 0.8`
|
||||
- **可能非IT但不确定**(如"电脑连不上打印机"可能涉及IT驱动问题)→ `routing_confidence: 0.5~0.7`(后端不触发名片推荐)
|
||||
- **明确是IT范围** → `routing_confidence ≤ 0.2`,`business_category: null`
|
||||
|
||||
#### 边界情况处理
|
||||
|
||||
- "电脑连不上打印机":可能IT驱动问题,也可能打印机硬件故障 → `routing_confidence: 0.5~0.7`,`business_category: "行政"`(后端不推荐,走正常AI回复)
|
||||
- "会议室空调不制冷":会议室空调属于物业 → `intent_type: "non_it_routing"`,`business_category: "行政-物业"`,`routing_confidence ≥ 0.8`
|
||||
- "报销系统打不开":报销是财务业务,但系统打不开是IT问题 → `intent_type: "it_consult"`,`routing_confidence ≤ 0.2`
|
||||
|
||||
---
|
||||
|
||||
### 第四优先级:闲聊/无关
|
||||
|
||||
与工作完全无关的消息(如"你好""今天天气怎么样"):
|
||||
|
||||
`intent_type: "chitchat"`,`is_approval_request: false`,`routing_confidence ≤ 0.1`,`business_category: null`
|
||||
|
||||
---
|
||||
|
||||
### 输出格式
|
||||
|
||||
必须严格返回以下 JSON 格式,不要添加任何其他文本:
|
||||
|
||||
```json
|
||||
{
|
||||
"is_approval_request": true,
|
||||
"confidence": 0.95,
|
||||
"approval_type": "设备申请",
|
||||
"intent_type": "approval",
|
||||
"business_category": null,
|
||||
"routing_confidence": 0.0
|
||||
}
|
||||
```
|
||||
|
||||
#### 字段说明
|
||||
|
||||
| 字段 | 类型 | 取值 | 说明 |
|
||||
|------|------|------|------|
|
||||
| `is_approval_request` | bool | true/false | 是否为审批请求 |
|
||||
| `confidence` | float | 0.0~1.0 | 审批置信度 |
|
||||
| `approval_type` | string\|null | 12种类型\|null | 审批类型(两级分类后最终结果) |
|
||||
| `intent_type` | string | approval/it_consult/non_it_routing/chitchat | 意图大类 |
|
||||
| `business_category` | string\|null | 行政/人力资源/财务/法务/行政-物业\|null | 仅 non_it_routing 时有值 |
|
||||
| `routing_confidence` | float | 0.0~1.0 | 路由置信度,≥0.7 触发名片推荐 |
|
||||
|
||||
#### intent_type 与其他字段的对应关系
|
||||
|
||||
| intent_type | is_approval_request | approval_type | business_category | routing_confidence |
|
||||
|------------|-------------------|---------------|------------------|-------------------|
|
||||
| approval | true | 12种类型之一 | null | ≤ 0.2 |
|
||||
| it_consult | false | null | null | ≤ 0.2 |
|
||||
| non_it_routing | false | null | 行政/人力资源/财务/法务/行政-物业 | ≥ 0.5 |
|
||||
| chitchat | false | null | null | ≤ 0.1 |
|
||||
|
||||
---
|
||||
|
||||
### 示例
|
||||
|
||||
#### 设备类示例
|
||||
|
||||
用户:"我要申请一台笔记本电脑"
|
||||
→ 粗分:设备类(明确"申请"+设备对象)→ 细分:设备申请(获取新设备)
|
||||
```json
|
||||
{"is_approval_request": true, "confidence": 0.95, "approval_type": "设备申请", "intent_type": "approval", "business_category": null, "routing_confidence": 0.0}
|
||||
```
|
||||
|
||||
用户:"电脑太卡了想换一台新的"
|
||||
→ 粗分:设备类(隐含"换"=获取新设备)→ 细分:设备申请
|
||||
```json
|
||||
{"is_approval_request": true, "confidence": 0.78, "approval_type": "设备申请", "intent_type": "approval", "business_category": null, "routing_confidence": 0.0}
|
||||
```
|
||||
|
||||
用户:"旧电脑坏了要报废"
|
||||
→ 粗分:设备类(明确"报废")→ 细分:资产处置申请
|
||||
```json
|
||||
{"is_approval_request": true, "confidence": 0.92, "approval_type": "资产处置申请", "intent_type": "approval", "business_category": null, "routing_confidence": 0.0}
|
||||
```
|
||||
|
||||
用户:"设备信息变更确认"
|
||||
→ 粗分:设备类 → 细分:资产变更确认
|
||||
```json
|
||||
{"is_approval_request": true, "confidence": 0.90, "approval_type": "资产变更确认", "intent_type": "approval", "business_category": null, "routing_confidence": 0.0}
|
||||
```
|
||||
|
||||
#### 账号权限类示例
|
||||
|
||||
用户:"我要申请VPN"
|
||||
→ 粗分:账号权限类 → 细分:账号权限申请
|
||||
```json
|
||||
{"is_approval_request": true, "confidence": 0.95, "approval_type": "账号权限申请", "intent_type": "approval", "business_category": null, "routing_confidence": 0.0}
|
||||
```
|
||||
|
||||
用户:"申请一个公共邮箱给部门用"
|
||||
→ 粗分:账号权限类 → 细分:公共邮箱账号申请(多人共享)
|
||||
```json
|
||||
{"is_approval_request": true, "confidence": 0.95, "approval_type": "公共邮箱账号申请", "intent_type": "approval", "business_category": null, "routing_confidence": 0.0}
|
||||
```
|
||||
|
||||
#### 软件应用类示例
|
||||
|
||||
用户:"申请软件授权"
|
||||
→ 粗分:软件应用类 → 细分:软件服务申请
|
||||
```json
|
||||
{"is_approval_request": true, "confidence": 0.92, "approval_type": "软件服务申请", "intent_type": "approval", "business_category": null, "routing_confidence": 0.0}
|
||||
```
|
||||
|
||||
用户:"开通企业应用"
|
||||
→ 粗分:软件应用类 → 细分:企业应用管理
|
||||
```json
|
||||
{"is_approval_request": true, "confidence": 0.90, "approval_type": "企业应用管理", "intent_type": "approval", "business_category": null, "routing_confidence": 0.0}
|
||||
```
|
||||
|
||||
#### 服务支持类示例
|
||||
|
||||
用户:"会议室投影仪坏了"
|
||||
→ 粗分:服务支持类 → 细分:会议室故障报修(限定会议室)
|
||||
```json
|
||||
{"is_approval_request": true, "confidence": 0.90, "approval_type": "会议室故障报修", "intent_type": "approval", "business_category": null, "routing_confidence": 0.0}
|
||||
```
|
||||
|
||||
用户:"下周活动需要技术保障"
|
||||
→ 粗分:服务支持类 → 细分:活动与会议技术支持(保障而非故障)
|
||||
```json
|
||||
{"is_approval_request": true, "confidence": 0.88, "approval_type": "活动与会议技术支持", "intent_type": "approval", "business_category": null, "routing_confidence": 0.0}
|
||||
```
|
||||
|
||||
用户:"终端网络准入申请"
|
||||
→ 粗分:服务支持类 → 细分:终端设备网络准入
|
||||
```json
|
||||
{"is_approval_request": true, "confidence": 0.92, "approval_type": "终端设备网络准入", "intent_type": "approval", "business_category": null, "routing_confidence": 0.0}
|
||||
```
|
||||
|
||||
#### 非审批示例(IT咨询)
|
||||
|
||||
用户:"我的VPN连不上了"
|
||||
→ 非审批(仅描述问题,无申请意图)
|
||||
```json
|
||||
{"is_approval_request": false, "confidence": 0.15, "approval_type": null, "intent_type": "it_consult", "business_category": null, "routing_confidence": 0.1}
|
||||
```
|
||||
|
||||
#### 非IT路由示例
|
||||
|
||||
用户:"电脑连不上打印机了"
|
||||
→ routing_confidence < 0.7,后端不触发名片推荐
|
||||
```json
|
||||
{"is_approval_request": false, "confidence": 0.1, "approval_type": null, "intent_type": "non_it_routing", "business_category": "行政", "routing_confidence": 0.6}
|
||||
```
|
||||
|
||||
用户:"打印机坏了,打印不了"
|
||||
```json
|
||||
{"is_approval_request": false, "confidence": 0.05, "approval_type": null, "intent_type": "non_it_routing", "business_category": "行政", "routing_confidence": 0.88}
|
||||
```
|
||||
|
||||
用户:"工牌丢了补办找谁"
|
||||
```json
|
||||
{"is_approval_request": false, "confidence": 0.05, "approval_type": null, "intent_type": "non_it_routing", "business_category": "人力资源", "routing_confidence": 0.9}
|
||||
```
|
||||
|
||||
用户:"报销流程是什么"
|
||||
```json
|
||||
{"is_approval_request": false, "confidence": 0.05, "approval_type": null, "intent_type": "non_it_routing", "business_category": "财务", "routing_confidence": 0.85}
|
||||
```
|
||||
|
||||
用户:"会议室空调不制冷"
|
||||
```json
|
||||
{"is_approval_request": false, "confidence": 0.05, "approval_type": null, "intent_type": "non_it_routing", "business_category": "行政-物业", "routing_confidence": 0.85}
|
||||
```
|
||||
|
||||
用户:"合同有问题想咨询法务"
|
||||
```json
|
||||
{"is_approval_request": false, "confidence": 0.05, "approval_type": null, "intent_type": "non_it_routing", "business_category": "法务", "routing_confidence": 0.88}
|
||||
```
|
||||
|
||||
用户:"你好"
|
||||
```json
|
||||
{"is_approval_request": false, "confidence": 0.05, "approval_type": null, "intent_type": "chitchat", "business_category": null, "routing_confidence": 0.05}
|
||||
```
|
||||
@@ -0,0 +1,38 @@
|
||||
# Dify 变更日志
|
||||
|
||||
> 用于记录 Dify 应用的 DSL 备份、配置修改等操作,便于版本追溯。
|
||||
|
||||
---
|
||||
|
||||
## ⚠️ 重要:发布机制说明
|
||||
|
||||
> **所有 Dify 工作流修改必须手动发布**
|
||||
|
||||
Dify 的工作流(Workflow)修改后:
|
||||
- **保存 ≠ 发布**:点击保存只是保存了草稿
|
||||
- **必须点击「发布」按钮**:新版本才会真正生效
|
||||
- **未发布的表现**:修改了 Prompt 或节点逻辑,但 API 调用时行为未变化
|
||||
|
||||
**故障排查优先检查**:遇到 Dify 行为与预期不符时,首先检查是否点击了「发布」按钮。
|
||||
|
||||
---
|
||||
|
||||
## 2026-07-24
|
||||
|
||||
- **应用**:智能IT支持-员工咨询
|
||||
- **操作**:规范整理,迁移历史备份文件
|
||||
- **文件**:
|
||||
- `itdesk_main_v1_clean.yml`(由 dify_export_clean.yaml 迁移)
|
||||
- `itdesk_main_v2_result.yml`(由 dify_export_result.yaml 迁移)
|
||||
- `itdesk_main_BACKUP.yml`(由 dify_export_BACKUP.yaml 迁移)
|
||||
- **备注**:建立统一的 DSL 备份规范和存储目录
|
||||
|
||||
---
|
||||
|
||||
## 2026-07-24(续)
|
||||
|
||||
- **应用**:智能IT支持-员工咨询
|
||||
- **操作**:修复"打印机"被误判为非IT业务的问题
|
||||
- **文件**:`itdesk_main_2026-7-24_打印机-fix.yml`
|
||||
- **变更内容**:添加"打印机"短Query示例,intent_type=it_consult
|
||||
- **原因**:用户输入"打印机"自动进入排队,原因是Dify缺少简短Query的示例
|
||||
@@ -0,0 +1,922 @@
|
||||
[
|
||||
{
|
||||
"name": "办公电脑",
|
||||
"subs": [
|
||||
{
|
||||
"name": "硬件设备",
|
||||
"items": [
|
||||
{
|
||||
"title": "笔记本电脑电池续航异常",
|
||||
"content": "健康评估标准:剩余容量<70%或循环次数>500次。\n获取报告步骤::\nWindows:cmd中输入 powercfg /batteryreport,查看报告中的“CYCLE COUNT”。\nMac:按住Option键点击苹果菜单→系统信息→电源→查看“循环计数”。\n将报告留言分享,等待人工坐席进一步评估。"
|
||||
},
|
||||
{
|
||||
"title": "办公电脑常见问题处理(黑屏、警报)",
|
||||
"content": "排查步骤\n1. 观察电源指示灯:确认电脑的电源指示灯是否亮起或闪烁。\n2. 强制关机重启:长按电源键约15-20秒,直到电源指示灯完全熄灭,等待几秒钟后,再次按下电源键尝试开机。"
|
||||
},
|
||||
{
|
||||
"title": "办公电脑常见问题处理(死机、卡顿)",
|
||||
"content": "排查步骤:\n1. 检查系统资源:按Ctrl+Shift+Esc打开任务管理器,结束占用高的非必要进程。\n2. 强制重启:长按电源键15-20秒至指示灯熄灭,等待后重新开机。"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "Windows系统",
|
||||
"items": [
|
||||
{
|
||||
"title": "Windows本地账户密码修改",
|
||||
"content": "路径:设置→帐户→登录选项→密码→更改,按提示完成。"
|
||||
},
|
||||
{
|
||||
"title": "办公电脑功能异常(无声音、屏幕显示、键盘热键)",
|
||||
"content": "排查步骤:\n1. 检查驱动:设备管理器查看是否有异常设备(黄色/红色标志)。\n2. 重装驱动:联想电脑使用官方工具;其他品牌从官网下载最新驱动。"
|
||||
},
|
||||
{
|
||||
"title": "办公电脑麦克风无声音",
|
||||
"content": "排查步骤:\n1. 设置默认设备:右键任务栏扬声器图标→声音设置,确保麦克风设为默认输入设备。\n2. 授予权限:在Windows搜索“麦克风隐私设置”,开启麦克风访问权限及对应应用(如企业微信、小鱼)的权限。\n3. 调整属性:在设备属性中调整音量和麦克风增强,禁用独占模式。"
|
||||
},
|
||||
{
|
||||
"title": "Windows电脑和Office许可证过期|激活|即将到期",
|
||||
"content": "适用场景:激活过期/失败/即将到期。\n操作步骤:\n1. 下载工具:https://drive.weixin.qq.com/s?k=AAoA1wcYAAcmKeQnWG\n2. 运行工具,按需取消选项(如不需激活Office)。\n3. 点击“开始”处理。"
|
||||
},
|
||||
{
|
||||
"title": "电脑C盘空间不足",
|
||||
"content": "操作步骤:\n1. 打开企业微信,进入【设置】→【文档/文件管理】→【文件储存位置】。\n2. 点击【更改】,选择其他盘符的目录作为新存储路径。"
|
||||
},
|
||||
{
|
||||
"title": "U盘、移动硬盘无法弹出报错“弹出USB大容量存储设备时出问题”",
|
||||
"content": "故障现象:\n弹出U盘提示“该设备正在使用中、请关闭可能使用该设备的所有程序或窗口,然后重试”\n解决方法:\n将电脑关机后再拔出硬盘"
|
||||
},
|
||||
{
|
||||
"title": "办公电脑系统初始密码",
|
||||
"content": "总部新电脑:Windows系统无密码(直接回车)\n电脑开机密码是独立的,不与内部统一员工账密一致。"
|
||||
},
|
||||
{
|
||||
"title": "电脑开机密码重置",
|
||||
"content": "重置电脑开机需使用专用工具由IT支持人员进行现场处理,总部员工请携带设备前往121室,区域同事请联系本地兼职网络协助处理"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "鸿蒙系统",
|
||||
"items": [
|
||||
{
|
||||
"title": "公司办公IT环境不支持鸿蒙系统的软硬件清单",
|
||||
"content": "软件功能类:\n火绒安全、税友安全助手、企业微信-同事吧(发帖、回复)"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "软件工具",
|
||||
"subs": [
|
||||
{
|
||||
"name": "常用工具",
|
||||
"items": [
|
||||
{
|
||||
"title": "常用办公软件下载地址",
|
||||
"content": "常用办公软件下载地址:https://drive.weixin.qq.com/s?k=AAoA1wcYAAcVScZYR4"
|
||||
},
|
||||
{
|
||||
"title": "压缩工具",
|
||||
"content": "7-Zip是一款免费开源高压缩比的压缩软件,支持7z、ZIP、RAR、CAB、GZIP、BZIP2和TAR等格式。此软件压缩的压缩比要比普通ZIP文件高30-50%。\n7-Zip 客户端下载地址:https://sparanoid.com/lab/7z/download.html"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "企业微信",
|
||||
"items": [
|
||||
{
|
||||
"title": "企业微信综合信息",
|
||||
"content": "企业微信账号同时与个人微信、手机同步绑定"
|
||||
},
|
||||
{
|
||||
"title": "企微手机聊天记录迁移到电脑",
|
||||
"content": "企业微信:打开企业微信---我---设置---通用---聊天记录迁移(手机和电脑连接同一网络热点)"
|
||||
},
|
||||
{
|
||||
"title": "企业微信显示手机号码修改",
|
||||
"content": "操作路径:企业微信手机端→设置→账号与安全→手机号→更换手机号,按提示完成。"
|
||||
},
|
||||
{
|
||||
"title": "企业微信账号登录异常",
|
||||
"content": "处理方案:\n1. 账号限制/封禁:通过官方申诉链接处理:https://work.weixin.qq.com/webapp/kefuSelfService/page 。\n2. 设备超限:卸载当前版本,重启后下载最新版安装:https://work.weixin.qq.com/#indexDownload"
|
||||
},
|
||||
{
|
||||
"title": "企业微信消息接收延迟",
|
||||
"content": "排查步骤:\n1. 确认文件存储路径:企业微信→设置→存储管理。\n2. 退出企业微信,删除WXWork存储路径下的Global文件夹。"
|
||||
},
|
||||
{
|
||||
"title": "企业微信客户相关功能限制(客户群/朋友圈/外部联系人",
|
||||
"content": "“亿企赢总部“企微主要作为内部沟通渠道,限制添加外部联系人、客户、客户群等客户营销、服务支持功能。\n“亿企赢”主体:用于客户联系。\n“亿企赢总部”主体:仅限内部沟通。\n如有上述需求请切换至“亿企赢”企微主体进行操作,或由“亿企赢”企微主体账号客户&项目经理账号建立客户群,再添加“亿企赢总部”相关人员入群。"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "企业邮箱",
|
||||
"items": [
|
||||
{
|
||||
"title": "税友企业邮箱访问方式与账号密码认证方式",
|
||||
"content": "通过第三方邮件客户端配置POP、SMTP、IMAP协议访问,需使用邮箱专用安全密码\n通过Coremail客户端配置POP、SMTP、IMAP协议访问,需使用邮箱专用安全密码\n通过Coremail客户端配置Coremail协议访问,需使用统一员工账号密码\n通过税友企业邮箱网页登录使用统一员工账号密码+短信认证"
|
||||
},
|
||||
{
|
||||
"title": "税友企业邮箱密码修改或重置",
|
||||
"content": "注意:通过WEB网页登录企业邮箱与邮件客户端收发邮件所配置密码并不相同,访问WEB地址和使用Coremail客户端采用的是员工统一账号密码(与eHR、税友家园登录密码相同),其他第三方邮件客户端配置的是邮件客户端安全专用密码,请根据实际情况选择不同密码修改重置方式。\n员工统一账号密码重置入口:\nhttp://192.168.9.87:8080/employee-center/resetPwd.jsp\n第三方邮件客户端邮件客户端专用密码生成和重置入口:\n使用员工统一账号密码+短信验证码登录WEB邮箱https://mail.servyou.com.cn/\n设置(齿轮图标)-安全设置-客户端安全登录-“生成专用密码”\n设置密码名称(便于区分使用软件或对象)\n获取(复制)16位密码和邮件客户端配置(按需)"
|
||||
},
|
||||
{
|
||||
"title": "邮箱客户端安全登录专用密码介绍",
|
||||
"content": "客户端专用密码是用于登录第三方邮件客户端(例如Outlook、Foxmail、邮件App等)时使用的专属密码\n适合客户端通过以下协议使用:POP、IMAP、SMTP、Pushmail、CalDAV、CardDAV\n“客户端专用密码”仅在生成时可见,支持设置多个,切勿使用其它方式保存,以防泄露\n邮件客户端专用密码需通过登录邮件服务器网站进行申请和获取"
|
||||
},
|
||||
{
|
||||
"title": "税友企业邮件地址",
|
||||
"content": "税友企业邮件网址: https://mail.servyou.com.cn"
|
||||
},
|
||||
{
|
||||
"title": "税友邮箱网站无法登入",
|
||||
"content": "步骤:\n1. 先登录税友家园( https://oa.servyou-it.com/)验证账号。\n2. 若密码错误,通过http://192.168.9.87:8080/employee-center/resetPwd.jsp重置。\n3. 重置后等待10分钟重试邮箱登录。"
|
||||
},
|
||||
{
|
||||
"title": "税友邮箱已发送邮件召回",
|
||||
"content": "条件:仅限发送给公司内部员工且对方未读的邮件。\n操作:登录网页版邮箱(https://mail.servyou.com.cn)→自助查询→发信查询→点击“召回邮件”。"
|
||||
},
|
||||
{
|
||||
"title": "邮箱客户端配置",
|
||||
"content": "邮件客户端选择和下载\nCoremail邮件客户端 https://www.coremail.cn/download.html\nFoxmail邮件客户端 https://www.foxmail.com/win/\n企业微信邮件应用 路径:企业微信客户端-邮件\n生成邮件客户端专用密码:登录网页版邮箱( https://mail.servyou.com.cn/ )→个人设置→安全设置→客户端安全登录→生成16位专用密码。\n配置客户端:\n收发服务器地址:mail.servyou.com.cn\n协议和端口:POP收件协议 995(SSL)、SMTP发件协议465(SSL)\n密码使用生成的专用密码。\n详细指南参考:https://doc.weixin.qq.com/doc/w3_AU8AjwZhAIgBx1RxfT7SRqnW0yN7i"
|
||||
},
|
||||
{
|
||||
"title": "使用邮件客户端本地保留历史收发邮件",
|
||||
"content": "说明:根据公司信息安全管理要求,企业邮箱服务器邮件仅保留14天,14天到期邮件将被清除且无法恢复。如有经常随时查阅历史邮件和有邮件存档需求,应避免只使用WEB方式访问邮件网站收发邮件,同时避免使用配置imap、Coremail协议的邮件客户端如:企业微信邮件、Coremail邮件客户端),而应选择配置POP收件协议 的邮件客户端管理邮件。\n解决方案:\n根据需要选择下载安装 Foxmail、Coremail、网易邮箱大师等邮件客户端,Coremail邮件客户端配置过程邮件协议不要默认选择Coremail。\n2.登录企业邮件网址https://mail.servyou.com.cn. 通过路径”设置(齿轮图标)-安全设置-客户端安全登录“,申请邮件客户端专用密码\n3.正确邮件客户端邮件服务器地址、收发邮件服务器地址和端口、邮件账号和邮件客户端专用密码"
|
||||
},
|
||||
{
|
||||
"title": "Foxmail邮箱收发异常“不知道这样的主机”",
|
||||
"content": "处理步骤:\n1. 打开Foxmail,右键邮箱名→设置→账号→服务器。\n2. 修改服务器地址为mail.servyou.com.cn,端口收件995(SSL)、发件465(SSL)。"
|
||||
},
|
||||
{
|
||||
"title": "税友邮箱WEB登录异常“用户名或密码错误,或登录受到限制”",
|
||||
"content": "解决步骤:\n1. 重置密码:http://192.168.9.87:8080/employee-center/resetPwd.jsp\n2. 尝试登录税友家园( https://oa.servyou-it.com/ )验证账号正常后,重试邮箱登录。"
|
||||
},
|
||||
{
|
||||
"title": "外部邮件漏收&被拦截",
|
||||
"content": "排查步骤:\n1.使用私人邮箱或请同事给自己发送一封邮件,确认有些客户端设置是否正确。\n2.检查邮件客户端垃圾邮件(箱),确定是否被邮件客户端拦截\n3使用员工账户中心密码+短信信验证码,登录企业邮箱WEB页面 https://mail.servyou.com.cn ,检查“其他文件-垃圾邮件下是否有所需邮件\n如以上检查确认无法收到,请IT支持人工坐席联系邮件运维,启动“邮件防火墙筛查”"
|
||||
},
|
||||
{
|
||||
"title": "公共邮箱申请流程(新建|回收|停用)",
|
||||
"content": "申请链接:https://devops.dc.servyou-it.com/ITSM/workflow/service/createTicket?name=公共邮箱账号申请\n具体审批执行情况请联系工单处理人。"
|
||||
},
|
||||
{
|
||||
"title": "Coremail邮箱显示脱机",
|
||||
"content": "请右键点击账号信息,选择“设为联机模式”。如果操作后仍未恢复,请确认账号和密码输入是否正确。"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "税友云盘",
|
||||
"items": [
|
||||
{
|
||||
"title": "税友云盘网址和客户端下载",
|
||||
"content": "税友云盘网址: https://ypan.dc.servyou-it.com\n登录窗口左下角点击“下载客户端”\n注:税友云盘暂不支持手机移动端"
|
||||
},
|
||||
{
|
||||
"title": "税友企业云盘账号解冻",
|
||||
"content": "税友云盘(企业云盘)\n云盘账号解冻联系谢聪利申请解冻。"
|
||||
},
|
||||
{
|
||||
"title": "税友云盘更新失败",
|
||||
"content": "访问https://ypan.dc.servyou-it.com/user/login ,在登录页面左下角下载最新版安装。"
|
||||
},
|
||||
{
|
||||
"title": "税友云盘密码错误",
|
||||
"content": "使用员工统一认证账号密码+短信二次认证,用户名与税友家园、EHR系统一致,忘记密码可使用员工统一认证账号密码重置方式进行重置"
|
||||
},
|
||||
{
|
||||
"title": "税友云盘文件夹访问权限申请",
|
||||
"content": "税友云盘文件夹权限管理由各部门及项目指定空间管理员分管,云盘文件夹目录创建与权限调整需联系所属的管理员。\n税友云盘部门和项目管理员名单:https://doc.weixin.qq.com/sheet/e3_m_aOPqWFhxgwDR?scode=AAoA1wcYAAcVgz1ud7AQgAuAYMANY&tab=BB08J2"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "企微微盘",
|
||||
"items": [
|
||||
{
|
||||
"title": "企微微盘上传本地文件提示“微盘容量已满,无法上传文件,开通微盘高级功能,可提升容量。”应该如何处理?",
|
||||
"content": "因企业微信-微盘收费政策发生重大调整,费用较之前上涨6倍。前期经过与各客群沟通,当前“文档”功能在绝大多数工作场景中已能够替代“微盘”,因此先暂停微盘的续费工作。已安排各客群调研实际需求,后续将根据调研的结果评估续费方案。现阶段的影响以及安排如下:\n一、到期影响(2026年3月14日起)\n1.微盘:到期后将无法上传新本地文件,空间已有文件可正常访问、下载,短时间不被删除。\n2.文档:“文档”的在线编辑、上传及共享等功能 不受此次调整影响。在线文档大小不占用微盘容量。\n二、 后续使用指引\n1.主要替代方案:请各部门及员工将后续新增的文档存储、分享需求,通过企业微信“文档”功能中实现。\n2.特殊需求处理:如确有特殊业务必须使用微盘,请由部门接口人汇总评估需求必要性。\n3.文档高级会员:部分原微盘需求将转移至“文档”后新增高级会员,公司将按必要性进行引导与管理,具体采购流程和管理方案另行通知。\n三、 咨询与支持\n请各位同事知悉并提前做好工作安排,如有疑问可统一咨询: 企微“智能IT助手”,各中心接口人将负责本部门内的宣导与部门内个性化实施。\n微盘&文档常见问题答疑文档链接:https://doc.weixin.qq.com/doc/w3_AJAAAQaUAI4CN6WEkNQg7RZWP4F2Z?scode=AAoA1wcYAAcO7CE2NAAJAAAQaUAI4\n微盘管理部门接口人:"
|
||||
},
|
||||
{
|
||||
"title": "为什么企微微盘容量到期后,公司不再统一续费?",
|
||||
"content": ""
|
||||
},
|
||||
{
|
||||
"title": "因企业微信-微盘收费政策发生重大调整,费用较之前上涨6倍。前期经过与各客群沟通,当前“文档”功能在绝大多数工作场景中已能够替代“微盘”,因此先暂停微盘的续费工作。",
|
||||
"content": ""
|
||||
},
|
||||
{
|
||||
"title": "企微微盘容量到期后,原有空间内的文件有什么影响?",
|
||||
"content": "到期后企微空间将无法上传新本地文件,空间已有文件可正常访问、下载,短时间不被删除。"
|
||||
},
|
||||
{
|
||||
"title": "企微微盘空间内的文件能够保留多久?",
|
||||
"content": "企微空间内的文件暂时不会删除,如果企微官方调整文件保存策略,会提前通知"
|
||||
},
|
||||
{
|
||||
"title": "企微微盘没有扩容的情况下,每个人平均有的是多少?",
|
||||
"content": "按照集团企微账号共享容量100GB,集团现有约7000人均分,大概14MB/ 人"
|
||||
},
|
||||
{
|
||||
"title": "如何查看企微微盘已用容量",
|
||||
"content": "路径:【电脑端->微盘->左下角->个人容量】\n将鼠标悬停在已用容量位置,可查看:微盘版本(企业)、账号类型(个人)、已用容量(个人)、剩余容量(企业)。"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "企微文档",
|
||||
"items": [
|
||||
{
|
||||
"title": "在线文档里插入本地图片和其他文件,所占用的是什么应用的容量?",
|
||||
"content": "在线文档上传的本地文件只会占用“文档”容量,"
|
||||
},
|
||||
{
|
||||
"title": "视频/音频可以转成企微微盘在线文档吗?",
|
||||
"content": "只有word、Excel、演示、PPT不可以转为在线文档,其他格式无法转为在线文档"
|
||||
},
|
||||
{
|
||||
"title": "企微文档容量如何计算?",
|
||||
"content": "文档仅占用创建者的容量,文档容量根据文档正文、文档中插入的文件、图片以及版本历史记录综合计算,具体类型包括:\n文档、表格、幻灯片、智能表格、思维导图、流程图:文档正文、文档中插入的本地文件、图片、表格函数、图表等\n收集表、汇报:填写者提交的内容,包含正文、文件、图片、签名等\n版本历史记录计入文档容量:在线文档会自动保留历史版本,方便查看编辑记录,可以随时找回历史内容,避免数据丢失。文档容量将根据版本历史的大小综合计算。"
|
||||
},
|
||||
{
|
||||
"title": "企微文档中插入的文件是否占用企微微盘容量?",
|
||||
"content": "文档中插入的文件仅占用文档容量,不会占用微盘容量。"
|
||||
},
|
||||
{
|
||||
"title": "企微文档容量如何提升?",
|
||||
"content": "基础版个人总容量上限为 1G,开通文档高级功能后,文档容量提升至无限。"
|
||||
},
|
||||
{
|
||||
"title": "如何查看已用企微文档容量情况?",
|
||||
"content": "成员可在【手机端->文档->右上角的“+”->更多->关于文档】中查看文档已用容量。"
|
||||
},
|
||||
{
|
||||
"title": "如何释放已经占用的企微「文档」容量",
|
||||
"content": "方法一:删除过期文档,进入「文档 > 全部 > 我的文档」,这里将展示占用本人容量的所有文档,可以按大小排序,可自行操作删除。\n方法二:删除文档中的图片和文件,打开本人创建的文档,删除文档中已插入的图片、文件。\n方法三:删除通过汇报上传的文件,在「微盘 ->我的空间->选择对应的汇报」操作删除汇报中的文件、图片。删除后,一般10分钟左右就能释放对应的容量。注:需汇报创建者操作。\n方法四:文档版本历史记录文档瘦身,进入进入「文档 > 设置> 生成副本」,删除原文档保留副本文档\n方法五:移交文档、文件(夹)所有权给文档高级会员,将文档(文件夹)移动至个人空间,选中文件(夹)右键>转接所有权(所转交文件占用的空间会移交给接收人)\n温馨提示:\n(1)文档容量非实时更新,会在第二天更新。\n(2)文档删除后,可以在【文档->全部->回收站】中恢复对应的文档,非高级账号的文档在回收站会保留7天,高级账号的文档在回收站会保留180天。"
|
||||
},
|
||||
{
|
||||
"title": "企微文档提示:“文档容量已满,因此你无法在该文档中插入图片”",
|
||||
"content": "异常原因:插入图片所在文档所有者,企微文档免费额度已满,需由当前文档创建者购买收费高级功能\n出于数据安全和成本考虑,公司不提倡大范围使用企微在线文档,部门或个人如坚持使用,需自行购买。"
|
||||
},
|
||||
{
|
||||
"title": "企微文档所有者查看方式",
|
||||
"content": "文档窗口右上角“三杠”图标"
|
||||
},
|
||||
{
|
||||
"title": "企微文档高级功能购买链接",
|
||||
"content": "https://work.weixin.qq.com/mall/wedoc?wws=19"
|
||||
},
|
||||
{
|
||||
"title": "企业微信共享文件删除恢复",
|
||||
"content": "路径:微盘→我的文件→左下角三点菜单→回收站→选择文件→还原。"
|
||||
},
|
||||
{
|
||||
"title": "企业微信文档报错“未知错误”",
|
||||
"content": "解决方式:\n1. 关闭网络代理:Internet选项→连接→局域网设置→取消代理服务器勾选。\n2. 更新企业微信版本:左下角“关于”中检查更新。"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "文档中心",
|
||||
"items": [
|
||||
{
|
||||
"title": "Confluence文档中心网址",
|
||||
"content": "文档中心 https://docs.dc.servyou-it.com"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "网页浏览",
|
||||
"items": [
|
||||
{
|
||||
"title": "Edge&谷歌浏览器无法打开网页,错误代码: STATUS_STACK_BUFFER_OVERRUN”",
|
||||
"content": "【问题原因】\n浏览器更新后与税友安全助手组件冲突\n【影响范围】\nMicrosoft Edge 、谷歌浏览器\n【处理办法】\n下载并安装“浏览器修复补丁”,重启浏览器后即可恢复。\n下载地址:浏览器修复补丁"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "办公外设",
|
||||
"subs": [
|
||||
{
|
||||
"name": "打印复印",
|
||||
"items": [
|
||||
{
|
||||
"title": "杭州总部刷卡打印机安装",
|
||||
"content": "1.登录页面右下角“客户端下载”下载驱动,http://printer.oa.servyou-it.com/printhub/ui/sign/login.htm\nWindows:选择“柯美原厂驱动”\nMac:选择“PrintDriver”,\n打印时,Windows用户选择打印机名称 KM_Printer,MAC用户选择打印机名称 FollowMe-Black\n输入服务器地址:printer.oa.servyou-it.com:80, 绑定“统一员工账号密码”,填写完成后点击“校验”并确定\n3.首次使用刷卡取件,可前往任意楼层刷卡打印机,在提示位置刷卡后,输入员工账号和密码进行认证绑定。\n详细操作请参考文档《统一刷卡打印机安装使用说明》统一刷卡打印机安装使用说明\nhttps://doc.weixin.qq.com/doc/w3_APQA0gb5AAgUUYPrXy8QAGRQfMDgx?scode=AAoA1wcYAAcuo1wd2hAPQA0gb5AAg&qt_source=Search&qt_report_identifier=1763972439462&version=5.0.2.6008&platform=win"
|
||||
},
|
||||
{
|
||||
"title": "杭州总部刷卡打印机复印操作",
|
||||
"content": "步骤:\n1. 刷卡后点击“复印”功能。\n2. 按提示操作,完成后取件口取件。\n身份证复印支持双面模式。\n详细操作请参考文档《统一刷卡打印机安装使用说明》https://doc.weixin.qq.com/doc/w3_APQA0gb5AAgUUYPrXy8QAGRQfMDgx?scode=AAoA1wcYAAcuo1wd2hAPQA0gb5AAg&qt_source=Search&qt_report_identifier=1763972439462&version=5.0.2.6008&platform=win"
|
||||
},
|
||||
{
|
||||
"title": "杭州总部刷卡打印机扫描操作",
|
||||
"content": "步骤:\n1. 刷卡后点击屏幕“扫描”功能。\n2. 选择扫描方式:多页用“进纸器”,单页/厚重文件用“平板”。\n3. 扫描文件发送至个人邮箱。详情操作参考https://doc.weixin.qq.com/doc/w3_APQA0gb5AAgUUYPrXy8QAGRQfMDgx 。"
|
||||
},
|
||||
{
|
||||
"title": "总部刷卡打印驱动下载",
|
||||
"content": "总部刷卡打印中心网址 http://printer.oa.servyou-it.com/printhub/ui/sign/login.htm"
|
||||
},
|
||||
{
|
||||
"title": "杭州总部打印彩色稿件",
|
||||
"content": "Windows操作系统直接打印,Mac OS系统选择名称“”ColourPrine”打印机,\n打印任务完成后至杭州总部亿企赢大厦彩色打印机放置楼层为5、10、15、20层刷卡取件即可"
|
||||
},
|
||||
{
|
||||
"title": "杭州总部刷卡打印机卡纸、缺墨",
|
||||
"content": "总部员工改用其他楼层打印设备,并留言告知异常设备位置,安排处理。"
|
||||
},
|
||||
{
|
||||
"title": "杭州总部刷卡打印机显示未连接",
|
||||
"content": "尝试重启电脑后重试打印。"
|
||||
},
|
||||
{
|
||||
"title": "杭州总部刷卡打印机缺纸处理",
|
||||
"content": "总部员工可改用其他楼层打印设备,或自行补充备用纸(设备下方防潮柜柜内可取)。部门批量打印需至资产办公室领用。"
|
||||
},
|
||||
{
|
||||
"title": "杭州总部刷卡打印机取件异常",
|
||||
"content": "原因一:员工账号密码更新后,客户端密码未同步修改更新。\n检测步骤:\nWindows:任务栏打印机图标(蓝色大拇指)→配置→校验密码。\nMac:应用程序→PrinterLogin→校验账号密码。\n原因二:30分钟内未及时取件,打印任务超30分钟未取件自动取消\n操作步骤:重新打印,30分钟内取件"
|
||||
},
|
||||
{
|
||||
"title": "总部刷卡打印客户端,配置页面提示“验证失败!用户名或密码错误”",
|
||||
"content": "原因:员工账户中心员工密码到期或更新后,刷卡打印客户端未同步更新\n处理步骤:更新密码后,点击校验,提示“校验成功!”后,点击确认"
|
||||
},
|
||||
{
|
||||
"title": "总部刷卡打印客户端,配置页面提示“验证失败!用户名或密码错误次数达到系统上限,现已被锁定...\"",
|
||||
"content": "原因:密码错误输入超过3次\n处理步骤:确认员工账号密码正确(可在税友家园、eHR尝试登录),在5分钟后使用正确密码进行校验"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "网络会议",
|
||||
"items": [
|
||||
{
|
||||
"title": "小鱼易连客户端下载",
|
||||
"content": "小鱼易连客户端支持Windows、MAC、Linux(统信、麒麟),请根据所运行操作系统选择下载不同客户端。 小鱼易连下载中心:https://www.xylink.com/download"
|
||||
},
|
||||
{
|
||||
"title": "小鱼固定方云会议室预约",
|
||||
"content": "操作路径:运行小鱼易连软件→会议→我的会议→新建→预约会议。详情参考《小鱼云会议用户使用指南》。\nhttps://doc.weixin.qq.com/doc/w3_AJAAAQaUAI429WiTgHnRU0I0O5ItO?scode=AAoA1wcYAAcNyzXMF6AJAAAQaUAI4&qt_source=Search&qt_report_identifier=1764120639847&version=5.0.2.6008&platform=win"
|
||||
},
|
||||
{
|
||||
"title": "小鱼固定方云会议预约信息查询",
|
||||
"content": "小鱼固定方云会议预约信息查询需桌面IT支持人工坐席处理,请按一下步骤进行操作。\n回复“IT”获取桌面IT支持人工支持链接\n点击IT支持人工支持链接进入人工坐席咨询窗口\n输入需要查询的小鱼固定方会议室号,会议时间区间\n耐心等待人工支持坐席回复"
|
||||
},
|
||||
{
|
||||
"title": "小鱼云会议使用方法",
|
||||
"content": "详情参考《小鱼云会议用户使用指南》。\nhttps://doc.weixin.qq.com/doc/w3_AJAAAQaUAI429WiTgHnRU0I0O5ItO?scode=AAoA1wcYAAcNyzXMF6AJAAAQaUAI4&qt_source=Search&qt_report_identifier=1764120639847&version=5.0.2.6008&platform=win"
|
||||
},
|
||||
{
|
||||
"title": "小鱼固定方云会议室号及主持人密码",
|
||||
"content": "25方:会议号9083894961,密码348124,主持密码569149\n50方:会议号9083284868,密码502892,主持密码625067\n100方:会议号9083261987,密码359615,主持密码374852"
|
||||
},
|
||||
{
|
||||
"title": "小鱼直播权限申请",
|
||||
"content": "无需申请,新建直播即可,无人数限制。"
|
||||
},
|
||||
{
|
||||
"title": "小鱼云会议室录像和会议统计提取",
|
||||
"content": "企业云会议室:登录一站式运维平台-服务目录-IT支持服务-活动与会议支持,支持级别\"资料下载“,服务内容“录像下载”或“活动统计”补充信息会议号,以及会议直至时间。\n个人云会议室:客户端→文件夹→我的文件夹查看历史录制。正常情况支持人员会在1小时内处理完成,请关注“一站式运维平台”工单完工消息提醒,通过我的工单-我的创建-查看并获取下载链接"
|
||||
},
|
||||
{
|
||||
"title": "企业微信会议(腾讯会议)不可用",
|
||||
"content": "受企业微信商业政策调整影响,公司决定2023-8-1停止企业微信会议功能,企微会议功能关闭后,企微音频/视频通话+屏幕分享(企业内限16人,企业外1对1),集团全体员工可使用手机号+短信方式登录使用小鱼易连会议,30方及以下会议可使用小鱼终端号、个人云会议号,>30~100方会议需预约小鱼企业云会议号"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "会议电视",
|
||||
"items": [
|
||||
{
|
||||
"title": "会议室屏幕投屏操作步骤",
|
||||
"content": "标准会议室(如:总部办公楼层5~21楼)\n使用电视遥控器打开电视\n将投屏线(转接头)连接至电脑HDMI|Type-C接口\n大型视频会议室(总部409、410)\n黑色遥控器打开电视\n银色遥控器打开小鱼终端\n将投屏器连接至电脑\n点击弹出投屏程序,或者运行投屏器存储盘符下的投屏程序\n根据提示操作一键投屏\n超大型会议室(总部124、126、401、404、405、409)\n超大会议室设备使用,请通过“一站式运维平台-IT支持服务-员工服务入口-活动与会议技术支持”提前一天预约现场技术支持"
|
||||
},
|
||||
{
|
||||
"title": "会议室电视机无法开启",
|
||||
"content": "1. 近距离使用遥控器重试。\n2. 检查电视机背面或侧面电源键。\n确认电源连接正常。"
|
||||
},
|
||||
{
|
||||
"title": "会议室HDMI连接线或转接头缺失",
|
||||
"content": "请转人工联系“IT”服务号"
|
||||
},
|
||||
{
|
||||
"title": "会议室电视机无法投屏",
|
||||
"content": "1. 重新插拔投屏线。\n用遥控器切换电视信号源。"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "网络电话",
|
||||
"items": [
|
||||
{
|
||||
"title": "网络电话机故障",
|
||||
"content": "拔插电源线,等待3分钟后重插,启动后重试(重启约需1分钟)。"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "碎纸机",
|
||||
"items": [
|
||||
{
|
||||
"title": "碎纸机使用方法",
|
||||
"content": "确认碎纸机已通电并处于待机状态,电源指示灯正常亮起。\n将待销毁的纸质文件整齐放入进纸口,避免折叠或过厚。\n按下“运行”按钮,碎纸机将自动开始工作,直至完成处理。\n文件粉碎完成后,机器会自动停止。"
|
||||
},
|
||||
{
|
||||
"title": "碎纸机异常无反应",
|
||||
"content": "依次检查电源插头、碎纸箱是否扣紧"
|
||||
},
|
||||
{
|
||||
"title": "碎纸机卡纸处理",
|
||||
"content": "单次碎纸上限一般8张普通复印纸,取出卡纸后,插拔电源重新启动"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "办公网络",
|
||||
"subs": [
|
||||
{
|
||||
"name": "有线无线",
|
||||
"items": [
|
||||
{
|
||||
"title": "iPad如何连接总部办公WiFi网络",
|
||||
"content": "不支持员工认证方式。短期用访客码申请;长期需提交工单“终端设备网络准入申请”加白处理。\nhttp://devops.dc.servyou-it.com/dashboard,服务台-服务目录-IT支持服务-员工服务入口-终端设备网络准入申请"
|
||||
},
|
||||
{
|
||||
"title": "员工手机怎么连接公司内网?",
|
||||
"content": "打开手机搜索无线网络\n发现并连接servyou网络后,浏览器输入http://www.baidu.com等网址\n耐心等待30秒左右,触发弹出账号密码认证界面,依次输入员工账号密码和动态短信验证码登录,确保认证页面自动弹出,不要手动输入网址。\n注:\n新入职员工,请确认账号信息是否已同步,建议入职次日再尝试连接。\n苹果手机请使用QQ浏览器打开认证页面,避免使用Safari。如使用Safari,可尝试点击“显示详细信息”后访问。"
|
||||
},
|
||||
{
|
||||
"title": "手机连接公司网络提示“未获取到手机号,请与管理员联系”",
|
||||
"content": "新员工入职当天账号信息未完全同步,需第二天才可正常使用"
|
||||
},
|
||||
{
|
||||
"title": "访客在公司总部如何联网",
|
||||
"content": "申请访客码:\n1. 临时访客设备连接servyou网络,浏览器弹出认证界面后点击“申请访客码”(有效期24小时)。\n2. 拜访对象邮箱收到邮件,点击允许接入。\n3. 手机接收访客码并登录。"
|
||||
},
|
||||
{
|
||||
"title": "电脑端税友安全助手登录异常“**认证失败,网络已断开”",
|
||||
"content": "原因:账号密码输入错误、密码过期或税友安全助手安装后未重启电脑。\n解决:\n1. 重置密码: http://192.168.9.87:8080/employee-center/resetPwd.jsp\n2. 助手界面点击“注销”,手动重输密码。若无效则需重启电脑。"
|
||||
},
|
||||
{
|
||||
"title": "手机连公司内网异常“账号/密码情误或认证被拒绝!请再次确认验证码,或者重置密码”",
|
||||
"content": "确保认证界面自动弹出,勿手动输入网址。建议使用QQ浏览器,Safari可尝试“显示详细信息”后访问。"
|
||||
},
|
||||
{
|
||||
"title": "员工办公电脑总部连接办公网络",
|
||||
"content": "步骤:\n1. 连接SERVYOU无线或有线网络。\n2. 访问192.168.1.53下载安装税友安全助手。\n3. 重启电脑后登录助手(账号为邮箱前缀,密码同邮箱)。"
|
||||
},
|
||||
{
|
||||
"title": "互联网部分网页无法访问【Windows】",
|
||||
"content": "使用办公网络时,部分网页无法访问,可能因代理服务器设置异常导致。\n解决办法:\n1.检查DNS设置\n右键点击Windows 图标--“网络连接”-打开“更改适配器选项”--选择“以太网”或者“WLAN”-右键“属性”--选择“Internet协议版本 4(TCP/IP4)”-点击“属性”-选择“使用下面的DNS服务器地址”-首选DNS服务器和备用DNS服务器---输入“10.253.0.55”(公司内网专用的 DNS)和“223.5.5.5”(阿里云公共 DNS)—单击“确定”。\n2.检查代理设置\n以 Edge浏览器为例“菜单>设置>显示高级设置>更改代理设置> LAN 设置 并取消选中”为 LAN 使用代理服务器“复选框。\n办公网络异常修复"
|
||||
},
|
||||
{
|
||||
"title": "互联网部分网页无法访问【Mac】",
|
||||
"content": "使用办公网络时,部分网页无法访问,可能因代理服务器设置异常导致。\n报错信息:\n代理服务器出现问题,或者地址有误。\n解决办法:\n1.检查DNS设置\n单击菜单栏右上角的“ Apple”图标,-选择“系统偏好设置”-选择“网络”,点击连接的网络(比如Wi-Fi)--------选择“高级”,在弹出的选框中点击“DNS”选项卡,然后点击左下角【+】图标,手动添加DNS地址。如:10.253.0.55(公司内网专用的 DNS)和223.5.5.5(阿里云公共 DNS)。\n2.取消所有代理协议勾选\n单击菜单栏右上角的“ Apple”图标,-------选择“系统偏好设置”----------选择“网络”,点击连接的网络,比如是Wi-Fi--------选择“高级”,在弹出的选框中点击“DNS”选项卡,取消所有协议前的勾选项”总部办公互联网出口IP地址\n电信:115.227.36.10;联通:180.178.252.186。更新信息见税友家园公告。"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "零信任",
|
||||
"items": [
|
||||
{
|
||||
"title": "SSL VPN升级零信任 aTrust通知",
|
||||
"content": "自2026年3月19日起,因SSL VPN设备架构调整,为保障协议兼容性、性能与稳定性,SSL VPN更新升级为零信任 aTrust,请各位同事在更新升级后使用。"
|
||||
},
|
||||
{
|
||||
"title": "SSLVPN与零信任区别",
|
||||
"content": "SSL VPN是深信服传统的远程访问解决方案,EasyConnect是其客户端名称;而零信任是一种更先进的安全理念,aTrust则是深信服基于此理念推出的、用于替代和升级SSL VPN的具体产品。"
|
||||
},
|
||||
{
|
||||
"title": "Windows操作系统SSLVPN客户端EasyConnect自动升级零信任aTrust指引",
|
||||
"content": "步骤1:打开原 SSLVPN客户端easeconnect,并输入https://vpn.servyou.com.cn,点击“连接”\n步骤2:客户端登录,提示版本更新,点击“立即更新”\n步骤3:等待客户端自动完成更新和安装,完成客户端自动打开新的客户端\n步骤4:通过新的客户端sTrust,接入设置输入:https://vpn.servyou.com.cn,点击“确定接入”,然后输入账号密码登录"
|
||||
},
|
||||
{
|
||||
"title": "Mac os操作系统SSLVPN客户端自动升级零信任aTrust指引",
|
||||
"content": "Macy原客户端easeconnect首次登录后,会提示版本不匹配,需要下载新版本,下载后双击客户端安装文件完成安装即可。\n步骤1:客户端输入https://vpn.servyou.com.cn,会提示版本不匹配,点击“下载更新”\n步骤2:跳转的页面点击“立即下载”\n步骤3:双击已下载的客户端安装文件,根据提示完成安装\n步骤4:客户端安装完成后,新老客户端会同时存在,打开“atrust”客户端,并输入https://vpn.servyou.com.cn登录"
|
||||
},
|
||||
{
|
||||
"title": "atrust客户端无法建立连接?",
|
||||
"content": "请按以下步骤排查:\n退出客户端重新登录\n重启电脑后再次尝试\n检查本地网络是否正常\n确认未连接其他VPN软件"
|
||||
},
|
||||
{
|
||||
"title": "atrust客户端登录成功后但无法访问内部系统怎么办?",
|
||||
"content": "可能原因包括:\n本地缓存未刷新\nDNS缓存未更新\n权限问题\n建议:\n断开连接后重新登录\n执行DNS刷新(Windows:ipconfig /flushdns)"
|
||||
},
|
||||
{
|
||||
"title": "零信任aTrust客户端下载地址",
|
||||
"content": "Windows客户端下载:\nhttps://atrustcdn.sangfor.com/standard/windows/2.5.16.20/aTrustInstaller.exe\nMac客户端下载:\nhttps://atrustcdn.sangfor.com/standard/mac/2.5.16.20/aTrustInstaller.pkg\n安卓、苹果手机移动客户端下载:\n应用商店搜索“aTrust”app"
|
||||
},
|
||||
{
|
||||
"title": "零信任访问非公共资源权限申请",
|
||||
"content": "申请路径:打开一张式运维平台-服务目录-IT支持服务-员工零信任账号申请,类型选“权限申请”,根据资源类型选择测试资源或其他资源,其他咨询填写网址/IP/端口。\n申请地址:http://devops.dc.servyou-it.com/ITSM/workflow/service/createTicket?name=%E5%91%98%E5%B7%A5%E9%9B%B6%E4%BF%A1%E4%BB%BB%EF%BC%88%E5%8E%9FVPN%EF%BC%89%E8%B4%A6%E5%8F%B7%E7%94%B3%E8%AF%B7"
|
||||
},
|
||||
{
|
||||
"title": "零信任aTrust客户端登录提示“用户名或密码错误,您还有 次尝试的机会”",
|
||||
"content": "原因一:没有申请过零信任账户,账户不存在\n申请方式:登录移动端企业微信,企业微信→工作台→一站式运维平台→服务目录→IT支持服务→员工零信任账号申请。\n原因二:密码输入错误、忘记密码或者申请账号后首次登录\n解决办法:需登录页https://vpn.servyou.com.cn点击“忘记密码”,用户名使用邮箱前缀,根据提示重置密码\n原因三:用户名输入错误或填写了员工账户中心密码\n解决办法:零信任账号与员工账户中心账号使用不同身份认证体系,如:aTrust用户名与虽然税友家园、邮箱前缀相同,但深信服aTrust采用独立密码管理规则,重置过程也与统一员工账号密码不同步"
|
||||
},
|
||||
{
|
||||
"title": "零信任(原VPN)登录异常“账号禁用”",
|
||||
"content": "360天未登录使用aTrust会导致账号被禁用,登录运维平台-员工零信任账号申请-申请类型“账号解禁\"\nhttp://devops.dc.servyou-it.com/ITSM/workflow/service/createTicket?name=%E5%91%98%E5%B7%A5%E9%9B%B6%E4%BF%A1%E4%BB%BB%EF%BC%88%E5%8E%9FVPN%EF%BC%89%E8%B4%A6%E5%8F%B7%E7%94%B3%E8%AF%B7"
|
||||
},
|
||||
{
|
||||
"title": "零信任密码重置“用户信息匹配失败,请联系管理员,...”",
|
||||
"content": "申请开通账号(零信任账号并非入职默认开通,如有办公需求,需登录移动端企业微信,企业微信→工作台→一站式运维平台→服务目录→IT支持服务→员工零信任账号申请。)\n检查手机号码填写正确,已更换手机号,请提交员工零信任账号申请,备注填写更换的新手机号)\n检查用户名是否正确,用户名为邮箱前缀,且字母均为小写"
|
||||
},
|
||||
{
|
||||
"title": "零信任登录异常”账号锁定“",
|
||||
"content": "密码输入错误3次后系统锁定账户,不进行任何操作10分钟自动解锁。等待期间勿操作以免重置锁定计时。"
|
||||
},
|
||||
{
|
||||
"title": "零信任员工账号申请",
|
||||
"content": "员工可以因出差、居家办公等情况单独申请零信任员工账号。\n办公内网申请方式: 一站式运维平台→服务目录→IT支持服务→员工零信任账号申请(http://devops.dc.servyou-it.com)\n公司外部申请方式:登录移动端企业微信,企业微信→工作台→一站式运维平台→服务目录→IT支持服务→员工零信任账号申请。\n处理同事将会在工作时间1小时内接单,并在当天下班前处理完成,请耐心等待,处理进度请关注“一站式运维平台”企微应用消息提醒。"
|
||||
},
|
||||
{
|
||||
"title": "零信任无法收到验证短信",
|
||||
"content": "检查短信应用下所有信息目录,查看是否被垃圾信息、推广信息过滤\n重启手机。\n3. 机主发送短信“11111”至10690999申请解除黑名单。"
|
||||
},
|
||||
{
|
||||
"title": "零信任验证手机号码更改",
|
||||
"content": "通过一站式运维平台提交“员工零信任账号申请”工单,备注新旧手机号。手机端路径:企业微信→工作台→一站式运维平台。"
|
||||
},
|
||||
{
|
||||
"title": "零信任登录提示异常“网络请求异常,请稍后重试”",
|
||||
"content": "原因和解决办法:\n一般是网络波动导致,切换自己手机热点测试使用。"
|
||||
},
|
||||
{
|
||||
"title": "零信任登录提示异常“路由连接失败”",
|
||||
"content": "原因:网络冲突或DNS缓存。\n解决:\n使用外部网络(如手机热点)测试。\nMac:网络设置中添加DNS 10.253.0.55和223.5.5.5。"
|
||||
},
|
||||
{
|
||||
"title": "零信任登录提示异常“选路连接失败,可能当前连接网络异常,请稍后重试”",
|
||||
"content": "服务器地址栏需要完整输入 https://vpn.servyou.com.cn,不能省略https://,也不能填写为http://vpn.servyou.com.cn\n因安全和网络原因限制,集团总部(杭州)办公网络禁止连接零信任\n部分税局、酒店或其他无线网络波动或限制,\n解决方法:可尝试重启电脑后,使用手机热点连接网络,重新登录零信任"
|
||||
},
|
||||
{
|
||||
"title": "零信任aTrust客户端支持桌面操作系统清单",
|
||||
"content": "【Windows系统】\nWindows 7~11\n【Mac os】\nMacOS10.13~10.15,Mac11.x~Mac OS 14.x\n【Linux/国产系统】\nUOS(V20) For X86、ARM、MIPS、Loongarch\n麒麟(V10/V10 SP1)For X86、ARM、MIPS\n麒麟(V10 SP1)For Loongarch\nUbuntu 16、18、20、22、24 For X86\n中科方德(5.0-G220/5.0-G220H) For X86、ARM、Loongarch\n注意:\n已发布版本中,windows11 arm架构的电脑不支持使用工作空间,同时不支持麒麟server系统、中标麒麟系统、deepin系统、centos系统接入。"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "终端安全",
|
||||
"subs": [
|
||||
{
|
||||
"name": "税友安全助手",
|
||||
"items": [
|
||||
{
|
||||
"title": "税友安全助手卸载操作",
|
||||
"content": "卸载税友安全助手后将无法正常在杭州总部进行网络访问,请确认税友安全助手卸载原因,如:电脑更换、离职、离开杭州总部工作\n2.通过以下方式获取卸载动态码\nwindows系统:下载IT提供卸载助手脚本 https://drive.weixin.qq.com/s?k=AAoA1wcYAAch0J2Cxe,直接双击运行后生成动态码,回复生成的动态码,填入桌面IT支持回复的卸载码进行卸载\nmac os系统:右键右上角的安全助手图标,点击卸载,随后提供动态码,\n3.将生成的动态码,通过智能IT助手 人工服务,提供生成的动态码,获取回复的卸载码进行卸载"
|
||||
},
|
||||
{
|
||||
"title": "Window系统下载安装“税友安全助手”",
|
||||
"content": "步骤:\n连接servyou网络,访问http://192.168.1.53 ,员工电脑通道-点击提示链接,下载安装“税友安装助手”。\n2. 安装后重启电脑,在任务栏右下角打开助手登录。\n税友安全助手下载链接 http://192.168.1.53:8099/portal/redirect/nacc/"
|
||||
},
|
||||
{
|
||||
"title": "MAC OS系统下载安装“税友安全助手",
|
||||
"content": "步骤:\n1. 连接servyou网络,访问http://192.168.1.53/portal/redirect/nacc/下载。\n2. 根据系统版本选择安装项(如MAC OS 14以上选70133)。\n3. 运行安装程序,按系统提示授权(点击“是”/“仍要打开”)。\n4. 输入开机密码(盲输),完成安装后重启电脑。"
|
||||
},
|
||||
{
|
||||
"title": "税友安全助手打开方式和查看运行状态图标",
|
||||
"content": "Windows系统:右下角任务栏图标;Mac:右上角菜单栏图标。"
|
||||
},
|
||||
{
|
||||
"title": "Mac OS系统安装税友助手报错“身份不明的开发者”",
|
||||
"content": "解决:\n1. 系统偏好设置→安全性与隐私→允许安装。\n2. 输入开机密码(盲输),完成安装后重启。"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "火绒安全",
|
||||
"items": [
|
||||
{
|
||||
"title": "火绒安全终端下载安装",
|
||||
"content": "火绒安全是公司指定使用的杀毒软件,请根据情况选择安装版本:\n总部员工:请选择火绒终端安全企业版,下载地址:\nWindows系统: http://huorong.oa.servyou-it.com/deploy/installer.exe\nMacOS系统: http://huorong.oa.servyou-it.com/deploy/mac-inst.dmg\n安装过程中控制中心地址设置: http://huorong.oa.servyou-it.com:80\n区域员工:请选择火绒安全软件个人版\nWindows系统 https://www.huorong.cn/person5.html"
|
||||
},
|
||||
{
|
||||
"title": "火绒安全如何卸载",
|
||||
"content": "火绒安全卸载:向IT支持人工说明卸载原因获取输入卸载码,打开Windows系统控制面板-程序和功能,选择火绒终端安全管理系统安全终端-右键卸载,输入获取的卸载码"
|
||||
},
|
||||
{
|
||||
"title": "火绒安全如何退出",
|
||||
"content": "向IT支持人工说明退出原因获取卸载密码(火绒安全管理员密码),屏幕右下角火绒图标,点击“退出火绒”"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "员工账户中心",
|
||||
"items": [
|
||||
{
|
||||
"title": "员工账户密码重置和修改",
|
||||
"content": "步骤:\n1. 访问http://192.168.9.87:8080/employee-center/resetPwd.jsp重置,密码需10位以上含大小写字母、数字、符号中的三种。\n2. 同步修改本地客户端(如总部刷卡打印机客户端、税友安全助手)密码。\n3.如不确认原密码或者原密码忘记,重置方式请选择“短信验证码重置”\n注意事项\n-员工账户密码有效期为90天,密码到期前3天会通过消息进行提醒,到期后未更新将重置为随机密码,需通过短信验证码重置方式找回\n-已经无法联网情况,可以借用同事电脑或者通过手机热点连接零信任后执行密码修改操作\n-使用独立密码的零信任和邮件客户端,无需修改重置"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "风险应对",
|
||||
"items": [
|
||||
{
|
||||
"title": "终端安全风险预警",
|
||||
"content": "如果您遇到网络诈骗、网络攻击、恶意病毒、钓鱼邮件、账号被盗、信息泄露等安全问题,或已点击链接,请立即点击链接向“信息安全支持”进行反馈.https://work.weixin.qq.com/nl/innerkfid/ikfCtcYBwAAtkP_ODMcv53bGE5x5M9YYw"
|
||||
},
|
||||
{
|
||||
"title": "重大安全活动相关信息和管理要求",
|
||||
"content": "活动期间禁用社交软件,公共服务策略调整详见公告链接。\n活动时间以税友家园通知为准,或咨询“信息安全支持”服务号"
|
||||
},
|
||||
{
|
||||
"title": "重大安全活动期间软件限制“微信无法登录“",
|
||||
"content": "本答案适用于重大安全活动期间,当前时期可能不适用,活动期间范围请关注税友家园公告\n活动期间禁止使用微信/QQ/脉脉等,需通过工单申请特殊权限。\n申请路径:一站式运维平台→集团内部服务→其他服务→办公及远程接入网络安全策略申请。https://devops.dc.servyou-it.com/itsm/service/workbench\n=gf4ljb\n如有疑问请联系企业微信“员工服务-信息安全支持”"
|
||||
},
|
||||
{
|
||||
"title": "远程控制软件使用限制与特殊申请(向日葵、Todesk、Teamivew、Teamview)",
|
||||
"content": "根据 2023年第【13】号《税友集团信息安全管理制度》第二十二条,2.2.7. 远程办公中规定,禁用使用远程工具(包括不限于向日葵)访问个人办公电脑。即不得使用远程工具用于员工远程办公用途。特殊情况需通过工单申请:申请路径:一站式运维平台→集团内部服务→其他服务→办公及远程接入网络安全策略申请,如有疑问请企业微信联系“员工服务-信息安全支持”。https://devops.dc.servyou-it.com/ITSM/workflow/service/createTicket?name=%E5%8A%9E%E5%85%AC%E5%8F%8A%E8%BF%9C%E7%A8%8B%E6%8E%A5%E5%85%A5%E7%BD%91%E7%BB%9C%E5%AE%89%E5%85%A8%E7%AD%96%E7%95%A5%E7%94%B3%E8%AF%B7\n向日葵软件下载地址:https://sunlogin.oray.com/download"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "资产管理",
|
||||
"subs": [
|
||||
{
|
||||
"name": "硬件资产",
|
||||
"items": [
|
||||
{
|
||||
"title": "个人名下公司资产及资产详细信息查询",
|
||||
"content": "方式一:登录eHR系统,进入“个人信息-个人固定资产”页面,可查询领用设备清单、资产名称、资产编号、规格\n方式二:查看设备固定资产标签,一般在设备底部或侧边,包含资产名称、启用时间、资产编号、型号"
|
||||
},
|
||||
{
|
||||
"title": "办公电脑升级和汰换流程",
|
||||
"content": "操作步骤:\n1.自行提交“IT资产升级申请”,申请流程路径:企业微信-工作台-审批-IT资产升级申请\n2.审批通过后,总部同事至122室办理;区域同事联系当地资产管理员。\n注意事项:\n升级申请内存、硬盘、显示器,其容量、尺寸和型号需符合《IT资产配置标准》中的岗位要求,特殊超标申请需部门领导审批。\n办公电脑启用时间达到五年,可以申请整机汰换(Mac电脑汰换周期暂定未8年)\n《IT资产配置标准》文档链接:https://oa.servyou-it.com/spa/document/index.jsp?id=3471&router=1#/main/document/detail"
|
||||
},
|
||||
{
|
||||
"title": "公司领用办公电脑使用或启用年限已满5年,可以申请延期使用吗?",
|
||||
"content": "公司电脑启用年限满5年不是强制汰换要求,可以继续使用,无需办理延期申请."
|
||||
},
|
||||
{
|
||||
"title": "办公IT资产借用/退还",
|
||||
"content": "可借用设备类型:办公电脑、显示器、小鱼会议终端、会议音箱\n申请审批流程入口:企业微信-审批-资产借用申请\n领取/退还地点:\n总部同事至税友亿企赢大厦122室办理;\n区域同事联系当地资产管理员。"
|
||||
},
|
||||
{
|
||||
"title": "办公IT资产领用/退还",
|
||||
"content": "可领用设备类型:办公电脑、显示器、键盘、鼠标、网线、话机\n申请审批流程入口:企业微信-审批-资产领用申请\n注:键盘、鼠标、网线、话机等低值易耗品无需提交申请流程\n领取/退还地点:\n总部同事至税友亿企赢大厦122室办理;\n区域同事联系当地资产管理员。"
|
||||
},
|
||||
{
|
||||
"title": "系统维修工具借用",
|
||||
"content": "借用工具类型:系统安装U盘、螺丝刀、移动硬盘(盒)\n借用流程:\n1.回复“IT”获取桌面IT支持人工支持链接\n2.点击IT支持人工支持链接进入人工坐席咨询窗口\n3.说明需要借用的工具类型、使用地点、使用时间\n4.耐心等待人工支持坐席回复,确认设备库存。\n5.总部员工前往121室进行借用登记,区域同事联系资产管理员"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "软件资产",
|
||||
"items": [
|
||||
{
|
||||
"title": "公司限制使用的商业软件清单",
|
||||
"content": "正版化严控清单(包括但不限于):\nXshell/Xftp/Xmanager、InterBase、Delphi、MyEclipse、CINEMA4D、Anaconda、Fiddler、Navicat、VMware全系列、UltraEdit、HP Loadrunner、Adobe全系列(如Acrobat、Acrobat Reader、Photoshop、lllustrator、After Effects、Premiere、Lightroom、Audition、InDesign、Adobe XD等)。"
|
||||
},
|
||||
{
|
||||
"title": "parallelsDesktop软件使用限制与替代方案",
|
||||
"content": "公司实行软件正版化管理,收费软件需经需求评估后安装。\n替代方案:建议使用VirtualBox。\n资源包下载(含Win7/Win10纯净版及VB安装包):\n链接:https://pan.baidu.com/s/1ly-3vDMOh48yRXRo-b-hBg 提取码:serv\n安装指南:在VirtualBox中通过“管理→导入虚拟电脑”直接导入系统。"
|
||||
},
|
||||
{
|
||||
"title": "visio软件使用限制与替代方案",
|
||||
"content": "公司实行软件正版化管理,收费软件需经需求评估后安装。\n替代方案:\n1. 仅需读取Visio文档:使用Microsoft Visio查看器(https://www.microsoft.com/zh-cn/download/confirmation.aspx?id=51188 )。\n2. 需编辑文档且可接受非vsdx格式:使用ProcessOn在线工具(https://www.processon.com/i/5c99dd75e4b0180f6ee6c615 )。注:敏感信息勿用。\n3. 必须输出vsdx格式(如外部分享):走正式审批流程,路径:企业微信→工作台→审批→商业软件服务申请,费用2040元由部门分摊,需事业部总经理审批。"
|
||||
},
|
||||
{
|
||||
"title": "微软office软件使用限制与替代方案",
|
||||
"content": "公司推行软件正版化政策,禁止安装盗版软件。安装Microsoft Office需部门分摊费用3070元,申请流程:\n路径:企业微信→工作台→审批→商业软件服务申请。\n审批要求:需事业部总经理批准。\n建议:若无特殊需求,优先安装WPS作为替代方案。"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "自备电脑",
|
||||
"items": [
|
||||
{
|
||||
"title": "自备电脑申请及审核",
|
||||
"content": "步骤:\n1. 确认岗位在《自备电脑补贴岗位清单》内。\n2. 电脑配置需高于公司标准。\n3. eHR系统→流程申请→自备电脑使用申请/变更,提交购买凭证。\n4. 半工作日内完成配置审核。详情见《自备电脑使用及补贴管理办法》。\n详情请查看《自备电脑使用及补贴管理办法》\nhttps://oa.servyou-it.com/spa/document/index2file.jsp?id=75578&versionId=78041&imagefileId=96908&router=1#/main/document/fileView"
|
||||
},
|
||||
{
|
||||
"title": "所有在公司使用的自备电脑的都需要登记?不领取补贴但使用自备电脑的员工是否需要登记?",
|
||||
"content": "根据公司管理要求,所有在公司使用的自备电脑的员工,都需要进行自备电脑信息登记"
|
||||
},
|
||||
{
|
||||
"title": "自备电脑购买二手电脑如何计算购买时间?",
|
||||
"content": "二手按电脑电脑首次销售发票开具时间开始计算,如果无法提供购买发票,则按设备出厂时间计算,也可按官网查询的首次购买,以及设备激活、保修开始时间计算"
|
||||
},
|
||||
{
|
||||
"title": "自备电脑无法提供销售发票或者发票遗失如何计算购买时间?",
|
||||
"content": "可以使用平台订单、收据、转账记录作为购买凭证时间参考依据(不包含二手电脑二次销售凭证),如果没有购买凭证参考依据,则使用设备出产时间"
|
||||
},
|
||||
{
|
||||
"title": "自备电脑发票时间、出厂时间、购买记录不一致如何计算?",
|
||||
"content": "补贴发放截止时间采纳的优先次序为 , 发票时间>购买记录>出厂日期"
|
||||
},
|
||||
{
|
||||
"title": "使用配件自行组装自备电脑如何计算出厂时间",
|
||||
"content": "按整机或主要配件(CPU、主板)任一主要配件购买凭证或出厂日期计算"
|
||||
},
|
||||
{
|
||||
"title": "自备电脑如何查看通过电脑序列号查询生产日期",
|
||||
"content": "联想 https://pre.wx.lenovo.com.cn/wordpress/?p=1456 https://newsupport.lenovo.com.cn/guardeploySearch.html?fromsource=guanwang&_ga=2.67510865.1168833807.1598233691-1876919846.1595491060\nhttps://newthink.lenovo.com.cn/guarantee.html?v=329b114e91fec9e2336126dfd1b6ff42\nDell https://www.dell.com/support/contents/zh-cn/article/product-support/self-support-knowledgebase/locate-service-tag/notebook https://www.dell.com/support/contractservices/zh-cn/\nHP https://support.hp.com/cn-zh/document/ish_2898769-2609229-16 https://support.hp.com/cn-zh/check-warranty\n微软 https://support.microsoft.com/zh-cn/surface/%E6%9F%A5%E6%89%BE-surface-%E8%AE%BE%E5%A4%87%E5%92%8C%E9%85%8D%E4%BB%B6%E6%88%96microsoft%E9%85%8D%E4%BB%B6%E7%9A%84%E5%BA%8F%E5%88%97%E5%8F%B7-6c0abc0c-2b45-247d-f959-70e504e55fa5 https://mybusinessservice.surface.com/en-US/CheckWarranty/CheckWarrantyhttps://support.microsoft.com/zh-cn/surface/surface-%E4%BF%9D%E4%BF%AE-%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98%E8%A7%A3%E7%AD%94-1217913a-2692-424e-a5c4-0eb0de84f05a\n小米 https://www.mi.com/service/notebook/drivers https://47wke3.smartapps.baidu.com/?_chatQuery=%E5%B0%8F%E7%B1%B3%E6%80%8E%E4%B9%88%E6%9F%A5%E5%87%BA%E5%8E%82%E6%97%A5%E6%9C%9F&searchid=14302220643046412854&_chatParams=%7B%22agent_id%22%3A%22592d7%22%2C%22content_build_id%22%3A%2218852dd5%22%2C%22from%22%3A%22q2c%22%2C%22token%22%3A%22alVvR3EyL3lWVnpwRk02ZFVSUG9GUzhkMkNZTDFwa0IySVJBUS9ORUxob2cyb0pObjdmVDhXQVJteEpqWjVMY2VMVzRoVmtBejBjRWdnNEdTNG5MclVQUGRIc3ZLa1QvMFhSQUdLMmhPRVVveHRQT3AvQUhTSldHTEdqU2NPa0NkUDJVNEU1MEVxK0o2UGg5czJjQ09CWUQzcVh6elRFVGJiNitpNmFvakxzPQ%3D%3D%22%2C%22chat_no_login%22%3Atrue%7D&_swebScene=3711000610001000\n宏基 https://community.acer.com/cn/kb/articles/863-%E5%BA%8F%E5%88%97%E5%8F%B7%E6%88%96snid%E5%8F%B7 https://www.acer.com.cn/myhelp.html?type=3&serverid=143\n华为 https://consumer.huawei.com/cn/support/content/zh-cn00688529/ https://consumer.huawei.com/cn/support/warranty-query/\n华硕 https://www.asus.com.cn/support/article/566/ https://www.asus.com.cn/support/warranty-status-inquiry/\n神州 机器底部有一个lOT http://www.hasee.com/after/index\n苹果\nhttps://support.apple.com/zh-cn/102767 https://checkcoverage.apple.com/user-consent"
|
||||
},
|
||||
{
|
||||
"title": "自备电脑补贴岗位是如何设定的?",
|
||||
"content": "自备电脑补贴岗位范围,是针对对电脑性能有较高性能需求技术岗位,以及部分特殊需求岗位;对于这部分性能要求较高的开发和测试岗位,一方面我们提高了这些岗位公司配发电脑标准,同时保留了自备电脑补充策略供员工自由选择"
|
||||
},
|
||||
{
|
||||
"title": "自备电脑管理办法提到较高性能的技术岗位是如何确定的?",
|
||||
"content": "根据总部历年员工满意度调查中员工反馈,以及IT资产配置标准评估过程中电脑内存CPU报警统计信息,开发和测试岗位所使用电脑的CPU和内存报警次数和时长远高于其他岗位(80%内存CPU报警阈值),开发和测试类岗位与其他岗位相比,对电脑性能有明显较高要求。"
|
||||
},
|
||||
{
|
||||
"title": "自备电脑补贴岗位以后还会有新增或变更吗?",
|
||||
"content": "参考《IT资产配置标准》中岗位与设备变更和执行反馈意见,由管理部门共同商议修订,并在EHR系统同步更新。"
|
||||
},
|
||||
{
|
||||
"title": "自备电脑配置是否符合IT资产配置标准如何判断?",
|
||||
"content": "自备电脑配置审核标准要求,主要看配置是否达到购买日期或补贴发放历史年度IT资产配置标准\n●当前自备电脑配置需满足任职岗位的当前公司配发电脑配置最低标准\n●CPU主要看是否同级&同代(i3\\i5\\i7\\i9)同代(八代、十代、11代、12代...),跨级跨带可酌情增加和降低审核标准(每相差1年一代按1年累积计算)。\n●内存和硬盘不符情况下,可提供升级后的配置信息截图或升级配件购买记录"
|
||||
},
|
||||
{
|
||||
"title": "\"自备电脑补贴到期截止时间是怎么计算的?",
|
||||
"content": "●6/10前所有现有领取补贴员工需进行登记,不登记电脑信息,不发放补贴\n●当前使用自备电脑购买日期<5年,补贴领取截止时间为当前使用电脑从购买之日起5年\n●当前使用自备电脑购买日期>5年,停止补贴发放\n●非补贴岗位6/3日期后购买的电脑不享受存量自备电脑补贴政策"
|
||||
},
|
||||
{
|
||||
"title": "自备电脑补贴年限规定?",
|
||||
"content": "单台自备电脑电脑补贴有效期为由购买日期计算至5年截止。"
|
||||
},
|
||||
{
|
||||
"title": "自备电脑补贴岗位内的人员,后续电脑更换了需要怎么操作",
|
||||
"content": "单台自备电脑补贴期限最多为5年,到期后自动停发补贴。若要继续申请补贴,新购或更换设备后,须在5个工作日内在EHR系统重新提交“自备电脑使用申请”,并提供购买凭证(发票、收据)或出厂日期证明。"
|
||||
},
|
||||
{
|
||||
"title": "\"自备电脑电脑补贴岗位外的补贴时间是到什么时候结束?",
|
||||
"content": "自备电脑补贴岗位外正在享受补贴的员工,继续享受补贴至当前使用自备电脑补贴有效期截止;"
|
||||
},
|
||||
{
|
||||
"title": "自备补贴到期了,不想用公司配发电脑,可以继续使用自备电脑吗?",
|
||||
"content": "可以继续使用自备电脑,但无法领取补贴,需遵守自备电脑管理要求,进行自备电脑登记,纳入自备电脑台账管理。登录eHR系统- 流程申请-自备电脑使用申请进行登记。"
|
||||
},
|
||||
{
|
||||
"title": "\"入职、离职、调岗,自备电脑与公司电脑直接切换当月,自备电脑使用不足1月,补贴金额怎么计算",
|
||||
"content": "自然月内累计使用自备电脑办公≥15天,按100元/月标准随工资发放补贴。"
|
||||
},
|
||||
{
|
||||
"title": "自备电脑补贴到期后,如何申请公司电脑?",
|
||||
"content": "自备电脑申请路径:EHR系统个人信息-个人固定资产查看中-进行报备。"
|
||||
},
|
||||
{
|
||||
"title": "实习生可以申请自备电脑补贴吗?",
|
||||
"content": "实习生不在自备电脑补贴范围内"
|
||||
},
|
||||
{
|
||||
"title": "\"自备电脑如果使用的MAC电脑或者AMD 或非intel CPU应该如何评估?",
|
||||
"content": "与同类intel芯片做比较,在20%性能差异范围内,可使用通用查询工具AI或CPU天梯图查询相关性能对比信息,酌情综合评估是否满足岗位工作需要。"
|
||||
},
|
||||
{
|
||||
"title": "\"购买的自备电脑原始配置没有达到岗位要求,后续通过升级后达到配置要求,可以获得补贴吗?",
|
||||
"content": "通过后续升级后达到岗位IT资产配置标准符合补贴资格条件,硬盘容量可以通过外置连接方式升级,但内置硬盘应为固态硬盘,且固态硬盘容量不低于256GB。"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "其他业务",
|
||||
"subs": [
|
||||
{
|
||||
"name": "活动支持",
|
||||
"items": [
|
||||
{
|
||||
"title": "会议室预定",
|
||||
"content": "总部会议室:企业微信→工作台→“会议室预定”应用。\n区域会议室(北京/石家庄等):企业微信→工作台→“会议室”应用。"
|
||||
},
|
||||
{
|
||||
"title": "活动与会议技术支持预约",
|
||||
"content": "提交预约工单(需至少提前1天):https://oa.servyou-it.com/spa/portal/static/index.html#/main/portal/portal-8-34 ,选择“重要活动支持预约”。"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "党工",
|
||||
"items": [
|
||||
{
|
||||
"title": "税友家园",
|
||||
"content": "税友家园网址: https://oa.servyou-it.com\n账号密码认证方式:统一员工账号密码\n税友家园登录异常\n情况一:新员工入职次日方可登录,请耐心等待。\n情况二:账号密码错误,通过重置密码解决(http://192.168.9.87:8080/employee-center/resetPwd.jsp)。"
|
||||
},
|
||||
{
|
||||
"title": "官网地址",
|
||||
"content": "税友集团官网地址:https://www.servyou.com.cn\n亿企赢官网地址:https://www.17win.com\n亿企鑫福官网地址:https://17xinfu.com"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "人力资源",
|
||||
"items": [
|
||||
{
|
||||
"title": "人力相关问题咨询(考勤、薪资、保险等)",
|
||||
"content": "通过企业微信→员工服务→“人力资源共享服务咨询”联系人力资源部门。https://work.weixin.qq.com/nl/innerkfid/ikfCtcYBwAAvSRL5i5b_Xia8vCmFc2gRw"
|
||||
},
|
||||
{
|
||||
"title": "人力资源管理平台",
|
||||
"content": "人力资源管理平台别名:税友eHR、EHR\n网站地址: https://ehr.dc.servyou-it.com\n应用路径:企业微信-工作台-税友eHR\n账号密码认证方式:统一员工账号密码,账号同企业邮箱的前缀"
|
||||
},
|
||||
{
|
||||
"title": "员工个人手机号更改",
|
||||
"content": "联系HR在EHR系统中修改。通过企业微信→员工服务→“人力资源共享服务咨询”联系人力资源部门。https://work.weixin.qq.com/nl/innerkfid/ikfCtcYBwAAvSRL5i5b_Xia8vCmFc2gRw"
|
||||
},
|
||||
{
|
||||
"title": "网络学院相关信息",
|
||||
"content": "企业微信入口(推荐方式): 企业微信-工作台-网络学院\n电脑端访问:https://servyoulearning.yunxuetang.cn\n手机端链接:https://servyoulearning.yunxuetang.cn/m\n新入职当日13:00后生成账号,若无法登录请次日重试。\n实习生无网络学院账号,会定期禁用,转正后可以进入学习。 如有网络学院相关疑问可咨询刘馨月。"
|
||||
},
|
||||
{
|
||||
"title": "新员工入职IT指引手册获取",
|
||||
"content": "新员工入职IT指引手册/指南地址:https://doc.weixin.qq.com/doc/w3_AU8AjwZhAIgyNSkHK3OTjWueJe1oa?scode=AAoA1wcYAAcD09JltaAQgAuAYMANY"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "财务",
|
||||
"items": [
|
||||
{
|
||||
"title": "财务工作相关问题",
|
||||
"content": "请联系财务中心或企业微信→员工服务→“总部报销服务台”。\n常见问题参考:\n财务软件安装:参考《财务人员工作环境安装指南》。\n差旅报销:通过企业微信→通讯录→员工服务→“总部报销服务台”咨询。\n金蝶EAS打印中断:重启软件或电脑后重试。\n金蝶安装:方式一:访问 http://10.90.5.92/down/kingdee.exe或http://192.168.2.67:6888/eassso/login ,点击帮助按钮获取安装包。使用问题咨询宋会讲。"
|
||||
},
|
||||
{
|
||||
"title": "财务共享平台地址",
|
||||
"content": "财务共享平台,旧地址192.168.9.215已下线,可以访问新域名:http://cwgx.oa.servyou-it.com/"
|
||||
},
|
||||
{
|
||||
"title": "手机企微无法访问“总部差旅报销”",
|
||||
"content": "问题现象:打开后报错“Whitelabel Error Page...Status=403”。\n解决步骤:\n1. 清理缓存:企业微信APP→头像→设置→通用→存储空间→清理缓存。\n退出并重新登录企业微信。"
|
||||
},
|
||||
{
|
||||
"title": "手机企微滴滴打车权限开通/管理",
|
||||
"content": "企微联系应用管理员:刘红霞"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "物业",
|
||||
"items": [
|
||||
{
|
||||
"title": "物业服务相关问题(工牌、门禁、停车等)",
|
||||
"content": "联系人指引:\n咖啡馆/食堂超市:于闻婧\n停车/保洁:谭欣\n补卡/餐卡:陈乐\n三楼食堂包厢:王蕊\n会议接待:袁丽丽\n其他问题:咨询物业服务号。https://work.weixin.qq.com/nl/innerkfid/ikfCtcYBwAAUtkMyOToCZqe42ZBDupVEQ"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "运维",
|
||||
"items": [
|
||||
{
|
||||
"title": "一站式运维平台综合信息",
|
||||
"content": "登录地址: http://devops.dc.servyou-it.com\n一站式运维平台使用统一员工账号密码+短信认证\n运维平台相关问题请咨询企业微信联系【员工服务号:工单系统技术支持】如:运维平台无法登录\n运维平台账号密码登录二次认证密码获取方法详见:运维平台登录说明https://doc.weixin.qq.com/doc/w3_AM4AvwYHAKkhd6GOfh1SAe8ID9Kbv?scode=AAoA1wcYAAcl8IQiqyAM4AvwYHAKk&qt_source=Search&qt_report_identifier=1764050011765&version=5.0.2.6008&platform=win\n维平台企微认证免扫描失效处理:\nchrome浏览器输入网址chrome://flags/#block-insecure-private-network-requests,搜索 Local Network Access Checks,改成Disabled\nedge浏览器输入网址edge://flags/#block-insecure-private-network-requests"
|
||||
},
|
||||
{
|
||||
"title": "JumpServer堡垒机综合信息",
|
||||
"content": "堡垒机访问权限申请:通过一站式运维系统提交申请,紧急情况联系工单处理人。\nhttp://devops.dc.servyou-it.com/itsm/service/workbench"
|
||||
},
|
||||
{
|
||||
"title": "GitLab相关问题",
|
||||
"content": "1. 账号锁定:5分钟后自动解锁;若忘记密码,请通过“员工账号密码重置”功能操作。\n2. 二次验证码手机更换:联系吴云鹏修改。\n3. 系统后台问题:联系吴云鹏处理。"
|
||||
},
|
||||
{
|
||||
"title": "阿里云综合信息",
|
||||
"content": "1.阿里云账号问题咨询:方笑\n2.阿里云账号验证mfa:陈伟章"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "产研",
|
||||
"items": [
|
||||
{
|
||||
"title": "Walle瓦力平台综合信息",
|
||||
"content": "平台介绍:\nwalle 是提供集 接口文档自动生成、接口文档查看、接口调试、接口Mock、接口测试用例、接口调用代码生成、对外提供在线/离线文档 等功能的 自动化、智能化的综合性接口管理平台。可以提升研发接口开发中各阶段的效率与减少协作时的沟通成本,并助力团队制定符合团队的研发流程与规范。适合公司 GB 端及各分公司研发同学使用。\n功能介绍:\n接口生成与使用流程图\n平台账号密码:\n访问 walle 平台, 使用线上的 员工邮箱前缀 、 邮箱密码 登录 (eg: 账号 liaobl, 密码:xxxxxx), 可以在 全部项目 页面 查看所有项目, 可以随意查看项目的接口文档,如果需要创建项目或对接口进行调试、Mock、修改等操作,需要找【于程程】或项目负责人 添加权限\n联系支持:\n使用过程有任何问题或者需求的可以直接联系[于程程],如:更换手机、需要获取新的二次认证二维码等\n如需及时了解 walle 平台的更新状态,可加入 【Walle 金牌服务群】,入群请联系[于程程]发送入群邀请"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "运营",
|
||||
"items": [
|
||||
{
|
||||
"title": "税友内管系统综合信息",
|
||||
"content": "别名:小蚂蚁、小蜜蜂\n客户端不支持苹果操作系统安装运行\n税友内管系统客户端下载地址:https://drive.weixin.qq.com/s?k=AAoA1wcYAAcLEI7DnM\n内管系统咨询支持:倪银飞。"
|
||||
},
|
||||
{
|
||||
"title": "基础运营平台综合信息",
|
||||
"content": "基础运营平台别名BOSS\n基础运营平台地址:https://boss.dc.servyou-it.com/#/\n账号密码认证方式:统一员工账号密码\n登录提示账号密码错误:\n优先检查账号密码是否过期\n检查电脑右下角系统时间是否准确,若时间存在偏差,请手动同步时间"
|
||||
},
|
||||
{
|
||||
"title": "快速查数工具综合信息",
|
||||
"content": "快速查数工具别名QQT\n账号密码登录:账号密码与内部统一员工账密一致。\n使用问题咨询:联系公共数据团队:李晓刚(17682348007)、朱文赵(15088664612)。如:若二次认证失败\n报表权限开通:查询广场-选择对应报表操作列“申请”按钮,报表管理员会进行审批。"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
Reference in New Issue
Block a user