# Tasker **Repository Path**: synkue/tasker ## Basic Information - **Project Name**: Tasker - **Description**: Tasker是面向多部门、多项目的 AI 需求拆解 + 敏捷协作 平台。支持 Workspace 工作空间隔离、本地大模型配置、SSE 流式 AI 对话,以及 Backlog / User Story / Task / 验收标准 / Issue 的全流程管理。 - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2026-06-05 - **Last Updated**: 2026-06-06 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Tasker 面向多部门、多项目的 **AI 需求拆解 + 敏捷协作** 平台。支持 Workspace 工作空间隔离、本地大模型配置、SSE 流式 AI 对话,以及 Backlog / User Story / Task / 验收标准 / Issue 的全流程管理。 ![登录页](images/login.png) ## 功能概览 ### 用户与权限 - **注册 / 登录**:用户名密码认证,注册含滑块验证码;JWT 鉴权(默认 7 天有效) - **个人资料**:显示名、邮箱、手机号、部门;修改密码 - **多语言**:中文 / English(`vue-i18n`) ### 工作空间(Workspace) - 按用户隔离的多租户数据模型,所有业务数据通过 `workspace_id` 关联 - 支持部门、项目名称、描述等元数据 - 侧栏切换工作空间,API 请求携带 `X-Workspace-Id` 请求头 ### AI 需求拆解 - **工作台**:文本输入 + 文档上传(txt / md / pdf / docx),SSE 流式输出 - 选择大模型与 Agent Skills,Ctrl/Cmd + Enter 快捷发送,支持中断生成 - 结构化拆解结果:Backlog、User Story、Task、验收标准(AC) - **一键创建工作项**:将 AI 拆解结果直接导入当前工作空间 - **历史记录**:查看、复用、删除历史拆解对话 ![需求拆解工作台](images/workbench.png) ### 工作项管理 | 模块 | 能力 | |------|------| | **规划** | Backlog / User Story / Task / 验收标准列表;新建、编辑、删除;状态显示为中文标签;详情抽屉 | | **任务看板** | 看板拖拽 / 列表视图;按负责人、优先级筛选;Task 详情与状态流转(含阻塞原因) | | **我的待办** | 按项目分组查看指派给自己的 Task 与 Issue;表格内直接改状态 | | **附件** | 工作项与 Issue 支持文件 / 图片上传、预览、下载 | ![任务看板](images/task-board.png) ![我的待办](images/my-work.png) ### 缺陷(Issue) - 看板 / 列表双视图,按负责人、优先级、严重程度筛选 - 状态流转:待处理 → 处理中 → 已修复 → 已验证 → 已关闭 / 重新打开 - 关联 Task、评论、附件 ![缺陷看板](images/issue-board.png) ### 数据洞察 - **总览**:个人 Task / Issue 统计、参与项目、截止提醒、ECharts 图表 - **项目报表**:燃尽图、Task / Issue / Story 状态分布、优先级、负责人负载、截止健康度、Issue 严重程度 ![工作台总览](images/dashboard.png) ![项目报表](images/project-charts.png) ### 协作与审计 - **成员与角色**:空间管理员添加已注册用户、分配角色、移除成员 - **操作日志**:记录创建、更新、删除、状态变更、导入等操作 ### 系统配置 - **模型配置**:多模型管理、连通性测试、按工作空间隔离;兼容 Ollama / vLLM 等 OpenAI 协议端点 - **Agent Skills**:上传技能文件(txt / md)作为 AI 拆解的预设 Prompt 上下文 ![模型配置](images/llm-config.png) ## 技术栈 | 层级 | 技术 | |------|------| | 后端 | JDK 21、Spring Boot 3.4、Spring AI(OpenAI 兼容)、MyBatis-Plus、PostgreSQL | | 前端 | Vue 3、Vite、Pinia、Vue Router、Naive UI、ECharts、vue-i18n | | 通信 | RESTful API + SSE 流式推送 | ## 快速启动 ### 1. 数据库 ```bash createdb tasker psql -d tasker -f backend/sql/public.sql ``` `public.sql` 为完整库结构(含序列、表、索引等)。 注册后使用自己的账号登录。 ### 2. 后端 ```bash cd backend mvn spring-boot:run -Dspring-boot.run.profiles=dev ``` 本地开发使用 `application-dev.yml`(PostgreSQL `localhost:5432`,端口 **8088**)。生产环境通过环境变量覆盖,见 `application-prod.yml`。 大模型连接由数据库 `llm_config` 动态提供,按工作空间构建 `OpenAiChatModel`(兼容 Ollama / vLLM 等 OpenAI 协议端点)。`application.yml` 中 `spring.ai.openai.chat.enabled=false`,无需在配置文件写死 API Key。 ### 3. 前端 ```bash cd frontend npm install npm run dev ``` 前端默认端口 `5173`,Vite 已将 `/api` 代理至 `http://localhost:8088`。 ### 4. 配置本地大模型 在「模型配置」页面添加模型,例如 Ollama: | 项 | 示例 | |----|------| | API 地址 | `http://localhost:11434` | | API 路径 | `/v1/chat/completions` 或 `/api/chat` | | 模型名称 | `llama3` | | 温度 | 0.3~0.5(拆解会自动封顶,见下文) | ## AI 拆解输出质量 系统通过三层机制约束 AI 输出: 1. **Prompt 契约**(`DecomposePromptBuilder`):四段 Markdown + 文末唯一 `tasker.decompose/v2` JSON 代码块 2. **低温度**:拆解时实际温度 = `min(模型配置温度, tasker.ai.decompose-max-temperature)`,默认上限 **0.35** 3. **结构化格式化**(`StructuredResultFormatter`):流式结束后生成 v2 JSON;聊天正文自动隐藏 JSON 块;前端以表格展示;一键导入直接读数组 **推荐实践** | 项 | 建议 | |----|------| | 需求描述 | 写清背景、用户、功能边界、非功能约束 | | Agent Skills | 上传团队模板 / 领域规范,会追加到 Prompt | | 补充 Prompt | `application.yml` → `tasker.ai.default-system-prompt` 填写公司级术语或流程 | | 输出不稳定 | 换更强指令遵循能力的模型,或对同一条需求使用「重新生成」 | ## 角色说明 权限按**工作空间**生效,`sys_user` 仅用于登录,角色由 `workspace_member.role_code` 分配。所有者默认为 `admin`。 | 角色 code | 说明 | |-----------|------| | `admin` | 空间管理员:成员与角色、删除任意工作项 | | `po` | Product Owner:需求优先级、Backlog、成员与分配 | | `pm` | 项目经理(兼容旧数据,建议使用 PO) | | `lead_dev` | Lead Developer:技术方案、任务拆分与评审 | | `developer` | 开发:管理自己负责的 Task,更新状态 | | `qa` | 测试:查看工作项、更新验收标准状态 | | `viewer` | 只读 | ## 典型工作流 1. 在「模型配置」添加本地大模型,在「Agent Skills」上传团队规范(可选) 2. 在「需求拆解」输入需求或上传文档,AI 流式生成结构化结果 3. 点击 **一键创建工作项**,将 Backlog / Story / Task / AC 导入当前空间 4. 在「规划」中查看、编辑、补充工作项,分配负责人 5. 在「任务看板」拖拽 Task 更新状态,处理阻塞与附件 6. 在「缺陷看板」跟踪 Issue,在「我的待办」处理指派给自己的工作 7. 通过「总览」「项目报表」查看进度与分布 ## 项目结构 ``` Tasker/ ├── README.md ├── images/ # 界面截图 ├── backend/ │ ├── docs/ │ │ ├── ARCHITECTURE.md # 架构说明 │ │ └── nginx.conf # 生产部署 Nginx 参考 │ ├── sql/ │ │ └── public.sql # PostgreSQL 完整库结构 │ └── src/main/java/com/tasker/ │ ├── ai/ # Spring AI 封装、拆解 Prompt │ ├── controller/ # REST + SSE 控制器 │ ├── service/ # 业务逻辑 │ └── ... └── frontend/ └── src/ ├── views/ # 页面(总览、拆解、规划、看板等) ├── components/ # 通用组件(看板、抽屉、附件等) ├── api/ # API 封装 ├── stores/ # Pinia 状态 └── i18n/ # 中英文文案 ``` ## 生产部署 后端默认激活 `prod` profile,通过环境变量配置: | 变量 | 说明 | 默认值 | |------|------|--------| | `TASKER_DB_URL` | 数据库 JDBC URL | `jdbc:postgresql://localhost:8030/tasker` | | `TASKER_DB_USERNAME` | 数据库用户名 | `postgres` | | `TASKER_DB_PASSWORD` | 数据库密码 | — | | `TASKER_JWT_SECRET` | JWT 签名密钥 | — | | `TASKER_UPLOAD_DIR` | 文件上传目录 | `/home/tasker/uploads` | | `PORT` | 服务端口 | `8088` | 前端构建: ```bash cd frontend npm run build # 将 dist/ 部署至 Nginx 等静态服务器,反向代理 /api 至后端 ``` Nginx 配置参考 `backend/docs/nginx.conf`(含 SSE 长连接、大文件上传等设置)。 ## 相关文档 - [架构说明](backend/docs/ARCHITECTURE.md)