mirror of
https://github.com/kuaifan/dootask.git
synced 2026-06-26 09:12:14 +00:00
feat(ai-kb): 系统应用知识库迁出核心库,改由应用自带
主程序核心 RAG 知识库不再内置系统应用文档,改由各应用安装时自带并同步到 overlay。 - 删除 approve/okr/minder/drawio/office/fileview/search/ai-assistant 等系统应用共 125 个核心 chunk - _meta/feature-map.yaml 移除已迁出 feature 块;tool-binding.yaml 清理失效 feature 引用 - 13 个保留文件的跨库死链 [[xref]] 降级为纯文本 - docker/appstore/.gitignore 忽略应用 KB overlay 目录(ai-kb/*,保留 .gitkeep) Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
parent
aa872773f5
commit
97718bc22a
1
docker/appstore/.gitignore
vendored
1
docker/appstore/.gitignore
vendored
@ -2,4 +2,5 @@ apps/*
|
||||
config/*
|
||||
log/*
|
||||
temp/*
|
||||
ai-kb/*
|
||||
!.gitkeep
|
||||
|
||||
0
docker/appstore/ai-kb/.gitkeep
Normal file
0
docker/appstore/ai-kb/.gitkeep
Normal file
@ -273,36 +273,6 @@ features:
|
||||
- report.analysis.concept
|
||||
- report.permission.faq
|
||||
|
||||
- id: approve
|
||||
name: 审批
|
||||
scope: end-user
|
||||
batch: B2
|
||||
priority: P0
|
||||
chunk_count_est: 20
|
||||
owner: ~
|
||||
status: drafted
|
||||
chunks:
|
||||
- approve.plugin.concept
|
||||
- approve.install.howto
|
||||
- approve.template.concept
|
||||
- approve.template.howto
|
||||
- approve.node.concept
|
||||
- approve.form.concept
|
||||
- approve.delete.howto
|
||||
- approve.export.howto
|
||||
- approve.entry.menu-map
|
||||
- approve.concept
|
||||
- approve.start.howto
|
||||
- approve.my-start.howto
|
||||
- approve.my-todo.howto
|
||||
- approve.doto.howto
|
||||
- approve.cc.howto
|
||||
- approve.detail.howto
|
||||
- approve.process-inst.concept
|
||||
- approve.history.concept
|
||||
- approve.notify.concept
|
||||
- approve.comment.howto
|
||||
|
||||
- id: checkin
|
||||
name: 签到打卡
|
||||
scope: end-user
|
||||
@ -316,40 +286,15 @@ features:
|
||||
- checkin.concept
|
||||
- checkin.regular.howto
|
||||
- checkin.wifi.howto
|
||||
- checkin.face.howto
|
||||
- checkin.face.concept
|
||||
- checkin.record.howto
|
||||
- checkin.remind.concept
|
||||
- checkin.setting.howto
|
||||
- checkin.rule.concept
|
||||
- checkin.export.howto
|
||||
- checkin.late.faq
|
||||
- checkin.face-fail.faq
|
||||
- checkin.mac-not-match.faq
|
||||
- checkin.plugin.concept
|
||||
|
||||
- id: okr
|
||||
name: OKR
|
||||
scope: end-user
|
||||
batch: B2
|
||||
priority: P1
|
||||
chunk_count_est: 12
|
||||
owner: ~
|
||||
status: drafted
|
||||
chunks:
|
||||
- okr.entry.menu-map
|
||||
- okr.concept
|
||||
- okr.plugin.concept
|
||||
- okr.objective.concept
|
||||
- okr.kr.concept
|
||||
- okr.create.howto
|
||||
- okr.update-progress.howto
|
||||
- okr.cycle.concept
|
||||
- okr.align.howto
|
||||
- okr.review.howto
|
||||
- okr.team.concept
|
||||
- okr.cannot-install.faq
|
||||
|
||||
# ===== A5. 应用中心(系统应用 + 管理员应用 + 微应用) (B3) =====
|
||||
- id: app-system
|
||||
name: 内置系统应用(11 个,含审批/签到/报告/收藏/最近/机器人/创建群/会议/创建项目/添加任务/导出)
|
||||
@ -415,94 +360,6 @@ features:
|
||||
- micro-app.uninstall.howto
|
||||
- micro-app.entry.menu-map
|
||||
|
||||
- id: minder
|
||||
name: 思维导图(minder 插件)
|
||||
scope: end-user
|
||||
batch: B3
|
||||
priority: P1
|
||||
chunk_count_est: 5
|
||||
owner: ~
|
||||
status: drafted
|
||||
chunks:
|
||||
- minder.collaboration.concept
|
||||
- minder.concept
|
||||
- minder.plugin.concept
|
||||
- minder.create.howto
|
||||
- minder.entry.menu-map
|
||||
|
||||
- id: drawio
|
||||
name: 流程图(drawio 插件)
|
||||
scope: end-user
|
||||
batch: B3
|
||||
priority: P1
|
||||
chunk_count_est: 5
|
||||
owner: ~
|
||||
status: drafted
|
||||
chunks:
|
||||
- drawio.concept
|
||||
- drawio.plugin.concept
|
||||
- drawio.template.concept
|
||||
- drawio.create.howto
|
||||
- drawio.entry.menu-map
|
||||
|
||||
- id: office
|
||||
name: OnlyOffice 在线文档(office 插件)
|
||||
scope: end-user
|
||||
batch: B3
|
||||
priority: P1
|
||||
chunk_count_est: 5
|
||||
owner: ~
|
||||
status: drafted
|
||||
chunks:
|
||||
- office.collaboration.concept
|
||||
- office.concept
|
||||
- office.plugin.concept
|
||||
- office.create.howto
|
||||
- office.entry.menu-map
|
||||
|
||||
- id: fileview
|
||||
name: 文件预览(fileview 插件)
|
||||
scope: end-user
|
||||
batch: B3
|
||||
priority: P2
|
||||
chunk_count_est: 3
|
||||
owner: ~
|
||||
status: drafted
|
||||
chunks:
|
||||
- fileview.concept
|
||||
- fileview.plugin.concept
|
||||
- fileview.supported.concept
|
||||
|
||||
- id: memos
|
||||
name: Memos 笔记(memos 插件)
|
||||
scope: end-user
|
||||
batch: B3
|
||||
priority: P1
|
||||
chunk_count_est: 5
|
||||
owner: ~
|
||||
status: drafted
|
||||
chunks:
|
||||
- memos.concept
|
||||
- memos.plugin.concept
|
||||
- memos.tag.concept
|
||||
- memos.create.howto
|
||||
- memos.entry.menu-map
|
||||
|
||||
- id: kpi
|
||||
name: KPI 绩效(kpi 插件)
|
||||
scope: end-user
|
||||
batch: B3
|
||||
priority: P1
|
||||
chunk_count_est: 5
|
||||
owner: ~
|
||||
status: drafted
|
||||
chunks:
|
||||
- kpi.concept
|
||||
- kpi.plugin.concept
|
||||
- kpi.scoring.concept
|
||||
- kpi.create.howto
|
||||
- kpi.entry.menu-map
|
||||
|
||||
# ===== F. 通信通知 (B3) =====
|
||||
- id: email-notice
|
||||
name: 邮件通知
|
||||
@ -806,90 +663,6 @@ features:
|
||||
- appstore.update.howto
|
||||
- appstore.entry.menu-map
|
||||
|
||||
# ===== D. AI 助手 (B5) =====
|
||||
- id: ai-assistant
|
||||
name: AI 助手(入口/模型/对话/工具/任务集成)
|
||||
scope: end-user
|
||||
batch: B5
|
||||
priority: P0
|
||||
chunk_count_est: 48
|
||||
owner: ~
|
||||
status: drafted
|
||||
chunks:
|
||||
- ai-assistant.entry.howto
|
||||
- ai-assistant.auth.concept
|
||||
- ai-assistant.close.howto
|
||||
- ai-assistant.create-task.howto
|
||||
- ai-assistant.disabled.faq
|
||||
- ai-assistant.element-action.howto
|
||||
- ai-assistant.embed-entry.concept
|
||||
- ai-assistant.feedback.howto
|
||||
- ai-assistant.float-button.concept
|
||||
- ai-assistant.float-button.howto
|
||||
- ai-assistant.guide.concept
|
||||
- ai-assistant.image-upload.howto
|
||||
- ai-assistant.intelligent-search.howto
|
||||
- ai-assistant.list-tasks.howto
|
||||
- ai-assistant.match-elements.concept
|
||||
- ai-assistant.mcp-down.faq
|
||||
- ai-assistant.mobile-entry.concept
|
||||
- ai-assistant.modal.concept
|
||||
- ai-assistant.model-empty.faq
|
||||
- ai-assistant.model-switch.howto
|
||||
- ai-assistant.model.concept
|
||||
- ai-assistant.multimodal.concept
|
||||
- ai-assistant.new-chat.howto
|
||||
- ai-assistant.no-tool-call.faq
|
||||
- ai-assistant.page-action.concept
|
||||
- ai-assistant.page-action.howto
|
||||
- ai-assistant.page-context-tool.concept
|
||||
- ai-assistant.page-context.concept
|
||||
- ai-assistant.privacy.concept
|
||||
- ai-assistant.project-init.howto
|
||||
- ai-assistant.report-draft.howto
|
||||
- ai-assistant.search-files.howto
|
||||
- ai-assistant.search-help-docs.howto
|
||||
- ai-assistant.search-users.howto
|
||||
- ai-assistant.send-message.howto
|
||||
- ai-assistant.session-delete.howto
|
||||
- ai-assistant.session-list.howto
|
||||
- ai-assistant.session-save.howto
|
||||
- ai-assistant.session.concept
|
||||
- ai-assistant.shortcut.howto
|
||||
- ai-assistant.start-guide.howto
|
||||
- ai-assistant.stop.howto
|
||||
- ai-assistant.streaming.concept
|
||||
- ai-assistant.subtask-suggest.howto
|
||||
- ai-assistant.task-mention.howto
|
||||
- ai-assistant.task-summary.howto
|
||||
- ai-assistant.tool-call.concept
|
||||
- ai-assistant.tool-failed.faq
|
||||
- ai-assistant.tool-permission.faq
|
||||
- ai-assistant.tools-list.concept
|
||||
- ai-assistant.tools.concept
|
||||
- ai-assistant.welcome-prompts.concept
|
||||
|
||||
# ===== G. 搜索 (B5) =====
|
||||
- id: search
|
||||
name: 全局搜索(Manticore)
|
||||
scope: end-user
|
||||
batch: B5
|
||||
priority: P0
|
||||
chunk_count_est: 10
|
||||
owner: ~
|
||||
status: drafted
|
||||
chunks:
|
||||
- search.concept
|
||||
- search.contact.howto
|
||||
- search.engine.concept
|
||||
- search.entry.menu-map
|
||||
- search.file.howto
|
||||
- search.intelligent.concept
|
||||
- search.message.howto
|
||||
- search.no-result.faq
|
||||
- search.project.howto
|
||||
- search.task.howto
|
||||
|
||||
# ===== I. 终端 (B5) =====
|
||||
- id: web-client
|
||||
name: Web 端
|
||||
|
||||
@ -25,7 +25,7 @@ tools:
|
||||
|
||||
search_users:
|
||||
description: 按关键词搜索用户,支持按项目/对话范围筛选
|
||||
related_features: [user-account, search]
|
||||
related_features: [user-account]
|
||||
typical_chunk_types: [howto]
|
||||
|
||||
# ===== 任务 =====
|
||||
@ -93,7 +93,7 @@ tools:
|
||||
# ===== 消息 / 对话 =====
|
||||
search_dialogs:
|
||||
description: 搜索群聊或个人对话
|
||||
related_features: [messenger, search]
|
||||
related_features: [messenger]
|
||||
typical_chunk_types: [howto]
|
||||
|
||||
send_message:
|
||||
@ -103,7 +103,7 @@ tools:
|
||||
|
||||
send_task_ai_message:
|
||||
description: 作为 AI 助手向任务对话发送消息
|
||||
related_features: [messenger, task, ai-assistant]
|
||||
related_features: [messenger, task]
|
||||
typical_chunk_types: [howto]
|
||||
|
||||
get_message_list:
|
||||
@ -119,7 +119,7 @@ tools:
|
||||
|
||||
search_files:
|
||||
description: 搜索文件
|
||||
related_features: [file, search]
|
||||
related_features: [file]
|
||||
typical_chunk_types: [howto]
|
||||
|
||||
get_file_detail:
|
||||
@ -145,7 +145,7 @@ tools:
|
||||
|
||||
generate_report_template:
|
||||
description: 基于任务完成情况自动生成报告模板
|
||||
related_features: [report, ai-assistant]
|
||||
related_features: [report]
|
||||
typical_chunk_types: [howto]
|
||||
|
||||
create_report:
|
||||
@ -166,7 +166,7 @@ tools:
|
||||
# ===== 搜索 =====
|
||||
intelligent_search:
|
||||
description: 统一搜索(任务/项目/文件/联系人/消息),支持语义搜索
|
||||
related_features: [search]
|
||||
related_features: []
|
||||
typical_chunk_types: [howto, concept]
|
||||
|
||||
# 注:图片文字提取(OCR / 原 extract_image_text)已下线,改由多模态模型直接理解图片,
|
||||
@ -182,10 +182,10 @@ tools:
|
||||
# ===== 内置工具(AI 插件 helper/tools.py)=====
|
||||
get_session_image:
|
||||
description: 获取用户上传的会话图片(多模态用)
|
||||
related_features: [ai-assistant, file]
|
||||
related_features: [file]
|
||||
typical_chunk_types: [howto]
|
||||
|
||||
search_help_docs:
|
||||
description: 本知识库自身的检索工具;当用户询问 DooTask 功能用法/概念/操作步骤时调用
|
||||
related_features: [ai-assistant]
|
||||
related_features: []
|
||||
typical_chunk_types: [howto]
|
||||
|
||||
@ -1,64 +0,0 @@
|
||||
---
|
||||
id: ai-assistant.auth.concept
|
||||
title: AI 助手鉴权(stream_key)
|
||||
type: concept
|
||||
feature: ai-assistant
|
||||
scope: end-user
|
||||
locale: zh
|
||||
aliases:
|
||||
- AI 鉴权
|
||||
- AI 授权
|
||||
- stream_key
|
||||
- AI token
|
||||
- AI 流凭证
|
||||
related_tools: []
|
||||
related_pages: []
|
||||
prerequisites:
|
||||
- 用户已登录
|
||||
- 当前用户允许聊天
|
||||
negative:
|
||||
- stream_key 是一次性凭证,发完一条消息就失效
|
||||
- 流式接口 /ai/invoke/stream/* 不在主仓库,由 dootask-ai 容器提供
|
||||
- 普通用户不需要关心 stream_key,前端自动获取
|
||||
last_verified: v1.7.90
|
||||
---
|
||||
|
||||
# AI 助手鉴权(stream_key)
|
||||
|
||||
## 定义
|
||||
AI 助手发送提问前必须先调用 `POST api/assistant/auth` 生成一次性 `stream_key`,再用它去开 SSE 流(`/ai/invoke/stream/{stream_key}`),既复用登录态又避免把用户 token 暴露给 ai 容器。
|
||||
|
||||
## 数据流
|
||||
1. 用户点发送
|
||||
2. 前端 `POST api/assistant/auth`,参数:`model_type`、`model_name`、`context`(JSON)、`locale`(zh/en,缺省取请求语言,语言包含 zh 视为 zh,否则 en)
|
||||
3. 后端 `AssistantController::auth` 校验登录 + 聊天权限,写入临时凭证
|
||||
4. 返回 `{stream_key: "xxx"}`
|
||||
5. 前端开 SSE:`ai/invoke/stream/{stream_key}`
|
||||
6. ai 容器消费凭证、转发上游模型,推回 `append/replace/done`
|
||||
|
||||
## 关键约束
|
||||
- **一次性**:一个 stream_key 仅能开一次 SSE 流
|
||||
- **绑定用户**:内嵌 `userid`,越权使用被拒
|
||||
- **携带 context**:对话历史在 auth 阶段写入;ai 容器不反向查 DooTask 库
|
||||
- **插件校验**:`AssistantController` 构造函数先做 `Apps::isInstalledThrow('ai')`;未装直接抛错
|
||||
|
||||
## 权限校验
|
||||
`User::auth()->checkChatInformation()`:未登录 / 被禁止聊天 / 激活异常都会拒绝。
|
||||
|
||||
## 相关接口
|
||||
| 接口 | 用途 |
|
||||
|---|---|
|
||||
| `POST api/assistant/auth` | 生成 stream_key |
|
||||
| `GET api/assistant/models` | 拉可用模型列表 |
|
||||
| `POST api/assistant/session/list` | 历史会话 |
|
||||
| `POST api/assistant/session/save` | 保存当前会话 |
|
||||
| `POST api/assistant/session/delete` | 删除 / 清空 |
|
||||
|
||||
## 不支持
|
||||
- 不支持复用 stream_key
|
||||
- 不支持匿名调用
|
||||
- 不支持终端用户直接管理 token
|
||||
|
||||
## 相关
|
||||
- [[ai-assistant.privacy.concept]]
|
||||
- [[ai-assistant.streaming.concept]]
|
||||
@ -1,61 +0,0 @@
|
||||
---
|
||||
id: ai-assistant.embed-entry.concept
|
||||
title: 业务嵌入式 AI 入口
|
||||
type: concept
|
||||
feature: ai-assistant
|
||||
scope: end-user
|
||||
locale: zh
|
||||
aliases:
|
||||
- AI 嵌入业务
|
||||
- 任务里 AI
|
||||
- 项目 AI 生成
|
||||
- 工作报告 AI
|
||||
- 消息里 AI
|
||||
- AI 业务入口
|
||||
related_tools: []
|
||||
related_pages: [task_detail, project_create, report_edit, dialog]
|
||||
prerequisites:
|
||||
- 应用市场已安装 ai 插件
|
||||
- 管理员已配置至少一个 AI 模型
|
||||
negative:
|
||||
- 嵌入式入口与浮窗对话不共用同一会话池(按 sessionKey 隔离)
|
||||
- 嵌入入口大多有自定义 system 提示词,输出格式可能强约束(如 JSON)
|
||||
- 不是所有页面都有 AI 按钮,只有这里列出的业务场景才内嵌
|
||||
last_verified: v1.7.90
|
||||
---
|
||||
|
||||
# 业务嵌入式 AI 入口
|
||||
|
||||
## 定义
|
||||
除浮按钮和快捷键外,DooTask 在多个业务表单内嵌入了「上下文相关」的 AI 入口。它们与全局浮窗调的是同一个 AI 助手组件,但通过 `sessionKey` + `onBeforeSend` + `onApply` 等参数定制行为,让 AI 直接产出可应用到表单的结构化内容。
|
||||
|
||||
## 已知嵌入入口
|
||||
|
||||
| 入口 | 触发位置 | sessionKey | 典型用途 |
|
||||
|---|---|---|---|
|
||||
| 项目创建 | 新建项目弹窗 AI 按钮 | `project-create` | 生成项目名 + 看板列 |
|
||||
| 任务创建 | 添加任务弹窗 AI 按钮 | `task-add` | 生成任务标题 / 描述 / 子任务 |
|
||||
| 工作汇报 | 汇报编辑器 AI 工具 | `report-edit` | 基于近期任务生成草稿 |
|
||||
| 消息输入 | 群 / 私聊输入栏 AI 图标 | `chat-message` | 帮你写消息草稿 |
|
||||
| 任务讨论 | 任务详情 @AI | — | 机器人方式触发 |
|
||||
|
||||
## 与浮窗的区别
|
||||
- **会话池隔离**:不同 `sessionKey` 走不同桶;项目创建会话不会和任务创建混在一起
|
||||
- **上下文重建**:嵌入入口通过 `onBeforeSend` 重写 context(不走默认助手 system 提示)
|
||||
- **应用按钮**:回答下方有「应用此内容」按钮,自动回填原表单
|
||||
- **加载提示**:可自定义「正在生成项目结构…」之类提示
|
||||
|
||||
## 应用此内容
|
||||
回答完成后弹出 `Button`:
|
||||
1. 点击触发 `onApply` 回调
|
||||
2. 解析 AI 输出(通常 JSON)并填入原表单
|
||||
3. 应用成功后嵌入弹窗自动关闭
|
||||
|
||||
## 不支持
|
||||
- 嵌入会话不出现在浮窗历史下拉里
|
||||
- 不能在嵌入入口切回浮窗系统提示词
|
||||
- 没有 AI 按钮的页面(日历 / 文件 / 个人设置)不能内嵌唤起
|
||||
|
||||
## 相关
|
||||
- [[ai-assistant.entry.howto]]
|
||||
- [[ai-assistant.session.concept]]
|
||||
@ -1,51 +0,0 @@
|
||||
---
|
||||
id: ai-assistant.float-button.concept
|
||||
title: AI 助手浮按钮
|
||||
type: concept
|
||||
feature: ai-assistant
|
||||
scope: end-user
|
||||
locale: zh
|
||||
aliases:
|
||||
- AI 浮窗按钮
|
||||
- AI 浮窗
|
||||
- AI 浮窗怎么用
|
||||
- 屏幕角落的 AI 球
|
||||
- AI 小球
|
||||
- 那个小气泡
|
||||
- 浮动按钮
|
||||
related_tools: []
|
||||
related_pages: []
|
||||
prerequisites:
|
||||
- 应用市场已安装 ai 插件
|
||||
- 管理员已在系统设置「AI 模型」中配置至少一个模型
|
||||
negative:
|
||||
- 浮按钮位置只保留水平/垂直两个距离,不存绝对坐标,换屏分辨率不会跑出屏外
|
||||
- 收起状态下点击直接打开 AI 助手,不会再触发拖动
|
||||
- 拖动 ≥ 5px 或按下 ≥ 200ms 算拖动;小于该阈值才视为点击
|
||||
last_verified: v1.7.90
|
||||
---
|
||||
|
||||
# AI 助手浮按钮
|
||||
|
||||
## 定义
|
||||
浮按钮是 DooTask 桌面端 / 移动端常驻在屏幕角落的圆形 AI 入口,44px 直径,点击呼出 AI 助手浮窗或弹窗。它独立挂在 `<body>` 上,与当前路由解耦,**任何登录后页面都能看到**(登录页除外)。
|
||||
|
||||
## 关键属性
|
||||
- **位置存储**:只保存两个距离(距左 / 距右 + 距上 / 距下)和「贴边收起」状态,写入 IndexedDB key `aiAssistant.floatButtonPosition`
|
||||
- **默认位置**:桌面端右下角(距右 24px、距底 100px);移动端竖屏靠右、距底约 1/4 屏高
|
||||
- **可拖动**:桌面端鼠标按住拖动;移动端单指触摸拖动
|
||||
- **贴边收起**:靠近左 / 右屏幕边缘 ≤ 12px 时延迟自动收起为竖条(桌面端 1 秒、移动端 5 秒)
|
||||
- **收起态再点开**:收起状态下点按钮直接打开 AI 助手,不会再拖动
|
||||
|
||||
## 显示条件
|
||||
- 已安装 ai 插件(`microAppsIds` 包含 `ai`)
|
||||
- 已登录(`userId > 0`)
|
||||
- 当前不在登录页
|
||||
- AI 助手弹窗未打开时
|
||||
|
||||
## 与浮窗的关系
|
||||
浮按钮只是「入口」,点击触发 `openAIAssistantGlobal` 事件。真正的对话窗口由 [[ai-assistant.modal.concept]] 渲染。
|
||||
|
||||
## 不支持
|
||||
- 不支持双击 / 长按弹出菜单(除了移动端长按用于拖动)
|
||||
- 不支持把浮按钮完全隐藏后再用快捷键恢复——隐藏需在「个人设置」关闭(详见 [[ai-assistant.float-button.howto]])
|
||||
@ -1,41 +0,0 @@
|
||||
---
|
||||
id: ai-assistant.guide.concept
|
||||
title: 什么是页面深链(带我去)
|
||||
type: concept
|
||||
feature: ai-assistant
|
||||
scope: end-user
|
||||
locale: zh
|
||||
aliases:
|
||||
- 操作引导
|
||||
- 带我去
|
||||
- 带我操作
|
||||
- 页面深链
|
||||
- 快捷跳转
|
||||
related_tools: []
|
||||
related_pages: []
|
||||
prerequisites:
|
||||
- 应用市场已安装 ai 插件
|
||||
negative:
|
||||
- 深链只负责把你送到对应页面/面板,不会自动帮你点击页面内的具体按钮或开关
|
||||
- 需要运行时定位的目标(某条具体任务/对话)不通过深链,由 AI 直接帮你打开
|
||||
last_verified: v1.7.90
|
||||
---
|
||||
|
||||
# 什么是页面深链(带我去)
|
||||
|
||||
## 这是什么
|
||||
当你问 AI「X 在哪里设置 / 怎么去 X」时,AI 的回答里会把可定位的页面或面板(如「系统设置」「个人设置」「日历」)渲染成**蓝色可点击的链接**。点一下就**直接跳转到那一屏**,省去自己翻菜单。
|
||||
|
||||
## 怎么用
|
||||
- 在 AI 助手浮窗里问操作类/“在哪”类问题
|
||||
- 回答正文里出现蓝色链接词,点击即跳转(AI 浮窗会自动收起,避免遮挡)
|
||||
- 到达目标页后,按回答里的文字说明完成剩下的操作
|
||||
|
||||
## 边界
|
||||
- 深链把你送到**正确的页面/面板**;页面内具体那一行开关/按钮在哪,需要你按说明自己看一眼
|
||||
- 不是每个名词都可点:只有命中系统内已登记目的地的词才会变成链接,其余按普通文字显示
|
||||
- 打开某条具体任务/对话(需要具体 ID)不走深链,AI 会直接帮你打开
|
||||
|
||||
## 相关
|
||||
- 如何使用:[[ai-assistant.start-guide.howto]]
|
||||
- AI 操作页面的底层能力:[[ai-assistant.page-action.concept]]
|
||||
@ -1,56 +0,0 @@
|
||||
---
|
||||
id: ai-assistant.match-elements.concept
|
||||
title: AI 怎么找到页面元素
|
||||
type: concept
|
||||
feature: ai-assistant
|
||||
scope: end-user
|
||||
locale: zh
|
||||
aliases:
|
||||
- match_elements
|
||||
- AI 找按钮
|
||||
- 元素匹配
|
||||
- 向量匹配元素
|
||||
- AI 怎么知道点哪
|
||||
- AI 元素识别
|
||||
related_tools: []
|
||||
related_pages: []
|
||||
prerequisites:
|
||||
- 应用市场已安装 ai 插件
|
||||
negative:
|
||||
- 匹配纯依赖元素可见文本/aria-label/title,无文本的图标按钮命中率低
|
||||
- 单次匹配上限 50 个候选元素
|
||||
- 不持久化匹配结果,每轮交互需重新取上下文
|
||||
last_verified: v1.7.90
|
||||
---
|
||||
|
||||
# AI 怎么找到页面元素
|
||||
|
||||
## 定义
|
||||
当 AI 想操作页面元素(点按钮、填表)时,先采集当前页面上下文拿到候选元素列表(每条含 ref / name / role),再通过后端 API `POST api/assistant/match-elements` 把"用户意图描述"和"候选列表"提交给 embedding 服务,返回按余弦相似度排序的命中元素。
|
||||
|
||||
## 工作流
|
||||
1. **采集**:前端按 ARIA 角色扫描,给每个可交互元素分配 ref(e1, e2...)和 name
|
||||
2. **关键词过滤**:先用 query 做子串匹配
|
||||
3. **向量匹配**:关键词没命中时对 query 和元素 name 求 embedding,取相似度 top-K(默认 10,最多 50)
|
||||
4. **执行**:模型拿匹配元素的 ref,让 AI 助手在你的页面上操作该元素
|
||||
|
||||
## 元素信息字段
|
||||
- `ref`:本轮唯一标识(e1, e2...)
|
||||
- `name`:可见文本 / aria-label / title
|
||||
- `role`:ARIA 角色(button / textbox / link 等)
|
||||
- `selector` + `nth`:兜底选择器
|
||||
|
||||
## 命中率
|
||||
- 有清晰文本的按钮:高
|
||||
- 仅 icon 无 aria-label:低,建议加 title
|
||||
- 隐藏元素:默认不采集
|
||||
|
||||
## 不支持
|
||||
- 元素匹配仅基于元素文本,不靠图像识别
|
||||
- 不支持「按位置」找元素("左上角第三个")
|
||||
- 不能跨 iframe 匹配
|
||||
|
||||
## 相关
|
||||
- 取页面上下文:[[ai-assistant.page-context-tool.concept]]
|
||||
- 操作元素:[[ai-assistant.element-action.howto]]
|
||||
- 页面操作机制:[[ai-assistant.page-action.concept]]
|
||||
@ -1,63 +0,0 @@
|
||||
---
|
||||
id: ai-assistant.mobile-entry.concept
|
||||
title: 移动端 AI 助手入口
|
||||
type: concept
|
||||
feature: ai-assistant
|
||||
scope: end-user
|
||||
locale: zh
|
||||
aliases:
|
||||
- 手机上怎么用 AI
|
||||
- 移动端 AI 入口
|
||||
- 手机 AI 助手
|
||||
- 移动端 AI 浮球
|
||||
- 手机 AI 弹窗
|
||||
related_tools: []
|
||||
related_pages: []
|
||||
prerequisites:
|
||||
- 应用市场已安装 ai 插件
|
||||
- 管理员已配置至少一个 AI 模型
|
||||
negative:
|
||||
- 移动端没有键盘快捷键
|
||||
- 浮按钮位置不在桌面 / 移动间同步
|
||||
- AI 弹窗在移动端走全屏,不能调整大小
|
||||
last_verified: v1.7.90
|
||||
---
|
||||
|
||||
# 移动端 AI 助手入口
|
||||
|
||||
## 定义
|
||||
移动端指通过 iOS / Android App 或手机浏览器访问 DooTask(`isMobile = true`,含竖横屏窄屏)。AI 助手在移动端有两类入口:**浮按钮小球** 和 **业务页面内嵌按钮**。
|
||||
|
||||
## 浮按钮(主入口)
|
||||
- 屏幕右侧默认距底约 1/4 屏高悬浮
|
||||
- 加载后自动收起为屏幕边缘 48px 高竖条
|
||||
- 单指按住可拖动到任何位置;松开后靠近左右边缘会再次自动收起
|
||||
- 单击展开 AI 助手;展开后**全屏**弹窗,覆盖整个视口
|
||||
|
||||
## 全屏对话
|
||||
- 移动端 AI 弹窗强制全屏(`is-mobile-fullscreen`)
|
||||
- 顶部有标题栏 + 关闭按钮 + 历史会话下拉
|
||||
- 不能调整大小、不能拖动窗口
|
||||
|
||||
## 业务嵌入入口
|
||||
- 任务详情底部输入区 AI 图标
|
||||
- 工作汇报编辑器工具栏「AI 生成」
|
||||
- 消息会话群里 @AI
|
||||
- 创建项目名右侧 AI 按钮
|
||||
|
||||
## 与桌面端的差异
|
||||
| 维度 | 桌面端 | 移动端 |
|
||||
|---|---|---|
|
||||
| 弹窗形态 | 浮窗或 modal | 全屏 modal |
|
||||
| 浮按钮自动收起延迟 | 1 秒 | 5 秒(加载即收起) |
|
||||
| 快捷键 | Cmd/Ctrl + I | 无 |
|
||||
| 默认浮按钮位置 | 右下距底 100px | 右侧距底 1/4 屏高 |
|
||||
|
||||
## 不支持
|
||||
- 不支持移动端快捷收起 / 展开浮按钮(必须靠拖动)
|
||||
- 不支持移动端关闭浮按钮本身
|
||||
- 不支持移动端浮窗与桌面浮窗位置同步
|
||||
|
||||
## 相关
|
||||
- [[ai-assistant.float-button.concept]]
|
||||
- [[ai-assistant.modal.concept]]
|
||||
@ -1,68 +0,0 @@
|
||||
---
|
||||
id: ai-assistant.modal.concept
|
||||
title: AI 助手弹窗形态
|
||||
type: concept
|
||||
feature: ai-assistant
|
||||
scope: end-user
|
||||
locale: zh
|
||||
aliases:
|
||||
- AI 浮窗
|
||||
- AI 弹窗
|
||||
- AI 全屏
|
||||
- AI 窗口
|
||||
- AI 模态框
|
||||
related_tools: []
|
||||
related_pages: []
|
||||
prerequisites: []
|
||||
negative:
|
||||
- 移动端浮窗一律全屏,不能调整大小
|
||||
- 桌面端浮窗最小 380×400,最大 800×900
|
||||
- 弹窗 z-index 每 5/20 秒自动调高确保覆盖其他模态
|
||||
last_verified: v1.7.90
|
||||
---
|
||||
|
||||
# AI 助手弹窗形态
|
||||
|
||||
## 定义
|
||||
AI 助手有两种渲染形态,由打开时的 `displayMode` 决定:
|
||||
- `chat`:**浮窗**(默认,可拖动 / 调整大小 / 桌面右下角)
|
||||
- `modal`:**居中模态**(默认 600px 宽,移动端自动全屏)
|
||||
|
||||
## chat 浮窗(桌面端默认)
|
||||
- 通过 `v-transfer-dom` 挂到 `<body>`,避免被父容器裁切
|
||||
- 自带 8 个 resize 控制点(四边 + 四角),可拖拽改大小
|
||||
- 标题栏可拖动整窗,双击切换全屏
|
||||
- 位置 / 尺寸记忆到 IndexedDB(`aiAssistant.chatPosition` / `aiAssistant.chatSize`)
|
||||
|
||||
## 尺寸约束(chat 浮窗)
|
||||
| 维度 | 最小 | 最大 | 默认 |
|
||||
|---|---|---|---|
|
||||
| 宽度 | 380 | 800 | 460 |
|
||||
| 高度 | 400 | 900 | 600 |
|
||||
|
||||
## modal 模态(业务嵌入入口默认)
|
||||
- iView `Modal` 组件渲染,居中遮罩
|
||||
- 宽度:新建会话 440,已有对话 600
|
||||
- 桌面端遮罩点击**不**关闭(`mask-closable: false`)
|
||||
- 移动端强制全屏
|
||||
|
||||
## 移动端
|
||||
- 不论 displayMode 是什么都全屏
|
||||
- 顶部有标题栏、关闭、历史下拉
|
||||
- 关闭按钮 `Icon type="ios-close"` 位于右上
|
||||
- 输入区固定在底部
|
||||
|
||||
## z-index 自适应
|
||||
- 初始 `topZIndex = max(modalTransferIndex, 1000) + 1000`
|
||||
- 弹窗打开期间每 5 秒重新评估(高于新模态)
|
||||
- 关闭后每 20 秒评估
|
||||
|
||||
## 不支持
|
||||
- 不支持最小化为小球(要小球用浮按钮)
|
||||
- 不支持多窗口同时打开多个对话
|
||||
- 不支持自定义 z-index
|
||||
|
||||
## 相关
|
||||
- [[ai-assistant.float-button.concept]]
|
||||
- [[ai-assistant.close.howto]]
|
||||
- [[ai-assistant.mobile-entry.concept]]
|
||||
@ -1,68 +0,0 @@
|
||||
---
|
||||
id: ai-assistant.model.concept
|
||||
title: AI 助手可用模型
|
||||
type: concept
|
||||
feature: ai-assistant
|
||||
scope: end-user
|
||||
locale: zh
|
||||
aliases:
|
||||
- AI 模型
|
||||
- 可以选哪些 AI
|
||||
- DooTask AI 模型
|
||||
- GPT Claude DeepSeek
|
||||
- AI 服务商
|
||||
related_tools: []
|
||||
related_pages: []
|
||||
prerequisites:
|
||||
- 应用市场已安装 ai 插件
|
||||
- 管理员已在系统设置「AI 模型」中配置至少一个模型的 API Key
|
||||
negative:
|
||||
- 终端用户不能自己加模型 / 改 API Key,必须由管理员配置
|
||||
- 没有「免费内置模型」,DooTask 不自带 API Key
|
||||
- 模型下拉为空 = 管理员未配 / 未启用任何模型
|
||||
last_verified: v1.7.90
|
||||
---
|
||||
|
||||
# AI 助手可用模型
|
||||
|
||||
## 定义
|
||||
AI 助手在浮窗底部下拉框展示的「可选模型」,全部来自管理员在系统设置 →「AI 模型」中配置并启用的服务商。前端通过 `GET api/assistant/models` 拉当前生效配置,按服务商分组渲染。
|
||||
|
||||
## 支持的服务商分组
|
||||
按 `AIBotMap` 顺序展示(每组最多前 5 个模型 + 默认模型):
|
||||
|
||||
| key | 显示名 |
|
||||
|---|---|
|
||||
| `openai` | ChatGPT |
|
||||
| `claude` | Claude |
|
||||
| `deepseek` | DeepSeek |
|
||||
| `gemini` | Gemini |
|
||||
| `grok` | Grok |
|
||||
| `ollama` | Ollama(本地) |
|
||||
| `zhipu` | 智谱清言 |
|
||||
| `qianwen` | 通义千问 |
|
||||
| `wenxin` | 文心一言 |
|
||||
|
||||
## 模型 ID
|
||||
前端模型选项内部 id 是 `{type}:{value}`,如 `openai:gpt-4o`。`type` 路由到对应服务商 SDK,`value` 是模型名(透传上游)。
|
||||
|
||||
## 默认模型
|
||||
每个分组带 `defaultModel`(管理员设置)。首次打开按此顺序选定:
|
||||
1. 用户上次选过的模型(IndexedDB `aiAssistant.model`)
|
||||
2. 第一个有 `defaultModel` 的分组的默认模型
|
||||
3. 第一个分组的第一个模型
|
||||
4. 否则空
|
||||
|
||||
## 模型能力差异
|
||||
- **多模态**:仅部分模型支持,如 `gpt-4o`、`claude-3-5-sonnet`、`gemini-1.5-pro`
|
||||
- **长文本**:默认 context 取最近 10 轮,超出截断;与模型最大 token 无关
|
||||
|
||||
## 不支持
|
||||
- 不支持同一问题同时发多个模型对比
|
||||
- 不支持终端用户自定义模型 / 改 API Key / base_url
|
||||
- 切换模型不会清空历史会话,会用新模型续接
|
||||
|
||||
## 相关
|
||||
- [[ai-assistant.model-switch.howto]]
|
||||
- [[ai-assistant.model-empty.faq]]
|
||||
- [[ai-assistant.multimodal.concept]]
|
||||
@ -1,59 +0,0 @@
|
||||
---
|
||||
id: ai-assistant.multimodal.concept
|
||||
title: AI 助手多模态(图片输入)
|
||||
type: concept
|
||||
feature: ai-assistant
|
||||
scope: end-user
|
||||
locale: zh
|
||||
aliases:
|
||||
- AI 看图
|
||||
- 上传图片给 AI
|
||||
- 视觉模型
|
||||
- AI 多模态
|
||||
- AI 识图
|
||||
- AI 看截图
|
||||
related_tools: []
|
||||
related_pages: []
|
||||
prerequisites:
|
||||
- 当前模型支持视觉输入(如 gpt-4o / claude-3.5-sonnet / gemini-1.5-pro)
|
||||
negative:
|
||||
- 仅图片,不支持视频 / 音频 / 文档
|
||||
- 一次最多 5 张图片
|
||||
- 图片会被压缩到长边 1568px JPEG,原图不保留
|
||||
- 切到不支持视觉的模型后发图会上游报错
|
||||
last_verified: v1.7.90
|
||||
---
|
||||
|
||||
# AI 助手多模态(图片输入)
|
||||
|
||||
## 定义
|
||||
多模态指 AI 助手允许用户在对话中**同时附带图片**。图片以 base64 拼到 `content` 数组(`{type: 'image_url', image_url: {url: dataUrl}}`),与文本一起发给视觉模型解析。
|
||||
|
||||
## 三种添加方式
|
||||
1. **点击图片按钮**:浮窗底部图片图标,弹系统文件选择器
|
||||
2. **拖放**:把图片拖到浮窗,松手上传
|
||||
3. **粘贴**:在输入框 Ctrl/Cmd + V 粘贴剪贴板里的图片
|
||||
|
||||
## 数量与大小约束
|
||||
- 单次最多 5 张(`maxImages`),超出 toast「最多上传 5 张图片」
|
||||
- 自动压缩:长边 ≤ 1568px、统一转 JPEG
|
||||
- 原文件不上传,只上传压缩后的 dataUrl
|
||||
|
||||
## 视觉模型要求
|
||||
- 必须选视觉模型才能正确解析(`openai:gpt-4o`、`claude:claude-3-5-sonnet`、`gemini:gemini-1.5-pro` 等)
|
||||
- 非视觉模型(如 `deepseek:deepseek-chat`、`grok:grok-2`)通常忽略图片或上游报错
|
||||
|
||||
## 持久化
|
||||
- 图片随会话一起保存
|
||||
- 服务端转存到 `public/uploads/assistant/YYYYMM/{userid}/xxx.jpg`
|
||||
- 再次打开会话通过 `serverImageMap` 拿回 URL 显示
|
||||
|
||||
## 不支持
|
||||
- 不支持视频 / PDF / 音频;只接受 `image/*` MIME
|
||||
- 不支持单张超大图保持原始分辨率
|
||||
- 不支持拖到收起的浮按钮上(先展开)
|
||||
- 不支持「不压缩直发」开关
|
||||
|
||||
## 相关
|
||||
- [[ai-assistant.image-upload.howto]]
|
||||
- [[ai-assistant.model-switch.howto]]
|
||||
@ -1,58 +0,0 @@
|
||||
---
|
||||
id: ai-assistant.page-action.concept
|
||||
title: AI 操作页面的机制
|
||||
type: concept
|
||||
feature: ai-assistant
|
||||
scope: end-user
|
||||
locale: zh
|
||||
aliases:
|
||||
- AI 控制页面
|
||||
- AI 自动操作
|
||||
- AI 怎么帮我操作页面
|
||||
- AI 跳转页面
|
||||
- 页面自动化
|
||||
- AI 点按钮
|
||||
related_tools: []
|
||||
related_pages: []
|
||||
prerequisites:
|
||||
- 应用市场已安装 ai 插件
|
||||
- 应用市场已安装 mcp_server 插件
|
||||
negative:
|
||||
- AI 的页面操作仅在浏览器/桌面端会话窗口内生效,无法控制其他用户的页面
|
||||
- 一次只能操作当前会话所在的页面,不能开新标签页
|
||||
- 关闭浏览器或切到别的标签页时,页面操作会断连失败
|
||||
- 跨源(外部站点)微应用 iframe 的内部不可操作,仅同源微应用插件可
|
||||
last_verified: v1.7.91
|
||||
---
|
||||
|
||||
# AI 操作页面的机制
|
||||
|
||||
## 定义
|
||||
AI 助手通过高层导航和低层元素操作两类能力操作用户当前页面。主程序常驻 WebSocket(`/ws`)把指令派发给前端,前端的 `action-executor.js` 执行真实 DOM 行为或路由跳转,结果回传给 AI 让对话继续。这类页面操作不是 MCP 工具,由 AI 助手在你的页面上执行。
|
||||
|
||||
## 两层能力
|
||||
- **高层导航**:语义化命名(如 `open_task`、`navigate_to_dashboard`),参数明确(任务 ID),由前端封装好 router 调用;优先用这层,稳定不易错
|
||||
- **低层元素操作**:基于元素 ref 的通用动作(click/type/select/focus/scroll/hover),用于没封装好的细节操作
|
||||
|
||||
## 受支持的高层动作
|
||||
- `open_task`、`open_dialog`、`open_project`、`open_file`、`open_folder`
|
||||
- `navigate_to_dashboard / messenger / calendar / files`
|
||||
- `close_app`:关闭当前打开的应用窗口(仅在有微应用打开时出现)。属外壳层动作,哪怕 AI 正停在该应用内部、甚至应用跨源读不到内部,也能直接关闭
|
||||
|
||||
## 受支持的低层元素动作
|
||||
- `click`、`type`、`select`、`focus`、`scroll`、`hover`
|
||||
|
||||
## 微应用内部
|
||||
当你打开了微应用插件(应用市场安装、反代到主站 `/apps/` 同源路径、以 iframe 呈现)并停在最前时,采集页面上下文与低层元素操作会**默认作用于该微应用内部**,可像操作主界面一样点按钮 / 填表 / 切菜单。多个微应用同时打开时只操作最前面那个;切换或关闭应用后,原先拿到的元素引用会失效,AI 会被提示重新获取。跨源(指向外部站点)的微应用读不到内部,AI 会提示改用数据命令或回到主界面。
|
||||
|
||||
## 不支持
|
||||
- 不能模拟键盘组合键、不能拖拽
|
||||
- 不能操作跨源(外部站点)微应用 iframe 的内部
|
||||
- 不能跳转外部 URL(goForward 只走应用内路由)
|
||||
- 不能伪造非用户主动触发的事件(如自动提交表单审批通过)
|
||||
|
||||
## 相关
|
||||
- 让 AI 跳页面:[[ai-assistant.page-action.howto]]
|
||||
- AI 操作元素:[[ai-assistant.element-action.howto]]
|
||||
- 元素查找接口:[[ai-assistant.match-elements.concept]]
|
||||
- 取页面上下文:[[ai-assistant.page-context-tool.concept]]
|
||||
@ -1,58 +0,0 @@
|
||||
---
|
||||
id: ai-assistant.page-context-tool.concept
|
||||
title: AI 怎么知道你在哪个页面
|
||||
type: concept
|
||||
feature: ai-assistant
|
||||
scope: end-user
|
||||
locale: zh
|
||||
aliases:
|
||||
- AI 看页面
|
||||
- 页面上下文
|
||||
- AI 怎么知道当前页
|
||||
- AI 读取页面
|
||||
- AI 上下文采集
|
||||
related_tools: []
|
||||
related_pages: []
|
||||
prerequisites:
|
||||
- 应用市场已安装 ai 插件
|
||||
- 应用市场已安装 mcp_server 插件
|
||||
negative:
|
||||
- 仅当用户在 AI 浮窗当前会话所在的浏览器/桌面端窗口时才能采集
|
||||
- 不能跨标签 / 跨设备同步采集,每个 socket 只对应一个页面
|
||||
- 不读取密码框/被遮挡元素/隐藏元素
|
||||
- 跨源(外部站点)微应用 iframe 的内部无法采集,会提示改用数据命令
|
||||
last_verified: v1.7.90
|
||||
---
|
||||
|
||||
# AI 怎么知道你在哪个页面
|
||||
|
||||
## 定义
|
||||
当你在 AI 浮窗里问"这页有什么操作""帮我点这页的某个按钮"时,AI 助手会向你当前的浏览器/桌面端页面请求页面上下文,包括:当前路由名(如 `manage-project`)、URL、标题、可交互元素清单(带 ref / name / role)、该页可用的高层动作。结果由前端 `page-context-collector.js` 实时收集后回传给 AI。
|
||||
|
||||
## 返回字段
|
||||
- `page_type`:路由名(如 `manage-task`)
|
||||
- `page_url` / `page_title`
|
||||
- `elements`:可交互元素(ref / name / role)
|
||||
- `total_count` / `has_more` / `offset`:分页
|
||||
- `available_actions`:该页可用的高层动作(如项目页可 `open_task`)
|
||||
- `ref_map`:ref → 定位信息
|
||||
- `frame`:本次采集所在上下文——`scope`(`main` 主界面 / `app` 微应用)、`app_name`(微应用时的应用名)、`operable`(是否可操作)
|
||||
|
||||
## 调用模式
|
||||
- **轻量**:`interactive_only=true` + `max_elements=20`
|
||||
- **完整**:默认前 100 个(含内容)
|
||||
- **搜索**:传 `query` 先关键词后向量匹配
|
||||
- **采集范围**:默认采集"用户最前面看到的"页面——有同源微应用插件在最前打开时采集其 iframe 内部,否则采集主界面;也可指定只采主界面。跨源微应用读不到内部,会返回 `operable:false` 并提示降级。
|
||||
|
||||
## 隐式触发
|
||||
用户在浮窗里问"这个页面有什么操作"、"帮我点这页的某按钮"、"切到下一项目"时,AI 都会先采集当前页面上下文再决定下一步。
|
||||
|
||||
## 不支持
|
||||
- 不返回每个元素的位置坐标(仅 selector)
|
||||
- 不会返回 input 框的当前值(不读取用户私有输入)
|
||||
- 不能在弹窗/抽屉之外拿到全屏快照(仅 DOM 节点)
|
||||
|
||||
## 相关
|
||||
- 元素匹配:[[ai-assistant.match-elements.concept]]
|
||||
- 操作元素:[[ai-assistant.element-action.howto]]
|
||||
- 页面操作机制:[[ai-assistant.page-action.concept]]
|
||||
@ -1,78 +0,0 @@
|
||||
---
|
||||
id: ai-assistant.page-context.concept
|
||||
title: AI 助手页面上下文(弱提示词)
|
||||
type: concept
|
||||
feature: ai-assistant
|
||||
scope: end-user
|
||||
locale: zh
|
||||
aliases:
|
||||
- AI 知道当前页面
|
||||
- 页面感知
|
||||
- AI 上下文
|
||||
- 弱提示词
|
||||
- 当前页面注入
|
||||
- AI 现在在哪
|
||||
related_tools: []
|
||||
related_pages: []
|
||||
prerequisites: []
|
||||
negative:
|
||||
- 弱提示词只传「页面类型 / 实体 id / 名称 / 对话类型」四类,不传业务详细数据
|
||||
- 详细数据需要 AI 通过 MCP 工具自取
|
||||
- 嵌入入口(专用 onBeforeSend)不走弱提示词机制
|
||||
last_verified: v1.7.90
|
||||
---
|
||||
|
||||
# AI 助手页面上下文(弱提示词)
|
||||
|
||||
## 定义
|
||||
**弱提示词**是 AI 助手浮窗对话时自动注入的极简「我现在在哪」描述,让 AI 知道用户提问发生在哪个项目 / 任务 / 对话页,能正确解析「这个项目 / 这条任务」之类指代。
|
||||
|
||||
## 注入格式
|
||||
渲染为一行 `system` 消息穿插到 context 历史:
|
||||
|
||||
```
|
||||
[当前页面] 项目详情页(project_id=123,名称:DooTask)
|
||||
[页面切换] 任务详情页(task_id=4567,名称:修复 SSE 断流)
|
||||
```
|
||||
|
||||
前缀:`[当前页面]` 首次注入,`[页面切换]` 后续在不同页面再提问时。
|
||||
|
||||
## 注入的字段
|
||||
仅四类,绝不带其他业务数据:
|
||||
|
||||
| 字段 | 含义 |
|
||||
|---|---|
|
||||
| `type` | 实体类型(task / dialog / project / file / report) |
|
||||
| `id` | 实体 id |
|
||||
| `name` | 实体名称 |
|
||||
| `dialogType` | 群聊 / 私聊,仅 dialog 有 |
|
||||
|
||||
## 为什么穿插历史
|
||||
用户可能在不同项目 / 任务页连续提问。只放当前页会让历史里两个「这个项目」失去锚点。穿插能给历史每条用户消息打上「问题发生时所在的页面」,AI 才能正确分辨。
|
||||
|
||||
## 可识别的页面
|
||||
- 任务详情弹窗(最高优先)→ `task:{id}`
|
||||
- 对话详情弹窗 → `dialog:{id}`
|
||||
- 仪表盘 → `dashboard`
|
||||
- 项目列表 / 详情 → `project-list` / `project:{id}`
|
||||
- 消息列表 / 会话 → `messenger` / `dialog:{id}`
|
||||
- 日历 → `calendar`
|
||||
- 文件列表 / 详情 → `file-list` / `file:{id}`
|
||||
- 工作汇报编辑 / 详情 → `report:{id}`
|
||||
|
||||
## 何时不注入
|
||||
- 不可识别路由(登录页、个人设置等)
|
||||
- 同 `contextKey` 连续提问
|
||||
- 嵌入入口(带 `onBeforeSend`)
|
||||
|
||||
## 详细数据怎么拿
|
||||
弱提示词只告「在哪」,不告「内容」。AI 需要看任务描述、项目统计时通过 MCP 工具自取(如 `get_task`、`get_project_data`)。
|
||||
|
||||
## 不支持
|
||||
- 不支持把整页内容塞给 AI
|
||||
- 不支持用户手动关闭弱提示词
|
||||
- 不支持自定义注入字段
|
||||
|
||||
## 相关
|
||||
- [[ai-assistant.embed-entry.concept]]
|
||||
- [[ai-assistant.welcome-prompts.concept]]
|
||||
@ -1,80 +0,0 @@
|
||||
---
|
||||
id: ai-assistant.privacy.concept
|
||||
title: AI 助手数据隐私
|
||||
type: concept
|
||||
feature: ai-assistant
|
||||
scope: end-user
|
||||
locale: zh
|
||||
aliases:
|
||||
- AI 数据安全
|
||||
- AI 对话保存在哪
|
||||
- AI 会泄露吗
|
||||
- AI 上传图片去哪
|
||||
- DooTask AI 隐私
|
||||
related_tools: []
|
||||
related_pages: []
|
||||
prerequisites: []
|
||||
negative:
|
||||
- 对话会通过 ai 插件转发给管理员配置的上游 LLM 服务商,受其隐私条款约束
|
||||
- 不存在「AI 完全本地化」开关,除非管理员只配 Ollama 本地模型
|
||||
- 用户无法自助导出会话(只能在浮窗手动清空历史)
|
||||
last_verified: v1.7.90
|
||||
---
|
||||
|
||||
# AI 助手数据隐私
|
||||
|
||||
## 数据存到哪里
|
||||
|
||||
### 对话内容
|
||||
- 数据库表:`ai_assistant_sessions`,按 `userid` 行级隔离
|
||||
- 其他普通用户绝对看不到别人会话
|
||||
- 仅当前用户、系统管理员可通过后台数据库访问
|
||||
|
||||
### 图片
|
||||
- 路径:`public/uploads/assistant/YYYYMM/{userid}/xxx.jpg`
|
||||
- 按用户 id 分目录,删除会话时物理删除
|
||||
|
||||
### 配置 / 模型选择
|
||||
- 存 IndexedDB `aiAssistant.model`(仅当前浏览器)
|
||||
- 浮按钮位置 / 输入历史也存 IndexedDB,不上传
|
||||
|
||||
## 数据传给谁
|
||||
|
||||
```
|
||||
浏览器
|
||||
→ DooTask 后端 (POST api/assistant/auth)
|
||||
→ ai 插件容器 (dootask-ai)
|
||||
→ 上游 LLM 服务商 (OpenAI / Claude / DeepSeek 等)
|
||||
```
|
||||
|
||||
- 上游服务商由**系统管理员**决定
|
||||
- 选 Ollama 本地模型则对话不出 DooTask 部署网络
|
||||
- 选公网服务则按服务商隐私条款处理
|
||||
|
||||
## 发送上去的内容
|
||||
- 本次提问的文本 + 图片(多模态时)
|
||||
- 当前会话最近 10 轮 context
|
||||
- 当前页面弱提示词(仅页面类型 + 实体 id + 名称,**不含**业务详细数据)
|
||||
- DooTask 默认 system prompt
|
||||
|
||||
## 不会发送的
|
||||
- 用户密码、token、密钥
|
||||
- 不在 context 窗口内的历史会话
|
||||
- 其他用户对话
|
||||
- 私聊 / 群聊具体消息(除非用户主动复制到提问)
|
||||
- 完整页面业务数据(只发弱提示词)
|
||||
|
||||
## 清理与删除
|
||||
- 单条 / 清空当前桶:[[ai-assistant.session-delete.howto]]
|
||||
- 清浏览器 IndexedDB:清掉模型选择、浮按钮位置、输入历史
|
||||
- 上游侧保留多久取决于服务商(如 OpenAI 默认 30 天)
|
||||
|
||||
## 不支持
|
||||
- 不支持端到端加密让管理员都看不到
|
||||
- 不支持把某条对话标记「不发送」
|
||||
- 不支持自助导出全部历史
|
||||
|
||||
## 相关
|
||||
- [[ai-assistant.auth.concept]]
|
||||
- [[ai-assistant.session.concept]]
|
||||
- [[ai-assistant.page-context.concept]]
|
||||
@ -1,70 +0,0 @@
|
||||
---
|
||||
id: ai-assistant.session.concept
|
||||
title: AI 助手会话
|
||||
type: concept
|
||||
feature: ai-assistant
|
||||
scope: end-user
|
||||
locale: zh
|
||||
aliases:
|
||||
- AI 会话
|
||||
- AI 历史
|
||||
- AI 对话记录
|
||||
- AI session
|
||||
- session_key
|
||||
- 会话桶
|
||||
related_tools: []
|
||||
related_pages: []
|
||||
prerequisites: []
|
||||
negative:
|
||||
- 单个桶最多 20 条会话,超过自动淘汰最早
|
||||
- 嵌入式入口的会话不出现在浮窗历史里
|
||||
- 删除会话不可恢复,对应图片也会从 public/uploads 物理删除
|
||||
last_verified: v1.7.90
|
||||
---
|
||||
|
||||
# AI 助手会话
|
||||
|
||||
## 定义
|
||||
会话(session)是 AI 助手中一组连续的用户提问 + AI 回答集合,按「场景桶」隔离持久化到 `ai_assistant_sessions` 表,归当前用户所有。
|
||||
|
||||
## 关键属性
|
||||
|
||||
| 字段 | 含义 |
|
||||
|---|---|
|
||||
| `session_key` | **场景桶**,浮窗用 `global`,嵌入入口用各自 key |
|
||||
| `session_id` | 唯一 id,格式 `session-{时间戳}-{随机串}` |
|
||||
| `title` | 自动取首条用户消息前 20 字 |
|
||||
| `data` | JSON 数组,存所有 user/assistant/system 消息 |
|
||||
| `images` | JSON 对象 `{imageId: 服务端路径}` |
|
||||
| `updated_at` | 历史列表按其倒序 |
|
||||
|
||||
## 持久化时机
|
||||
- 流式回答完成后立即保存
|
||||
- 编辑历史问题、删除消息后保存
|
||||
- 普通编辑期间有 2 秒防抖
|
||||
|
||||
## 桶(session_key)的作用
|
||||
不同业务入口走不同桶:
|
||||
- `global`:浮窗 + 快捷键 + 顶部「+」菜单
|
||||
- `project-create`:新建项目 AI 助手
|
||||
- `task-add`:新建任务 AI 助手
|
||||
- `report-edit`:工作汇报 AI
|
||||
- `chat-message`:消息输入 AI
|
||||
|
||||
切桶时先保存当前会话再载入目标桶历史列表,避免互相串扰。
|
||||
|
||||
## 数量限制
|
||||
- 每个桶最多保留 20 条(`maxSessionsPerKey`)
|
||||
- 超过从最旧的开始淘汰
|
||||
- 单会话内最多 50 条 message(`maxResponses`)
|
||||
|
||||
## 不支持
|
||||
- 不支持跨用户 / 跨桶搜索;只查当前用户当前桶
|
||||
- 不支持把某条会话从一个桶导到另一个桶
|
||||
- 不支持手动改会话标题
|
||||
|
||||
## 相关
|
||||
- [[ai-assistant.session-list.howto]]
|
||||
- [[ai-assistant.new-chat.howto]]
|
||||
- [[ai-assistant.session-delete.howto]]
|
||||
- [[ai-assistant.embed-entry.concept]]
|
||||
@ -1,74 +0,0 @@
|
||||
---
|
||||
id: ai-assistant.streaming.concept
|
||||
title: AI 助手流式输出
|
||||
type: concept
|
||||
feature: ai-assistant
|
||||
scope: end-user
|
||||
locale: zh
|
||||
aliases:
|
||||
- AI 流式回答
|
||||
- 边写边出
|
||||
- AI 一边打字一边显示
|
||||
- SSE 流
|
||||
- AI 实时输出
|
||||
related_tools: []
|
||||
related_pages: []
|
||||
prerequisites: []
|
||||
negative:
|
||||
- 不支持 WebSocket 推送,固定走 SSE
|
||||
- 不支持手动重试单条;流断后该 message 标记 error,需重新发送
|
||||
- 同会话并发流会被前一个的发送动作清掉
|
||||
last_verified: v1.7.90
|
||||
---
|
||||
|
||||
# AI 助手流式输出
|
||||
|
||||
## 定义
|
||||
AI 助手通过 **SSE(Server-Sent Events)** 接收上游 LLM 的逐 token 输出,每收到一个 chunk 就追加到当前 message 的 `rawOutput`,呈现 ChatGPT 般「边写边出」的效果。
|
||||
|
||||
## 数据流
|
||||
1. `POST api/assistant/auth` → 拿 stream_key
|
||||
2. `EventSource ai/invoke/stream/{stream_key}`
|
||||
3. 监听三类事件:
|
||||
- `append` → 追加(`entry.rawOutput += chunk`)
|
||||
- `replace` → 整段替换(`entry.rawOutput = chunk`)
|
||||
- `done` → 流结束(`entry.status = 'completed'`)
|
||||
4. 断流 / 异常 → `handleStreamFailed`
|
||||
|
||||
## 事件类型
|
||||
|
||||
| 事件 | 用途 |
|
||||
|---|---|
|
||||
| `append` | 普通增量 token(最常见) |
|
||||
| `replace` | 整段替换(工具结果回填、思考链重写) |
|
||||
| `done` | 流结束,payload 含 `error` 字段表示上游报错 |
|
||||
|
||||
## 状态机
|
||||
每条 AI message 4 个状态:
|
||||
- `waiting` → 已发出但首个 chunk 未到
|
||||
- `streaming` → 正在接收 chunk
|
||||
- `completed` → `done` 正常收到
|
||||
- `error` → 上游错误、连接失败、用户中断
|
||||
|
||||
## 并发与归属
|
||||
- 每个流绑定 `owner = {sessionKey, sessionId, localId}`
|
||||
- 用户切到其他会话后,原流仍后台跑,结束时写回原会话存储
|
||||
- 发新问题前会清掉同会话的所有活跃流,防止两段对话错位
|
||||
|
||||
## 中断恢复保护
|
||||
- 关浮窗 / 页面崩溃后,下次加载会话发现 message 仍是 `streaming/waiting` 则归一为 `error`
|
||||
- 避免「永远转圈」(`sanitizeResponsesForPersist`)
|
||||
|
||||
## 滚动行为
|
||||
- 视图在最底部时新 chunk 自动 `scrollToBottom`
|
||||
- 用户向上翻历史时(距底 > 20px)不强制下拉
|
||||
|
||||
## 不支持
|
||||
- 不支持 WebSocket
|
||||
- 不支持 chunk 级别撤销
|
||||
- 不支持自动重试断流
|
||||
|
||||
## 相关
|
||||
- [[ai-assistant.stop.howto]]
|
||||
- [[ai-assistant.modal.concept]]
|
||||
- [[ai-assistant.session-save.howto]]
|
||||
@ -1,53 +0,0 @@
|
||||
---
|
||||
id: ai-assistant.tool-call.concept
|
||||
title: 工具调用的流式事件结构
|
||||
type: concept
|
||||
feature: ai-assistant
|
||||
scope: end-user
|
||||
locale: zh
|
||||
aliases:
|
||||
- tool_call 是什么
|
||||
- AI 工具调用的过程
|
||||
- 工具调用气泡
|
||||
- AI 调用了工具显示什么
|
||||
- tool_call 事件
|
||||
related_tools: []
|
||||
related_pages: []
|
||||
prerequisites: []
|
||||
negative:
|
||||
- 单次回复可包含多次工具调用(并行或串行),不限于一次
|
||||
- 工具调用结果不计入用户上下文 token,但会消耗会话 token
|
||||
- 用户不能在前端取消已发出的工具调用,只能整体中断本轮回复
|
||||
last_verified: v1.7.90
|
||||
---
|
||||
|
||||
# 工具调用的流式事件结构
|
||||
|
||||
## 定义
|
||||
AI 助手回复以流式 SSE 推送给前端,事件中除了文本增量,还会出现工具调用片段。每次工具调用在浮窗里渲染为一个独立气泡,展示"工具名 + 参数 + 状态",让用户能看到 AI 在背后做什么。
|
||||
|
||||
## 一次完整工具调用的事件序列
|
||||
1. `tool_call_start`:模型决定调工具,前端插入气泡,状态置「执行中」
|
||||
2. `tool_call_arguments`(可多次):参数 JSON 增量流式拼接
|
||||
3. `tool_call_result`:后端/前端返回结果,状态变「完成」或「失败」
|
||||
4. 模型基于结果继续生成 `message` 文本
|
||||
|
||||
## 气泡可见信息
|
||||
- 工具名(如 `list_tasks`)
|
||||
- 入参 JSON(折叠/展开)
|
||||
- 出参摘要(成功)或错误码(失败)
|
||||
- 执行耗时
|
||||
|
||||
## 与普通文本的关系
|
||||
- 工具结果不直接回给用户,而是回灌给模型
|
||||
- 模型读结果后再生成下一段自然语言回答("我找到 3 条任务……")
|
||||
- 用户体感是"AI 一边查一边说"
|
||||
|
||||
## 不支持
|
||||
- 工具调用进行中无法手动改参数;要重来需点重试或重新提问
|
||||
- 失败的工具调用不会自动二次重试(模型可能换工具或道歉)
|
||||
|
||||
## 相关
|
||||
- 工具机制总览:[[ai-assistant.tools.concept]]
|
||||
- 工具清单:[[ai-assistant.tools-list.concept]]
|
||||
- 失败处理:[[ai-assistant.tool-failed.faq]]
|
||||
@ -1,66 +0,0 @@
|
||||
---
|
||||
id: ai-assistant.tools-list.concept
|
||||
title: AI 助手可用工具清单
|
||||
type: concept
|
||||
feature: ai-assistant
|
||||
scope: end-user
|
||||
locale: zh
|
||||
aliases:
|
||||
- AI 有哪些工具
|
||||
- AI 能调用什么
|
||||
- AI 工具列表
|
||||
- MCP 工具有哪些
|
||||
- AI 都能做什么
|
||||
related_tools: []
|
||||
related_pages: []
|
||||
prerequisites:
|
||||
- 应用市场已安装 ai 插件
|
||||
- 应用市场已安装 mcp_server 插件
|
||||
negative:
|
||||
- 工具集合由系统维护,普通用户无法自定义增减
|
||||
- 列表项名是后端工具名(snake_case),用户不需要记
|
||||
- 不在清单中的能力 AI 无法直接执行(例如改系统设置、装插件)
|
||||
last_verified: v1.7.90
|
||||
---
|
||||
|
||||
# AI 助手可用工具清单
|
||||
|
||||
## 用户与组织
|
||||
- `get_users_basic`:批量取用户昵称/邮箱/头像
|
||||
- `search_users`:按关键词找人,支持按项目/对话筛选
|
||||
|
||||
## 任务
|
||||
- `list_tasks`:列任务(状态/项目/时间筛选)
|
||||
- `get_task`:取任务完整详情
|
||||
- `create_task`、`update_task`、`complete_task`、`delete_task`
|
||||
- `create_sub_task`:建子任务
|
||||
- `get_task_files`:取任务附件
|
||||
|
||||
## 项目
|
||||
- `list_projects`、`get_project`、`create_project`、`update_project`
|
||||
|
||||
## 消息与对话
|
||||
- `search_dialogs`:搜对话
|
||||
- `send_message`:发消息
|
||||
- `send_task_ai_message`:作为 AI 向任务讨论区发消息
|
||||
- `get_message_list`:取历史消息
|
||||
|
||||
## 文件
|
||||
- `list_files`、`search_files`、`get_file_detail`、`fetch_file_content`
|
||||
|
||||
## 工作报告
|
||||
- `list_received_reports`、`list_my_reports`、`get_report_detail`、`create_report`、`mark_reports_read`
|
||||
- `generate_report_template`:基于已完成任务生成报告草稿
|
||||
|
||||
## 搜索
|
||||
- `intelligent_search`:跨任务/项目/文件/联系人/消息统一语义搜索
|
||||
|
||||
## 页面操作(非 MCP 工具)
|
||||
AI 助手还能在你当前的浏览器/桌面端页面上帮你打开任务/项目/对话、跳功能页、点击/输入/选择/滚动页面元素。这类页面操作不在 MCP 工具清单内,由 AI 助手在你的页面上直接执行。
|
||||
|
||||
## 图片理解(非 MCP 工具)
|
||||
把图片交给 AI 助手后,AI 可直接识别图中内容(多模态),无需单独的图片文字提取工具。
|
||||
|
||||
## 知识库
|
||||
- `search_help_docs`:检索本知识库(DooTask 功能说明)
|
||||
- `get_session_image`:取用户上传到会话的图片
|
||||
@ -1,52 +0,0 @@
|
||||
---
|
||||
id: ai-assistant.tools.concept
|
||||
title: AI 助手的工具调用机制
|
||||
type: concept
|
||||
feature: ai-assistant
|
||||
scope: end-user
|
||||
locale: zh
|
||||
aliases:
|
||||
- AI 工具
|
||||
- AI 调工具
|
||||
- 怎么让 AI 调工具
|
||||
- 让 AI 调用工具
|
||||
- MCP 工具
|
||||
- AI 怎么操作系统
|
||||
- function calling
|
||||
- AI 能做什么
|
||||
related_tools: []
|
||||
related_pages: []
|
||||
prerequisites:
|
||||
- 应用市场已安装 ai 插件
|
||||
- 应用市场已安装 mcp_server 插件
|
||||
negative:
|
||||
- 工具是否可用取决于所选模型是否支持 tool/function calling,部分模型仅能纯文本回答
|
||||
- 工具调用结果会展示给用户,不会静默执行
|
||||
- 用户没权限的操作(如读不到的任务)即使 AI 调工具也会被后端拒绝
|
||||
last_verified: v1.7.90
|
||||
---
|
||||
|
||||
# AI 助手的工具调用机制
|
||||
|
||||
## 定义
|
||||
DooTask AI 助手通过 MCP(Model Context Protocol)协议调用工具,把"问 AI"扩展为"让 AI 帮我做事"。AI 收到用户请求后判断是否需要调工具,例如查任务、发消息、跳页面,由插件 `mcp_server` 把请求路由到对应的后端 API 或前端动作执行器,再把结果回灌给模型,模型基于结果继续回答。
|
||||
|
||||
## 工具来源
|
||||
- **dootask-mcp 内置工具**:29 个,覆盖任务/项目/消息/文件/报告/搜索
|
||||
- **AI 助手内置工具**:`search_help_docs`(检索本知识库)、`get_session_image`(取多模态图片)
|
||||
- **doo 命令行工具**:AI 助手还可经内置的 `doo` 命令行(以你的身份、在你的权限内)直接完成任务/项目/消息/文件/报告/搜索/页面等操作;它是把上述能力统一成一个命令行入口,权限同样由后端校验
|
||||
- 工具清单维护在仓库 `resources/ai-kb/_meta/tool-binding.yaml`
|
||||
|
||||
## 数据工具与页面操作
|
||||
- **数据工具(MCP)**:直接调后端 API(如 `create_task`、`send_message`),不依赖前端 UI
|
||||
- **页面操作(非 MCP 工具)**:AI 助手还能在你当前的浏览器/桌面端页面上打开任务/跳页面、点击/输入页面元素;这类能力不在 MCP 工具清单内,由 AI 助手在你的页面上执行
|
||||
|
||||
## 触发条件
|
||||
- AI 模型本身必须支持 tool calling(OpenAI / Claude / DeepSeek / Qwen 等主流模型均支持)
|
||||
- 管理员在系统设置「AI 模型」中开启该模型
|
||||
- `mcp_server` 插件已安装并运行
|
||||
|
||||
## 相关
|
||||
- 工具完整清单:[[ai-assistant.tools-list.concept]]
|
||||
- 工具调用流式事件结构:[[ai-assistant.tool-call.concept]]
|
||||
- 工具调用失败处理:[[ai-assistant.tool-failed.faq]]
|
||||
@ -1,75 +0,0 @@
|
||||
---
|
||||
id: ai-assistant.welcome-prompts.concept
|
||||
title: AI 助手欢迎语与快捷提示
|
||||
type: concept
|
||||
feature: ai-assistant
|
||||
scope: end-user
|
||||
locale: zh
|
||||
aliases:
|
||||
- AI 欢迎页
|
||||
- AI 快捷提示
|
||||
- AI 推荐问法
|
||||
- AI 起手
|
||||
- AI 建议
|
||||
- AI 提示卡片
|
||||
related_tools: []
|
||||
related_pages: []
|
||||
prerequisites: []
|
||||
negative:
|
||||
- 用户不能自定义快捷提示卡片
|
||||
- 卡片在每次场景切换时会重抽,并非固定不变
|
||||
- 卡片点击只是把文本填入输入框,不会自动发送
|
||||
last_verified: v1.7.90
|
||||
---
|
||||
|
||||
# AI 助手欢迎语与快捷提示
|
||||
|
||||
## 定义
|
||||
打开 AI 助手浮窗、**还没有任何对话**时显示的引导界面,包含 AI 图标 + 「欢迎使用 AI 助手」标题 + 若干个**快捷提示卡片**。卡片内容根据当前页面场景动态切换。
|
||||
|
||||
## 卡片分类
|
||||
按四类设计确保多样性:
|
||||
|
||||
| 类型 | 含义 | 示例 |
|
||||
|---|---|---|
|
||||
| `query` | 查询 / 概览 | 「我今天有哪些任务?」 |
|
||||
| `action` | 推进 / 操作 | 「帮我把这条任务标记完成」 |
|
||||
| `sync` | 同步 / 协作 | 「给项目组发一条进度更新」 |
|
||||
| `review` | 复盘 / 总结 | 「总结一下这周的工作」 |
|
||||
|
||||
## 与页面场景联动
|
||||
卡片基于以下数据动态生成:
|
||||
- 当前路由(仪表盘 / 项目 / 任务 / 消息 / 文件 / 日历)
|
||||
- 当前打开的弹窗(任务 / 对话)
|
||||
- 当前项目 / 任务 / 对话 id
|
||||
- 当前语言(中 / 英)
|
||||
|
||||
切换页面时通过 `welcomePromptsKey` watcher 触发,100ms 防抖避免闪屏。
|
||||
|
||||
## 点击行为
|
||||
1. 点击某张卡片
|
||||
2. 卡片文本被填入输入框
|
||||
3. 输入框自动获焦
|
||||
4. **不会**自动发送,需手动按发送或回车
|
||||
|
||||
## 显示条件
|
||||
- AI 助手浮窗已打开
|
||||
- `visibleResponses.length === 0`(当前会话无消息)
|
||||
- `displayMode === 'chat'`(modal 模式由业务方控制)
|
||||
|
||||
## 何时刷新
|
||||
- 路由变更
|
||||
- 打开 / 关闭任务弹窗
|
||||
- 打开 / 关闭对话弹窗
|
||||
- 切换项目
|
||||
|
||||
均走 `welcomePromptsKey` watcher + 100ms 防抖。
|
||||
|
||||
## 不支持
|
||||
- 不支持自定义卡片文案
|
||||
- 不支持「关闭欢迎提示卡片」开关
|
||||
- 不支持把某条卡片置顶或常驻
|
||||
|
||||
## 相关
|
||||
- [[ai-assistant.modal.concept]]
|
||||
- [[ai-assistant.page-context.concept]]
|
||||
@ -1,59 +0,0 @@
|
||||
---
|
||||
id: approve.form.concept
|
||||
title: 审批表单字段
|
||||
type: concept
|
||||
feature: approve
|
||||
scope: admin
|
||||
locale: zh
|
||||
aliases:
|
||||
- 审批表单
|
||||
- 表单字段
|
||||
- 表单设计
|
||||
- 自定义字段
|
||||
- 申请单字段
|
||||
- 表单组件有哪些
|
||||
- 申请类型字段
|
||||
related_tools: []
|
||||
related_pages: [application]
|
||||
prerequisites:
|
||||
- 当前用户是系统管理员
|
||||
- 在流程模板编辑器中
|
||||
negative:
|
||||
- 当前版本不支持公式字段(如「时长 = 结束时间 - 开始时间」自动算)
|
||||
- 不支持联动字段(A 字段值变化时显示/隐藏 B 字段)
|
||||
- 不支持把表单字段值用作下一节点审批人路由依据(无条件分支)
|
||||
- 表单字段一旦发布后改动,已提交的旧实例展示按当时快照不回填
|
||||
last_verified: v1.7.90
|
||||
---
|
||||
|
||||
# 审批表单字段
|
||||
|
||||
## 定义
|
||||
审批表单是发起人填写的申请单结构,由若干**字段组件**拼成。管理员在流程模板编辑器(iframe 内)拖拽这些组件即可设计表单。表单值随流程实例一起存到插件库的 `var` 字段(JSON),并随状态变化贯穿始终。
|
||||
|
||||
## 内置字段组件
|
||||
- **单行文本**:限长字符串,如「申请人姓名」「合同编号」
|
||||
- **多行文本**:长描述,如「请假事由」「报销说明」
|
||||
- **数字**:整数 / 小数,如「报销金额」
|
||||
- **日期 / 日期时间**:年-月-日 或精确到分钟,常用于开始/结束时间
|
||||
- **单选 / 多选 / 下拉**:固定选项集,如「假期类型」可枚举「年假/事假/病假/调休/产假/陪产假/婚假/丧假/哺乳假/产检假/其他」
|
||||
- **附件 / 图片**:上传文件,前端控件复用主程序 `ImgUpload`;图片限制宽高与张数(默认上限 3 张、2048×2048)
|
||||
- **明细 / 子表**:一对多结构,如报销单的多行费用明细
|
||||
- **金额 / 时长**:业务语义字段(基于数字字段封装)
|
||||
|
||||
## 必填、提示、默认值
|
||||
- 每个字段可配置 `required`(必填)、占位提示、默认值
|
||||
- 必填项校验在发起页前端拦截;提交到主程序 `process__start` 再做二次校验
|
||||
|
||||
## 与流程节点的关系
|
||||
- 表单字段是"装数据的",节点是"管流转的",两者解耦
|
||||
- 节点拿不到 form 字段做路由决策(不支持条件分支)
|
||||
|
||||
## 数据存储
|
||||
- 表单值在主程序前端组成 `var` JSON 后随 `proc_name + department_id` 一起调 `approve/process/start`
|
||||
- 插件把 `var` 整体存进 proc inst 行;后续审批人查看时反序列化展示
|
||||
|
||||
## 不支持
|
||||
- 不支持字段联动 / 公式 / 条件分支
|
||||
- 不支持表单级权限(不能按角色显示不同字段)
|
||||
- 不支持跨流程模板字段复用
|
||||
@ -1,49 +0,0 @@
|
||||
---
|
||||
id: approve.history.concept
|
||||
title: 审批流程历史 History
|
||||
type: concept
|
||||
feature: approve
|
||||
scope: end-user
|
||||
locale: zh
|
||||
aliases:
|
||||
- 审批历史
|
||||
- 审批操作记录
|
||||
- 流程留痕
|
||||
- 谁审过
|
||||
- 流程节点历史
|
||||
- ProcInstHistory
|
||||
related_tools: []
|
||||
related_pages: [application]
|
||||
prerequisites:
|
||||
- 应用市场已安装 approve 插件
|
||||
negative:
|
||||
- 历史记录不可手动编辑,只由系统在节点流转时写入
|
||||
- 删除审批(process/delById)会连带删除该流程的全部历史
|
||||
- 历史不会单独导出,导出走 admin 的 approve/export 数据导出
|
||||
last_verified: v1.7.90
|
||||
---
|
||||
|
||||
# 审批流程历史 History
|
||||
|
||||
## 定义
|
||||
流程历史(`ApproveProcInstHistory`,表 `approve_proc_inst_history`)是每个流程实例([[approve.process-inst.concept]])在节点流转时留下的快照,记录谁发起、当前节点、最近意见、整体状态,用于已结束审批的留档查询和驱动「已办」「抄送我(已结束)」两类列表。
|
||||
|
||||
## 关键字段
|
||||
- **proc_def_id / proc_def_name**:所属模板 ID 和名称
|
||||
- **title**:审批标题
|
||||
- **start_user_id / start_user_name**:发起人
|
||||
- **department_id / department / company**:发起部门和公司
|
||||
- **node_id / candidate / task_id**:当前节点、候选人 userid 串、task ID
|
||||
- **start_time / end_time / duration**:开始/结束/持续时长
|
||||
- **state**:0 待审批 / 1 审批中 / 2 通过 / 3 拒绝 / 4 撤回
|
||||
- **is_finished / var**:是否结束 / 表单数据 JSON
|
||||
- **latest_comment / global_comment**:最近一次意见 / 全文评论汇总
|
||||
|
||||
## 谁会读取
|
||||
- 「已办」:`approve/procHistory/findTask`
|
||||
- 「抄送我」已结束:`approve/procHistory/findProcNotify`
|
||||
- 「已发起」已结束:`approve/procHistory/startByMyself`
|
||||
- 详情页流程图:合并 `node_infos` 与历史渲染
|
||||
|
||||
## 副作用:用户请假/外出状态
|
||||
静态方法 `getUserApprovalStatus(userid)` 按当前时间是否落在某条已通过的「请假/外出」表单时段内,决定用户在系统其他地方的「请假中」标签。1 分钟缓存。
|
||||
@ -1,58 +0,0 @@
|
||||
---
|
||||
id: approve.node.concept
|
||||
title: 审批节点类型
|
||||
type: concept
|
||||
feature: approve
|
||||
scope: admin
|
||||
locale: zh
|
||||
aliases:
|
||||
- 审批节点
|
||||
- 单人审批
|
||||
- 会签是什么
|
||||
- 顺序会签
|
||||
- 并行会签
|
||||
- 或签
|
||||
- 多人审批怎么配
|
||||
- 审批人怎么设
|
||||
related_tools: []
|
||||
related_pages: [application]
|
||||
prerequisites:
|
||||
- 当前用户是系统管理员
|
||||
- 在流程模板编辑器中
|
||||
negative:
|
||||
- 当前版本不支持条件分支节点(按表单字段值自动路由到不同审批人),节点链只能串行/并行
|
||||
- 不支持嵌套子流程节点
|
||||
- 不支持回退到任意节点:拒绝直接结束流程,不能让发起人改了再走原路
|
||||
last_verified: v1.7.90
|
||||
---
|
||||
|
||||
# 审批节点类型
|
||||
|
||||
## 定义
|
||||
流程模板由若干**节点**串成一条链。一个节点 = 一步审批/抄送。节点决定"这一步由谁参与、用什么方式参与、参与后流程怎么走"。审批人来源支持指定具体用户、按角色/部门负责人动态解析。每条流程发起后会生成对应的"审批任务(task)"分发到各节点候选人手上。
|
||||
|
||||
## 主要节点类型
|
||||
- **发起节点**:流程起点,自动以申请人身份填充;不需要配置审批人
|
||||
- **单人审批**:1 个候选人,处理后流程进入下一节点
|
||||
- **顺序会签**:多个审批人按顺序处理,前一人通过才轮到下一人;任一人拒绝整单拒绝
|
||||
- **并行会签**:多个审批人同时收到任务,**全部**通过才进入下一节点;任一人拒绝整单拒绝
|
||||
- **或签**:多个候选人同时收到任务,**任一人**处理即代表全节点完成(典型用于"任一主管审批")
|
||||
- **抄送节点**:通知性节点,候选人只收到通知(在「抄送我的」Tab 看到),无须操作,流程不等待
|
||||
|
||||
## 审批人来源
|
||||
- 指定具体用户:在编辑器里勾选成员列表
|
||||
- 部门负责人:动态解析为发起人当前部门的 `owner_userid`(在 `UserDepartment` 表里维护)
|
||||
- 角色:按主程序角色匹配
|
||||
- 发起人自选:留空让发起人发起时手动指定
|
||||
|
||||
## 节点完成后的通知
|
||||
节点产生新任务后,主程序通过 `approval-alert` 机器人在群聊推送"待你审批"模板消息给候选人;状态变更(通过/拒绝/撤回)也走同一机器人推送。
|
||||
|
||||
## 与状态的关系
|
||||
- 整单状态:审批中(1)/ 通过(2)/ 拒绝(3)/ 撤回(4)
|
||||
- 当前所在节点 + 候选人由插件维护,主程序通过 `process__getProcessById` 拿到
|
||||
|
||||
## 不支持
|
||||
- 不支持条件分支(不能按表单字段值 IF X 自动路由到分支 A);需要按条件走不同审批人时,把流程拆成多个流程模板(如「请假 3 天以内」「请假 3 天以上」各建一个),由发起人按情况选择
|
||||
- 不支持任意节点回退
|
||||
- 不支持节点级 SLA 超时自动转交
|
||||
@ -1,47 +0,0 @@
|
||||
---
|
||||
id: approve.notify.concept
|
||||
title: 审批通知与「审批助手」机器人
|
||||
type: concept
|
||||
feature: approve
|
||||
scope: end-user
|
||||
locale: zh
|
||||
aliases:
|
||||
- 审批机器人
|
||||
- 审批通知
|
||||
- 审批助手
|
||||
- approval-alert
|
||||
- 怎么收到审批提醒
|
||||
- 审批卡片
|
||||
related_tools: []
|
||||
related_pages: [application, messenger]
|
||||
prerequisites:
|
||||
- 应用市场已安装 approve 插件
|
||||
- 当前账号未屏蔽「审批助手」机器人会话
|
||||
negative:
|
||||
- 不支持改成第三方 webhook 推送
|
||||
- 不支持邮件 / 短信 / APP 推送渠道(只发应用内聊天)
|
||||
- 不支持自定义模板文案
|
||||
- 机器人不能被「@」也不能直接对话指令
|
||||
last_verified: v1.7.90
|
||||
---
|
||||
|
||||
# 审批通知与「审批助手」机器人
|
||||
|
||||
## 定义
|
||||
审批的所有通知都通过系统机器人「审批助手」(userid `approval-alert`)的 1 对 1 私聊推送,消息类型 `template`(卡片)。卡片含标题、关键字段、缩略图(请假类带图片时),底部「查看详情」跳进审批详情。
|
||||
|
||||
## 何时发卡片
|
||||
后端 `approveMsg()` 按 `type` 投递:
|
||||
|
||||
| type | 触发 | 收件人 | 标题样例 |
|
||||
|---|---|---|---|
|
||||
| `approve_reviewer` | 到我作审批人节点 | 待审批人 | {发起人} 提交的「{模板}」待你审批 |
|
||||
| `approve_notifier` | 到我所在 notifier 节点 | 抄送人 | 抄送 {发起人} 提交的「{模板}」记录 |
|
||||
| `approve_comment_notifier` | 我参与的审批被加全文评论 | 其他相关方 | {评论人} 评论了 {发起人} 的「{模板}」审批 |
|
||||
| `approve_submitter` | 我发起的被通过/拒绝 | 发起人 | 您发起的「{模板}」已通过 / 被 {审批人} 拒绝 |
|
||||
|
||||
## 卡片更新机制
|
||||
审批人同意/拒绝、发起人撤销时不发新卡,而用 `msg_id` 反查原卡片调 `change-{msg_id}` 原地更新(绿-通过/红-拒绝/灰-撤回),避免聊天里堆几十条。
|
||||
|
||||
## 未读徽标
|
||||
`approve_reviewer` 推送时附带 WebSocket 事件 `approve/unread`,「审批」入口和 Tab「待办」名后的数字立即 +1,处理后 -1。数量接口 `approve/process/doto`。
|
||||
@ -1,46 +0,0 @@
|
||||
---
|
||||
id: approve.concept
|
||||
title: 审批中心是什么
|
||||
type: concept
|
||||
feature: approve
|
||||
scope: end-user
|
||||
locale: zh
|
||||
aliases:
|
||||
- 审批是什么
|
||||
- 审批流程是什么
|
||||
- approve 插件
|
||||
- 什么是流程审批
|
||||
- 工作流
|
||||
related_tools: []
|
||||
related_pages: [application]
|
||||
prerequisites:
|
||||
- 应用市场已安装 approve 插件
|
||||
negative:
|
||||
- 审批是独立插件,未安装时整个功能不可用
|
||||
- 不支持条件分支(按表单值路由到不同审批人)
|
||||
- 不支持嵌套子审批
|
||||
- 表单不支持公式计算字段
|
||||
last_verified: v1.7.90
|
||||
---
|
||||
|
||||
# 审批中心是什么
|
||||
|
||||
## 定义
|
||||
审批中心(approve)是 DooTask 的内置流程审批应用,用于在企业内提交、流转、处理表单类申请。典型场景:请假、出差、报销、用印、采购、合同会签。它是独立插件(独立 docker 服务 + 独立数据库),主程序通过 `ApproveController` 代理调用并把消息回写到聊天会话。
|
||||
|
||||
## 三个核心对象
|
||||
- **流程模板 ProcDef**:管理员预先定义的审批样板,含表单字段、审批人节点、抄送人节点。普通用户只能选用,不能修改
|
||||
- **流程实例 ProcInst**:一次具体的审批运行;用户每提交一次就生成一条,详见 [[approve.process-inst.concept]]
|
||||
- **节点 Node**:模板里的步骤;常见类型 `starter`(发起)、`approver`(审批人)、`notifier`(抄送)、`end`(结束)
|
||||
|
||||
## 三类角色
|
||||
- **发起人**:提交审批的人,能撤回未结束的审批、能给已结束的审批补评论
|
||||
- **审批人**:在「待办」看到任务,可同意或拒绝
|
||||
- **抄送人**:在「抄送我」看到知会,无须操作
|
||||
|
||||
## 状态机
|
||||
流程实例的 `state`:1 审批中、2 已通过、3 已拒绝、4 已撤回。详情页右上角用 Tag 显示,列表也按这个色区分。
|
||||
|
||||
## 与项目/任务/聊天的关系
|
||||
- 审批不属于任何项目,是独立工作流
|
||||
- 所有通知通过「审批助手」机器人发到 1 对 1 聊天([[approve.notify.concept]])
|
||||
@ -1,43 +0,0 @@
|
||||
---
|
||||
id: approve.plugin.concept
|
||||
title: 审批插件架构
|
||||
type: concept
|
||||
feature: approve
|
||||
scope: end-user
|
||||
locale: zh
|
||||
aliases:
|
||||
- 审批是插件吗
|
||||
- approve 插件是什么
|
||||
- 审批中心怎么部署的
|
||||
- 为什么审批要单独装
|
||||
- 审批不在主程序里吗
|
||||
related_tools: []
|
||||
related_pages: [application]
|
||||
prerequisites: []
|
||||
negative:
|
||||
- approve 不是主程序内置功能,必须先在应用市场安装插件才能用
|
||||
- 审批数据存在独立的 `<前缀>approve_*` 数据表里,不在主程序业务表
|
||||
- 卸载插件时若勾选「删除数据」会清空全部审批数据,无法恢复
|
||||
last_verified: v1.7.90
|
||||
---
|
||||
|
||||
# 审批插件架构
|
||||
|
||||
## 定义
|
||||
审批(approve)是 DooTask 的独立插件,由 `kuaifan/dooapprove` Docker 镜像提供一套独立的工作流引擎服务。主程序通过反向代理与之通信,所有审批的流程定义、实例、任务、历史都由插件维护,不在主程序业务表里。
|
||||
|
||||
## 关键属性
|
||||
- **独立容器**:插件作为 docker-compose 服务名 `approve` 启动,端口仅在内网暴露
|
||||
- **独立数据库表**:复用主库实例但表前缀为 `<DB_PREFIX>approve_`(如 `pre_approve_*`),与主程序业务表逻辑隔离
|
||||
- **HTTP 反代**:主程序 nginx 把 `/approve/` 转给插件容器;`/approve/api/` 先经 `/approveAuth` 校验主程序 token 再放行
|
||||
- **业务桥接**:主程序 `ApproveController` 通过 `http://approve` 调用插件 REST 接口(路径前缀 `/api/v1/workflow/...`),把结果包成 `Base::retSuccess` 返回前端
|
||||
- **通知桥接**:审批状态变化通过 `approval-alert` 机器人在 DooTask 群聊中下发模板消息
|
||||
|
||||
## 与主程序的关系
|
||||
- 主程序登录 token = 审批插件身份凭据(通过 `verifyToken` 接口校验)
|
||||
- 主程序用户/部门/机器人是审批的"人员主数据",审批不复制用户表
|
||||
- 用户感知不到容器分离:在 [[app-system.approve.howto]] 描述的「审批中心」页面内完成所有操作
|
||||
|
||||
## 不支持
|
||||
- 主程序无法直接 SQL 查询审批数据,必须经插件 API
|
||||
- 关闭/卸载插件后无法发起新审批:「应用 - 审批」入口在新发起处会报错(`Apps::isInstalledThrow`)
|
||||
@ -1,51 +0,0 @@
|
||||
---
|
||||
id: approve.process-inst.concept
|
||||
title: 流程实例 ProcInst 是什么
|
||||
type: concept
|
||||
feature: approve
|
||||
scope: end-user
|
||||
locale: zh
|
||||
aliases:
|
||||
- 流程实例
|
||||
- 审批单
|
||||
- ProcInst
|
||||
- 审批运行
|
||||
- 一次审批
|
||||
- 流程 ID
|
||||
related_tools: []
|
||||
related_pages: [application]
|
||||
prerequisites:
|
||||
- 应用市场已安装 approve 插件
|
||||
negative:
|
||||
- 流程实例不可改字段,提交后表单只读
|
||||
- 一旦后续节点已被任何审批人处理,发起人不能再撤销
|
||||
- 已结束的实例只有发起人或管理员能删([[approve.doto.howto]])
|
||||
last_verified: v1.7.90
|
||||
---
|
||||
|
||||
# 流程实例 ProcInst 是什么
|
||||
|
||||
## 定义
|
||||
流程实例(ProcInst)是「一次具体的审批运行」的对象,由发起审批时创建。模板(ProcDef)是图纸,实例是按图纸跑出来的一条具体审批单。每提交一次就生成一个新实例,有唯一数字 ID。后端表 `approve_proc_inst`,主程序通过 `approve/process/findById` 取数据。
|
||||
|
||||
## 关键属性
|
||||
- **id**:实例唯一 ID
|
||||
- **proc_def_name**:模板名(如「请假申请」)
|
||||
- **start_user_id / start_user_name**:发起人 ID 和昵称
|
||||
- **start_time**:提交时间
|
||||
- **state**:1 审批中 / 2 已通过 / 3 已拒绝 / 4 已撤回
|
||||
- **is_finished**:是否结束(state ≠ 1 即结束)
|
||||
- **task_id**:当前 task ID(处理动作要带)
|
||||
- **candidate**:当前候选审批人 userid 逗号串
|
||||
- **node_id / node_infos**:当前节点 ID + 所有节点状态数组,用于渲染流程图
|
||||
- **var**:表单字段对象(type / start_time / end_time / description / other 等)
|
||||
- **global_comments**:全文评论数组([[approve.comment.howto]])
|
||||
|
||||
## 生命周期
|
||||
1. **创建**:`approve/process/start`,state=1
|
||||
2. **流转**:每次 `approve/task/complete` 推进节点
|
||||
3. **结束**:state 变 2/3/4
|
||||
4. **清理**:仅结束态可调 `approve/process/delById` 物理删除
|
||||
|
||||
## 与历史记录的关系
|
||||
每次节点流转写一条 [[approve.history.concept]](`approve_proc_inst_history`),实例被删后历史也消失。
|
||||
@ -1,48 +0,0 @@
|
||||
---
|
||||
id: approve.template.concept
|
||||
title: 流程模板(流程定义)
|
||||
type: concept
|
||||
feature: approve
|
||||
scope: admin
|
||||
locale: zh
|
||||
aliases:
|
||||
- 流程模板
|
||||
- 审批模板
|
||||
- 流程定义
|
||||
- procdef 是什么
|
||||
- 流程名称
|
||||
- 审批流程是什么
|
||||
related_tools: []
|
||||
related_pages: [application]
|
||||
prerequisites:
|
||||
- 应用市场已安装 approve 插件
|
||||
negative:
|
||||
- 流程模板只能由系统管理员创建、编辑、删除;普通成员只能基于已发布模板发起申请
|
||||
- 删除模板会同时清空该模板下的所有审批数据,不可恢复
|
||||
- 模板间不可复制:每个模板都要在编辑器里独立配置节点和表单
|
||||
last_verified: v1.7.90
|
||||
---
|
||||
|
||||
# 流程模板(流程定义)
|
||||
|
||||
## 定义
|
||||
流程模板(Process Definition,简称 procdef)是审批插件里"审批种类"的元数据,定义了一类审批的全部行为:表单字段、节点顺序、每个节点的审批人/抄送人。普通成员发起的每一单审批(流程实例)都必须基于某个已发布的流程模板。常见模板:请假申请、报销申请、出差申请、用印申请、采购申请。
|
||||
|
||||
## 关键属性
|
||||
- **唯一性**:以 `name` 区分(如「请假申请」),同名模板不允许重复创建
|
||||
- **版本**:每次发布累计 `version`;旧版本会被新版本顶替,进行中的审批仍按当时的版本走完
|
||||
- **状态**:草稿(编辑中)/ 已发布(前台可选)
|
||||
- **存储位置**:插件独立数据库 `<前缀>approve_*` 表,不在主程序业务表
|
||||
- **生效范围**:全租户共享,不按部门隔离;要按部门分模板请改用不同 `name`
|
||||
|
||||
## 与流程实例的关系
|
||||
- 一个模板(procdef)= 一份蓝图
|
||||
- 用户每发起一单 = 创建一个流程实例(proc inst),状态独立流转
|
||||
- 删除模板:插件会同时清空所有以该模板发起的实例,**不可恢复**
|
||||
|
||||
## 与节点 / 表单的关系
|
||||
- 流程模板包含两部分配置:**节点链**(决定走哪几步、由谁审批)见 [[approve.node.concept]]、**表单字段**(决定申请人填什么)见 [[approve.form.concept]]
|
||||
- 节点和表单在同一个流程编辑器(iframe 内)一起设计、一起发布
|
||||
|
||||
## 创建入口
|
||||
管理员在审批中心顶部「流程设置」按钮 → 「+」新建,详细步骤见 [[approve.template.howto]]。
|
||||
@ -1,39 +0,0 @@
|
||||
---
|
||||
id: checkin.face.concept
|
||||
title: 人脸签到原理与依赖
|
||||
type: concept
|
||||
feature: checkin
|
||||
scope: end-user
|
||||
locale: zh
|
||||
aliases:
|
||||
- 人脸识别原理
|
||||
- face 插件
|
||||
- 人脸签到依赖
|
||||
- 刷脸打卡怎么工作的
|
||||
related_tools: []
|
||||
related_pages: []
|
||||
prerequisites:
|
||||
- 应用市场已安装 face 插件
|
||||
last_verified: v1.7.90
|
||||
---
|
||||
|
||||
# 人脸签到原理与依赖
|
||||
|
||||
## 定义
|
||||
人脸签到是 DooTask 签到的一种方式,依赖独立的 **face 插件**提供人脸识别后端服务(容器名 `face`,内部端口 7788)。主程序只负责存储人脸图片地址 (`UserCheckinFace.faceimg`) 和触发签到记录写入,**所有特征提取、比对都由 face 插件完成**。
|
||||
|
||||
## 工作流程
|
||||
1. 成员在签到设置上传人脸图片
|
||||
2. 主程序把图片 base64 后 POST 到 `http://face:7788/user`,参数含 `enrollid`(成员 ID)、`name`(昵称)、`backupnum=50`
|
||||
3. face 容器把特征存入设备库
|
||||
4. 现场人脸识别一体机扫到该成员 → 调主程序 API 写一条 `UserCheckinRecord`
|
||||
|
||||
## 关键依赖
|
||||
- **face 插件**:人脸识别引擎容器,未安装会抛 `Apps::isInstalledThrow('face')` 异常
|
||||
- **人脸识别一体机硬件**:插件 README 注明「需配合指定硬件设备使用」
|
||||
- **管理员开关**:「签到方式」勾选「人脸签到」+「允许修改」开启「允许成员上传人脸图片」
|
||||
|
||||
## 不支持
|
||||
- 主程序自带的浏览器 / WebRTC 摄像头不能直接当人脸打卡器
|
||||
- face 插件镜像较大(约 15MB+),首次安装下载较慢
|
||||
- 删除成员或卸载插件后,face 容器内的特征不会自动清空,需要管理员手动删除
|
||||
@ -32,7 +32,7 @@ last_verified: v1.7.90
|
||||
- **人脸签到(face)**:**需要安装 face 插件**(应用市场搜「Face check-in」),并配套人脸识别硬件设备
|
||||
|
||||
## 关联应用市场
|
||||
- `face` 插件:人脸识别后端服务,未装时人脸上传 / 现场刷脸都会失败,详见 [[checkin.face.concept]]
|
||||
- `face` 插件:人脸识别后端服务,未装时人脸上传 / 现场刷脸都会失败(人脸签到详细说明随 face 应用知识库提供)
|
||||
- `approve` 插件:影响提醒筛选——已请假 / 外出审批的成员不会收到缺卡提醒
|
||||
|
||||
## 不支持
|
||||
|
||||
@ -1,55 +0,0 @@
|
||||
---
|
||||
id: drawio.concept
|
||||
title: 流程图(drawio)是什么
|
||||
type: concept
|
||||
feature: drawio
|
||||
scope: end-user
|
||||
locale: zh
|
||||
aliases:
|
||||
- drawio
|
||||
- 流程图
|
||||
- 画流程图
|
||||
- draw.io
|
||||
- DooTask 流程图
|
||||
- UML 图
|
||||
related_tools: []
|
||||
related_pages: [file]
|
||||
prerequisites:
|
||||
- 应用市场已安装 drawio 插件
|
||||
negative:
|
||||
- 流程图编辑能力不是主程序内置,未装 drawio 插件无法新建 `drawio` 类型文件
|
||||
- 不支持把 drawio 图形直接嵌入到任务详情/讨论消息中(只能作为文件链接发送)
|
||||
- 大图(千级节点)渲染会变慢,建议拆图
|
||||
last_verified: v1.7.90
|
||||
---
|
||||
|
||||
# 流程图(drawio)是什么
|
||||
|
||||
## 定义
|
||||
流程图是 DooTask 文件系统中的一种文件类型(`type=drawio`),用于绘制流程图、UML、ER 图、网络拓扑、思维导图等通用图形。它由独立的 drawio 插件提供编辑器(基于开源 jgraph/drawio),主程序通过 iframe 嵌入 `drawio/webapp/index.html`,文件内容存到 DooTask 自己的文件库里。
|
||||
|
||||
## 关键属性
|
||||
- **文件类型**:`drawio`(与 `mind` 思维导图、`document` 文本、`word/excel/ppt` 平行)
|
||||
- **存储位置**:DooTask 文件系统(个人文件 / 项目文件 / 共享)
|
||||
- **编辑器**:嵌入式 drawio 完整编辑器,含图形库、画布、属性面板
|
||||
- **导出**:支持导出 PNG / PDF(依赖插件内置的 export-server,缺它则导出失效)
|
||||
- **历史版本**:随 DooTask 文件历史一同保存
|
||||
|
||||
## 支持的图形类型
|
||||
- 流程图、泳道图
|
||||
- UML 类图、时序图、用例图
|
||||
- 网络拓扑、机柜图
|
||||
- 实体关系(ER)图
|
||||
- 思维导图(更建议用专用的 minder 插件)
|
||||
- 各类业务建模、原型草图
|
||||
|
||||
## 与其他文件类型的关系
|
||||
- **vs minder 思维导图**:思维导图专注放射结构,节点编辑更轻;drawio 是通用图形,自由度高
|
||||
- **vs OnlyOffice Word/Excel**:OnlyOffice 支持多人实时;drawio 单人编辑
|
||||
- **vs DooTask 内置 document**:document 是富文本/Markdown,没有矢量图形能力
|
||||
|
||||
## 相关
|
||||
- 插件元信息:[[drawio.plugin.concept]]
|
||||
- 创建流程图:[[drawio.create.howto]]
|
||||
- 入口在哪:[[drawio.entry.menu-map]]
|
||||
- 内置模板:[[drawio.template.concept]]
|
||||
@ -1,53 +0,0 @@
|
||||
---
|
||||
id: drawio.plugin.concept
|
||||
title: drawio 插件元信息
|
||||
type: concept
|
||||
feature: drawio
|
||||
scope: admin
|
||||
locale: zh
|
||||
aliases:
|
||||
- drawio 插件
|
||||
- 流程图插件
|
||||
- 安装 drawio
|
||||
- drawio 插件版本
|
||||
- draw.io 集成
|
||||
related_tools: []
|
||||
related_pages: [application]
|
||||
prerequisites: []
|
||||
negative:
|
||||
- 主程序不内置流程图编辑器,未装插件时新建文件菜单不会显示「图表」
|
||||
- 插件体积大约 700MB,下载较慢,需要稳定网络
|
||||
- 缺少同包的 export-server 时,PNG/PDF 导出会失败
|
||||
last_verified: v1.7.90
|
||||
---
|
||||
|
||||
# drawio 插件元信息
|
||||
|
||||
## 定义
|
||||
流程图能力由 `drawio` 插件提供(应用市场 app id 为 `drawio`,当前主版本 30.0.4,基于开源 jgraph/drawio)。插件包内除了 drawio 前端,还包含一个 export-server(镜像 `kuaifan/export-server`)负责把图形导出为 PNG/PDF。主程序仅以 iframe 加载 `drawio/webapp/index.html`,编辑器交互与文件保存全部跑在前端 + 主程序文件 API。
|
||||
|
||||
## 关键属性
|
||||
- **作者**:社区维护(Community),上游 https://www.drawio.com/
|
||||
- **分类**:微应用(不在管理员应用区)
|
||||
- **包大小**:约 700MB(含 drawio 资源 + export-server 镜像)
|
||||
- **运行形态**:静态资源 + 一个导出服务容器
|
||||
- **关键依赖**:`webapp/index.html` 的 `EXPORT_URL` 指向插件内的 `/drawio/export/`,删 export-server 会导致导出 PNG/PDF 失效
|
||||
- **数据存储**:图形内容存到主程序文件表(`type=drawio`),不在插件容器单独存
|
||||
|
||||
## 安装与启用
|
||||
1. 在应用市场(管理员入口)搜索「Drawio」或「流程图」
|
||||
2. 点击安装,等待资源下载(约 700MB,请通过「安装日志」查看进度)
|
||||
3. 安装完成后插件自动启用,文件新建菜单立即出现「图表」选项
|
||||
|
||||
## 卸载影响
|
||||
- 卸载后菜单消失,原有 `drawio` 文件保留在文件库中但无法继续编辑/预览
|
||||
- 重新安装后旧文件继续可用
|
||||
|
||||
## 已知限制
|
||||
- 网络不畅时首次加载图形库较慢
|
||||
- 离线环境需提前推到内网镜像源
|
||||
|
||||
## 相关
|
||||
- 是什么:[[drawio.concept]]
|
||||
- 入口在哪:[[drawio.entry.menu-map]]
|
||||
- 内置模板:[[drawio.template.concept]]
|
||||
@ -1,60 +0,0 @@
|
||||
---
|
||||
id: drawio.template.concept
|
||||
title: drawio 内置图形与模板
|
||||
type: concept
|
||||
feature: drawio
|
||||
scope: end-user
|
||||
locale: zh
|
||||
aliases:
|
||||
- drawio 模板
|
||||
- drawio 图形库
|
||||
- drawio 能画什么
|
||||
- 流程图都有哪些类型
|
||||
- drawio 支持的图形
|
||||
related_tools: []
|
||||
related_pages: [file]
|
||||
prerequisites:
|
||||
- 应用市场已安装 drawio 插件
|
||||
negative:
|
||||
- DooTask 不提供「业务模板市场」,新建图永远是空白画布
|
||||
- 不能直接将 drawio 图形粘贴到 DooTask 任务详情或讨论消息
|
||||
- 模板/形状无法跨公司账号共享(每个部署独立)
|
||||
last_verified: v1.7.90
|
||||
---
|
||||
|
||||
# drawio 内置图形与模板
|
||||
|
||||
## 定义
|
||||
drawio 编辑器自带丰富的图形库(Shape Libraries)和绘图分类,但 DooTask 集成时**不预置业务模板**。每次新建图都从空白画布开始,需要绘图者从图形库手动拖出元素或在 drawio 内的「File → New From Template」选择官方模板。
|
||||
|
||||
## 主要图形分类
|
||||
drawio 左侧图形库可勾选启用以下分类(部分):
|
||||
- 通用形状(General)
|
||||
- 流程图(Flowchart)
|
||||
- 泳道图(Swimlanes)
|
||||
- UML(类图、时序图、用例图、状态图、活动图)
|
||||
- 实体关系(ER)
|
||||
- 网络与基础设施(Cisco / AWS / Azure / GCP / Kubernetes 图标)
|
||||
- 软件架构(C4 模型)
|
||||
- 业务流程(BPMN)
|
||||
- 思维导图(mockup)
|
||||
- 电气、布线、机柜
|
||||
- 安卓/iOS 线框图
|
||||
|
||||
## 选用方式
|
||||
- 编辑器左下角「More Shapes」勾选要启用的图形库
|
||||
- 直接从左侧图形库拖元素到画布
|
||||
- 通过菜单 `File → New From Template` 选择官方预设模板(流程示例、组织结构等)
|
||||
|
||||
## 与思维导图(minder)对比
|
||||
- drawio 也能画思维导图,但灵活但偏「画」
|
||||
- 专注思维导图推荐用专门的 [[minder.concept]] 插件,节点操作更顺手
|
||||
|
||||
## 不支持
|
||||
- DooTask 主程序不预置业务模板(如审批流程模板等)
|
||||
- 模板不能跨部署共享,只能依赖 drawio 上游内置的模板
|
||||
- 不能上传自定义图形库到所有用户
|
||||
|
||||
## 相关
|
||||
- 是什么:[[drawio.concept]]
|
||||
- 创建:[[drawio.create.howto]]
|
||||
@ -1,48 +0,0 @@
|
||||
---
|
||||
id: fileview.concept
|
||||
title: 文件预览(fileview)是什么
|
||||
type: concept
|
||||
feature: fileview
|
||||
scope: end-user
|
||||
locale: zh
|
||||
aliases:
|
||||
- fileview
|
||||
- 文件预览
|
||||
- 在线预览
|
||||
- 预览 PDF
|
||||
- 预览 Word
|
||||
- kkfileview
|
||||
- 在线看文件
|
||||
related_tools: []
|
||||
related_pages: [file]
|
||||
prerequisites:
|
||||
- 应用市场已安装 fileview 插件
|
||||
negative:
|
||||
- fileview 只提供「只读预览」,不能在线编辑(编辑要装 OnlyOffice,见 [[office.concept]])
|
||||
- 主程序本身能直接预览图片(jpg/png/gif 等)和文本/代码,这些不需要 fileview
|
||||
- 视频/音频在线播放走主程序自带能力,也不属于 fileview 范畴
|
||||
last_verified: v1.7.90
|
||||
---
|
||||
|
||||
# 文件预览(fileview)是什么
|
||||
|
||||
## 定义
|
||||
fileview 是 DooTask 的**通用文件在线预览**能力,基于开源 kkfileview 引擎,由独立插件提供。所有不能被主程序直接渲染的文件类型(PDF、Word 系、Excel 系、PPT 系、Visio、CAD 等)在点击文件名时会跳转到 fileview 的预览页(路径 `fileview/onlinePreview?url=<base64 文件地址>`),返回浏览器内可滚动、可缩放、可翻页的页面。
|
||||
|
||||
## 关键属性
|
||||
- **只读**:仅查看,不可编辑(编辑能力需 OnlyOffice 插件)
|
||||
- **入口**:点击文件即可,主程序对超出本地预览范围的文件自动 301 到 fileview 路径
|
||||
- **格式覆盖**:远超主程序自带能力,包括 Office 全家桶、PDF、各类压缩包、3D 模型、CAD 等(详见 [[fileview.supported.concept]])
|
||||
- **加载机制**:fileview 后端拉取文件 → 转码或解析 → 推送渲染结果到浏览器
|
||||
- **依赖**:依赖独立 fileview 容器持续运行
|
||||
|
||||
## 与其他预览能力的关系
|
||||
- **图片**(jpg/jpeg/png/gif/bmp 等):主程序内置直接渲染,不走 fileview
|
||||
- **代码/文本**(2MB 内、扩展名属于 `codeExt` 列表):主程序内嵌 AceEditor 渲染,不走 fileview
|
||||
- **Word/Excel/PPT**:装了 OnlyOffice 时走 OnlyOffice 编辑器(可编辑);没装但装了 fileview 则走 fileview 只读预览
|
||||
- **思维导图(mind)/ 流程图(drawio)**:DooTask 自己的图形文件,由 minder/drawio 插件渲染,不走 fileview
|
||||
|
||||
## 相关
|
||||
- 插件元信息:[[fileview.plugin.concept]]
|
||||
- 支持的文件类型:[[fileview.supported.concept]]
|
||||
- 在线编辑 Office 文档:[[office.concept]]
|
||||
@ -1,53 +0,0 @@
|
||||
---
|
||||
id: fileview.plugin.concept
|
||||
title: fileview 插件元信息
|
||||
type: concept
|
||||
feature: fileview
|
||||
scope: admin
|
||||
locale: zh
|
||||
aliases:
|
||||
- fileview 插件
|
||||
- kkfileview 插件
|
||||
- 安装文件预览
|
||||
- 文件预览插件版本
|
||||
- 预览插件多大
|
||||
related_tools: []
|
||||
related_pages: [application]
|
||||
prerequisites: []
|
||||
negative:
|
||||
- 未安装 fileview 插件时,PDF/Office 等文件点击后会报错或下载,无法在线预览
|
||||
- 主程序不内置 kkfileview,本插件是唯一来源
|
||||
- 不能离线安装到不联网的环境(需访问应用市场镜像源)
|
||||
last_verified: v1.7.90
|
||||
---
|
||||
|
||||
# fileview 插件元信息
|
||||
|
||||
## 定义
|
||||
文件在线预览由 `fileview` 插件提供(应用市场 app id 为 `fileview`,当前主版本 4.4.0,基于开源 kkfileview 引擎)。主程序在用户点击文件时判断扩展名,若属于 fileview 范畴则 301 跳转到 `fileview/onlinePreview?url=<base64>`,由 fileview 容器渲染。
|
||||
|
||||
## 关键属性
|
||||
- **作者**:社区维护(Community),上游 https://kkview.cn/
|
||||
- **分类**:微应用(不在管理员应用区,但行为更像「基础设施」——不直接出现在「应用中心」用户菜单,由文件页自动触发)
|
||||
- **包大小**:约 630MB(含 LibreOffice + 各类转码工具)
|
||||
- **运行形态**:独立 Docker 容器,对接主程序 nginx 上的 `/fileview/` 反代
|
||||
- **渲染方式**:服务器侧用 LibreOffice 把 docx/pptx 转 PDF 再推到浏览器;纯 PDF 直接 PDF.js 渲染;图片格式化预览
|
||||
- **跨设备**:桌面端、移动端均能预览
|
||||
|
||||
## 安装与启用
|
||||
1. 在应用市场(管理员入口)搜索「FileView」或「文件预览」
|
||||
2. 点击安装,等待镜像下载(约 630MB,按「安装日志」判断进度)
|
||||
3. 安装完成后插件自动启用,所有未被主程序原生预览覆盖的文件点击后会自动用 fileview 渲染
|
||||
|
||||
## 卸载影响
|
||||
- 卸载后点击 PDF/Office 等文件会失败(路径仍指向 fileview 但容器不存在)
|
||||
- 重装后自动恢复
|
||||
|
||||
## 与 OnlyOffice 共存
|
||||
- 同时装了 office 和 fileview:Word/Excel/PPT 优先走 OnlyOffice 编辑器(可编辑)
|
||||
- 只装 fileview:Word/Excel/PPT 只能用 fileview 只读预览
|
||||
- 只装 office:fileview 才能预览的格式(如 PDF、Visio、CAD 等)无法在线预览
|
||||
|
||||
## 相关
|
||||
- 是什么:[[fileview.concept]]
|
||||
- 支持的文件类型:[[fileview.supported.concept]]
|
||||
@ -1,61 +0,0 @@
|
||||
---
|
||||
id: fileview.supported.concept
|
||||
title: fileview 支持的文件类型
|
||||
type: concept
|
||||
feature: fileview
|
||||
scope: end-user
|
||||
locale: zh
|
||||
aliases:
|
||||
- fileview 支持什么格式
|
||||
- 哪些文件能在线预览
|
||||
- DooTask 预览的格式
|
||||
- 能不能预览 PDF
|
||||
- 能不能预览 CAD
|
||||
- 预览支持的扩展名
|
||||
related_tools: []
|
||||
related_pages: [file]
|
||||
prerequisites:
|
||||
- 应用市场已安装 fileview 插件
|
||||
negative:
|
||||
- 加密/密码保护的 Office 文档预览失败(fileview 解不开)
|
||||
- 超大文件(>100MB)预览很慢甚至超时
|
||||
- 不能在预览页里编辑/批注
|
||||
last_verified: v1.7.90
|
||||
---
|
||||
|
||||
# fileview 支持的文件类型
|
||||
|
||||
## 定义
|
||||
fileview 插件基于开源 kkfileview 引擎,可在线预览 30+ 种文件格式。主程序对扩展名做粗分流:图片、代码文本、视频音频走主程序自带能力;其余几乎全部交给 fileview。
|
||||
|
||||
## 主要支持的格式分类
|
||||
- **PDF**:pdf
|
||||
- **Word 系**:doc, docx, dot, dotx, odt, ott, rtf
|
||||
- **Excel 系**:xls, xlsx, xlsm, xlt, xltx, ods, ots, csv, tsv
|
||||
- **PowerPoint 系**:ppt, pptx, pps, ppsx, pot, potx, odp, otp
|
||||
- **WPS 系**:wps, et, dps(与 Office 同一套转码路径)
|
||||
- **OpenDocument 全系**:odt/ods/odp/ott/ots/otp 等
|
||||
- **流程图 / 矢量**:vsd, vsdx(Visio),drawio 文件由 drawio 插件直接打开不走 fileview
|
||||
- **CAD**:dwg
|
||||
- **3D**:obj, stl
|
||||
- **电子书**:epub, mobi
|
||||
- **压缩包**:zip, rar, 7z, tar, gz(展开目录树预览)
|
||||
- **邮件/日历**:eml, ics
|
||||
- **代码(大文件兜底)**:当代码文本 > 2MB 主程序不再内嵌渲染,可由 fileview 兜底
|
||||
|
||||
## 主程序不走 fileview 的格式
|
||||
- 图片:jpg, jpeg, webp, png, gif, bmp(主程序内置渲染)
|
||||
- 视频/音频:mp3, wav, mp4, flv 等(内置播放器)
|
||||
- 代码/文本 ≤ 2MB(内嵌 AceEditor)
|
||||
- 思维导图(mind)→ minder 插件
|
||||
- 流程图(drawio)→ drawio 插件
|
||||
- Word/Excel/PPT 若装了 OnlyOffice → 走 OnlyOffice 编辑器(可编辑)
|
||||
|
||||
## 不支持
|
||||
- 加密 / 密码保护的 Office 文档无法预览
|
||||
- 不保证体积过大(数百 MB 起)的文件能正常预览(可能超时或加载缓慢)
|
||||
- 不能在预览页里编辑(fileview 只读)
|
||||
|
||||
## 相关
|
||||
- 插件元信息:[[fileview.plugin.concept]]
|
||||
- 是什么:[[fileview.concept]]
|
||||
@ -1,62 +0,0 @@
|
||||
---
|
||||
id: kpi.concept
|
||||
title: KPI 绩效考核是什么
|
||||
type: concept
|
||||
feature: kpi
|
||||
scope: end-user
|
||||
locale: zh
|
||||
aliases:
|
||||
- KPI
|
||||
- 绩效
|
||||
- 绩效考核
|
||||
- 绩效管理
|
||||
- 员工评估
|
||||
- Key Performance Indicator
|
||||
related_tools: []
|
||||
related_pages: [application]
|
||||
prerequisites:
|
||||
- 应用市场已安装 kpi 插件
|
||||
negative:
|
||||
- KPI 不是 OKR,与 OKR 在 DooTask 中是两个独立插件
|
||||
- KPI 不是主程序内置功能,未装插件时不可用
|
||||
- KPI 用户角色与 DooTask 系统角色不完全等价(详见正文)
|
||||
last_verified: v1.7.90
|
||||
---
|
||||
|
||||
# KPI 绩效考核是什么
|
||||
|
||||
## 定义
|
||||
KPI(Key Performance Indicator,关键绩效指标)在 DooTask 中由独立插件 `community_kuaifan_kpi` 提供,是面向企业和组织的现代化绩效考核管理系统。它支持创建考核任务、按模板录入指标评分、邀请同事评分、HR 审核与异议处理,让多角色协作完成员工绩效评估。
|
||||
|
||||
## 在 DooTask 中的形态
|
||||
- 通过应用市场安装的社区插件(基于 Next.js + Go)
|
||||
- 与 DooTask 用户体系打通:用户信息、部门信息自动同步
|
||||
- 与 DooTask 主程序作为应用插件集成,菜单挂在「应用」下
|
||||
|
||||
## 用户角色
|
||||
KPI 内部有自己独立的三级角色(与 DooTask 系统角色不完全等价):
|
||||
|
||||
- **employee(普通员工)**:查看 / 填写自己的考核、提交异议、参与邀请评分
|
||||
- **manager(部门主管)**:员工的全部能力 + 评估下属、导出数据
|
||||
- **hr(HR 管理员)**:完整系统权限,管理部门 / 员工 / 模板 / 规则 / 异议
|
||||
|
||||
## 关键能力
|
||||
- **考核管理**:创建、填写、管理绩效考核
|
||||
- **邀请评分**:多角度 360 度评价(详见 [[kpi.create.howto]])
|
||||
- **异议处理**:员工可申诉,HR 审核调整得分
|
||||
- **统计分析**:数据图表与报表,支持 Excel 导出
|
||||
- **KPI 模板**:HR 维护通用模板供考核复用
|
||||
|
||||
## KPI 与 OKR 的区别
|
||||
- **KPI**:直接考核指标,与绩效 / 薪酬绑定,偏重「不能丢分」
|
||||
- **OKR**:目标管理工具,鼓励挑战性目标,与考核解耦
|
||||
|
||||
## 不支持
|
||||
- 不直接对接 DooTask 任务完成情况自动算绩效
|
||||
- 不支持脱离 DooTask 单独登录使用
|
||||
|
||||
## 相关
|
||||
- 插件元信息:[[kpi.plugin.concept]]
|
||||
- 入口在哪:[[kpi.entry.menu-map]]
|
||||
- 创建考核:[[kpi.create.howto]]
|
||||
- 评分机制:[[kpi.scoring.concept]]
|
||||
@ -1,60 +0,0 @@
|
||||
---
|
||||
id: kpi.plugin.concept
|
||||
title: KPI 插件元信息
|
||||
type: concept
|
||||
feature: kpi
|
||||
scope: end-user
|
||||
locale: zh
|
||||
aliases:
|
||||
- KPI 插件
|
||||
- kpi 怎么装
|
||||
- 绩效插件
|
||||
- 绩效考核插件
|
||||
- community_kuaifan_kpi
|
||||
related_tools: []
|
||||
related_pages: [application]
|
||||
prerequisites: []
|
||||
negative:
|
||||
- KPI 不是主程序内置功能,未装插件时入口不会出现
|
||||
- 插件升级不通过 git pull,需要在应用市场更新
|
||||
- 主程序版本必须高于 1.4.67,否则插件无法安装
|
||||
last_verified: v1.7.90
|
||||
---
|
||||
|
||||
# KPI 插件元信息
|
||||
|
||||
## 定义
|
||||
KPI 绩效考核在 DooTask 中由社区插件提供,应用市场 app id 为 `community_kuaifan_kpi`(当前版本 0.1.9),feature 短名 `kpi`。主程序不内置任何 KPI 代码,所有绩效逻辑都跑在独立 Docker 容器中,作为应用插件挂载到 DooTask 界面。
|
||||
|
||||
## 关键属性
|
||||
- **作者**:DooTask 官方
|
||||
- **要求**:主程序版本 > 1.4.67(依赖新 API 能力)
|
||||
- **运行形态**:单个 Docker 容器(镜像 `dootask/kpi:<version>`)
|
||||
- **数据存储**:独立 SQLite 数据库,本地卷 `kpi_data` 挂载到 `/web/db`,不入主库
|
||||
- **菜单注入**:安装后在「应用中心」注册「绩效考核」入口
|
||||
- **重启策略**:`unless-stopped`,主机重启容器自动恢复
|
||||
|
||||
## 用户生命周期钩子
|
||||
插件订阅了 DooTask 的用户事件,自动维护 KPI 内部用户:
|
||||
|
||||
- `user_onboard`:DooTask 创建用户时,自动在 KPI 内建号
|
||||
- 部门不存在则自动创建该部门
|
||||
- DooTask 管理员自动设为 HR 角色
|
||||
- 部门负责人自动设为 manager 角色
|
||||
- 其余设为 employee 角色
|
||||
- `user_offboard`:DooTask 删除用户时,KPI 同步清理
|
||||
|
||||
## 信息同步规则
|
||||
用户登录 KPI 时:
|
||||
|
||||
- 自动更新姓名、职位
|
||||
- **角色保持不变**(不会因为 DooTask 角色变化而重新分配 KPI 角色)
|
||||
|
||||
## 不支持
|
||||
- 不能离线安装到不联网的环境(需访问应用市场镜像源)
|
||||
- 不能在主程序 < 1.4.67 的环境上安装
|
||||
|
||||
## 相关
|
||||
- 是什么:[[kpi.concept]]
|
||||
- 入口在哪:[[kpi.entry.menu-map]]
|
||||
- 评分机制:[[kpi.scoring.concept]]
|
||||
@ -1,73 +0,0 @@
|
||||
---
|
||||
id: kpi.scoring.concept
|
||||
title: KPI 评分机制与权重
|
||||
type: concept
|
||||
feature: kpi
|
||||
scope: end-user
|
||||
locale: zh
|
||||
aliases:
|
||||
- KPI 怎么算分
|
||||
- 绩效权重
|
||||
- 自评权重
|
||||
- 上级评分
|
||||
- 邀请评分权重
|
||||
- 绩效规则
|
||||
- 最终得分怎么来的
|
||||
related_tools: []
|
||||
related_pages: [application]
|
||||
prerequisites:
|
||||
- 应用市场已安装 kpi 插件
|
||||
negative:
|
||||
- 仅 HR 管理员可以配置绩效规则
|
||||
- 权重百分比合计必须为 100%,否则保存不通过
|
||||
- 关闭绩效规则开关后,系统回退到默认评分方式
|
||||
- 配置修改后立即生效,仅影响后续新发起的考核
|
||||
last_verified: v1.7.90
|
||||
---
|
||||
|
||||
# KPI 评分机制与权重
|
||||
|
||||
## 定义
|
||||
KPI 插件的「绩效规则」用于配置不同评分来源在最终得分中的权重比例。系统会根据规则把自评、上级评分、邀请评分按比例加权,自动算出员工的最终绩效得分。
|
||||
|
||||
## 评分来源
|
||||
一次考核可能涉及最多三种评分来源:
|
||||
|
||||
- **自评**:员工对照模板给自己打分
|
||||
- **上级评分**:直属主管打分
|
||||
- **邀请评分**:HR 邀请的第三方人员打分(可选环节,仅在 HR 发起邀请后生效)
|
||||
|
||||
## 配置场景
|
||||
绩效规则按是否有邀请评分分为两套权重配置:
|
||||
|
||||
- **无邀请评分场景**
|
||||
- 自评权重 + 上级评分权重 = 100%
|
||||
- **有邀请评分场景**
|
||||
- 自评权重 + 邀请评分权重 + 上级评分权重 = 100%
|
||||
|
||||
## 配置流程
|
||||
1. HR 进入 KPI 的「绩效规则」配置页
|
||||
2. 打开绩效规则开关,规则生效
|
||||
3. 按公司制度分别设置两种场景下各来源的权重百分比
|
||||
4. 保存后立即生效,影响后续新发起的考核
|
||||
5. 若关闭开关,系统使用默认评分方式
|
||||
|
||||
## HR 审核环节
|
||||
- 主管评估、邀请评分完成后,HR 在「审核」环节查看汇总结果
|
||||
- 系统按绩效规则自动算出最终得分,HR 可手动调整
|
||||
- 员工在「待确认」状态查看最终分;有异议可申诉,HR 审核后再调分
|
||||
|
||||
## 异议处理对得分的影响
|
||||
- 员工提交异议后考核状态变为「异议处理中」
|
||||
- HR 可填写处理原因并调整最终得分
|
||||
- 处理后员工需重新确认;如仍有异议可再次提交(每轮异议都需 HR 重新处理)
|
||||
|
||||
## 不支持
|
||||
- 不支持非 HR 角色配置绩效规则
|
||||
- 不支持单条考核临时改权重(只能改全局规则)
|
||||
- 不支持权重为负值或合计不等于 100%
|
||||
|
||||
## 相关
|
||||
- KPI 是什么:[[kpi.concept]]
|
||||
- 创建考核:[[kpi.create.howto]]
|
||||
- 入口在哪:[[kpi.entry.menu-map]]
|
||||
@ -1,55 +0,0 @@
|
||||
---
|
||||
id: memos.concept
|
||||
title: Memos 是什么
|
||||
type: concept
|
||||
feature: memos
|
||||
scope: end-user
|
||||
locale: zh
|
||||
aliases:
|
||||
- Memos
|
||||
- 速记
|
||||
- 笔记应用
|
||||
- 个人笔记
|
||||
- 想法记录
|
||||
- 碎片笔记
|
||||
related_tools: []
|
||||
related_pages: [application]
|
||||
prerequisites:
|
||||
- 应用市场已安装 memos 插件
|
||||
negative:
|
||||
- Memos 不是主程序内置功能,未装插件时不可用
|
||||
- Memos 默认走 SQLite 本地存储,不接 DooTask 主库
|
||||
- 不支持游客 / 未登录访问
|
||||
last_verified: v1.7.90
|
||||
---
|
||||
|
||||
# Memos 是什么
|
||||
|
||||
## 定义
|
||||
Memos(笔记 / 速记)是一款隐私优先、轻量级的开源笔记服务(开源项目 [usememos.com](https://www.usememos.com)),在 DooTask 中以独立插件形式集成,主要用来快速记录想法、待办、链接、代码片段等碎片化内容。每条记录就是一条「memo」,时间倒序排列在时间线上。
|
||||
|
||||
## 在 DooTask 中的形态
|
||||
- 通过应用市场安装的社区插件,与主程序同源、共用 TLS
|
||||
- 走主程序 nginx 子路径 `/apps/memos/` 反向代理,用户无需额外登录
|
||||
- 数据自托管,使用 SQLite,存放于应用目录 `data/memos`
|
||||
|
||||
## 关键特性
|
||||
- **轻量速记**:以时间线方式记录碎片想法,类似 Twitter/微博风格
|
||||
- **隐私优先**:数据完全自托管,不上传第三方
|
||||
- **单点登录**:DooTask 登录态自动同步,免输密码
|
||||
- **标签 / 分类**:支持 `#标签` 语法分类整理(详见 [[memos.tag.concept]])
|
||||
|
||||
## 适用场景
|
||||
- 工作日志、灵感速记
|
||||
- 临时收藏链接 / 代码片段
|
||||
- 个人学习笔记 / 读书摘录
|
||||
- 团队不强协作场景下的轻量笔记
|
||||
|
||||
## 不支持
|
||||
- 不替代正式文档(如需协作文档请用项目内文档)
|
||||
- Memos 不直接与任务 / 项目数据互通
|
||||
|
||||
## 相关
|
||||
- 插件元信息:[[memos.plugin.concept]]
|
||||
- 入口在哪:[[memos.entry.menu-map]]
|
||||
- 怎么写一条:[[memos.create.howto]]
|
||||
@ -1,52 +0,0 @@
|
||||
---
|
||||
id: memos.plugin.concept
|
||||
title: Memos 插件元信息
|
||||
type: concept
|
||||
feature: memos
|
||||
scope: end-user
|
||||
locale: zh
|
||||
aliases:
|
||||
- Memos 插件
|
||||
- memos 怎么装
|
||||
- memos 应用市场
|
||||
- 笔记插件
|
||||
- community_kuaifan_memos
|
||||
related_tools: []
|
||||
related_pages: [application]
|
||||
prerequisites: []
|
||||
negative:
|
||||
- Memos 不是主程序内置功能,未装插件时入口不会出现
|
||||
- 插件升级不通过 git pull,需要在应用市场更新
|
||||
- 插件不能离线安装到不联网的环境
|
||||
last_verified: v1.7.90
|
||||
---
|
||||
|
||||
# Memos 插件元信息
|
||||
|
||||
## 定义
|
||||
Memos 在 DooTask 中由社区插件提供,应用市场 app id 为 `community_kuaifan_memos`(当前版本 0.29.0),feature 短名 `memos`。主程序不内置任何 Memos 代码,所有笔记逻辑都跑在独立容器中,通过 nginx 反向代理 `/apps/memos/` 子路径挂载到 DooTask 界面。
|
||||
|
||||
## 关键属性
|
||||
- **作者**:DooTask 官方(基于开源项目 usememos/memos)
|
||||
- **运行形态**:两个 Docker 容器
|
||||
- `memos-server`:自构建 Memos 镜像(`dootask/memos-server:0.29.0`),前端打补丁支持子路径
|
||||
- `memos-proxy`:鉴权代理(`dootask/memos:<version>`),校验 DooTask 用户令牌、自动建号 / 免密登录
|
||||
- **数据存储**:SQLite,本地卷 `memos-data` 挂载到 `/var/opt/memos`,不入主库
|
||||
- **菜单注入**:安装后在「应用中心」注册「Memos 笔记」入口
|
||||
- **会话有效期**:访问令牌过期后通过 `memos_refresh` cookie 自动续期,最长 30 天
|
||||
|
||||
## 安装配置项
|
||||
- **管理员**:在安装界面选择若干 DooTask 用户作为 Memos 管理员,其余用户以普通成员身份登录
|
||||
- **内部密钥**:用于派生账号密码与签名会话,安装后请勿修改
|
||||
|
||||
## 单点登录机制
|
||||
- 用户打开插件时,代理自动在 Memos 内建号、用确定性密码登录
|
||||
- 屏蔽 Memos 原生的直接登录与自助注册接口(防止绕过 DooTask 鉴权)
|
||||
|
||||
## 不支持
|
||||
- 不能用 Memos 原生账号密码登录(仅支持 DooTask SSO)
|
||||
- 不能选择不安装 `memos-proxy`(鉴权必经路径)
|
||||
|
||||
## 相关
|
||||
- 是什么:[[memos.concept]]
|
||||
- 入口在哪:[[memos.entry.menu-map]]
|
||||
@ -1,57 +0,0 @@
|
||||
---
|
||||
id: memos.tag.concept
|
||||
title: Memos 标签与分类
|
||||
type: concept
|
||||
feature: memos
|
||||
scope: end-user
|
||||
locale: zh
|
||||
aliases:
|
||||
- Memos 标签
|
||||
- memos 怎么分类
|
||||
- 笔记标签
|
||||
- 笔记分类
|
||||
- 标签筛选
|
||||
- "#标签"
|
||||
related_tools: []
|
||||
related_pages: [application]
|
||||
prerequisites:
|
||||
- 应用市场已安装 memos 插件
|
||||
negative:
|
||||
- 标签是每个用户私有的(不与其他 DooTask 用户共用)
|
||||
- 标签不与 DooTask 主程序的任务标签互通
|
||||
last_verified: v1.7.90
|
||||
---
|
||||
|
||||
# Memos 标签与分类
|
||||
|
||||
## 定义
|
||||
Memos 没有独立的「分类」字段,靠 `#标签` 语法在 memo 正文中内联标记。任何写在 `#xxx` 形式的词都会被识别为标签,自动聚合到侧边栏的标签列表,便于后续筛选检索。
|
||||
|
||||
## 关键属性
|
||||
- **写法**:在内容里直接写 `#项目A` `#读书笔记`,可一条 memo 多个标签
|
||||
- **嵌套**:支持斜杠分层,例如 `#工作/会议纪要`,侧栏会折叠展示
|
||||
- **私有**:每个 Memos 账号的标签彼此隔离(每个 DooTask 用户在 Memos 内是独立账号)
|
||||
- **聚合方式**:Memos 自动扫描所有 memo 正文,无需手动维护「标签库」
|
||||
|
||||
## 使用方式
|
||||
- **添加**:写 memo 时在内容里直接打 `#标签名`,保存即生效
|
||||
- **筛选**:点击侧栏中对应标签,时间线只显示带该标签的 memo
|
||||
- **删除**:把所有 memo 里这个 `#标签` 的字符删掉,标签自动消失(无独立删除按钮)
|
||||
|
||||
## 与可见性的关系
|
||||
- 标签本身只是文本标记,不影响 memo 的可见性(私有 / 工作区 / 公开)
|
||||
- 想限定某类笔记只自己可见,应改对应 memo 的可见性,而不是靠标签
|
||||
|
||||
## 适用场景
|
||||
- 按项目 / 主题 / 周期分组浏览
|
||||
- 给读书摘录 / 灵感速记打主题
|
||||
- 搭配搜索定位历史笔记
|
||||
|
||||
## 不支持
|
||||
- 不能改某个标签的名字(要重命名只能逐条编辑替换原文)
|
||||
- 不能给标签设颜色或图标
|
||||
- 不能从 DooTask 主程序任务的标签自动同步过来
|
||||
|
||||
## 相关
|
||||
- Memos 是什么:[[memos.concept]]
|
||||
- 写一条 memo:[[memos.create.howto]]
|
||||
@ -27,14 +27,14 @@ last_verified: v1.7.90
|
||||
DooTask 应用市场提供一组官方与社区维护的微应用。下面列的是较常见的几类,实际能在应用中心看到的微应用取决于本实例已安装了哪些,参考服务器 `docker/appstore/apps/` 目录即可知。
|
||||
|
||||
## 常见微应用
|
||||
- **OKR**(id `okr`)— 目标 + 关键结果管理,参考 [[okr.concept]]
|
||||
- **审批中心**(id `approve`)— 流程审批,参考 [[approve.concept]]
|
||||
- **OKR**(id `okr`)— 目标 + 关键结果管理
|
||||
- **审批中心**(id `approve`)— 流程审批
|
||||
- **思维导图 Minder**(id `minder`)— 文件类型 `.km`
|
||||
- **流程图 Drawio**(id `drawio`)— 文件类型 `.drawio`
|
||||
- **OnlyOffice**(id `office`)— Word / Excel / PPT 在线编辑
|
||||
- **文件预览 fileview**(id `fileview`)— PDF / 图片 / 文档预览渲染
|
||||
- **人脸识别签到**(id `face`)— 配合签到使用
|
||||
- **AI 助手**(id `ai`)— 见 [[ai-assistant.entry.howto]]
|
||||
- **AI 助手**(id `ai`)— 浮窗式智能助手
|
||||
- **Memos 笔记**(社区 `community_kuaifan_memos`)— 个人记事本
|
||||
- **KPI**(社区 `community_kuaifan_kpi`)— 绩效考核
|
||||
- **Manticore 搜索**(id `manticore`)— 全文搜索引擎
|
||||
|
||||
@ -1,50 +0,0 @@
|
||||
---
|
||||
id: minder.collaboration.concept
|
||||
title: 思维导图是否支持多人协作编辑
|
||||
type: concept
|
||||
feature: minder
|
||||
scope: end-user
|
||||
locale: zh
|
||||
aliases:
|
||||
- 思维导图协作
|
||||
- 思维导图多人编辑
|
||||
- 脑图共享编辑
|
||||
- 思维导图能不能一起改
|
||||
- minder 实时同步
|
||||
related_tools: []
|
||||
related_pages: [file]
|
||||
prerequisites:
|
||||
- 应用市场已安装 minder 插件
|
||||
negative:
|
||||
- 同一张 mind 文件同一时间不支持多人实时同步编辑,与 OnlyOffice 不同
|
||||
- 多人同时打开并保存可能导致后保存方覆盖前保存方
|
||||
- 不支持节点级别的细粒度评论或讨论
|
||||
last_verified: v1.7.90
|
||||
---
|
||||
|
||||
# 思维导图是否支持多人协作编辑
|
||||
|
||||
## 定义
|
||||
DooTask 思维导图(minder 插件)以**单人编辑 + 多人查看**模式运作。文件内容存到 DooTask 文件系统,所有有权限的成员都能打开看到当前最新版本,但同一时间多人编辑保存会出现「后写覆盖前写」。
|
||||
|
||||
## 关键属性
|
||||
- **多人可见**:所有对文件有读权限的成员都能打开预览
|
||||
- **保存机制**:编辑器内修改后由前端发起保存请求,整张图作为一个 JSON 文件覆盖式保存
|
||||
- **没有实时同步**:与 OnlyOffice([[office.collaboration.concept]])不同,思维导图不通过 WebSocket 推送其他人的实时改动
|
||||
- **冲突表现**:A、B 同时打开编辑,A 先保存,B 后保存——最终内容只剩 B 的版本,A 的改动丢失
|
||||
- **历史版本**:可借助 DooTask 文件版本历史回滚到之前的快照
|
||||
|
||||
## 推荐协作模式
|
||||
- 同一时间由一人改,其他人通过群聊/讨论沟通后再轮换编辑
|
||||
- 大型导图按子分支拆成多张文件,分人维护
|
||||
- 改完后通过文件「发送」/「链接」/「共享」分享给团队
|
||||
- 误覆盖可在文件详情 →「历史版本」中恢复
|
||||
|
||||
## 与其他场景对比
|
||||
- **drawio 流程图**:同样是单人编辑,多人同时编辑也会出现覆盖
|
||||
- **OnlyOffice Word/Excel/PPT**:自带多人实时协作,多端同时编辑会合并
|
||||
- **DooTask 在线文档(document)**:基于富文本编辑器,亦不支持多人实时
|
||||
|
||||
## 相关
|
||||
- 是什么:[[minder.concept]]
|
||||
- OnlyOffice 协作能力对比:[[office.collaboration.concept]]
|
||||
@ -1,45 +0,0 @@
|
||||
---
|
||||
id: minder.concept
|
||||
title: 思维导图(minder)是什么
|
||||
type: concept
|
||||
feature: minder
|
||||
scope: end-user
|
||||
locale: zh
|
||||
aliases:
|
||||
- 思维导图
|
||||
- 脑图
|
||||
- mind map
|
||||
- minder 是什么
|
||||
- DooTask 思维导图
|
||||
related_tools: []
|
||||
related_pages: [file]
|
||||
prerequisites:
|
||||
- 应用市场已安装 minder 插件
|
||||
negative:
|
||||
- 思维导图功能不是主程序内置,未安装 minder 插件无法新建 `mind` 类型文件
|
||||
- 不能在思维导图节点上直接附加 DooTask 任务/评论(节点只是图形元素)
|
||||
- 节点数量过多(数千节点)可能影响渲染性能
|
||||
last_verified: v1.7.90
|
||||
---
|
||||
|
||||
# 思维导图(minder)是什么
|
||||
|
||||
## 定义
|
||||
思维导图是 DooTask 文件系统中的一种文件类型(`type=mind`),用于以放射状结构表达想法、计划、知识结构。它由独立的 minder 插件提供编辑器,主程序通过 iframe 嵌入插件页面,文件内容存到 DooTask 自己的文件库里。
|
||||
|
||||
## 关键属性
|
||||
- **文件类型**:`mind`(区别于 `document` 文本、`drawio` 图表、`word/excel/ppt`)
|
||||
- **存储位置**:与其他文件一样存在 DooTask 文件系统(个人文件 / 项目文件 / 共享)
|
||||
- **编辑器**:嵌入的 KityMinder 风格编辑器,支持多种结构(默认、组织结构、文件树、右展开、鱼骨图、天盘)和多套主题
|
||||
- **操作支持**:拖拽、缩放、节点折叠/展开、键盘快捷键、导出图片
|
||||
- **历史版本**:随 DooTask 文件历史一同保存
|
||||
|
||||
## 与其他文件类型的关系
|
||||
- **vs drawio**:drawio 适合流程图/UML/网络拓扑等任意图形;思维导图专注放射状层级结构,节点编辑更轻
|
||||
- **vs 文档(document)**:文档是富文本/Markdown;思维导图是图形化结构
|
||||
|
||||
## 相关
|
||||
- 插件元信息:[[minder.plugin.concept]]
|
||||
- 创建一张思维导图:[[minder.create.howto]]
|
||||
- 入口在哪:[[minder.entry.menu-map]]
|
||||
- 是否支持协作编辑:[[minder.collaboration.concept]]
|
||||
@ -1,48 +0,0 @@
|
||||
---
|
||||
id: minder.plugin.concept
|
||||
title: minder 插件元信息
|
||||
type: concept
|
||||
feature: minder
|
||||
scope: admin
|
||||
locale: zh
|
||||
aliases:
|
||||
- minder 插件
|
||||
- 思维导图插件
|
||||
- 思维导图怎么安装
|
||||
- 安装 minder
|
||||
- minder 插件版本
|
||||
related_tools: []
|
||||
related_pages: [application]
|
||||
prerequisites: []
|
||||
negative:
|
||||
- 主程序不内置思维导图编辑器,未装插件时新建文件菜单不会显示「思维导图」
|
||||
- 插件升级不通过 git pull,需要在应用市场更新
|
||||
- 不能离线安装到不联网的环境(需访问应用市场镜像源)
|
||||
last_verified: v1.7.90
|
||||
---
|
||||
|
||||
# minder 插件元信息
|
||||
|
||||
## 定义
|
||||
思维导图能力由独立插件 `minder` 提供(应用市场 app id 为 `minder`,当前主版本 0.1.3)。主程序通过 iframe 内嵌插件提供的编辑器页面,文件内容仍保存在 DooTask 主库;卸载插件后已有 `mind` 文件无法继续编辑/预览,但文件本身不会被删除。
|
||||
|
||||
## 关键属性
|
||||
- **作者**:DooTask 官方
|
||||
- **分类**:微应用(在「应用中心」中列出,作为微应用菜单项;不在管理员应用区)
|
||||
- **包大小**:约 20MB(安装较慢,请通过应用市场的「安装日志」查看进度)
|
||||
- **运行形态**:随主程序部署的静态资源 + iframe 嵌入,无独立后端进程
|
||||
- **数据存储**:思维导图内容存到 DooTask 主程序文件表(`type=mind`),不在插件容器单独存
|
||||
- **触发场景**:用户在文件页「新建 → 思维导图」时由主程序加载插件 iframe
|
||||
|
||||
## 安装与启用
|
||||
1. 在应用市场(管理员入口)搜索「Minder」或「思维导图」
|
||||
2. 点击安装,等待资源加载(约 20MB)
|
||||
3. 安装完成后插件自动启用,文件新建菜单立即出现「思维导图」选项
|
||||
|
||||
## 卸载影响
|
||||
- 卸载后菜单消失,原有 `mind` 文件保留在文件库中但无法打开
|
||||
- 重新安装后旧文件继续可用
|
||||
|
||||
## 相关
|
||||
- 是什么:[[minder.concept]]
|
||||
- 入口在哪:[[minder.entry.menu-map]]
|
||||
@ -1,56 +0,0 @@
|
||||
---
|
||||
id: office.collaboration.concept
|
||||
title: OnlyOffice 多人协作编辑
|
||||
type: concept
|
||||
feature: office
|
||||
scope: end-user
|
||||
locale: zh
|
||||
aliases:
|
||||
- office 协作
|
||||
- Word 一起编辑
|
||||
- 多人同时编辑文档
|
||||
- 在线协作 Excel
|
||||
- 协同编辑 PPT
|
||||
- OnlyOffice 协作
|
||||
related_tools: []
|
||||
related_pages: [file]
|
||||
prerequisites:
|
||||
- 应用市场已安装 office(OnlyOffice)插件
|
||||
- 协作各方对该文件均有「编辑」权限
|
||||
negative:
|
||||
- 与 minder([[minder.collaboration.concept]])和 drawio 不同,OnlyOffice 才提供真正的多人实时编辑
|
||||
- 同一文件大规模并发(数十人)依赖 Document Server 资源,组织内建议 ≤ 10 人同时改
|
||||
- 离线编辑不支持,没有「断网继续编辑、上线合并」的模式
|
||||
last_verified: v1.7.90
|
||||
---
|
||||
|
||||
# OnlyOffice 多人协作编辑
|
||||
|
||||
## 定义
|
||||
DooTask 在线 Word/Excel/PPT(office 插件)原生支持**多人实时协作编辑**。多人同时打开同一文件时,OnlyOffice Document Server 通过 WebSocket 推送他人光标和实时改动,最终内容由 Document Server 合并后回写到 DooTask 文件库,不存在「后保存覆盖前保存」的问题。
|
||||
|
||||
## 关键属性
|
||||
- **会话识别**:主程序用 `documentKey` 标识同一份文档的协作会话,所有人加入同一 key 即进入同一编辑会话
|
||||
- **实时光标**:能看到其他人当前在哪个段落/单元格,配色按用户区分
|
||||
- **冲突处理**:编辑级别合并(不是文件级覆盖),单元格/字符级冲突由 OnlyOffice 自动协商
|
||||
- **保存触发**:所有人都离开编辑器后由 Document Server 把最终版本写回 DooTask 文件表
|
||||
- **历史版本**:随 DooTask 文件版本保留,可回溯
|
||||
|
||||
## 编辑模式
|
||||
OnlyOffice 提供两种协作模式:
|
||||
- **快速模式**:所有改动实时显示给所有人(默认)
|
||||
- **严格模式**:自己的改动暂存,需手动点「保存」才同步给他人——适合需要审稿的场景,在 OnlyOffice 编辑器内切换
|
||||
|
||||
## 权限组合
|
||||
- A、B 同为编辑权限:均可实时改
|
||||
- A 编辑、B 只读:B 仅看,无法输入
|
||||
- A 关闭、B 仍开着:B 单人继续,A 再打开时进入同一会话
|
||||
|
||||
## 与其他文件类型的对比
|
||||
- **vs DooTask 内置 document**:document 是富文本/Markdown 编辑器,**不支持**多人实时
|
||||
- **vs minder 思维导图**:思维导图是单人编辑,多人同时保存会覆盖
|
||||
- **vs drawio 流程图**:同样是单人编辑,多人同时保存会覆盖
|
||||
|
||||
## 相关
|
||||
- 是什么:[[office.concept]]
|
||||
- 插件元信息:[[office.plugin.concept]]
|
||||
@ -1,48 +0,0 @@
|
||||
---
|
||||
id: office.concept
|
||||
title: 在线文档(OnlyOffice)是什么
|
||||
type: concept
|
||||
feature: office
|
||||
scope: end-user
|
||||
locale: zh
|
||||
aliases:
|
||||
- 在线文档
|
||||
- 在线 Word
|
||||
- 在线 Excel
|
||||
- 在线 PPT
|
||||
- OnlyOffice
|
||||
- office 编辑
|
||||
- 怎么在线编辑
|
||||
related_tools: []
|
||||
related_pages: [file]
|
||||
prerequisites:
|
||||
- 应用市场已安装 office(OnlyOffice)插件
|
||||
negative:
|
||||
- 在线编辑能力不是主程序内置,未装 OnlyOffice 插件时打开 Word/Excel/PPT 只能调 fileview 预览(详见 [[fileview.concept]]),不能编辑
|
||||
- 单文档大小过大(数十 MB 起)打开很慢,建议拆分
|
||||
- 不支持把 docx 直接转成 DooTask 自带的 `document` 文件类型
|
||||
last_verified: v1.7.90
|
||||
---
|
||||
|
||||
# 在线文档(OnlyOffice)是什么
|
||||
|
||||
## 定义
|
||||
DooTask 通过 OnlyOffice 插件提供 Word/Excel/PowerPoint 文件的**在线编辑与多人实时协作**。文件存在 DooTask 文件系统(文件类型分别为 `word`/`excel`/`ppt`),编辑器以 iframe 形式嵌入 OnlyOffice Document Server 提供的页面,多人同时打开同一文件时能看到他人光标和实时改动。
|
||||
|
||||
## 关键属性
|
||||
- **文件类型**:`word`(doc/docx/dot/dotx/odt/ott/rtf)、`excel`(xls/xlsx/xlsm/xlt/xltx/ods/ots/csv/tsv)、`ppt`(ppt/pptx/pps/ppsx/pot/potx/odp/otp)
|
||||
- **存储位置**:DooTask 文件系统(个人文件 / 项目文件 / 共享)
|
||||
- **编辑能力**:直接在浏览器编辑文档,与桌面端 Office 体验接近
|
||||
- **实时协作**:多人同时打开会自动建立协作会话,详见 [[office.collaboration.concept]]
|
||||
- **历史版本**:随 DooTask 文件历史一同保存
|
||||
|
||||
## 与其他文件类型的关系
|
||||
- **vs document(Markdown/富文本)**:DooTask 自带的 `document` 文件是轻量富文本,无法编辑真正的 docx 二进制
|
||||
- **vs fileview 预览**:fileview 提供只读的多格式文件预览(包括 office 文件),不能编辑
|
||||
- **vs minder / drawio**:那些是图形文件,无法用 OnlyOffice 打开
|
||||
|
||||
## 相关
|
||||
- 插件元信息:[[office.plugin.concept]]
|
||||
- 创建在线文档:[[office.create.howto]]
|
||||
- 多人协作能力:[[office.collaboration.concept]]
|
||||
- 入口在哪:[[office.entry.menu-map]]
|
||||
@ -1,54 +0,0 @@
|
||||
---
|
||||
id: office.plugin.concept
|
||||
title: OnlyOffice 插件元信息
|
||||
type: concept
|
||||
feature: office
|
||||
scope: admin
|
||||
locale: zh
|
||||
aliases:
|
||||
- OnlyOffice 插件
|
||||
- office 插件
|
||||
- 安装 OnlyOffice
|
||||
- 安装在线文档
|
||||
- onlyoffice 版本
|
||||
related_tools: []
|
||||
related_pages: [application]
|
||||
prerequisites: []
|
||||
negative:
|
||||
- 主程序不内置 docx/xlsx/pptx 在线编辑,未装插件时双击 Word/Excel/PPT 只能调 fileview 预览
|
||||
- 插件体积约 1.3GB,下载较慢,需要稳定网络与充足磁盘
|
||||
- 不能离线安装到不联网的环境(需访问应用市场镜像源)
|
||||
last_verified: v1.7.90
|
||||
---
|
||||
|
||||
# OnlyOffice 插件元信息
|
||||
|
||||
## 定义
|
||||
在线 Word/Excel/PPT 编辑由 `office` 插件提供(应用市场 app id 为 `office`,包名 OnlyOffice,当前主版本 9.4.0)。插件包含 OnlyOffice Document Server 完整容器;主程序通过 iframe 嵌入 Document Server 的编辑器页面,借助 OnlyOffice 内置 WebSocket 实现多人实时协作。
|
||||
|
||||
## 关键属性
|
||||
- **作者**:社区维护(Community),上游 https://www.onlyoffice.com/
|
||||
- **分类**:微应用(不在管理员应用区)
|
||||
- **包大小**:约 1.3GB(含 Document Server,下载慢,按「安装日志」判断进度)
|
||||
- **运行形态**:独立 Docker 容器(OnlyOffice Document Server)
|
||||
- **数据存储**:编辑结果由 OnlyOffice 回写到 DooTask 文件表,文件本体存到主程序的文件系统,不在 Document Server 长期持久化
|
||||
- **协议**:内部通过 JWT 令牌与 OnlyOffice 通信,主程序签发 documentKey 标识文件版本
|
||||
|
||||
## 安装与启用
|
||||
1. 在应用市场(管理员入口)搜索「OnlyOffice」或「在线文档」
|
||||
2. 点击安装,等待镜像下载(约 1.3GB,请通过「安装日志」查看进度)
|
||||
3. 安装完成后插件自动启用,文件新建菜单立即出现「Word / Excel / PPT」选项
|
||||
4. 上传/打开已有 docx/xlsx/pptx 文件即可在线编辑
|
||||
|
||||
## 卸载影响
|
||||
- 卸载后文件库中的 Word/Excel/PPT 文件保留,但无法在线编辑,回退到 fileview 预览(若未装 fileview 则无法预览)
|
||||
- 重装后所有文件自动恢复在线编辑能力
|
||||
|
||||
## 已知限制
|
||||
- 部署在公网时建议为 Document Server 配置 HTTPS,否则浏览器可能拦截 WebSocket
|
||||
- 同一文件大量并发协作(数十人)需要更强的 Document Server 资源
|
||||
|
||||
## 相关
|
||||
- 是什么:[[office.concept]]
|
||||
- 多人协作机制:[[office.collaboration.concept]]
|
||||
- 入口在哪:[[office.entry.menu-map]]
|
||||
@ -1,57 +0,0 @@
|
||||
---
|
||||
id: okr.cycle.concept
|
||||
title: OKR 周期
|
||||
type: concept
|
||||
feature: okr
|
||||
scope: end-user
|
||||
locale: zh
|
||||
aliases:
|
||||
- OKR 周期
|
||||
- 季度 OKR
|
||||
- Q1 Q2 Q3 Q4
|
||||
- OKR 时间段
|
||||
- OKR 多久一轮
|
||||
- 年度 OKR
|
||||
related_tools: []
|
||||
related_pages: [application]
|
||||
prerequisites:
|
||||
- 应用市场已安装 okr 插件
|
||||
negative:
|
||||
- OKR 周期非全平台统一,由公司 / 团队按内部约定决定
|
||||
- 周期内频繁改 O 会降低聚焦度,不建议中途大改
|
||||
last_verified: v1.7.90
|
||||
---
|
||||
|
||||
# OKR 周期
|
||||
|
||||
## 定义
|
||||
OKR 周期是一组 OKR 的有效时间盒。每个周期内设定一批 O 与 KR,周期末统一评审打分,下一周期重新设定。常见的周期长度有季度(Q1/Q2/Q3/Q4)和年度,部分团队也会用半年或月度。
|
||||
|
||||
## 常见周期模式
|
||||
- **季度 OKR**:每 3 个月一轮,最主流,节奏适中
|
||||
- **年度 OKR**:通常承载战略级目标,跨度大、调整少
|
||||
- **半年 / 双月**:折中节奏,按业务变化速度选
|
||||
- **公司 / 团队 / 个人多层周期**:上层周期可以更长,下层周期更短
|
||||
|
||||
## 周期内三个阶段
|
||||
1. **设定期**:周期开始前 1-2 周写 O 和 KR,与上下级对齐
|
||||
2. **执行期**:周期内推进,按节奏更新进度(参见 [[okr.update-progress.howto]])
|
||||
3. **评审期**:周期末打分复盘(参见 [[okr.review.howto]])
|
||||
|
||||
## 在 DooTask OKR 插件中的体现
|
||||
- 创建 OKR 时需指定所属周期
|
||||
- 「我的 OKR」、「OKR 结果」按周期筛选展示
|
||||
- 历史周期数据保留,可回看复盘
|
||||
|
||||
## 周期切换注意
|
||||
- 周期未结束前不要急着开新周期 OKR
|
||||
- 评审完成后再开下一周期,避免新旧周期混淆
|
||||
- 跨周期延续的目标可在新周期重新写一遍,不要简单复制
|
||||
|
||||
## 不支持
|
||||
- 周期粒度由团队约定,OKR 插件不强制规定季度还是年度
|
||||
- 周期内频繁改 O 内容会影响聚焦,不推荐
|
||||
|
||||
## 相关
|
||||
- OKR 总览:[[okr.concept]]
|
||||
- 评审打分:[[okr.review.howto]]
|
||||
@ -1,59 +0,0 @@
|
||||
---
|
||||
id: okr.kr.concept
|
||||
title: Key Result(KR,关键结果)是什么
|
||||
type: concept
|
||||
feature: okr
|
||||
scope: end-user
|
||||
locale: zh
|
||||
aliases:
|
||||
- KR
|
||||
- Key Result
|
||||
- 关键结果
|
||||
- OKR 的 KR
|
||||
- 怎么写 KR
|
||||
- KR 怎么量化
|
||||
related_tools: []
|
||||
related_pages: [application]
|
||||
prerequisites:
|
||||
- 应用市场已安装 okr 插件
|
||||
negative:
|
||||
- KR 必须可量化(数字 / 完成度 / 状态),不能写成模糊描述
|
||||
- 单个 O 的 KR 数量建议 2-5 个,不宜过多
|
||||
last_verified: v1.7.90
|
||||
---
|
||||
|
||||
# Key Result(KR,关键结果)是什么
|
||||
|
||||
## 定义
|
||||
Key Result(缩写 KR)是 OKR 方法论中衡量 Objective 是否达成的「关键结果」。KR 必须可量化(带数字 / 完成度 / 是否完成的二值状态),周期内可以更新进度,周期末给出 0-100% 的最终得分。
|
||||
|
||||
## 关键属性
|
||||
- **可量化**:必须能用数字、百分比、完成状态来衡量
|
||||
- **结果导向**:描述达成的结果,而不是过程动作
|
||||
- **可追踪**:周期内可以定期更新当前进度
|
||||
- **挑战性**:好的 KR 让人觉得「拼一拼能到 70%」,而不是稳拿 100%
|
||||
|
||||
## 好 KR 的写法
|
||||
- 量化模板:动词 + 指标 + 当前值→目标值 + 时限
|
||||
- 例:「将新用户首日留存率从 35% 提升到 50%」
|
||||
- 例:「完成 3 场行业大会的 keynote 分享」
|
||||
- 例:「上线 v2.0 并通过验收」
|
||||
|
||||
## 反例
|
||||
- 「提升满意度」——没数字,无法判断是否达成
|
||||
- 「努力做好客户支持」——描述态度而非结果
|
||||
- 「写 50 篇日报」——是过程指标,不是结果
|
||||
|
||||
## 进度与打分
|
||||
- 周期内:把 KR 的当前实际值更新进系统,得到 0-100% 进度
|
||||
- 周期末:根据最终值给 KR 打分(参见 [[okr.review.howto]])
|
||||
- 一个 O 的总分常按 KR 加权平均得出
|
||||
|
||||
## 与 O 的关系
|
||||
- KR 是 O 的衡量手段;没有 O 的 KR 是孤立指标
|
||||
- 一个 O 的所有 KR 全部达成 ≈ O 达成;多数达成可视为部分达成
|
||||
|
||||
## 相关
|
||||
- O 的概念:[[okr.objective.concept]]
|
||||
- 更新进度:[[okr.update-progress.howto]]
|
||||
- 周期评审:[[okr.review.howto]]
|
||||
@ -1,58 +0,0 @@
|
||||
---
|
||||
id: okr.objective.concept
|
||||
title: Objective(O,目标)是什么
|
||||
type: concept
|
||||
feature: okr
|
||||
scope: end-user
|
||||
locale: zh
|
||||
aliases:
|
||||
- O 是什么
|
||||
- Objective
|
||||
- 目标
|
||||
- OKR 的 O
|
||||
- 怎么写 O
|
||||
- 目标怎么定
|
||||
related_tools: []
|
||||
related_pages: [application]
|
||||
prerequisites:
|
||||
- 应用市场已安装 okr 插件
|
||||
negative:
|
||||
- O 本身不携带数字指标,量化交给 KR
|
||||
- 一个 O 不建议拆出超过 5 个 KR,否则失焦
|
||||
last_verified: v1.7.90
|
||||
---
|
||||
|
||||
# Objective(O,目标)是什么
|
||||
|
||||
## 定义
|
||||
Objective(缩写 O)是 OKR 方法论中的「目标」,一句话回答「我们这个周期想达成什么」。O 是定性的、激励性的方向描述,本身不带具体数字,量化由 KR 承担。
|
||||
|
||||
## 关键属性
|
||||
- **定性**:用语言描述方向,不直接写百分比 / 数量
|
||||
- **聚焦**:单个用户或团队每周期通常只设 3-5 个 O
|
||||
- **激励性**:鼓励挑战性目标,能让团队达到 60-70% 就算成功
|
||||
- **可记忆**:一句话能讲清楚,不堆砌定语
|
||||
|
||||
## 好 O 的特征
|
||||
- 短:一句话讲完
|
||||
- 有方向感:表达「往哪里走」
|
||||
- 与战略对齐:能回答「为什么做这件事」
|
||||
- 时间盒匹配周期:在一个周期(季度 / 年度)内能产出结果
|
||||
|
||||
## 反例
|
||||
- 「提升用户满意度 20%」——这是 KR,不是 O(O 不带数字)
|
||||
- 「做完所有任务」——太空,没有方向
|
||||
- 「研发一个新功能」——粒度太细,更像任务
|
||||
|
||||
## 与 KR 的关系
|
||||
- 一个 O 配 2-5 个 KR(详见 [[okr.kr.concept]])
|
||||
- O 描述目的,KR 描述衡量;分别承担定性与定量
|
||||
- 没有 KR 的 O 是空话;没有 O 的 KR 是孤立指标
|
||||
|
||||
## 与团队结构的关系
|
||||
- 个人 O、团队 O、公司 O 可以分层对齐
|
||||
- 上下级对齐方式见 [[okr.align.howto]]
|
||||
|
||||
## 相关
|
||||
- 怎么创建:[[okr.create.howto]]
|
||||
- 周期:[[okr.cycle.concept]]
|
||||
@ -1,56 +0,0 @@
|
||||
---
|
||||
id: okr.concept
|
||||
title: OKR 是什么
|
||||
type: concept
|
||||
feature: okr
|
||||
scope: end-user
|
||||
locale: zh
|
||||
aliases:
|
||||
- OKR
|
||||
- OKR 是什么
|
||||
- 目标管理
|
||||
- Objectives and Key Results
|
||||
- 目标与关键结果
|
||||
- OKR 怎么用
|
||||
related_tools: []
|
||||
related_pages: [application]
|
||||
prerequisites:
|
||||
- 应用市场已安装 okr 插件
|
||||
negative:
|
||||
- OKR 不是 KPI,不直接与绩效或薪酬挂钩
|
||||
- DooTask 主程序不内置 OKR,必须装 okr 插件才能用
|
||||
last_verified: v1.7.90
|
||||
---
|
||||
|
||||
# OKR 是什么
|
||||
|
||||
## 定义
|
||||
OKR(Objectives and Key Results,目标与关键结果)是一种目标管理方法,将「想做成什么」(Objective,O)和「怎么衡量做成了」(Key Result,KR)分开。一个 O 拆成 2-5 个可量化的 KR,周期内逐项更新进度,周期末统一打分复盘。
|
||||
|
||||
## 在 DooTask 中的形态
|
||||
OKR 在 DooTask 中以独立插件形式提供(appstore 应用 id:`okr`),不是主程序内置功能。插件提供:
|
||||
|
||||
- 目标设定与分解(O + KR)
|
||||
- 关键成果跟踪(KR 进度)
|
||||
- 进度实时更新
|
||||
- 团队协作与反馈
|
||||
- 数据可视化展示(管理员可看 OKR 结果分析)
|
||||
|
||||
## 关键概念
|
||||
- **O(Objective)**:定性的目标,回答「想达成什么」,详见 [[okr.objective.concept]]
|
||||
- **KR(Key Result)**:可量化的关键结果,回答「如何衡量达成」,详见 [[okr.kr.concept]]
|
||||
- **周期(Cycle)**:OKR 通常按季度或年度运行,详见 [[okr.cycle.concept]]
|
||||
- **对齐(Alignment)**:个人 / 团队 OKR 关联到上级 OKR,详见 [[okr.align.howto]]
|
||||
|
||||
## OKR 与 KPI 的区别
|
||||
- **KPI**:直接考核指标,与绩效 / 薪酬绑定,偏重「不能丢分」
|
||||
- **OKR**:目标管理工具,鼓励挑战性目标(70% 完成度即合格),与考核解耦
|
||||
|
||||
## 适用场景
|
||||
- 团队希望聚焦少数关键目标
|
||||
- 跨部门需要对齐战略方向
|
||||
- 季度 / 年度滚动复盘
|
||||
|
||||
## 相关
|
||||
- 入口在哪:[[okr.entry.menu-map]]
|
||||
- 怎么创建:[[okr.create.howto]]
|
||||
@ -1,52 +0,0 @@
|
||||
---
|
||||
id: okr.plugin.concept
|
||||
title: OKR 插件元信息
|
||||
type: concept
|
||||
feature: okr
|
||||
scope: end-user
|
||||
locale: zh
|
||||
aliases:
|
||||
- OKR 插件
|
||||
- OKR 是不是要装
|
||||
- okr 应用
|
||||
- OKR 装多大
|
||||
- OKR 怎么安装
|
||||
related_tools: []
|
||||
related_pages: [application]
|
||||
prerequisites: []
|
||||
negative:
|
||||
- OKR 不是主程序内置功能,未装插件时不可用
|
||||
- 插件升级不通过 git pull,需要在应用市场更新
|
||||
last_verified: v1.7.90
|
||||
---
|
||||
|
||||
# OKR 插件元信息
|
||||
|
||||
## 定义
|
||||
OKR 在 DooTask 中由独立插件 `okr` 提供(应用市场 app id 为 `okr`,当前主版本 0.5.8)。主程序不内置 OKR 任何代码,所有目标管理逻辑都跑在独立容器里,通过 nginx 反向代理 `/apps/okr/` 路径挂载到 DooTask 界面。
|
||||
|
||||
## 关键属性
|
||||
- **作者**:DooTask 官方
|
||||
- **包大小**:约 15MB(安装较慢,请通过安装日志查看进度)
|
||||
- **运行形态**:独立 Docker 容器(镜像 `kuaifan/doookr`),通过环境变量复用主程序的数据库
|
||||
- **菜单注入**:安装后自动在「应用中心」注册两个入口(OKR 管理 + OKR 结果)
|
||||
- **数据存储**:与主程序共享同一个 MySQL/MariaDB 实例(独立表前缀由插件管理)
|
||||
- **要求**:主程序版本 > 1.1.66
|
||||
|
||||
## 安装与启用
|
||||
1. 应用市场搜索「OKR」或「目标管理」
|
||||
2. 点击安装,等待镜像拉取与容器启动
|
||||
3. 安装完成后插件自动启用,菜单立即出现,无需重启主程序
|
||||
4. 默认配置适配大多数场景,可在插件设置中按需调整
|
||||
|
||||
## 升级与卸载
|
||||
- 升级:应用市场看到新版本时点击「更新」
|
||||
- 卸载:应用市场对应插件 →「卸载」;卸载后菜单消失,业务数据保留在数据库中
|
||||
|
||||
## 不支持
|
||||
- 不能离线安装到不联网的环境(需访问应用市场镜像源)
|
||||
- 不能选择安装到非 Docker 部署的 DooTask(插件依赖容器化)
|
||||
|
||||
## 相关
|
||||
- 看不到 / 装不上:[[okr.cannot-install.faq]]
|
||||
- 入口在哪:[[okr.entry.menu-map]]
|
||||
@ -1,62 +0,0 @@
|
||||
---
|
||||
id: okr.team.concept
|
||||
title: 团队 OKR 与个人 OKR
|
||||
type: concept
|
||||
feature: okr
|
||||
scope: end-user
|
||||
locale: zh
|
||||
aliases:
|
||||
- 团队 OKR
|
||||
- 个人 OKR
|
||||
- 部门 OKR
|
||||
- 公司 OKR
|
||||
- OKR 层级
|
||||
- OKR 分层
|
||||
related_tools: []
|
||||
related_pages: [application]
|
||||
prerequisites:
|
||||
- 应用市场已安装 okr 插件
|
||||
negative:
|
||||
- 团队 OKR 不是个人 OKR 的简单加和
|
||||
- 个人 OKR 不必把团队 KR 完全分担,可基于职责选择关联
|
||||
last_verified: v1.7.90
|
||||
---
|
||||
|
||||
# 团队 OKR 与个人 OKR
|
||||
|
||||
## 定义
|
||||
OKR 按主体层级可分为公司 OKR、团队(部门)OKR、个人 OKR。各层级各有 O 和 KR,通过「对齐」建立因果关联,形成自上而下的目标树。
|
||||
|
||||
## 三个层级的差异
|
||||
- **公司 OKR**:跨部门的战略级方向,周期通常更长(年度),数量少(3-5 个 O)
|
||||
- **团队 OKR**:部门 / 小组负责的目标,承接公司 O,周期常用季度
|
||||
- **个人 OKR**:成员自己的工作目标,承接所在团队 OKR,颗粒度最细
|
||||
|
||||
## 谁负责
|
||||
- **公司 OKR**:CEO / 高管层
|
||||
- **团队 OKR**:团队 leader 牵头,团队共同认领
|
||||
- **个人 OKR**:成员本人;直属上级辅助审阅
|
||||
|
||||
## 对齐路径
|
||||
- 个人 OKR → 团队 OKR → 公司 OKR,形成可追溯链路
|
||||
- 同一团队的多个个人 OKR 可分别承接团队不同 KR
|
||||
- 详细操作见 [[okr.align.howto]]
|
||||
|
||||
## 团队 OKR 的特征
|
||||
- 团队 KR 数量通常 3-5 个
|
||||
- 团队 KR 由若干成员合力完成,但应明确「主负责人」
|
||||
- 团队 KR 进度通常由 leader 汇总更新
|
||||
|
||||
## 个人 OKR 的特征
|
||||
- 个人 O 不必覆盖所有日常工作,只挑这个周期最重要的方向
|
||||
- 个人 KR 与所在岗位职责高度相关
|
||||
- 数量通常 2-4 个 O
|
||||
|
||||
## 不支持
|
||||
- 团队 OKR 不会自动汇总所有个人 OKR 的进度
|
||||
- 一个个人不属于两个团队时,需自行决定主对齐方向
|
||||
|
||||
## 相关
|
||||
- 对齐:[[okr.align.howto]]
|
||||
- OKR 概念:[[okr.concept]]
|
||||
- 周期:[[okr.cycle.concept]]
|
||||
@ -1,55 +0,0 @@
|
||||
---
|
||||
id: search.engine.concept
|
||||
title: 搜索引擎(Manticore 与 MySQL 回退)
|
||||
type: concept
|
||||
feature: search
|
||||
scope: admin
|
||||
locale: zh
|
||||
aliases:
|
||||
- 搜索引擎
|
||||
- Manticore
|
||||
- 搜索插件
|
||||
- 搜索很慢
|
||||
- 为什么搜不到文件内容
|
||||
- 语义搜索
|
||||
related_tools: []
|
||||
related_pages: []
|
||||
prerequisites: []
|
||||
negative:
|
||||
- 未安装 search 插件时无法搜索文件正文,只能按文件名模糊匹配
|
||||
- 未安装 search 插件时不支持语义 / 向量 / 混合搜索,只能精确关键词
|
||||
- 向量搜索还需要 ai 插件提供 Embedding,仅装 search 没装 ai 也走不了语义
|
||||
last_verified: v1.7.90
|
||||
---
|
||||
|
||||
# 搜索引擎(Manticore 与 MySQL 回退)
|
||||
|
||||
## 定义
|
||||
DooTask 全局搜索底层有两套实现,按 `Apps::isInstalled('search')` 自动切换:装了应用市场的 search 插件就走 Manticore,没装就退回 MySQL `LIKE` 模糊查询。
|
||||
|
||||
## Manticore 搜索引擎
|
||||
Manticore Search 是独立的开源搜索引擎,作为可选插件部署在 DooTask 的 appstore 里。能力包括:
|
||||
- **全文搜索**(text):倒排索引 + ICU 中文分词
|
||||
- **向量搜索**(vector):1536 维 KNN(HNSW 算法),需配合 AI 插件生成 Embedding
|
||||
- **混合搜索**(hybrid,默认):同时打全文和向量分,取加权综合排名
|
||||
- **文件正文搜索**:可搜 Word / Excel / PPT / PDF / TXT / 代码文件等内部文本
|
||||
|
||||
接口参数 `search_type` 取值 `text` / `vector` / `hybrid`,默认 `hybrid`,**只在装了 Manticore 时生效**。
|
||||
|
||||
## MySQL 回退
|
||||
未装 search 插件时调 `searchByKeyword`,用 MySQL `LIKE %keyword%` 匹配。能力受限:
|
||||
- 只匹配字面关键词,不理解同义词或语义
|
||||
- 不能搜文件正文(PDF / Office 内部文本搜不到)
|
||||
- 大数据量下性能不如 Manticore
|
||||
- 不支持 relevance 排序,按时间倒序
|
||||
|
||||
## 部署形态
|
||||
插件镜像独立维护(appstore 应用:search),技术规格:
|
||||
- 向量维度:1536,兼容 OpenAI text-embedding-3-small
|
||||
- 中文分词:ICU Chinese
|
||||
- 推荐至少 2GB 可用内存
|
||||
|
||||
## 何时升级到 Manticore
|
||||
- 需要搜索文件内容(不仅是文件名)
|
||||
- 用自然语言查文件(如「财务分析文档」→「Q3 收入报表」)
|
||||
- 团队消息 / 任务量大,MySQL `LIKE` 已经慢
|
||||
@ -1,59 +0,0 @@
|
||||
---
|
||||
id: search.intelligent.concept
|
||||
title: 智能搜索(AI 语义搜索)
|
||||
type: concept
|
||||
feature: search
|
||||
scope: end-user
|
||||
locale: zh
|
||||
aliases:
|
||||
- 智能搜索
|
||||
- AI 搜索
|
||||
- 语义搜索
|
||||
- 自然语言搜索
|
||||
- intelligent_search
|
||||
- 向量搜索
|
||||
related_tools: [intelligent_search]
|
||||
related_pages: []
|
||||
prerequisites:
|
||||
- 应用商店(应用市场)已安装 search 插件(Manticore Search)
|
||||
- 应用商店已安装 ai 插件(语义 / 向量搜索需用其生成 Embedding)
|
||||
negative:
|
||||
- 未安装 search 插件(Manticore)时回退普通 MySQL 关键词搜索,无语义能力
|
||||
- 仅装 search 没装 ai 时,向量 / 语义 / 混合搜索无法生效,只能跑全文 text
|
||||
- 索引建立有延迟,刚上传 / 新建的内容可能短时间内搜不到
|
||||
- 智能搜索按权限过滤,搜不到的对象通常是无权访问
|
||||
last_verified: v1.7.90
|
||||
---
|
||||
|
||||
# 智能搜索(AI 语义搜索)
|
||||
|
||||
## 定义
|
||||
智能搜索是 DooTask 基于 **Manticore Search 插件**(search 插件)的统一检索能力,支持关键词(text)/ 语义向量(vector)/ 混合(hybrid)三种搜索类型,一次可跨任务 / 项目 / 文件内容 / 联系人 / 消息 5 类对象;AI 助手通过 MCP 工具 `intelligent_search` 调用同一套底座。
|
||||
|
||||
## 底层原理
|
||||
- 走 SearchController 统一接口,优先使用 Manticore Search(需安装 search 插件)
|
||||
- **未安装 search 插件时回退到普通 MySQL 关键词搜索**,仍可按字面匹配搜索,但没有语义 / 向量能力
|
||||
- 默认 `search_type = hybrid`(混合搜索):同时打全文倒排分和 KNN 向量分
|
||||
- 向量分由 ai 插件提供 Embedding(1536 维,兼容 OpenAI text-embedding-3-small)
|
||||
- 中文用 ICU 分词,能处理常见同义词与近义表达
|
||||
|
||||
## 与关键词搜索的区别
|
||||
- **关键词搜索**:只命中字面匹配,「Q3 收入报表」搜「财务分析」会落空
|
||||
- **智能搜索**:理解意图,「财务分析」能命中「Q3 收入报表」「年度成本表」等语义相关文件
|
||||
- 智能搜索仍保留关键词命中能力,相关度由混合算法加权
|
||||
|
||||
## 关键属性
|
||||
- **入口**:装齐 search + ai 后,全局搜索框会出现「AI 搜索」按钮,把搜索词转给 AI 助手;AI 助手自动调用 `intelligent_search` 工具
|
||||
- **结果排序**:按 `relevance` 综合分降序
|
||||
- **权限范围**:与基础 search 接口完全一致,只返回当前用户能看到的对象
|
||||
- **延迟**:依赖 Manticore 索引;新增内容入库到可搜的间隔通常为秒级
|
||||
|
||||
## 与全局搜索的关系
|
||||
- 全局搜索 = 用户在搜索框内主动输入关键词的检索能力,详见 [[search.concept]]
|
||||
- 智能搜索 = AI 助手在对话中代用户调用的同一套底座,搜索类型默认 `hybrid`
|
||||
|
||||
## 不支持
|
||||
- 没装 search 插件(Manticore)时回退 MySQL 关键词搜索,关键词 / 语义 / 混合类型参数失效
|
||||
- 装了 search 但没装 ai 插件时降级到全文,语义能力失效
|
||||
- 不能跨用户搜别人的私聊 / 私有文件
|
||||
- 单次每类对象不会返回超过 50 条(最多 50 条)
|
||||
@ -1,48 +0,0 @@
|
||||
---
|
||||
id: search.concept
|
||||
title: 全局搜索是什么
|
||||
type: concept
|
||||
feature: search
|
||||
scope: end-user
|
||||
locale: zh
|
||||
aliases:
|
||||
- 全局搜索
|
||||
- 搜索是什么
|
||||
- 总搜索
|
||||
- 怎么搜东西
|
||||
- 在哪里搜
|
||||
related_tools: []
|
||||
related_pages: []
|
||||
prerequisites: []
|
||||
negative:
|
||||
- 全局搜索不会跨用户:只能搜到当前账号有权限看到的内容
|
||||
- 关键词为空时不会触发搜索,必须输入至少 1 个字符
|
||||
- 单次搜索每类对象最多返回 50 条(默认 20 条)
|
||||
last_verified: v1.7.90
|
||||
---
|
||||
|
||||
# 全局搜索是什么
|
||||
|
||||
## 定义
|
||||
全局搜索是 DooTask 内的统一检索入口,能够一次性跨 5 类对象查找内容:联系人、项目、任务、文件、消息。对应后端 `api/search/*` 5 个接口,统一在 SearchController 实现。
|
||||
|
||||
## 5 类搜索对象
|
||||
- **联系人**(contact):按昵称 / 邮箱 / 个人简介 / 技能标签匹配用户
|
||||
- **项目**(project):按项目名 / 项目描述匹配当前用户可访问的项目
|
||||
- **任务**(task):按任务名 / 描述 / 子内容匹配用户所在项目内的任务
|
||||
- **文件**(file):按文件名匹配,安装 search 插件后还能搜文件正文
|
||||
- **消息**(message):按消息文本匹配用户能看到的会话消息
|
||||
|
||||
## 权限模型
|
||||
所有搜索都先做用户身份验证(`User::auth()`),结果只返回当前用户**已经有权限访问**的对象。搜不到不一定是关键词错,也可能是没有权限。
|
||||
|
||||
## 双引擎设计
|
||||
全局搜索有两套底层实现,按是否安装 search 插件自动切换:
|
||||
- 装了 Manticore 搜索插件:走 Manticore,支持全文 / 向量 / 混合搜索
|
||||
- 未装:自动降级到 MySQL `LIKE` 模糊匹配
|
||||
|
||||
详见 [[search.engine.concept]]。
|
||||
|
||||
## 入口
|
||||
- 桌面端:快捷键 `Ctrl/Cmd + F` 或 `Ctrl/Cmd + /`,详见 [[search.entry.menu-map]]
|
||||
- 移动端:在仪表盘等页面通过搜索按钮触发
|
||||
@ -1,68 +0,0 @@
|
||||
---
|
||||
id: ai-assistant.disabled.faq
|
||||
title: 我看不到 AI 助手入口
|
||||
type: faq
|
||||
feature: ai-assistant
|
||||
scope: end-user
|
||||
locale: zh
|
||||
aliases:
|
||||
- 找不到 AI
|
||||
- AI 浮按钮没有
|
||||
- 没有 AI 助手
|
||||
- 我的 DooTask 没 AI
|
||||
- AI 入口消失
|
||||
- 别人有 AI 我没有
|
||||
related_tools: []
|
||||
related_pages: []
|
||||
prerequisites: []
|
||||
negative:
|
||||
- 普通用户无法自助开通 AI,必须由系统管理员开
|
||||
- 浮按钮 / 快捷键 / 全局「+」菜单都依赖同一个 ai 插件标识
|
||||
- 不同部署的 DooTask 是否带 AI 取决于管理员决定
|
||||
last_verified: v1.7.90
|
||||
---
|
||||
|
||||
# 我看不到 AI 助手入口
|
||||
|
||||
## 问题
|
||||
- 屏幕右下角没有 AI 浮按钮
|
||||
- 按 Cmd+I / Ctrl+I 没反应
|
||||
- 右上角全局「+」菜单里没有「AI 助手」项
|
||||
- 同事的 DooTask 有 AI,自己的没有
|
||||
|
||||
## 常见原因
|
||||
|
||||
### 1. AI 插件未安装(最常见)
|
||||
- AI 助手是**微应用 / 系统插件**,需在「应用市场」安装 `ai` 插件
|
||||
- 前端通过 `microAppsIds.includes('ai')` 决定是否显示入口;没装则所有 AI 入口都不渲染
|
||||
|
||||
### 2. 管理员关闭了 AI 模型
|
||||
- 即使 ai 插件已装,系统设置 →「AI 模型」未启用任何服务商
|
||||
- 浮按钮可能仍显示,但模型下拉为空、无法发送,详见 [[ai-assistant.model-empty.faq]]
|
||||
|
||||
### 3. License 限制
|
||||
- 部分 DooTask 部署的 License 不含 AI 模块
|
||||
- ai 插件不出现在应用市场可装列表
|
||||
|
||||
### 4. 老缓存
|
||||
- 前端 `microAppsIds` 陈旧;刚装好但旧 tab 没刷新
|
||||
- 解决:强制刷新(Ctrl+F5)
|
||||
|
||||
### 5. 路由是登录页
|
||||
- 浮按钮明确排除登录页(`routeName !== 'login'`)
|
||||
- 登录后再看
|
||||
|
||||
## 解决
|
||||
1. **联系系统管理员**:到「应用市场」安装并启用 `ai` 插件
|
||||
2. **管理员配 AI 模型**:在系统设置 →「AI 模型」开启至少一个服务商
|
||||
3. **强制刷新**:Ctrl+F5 / Cmd+Shift+R 重新拉 `microAppsIds`
|
||||
4. **重启容器(管理员)**:刚装完插件可能需重启 ai 容器
|
||||
|
||||
## 如何区分原因
|
||||
- 入口**完全不显示**(连浮按钮都没)→ ai 插件未装
|
||||
- 入口能看到但下拉空 → 模型未配,详见 [[ai-assistant.model-empty.faq]]
|
||||
|
||||
## 相关
|
||||
- [[ai-assistant.entry.howto]]
|
||||
- [[ai-assistant.model-empty.faq]]
|
||||
- [[ai-assistant.auth.concept]]
|
||||
@ -1,57 +0,0 @@
|
||||
---
|
||||
id: ai-assistant.mcp-down.faq
|
||||
title: AI 的 MCP 工具不可用
|
||||
type: faq
|
||||
feature: ai-assistant
|
||||
scope: end-user
|
||||
locale: zh
|
||||
aliases:
|
||||
- mcp 挂了
|
||||
- mcp_server 不可用
|
||||
- AI 全部工具不能用
|
||||
- AI 都不能操作
|
||||
- MCP 连接失败
|
||||
- AI 助手只能聊天不能动手
|
||||
related_tools: []
|
||||
related_pages: []
|
||||
prerequisites: []
|
||||
negative:
|
||||
- 普通用户不能自助重启插件,需管理员
|
||||
- mcp_server 容器异常时所有 33 个 MCP 工具都不可用(包含页面操作)
|
||||
- 不影响纯文本对话和知识库检索(search_help_docs 是 AI 容器内置)
|
||||
last_verified: v1.7.90
|
||||
---
|
||||
|
||||
# AI 的 MCP 工具不可用
|
||||
|
||||
## 问题
|
||||
AI 浮窗能聊天但任何"做事"指令都失败:
|
||||
- 浮窗顶部不显示工具图标
|
||||
- 让 AI 建任务 / 发消息 / 跳页面都没反应
|
||||
- 工具气泡显示「连接失败」「mcp_server unavailable」
|
||||
|
||||
## 原因
|
||||
- **mcp_server 插件未安装**:应用市场没装这个系统插件
|
||||
- **mcp_server 容器挂了**:宿主资源不足 / 配置错误导致容器退出
|
||||
- **WebSocket 不通**:反向代理 / 防火墙拦截了 `wss://.../apps/mcp_server/mcp/operation` 路径
|
||||
- **AI 模型配置缺工具能力**:管理员配模型时关了 tool 调用集成
|
||||
|
||||
## 解决(普通用户)
|
||||
1. 先确认是不是只你一个人的问题:和同事对比
|
||||
2. 报给系统管理员,告知"mcp_server 不可用"
|
||||
3. 等待恢复期间可改用:
|
||||
- 手动用前端操作功能
|
||||
- 用 AI 做纯文本辅助(写文案 / 总结 / 翻译)
|
||||
- 知识库检索(`search_help_docs` 不依赖 mcp_server,仍可用)
|
||||
|
||||
## 解决(管理员)
|
||||
1. 应用市场 → 找到 `mcp_server` → 看运行状态
|
||||
2. 没安装 → 安装
|
||||
3. 已安装但状态异常 → 重启该插件
|
||||
4. 长期失败 → 看插件日志(容器 docker logs)排查
|
||||
5. 反向代理:确保 wss 路径未被拦
|
||||
|
||||
## 相关
|
||||
- 工具失败:[[ai-assistant.tool-failed.faq]]
|
||||
- 没调工具:[[ai-assistant.no-tool-call.faq]]
|
||||
- 工具机制:[[ai-assistant.tools.concept]]
|
||||
@ -1,55 +0,0 @@
|
||||
---
|
||||
id: ai-assistant.model-empty.faq
|
||||
title: AI 助手模型下拉是空的
|
||||
type: faq
|
||||
feature: ai-assistant
|
||||
scope: end-user
|
||||
locale: zh
|
||||
aliases:
|
||||
- AI 选不了模型
|
||||
- 模型下拉为空
|
||||
- 暂无可用模型
|
||||
- 没有可选 AI
|
||||
- AI 不能发送
|
||||
related_tools: []
|
||||
related_pages: []
|
||||
prerequisites: []
|
||||
negative:
|
||||
- 普通用户无法自助开通 / 配置模型,必须由系统管理员处理
|
||||
- 下拉空多数是后端配置层面的事,不是网络问题
|
||||
- DooTask 不自带任何免费内置模型
|
||||
last_verified: v1.7.90
|
||||
---
|
||||
|
||||
# AI 助手模型下拉是空的
|
||||
|
||||
## 问题
|
||||
打开 AI 助手浮窗后,**底部「选择模型」下拉框**为空,显示「暂无可用模型」或灰色禁用,按发送也无反应。
|
||||
|
||||
## 常见原因
|
||||
|
||||
1. **管理员没启用任何模型**
|
||||
- 系统设置 → 「AI 模型」中所有服务商开关都关着,或未填 API Key
|
||||
2. **AI 插件未安装**
|
||||
- 应用市场没装 ai 插件;如果连入口都没有则属于 [[ai-assistant.disabled.faq]]
|
||||
3. **API Key 失效**
|
||||
- 管理员填了 Key 但已过期 / 余额耗尽,后端返回模型列表为空
|
||||
4. **接口请求失败**
|
||||
- `GET api/assistant/models` 出错(鉴权失败、网络抖动),前端弹「获取模型列表失败」并自动关浮窗
|
||||
5. **管理员开了模型但没设默认**
|
||||
- 极少数情况:模型列表为空数组
|
||||
|
||||
## 解决
|
||||
|
||||
1. **联系系统管理员**:到「系统设置 → AI 模型」开启至少一个服务商并填可用 API Key
|
||||
2. **检查 ai 插件**:管理员到「应用市场」确认 ai 插件已装且未禁用
|
||||
3. **刷新页面**:关闭 AI 助手浮窗后重新打开,触发新一次 `api/assistant/models`
|
||||
4. **看后台 ai-bot 日志**:管理员排查 dootask-ai 容器日志,确认上游 API 可达
|
||||
|
||||
## 与其他「AI 看不到」的区别
|
||||
- 下拉**空** = 管理员配置层面问题
|
||||
- AI 入口**完全看不到**(浮按钮 / 快捷键无效)= ai 插件未装,详见 [[ai-assistant.disabled.faq]]
|
||||
|
||||
## 相关
|
||||
- [[ai-assistant.model.concept]]
|
||||
- [[ai-assistant.disabled.faq]]
|
||||
@ -1,51 +0,0 @@
|
||||
---
|
||||
id: ai-assistant.no-tool-call.faq
|
||||
title: AI 应该调工具但没调
|
||||
type: faq
|
||||
feature: ai-assistant
|
||||
scope: end-user
|
||||
locale: zh
|
||||
aliases:
|
||||
- AI 不调工具
|
||||
- AI 只说不做
|
||||
- AI 没操作
|
||||
- AI 没建任务
|
||||
- AI 干说
|
||||
- 让 AI 做事它只回答
|
||||
related_tools: []
|
||||
related_pages: []
|
||||
prerequisites: []
|
||||
negative:
|
||||
- 选了纯文本模型时无论怎么提问都不会调工具
|
||||
- 即使支持 tool call 的模型也可能误判为"无需工具",需重提问引导
|
||||
- AI 不会暴露完整工具清单,让你逐个点选
|
||||
last_verified: v1.7.90
|
||||
---
|
||||
|
||||
# AI 应该调工具但没调
|
||||
|
||||
## 问题
|
||||
明明让 AI 帮忙建任务 / 发消息 / 跳页面,但 AI 只口头回答"好的,我会…"或"建议你…",并没有调用工具实际操作。
|
||||
|
||||
## 常见原因
|
||||
- **模型不支持 function calling**:选了纯文本模型
|
||||
- **mcp_server 插件未安装/挂掉**:工具列表为空
|
||||
- **意图不明确**:模型判断为闲聊,没决策需要工具
|
||||
- **管理员关闭了工具集成**
|
||||
- **上下文超长**:会话累积过多,模型"忘了"工具能力
|
||||
|
||||
## 解决
|
||||
1. **换模型**:浮窗顶部切到「支持工具」的模型
|
||||
2. **明确指令**:换成动词命令"建任务"、"发消息"、"打开"
|
||||
3. **加资源 ID**:给具体的项目名 / 任务 ID
|
||||
4. **新开会话**:超长会话可能异常,重开试
|
||||
5. **检查 mcp_server**:让管理员看插件运行状态
|
||||
|
||||
## 例子
|
||||
- 不好:"小王任务这事跟一下" → AI 回复"建议您…"
|
||||
- 好:"给小王在项目 X 新建任务:周五前回归测试" → AI 调 `create_task`
|
||||
|
||||
## 相关
|
||||
- 工具机制:[[ai-assistant.tools.concept]]
|
||||
- 工具列表:[[ai-assistant.tools-list.concept]]
|
||||
- MCP 不可用:[[ai-assistant.mcp-down.faq]]
|
||||
@ -1,49 +0,0 @@
|
||||
---
|
||||
id: ai-assistant.tool-failed.faq
|
||||
title: AI 工具调用失败怎么办
|
||||
type: faq
|
||||
feature: ai-assistant
|
||||
scope: end-user
|
||||
locale: zh
|
||||
aliases:
|
||||
- AI 调工具报错
|
||||
- tool_call failed
|
||||
- AI 操作失败
|
||||
- AI 工具不响应
|
||||
- AI 卡在执行中
|
||||
- AI 调用超时
|
||||
related_tools: []
|
||||
related_pages: []
|
||||
prerequisites: []
|
||||
negative:
|
||||
- 工具失败不会自动二次重试,需用户重新触发
|
||||
- 失败不会回滚已成功的工具(如已建任务再发消息失败,任务保留)
|
||||
- 隐藏错误细节属正常,敏感字段不会暴露给用户
|
||||
last_verified: v1.7.90
|
||||
---
|
||||
|
||||
# AI 工具调用失败怎么办
|
||||
|
||||
## 问题
|
||||
浮窗里 AI 调工具的气泡显示「失败」「执行超时」「无权限」「找不到资源」等,回复也提示"没能完成"。
|
||||
|
||||
## 常见原因
|
||||
- **后端短时不可用**:`mcp_server` 容器重启 / 网络抖动
|
||||
- **权限不足**:操作了你没权限访问的资源(如别人的任务、非成员的项目)
|
||||
- **参数错误**:AI 推断的 ID 不存在(如任务已被删)
|
||||
- **超时**:单次工具调用默认 30 秒超时,长操作(大列表/复杂搜索)会断
|
||||
- **页面不在线**:页面操作(打开任务/跳页面/操作元素)需要前端 socket 在线,关浏览器后立刻让 AI 操作会失败
|
||||
- **模型不支持 tool call**:选了纯文本模型,根本不会调
|
||||
|
||||
## 解决
|
||||
1. **重试**:浮窗里点工具气泡上的「重试」按钮,或回复"再试一次"
|
||||
2. **换措辞**:原句太模糊就给更具体的 ID / 关键词
|
||||
3. **检查权限**:项目级问负责人加成员;任务级问任务负责人加可见用户
|
||||
4. **换模型**:选标注「支持工具」的模型,浮窗顶部切换
|
||||
5. **刷新页面**:页面动作失败时刷新一次后再让 AI 重试
|
||||
6. **联系管理员**:连续失败请通知管理员看 `mcp_server` 插件日志
|
||||
|
||||
## 相关
|
||||
- 工具机制:[[ai-assistant.tools.concept]]
|
||||
- 权限不足:[[ai-assistant.tool-permission.faq]]
|
||||
- MCP 不可用:[[ai-assistant.mcp-down.faq]]
|
||||
@ -1,54 +0,0 @@
|
||||
---
|
||||
id: ai-assistant.tool-permission.faq
|
||||
title: AI 提示没权限操作怎么办
|
||||
type: faq
|
||||
feature: ai-assistant
|
||||
scope: end-user
|
||||
locale: zh
|
||||
aliases:
|
||||
- AI 没权限
|
||||
- AI 提示权限不足
|
||||
- AI 不能改这个
|
||||
- AI 操作被拒
|
||||
- AI 看不到这个任务
|
||||
- AI 不能访问
|
||||
related_tools: []
|
||||
related_pages: []
|
||||
prerequisites: []
|
||||
negative:
|
||||
- AI 不能绕过 DooTask 权限体系,调工具同样走后端鉴权
|
||||
- 没有「AI 超级模式」开关,AI 的权限始终等同当前登录用户
|
||||
- 普通用户无法自助提权,必须由管理员或负责人调整
|
||||
last_verified: v1.7.90
|
||||
---
|
||||
|
||||
# AI 提示没权限操作怎么办
|
||||
|
||||
## 问题
|
||||
AI 工具调用气泡显示「无权限」「您不在可见用户列表」「不是项目成员」等错误,AI 回复说"无法帮您完成"。
|
||||
|
||||
## 原因
|
||||
AI 以你当前登录身份调用所有工具,后端的所有权限校验都生效:
|
||||
|
||||
- **项目级**:非项目成员看不到/不能改项目内任务
|
||||
- **任务级**:任务设了可见用户白名单,名单外用户即使是项目成员也看不到
|
||||
- **角色级**:改项目设置 / 删列 / 改成员需要项目负责人或管理员
|
||||
- **系统级**:装插件 / 改系统设置 / 看导出 / 管理用户需要系统管理员(userIsAdmin)
|
||||
- **超级管理员**:超管专属功能仅 id=1 的用户可用
|
||||
|
||||
## 解决
|
||||
1. 确认操作类型对应哪一级权限
|
||||
2. 联系对应角色补加权限:
|
||||
- 项目级 → 联系项目负责人加你为成员或改角色
|
||||
- 任务级 → 联系任务负责人把你加入可见用户
|
||||
- 系统级 → 联系系统管理员
|
||||
3. 部分功能依赖插件已安装(如审批要 approve 插件)
|
||||
4. 让 AI 换种方式(如不能 update_task 可改成 send_message 通知负责人改)
|
||||
|
||||
## 怎么看自己的权限
|
||||
- 头像 → 「个人设置」可看部门 / 角色
|
||||
- 系统管理员 / 部门负责人身份会显示在右上角下拉菜单顶部
|
||||
|
||||
## 相关
|
||||
- 通用权限不足:[[role-permission.permission-denied.faq]]
|
||||
- 工具调用失败:[[ai-assistant.tool-failed.faq]]
|
||||
@ -1,41 +0,0 @@
|
||||
---
|
||||
id: checkin.face-fail.faq
|
||||
title: 人脸识别失败怎么办
|
||||
type: faq
|
||||
feature: checkin
|
||||
scope: end-user
|
||||
locale: zh
|
||||
aliases:
|
||||
- 人脸识别失败
|
||||
- 刷脸不成功
|
||||
- 人脸录入失败
|
||||
- 上传人脸报错
|
||||
- 识别不到我的脸
|
||||
related_tools: []
|
||||
related_pages: []
|
||||
prerequisites: []
|
||||
last_verified: v1.7.90
|
||||
---
|
||||
|
||||
# 人脸识别失败怎么办
|
||||
|
||||
## 问题
|
||||
上传人脸图片或现场扫脸时报错,比如「设置失败」「上传出错」「未识别到人脸」「该应用未安装」等。
|
||||
|
||||
## 原因
|
||||
- **face 插件没装**:主程序调 face 容器 `http://face:7788/user` 调不通,会先抛 `请先安装 face` 异常
|
||||
- **face 容器没起来**:容器异常或镜像没拉成功(约 15MB+,首次安装慢)
|
||||
- **签到方式没开人脸**:管理员未在「签到设置 → 签到方式」勾选「人脸签到」
|
||||
- **未开放上传**:管理员未在「签到设置 → 允许修改」开启「允许成员上传人脸图片」,提交会返回「未开放修改权限」
|
||||
- **图片质量差**:模糊 / 侧脸 / 多人 / 太暗 → 后端识别引擎拒绝入库
|
||||
- **现场设备问题**:人脸识别一体机离线、网络断、未对接到 face 容器
|
||||
|
||||
## 解决
|
||||
1. 联系管理员确认 face 插件已在应用市场安装
|
||||
2. 让管理员去「签到设置」开启「人脸签到」+「允许成员上传人脸图片」
|
||||
3. 重新上传一张**正面、光线均匀、单人、500x500 左右**的清晰照片
|
||||
4. 现场扫脸失败时换个角度 / 摘掉口罩 / 重启设备
|
||||
5. 若一直失败,临时改用 [[checkin.regular.howto]] 手动签到或 [[checkin.wifi.howto]] WiFi 签到
|
||||
|
||||
## 不支持
|
||||
- 主程序自己不做人脸比对,所有错误都从 face 插件返回;卸载 face 后人脸签到能力完全消失
|
||||
@ -29,7 +29,7 @@ DooTask 签到没打上(漏签 / 迟到),日历上显示当天为空或时
|
||||
|
||||
## 原因
|
||||
- **签到时间窗口外**:管理员配置了「最早可提前」「最晚可延后」分钟数,超出窗口的打卡会被拒
|
||||
- **MAC / 人脸未匹配**:WiFi 签到时 MAC 没绑或不在办公网 → [[checkin.mac-not-match.faq]];人脸识别失败 → [[checkin.face-fail.faq]]
|
||||
- **MAC / 人脸未匹配**:WiFi 签到时 MAC 没绑或不在办公网 → [[checkin.mac-not-match.faq]];人脸识别失败见人脸识别(face)应用知识库
|
||||
- **忘记打卡**:完全没操作
|
||||
- **非工作日**:节假日不会发提醒,但只要打卡了一样会记录
|
||||
|
||||
|
||||
@ -48,4 +48,4 @@ DooTask 的 AI 能力由独立的 **ai 插件**(`dootask-ai`)提供。下面
|
||||
- 主程序不能跳过 ai 插件直连模型
|
||||
- 一次只能选一个默认模型作为系统主模型
|
||||
|
||||
更多 AI 助手能力见 [[ai-assistant.entry.howto]] / [[ai-assistant.tools-list.concept]]
|
||||
更多 AI 助手能力说明随 ai 插件知识库提供。
|
||||
|
||||
@ -50,4 +50,4 @@ AI 回复时延受多重因素影响:
|
||||
- 无内置「响应慢自动降级」机制
|
||||
- 中断回复只能整体停止本轮,不能保留已生成的文本继续
|
||||
|
||||
[[ai-assistant.entry.howto]] / [[ai-assistant.tool-call.concept]]
|
||||
更多 AI 助手说明随 ai 插件知识库提供。
|
||||
|
||||
@ -31,7 +31,7 @@ last_verified: v1.7.90
|
||||
AI 助手的工具调用本质是后端 API 调用,**全部以你的身份发起**。所以:
|
||||
|
||||
- 你本人没权限做的事,AI 也做不了
|
||||
- AI 调 `create_task` 时实际就是用你的会话去走 [[ai-assistant.create-task.howto]] 的 API;你不在项目里就会被拒绝
|
||||
- AI 调 `create_task` 时实际就是用你的会话去调对应 API;你不在项目里就会被拒绝
|
||||
- `update_task` 改任务必须满足任务负责人 / 项目负责人 / 系统管理员条件之一
|
||||
- 「加成员」必须你本身能加(项目负责人 / 系统管理员)
|
||||
|
||||
@ -48,4 +48,4 @@ AI 助手的工具调用本质是后端 API 调用,**全部以你的身份发
|
||||
- AI 不读不到的会话不会偷偷读取(隐私边界 = 用户的可见范围)
|
||||
- AI 工具失败不会自动二次重试,需要用户重新发问
|
||||
|
||||
[[ai-assistant.tool-call.concept]] 解释了工具调用的事件结构;[[role-permission.permission-denied.faq]] 解释通用权限规则。
|
||||
工具调用的事件结构说明随 ai 插件知识库提供;[[role-permission.permission-denied.faq]] 解释通用权限规则。
|
||||
|
||||
@ -47,4 +47,4 @@ AI 助手回答与事实不符,编了不存在的功能 / 菜单 / 快捷键
|
||||
- AI 不会拒绝回答它不熟的问题(可能编造),需用户保持警惕
|
||||
- AI 不会自动跨会话学习——「你上次错过的」对新会话无影响
|
||||
|
||||
[[ai-assistant.search-help-docs.howto]] 触发知识库检索;[[ai-assistant.tool-call.concept]] 看真实工具调用判断 AI 是否真做了。
|
||||
可触发知识库检索,并查看真实工具调用判断 AI 是否真做了(AI 助手相关说明随 ai 插件知识库提供)。
|
||||
|
||||
@ -55,7 +55,7 @@ last_verified: v1.7.90
|
||||
|
||||
**附件**:批量上传到文件目录([[file.upload.howto]])。
|
||||
|
||||
**文档**:复制文本到 office([[office.create.howto]])或 memos([[memos.create.howto]])。
|
||||
**文档**:复制文本到 office 或 memos 等文档类应用(具体新建方式见对应应用知识库)。
|
||||
|
||||
## 不支持
|
||||
- 不支持保留源任务 ID / URL 映射
|
||||
|
||||
@ -1,48 +0,0 @@
|
||||
---
|
||||
id: okr.cannot-install.faq
|
||||
title: 看不到 OKR / 安装失败怎么办
|
||||
type: faq
|
||||
feature: okr
|
||||
scope: end-user
|
||||
locale: zh
|
||||
aliases:
|
||||
- OKR 看不到
|
||||
- OKR 入口没有
|
||||
- OKR 装不上
|
||||
- OKR 安装失败
|
||||
- OKR 怎么开通
|
||||
- OKR 安装很慢
|
||||
related_tools: []
|
||||
related_pages: [application]
|
||||
prerequisites: []
|
||||
negative:
|
||||
- 主程序不内置 OKR,未装插件时入口绝对不会出现
|
||||
- 普通用户无法自助安装应用市场插件,需要系统管理员操作
|
||||
last_verified: v1.7.90
|
||||
---
|
||||
|
||||
# 看不到 OKR / 安装失败怎么办
|
||||
|
||||
## 问题
|
||||
打开 DooTask 后在应用中心看不到「OKR 管理」入口,或在「应用商店」(应用市场)点了「安装」后长时间没有反应、提示失败。
|
||||
|
||||
## 常见原因
|
||||
- OKR 是独立插件(应用商店 app id:`okr`),主程序不内置;未装时入口不出现
|
||||
- 普通用户没有应用商店的安装权限,必须系统管理员(`userIsAdmin`)安装
|
||||
- 插件镜像约 15MB,首次拉取较慢,看起来像「卡住」实际仍在下载
|
||||
- 服务器无法访问应用商店镜像源(网络 / 防火墙 / DNS 问题)
|
||||
- 主程序版本低于 1.1.66,不满足插件要求
|
||||
|
||||
## 解决
|
||||
1. 确认自己角色:非管理员就联系管理员安装
|
||||
2. 管理员打开「应用」→ 管理员分区「应用商店」,搜索「OKR」或「目标管理」
|
||||
3. 点击安装后,通过应用商店的安装日志查看实时进度(不要立即重试)
|
||||
4. 日志卡在拉取镜像:检查服务器到镜像源的网络连通性,确认能拉取 Docker 镜像
|
||||
5. 提示版本不兼容:先升级主程序到 > 1.1.66 再安装
|
||||
6. 安装完成但入口不出现:刷新浏览器 / 重新登录一次
|
||||
7. 安装失败可在应用商店重试,仍失败请保留日志反馈给运维
|
||||
|
||||
## 相关
|
||||
- 插件元信息:[[okr.plugin.concept]]
|
||||
- OKR 入口:[[okr.entry.menu-map]]
|
||||
- 通用权限问题:[[role-permission.permission-denied.faq]]
|
||||
@ -1,48 +0,0 @@
|
||||
---
|
||||
id: search.no-result.faq
|
||||
title: 搜不到或结果不全
|
||||
type: faq
|
||||
feature: search
|
||||
scope: end-user
|
||||
locale: zh
|
||||
aliases:
|
||||
- 搜不到
|
||||
- 搜索没结果
|
||||
- 搜索结果不全
|
||||
- 为什么搜不到
|
||||
- 搜不到文件内容
|
||||
- 搜不到群消息
|
||||
related_tools: []
|
||||
related_pages: []
|
||||
prerequisites: []
|
||||
negative:
|
||||
- 全局搜索不会显示「不属于你」的对象,即使关键词完全匹配
|
||||
- 不会自动跨用户搜索别人的私聊或文件
|
||||
last_verified: v1.7.90
|
||||
---
|
||||
|
||||
# 搜不到或结果不全
|
||||
|
||||
## 问题
|
||||
全局搜索输入关键词后没有结果,或者结果数量明显少于实际存在的对象。
|
||||
|
||||
## 原因
|
||||
按出现频率从高到低:
|
||||
1. **权限范围限制**:所有搜索只返回当前用户能访问的对象(详见各子接口),无权对象不会出现
|
||||
2. **对象处于不可见状态**:已归档项目、已归档 / 已删除任务、已禁用用户、机器人账号都会被过滤
|
||||
3. **未装 Manticore 插件**:MySQL 回退只匹配字面关键词,且文件正文 / 任务描述里的关键词搜不到(见 [[search.engine.concept]])
|
||||
4. **正文未被索引**:装了 Manticore,但文件超过大小阈值(Office > 50MB / 文本 > 5MB / 其他 > 20MB)或类型不支持
|
||||
5. **达到单次返回上限**:默认返回 20 条,最多 50 条,匹配项更多时会被截断
|
||||
6. **关键词大小写 / 全半角差异**:MySQL 回退对全 / 半角和大小写敏感度有限
|
||||
|
||||
## 解决
|
||||
1. 确认当前账号是否在对应项目 / 对话的成员列表
|
||||
2. 在搜索框切换分类标签(任务 / 项目 / 消息 / 联系人 / 文件),看是否被聚合截断了
|
||||
3. 如果是搜不到文件正文:联系管理员安装 search 插件([[search.engine.concept]])
|
||||
4. 如果是搜归档对象:先到对应模块解归档,再搜
|
||||
5. 增加 `take` 参数到 50(接口调用方)
|
||||
6. 用更准确的关键词或换一种说法
|
||||
|
||||
## 相关
|
||||
- 引擎差异:[[search.engine.concept]]
|
||||
- 入口与快捷键:[[search.entry.menu-map]]
|
||||
@ -1,69 +0,0 @@
|
||||
---
|
||||
id: ai-assistant.close.howto
|
||||
title: 关闭 AI 助手浮窗
|
||||
type: howto
|
||||
feature: ai-assistant
|
||||
scope: end-user
|
||||
locale: zh
|
||||
aliases:
|
||||
- 关闭 AI
|
||||
- 退出 AI 助手
|
||||
- AI 浮窗关掉
|
||||
- 关 AI 弹窗
|
||||
- 取消 AI 对话
|
||||
related_tools: []
|
||||
related_pages: []
|
||||
prerequisites:
|
||||
- AI 助手浮窗已打开
|
||||
negative:
|
||||
- 关闭只是隐藏弹窗 + 终止活跃 SSE 流,不会删除当前会话
|
||||
- 桌面端关闭后短时间内浮窗不会自动弹回,需再点浮按钮 / 快捷键
|
||||
- 移动端没有 Esc 键关闭
|
||||
last_verified: v1.7.90
|
||||
---
|
||||
|
||||
# 关闭 AI 助手浮窗
|
||||
|
||||
## 入口
|
||||
|
||||
### 桌面端 chat 浮窗
|
||||
- 浮窗**右上角「×」**关闭按钮
|
||||
- 键盘 `Esc`(仅 chat displayMode 生效)
|
||||
- chat 浮窗无遮罩,点击外侧不会关闭
|
||||
|
||||
### 桌面端 modal 模态(业务嵌入入口)
|
||||
- 弹窗**右上角「×」**或顶部关闭图标
|
||||
- 遮罩点击:默认**不**关闭(`mask-closable: false`)
|
||||
- 键盘 `Esc`:modal 模式当前实现下不响应
|
||||
|
||||
### 移动端
|
||||
- 浮窗**右上角「×」**(`Icon type="ios-close"`)
|
||||
- 浮窗顶部下拉「关闭」
|
||||
- 无键盘快捷键
|
||||
|
||||
## 关闭时发生了什么
|
||||
1. `showModal = false`
|
||||
2. 触发 `aiAssistantClosed` 事件
|
||||
3. **不会**自动清理当前会话(保留在内存 + 已持久化的留在数据库)
|
||||
4. 活跃的 SSE 流被同会话切换 / 新提问触发的清理逻辑回收
|
||||
5. 浮按钮重新显示(关闭时浮按钮被 `!this.$parent?.showModal` 条件隐藏)
|
||||
|
||||
## 关闭后下次打开
|
||||
- 当前会话和模型选择都保留
|
||||
- 输入框内容**不**保留(关闭即清空)
|
||||
- 待发送的图片也会清空(`clearPendingImages`)
|
||||
|
||||
## 完全隐藏 AI 助手
|
||||
- 关闭浮窗只是临时隐藏,**浮按钮**仍在屏幕边缘
|
||||
- 完全去掉浮按钮需管理员卸载 ai 插件或关闭 AI 模型
|
||||
- 详见 [[ai-assistant.disabled.faq]]
|
||||
|
||||
## 不支持
|
||||
- 不支持「最小化为小球」(关掉就是关掉,再开是新一次打开)
|
||||
- 不支持「关闭并清空当前会话」一键操作(手动删除:[[ai-assistant.session-delete.howto]])
|
||||
- 不支持点击浮窗外区域自动关闭
|
||||
|
||||
## 相关
|
||||
- [[ai-assistant.entry.howto]]
|
||||
- [[ai-assistant.stop.howto]]
|
||||
- [[ai-assistant.float-button.concept]]
|
||||
@ -1,59 +0,0 @@
|
||||
---
|
||||
id: ai-assistant.create-task.howto
|
||||
title: 让 AI 帮我创建任务
|
||||
type: howto
|
||||
feature: ai-assistant
|
||||
scope: end-user
|
||||
locale: zh
|
||||
aliases:
|
||||
- AI 建任务
|
||||
- AI 加 todo
|
||||
- AI 新建待办
|
||||
- 让 AI 创建一个任务
|
||||
- AI 帮我下任务
|
||||
- 给小王分个任务
|
||||
related_tools: [create_task]
|
||||
related_pages: []
|
||||
prerequisites:
|
||||
- 应用市场已安装 ai 插件
|
||||
- 应用市场已安装 mcp_server 插件
|
||||
- 当前用户在目标项目中是成员或负责人
|
||||
negative:
|
||||
- 不能在不是自己项目的位置建任务(会提示无权限)
|
||||
- AI 不会未经确认直接建复杂任务,长字段一般会先复述再创建
|
||||
- 创建后任务的 ID/URL 会返回,可让 AI 继续打开它
|
||||
last_verified: v1.7.90
|
||||
---
|
||||
|
||||
# 让 AI 帮我创建任务
|
||||
|
||||
## 这是什么
|
||||
在 AI 浮窗自然语言描述要建的任务,AI 会调 `create_task` 工具在目标项目下新建一条任务,自动解析负责人、截止时间、优先级、所属列。
|
||||
|
||||
## 怎么问
|
||||
一次性把关键信息说全,AI 解析准确率最高:
|
||||
|
||||
- "在『官网改版』项目建一个任务:周五前完成首页banner切图,分给小王"
|
||||
- "建个明天 18 点截止的紧急任务:上线前回归测试,我负责"
|
||||
- "项目X里加一条任务『写 PRD』,无负责人无截止时间"
|
||||
|
||||
## AI 通常会确认
|
||||
- 模糊的项目名 → 先调 `list_projects` 让你选
|
||||
- 模糊的"小王" → 调 `search_users` 列同名用户让你确认
|
||||
- 没说截止时间 → 直接不设置(不会乱猜)
|
||||
- 没说负责人 → 默认建未分配,可后续追加
|
||||
|
||||
## 创建后能继续做什么
|
||||
- "打开它" → 调页面工具跳详情
|
||||
- "再加 3 个子任务:前端、后端、测试" → 调 `create_sub_task`
|
||||
- "把这条同步到 X 群" → 调 `send_message`
|
||||
|
||||
## 不支持
|
||||
- 不能建跨项目任务(任务必须归属一个项目)
|
||||
- 不能在 AI 这步同时设置自定义字段(需打开任务详情手动改)
|
||||
- AI 不会主动给任务套已有模板,需明示「按 X 模板创建」
|
||||
|
||||
## 相关
|
||||
- 列任务:[[ai-assistant.list-tasks.howto]]
|
||||
- 创建项目结构:[[ai-assistant.project-init.howto]]
|
||||
- 子任务建议:[[ai-assistant.subtask-suggest.howto]]
|
||||
@ -1,69 +0,0 @@
|
||||
---
|
||||
id: ai-assistant.element-action.howto
|
||||
title: 让 AI 操作页面元素
|
||||
type: howto
|
||||
feature: ai-assistant
|
||||
scope: end-user
|
||||
locale: zh
|
||||
aliases:
|
||||
- AI 点按钮
|
||||
- AI 帮我输入
|
||||
- AI 选下拉
|
||||
- AI 滚动页面
|
||||
- AI 自动填表
|
||||
- AI 点击 X
|
||||
related_tools: []
|
||||
related_pages: []
|
||||
prerequisites:
|
||||
- 应用市场已安装 ai 插件
|
||||
- 应用市场已安装 mcp_server 插件
|
||||
- 当前页面已加载完成
|
||||
negative:
|
||||
- 元素必须可见且未被遮挡才能点击,被滚出视野时需先 scroll
|
||||
- 不能模拟键盘组合键(如 Cmd+S)、不能拖拽
|
||||
- AI 找不到匹配元素时会道歉并要求换种描述,不会盲点
|
||||
last_verified: v1.7.90
|
||||
---
|
||||
|
||||
# 让 AI 操作页面元素
|
||||
|
||||
## 这是什么
|
||||
让 AI 助手在你当前页面上直接操作具体元素,包括点击按钮、输入文本、选下拉项、聚焦、滚动、悬停。常用于完成详细表单或触发某个隐藏在多级菜单里的功能。操作由 AI 助手在你的浏览器/桌面端页面上执行。打开了微应用插件(同源)时,这些操作会默认作用于最前那个微应用的内部。
|
||||
|
||||
## 怎么问
|
||||
- "点击『保存』按钮"
|
||||
- "在标题框输入『官网首页改版』"
|
||||
- "把优先级下拉选成『高』"
|
||||
- "滚动到页面底部"
|
||||
- "悬停在第一个项目卡片上"
|
||||
|
||||
## AI 的执行链路
|
||||
1. 先采集当前页面的可交互元素清单
|
||||
2. 用 `match_elements` 接口按描述("保存按钮"、"标题输入框")找到目标 ref
|
||||
3. 在你的页面上触发 click / type / select / focus / scroll / hover
|
||||
|
||||
## 支持的动作
|
||||
| 动作 | 说明 |
|
||||
|---|---|
|
||||
| click | 触发原生 click 事件 |
|
||||
| type | 设置 input / textarea / contentEditable 的值并触发 input/change 事件 |
|
||||
| select | 原生 select 或 iView 下拉,按选项文本匹配 |
|
||||
| focus | 聚焦元素 |
|
||||
| scroll | 平滑滚动到屏幕中央 |
|
||||
| hover | 模拟 mouseenter/mouseover |
|
||||
|
||||
## 不支持的动作
|
||||
- 不能模拟键盘按键、不能模拟组合键
|
||||
- 不能拖拽元素(drag/drop)
|
||||
- 不能操作跨源(外部站点)微应用 iframe 的内部元素(同源微应用插件内部可操作)
|
||||
- 不能等到某个异步加载完成再点(无 wait 机制,需用户重新触发)
|
||||
|
||||
## 找不到元素怎么办
|
||||
- 改用更具体的描述("右上角保存按钮"代替"保存")
|
||||
- 先让 AI 跳到元素所在页(`open_task` 等)
|
||||
- 元素在折叠面板里,先让 AI 展开
|
||||
|
||||
## 相关
|
||||
- 跳页面 / 打开任务:[[ai-assistant.page-action.howto]]
|
||||
- match_elements 接口:[[ai-assistant.match-elements.concept]]
|
||||
- 页面上下文:[[ai-assistant.page-context-tool.concept]]
|
||||
@ -1,52 +0,0 @@
|
||||
---
|
||||
id: ai-assistant.entry.howto
|
||||
title: AI 助手怎么打开
|
||||
type: howto
|
||||
feature: ai-assistant
|
||||
scope: end-user
|
||||
locale: zh
|
||||
aliases:
|
||||
- AI 助手在哪
|
||||
- 怎么开 AI
|
||||
- 打开 AI
|
||||
- AI 入口
|
||||
- AI 浮窗
|
||||
- 怎么用 AI
|
||||
related_tools: []
|
||||
related_pages: []
|
||||
prerequisites:
|
||||
- 应用市场已安装 ai 插件
|
||||
- 管理员已在系统设置「AI 模型」中配置至少一个模型的 API key
|
||||
negative:
|
||||
- AI 助手本身不是「应用中心」里的卡片(区别于审批 / 签到等),是系统级特性
|
||||
- 未安装 ai 插件时所有 AI 入口都不会显示
|
||||
- 桌面端关闭浮窗后短时间内不会自动弹回,可手动唤起
|
||||
last_verified: v1.7.90
|
||||
---
|
||||
|
||||
# AI 助手怎么打开
|
||||
|
||||
## 全局入口(桌面端)
|
||||
|
||||
- **浮窗按钮**:屏幕右下角的圆形 AI 图标,点击展开聊天浮窗(位置可拖动,会贴边收起成竖条)
|
||||
- **快捷键**:Cmd + I(macOS)/ Ctrl + I(Win/Linux)任意页面都能呼出
|
||||
- **顶部「+」菜单**:右上角全局「+」下拉里有「AI 助手」项(需 ai 插件已安装)
|
||||
|
||||
## 移动端入口
|
||||
|
||||
- **悬浮按钮**:右下角小球,长按拖动到任意位置
|
||||
- 第一次打开会自动收起到屏幕边缘,点开后可全屏对话
|
||||
|
||||
## 业务场景嵌入入口
|
||||
|
||||
- **项目创建**:新建项目时项目名输入框旁边有 AI 按钮,点击让 AI 帮你生成项目结构
|
||||
- **任务详情**:任务讨论区可 @AI 让它分析任务、生成子任务建议
|
||||
- **工作报告**:报告编辑器内可让 AI 基于近期任务自动生成报告草稿
|
||||
- **消息会话**:群里 @AI 让它回答问题、总结对话、翻译消息
|
||||
|
||||
## 切换模型
|
||||
浮窗顶部下拉框选择模型;可用模型由管理员在系统设置「AI 模型」中开启。如下拉框为空,联系管理员配置。
|
||||
|
||||
## 关闭/隐藏
|
||||
- 桌面端:浮窗右上角「×」关闭,下次点浮按钮重新打开
|
||||
- 移动端:浮窗右上角下拉「关闭」
|
||||
@ -1,47 +0,0 @@
|
||||
---
|
||||
id: ai-assistant.feedback.howto
|
||||
title: 给 AI 回答点赞或点踩
|
||||
type: howto
|
||||
feature: ai-assistant
|
||||
scope: end-user
|
||||
locale: zh
|
||||
aliases:
|
||||
- 点赞
|
||||
- 点踩
|
||||
- AI 回答不好怎么反馈
|
||||
- 反馈 AI 回答
|
||||
- 有帮助 没帮助
|
||||
- 复制 AI 回答
|
||||
- 取消反馈
|
||||
related_tools: []
|
||||
related_pages: []
|
||||
prerequisites:
|
||||
- 应用市场已安装 ai 插件
|
||||
negative:
|
||||
- 反馈只针对 AI 助手浮窗里的回复,聊天对话里 @AI 机器人的消息暂不支持
|
||||
- 点踩不会让 AI 立即重新回答,需要自己追问或重新提问
|
||||
last_verified: v1.7.91
|
||||
---
|
||||
|
||||
# 给 AI 回答点赞或点踩
|
||||
|
||||
## 这是什么
|
||||
AI 助手浮窗中,每条 AI 回复完成后下方右侧会出现「复制 / 有帮助 / 没帮助」三个图标按钮(📋/👍/👎)。复制用于把回复内容复制到剪贴板,👍/👎 用于提交反馈,帮助官方改进 AI 回答质量和帮助文档内容。
|
||||
|
||||
## 怎么操作
|
||||
1. 在 AI 助手浮窗中提问,等待回复完成(流式输出结束后按钮才出现)
|
||||
2. 回复下方右侧点击 📋(复制)可复制该条回复正文到剪贴板(不含推理过程)
|
||||
3. 点击 👍(有帮助)或 👎(没帮助)提交反馈
|
||||
4. 按钮高亮表示已提交;再点另一个按钮可以改票,同一条回复只记最新一次
|
||||
5. 再次点击当前已高亮的按钮可取消反馈
|
||||
|
||||
## 反馈会被怎么用
|
||||
- 反馈与该回复引用的帮助文档关联,被频繁点踩的文档会被优先修订
|
||||
- 重新打开历史会话时,之前的反馈状态会保留显示
|
||||
|
||||
## 不支持
|
||||
- 不支持填写文字原因,只有 👍/👎 两档
|
||||
|
||||
## 相关
|
||||
- AI 查帮助文档:[[ai-assistant.search-help-docs.howto]]
|
||||
- 会话保存:[[ai-assistant.session-save.howto]]
|
||||
@ -1,59 +0,0 @@
|
||||
---
|
||||
id: ai-assistant.float-button.howto
|
||||
title: 移动 / 收起 AI 助手浮按钮
|
||||
type: howto
|
||||
feature: ai-assistant
|
||||
scope: end-user
|
||||
locale: zh
|
||||
aliases:
|
||||
- 怎么移动 AI 按钮
|
||||
- AI 球怎么挪
|
||||
- AI 浮窗按钮位置
|
||||
- AI 按钮挡住了
|
||||
- 浮按钮跑哪去了
|
||||
- 怎么收起 AI 按钮
|
||||
related_tools: []
|
||||
related_pages: []
|
||||
prerequisites:
|
||||
- 应用市场已安装 ai 插件
|
||||
negative:
|
||||
- 浮按钮无法完全关闭按钮本身(除非卸载 ai 插件或管理员关闭模型)
|
||||
- 收起后不会自己消失,仍是屏幕边缘一根 48px 高的竖条
|
||||
- 多端位置不同步:桌面 / 移动 / 桌面 Electron 各自独立存储
|
||||
last_verified: v1.7.90
|
||||
---
|
||||
|
||||
# 移动 / 收起 AI 助手浮按钮
|
||||
|
||||
## 移动位置
|
||||
|
||||
### 桌面端
|
||||
1. 鼠标按住 AI 浮按钮
|
||||
2. 拖动到任意位置(距屏幕四边至少 12px)
|
||||
3. 松开鼠标完成移动;松手后位置自动写入 IndexedDB
|
||||
|
||||
### 移动端
|
||||
1. 单指按住 AI 浮按钮
|
||||
2. 拖动到目标位置
|
||||
3. 抬起手指完成
|
||||
|
||||
## 收起 / 展开
|
||||
|
||||
- **自动收起**:拖到距屏幕左 / 右边缘 ≤ 12px 时,桌面端 1 秒后自动收起为竖条;移动端首次加载即自动收起到边缘
|
||||
- **展开**:点一下收起的竖条,按钮重新弹出并打开 AI 助手浮窗
|
||||
|
||||
## 怎么判断点击 vs 拖动
|
||||
- 移动距离 < 5px **且** 按下时间 < 200ms → 算「点击」,呼出 AI 助手
|
||||
- 否则 → 算「拖动」,只移动位置不打开对话窗
|
||||
|
||||
## 不同分辨率
|
||||
位置只存「距某边距离」+ 「靠哪边」,换屏 / 转屏不会跑到屏外。若发现按钮丢失,刷新页面后会回到默认位置(桌面右下、移动右侧中下)。
|
||||
|
||||
## 不支持
|
||||
- 桌面端没有「关闭浮按钮」的用户开关:要彻底关闭需管理员侧关闭 ai 插件
|
||||
- 不支持把浮按钮拖到屏幕外(会被边距 12px 强制约束)
|
||||
- 位置不跨端同步(手机和电脑各自存)
|
||||
|
||||
## 相关
|
||||
- 浮按钮的整体行为:[[ai-assistant.float-button.concept]]
|
||||
- 进 AI 助手的其他方法:[[ai-assistant.entry.howto]]
|
||||
@ -1,69 +0,0 @@
|
||||
---
|
||||
id: ai-assistant.image-upload.howto
|
||||
title: 给 AI 助手发图片
|
||||
type: howto
|
||||
feature: ai-assistant
|
||||
scope: end-user
|
||||
locale: zh
|
||||
aliases:
|
||||
- AI 上传图片
|
||||
- 给 AI 发截图
|
||||
- AI 拍照分析
|
||||
- 粘贴图片给 AI
|
||||
- 拖图片给 AI
|
||||
- AI 看图
|
||||
related_tools: []
|
||||
related_pages: []
|
||||
prerequisites:
|
||||
- 已选中支持视觉的模型(如 gpt-4o / claude-3.5-sonnet / gemini-1.5-pro)
|
||||
negative:
|
||||
- 单次最多 5 张,超出会拒绝
|
||||
- 仅支持图片格式(image/*),不支持 PDF / 视频
|
||||
- 图片会被前端压缩到长边 1568px JPEG,原图不保留
|
||||
- 非视觉模型即使选了也会被上游报错或忽略图片
|
||||
last_verified: v1.7.90
|
||||
---
|
||||
|
||||
# 给 AI 助手发图片
|
||||
|
||||
## 三种上传方式
|
||||
|
||||
### 1. 点击图片按钮
|
||||
1. 打开 AI 助手浮窗
|
||||
2. 浮窗底部输入区**左侧**有图片图标
|
||||
3. 点击 → 弹系统文件选择器
|
||||
4. 选 1-5 张图片 → 确定
|
||||
|
||||
### 2. 拖放
|
||||
1. 把图片从桌面或文件管理器拖到 AI 浮窗
|
||||
2. 浮窗内部出现「松开以上传图片」遮罩
|
||||
3. 在遮罩内松开鼠标完成上传
|
||||
|
||||
### 3. 粘贴(Ctrl/Cmd + V)
|
||||
1. 截图(Mac Cmd+Shift+4、Win Snipping Tool 等)
|
||||
2. 焦点放在 AI 输入框
|
||||
3. 按 Ctrl/Cmd + V,剪贴板的图片直接进入预览区
|
||||
|
||||
## 数量与压缩规则
|
||||
- 最多 5 张并存;超出 toast「最多上传 5 张图片」
|
||||
- 自动压缩:长边 ≤ 1568px、统一转 JPEG
|
||||
- 节省 token:上游按图片像素 / 大小计费
|
||||
|
||||
## 预览与移除
|
||||
- 上传后缩略图出现在输入框上方
|
||||
- 点缩略图右上角「×」单张移除
|
||||
- 发送后图片自动从「待发送」区清空
|
||||
|
||||
## 发送行为
|
||||
- 文本 + 图片**同时**作为多模态 content 发送
|
||||
- 历史会话里图片用占位符 `[image:imageId]` 存到 `data`,实际 base64 入 `images`
|
||||
- 再次打开历史会话通过 `serverImageMap` 拿 URL 渲染
|
||||
|
||||
## 不支持
|
||||
- 不支持视频 / PDF / 音频
|
||||
- 不支持把图片拖到收起的浮按钮上(先展开浮窗)
|
||||
- 不支持「不压缩直发」开关
|
||||
|
||||
## 相关
|
||||
- [[ai-assistant.multimodal.concept]]
|
||||
- [[ai-assistant.model-switch.howto]]
|
||||
@ -1,62 +0,0 @@
|
||||
---
|
||||
id: ai-assistant.intelligent-search.howto
|
||||
title: 让 AI 做智能搜索
|
||||
type: howto
|
||||
feature: ai-assistant
|
||||
scope: end-user
|
||||
locale: zh
|
||||
aliases:
|
||||
- 智能搜索
|
||||
- AI 搜一下
|
||||
- 全站搜索
|
||||
- 找一下 X
|
||||
- 不知道在哪
|
||||
- 跨模块搜索
|
||||
related_tools: [intelligent_search]
|
||||
related_pages: []
|
||||
prerequisites:
|
||||
- 应用市场已安装 ai 插件
|
||||
- 应用市场已安装 mcp_server 插件
|
||||
negative:
|
||||
- 只搜当前用户有权访问的内容
|
||||
- 默认结果上限 20 条,按相关度排序
|
||||
- 不返回系统设置 / 插件配置等管理项
|
||||
last_verified: v1.7.90
|
||||
---
|
||||
|
||||
# 让 AI 做智能搜索
|
||||
|
||||
## 这是什么
|
||||
当你不确定要找的东西是任务、项目、文件还是人时,让 AI 调 `intelligent_search` 工具做跨类型语义搜索,结果合并任务 / 项目 / 文件 / 联系人 / 消息五大类,按相关度统一排序。
|
||||
|
||||
## 怎么问
|
||||
- "搜一下『官网改版』有关的所有东西"
|
||||
- "找下『年终报告』,不管是什么类型"
|
||||
- "凡是提到上线日期的内容"
|
||||
- "我想找昨天讨论的接口设计,记不清是文件还是消息"
|
||||
|
||||
## 与按类型搜的区别
|
||||
- **按类型搜**(如 `search_files` / `list_tasks`):你已经知道是文件 / 任务,能给出精确筛选
|
||||
- **智能搜索**:你只有一个关键词,让 AI 跨类型匹配,相关度排序
|
||||
|
||||
## 结果通常长什么样
|
||||
分组返回:
|
||||
|
||||
- 任务(前 N 条)
|
||||
- 项目(前 N 条)
|
||||
- 文件(前 N 条)
|
||||
- 联系人(前 N 条)
|
||||
- 消息(前 N 条)
|
||||
|
||||
每项含标题、摘要、跳转链接,便于继续操作(打开 / 重新讨论 / 转发)。
|
||||
|
||||
## 不支持
|
||||
- 不能跨工作空间 / 跨租户搜索
|
||||
- 不返回敏感字段(密码、邮箱手机号正文不会出现在摘要)
|
||||
- 不能精确按数值范围筛(如"金额 > 1000"),需用具体业务工具
|
||||
|
||||
## 相关
|
||||
- 知识库检索:[[ai-assistant.search-help-docs.howto]]
|
||||
- 找文件:[[ai-assistant.search-files.howto]]
|
||||
- 找任务:[[ai-assistant.list-tasks.howto]]
|
||||
- 找人:[[ai-assistant.search-users.howto]]
|
||||
@ -1,66 +0,0 @@
|
||||
---
|
||||
id: ai-assistant.list-tasks.howto
|
||||
title: 让 AI 列我的任务
|
||||
type: howto
|
||||
feature: ai-assistant
|
||||
scope: end-user
|
||||
locale: zh
|
||||
aliases:
|
||||
- 我今天有什么任务
|
||||
- 帮我看下任务
|
||||
- 今天的待办
|
||||
- 这周要交什么
|
||||
- 列一下任务
|
||||
- 给我看待办
|
||||
- 我有哪些任务
|
||||
related_tools: [list_tasks]
|
||||
related_pages: []
|
||||
prerequisites:
|
||||
- 应用市场已安装 ai 插件
|
||||
- 应用市场已安装 mcp_server 插件
|
||||
negative:
|
||||
- 只能列出当前登录用户有权访问的任务(项目成员或负责人/协作者/可见用户)
|
||||
- 一次最多返回 100 条,超出请追加筛选条件
|
||||
- 不能列别人的私有任务(即便是同部门)
|
||||
last_verified: v1.7.90
|
||||
---
|
||||
|
||||
# 让 AI 列我的任务
|
||||
|
||||
## 这是什么
|
||||
在 AI 浮窗用自然语言问任务列表,AI 会调 `list_tasks` 工具检索后端,按你说的条件筛选并返回结果摘要。结果通常含任务名、负责人、截止时间、所属项目。
|
||||
|
||||
## 怎么问
|
||||
按你想筛的条件直接说:
|
||||
|
||||
- "我今天到期的任务"
|
||||
- "本周要交的任务"
|
||||
- "项目 X 里我负责的进行中任务"
|
||||
- "已逾期未完成的任务"
|
||||
- "上个月完成的任务"
|
||||
- "标记了高优先级且没人负责的任务"
|
||||
|
||||
## AI 通常会问回的信息
|
||||
模糊提问时,AI 可能反问以缩小范围:
|
||||
|
||||
- 时间范围(今天/本周/本月/自定义)
|
||||
- 状态(未开始/进行中/已完成/已逾期)
|
||||
- 项目限定
|
||||
- 负责人是不是你
|
||||
|
||||
## 后续动作
|
||||
列出任务后可以接续操作,无需重复说"在 X 项目":
|
||||
|
||||
- "把第 2 条标完成" → 调 `complete_task`
|
||||
- "打开第一条" → AI 在你的页面上跳到任务详情
|
||||
- "给小王再加一条子任务" → 调 `create_sub_task`
|
||||
|
||||
## 不支持
|
||||
- 不支持跨用户查询别人的任务列表
|
||||
- 模糊筛选「重要的」「紧急的」不保证命中:依赖任务已设置对应优先级/标签字段
|
||||
- 不返回已删除任务(除非显式说"被删的任务")
|
||||
|
||||
## 相关
|
||||
- 创建任务:[[ai-assistant.create-task.howto]]
|
||||
- 子任务建议:[[ai-assistant.subtask-suggest.howto]]
|
||||
- 打开任务详情:[[ai-assistant.page-action.howto]]
|
||||
@ -1,59 +0,0 @@
|
||||
---
|
||||
id: ai-assistant.model-switch.howto
|
||||
title: 切换 AI 助手使用的模型
|
||||
type: howto
|
||||
feature: ai-assistant
|
||||
scope: end-user
|
||||
locale: zh
|
||||
aliases:
|
||||
- 怎么换 AI 模型
|
||||
- 切换模型
|
||||
- 用 GPT 还是 Claude
|
||||
- 改用别的 AI
|
||||
- 模型下拉
|
||||
related_tools: []
|
||||
related_pages: []
|
||||
prerequisites:
|
||||
- AI 助手浮窗已打开
|
||||
- 管理员配置了 ≥ 1 个模型
|
||||
negative:
|
||||
- 切换模型不会重置当前会话历史,会带着已有 context 直接换模型续聊
|
||||
- 切模型不会回放之前的回答(不重生成已有的 message)
|
||||
- 不支持把同一个问题同时发到两个模型做对比
|
||||
last_verified: v1.7.90
|
||||
---
|
||||
|
||||
# 切换 AI 助手使用的模型
|
||||
|
||||
## 入口
|
||||
- 打开 AI 助手浮窗(点浮按钮 / Cmd+I / Ctrl+I)
|
||||
- 浮窗**底部输入区**有一个「模型下拉框」,左侧位置
|
||||
- 下拉按服务商分组,如 ChatGPT / Claude / DeepSeek 等
|
||||
|
||||
## 操作步骤
|
||||
1. 在浮窗底部点击模型选择下拉框
|
||||
2. 在分组列表中选目标模型(如 `Claude → claude-3.5-sonnet`)
|
||||
3. 选中后立即生效,下一次发送就用新模型
|
||||
|
||||
## 选项排序逻辑
|
||||
- 服务商按 `openai` → `claude` → `deepseek` → `gemini` → `grok` → `ollama` → `zhipu` → `qianwen` → `wenxin` 固定顺序
|
||||
- 每个服务商分组最多显示 5 个候选 + 1 个管理员设置的默认模型(如不在前 5 内会追加)
|
||||
- 不在 `AIBotMap` 的自定义服务商按字母序排在最后
|
||||
|
||||
## 自动记忆
|
||||
- 切换后的选择会写入 IndexedDB key `aiAssistant.model`
|
||||
- 下次打开 AI 助手时自动恢复到上次用过的模型
|
||||
|
||||
## 切换后的会话影响
|
||||
- 历史消息(用户问 + AI 回)保留,会作为 context 发给新模型
|
||||
- AI 不会重新回答历史问题;只对**下一次新提问**生效
|
||||
- 多模态:如果切到不支持图片的模型,未来发图会失败(但已有图片预览仍可看)
|
||||
|
||||
## 不支持
|
||||
- 不支持切换后清空历史(要清空需手动新建会话:[[ai-assistant.new-chat.howto]])
|
||||
- 不支持「这条回答用模型 A,下一条用模型 B」的单轮指定
|
||||
- 不支持下拉为空时自动 fallback(下拉空时直接禁用发送,详见 [[ai-assistant.model-empty.faq]])
|
||||
|
||||
## 相关
|
||||
- 模型概念与服务商列表:[[ai-assistant.model.concept]]
|
||||
- 下拉为空:[[ai-assistant.model-empty.faq]]
|
||||
@ -1,64 +0,0 @@
|
||||
---
|
||||
id: ai-assistant.new-chat.howto
|
||||
title: 新建一个 AI 助手会话
|
||||
type: howto
|
||||
feature: ai-assistant
|
||||
scope: end-user
|
||||
locale: zh
|
||||
aliases:
|
||||
- 新建 AI 会话
|
||||
- 重新开始 AI
|
||||
- 开一段新对话
|
||||
- 清空当前对话
|
||||
- 不要带上下文
|
||||
- AI 重新聊
|
||||
related_tools: []
|
||||
related_pages: []
|
||||
prerequisites:
|
||||
- AI 助手浮窗已打开
|
||||
negative:
|
||||
- 新建会话不会删除旧会话,只是把旧会话归档到历史列表
|
||||
- 新建会话只清空输出区与上下文,不影响模型选择 / 浮按钮位置
|
||||
- 嵌入入口的「新建」按钮不出现在浮窗,由各业务入口控制
|
||||
last_verified: v1.7.90
|
||||
---
|
||||
|
||||
# 新建一个 AI 助手会话
|
||||
|
||||
## 何时需要新建
|
||||
- 想换话题,又不希望 AI 受当前会话历史影响
|
||||
- 当前会话上下文太长,回答变慢或质量下降
|
||||
- 不想让接下来的提问污染历史
|
||||
|
||||
## 入口
|
||||
1. 打开 AI 助手浮窗
|
||||
2. 浮窗**右上角操作区**有一个「新建会话」图标
|
||||
3. 仅当 `sessionEnabled = true` **且**(当前会话有消息 **或** 历史列表非空)时显示
|
||||
|
||||
## 行为
|
||||
点击「新建会话」按钮:
|
||||
1. 当前会话**自动保存**到历史列表(标题取首条提问前 20 字)
|
||||
2. 生成新 `session_id`(格式 `session-{时间戳}-{随机串}`)
|
||||
3. 清空 `responses`,页面输出区清空
|
||||
4. 上下文 context 归零,下一次提问只发当前消息 + 默认 system prompt
|
||||
5. 当前模型选择保留
|
||||
|
||||
## 不会影响什么
|
||||
- 模型下拉的当前选择
|
||||
- 浮按钮位置 / 收起状态
|
||||
- 历史会话列表(仅多一条)
|
||||
- 图片缓存(已发送过的图片仍可被历史引用)
|
||||
|
||||
## 其他「新建」的等价路径
|
||||
- **删除当前会话**:不想留底就直接删除当前会话,会自动建一个空会话进入(见 [[ai-assistant.session-delete.howto]])
|
||||
- **切到其他历史会话**:会切走当前会话,但当前会话仍保留在历史里
|
||||
|
||||
## 不支持
|
||||
- 不支持「新建会话同时换模型」(先切模型再新建)
|
||||
- 不支持「新建空会话但保留前一轮上下文」
|
||||
- 不支持指定新会话标题(永远自动生成)
|
||||
|
||||
## 相关
|
||||
- [[ai-assistant.session.concept]]
|
||||
- [[ai-assistant.session-list.howto]]
|
||||
- [[ai-assistant.session-save.howto]]
|
||||
@ -1,68 +0,0 @@
|
||||
---
|
||||
id: ai-assistant.page-action.howto
|
||||
title: 让 AI 帮我跳页面/打开任务
|
||||
type: howto
|
||||
feature: ai-assistant
|
||||
scope: end-user
|
||||
locale: zh
|
||||
aliases:
|
||||
- AI 打开任务
|
||||
- AI 切换项目
|
||||
- AI 跳到仪表盘
|
||||
- 让 AI 帮我开 X
|
||||
- AI 跳转
|
||||
- AI 帮我打开
|
||||
related_tools: []
|
||||
related_pages: []
|
||||
prerequisites:
|
||||
- 应用市场已安装 ai 插件
|
||||
- 应用市场已安装 mcp_server 插件
|
||||
- 浏览器/桌面端会话所在页面已加载
|
||||
negative:
|
||||
- 只在当前浏览器标签内导航,不会新开标签
|
||||
- AI 不能打开你没权限访问的资源(会被后端拒绝)
|
||||
- 若任务被删,AI 跳转后会落到 404 / 提示「任务不存在」
|
||||
last_verified: v1.7.91
|
||||
---
|
||||
|
||||
# 让 AI 帮我跳页面/打开任务
|
||||
|
||||
## 这是什么
|
||||
在 AI 浮窗用自然语言让 AI 把当前页跳转到任务详情、对话、项目、文件预览或功能页。AI 助手会在你当前的浏览器/桌面端页面上执行真实路由跳转。
|
||||
|
||||
## 怎么问
|
||||
- "打开任务 1234"
|
||||
- "切到项目『官网改版』"
|
||||
- "打开和小王的对话"
|
||||
- "帮我打开仪表盘"
|
||||
- "跳到日历"
|
||||
- "打开文件 ID 5678"
|
||||
- "关闭这个应用" / "把当前应用关掉"(打开微应用插件后,可让 AI 直接关闭当前应用窗口,无需自己点关闭按钮)
|
||||
|
||||
## 支持的跳转目标
|
||||
- 任务详情(open_task / goto_task / navigate_to_task)
|
||||
- 对话(open_dialog,可附带 msg_id 跳到指定消息)
|
||||
- 项目主页(open_project)
|
||||
- 文件预览(open_file)/ 文件夹(open_folder)
|
||||
- 功能页:仪表盘 / 消息 / 日历 / 文件管理
|
||||
|
||||
## AI 怎么找到目标
|
||||
- 你给 ID 时直接跳
|
||||
- 你给名字时 AI 会先调 `list_tasks` / `search_dialogs` / `list_projects` / `search_files` 找候选
|
||||
- 同名多选时列候选让你确认
|
||||
|
||||
## 跳转后还能继续
|
||||
跳到目标页后,浮窗保持打开,可继续:
|
||||
|
||||
- "把它标完成" → 调 `complete_task`
|
||||
- "看下讨论" → 调 `get_message_list`
|
||||
- "拉到底部" → AI 在你的页面上滚动到底部
|
||||
|
||||
## 不支持
|
||||
- 不能跳到外部网址(如 google.com)
|
||||
- 不能在新标签打开
|
||||
- 不能切换到其他用户的视图
|
||||
|
||||
## 相关
|
||||
- 操作页面元素:[[ai-assistant.element-action.howto]]
|
||||
- 页面操作机制:[[ai-assistant.page-action.concept]]
|
||||
@ -1,62 +0,0 @@
|
||||
---
|
||||
id: ai-assistant.project-init.howto
|
||||
title: 让 AI 生成项目结构
|
||||
type: howto
|
||||
feature: ai-assistant
|
||||
scope: end-user
|
||||
locale: zh
|
||||
aliases:
|
||||
- AI 建项目
|
||||
- AI 生成项目模板
|
||||
- 项目结构 AI
|
||||
- AI 帮我搭项目
|
||||
- 新项目让 AI 写
|
||||
- 创建项目时的 AI 按钮
|
||||
related_tools: [create_project, create_task]
|
||||
related_pages: []
|
||||
prerequisites:
|
||||
- 应用市场已安装 ai 插件
|
||||
- 管理员已开启至少一个支持 tool call 的模型
|
||||
negative:
|
||||
- 仅生成项目骨架(列 + 初始任务),不生成成员/权限设置
|
||||
- 一次最多生成 5 个列 + 每列 6 条任务,超出请二次追加
|
||||
- 不会自动创建已存在同名项目(会提示重命名)
|
||||
last_verified: v1.7.90
|
||||
---
|
||||
|
||||
# 让 AI 生成项目结构
|
||||
|
||||
## 这是什么
|
||||
在「创建项目」弹窗里,项目名输入框右侧有 AI 按钮(仅 ai 插件已装且模型已配置时显示)。点击后描述项目目标,AI 会调 `create_project` 创建项目,再用 `create_task` 批量写入推荐的列和初始任务。
|
||||
|
||||
## 入口
|
||||
- 桌面端:右上角全局「+」→「创建项目」→ 项目名输入框右侧 AI 图标
|
||||
- 桌面端:左侧栏「项目」→「+」→「创建项目」→ 同上
|
||||
- 移动端:「+」→「创建项目」→ AI 按钮
|
||||
|
||||
## 操作步骤
|
||||
1. 打开创建项目弹窗,点项目名旁 AI 按钮
|
||||
2. 输入项目描述(如"3 个月官网改版,含 UI/前端/后端")
|
||||
3. AI 生成项目名 + 列结构 + 每列初始任务预览
|
||||
4. 点「采用并创建」批量建
|
||||
|
||||
## AI 输出示例
|
||||
- **项目名**:官网改版 2026Q1
|
||||
- **列**:待办 / 设计中 / 开发中 / 测试中 / 已完成
|
||||
- **任务**:每列 3-6 条按角色分组
|
||||
|
||||
## 后续动作
|
||||
项目创建完成后可继续:
|
||||
|
||||
- "把这些任务都分给小王" → 调 `update_task` 批量改负责人
|
||||
- "再加一个『设计评审』列" → 调列管理工具
|
||||
- "把项目讨论组拉一下" → AI 暂不能自动建群
|
||||
|
||||
## 不支持
|
||||
- 不能基于其他项目复制(要复制项目请用模板功能)
|
||||
- AI 不会自动设置任务截止时间,需后续追加
|
||||
- 创建后想撤销只能手动删项目(无 undo)
|
||||
|
||||
## 相关
|
||||
- 浮窗里建单个任务:[[ai-assistant.create-task.howto]]
|
||||
- 入口总览:[[ai-assistant.entry.howto]]
|
||||
@ -1,56 +0,0 @@
|
||||
---
|
||||
id: ai-assistant.report-draft.howto
|
||||
title: 用 AI 助手整理工作报告
|
||||
type: howto
|
||||
feature: ai-assistant
|
||||
scope: end-user
|
||||
locale: zh
|
||||
aliases:
|
||||
- AI 写周报
|
||||
- AI 生成日报
|
||||
- 周报模板 AI
|
||||
- AI 帮我写报告
|
||||
- 工作总结 AI
|
||||
- AI 整理汇报怎么用
|
||||
related_tools: [generate_report_template]
|
||||
related_pages: []
|
||||
prerequisites:
|
||||
- 应用商店(应用市场)已安装 ai 插件
|
||||
- 管理员已配置至少一个可用 AI 模型
|
||||
negative:
|
||||
- AI 做的是「整理润色」,不是从零代写:汇报内容为空时按钮会提示「请先填写汇报内容」
|
||||
- 整理结果是草稿,需用户人工审阅、修改、手动提交(不自动发送)
|
||||
- 数据来源是周期内的任务记录,不读群聊
|
||||
last_verified: v1.7.90
|
||||
---
|
||||
|
||||
# 用 AI 助手整理工作报告
|
||||
|
||||
## 这是什么
|
||||
写工作报告(日报 / 周报)时,可以让 AI 助手基于已填写的汇报内容做整理和润色。新建报告时系统已按你周期内的任务(已完成 / 未完成)自动生成内容初稿,AI 在此基础上加工,不会替你从零编造。
|
||||
|
||||
## 入口
|
||||
桌面端:工作报告编辑页(「应用」→「工作报告」→ 写报告)底部,「提交」按钮旁的「**AI 整理汇报**」按钮。
|
||||
|
||||
## 操作步骤
|
||||
1. 进入报告编辑页,选择类型(日报 / 周报),系统自动按任务生成汇报内容初稿
|
||||
2. 先补充 / 修改汇报内容(内容为空时点按钮会提示「请先填写汇报内容」)
|
||||
3. 点「AI 整理汇报」,弹出 AI 助手浮窗,可输入想强调的重点或特殊说明
|
||||
4. AI 在已填内容基础上整理、润色、生成总结
|
||||
5. 把整理结果应用回编辑器,人工检查后点「提交」
|
||||
|
||||
## 让结果更贴合需求
|
||||
在浮窗里补充说明,例如:
|
||||
|
||||
- "重点写官网改版项目,其他一笔带过"
|
||||
- "口语化一点 / 更正式一点"
|
||||
- "用英文写"
|
||||
|
||||
## 不支持
|
||||
- 不会自动提交(始终需要人工点提交)
|
||||
- 不会跨用户整理(只能处理自己的报告)
|
||||
- 汇报内容为空时不能直接生成,必须先填写内容
|
||||
|
||||
## 相关
|
||||
- 报告编辑页按钮详情:[[report.ai-generate.howto]]
|
||||
- 总结任务:[[ai-assistant.task-summary.howto]]
|
||||
@ -1,55 +0,0 @@
|
||||
---
|
||||
id: ai-assistant.search-files.howto
|
||||
title: 让 AI 帮我找文件
|
||||
type: howto
|
||||
feature: ai-assistant
|
||||
scope: end-user
|
||||
locale: zh
|
||||
aliases:
|
||||
- AI 找文件
|
||||
- 帮我找文档
|
||||
- AI 查文件
|
||||
- 我上传过的 X 文件
|
||||
- 找上次那个表
|
||||
- 谁分享过 X
|
||||
related_tools: [search_files]
|
||||
related_pages: []
|
||||
prerequisites:
|
||||
- 应用市场已安装 ai 插件
|
||||
- 应用市场已安装 mcp_server 插件
|
||||
negative:
|
||||
- 仅搜当前用户可见的文件(自己上传的 + 项目共享的 + 群里共享的)
|
||||
- 不能搜本地未上传到 DooTask 的文件
|
||||
- 文件内容搜索仅对支持解析的格式有效(txt/md/docx/pdf/xlsx 等)
|
||||
last_verified: v1.7.90
|
||||
---
|
||||
|
||||
# 让 AI 帮我找文件
|
||||
|
||||
## 这是什么
|
||||
在 AI 浮窗描述要找的文件,AI 调 `search_files` 工具按文件名 / 内容关键词 / 创建人 / 时间检索,返回文件名、路径、所有者、修改时间,常带跳转链接。
|
||||
|
||||
## 怎么问
|
||||
- "找一下我上周上传的 PRD 文档"
|
||||
- "搜叫『2026 年规划』的 Excel"
|
||||
- "项目 X 里所有 .pdf"
|
||||
- "小王最近共享给我的文件"
|
||||
- "包含『接口文档』关键字的文件"
|
||||
|
||||
## 内容搜索 vs 文件名搜索
|
||||
- 提问含"文件名"、"叫…"时按文件名匹配
|
||||
- 提问含"包含…"、"提到…"、"关于…"时按内容关键词匹配(需后端文件内容索引可用)
|
||||
|
||||
## 找到文件能继续做什么
|
||||
- "打开第一个" → AI 在你的页面上跳到文件预览
|
||||
- "下载它" → AI 会给下载链接(无法直接触发浏览器下载)
|
||||
- "把摘要发我" → 调 `fetch_file_content` 取文本,再让模型总结
|
||||
|
||||
## 不支持
|
||||
- 不支持搜历史版本/已删除文件(默认过滤)
|
||||
- 加密文件(如带密码 PDF)的内容索引可能为空,只能文件名匹配
|
||||
- 不能跨用户搜别人不共享给你的文件
|
||||
|
||||
## 相关
|
||||
- 取文件文字内容:`fetch_file_content`(暂未单独 chunk)
|
||||
- 跨类型语义搜索:[[ai-assistant.intelligent-search.howto]]
|
||||
@ -1,56 +0,0 @@
|
||||
---
|
||||
id: ai-assistant.search-help-docs.howto
|
||||
title: AI 帮我查 DooTask 怎么用
|
||||
type: howto
|
||||
feature: ai-assistant
|
||||
scope: end-user
|
||||
locale: zh
|
||||
aliases:
|
||||
- 怎么用 DooTask
|
||||
- X 在哪
|
||||
- X 怎么操作
|
||||
- 帮我查文档
|
||||
- DooTask 怎么做 X
|
||||
- 找帮助
|
||||
related_tools: [search_help_docs]
|
||||
related_pages: []
|
||||
prerequisites:
|
||||
- 应用市场已安装 ai 插件
|
||||
negative:
|
||||
- 知识库只覆盖 DooTask 自身功能,不回答行业知识或通用 IT 问题
|
||||
- 中英文知识库分别检索,所选会话语种决定查哪边
|
||||
- 没找到资料时 AI 会明示「未在知识库找到」而不是编造
|
||||
last_verified: v1.7.90
|
||||
---
|
||||
|
||||
# AI 帮我查 DooTask 怎么用
|
||||
|
||||
## 这是什么
|
||||
当你在 AI 浮窗里问 DooTask 功能怎么用,例如"任务怎么设置可见用户"、"报告模板在哪改",AI 会自动触发 `search_help_docs` 工具,从内置知识库(本仓库)检索相关 chunk,再综合给出步骤。
|
||||
|
||||
## 怎么触发
|
||||
直接用自然语言提问,无需特殊指令:
|
||||
|
||||
- "如何创建项目?"
|
||||
- "权限不足提示怎么解决?"
|
||||
- "看板列怎么加?"
|
||||
- "微应用是什么?"
|
||||
- "签到怎么补打?"
|
||||
|
||||
## 看 AI 调用了哪些资料
|
||||
- 浮窗中会出现 `search_help_docs` 工具气泡,展开可看检索关键词
|
||||
- 回答末尾通常会标注"参考自帮助文档"或附上相关功能名
|
||||
- 若回答错了,可继续追问"你查到的是哪一篇?",AI 会列出 chunk id
|
||||
|
||||
## 让 AI 查得更准的小技巧
|
||||
- 一次只问一个具体功能,别堆三个问题
|
||||
- 出错时把错误提示原文贴上,AI 会同时去查 FAQ 类 chunk
|
||||
- 含产品名加上"DooTask"前缀(如"DooTask 的看板")能避开开放知识
|
||||
|
||||
## 不支持
|
||||
- 不支持「教我怎么编程」「我项目用 React 怎么写」等编程问题
|
||||
- 英文知识库覆盖不全:知识库以中文为主,英文环境检索 en 库时覆盖度可能偏低
|
||||
|
||||
## 相关
|
||||
- 入口:[[ai-assistant.entry.howto]]
|
||||
- 跨任务/项目/文件的语义搜索:[[ai-assistant.intelligent-search.howto]]
|
||||
@ -1,61 +0,0 @@
|
||||
---
|
||||
id: ai-assistant.search-users.howto
|
||||
title: 让 AI 帮我找人
|
||||
type: howto
|
||||
feature: ai-assistant
|
||||
scope: end-user
|
||||
locale: zh
|
||||
aliases:
|
||||
- AI 找人
|
||||
- AI 查同事
|
||||
- 帮我找小王
|
||||
- 找联系人
|
||||
- 找用户
|
||||
- 谁是 X 部门负责人
|
||||
related_tools: [search_users]
|
||||
related_pages: []
|
||||
prerequisites:
|
||||
- 应用市场已安装 ai 插件
|
||||
- 应用市场已安装 mcp_server 插件
|
||||
negative:
|
||||
- 搜索范围受当前用户可见性限制,不能搜到组织外的人
|
||||
- 同名用户会一并列出,需用工号/部门/邮箱再筛
|
||||
- 不返回登录密码、手机号等敏感字段
|
||||
last_verified: v1.7.90
|
||||
---
|
||||
|
||||
# 让 AI 帮我找人
|
||||
|
||||
## 这是什么
|
||||
在 AI 浮窗问人,AI 调 `search_users` 工具按关键词、项目成员或对话成员筛选,返回昵称、邮箱、部门、头像等基础信息。常用于"加任务负责人 / 拉群"前的确认。
|
||||
|
||||
## 怎么问
|
||||
- "找一下叫小王的同事"
|
||||
- "运维部有哪些人"
|
||||
- "项目『官网改版』里都有谁"
|
||||
- "群『前端组』里的成员"
|
||||
- "邮箱含 zhang 的同事"
|
||||
|
||||
## 同名怎么办
|
||||
AI 会列出全部同名候选,附部门/邮箱 hint,让你回复"第 2 个"或"运维部那个",再继续后续操作。
|
||||
|
||||
## 找到人之后能做什么
|
||||
- "给他发消息:明天 10 点开会" → 调 `send_message`
|
||||
- "把他加进这个项目任务的负责人" → 调 `update_task`
|
||||
- "拉个群把他们都加进去" → 仍需人工操作建群(AI 不能自动建群)
|
||||
|
||||
## 限制范围
|
||||
默认搜全组织可见用户。可以加范围词收窄:
|
||||
|
||||
- "项目 X 里的"
|
||||
- "对话 Y 里的"
|
||||
- "部门 Z 里的"
|
||||
|
||||
## 不支持
|
||||
- 不能搜外部联系人(DooTask 没有公网通讯录)
|
||||
- 不能搜已离职/已禁用账号(默认过滤)
|
||||
- 不能按"今天在线的人"筛(无该字段)
|
||||
|
||||
## 相关
|
||||
- 发消息:[[ai-assistant.send-message.howto]]
|
||||
- 创建任务时指派人:[[ai-assistant.create-task.howto]]
|
||||
@ -1,59 +0,0 @@
|
||||
---
|
||||
id: ai-assistant.send-message.howto
|
||||
title: 让 AI 帮我发消息
|
||||
type: howto
|
||||
feature: ai-assistant
|
||||
scope: end-user
|
||||
locale: zh
|
||||
aliases:
|
||||
- AI 发消息
|
||||
- AI 发群
|
||||
- 帮我发给小王
|
||||
- AI 自动发通知
|
||||
- 让 AI 发到群里
|
||||
- AI 代发
|
||||
related_tools: [send_message]
|
||||
related_pages: []
|
||||
prerequisites:
|
||||
- 应用市场已安装 ai 插件
|
||||
- 应用市场已安装 mcp_server 插件
|
||||
- 当前用户与目标对话/用户已存在会话或有权发起
|
||||
negative:
|
||||
- 发送动作以当前登录用户名义执行,对方看到的是你发的(不是「AI 代发」标签)
|
||||
- AI 不会未经确认直接发,敏感/长内容会先弹消息预览让你确认
|
||||
- 不能发送已撤回/未上传完成的图片
|
||||
last_verified: v1.7.90
|
||||
---
|
||||
|
||||
# 让 AI 帮我发消息
|
||||
|
||||
## 这是什么
|
||||
在 AI 浮窗描述要发的内容和对象,AI 会先调 `search_dialogs` 或 `search_users` 找到目标对话,再调 `send_message` 把消息发出去。消息以当前登录用户身份发送。
|
||||
|
||||
## 怎么问
|
||||
- "给小王发:会议改到下午 3 点"
|
||||
- "在『前端组』群里发:今晚 8 点上线,请大家配合"
|
||||
- "把刚才那个总结发到项目讨论组"
|
||||
|
||||
## AI 会先确认
|
||||
- **接收人/群歧义**:同名时列候选让你挑
|
||||
- **长消息**:超过 200 字会先在浮窗里贴出预览,等你说「确认发」
|
||||
- **跨群广播**:一次发多群通常会拆成多次确认
|
||||
|
||||
## 发送结果
|
||||
发送成功后浮窗会显示消息 ID + 时间戳;如果对方禁言/不在好友列表/对话不存在,会回失败原因。
|
||||
|
||||
## 后续动作
|
||||
- "撤回刚才那条" → 调 `update_message` 或 `delete_message`(依实现)
|
||||
- "看下回复" → 调 `get_message_list`
|
||||
- "发完顺便建个任务跟进" → 调 `create_task`
|
||||
|
||||
## 不支持
|
||||
- 不能发语音/视频通话邀请
|
||||
- 不能定时发送(无 schedule 工具)
|
||||
- 不能伪装其他用户发送
|
||||
- AI 不会自动把"@小王"翻成用户 mention,需要明确说"@用户 ID"
|
||||
|
||||
## 相关
|
||||
- 找人:[[ai-assistant.search-users.howto]]
|
||||
- 任务讨论区 @AI:[[ai-assistant.task-mention.howto]]
|
||||
@ -1,63 +0,0 @@
|
||||
---
|
||||
id: ai-assistant.session-delete.howto
|
||||
title: 删除 AI 助手历史会话
|
||||
type: howto
|
||||
feature: ai-assistant
|
||||
scope: end-user
|
||||
locale: zh
|
||||
aliases:
|
||||
- 删除 AI 历史
|
||||
- 清空 AI 对话
|
||||
- 删除 AI 会话
|
||||
- AI 历史不要了
|
||||
- 删除 AI 聊天记录
|
||||
related_tools: []
|
||||
related_pages: []
|
||||
prerequisites:
|
||||
- 当前桶有 ≥ 1 条会话
|
||||
negative:
|
||||
- 删除不可恢复,相关图片也会从 public/uploads 物理删除
|
||||
- 删除单条无二次确认;清空全部有确认弹窗
|
||||
- 删除当前桶不会影响其他桶
|
||||
last_verified: v1.7.90
|
||||
---
|
||||
|
||||
# 删除 AI 助手历史会话
|
||||
|
||||
## 入口
|
||||
1. 打开 AI 助手浮窗
|
||||
2. 浮窗右上角点「历史」图标展开下拉
|
||||
|
||||
## 删除单条
|
||||
1. 鼠标移到目标会话条目上
|
||||
2. 点条目右侧小垃圾桶图标
|
||||
3. **立即删除**(无确认):
|
||||
- 后端调 `POST api/assistant/session/delete`,参数 `{session_key, session_id}`
|
||||
- 服务端删除会话记录及对应 `public/uploads/assistant/YYYYMM/{userid}/` 图片
|
||||
- 如果删的是当前打开的会话,自动新建一个空会话替代
|
||||
|
||||
## 清空整个桶(全部历史)
|
||||
1. 历史下拉最底部「清空历史记录」
|
||||
2. 弹出确认弹窗 → 「确定」
|
||||
3. 执行:
|
||||
- 调 `POST api/assistant/session/delete`,参数 `{session_key, clear_all: true}`
|
||||
- 后端清空当前桶所有会话 + 物理删除所有图片
|
||||
- 前端清空内存 `imageCache` 和 `serverImageMap`
|
||||
- 自动新建一个空会话进入
|
||||
|
||||
## 不影响其他桶
|
||||
- 浮窗用 `session_key = global`,清空只删 `global` 桶
|
||||
- 嵌入入口(`project-create`、`task-add` 等)的会话**不受影响**
|
||||
|
||||
## 误删可恢复吗?
|
||||
**不能。** 删除即写库 `DELETE`,物理删除关联图片,**无回收站、无 30 天保留**。要保留的对话请提前复制到笔记。
|
||||
|
||||
## 不支持
|
||||
- 不支持选择多条批量删除(只能单删或清空全部)
|
||||
- 不支持「软删除 / 30 天回收」
|
||||
- 不支持按时间范围筛选删除
|
||||
|
||||
## 相关
|
||||
- [[ai-assistant.session-list.howto]]
|
||||
- [[ai-assistant.session.concept]]
|
||||
- [[ai-assistant.new-chat.howto]]
|
||||
@ -1,70 +0,0 @@
|
||||
---
|
||||
id: ai-assistant.session-list.howto
|
||||
title: 查看 AI 助手历史会话
|
||||
type: howto
|
||||
feature: ai-assistant
|
||||
scope: end-user
|
||||
locale: zh
|
||||
aliases:
|
||||
- AI 历史会话
|
||||
- 我之前问过 AI 什么
|
||||
- 找回 AI 对话
|
||||
- AI 聊天记录
|
||||
- 看 AI 历史
|
||||
related_tools: []
|
||||
related_pages: []
|
||||
prerequisites:
|
||||
- 当前桶至少有 1 条已保存的会话
|
||||
negative:
|
||||
- 历史只显示当前用户、当前桶的会话
|
||||
- 嵌入入口的会话不出现在浮窗历史里
|
||||
- 历史按更新时间倒序,最近的在上面
|
||||
last_verified: v1.7.90
|
||||
---
|
||||
|
||||
# 查看 AI 助手历史会话
|
||||
|
||||
## 入口
|
||||
1. 打开 AI 助手浮窗
|
||||
2. 浮窗**右上角操作区**有「历史」图标
|
||||
3. 点击展开下拉,列出当前桶内所有已保存会话
|
||||
|
||||
仅当桶内有 ≥ 1 条会话时该图标才出现。
|
||||
|
||||
## 显示内容
|
||||
每条会话显示三行:
|
||||
- 标题:取首条用户消息前 20 字
|
||||
- 删除按钮(右上角小垃圾桶)
|
||||
- 更新时间:今天 / 昨天 / MM-DD HH:mm / YYYY-MM-DD HH:mm
|
||||
|
||||
排序:按更新时间倒序,最近聊的在最上面。
|
||||
|
||||
## 操作步骤
|
||||
|
||||
### 切换到某条历史会话
|
||||
1. 在历史下拉里点要打开的会话标题
|
||||
2. 当前对话内容自动保存
|
||||
3. 浮窗输出区切换为该会话的消息流
|
||||
|
||||
### 删除单条会话
|
||||
1. 鼠标移到会话条目上
|
||||
2. 点条目右侧小垃圾桶图标
|
||||
3. 立即删除(无二次确认);同时清掉服务端会话图片
|
||||
|
||||
### 清空全部历史
|
||||
1. 历史下拉最底部「清空历史记录」
|
||||
2. 弹出确认弹窗 → 「确定」
|
||||
3. 当前桶所有会话被删,图片缓存一并清空
|
||||
|
||||
## 数据来源
|
||||
通过 `POST api/assistant/session/list` 拉取,按当前用户 + 当前 `session_key` 过滤。返回会话最多 20 条(受 `maxSessionsPerKey` 限制)。
|
||||
|
||||
## 不支持
|
||||
- 不支持按关键词搜索历史
|
||||
- 不支持给会话改名(标题永远是首条提问截取)
|
||||
- 不支持把历史导出 CSV / 文本
|
||||
|
||||
## 相关
|
||||
- [[ai-assistant.session.concept]]
|
||||
- [[ai-assistant.session-delete.howto]]
|
||||
- [[ai-assistant.new-chat.howto]]
|
||||
@ -1,67 +0,0 @@
|
||||
---
|
||||
id: ai-assistant.session-save.howto
|
||||
title: AI 助手会话自动保存
|
||||
type: howto
|
||||
feature: ai-assistant
|
||||
scope: end-user
|
||||
locale: zh
|
||||
aliases:
|
||||
- AI 会话保存
|
||||
- AI 对话留底
|
||||
- AI 会话不保留
|
||||
- AI 没保存
|
||||
- 手动保存 AI
|
||||
related_tools: []
|
||||
related_pages: []
|
||||
prerequisites:
|
||||
- 会话管理已启用(`sessionEnabled = true`,浮窗自动开启)
|
||||
negative:
|
||||
- 没有「立即保存」按钮,全部自动;不会丢失最新一条
|
||||
- 嵌入入口未传 sessionKey 时不会启用保存(一次性对话)
|
||||
- streaming / waiting 状态会被归一为 error 再写库,避免重启卡 loading
|
||||
last_verified: v1.7.90
|
||||
---
|
||||
|
||||
# AI 助手会话自动保存
|
||||
|
||||
## 是否需要手动保存
|
||||
**不需要。** AI 助手浮窗的会话保存全自动。以下时机触发保存:
|
||||
|
||||
1. **流式回答完成**:AI 最后一个 chunk 到达,标记 `completed` 后立即保存
|
||||
2. **流式失败 / 用户中断**:归一未完成态为 `error` 后保存
|
||||
3. **手动新建会话 / 切换会话 / 切桶**:先保存当前会话再切换
|
||||
4. **常规编辑(删消息、编辑提问)**:2 秒防抖批量写入
|
||||
|
||||
## 保存到哪
|
||||
- 数据库表:`ai_assistant_sessions`,按 `userid` 隔离
|
||||
- 接口:`POST api/assistant/session/save`
|
||||
- 字段:`session_key`、`session_id`、`title`、`data`(JSON 消息流)、`new_images`(新增图片 base64 列表)
|
||||
|
||||
## 标题如何生成
|
||||
- 取首条 `role !== 'system'` 的 `prompt` 前 20 字
|
||||
- 无任何用户提问时显示「新会话」
|
||||
- 标题不可手动改
|
||||
|
||||
## 图片同步上传
|
||||
- 保存时仅传**本次新增**的图片 base64
|
||||
- 后端写入 `public/uploads/assistant/YYYYMM/{userid}/xxx.jpg`
|
||||
- 返回 `image_urls` 映射,前端缓存到 `serverImageMap`,下次打开会话用 URL 显示
|
||||
|
||||
## 防抖与容错
|
||||
- 普通编辑 2 秒防抖
|
||||
- 流式结束 / 失败立即写入
|
||||
- 写入失败仅 console.warn,下次保存补上
|
||||
|
||||
## 什么时候不保存
|
||||
- 嵌入入口未传 sessionKey → 该入口走「一次性对话」,关闭后不留底
|
||||
- 当前会话内一条消息都没有 → 不创建空会话记录
|
||||
|
||||
## 不支持
|
||||
- 不支持云端跨用户 / 跨工作区同步
|
||||
- 不支持「保存到本地文件」选项
|
||||
- 不支持暂停自动保存
|
||||
|
||||
## 相关
|
||||
- [[ai-assistant.session.concept]]
|
||||
- [[ai-assistant.session-list.howto]]
|
||||
- [[ai-assistant.stop.howto]]
|
||||
@ -1,59 +0,0 @@
|
||||
---
|
||||
id: ai-assistant.shortcut.howto
|
||||
title: 用快捷键呼出 AI 助手
|
||||
type: howto
|
||||
feature: ai-assistant
|
||||
scope: end-user
|
||||
locale: zh
|
||||
aliases:
|
||||
- AI 助手快捷键
|
||||
- 怎么用键盘打开 AI
|
||||
- Cmd I
|
||||
- Ctrl I
|
||||
- AI 键盘打开
|
||||
related_tools: []
|
||||
related_pages: []
|
||||
prerequisites:
|
||||
- 应用市场已安装 ai 插件
|
||||
- 管理员已配置至少一个 AI 模型
|
||||
negative:
|
||||
- 移动端没有键盘快捷键(用浮按钮 / Tabbar 入口替代)
|
||||
- 不支持自定义快捷键,固定为 Cmd+I / Ctrl+I
|
||||
- 在输入法候选状态下按 I 不会触发(不和 IME 抢键位)
|
||||
last_verified: v1.7.90
|
||||
---
|
||||
|
||||
# 用快捷键呼出 AI 助手
|
||||
|
||||
## 快捷键
|
||||
|
||||
| 终端 | 快捷键 | 说明 |
|
||||
|---|---|---|
|
||||
| macOS(桌面 / Web) | `Cmd + I` | 全局生效,无需点输入框 |
|
||||
| Windows / Linux(桌面 / Web) | `Ctrl + I` | 全局生效 |
|
||||
| 移动端 | — | 无键盘快捷键 |
|
||||
|
||||
## 触发条件
|
||||
- ai 插件已安装(`microAppsIds.includes('ai')` 为 true)
|
||||
- 当前在已登录页面(路由非 `login`)
|
||||
- 按键时**未同时按 Shift 或 Alt**,否则会落入其他组合(如 Cmd+Shift+I 是浏览器开发者工具)
|
||||
|
||||
## 行为
|
||||
按下快捷键时,等价于点击右上角全局「+」菜单里的「AI 助手」项,会:
|
||||
1. 阻止浏览器 / Electron 默认行为(如 Safari 的「显示书签栏」)
|
||||
2. 触发 `openAIAssistantGlobal` 事件
|
||||
3. 弹出 AI 助手弹窗(默认 modal 形态),自动聚焦到输入框
|
||||
|
||||
## 不响应的场景
|
||||
- 当前页面是登录页 → 不触发
|
||||
- ai 插件未安装 → 不触发(按键被释放给浏览器)
|
||||
- 中文 / 日文输入法处于候选字状态 → 不触发
|
||||
|
||||
## 不支持
|
||||
- 无法在「个人设置」改快捷键,键位固定
|
||||
- 不支持单独的「关闭 AI 助手」快捷键;按 Esc 仅在浮窗模式下关闭
|
||||
- 移动端长按虚拟键盘 I 不能触发(依赖物理键盘事件)
|
||||
|
||||
## 相关
|
||||
- 完整入口清单:[[ai-assistant.entry.howto]]
|
||||
- 弹窗形态:[[ai-assistant.modal.concept]]
|
||||
@ -1,43 +0,0 @@
|
||||
---
|
||||
id: ai-assistant.start-guide.howto
|
||||
title: 让 AI 带我去对应页面(页面深链)
|
||||
type: howto
|
||||
feature: ai-assistant
|
||||
scope: end-user
|
||||
locale: zh
|
||||
aliases:
|
||||
- 带我去
|
||||
- 带我操作
|
||||
- 在哪里设置
|
||||
- 怎么去
|
||||
- 快捷跳转
|
||||
related_tools: []
|
||||
related_pages: []
|
||||
prerequisites:
|
||||
- 应用市场已安装 ai 插件
|
||||
negative:
|
||||
- 通过聊天对话 @AI 机器人暂不支持页面深链,需在 AI 助手浮窗中使用
|
||||
last_verified: v1.7.90
|
||||
---
|
||||
|
||||
# 让 AI 带我去对应页面(页面深链)
|
||||
|
||||
## 怎么做
|
||||
1. 打开 AI 助手浮窗(右下角悬浮按钮)
|
||||
2. 问一个“在哪/怎么去”类问题,例如「在哪里设置端到端加密」「个人资料怎么改」
|
||||
3. AI 回答里把可跳转的页面/面板渲染成**蓝色链接**,点击即直达那一屏
|
||||
|
||||
## 例子
|
||||
- 问「在哪里设置端到端加密」→ 回答里「系统设置」是蓝色链接,点它直达系统设置页
|
||||
- 问「怎么改个人资料」→ 点「个人设置」直达个人设置
|
||||
|
||||
## 到达之后
|
||||
深链把你送到对应页面/面板,页面内的具体开关/按钮请按回答里的文字说明自己操作一下即可。
|
||||
|
||||
## 链接没出现 / 不可点怎么办
|
||||
- 不是每个名词都会变成链接,只有命中系统已登记目的地的词才可点,其余是普通文字——可换个更明确的问法(如直接问「系统设置在哪」)
|
||||
- 若回答说“文档未说明”,多为知识库未覆盖该功能,可点踩 👎 反馈
|
||||
|
||||
## 相关
|
||||
- 深链是什么:[[ai-assistant.guide.concept]]
|
||||
- 回答不好怎么反馈:[[ai-assistant.feedback.howto]]
|
||||
@ -1,63 +0,0 @@
|
||||
---
|
||||
id: ai-assistant.stop.howto
|
||||
title: 中断 AI 助手回答
|
||||
type: howto
|
||||
feature: ai-assistant
|
||||
scope: end-user
|
||||
locale: zh
|
||||
aliases:
|
||||
- 停止 AI 回答
|
||||
- 让 AI 停下来
|
||||
- 取消 AI 输出
|
||||
- AI 一直在打字
|
||||
- 终止流式
|
||||
- 重发问题
|
||||
related_tools: []
|
||||
related_pages: []
|
||||
prerequisites:
|
||||
- AI 助手当前有一条流式回答正在输出
|
||||
negative:
|
||||
- 中断后的部分回答保留,但状态变为 error,不会再续传
|
||||
- 中断不向上游模型扣费返还(看服务商)
|
||||
- 不支持「暂停后再继续」,只能停 + 重新提问
|
||||
last_verified: v1.7.90
|
||||
---
|
||||
|
||||
# 中断 AI 助手回答
|
||||
|
||||
## 何时需要中断
|
||||
- AI 跑偏,回答方向不对,想立即停下重提问
|
||||
- 模型陷入冗长输出
|
||||
- 想换个模型重发同一问题
|
||||
|
||||
## 入口
|
||||
当 AI 正在流式输出时,主动中断方式:
|
||||
1. **新建会话**:右上角「新建会话」会先清掉当前流再开空会话(见 [[ai-assistant.new-chat.howto]])
|
||||
2. **关闭浮窗**:关闭浮窗会清理所有活跃 SSE 连接(见 [[ai-assistant.close.howto]])
|
||||
3. **发新问题**:发起新提问会自动清掉同会话的残留 SSE 流
|
||||
|
||||
## 中断时发生了什么
|
||||
1. 前端调 SSE 客户端的 `unsunscribe()` 切断连接
|
||||
2. 已收到的部分回答(rawOutput)保留在 message
|
||||
3. 该 message 的 `status` 立即变为 `error`,附「会话中断」错误文案
|
||||
4. message 持久化到 session(带 error 状态),刷新不会再卡 loading
|
||||
|
||||
## 流式中断恢复保护
|
||||
- 即使页面崩溃 / 刷新,加载会话时如果发现某条 message 仍是 `streaming` 或 `waiting`,会自动归一为 `error`
|
||||
- 避免「永远转圈」(见 `sanitizeResponsesForPersist`)
|
||||
|
||||
## 重新提问
|
||||
中断后想重发同一问题:
|
||||
1. 鼠标移到刚才被中断的提问气泡
|
||||
2. 点编辑图标 → 修改后再发
|
||||
3. 或直接在输入框输入新的问题(按 ↑ 可调出最近 50 条历史输入)
|
||||
|
||||
## 不支持
|
||||
- 不支持「暂停 → 继续」,只能停 + 重发
|
||||
- 不支持只中断单条;同会话所有进行中的流会一起停
|
||||
- 不支持中断后撤销(再次发送会生成新一条 message)
|
||||
|
||||
## 相关
|
||||
- [[ai-assistant.streaming.concept]]
|
||||
- [[ai-assistant.close.howto]]
|
||||
- [[ai-assistant.new-chat.howto]]
|
||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user