1385 lines
35 KiB
Markdown
1385 lines
35 KiB
Markdown
---
|
||
name: ai-proj
|
||
description: ai-proj 任务与需求管理。用于创建/查询/更新需求、任务、文档。当用户提到 ai-proj、任务管理、需求管理、REQ-XXX 相关操作时自动激活。
|
||
---
|
||
|
||
# ai-proj MCP 技能
|
||
|
||
通过 MCP (Model Context Protocol) 直接调用 ai-proj 服务,管理任务、需求和文档。
|
||
|
||
## 功能概述
|
||
|
||
| 模块 | 功能 |
|
||
|------|------|
|
||
| **任务管理** | 创建、查询、更新、删除任务,子任务管理 |
|
||
| **需求管理** | 需求全生命周期:草稿→评审→开发→完成 |
|
||
| **文档管理** | 任务文档的创建、编辑、同步 |
|
||
| **计时器** | 任务计时、时间追踪 |
|
||
| **每日聚焦** | 今日任务规划、智能推荐 |
|
||
| **工作笔记** | 知识管理、笔记搜索 |
|
||
| **远程同步** | 本地↔远程数据同步 |
|
||
|
||
---
|
||
|
||
## 快速开始
|
||
|
||
### 常用命令速查
|
||
|
||
```
|
||
# 任务操作
|
||
"创建任务: xxx" → mcp__ai-proj__create_task
|
||
"查看任务列表" → mcp__ai-proj__list_tasks
|
||
"开始任务 123" → mcp__ai-proj__start_task
|
||
"完成任务 123" → mcp__ai-proj__complete_task
|
||
"查找任务 xxx" → mcp__ai-proj__find_task
|
||
|
||
# 需求操作
|
||
"创建需求: xxx" → mcp__ai-proj__create_requirement
|
||
"查看需求列表" → mcp__ai-proj__list_requirements
|
||
"提交需求 123 评审" → mcp__ai-proj__requirement_action (submit)
|
||
"批准需求 123" → mcp__ai-proj__requirement_action (approve)
|
||
|
||
# 文档操作
|
||
"为任务 123 创建文档" → mcp__ai-proj__create-and-attach
|
||
"查看任务 123 的文档" → mcp__ai-proj__get_task_document
|
||
|
||
# 今日聚焦
|
||
"查看今日任务" → mcp__ai-proj__get_daily_focus_tasks
|
||
"添加任务到今日聚焦" → mcp__ai-proj__add_daily_focus_task
|
||
|
||
# 计时器
|
||
"开始计时任务 123" → mcp__ai-proj__start_task_with_timer
|
||
"停止计时" → mcp__ai-proj__stop_timer
|
||
```
|
||
|
||
---
|
||
|
||
## 一、任务管理
|
||
|
||
### 1.1 创建任务
|
||
|
||
**MCP 函数**: `mcp__ai-proj__create_task`
|
||
|
||
**参数**:
|
||
| 参数 | 类型 | 必填 | 说明 |
|
||
|------|------|------|------|
|
||
| title | string | ✅ | 任务标题 |
|
||
| projectId | number | ❌ | 项目ID,默认为1 |
|
||
|
||
**自然语言示例**:
|
||
- "创建任务: 实现用户登录功能"
|
||
- "新建一个任务叫做数据库优化"
|
||
- "在项目2中创建任务: API接口开发"
|
||
|
||
**返回示例**:
|
||
```json
|
||
{
|
||
"id": 5069,
|
||
"title": "实现用户登录功能",
|
||
"status": "todo",
|
||
"project_id": 1
|
||
}
|
||
```
|
||
|
||
### 1.2 查看任务列表
|
||
|
||
**MCP 函数**: `mcp__ai-proj__list_tasks`
|
||
|
||
**参数**:
|
||
| 参数 | 类型 | 必填 | 说明 |
|
||
|------|------|------|------|
|
||
| projectId | number | ❌ | 项目ID筛选 |
|
||
| status | array | ❌ | 状态筛选: draft/planning/todo/in_progress/testing/completed/cancelled/on_hold/suspended/blocked/archived |
|
||
| priority | array | ❌ | 优先级筛选: low/medium/high |
|
||
| search | string | ❌ | 搜索关键词 |
|
||
| page | number | ❌ | 页码,从1开始 |
|
||
| limit | number | ❌ | 每页数量,默认20,最大100 |
|
||
| sort_by | string | ❌ | 排序字段: created_at/updated_at/due_date/priority/title |
|
||
| sort_order | string | ❌ | 排序方向: asc/desc |
|
||
| response_mode | string | ❌ | 响应模式: minimal/compact/full |
|
||
|
||
**自然语言示例**:
|
||
- "查看所有任务"
|
||
- "列出进行中的任务"
|
||
- "查看高优先级任务"
|
||
- "搜索包含登录的任务"
|
||
|
||
### 1.3 查找任务
|
||
|
||
**MCP 函数**: `mcp__ai-proj__find_task`
|
||
|
||
**参数**:
|
||
| 参数 | 类型 | 必填 | 说明 |
|
||
|------|------|------|------|
|
||
| id | number | ❌ | 任务ID(优先使用) |
|
||
| titlePattern | string | ❌ | 标题搜索关键词 |
|
||
|
||
**自然语言示例**:
|
||
- "查找任务 5069"
|
||
- "搜索任务名包含登录的"
|
||
|
||
### 1.4 获取任务详情
|
||
|
||
**MCP 函数**: `mcp__ai-proj__get_detailed_task_info`
|
||
|
||
**参数**:
|
||
| 参数 | 类型 | 必填 | 说明 |
|
||
|------|------|------|------|
|
||
| taskId | number | ✅ | 任务ID |
|
||
|
||
**返回**: 包含父任务、同级任务、子任务的格式化信息
|
||
|
||
### 1.5 更新任务
|
||
|
||
**MCP 函数**: `mcp__ai-proj__update_task`
|
||
|
||
**参数**:
|
||
| 参数 | 类型 | 必填 | 说明 |
|
||
|------|------|------|------|
|
||
| id | number | ✅ | 任务ID |
|
||
| updates | object | ✅ | 更新字段 |
|
||
|
||
**updates 支持的字段**:
|
||
- `title`: 新标题
|
||
- `description`: 新描述
|
||
- `status`: 新状态 (draft/planning/todo/in_progress/testing/completed/cancelled/on_hold/suspended/blocked/archived)
|
||
- `priority`: 新优先级 (low/medium/high)
|
||
- `due_date`: 截止日期 (ISO 8601)
|
||
- `assignee_id`: 负责人ID
|
||
|
||
**自然语言示例**:
|
||
- "把任务 5069 的状态改为进行中"
|
||
- "更新任务 5069 的优先级为高"
|
||
- "修改任务 5069 的标题为: 新标题"
|
||
|
||
### 1.6 任务状态操作
|
||
|
||
**开始任务**: `mcp__ai-proj__start_task`
|
||
```
|
||
参数: id (number) - 任务ID
|
||
说明: 将任务状态改为 in_progress
|
||
```
|
||
|
||
**完成任务**: `mcp__ai-proj__complete_task`
|
||
```
|
||
参数: id (number) - 任务ID
|
||
说明: 将任务状态改为 completed
|
||
```
|
||
|
||
**暂停任务**: `mcp__ai-proj__pause_task`
|
||
```
|
||
参数: id (number) - 任务ID
|
||
说明: 将任务状态改为 on_hold
|
||
```
|
||
|
||
**删除任务**: `mcp__ai-proj__delete_task`
|
||
```
|
||
参数:
|
||
- id (number) - 任务ID
|
||
- force (boolean) - 是否强制删除(包含子任务)
|
||
```
|
||
|
||
### 1.7 子任务管理
|
||
|
||
**创建子任务**: `mcp__ai-proj__create_subtask`
|
||
```
|
||
参数:
|
||
- parentId (number) - 父任务ID
|
||
- title (string) - 子任务标题
|
||
```
|
||
|
||
**创建兄弟任务**: `mcp__ai-proj__create_sibling_task`
|
||
```
|
||
参数:
|
||
- siblingId (number) - 兄弟任务ID(参考任务)
|
||
- title (string) - 新任务标题
|
||
- description (string) - 任务描述
|
||
- priority (string) - 优先级: low/medium/high
|
||
- status (string) - 状态
|
||
```
|
||
|
||
**获取子任务**: `mcp__ai-proj__get_task_children`
|
||
```
|
||
参数: parentId (number) - 父任务ID
|
||
```
|
||
|
||
### 1.8 移动任务
|
||
|
||
**MCP 函数**: `mcp__ai-proj__move_task`
|
||
|
||
**参数**:
|
||
| 参数 | 类型 | 必填 | 说明 |
|
||
|------|------|------|------|
|
||
| id | number | ✅ | 任务ID |
|
||
| targetProjectId | number | ✅ | 目标项目ID |
|
||
|
||
---
|
||
|
||
## 二、需求管理
|
||
|
||
### 2.1 创建需求
|
||
|
||
**MCP 函数**: `mcp__ai-proj__create_requirement`
|
||
|
||
**参数**:
|
||
| 参数 | 类型 | 必填 | 说明 |
|
||
|------|------|------|------|
|
||
| title | string | ✅ | 需求标题 |
|
||
| projectId | number | ✅ | 项目ID |
|
||
| description | string | ❌ | 需求描述 |
|
||
| priority | string | ❌ | 优先级: low/medium/high/urgent |
|
||
| category | string | ❌ | 类别: feature/bug/improvement/documentation/other |
|
||
| allowSelfApprove | boolean | ❌ | 允许自审批(自动审批时需设为 true) |
|
||
|
||
**创建需求必填清单**:
|
||
- [ ] `title` - 需求标题
|
||
- [ ] `projectId` - 所属项目(不要遗漏!)
|
||
- [ ] `priority` - 优先级
|
||
- [ ] `description` - 需求描述
|
||
|
||
> **注意**: 后端已实现默认截止日期:未填 `due_date` 时按优先级自动设置(urgent +1天、high +3天、medium +7天、low +14天)。MCP `create_requirement` 不支持 `due_date` 参数,如需自定义截止日期,创建后通过 REST API 更新。
|
||
|
||
**自然语言示例**:
|
||
- "创建需求: 用户权限管理功能"
|
||
- "新建一个高优先级需求: 性能优化"
|
||
|
||
### 2.2 查看需求列表
|
||
|
||
**MCP 函数**: `mcp__ai-proj__list_requirements`
|
||
|
||
**参数**:
|
||
| 参数 | 类型 | 必填 | 说明 |
|
||
|------|------|------|------|
|
||
| project_id | number | ❌ | 项目ID筛选 |
|
||
| status | array | ❌ | 状态筛选: draft/pending/reviewing/approved/rejected/archived |
|
||
| priority | array | ❌ | 优先级筛选 |
|
||
| category | array | ❌ | 类别筛选 |
|
||
| search | string | ❌ | 搜索关键词 |
|
||
| page | number | ❌ | 页码 |
|
||
| page_size | number | ❌ | 每页数量 |
|
||
| response_mode | string | ❌ | 响应模式: minimal/compact/full |
|
||
|
||
### 2.3 获取需求详情
|
||
|
||
**MCP 函数**: `mcp__ai-proj__get_requirement`
|
||
|
||
**参数**: `id` (number) - 需求ID
|
||
|
||
### 2.4 更新需求
|
||
|
||
**MCP 函数**: `mcp__ai-proj__update_requirement`
|
||
|
||
**参数**:
|
||
| 参数 | 类型 | 必填 | 说明 |
|
||
|------|------|------|------|
|
||
| id | number | ✅ | 需求ID |
|
||
| updates | object | ✅ | 更新字段 |
|
||
|
||
**updates 支持的字段**: title, description, priority, category, allow_self_approve
|
||
|
||
> **已知限制**: MCP `update_requirement` 工具**不支持**更新 `project_id` 和 `due_date` 字段。
|
||
> 如需更新这两个字段,必须直接调用后端 REST API:
|
||
> ```bash
|
||
> # Dev 环境
|
||
> curl -s -X PUT "http://localhost:8080/api/v1/requirements/{id}" \
|
||
> -H "Content-Type: application/json" \
|
||
> -H "X-API-Key: {TASK_API_TOKEN}" \
|
||
> -d '{"project_id": 1, "due_date": "2026-02-27T00:00:00Z"}'
|
||
>
|
||
> # 生产环境
|
||
> curl -s -X PUT "https://ai.pipexerp.com/api/v1/requirements/{id}" \
|
||
> -H "Content-Type: application/json" \
|
||
> -H "X-API-Key: {SYNC_REMOTE_API_KEY}" \
|
||
> -d '{"project_id": 1, "due_date": "2026-02-27T00:00:00Z"}'
|
||
> ```
|
||
> 注意:`due_date` 必须使用 RFC3339 格式(如 `2026-02-27T00:00:00Z`),`YYYY-MM-DD` 格式会返回 BAD_REQUEST。
|
||
|
||
### 2.5 需求工作流
|
||
|
||
**MCP 函数**: `mcp__ai-proj__requirement_action`
|
||
|
||
**参数**:
|
||
| 参数 | 类型 | 必填 | 说明 |
|
||
|------|------|------|------|
|
||
| id | number | ✅ | 需求ID |
|
||
| action | string | ✅ | 操作类型: submit/approve/reject/withdraw/archive |
|
||
| reason | string | ❌ | 拒绝原因(reject时必填) |
|
||
| comment | string | ❌ | 批准意见 |
|
||
|
||
**工作流状态图**:
|
||
```
|
||
draft → [submit] → pending → [approve] → approved
|
||
→ [reject] → rejected
|
||
pending → [withdraw] → draft
|
||
approved → [archive] → archived
|
||
```
|
||
|
||
**自然语言示例**:
|
||
- "提交需求 123 进行评审"
|
||
- "批准需求 123"
|
||
- "拒绝需求 123,原因:需求不完整"
|
||
- "撤回需求 123"
|
||
- "归档需求 123"
|
||
|
||
### 2.6 需求-任务关联
|
||
|
||
**关联任务到需求**: `mcp__ai-proj__link_tasks_to_requirement`
|
||
```
|
||
参数:
|
||
- requirementId (number) - 需求ID
|
||
- taskIds (array) - 任务ID列表
|
||
- linkComment (string) - 关联备注
|
||
```
|
||
|
||
**取消关联**: `mcp__ai-proj__unlink_task_from_requirement`
|
||
```
|
||
参数:
|
||
- requirementId (number) - 需求ID
|
||
- taskId (number) - 任务ID
|
||
```
|
||
|
||
**获取需求关联的任务**: `mcp__ai-proj__get_requirement_tasks`
|
||
```
|
||
参数:
|
||
- requirementId (number) - 需求ID
|
||
- page, page_size - 分页参数
|
||
```
|
||
|
||
### 2.7 需求统计与历史
|
||
|
||
**获取统计**: `mcp__ai-proj__get_requirement_statistics`
|
||
```
|
||
参数: id (number) - 需求ID
|
||
返回: 关联任务数、完成率等统计信息
|
||
```
|
||
|
||
**获取历史**: `mcp__ai-proj__get_requirement_history`
|
||
```
|
||
参数: id (number), page, page_size
|
||
返回: 需求操作历史记录
|
||
```
|
||
|
||
---
|
||
|
||
## 三、文档管理
|
||
|
||
### 3.1 创建任务文档
|
||
|
||
**MCP 函数**: `mcp__ai-proj__create-and-attach`
|
||
|
||
**参数**:
|
||
| 参数 | 类型 | 必填 | 说明 |
|
||
|------|------|------|------|
|
||
| taskId | number | ✅ | 任务ID |
|
||
| content | string | ✅ | 文档内容(Markdown格式) |
|
||
| title | string | ❌ | 文档标题 |
|
||
| projectId | number | ❌ | 项目ID |
|
||
|
||
**自然语言示例**:
|
||
- "为任务 5069 创建PRD文档"
|
||
- "给任务 5069 添加开发计划文档"
|
||
|
||
### 3.2 追加文档内容
|
||
|
||
**MCP 函数**: `mcp__ai-proj__append-document-content`
|
||
|
||
**参数**:
|
||
| 参数 | 类型 | 必填 | 说明 |
|
||
|------|------|------|------|
|
||
| taskId | number | ✅ | 任务ID |
|
||
| documentId | number | ✅ | 文档ID |
|
||
| content | string | ✅ | 追加内容(Markdown) |
|
||
| projectId | number | ❌ | 项目ID |
|
||
|
||
### 3.3 获取文档
|
||
|
||
**获取元数据**: `mcp__ai-proj__get_task_document_meta`
|
||
```
|
||
参数: taskId (number)
|
||
返回: 文档元数据(不含完整内容,节省token)
|
||
```
|
||
|
||
**获取内容**: `mcp__ai-proj__get_task_document`
|
||
```
|
||
参数:
|
||
- taskId (number) - 任务ID
|
||
- projectId (number) - 项目ID
|
||
- maxLength (number) - 最大返回字符数
|
||
- offset (number) - 起始位置
|
||
```
|
||
|
||
**检查是否有文档**: `mcp__ai-proj__has_task_document`
|
||
```
|
||
参数: taskId (number), projectId (number)
|
||
返回: boolean
|
||
```
|
||
|
||
### 3.4 更新/删除文档
|
||
|
||
**更新文档**: `mcp__ai-proj__update_task_document`
|
||
```
|
||
参数:
|
||
- taskId (number) - 任务ID
|
||
- content (string) - 新内容
|
||
- title (string) - 新标题
|
||
- projectId (number)
|
||
```
|
||
|
||
**删除文档**: `mcp__ai-proj__delete_task_document`
|
||
```
|
||
参数: taskId (number), projectId (number)
|
||
```
|
||
|
||
### 3.5 文档同步
|
||
|
||
**导出到文件**: `mcp__ai-proj__export_task_document_to_file`
|
||
```
|
||
参数:
|
||
- taskId (number)
|
||
- projectId (number)
|
||
- overwrite (boolean) - 是否覆盖,默认true
|
||
导出位置: dev-plans 目录
|
||
```
|
||
|
||
**从文件导入**: `mcp__ai-proj__import_task_document_from_file`
|
||
```
|
||
参数:
|
||
- taskId (number)
|
||
- projectId (number)
|
||
- fileName (string) - 文件名
|
||
- updateIfNewer (boolean) - 仅当文件更新时导入
|
||
- forceOverwrite (boolean) - 强制覆盖
|
||
```
|
||
|
||
**批量同步**: `mcp__ai-proj__sync_task_documents`
|
||
```
|
||
参数:
|
||
- taskIds (array) - 任务ID列表
|
||
- direction (string) - 同步方向: export/import/both
|
||
- forceOverwrite (boolean)
|
||
- projectId (number)
|
||
```
|
||
|
||
---
|
||
|
||
## 四、工作笔记
|
||
|
||
### 4.1 创建工作笔记
|
||
|
||
**MCP 函数**: `mcp__ai-proj__create_work_note`
|
||
|
||
**参数**:
|
||
| 参数 | 类型 | 必填 | 说明 |
|
||
|------|------|------|------|
|
||
| title | string | ✅ | 笔记标题 |
|
||
| content | string | ✅ | 笔记内容(Markdown) |
|
||
| type | string | ❌ | 类型: markdown/text/html |
|
||
| tags | array | ❌ | 标签列表 |
|
||
| status | string | ❌ | 状态: draft/published/archived |
|
||
| visibility | string | ❌ | 可见性: private/team/public |
|
||
|
||
**创建并关联到任务**: `mcp__ai-proj__create-and-attach-work-note`
|
||
```
|
||
参数:
|
||
- taskId (number) - 任务ID
|
||
- content (string) - 笔记内容
|
||
- title (string) - 标题
|
||
```
|
||
|
||
### 4.2 查看/搜索笔记
|
||
|
||
**列出笔记**: `mcp__ai-proj__list_work_notes`
|
||
```
|
||
参数: page, limit, status, type
|
||
```
|
||
|
||
**搜索笔记**: `mcp__ai-proj__search_work_notes`
|
||
```
|
||
参数:
|
||
- query (string) - 搜索关键词
|
||
- tags (array) - 标签筛选
|
||
- limit (number)
|
||
```
|
||
|
||
**获取详情**: `mcp__ai-proj__get_work_note`
|
||
```
|
||
参数: id (number)
|
||
```
|
||
|
||
### 4.3 更新笔记
|
||
|
||
**MCP 函数**: `mcp__ai-proj__update_work_note`
|
||
|
||
**参数**:
|
||
| 参数 | 类型 | 必填 | 说明 |
|
||
|------|------|------|------|
|
||
| id | number | ✅ | 笔记ID |
|
||
| updates | object | ✅ | 更新字段 |
|
||
|
||
---
|
||
|
||
## 五、计时器
|
||
|
||
### 5.1 基本计时
|
||
|
||
**开始计时**: `mcp__ai-proj__start_timer`
|
||
```
|
||
参数:
|
||
- taskId (number) - 任务ID
|
||
- description (string) - 计时描述
|
||
```
|
||
|
||
**停止计时**: `mcp__ai-proj__stop_timer`
|
||
```
|
||
参数: taskId (number) - 可选,不指定则停止所有计时
|
||
```
|
||
|
||
**获取当前计时**: `mcp__ai-proj__get_current_timer`
|
||
```
|
||
无参数
|
||
返回: 当前正在进行的计时器信息
|
||
```
|
||
|
||
**获取活跃计时器**: `mcp__ai-proj__get_active_timers`
|
||
```
|
||
无参数
|
||
返回: 所有 running/paused 状态的计时器
|
||
```
|
||
|
||
### 5.2 智能计时
|
||
|
||
**启动任务并计时**: `mcp__ai-proj__start_task_with_timer`
|
||
```
|
||
参数:
|
||
- taskIdOrTitle (number|string) - 任务ID或标题(支持模糊匹配)
|
||
- timerDescription (string) - 计时描述
|
||
- projectId (number)
|
||
功能: 自动开始任务并启动计时器
|
||
```
|
||
|
||
**切换任务**: `mcp__ai-proj__switch_to_task`
|
||
```
|
||
参数:
|
||
- newTaskTitle (string) - 任务标题(支持模糊匹配)
|
||
- projectId (number)
|
||
功能: 停止当前计时,切换到新任务并开始计时
|
||
```
|
||
|
||
**自然语言示例**:
|
||
- "开始任务 登录功能开发 并计时"
|
||
- "切换到 API开发 任务"
|
||
- "停止计时"
|
||
|
||
---
|
||
|
||
## 六、每日聚焦
|
||
|
||
### 6.1 查看今日任务
|
||
|
||
**MCP 函数**: `mcp__ai-proj__get_daily_focus_tasks`
|
||
|
||
**参数**:
|
||
| 参数 | 类型 | 必填 | 说明 |
|
||
|------|------|------|------|
|
||
| date | string | ❌ | 日期 (YYYY-MM-DD) |
|
||
| status | string | ❌ | 状态筛选: active/completed/removed |
|
||
| priority | string | ❌ | 优先级筛选 |
|
||
| include_suggestions | boolean | ❌ | 是否包含智能推荐 |
|
||
|
||
### 6.2 添加任务到今日聚焦
|
||
|
||
**单个添加**: `mcp__ai-proj__add_daily_focus_task`
|
||
```
|
||
参数:
|
||
- task_id (number) - 任务ID
|
||
- priority (string) - 优先级: critical/high/medium/low
|
||
- estimated_duration_minutes (number) - 预估时长
|
||
- notes (string) - 备注
|
||
- focus_date (string) - 聚焦日期
|
||
```
|
||
|
||
**批量添加**: `mcp__ai-proj__batch_add_daily_focus_tasks`
|
||
```
|
||
参数:
|
||
- task_ids (array) - 任务ID列表
|
||
- priority (string) - 统一优先级
|
||
- notes (string) - 统一备注
|
||
- focus_date (string)
|
||
```
|
||
|
||
**快速添加当前任务**: `mcp__ai-proj__quick_add_current_task`
|
||
```
|
||
参数:
|
||
- priority (string) - 优先级,默认high
|
||
- notes (string)
|
||
功能: 将当前正在进行的任务添加到今日聚焦
|
||
```
|
||
|
||
### 6.3 管理今日任务
|
||
|
||
**更新**: `mcp__ai-proj__update_daily_focus_task`
|
||
```
|
||
参数:
|
||
- id (number) - Daily Focus任务ID
|
||
- priority, estimated_duration_minutes, notes
|
||
```
|
||
|
||
**移除**: `mcp__ai-proj__remove_daily_focus_task`
|
||
```
|
||
参数: id (number)
|
||
```
|
||
|
||
**完成**: `mcp__ai-proj__complete_daily_focus_task`
|
||
```
|
||
参数: id (number)
|
||
```
|
||
|
||
**聚焦并计时**: `mcp__ai-proj__focus_task_with_timer`
|
||
```
|
||
参数:
|
||
- daily_focus_task_id (number)
|
||
- timer_description (string)
|
||
```
|
||
|
||
**清理已完成**: `mcp__ai-proj__clear_completed_tasks`
|
||
```
|
||
参数:
|
||
- date (string) - 日期
|
||
- confirm (boolean) - 必须设为true
|
||
```
|
||
|
||
### 6.4 统计与推荐
|
||
|
||
**获取统计**: `mcp__ai-proj__get_daily_focus_stats`
|
||
```
|
||
参数:
|
||
- date (string)
|
||
- period (string) - 统计周期: daily/weekly/monthly
|
||
```
|
||
|
||
**获取任务推荐**: `mcp__ai-proj__get_task_recommendations`
|
||
```
|
||
参数:
|
||
- date (string)
|
||
- limit (number) - 推荐数量
|
||
- exclude_existing (boolean) - 排除已存在任务
|
||
返回: 基于优先级、截止日期等的智能推荐
|
||
```
|
||
|
||
---
|
||
|
||
## 七、项目管理
|
||
|
||
### 7.1 查看项目列表
|
||
|
||
**MCP 函数**: `mcp__ai-proj__list_projects`
|
||
|
||
**参数**:
|
||
| 参数 | 类型 | 必填 | 说明 |
|
||
|------|------|------|------|
|
||
| status | string | ❌ | 状态筛选: active/inactive/planning/on_hold/completed/cancelled/archived |
|
||
| search | string | ❌ | 搜索关键词 |
|
||
| page | number | ❌ | 页码 |
|
||
| pageSize | number | ❌ | 每页数量 |
|
||
| sortBy | string | ❌ | 排序字段: created_at/updated_at/name/priority |
|
||
| sortOrder | string | ❌ | 排序方向: asc/desc |
|
||
|
||
### 7.2 创建项目
|
||
|
||
**MCP 函数**: `mcp__ai-proj__create_project`
|
||
|
||
**参数**:
|
||
| 参数 | 类型 | 必填 | 说明 |
|
||
|------|------|------|------|
|
||
| name | string | ✅ | 项目名称 |
|
||
| description | string | ❌ | 项目描述 |
|
||
|
||
---
|
||
|
||
## 八、项目手册
|
||
|
||
### 8.1 查看手册列表
|
||
|
||
**MCP 函数**: `mcp__ai-proj__list_manuals`
|
||
|
||
**参数**:
|
||
| 参数 | 类型 | 必填 | 说明 |
|
||
|------|------|------|------|
|
||
| projectId | number | ✅ | 项目ID |
|
||
| status | string | ❌ | 状态筛选: draft/published/archived |
|
||
| parentId | number | ❌ | 父级手册ID(获取子级列表) |
|
||
| search | string | ❌ | 搜索关键词(标题或描述) |
|
||
|
||
**自然语言示例**:
|
||
- "查看项目手册列表"
|
||
- "列出已发布的手册"
|
||
- "查看手册 5 的子章节"
|
||
|
||
### 8.2 创建手册
|
||
|
||
**MCP 函数**: `mcp__ai-proj__create_manual`
|
||
|
||
**参数**:
|
||
| 参数 | 类型 | 必填 | 说明 |
|
||
|------|------|------|------|
|
||
| projectId | number | ✅ | 项目ID |
|
||
| title | string | ✅ | 手册标题 |
|
||
| content | string | ❌ | 手册内容(Markdown格式) |
|
||
| description | string | ❌ | 手册简介 |
|
||
| parentId | number | ❌ | 父级手册ID(用于创建子章节) |
|
||
| status | string | ❌ | 状态: draft/published,默认draft |
|
||
|
||
**自然语言示例**:
|
||
- "创建项目手册: API 开发规范"
|
||
- "在手册 5 下创建子章节: 接口设计规范"
|
||
- "创建并发布手册: 前端开发规范"
|
||
|
||
### 8.3 获取手册详情
|
||
|
||
**MCP 函数**: `mcp__ai-proj__get_manual`
|
||
|
||
**参数**: `id` (number) - 手册ID
|
||
|
||
**返回**: 完整的手册内容(Markdown格式)
|
||
|
||
**自然语言示例**:
|
||
- "查看手册 5 的内容"
|
||
- "显示 API 开发规范手册"
|
||
|
||
### 8.4 更新手册
|
||
|
||
**MCP 函数**: `mcp__ai-proj__update_manual`
|
||
|
||
**参数**:
|
||
| 参数 | 类型 | 必填 | 说明 |
|
||
|------|------|------|------|
|
||
| id | number | ✅ | 手册ID |
|
||
| title | string | ❌ | 新标题 |
|
||
| content | string | ❌ | 新内容(Markdown格式) |
|
||
| description | string | ❌ | 新简介 |
|
||
| status | string | ❌ | 新状态: draft/published/archived |
|
||
|
||
**自然语言示例**:
|
||
- "更新手册 5 的内容"
|
||
- "发布手册 5"
|
||
- "归档手册 5"
|
||
|
||
### 8.5 搜索手册
|
||
|
||
**MCP 函数**: `mcp__ai-proj__search_manuals`
|
||
|
||
**参数**:
|
||
| 参数 | 类型 | 必填 | 说明 |
|
||
|------|------|------|------|
|
||
| projectId | number | ✅ | 项目ID |
|
||
| query | string | ✅ | 搜索关键词 |
|
||
|
||
**自然语言示例**:
|
||
- "搜索项目手册中包含 API 的文档"
|
||
- "查找数据库相关的手册"
|
||
|
||
---
|
||
|
||
## 九、报告与时间线
|
||
|
||
### 9.1 获取日报
|
||
|
||
**MCP 函数**: `mcp__ai-proj__get_daily_work_report`
|
||
|
||
**参数**: `projectId` (number) - 项目ID,默认为1
|
||
|
||
**返回**: 今日工作报告,包含完成任务、进行中任务、时间统计等
|
||
|
||
### 9.2 获取任务时间线
|
||
|
||
**MCP 函数**: `mcp__ai-proj__get_task_timeline`
|
||
|
||
**参数**:
|
||
| 参数 | 类型 | 必填 | 说明 |
|
||
|------|------|------|------|
|
||
| taskId | number | ✅ | 任务ID |
|
||
| projectId | number | ❌ | 项目ID |
|
||
| limit | number | ❌ | 记录数限制,默认20 |
|
||
| offset | number | ❌ | 偏移量 |
|
||
|
||
---
|
||
|
||
## 十、批量文档操作
|
||
|
||
### 10.1 批量创建文档
|
||
|
||
**MCP 函数**: `mcp__ai-proj__create_batch_documents`
|
||
|
||
**参数**:
|
||
```json
|
||
{
|
||
"documents": [
|
||
{
|
||
"title": "文档标题",
|
||
"content": "Markdown内容",
|
||
"taskId": 5069,
|
||
"attachToTask": true,
|
||
"type": "markdown",
|
||
"status": "draft",
|
||
"tags": ["tag1", "tag2"],
|
||
"relationType": "attachment"
|
||
}
|
||
]
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
## 十一、远程同步
|
||
|
||
### 11.1 任务同步
|
||
|
||
**同步任务**: `mcp__ai-proj__sync_task`
|
||
```
|
||
参数:
|
||
- taskId (number)
|
||
- direction (string) - to_remote/from_remote
|
||
- includeDocument (boolean) - 是否同步文档
|
||
- includeChildren (boolean) - 是否同步子任务
|
||
```
|
||
|
||
**批量同步到远程**: `mcp__ai-proj__batch_sync_tasks_to_remote`
|
||
```
|
||
参数:
|
||
- taskIds (array)
|
||
- includeDocuments (boolean)
|
||
- includeChildren (boolean)
|
||
```
|
||
|
||
**获取同步状态**: `mcp__ai-proj__get_task_sync_status`
|
||
```
|
||
参数: taskId (number)
|
||
```
|
||
|
||
**获取远程同步状态**: `mcp__ai-proj__get_remote_sync_status`
|
||
```
|
||
参数: taskId (number)
|
||
返回: 比较本地和远程版本差异
|
||
```
|
||
|
||
**通过UUID获取任务**: `mcp__ai-proj__get_task_by_uuid`
|
||
```
|
||
参数: uuid (string)
|
||
用途: 跨库同步场景
|
||
```
|
||
|
||
### 11.2 需求同步
|
||
|
||
**同步需求到远程**: `mcp__ai-proj__sync_requirement_to_remote`
|
||
```
|
||
参数:
|
||
- requirementId (number)
|
||
- includeHistory (boolean)
|
||
- includeComments (boolean)
|
||
```
|
||
|
||
**从远程同步需求**: `mcp__ai-proj__sync_requirement_from_remote`
|
||
```
|
||
参数:
|
||
- remoteRequirementId (number)
|
||
- includeHistory (boolean)
|
||
- includeComments (boolean)
|
||
```
|
||
|
||
**批量同步需求**: `mcp__ai-proj__batch_sync_requirements_to_remote`
|
||
```
|
||
参数:
|
||
- requirementIds (array)
|
||
- includeComments (boolean)
|
||
```
|
||
|
||
**同步需求-任务关联**: `mcp__ai-proj__sync_requirement_task_links`
|
||
```
|
||
参数:
|
||
- linkUUIDs (array) - 关联关系的UUID列表
|
||
- forceUpdate (boolean)
|
||
```
|
||
|
||
**同步任务的需求关联**: `mcp__ai-proj__sync_task_links_to_remote`
|
||
```
|
||
参数: taskId (number)
|
||
```
|
||
|
||
---
|
||
|
||
## 十二、开发工具
|
||
|
||
### 12.1 快速登录
|
||
|
||
**MCP 函数**: `mcp__ai-proj__dev_quick_login`
|
||
|
||
**参数**: `username` (string) - 用户名,默认qiudl
|
||
|
||
**说明**: 仅在开发环境(APP_ENV=development/dev)有效,自动获取JWT
|
||
|
||
---
|
||
|
||
## 自然语言操作示例
|
||
|
||
### 任务管理
|
||
|
||
| 用户说 | 调用函数 |
|
||
|--------|----------|
|
||
| "创建一个任务叫做登录功能开发" | `create_task` |
|
||
| "查看所有进行中的任务" | `list_tasks` |
|
||
| "开始任务 5069" | `start_task` |
|
||
| "完成任务 5069" | `complete_task` |
|
||
| "暂停任务 5069" | `pause_task` |
|
||
| "把任务 5069 移到项目2" | `move_task` |
|
||
| "给任务 5069 创建子任务: 数据库设计" | `create_subtask` |
|
||
|
||
### 需求管理
|
||
|
||
| 用户说 | 调用函数 |
|
||
|--------|----------|
|
||
| "创建需求: 用户权限管理" | `create_requirement` |
|
||
| "查看待审核的需求" | `list_requirements` |
|
||
| "提交需求 123 评审" | `requirement_action (submit)` |
|
||
| "批准需求 123" | `requirement_action (approve)` |
|
||
| "拒绝需求 123,原因是需求不完整" | `requirement_action (reject)` |
|
||
| "将任务 5069 关联到需求 123" | `link_tasks_to_requirement` |
|
||
|
||
### 文档操作
|
||
|
||
| 用户说 | 调用函数 |
|
||
|--------|----------|
|
||
| "为任务 5069 创建PRD文档" | `create-and-attach` |
|
||
| "查看任务 5069 的文档" | `get_task_document` |
|
||
| "更新任务 5069 的文档" | `update_task_document` |
|
||
| "导出任务 5069 的文档到文件" | `export_task_document_to_file` |
|
||
|
||
### 计时与聚焦
|
||
|
||
| 用户说 | 调用函数 |
|
||
|--------|----------|
|
||
| "开始计时任务 5069" | `start_task_with_timer` |
|
||
| "停止计时" | `stop_timer` |
|
||
| "查看今日任务" | `get_daily_focus_tasks` |
|
||
| "把任务 5069 添加到今日聚焦" | `add_daily_focus_task` |
|
||
| "生成今日工作报告" | `get_daily_work_report` |
|
||
|
||
---
|
||
|
||
## 注意事项
|
||
|
||
1. **项目ID默认值**: 大多数函数的 `projectId` 默认为 1
|
||
2. **响应模式**: 使用 `response_mode: minimal` 可减少返回数据量
|
||
3. **分页**: 大量数据请使用分页参数 `page` 和 `limit`
|
||
4. **状态流转**: 任务和需求都有状态机,注意状态转换规则
|
||
5. **同步方向**: 远程同步时注意 `to_remote` 和 `from_remote` 方向
|
||
6. **计时器**: 同一时间只能有一个活跃计时器
|
||
|
||
---
|
||
|
||
## 用户管理
|
||
|
||
> **重要**: 创建数据库用户时必须使用 bcrypt **cost 12** 进行密码哈希。
|
||
|
||
详细的用户管理流程请参考:
|
||
- **ops-tools/SKILL.md** - "AI-Proj 用户管理" 章节
|
||
- **ops-tools/ai-proj-deploy.md** - "用户管理" 章节
|
||
|
||
**快速参考**:
|
||
```bash
|
||
# 生成密码哈希(cost 12)
|
||
cd /path/to/new-ai-proj/backend
|
||
cat > /tmp/genhash.go << 'EOF'
|
||
package main
|
||
import ("fmt"; "golang.org/x/crypto/bcrypt")
|
||
func main() {
|
||
hash, _ := bcrypt.GenerateFromPassword([]byte("密码"), 12)
|
||
fmt.Println(string(hash))
|
||
}
|
||
EOF
|
||
go run /tmp/genhash.go
|
||
```
|
||
|
||
**常见错误**:使用 cost 10 生成的哈希无法登录(后端 DefaultCost=12)
|
||
|
||
**已创建的系统用户**:
|
||
|
||
| 用户名 | 邮箱 | user_type | role | 创建时间 |
|
||
|--------|------|-----------|------|----------|
|
||
| qiudl | qiudl@zhiyuncai.com | system | admin | - |
|
||
| jiaxiang | jiaxiang@joylodging.com | system | admin | 2026-01 |
|
||
| haiqing | haiqing@joylodging.com | system | admin | 2026-02 |
|
||
|
||
> 注意:密码信息不在文档中记录,如需重置请参考 ops-tools 技能文档
|
||
|
||
---
|
||
|
||
## Google 日历集成配置
|
||
|
||
### 环境变量
|
||
|
||
生产环境需要配置以下环境变量(`.env` 文件):
|
||
|
||
```bash
|
||
GOOGLE_CLIENT_ID=<你的Client ID>.apps.googleusercontent.com
|
||
GOOGLE_CLIENT_SECRET=GOCSPX-<你的Client Secret>
|
||
GOOGLE_PROJECT_ID=<你的项目ID>
|
||
GOOGLE_REDIRECT_URL=https://ai.pipexerp.com/api/v1/auth/google/callback
|
||
GOOGLE_CALENDAR_SCOPES=https://www.googleapis.com/auth/calendar
|
||
```
|
||
|
||
### 获取 Google OAuth 凭据
|
||
|
||
#### 1. 创建 Google Cloud 项目
|
||
|
||
1. 访问 [Google Cloud Console](https://console.cloud.google.com/)
|
||
2. 创建新项目或选择现有项目
|
||
3. 记录项目 ID
|
||
|
||
#### 2. 启用 API
|
||
|
||
1. 进入 **APIs & Services** → **Library**
|
||
2. 搜索并启用 **Google Calendar API**
|
||
|
||
#### 3. 配置 OAuth 同意屏幕
|
||
|
||
1. 进入 **APIs & Services** → **OAuth consent screen**
|
||
2. 选择 **External** → 创建
|
||
3. 填写应用名称、支持邮箱
|
||
4. 添加 Scopes:
|
||
- `https://www.googleapis.com/auth/calendar`
|
||
- `https://www.googleapis.com/auth/calendar.events`
|
||
5. 添加测试用户(开发阶段)
|
||
|
||
#### 4. 创建 OAuth 凭据
|
||
|
||
1. 进入 **APIs & Services** → **Credentials**
|
||
2. 点击 **+ CREATE CREDENTIALS** → **OAuth client ID**
|
||
3. 选择 **Web application**
|
||
4. 配置:
|
||
- **Name**: `AI-Proj Web Client`
|
||
- **Authorized JavaScript origins**: `https://ai.pipexerp.com`
|
||
- **Authorized redirect URIs**: `https://ai.pipexerp.com/api/v1/auth/google/callback`
|
||
5. 复制 Client ID 和 Client Secret
|
||
|
||
### 部署配置
|
||
|
||
```bash
|
||
# 更新生产环境配置
|
||
ssh tools_ai_proj "cd /home/ubuntu/apps/new-ai-proj && \
|
||
sed -i 's|GOOGLE_CLIENT_ID=.*|GOOGLE_CLIENT_ID=<CLIENT_ID>|' .env && \
|
||
sed -i 's|GOOGLE_CLIENT_SECRET=.*|GOOGLE_CLIENT_SECRET=<CLIENT_SECRET>|' .env && \
|
||
sed -i 's|GOOGLE_PROJECT_ID=.*|GOOGLE_PROJECT_ID=<PROJECT_ID>|' .env && \
|
||
docker restart ai_backend_prod"
|
||
```
|
||
|
||
### 数据库迁移
|
||
|
||
Google 日历集成需要以下表:
|
||
|
||
```sql
|
||
-- OAuth 状态表(CSRF 保护)
|
||
CREATE TABLE oauth_states (
|
||
id SERIAL PRIMARY KEY,
|
||
state VARCHAR(255) NOT NULL UNIQUE,
|
||
user_id INTEGER NOT NULL,
|
||
expires_at TIMESTAMP NOT NULL,
|
||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
||
);
|
||
|
||
-- 项目日历配置表
|
||
-- 见 migrations/20260210_01_project_calendar.sql
|
||
|
||
-- 日历 Webhook 表
|
||
-- 见 migrations/20260211_01_calendar_webhooks.sql
|
||
```
|
||
|
||
### 当前配置(2026-02)
|
||
|
||
| 配置项 | 值 |
|
||
|--------|-----|
|
||
| Project ID | `project-bfa64769-1595-4c41-964` |
|
||
| Client ID | `78721641513-...apps.googleusercontent.com` |
|
||
| Redirect URL | `https://ai.pipexerp.com/api/v1/auth/google/callback` |
|
||
|
||
> **注意**: Client Secret 不在文档中记录,存储在生产环境 `.env` 文件中
|
||
|
||
---
|
||
|
||
## 十三、最佳实践与故障排查
|
||
|
||
### 13.1 创建需求的最佳实践
|
||
|
||
#### 问题:description 字段"请求数据格式错误"
|
||
|
||
**症状**:
|
||
```json
|
||
{
|
||
"code": "BAD_REQUEST",
|
||
"message": "请求数据格式错误"
|
||
}
|
||
```
|
||
|
||
**常见原因**:
|
||
|
||
| 原因 | 解决方案 |
|
||
|------|----------|
|
||
| **description 内容过长** | API 可能有字段长度限制,逐步测试找到上限 |
|
||
| **Markdown 特殊字符** | 检查是否有未转义的特殊字符(如反引号、引号) |
|
||
| **JSON 转义问题** | 确保 JSON 字符串正确转义(尤其是换行符、引号) |
|
||
| **多层嵌套的代码块** | Markdown 代码块中的反引号可能导致解析失败 |
|
||
|
||
**正确的调试流程**:
|
||
|
||
```python
|
||
# ❌ 错误做法:直接简化内容
|
||
"创建失败 → 简化 description → 成功"
|
||
问题:丢失了重要的需求细节
|
||
|
||
# ✅ 正确做法:找到根本原因
|
||
步骤 1: 测试空描述
|
||
create_requirement(description="")
|
||
→ 是否成功?
|
||
|
||
步骤 2: 测试纯文本
|
||
create_requirement(description="简单文本")
|
||
→ 是否成功?
|
||
|
||
步骤 3: 测试简单 Markdown
|
||
create_requirement(description="# 标题\n\n内容")
|
||
→ 是否成功?
|
||
|
||
步骤 4: 逐步增加复杂度
|
||
create_requirement(description="包含代码块的Markdown")
|
||
create_requirement(description="包含表格的Markdown")
|
||
create_requirement(description="完整的技术方案")
|
||
→ 找到临界点
|
||
|
||
步骤 5: 根据根因选择方案
|
||
- 如果是长度限制 → 分段或使用附件
|
||
- 如果是特殊字符 → 转义或替换
|
||
- 如果是 Markdown → 简化格式或转纯文本
|
||
```
|
||
|
||
**推荐方案**:
|
||
|
||
**方案 A:完整的需求 + 关联文档**
|
||
```typescript
|
||
// 1. 创建需求(简洁描述)
|
||
const req = await create_requirement({
|
||
title: "思源笔记增加 MCP 协议层支持",
|
||
description: "核心方案:创建独立的 siyuan-mcp-bridge 服务...",
|
||
projectId: 162
|
||
});
|
||
|
||
// 2. 创建详细的技术方案文档
|
||
const doc = await create_requirement_document({
|
||
requirementId: req.id,
|
||
title: "技术方案详细设计",
|
||
content: `
|
||
# 需求背景
|
||
...(完整的技术方案,3000+ 字)
|
||
|
||
# 架构设计
|
||
...
|
||
|
||
# 实施路线图
|
||
...
|
||
`
|
||
});
|
||
```
|
||
|
||
**方案 B:分段创建需求描述**
|
||
```typescript
|
||
// 1. 创建需求(基本信息)
|
||
const req = await create_requirement({
|
||
title: "思源笔记增加 MCP 协议层支持",
|
||
description: "简短描述",
|
||
projectId: 162
|
||
});
|
||
|
||
// 2. 更新需求(逐步添加内容)
|
||
await update_requirement({
|
||
id: req.id,
|
||
updates: {
|
||
description: description_part1 // 添加背景
|
||
}
|
||
});
|
||
|
||
await update_requirement({
|
||
id: req.id,
|
||
updates: {
|
||
description: description_part1 + description_part2 // 添加架构
|
||
}
|
||
});
|
||
```
|
||
|
||
#### 经验总结
|
||
|
||
**原则 1:业务优先于技术**
|
||
- ❌ 为了创建成功而牺牲需求完整性
|
||
- ✅ 找到技术方案来满足业务需求
|
||
|
||
**原则 2:追根溯源**
|
||
- ❌ 基于假设快速妥协("可能是太长了")
|
||
- ✅ 通过调试找到真正的错误原因
|
||
|
||
**原则 3:给用户选择权**
|
||
- ❌ 自作主张简化内容
|
||
- ✅ 询问用户的偏好和优先级
|
||
|
||
**原则 4:保留完整信息**
|
||
- ❌ 简化后的需求缺少关键信息
|
||
- ✅ 通过关联文档保留详细内容
|
||
|
||
### 13.2 需求描述的格式建议
|
||
|
||
**推荐的需求描述结构**(简洁版):
|
||
|
||
```markdown
|
||
## 核心方案
|
||
1. 关键点 1(一句话)
|
||
2. 关键点 2(一句话)
|
||
3. 关键点 3(一句话)
|
||
|
||
## 技术架构
|
||
- 第1层:组件名(职责)
|
||
- 第2层:组件名(职责)
|
||
- 第3层:组件名(职责)
|
||
|
||
## 实施周期
|
||
X周(阶段1 + 阶段2 + 阶段3)
|
||
```
|
||
|
||
**详细内容放在关联文档**:
|
||
- 需求背景与业务价值
|
||
- 详细的技术方案
|
||
- 实施路线图与时间规划
|
||
- 风险评估与应对措施
|
||
- 验收标准
|
||
|
||
**Markdown 格式注意事项**:
|
||
|
||
```markdown
|
||
✅ 安全的格式:
|
||
- 简单的标题(# ## ###)
|
||
- 无序列表(-)
|
||
- 有序列表(1. 2. 3.)
|
||
- 简单的表格
|
||
- 加粗(**text**)
|
||
|
||
⚠️ 可能有问题的格式:
|
||
- 三重反引号代码块(```)
|
||
- HTML 标签
|
||
- 复杂的嵌套列表
|
||
- 大量的特殊字符
|
||
- 超长的单行文本
|
||
```
|
||
|
||
### 13.3 更新需求的最佳实践
|
||
|
||
**使用 update_requirement 补充详细内容**:
|
||
|
||
```typescript
|
||
// 创建需求后,逐步更新描述
|
||
await update_requirement({
|
||
id: 857, // REQ-20260217-0001
|
||
updates: {
|
||
description: `
|
||
## 需求背景
|
||
|
||
### 当前问题
|
||
思源笔记仅提供 REST API 接口,AI 操作复杂...
|
||
|
||
### 业务价值
|
||
为思源笔记添加 MCP 协议层支持,使其能够...
|
||
|
||
## 技术方案
|
||
|
||
### 架构设计
|
||
...(详细内容)
|
||
`
|
||
}
|
||
});
|
||
```
|
||
|
||
**测试长度限制**:
|
||
|
||
```bash
|
||
# 逐步增加内容,找到上限
|
||
第1次: 200字 → 成功
|
||
第2次: 500字 → 成功
|
||
第3次: 1000字 → 成功
|
||
第4次: 2000字 → 成功
|
||
第5次: 5000字 → 失败 ← 找到上限
|
||
|
||
结论: description 字段最大约 3000-4000 字
|
||
```
|
||
|
||
### 13.4 故障排查清单
|
||
|
||
遇到 API 错误时,按以下步骤排查:
|
||
|
||
**步骤 1:分析错误信息**
|
||
```json
|
||
{
|
||
"code": "BAD_REQUEST",
|
||
"message": "请求数据格式错误"
|
||
}
|
||
```
|
||
- [ ] 错误码是什么?(BAD_REQUEST / VALIDATION_ERROR / AUTH_FAILED)
|
||
- [ ] 错误信息是否有具体提示?
|
||
- [ ] 是哪个字段导致的错误?
|
||
|
||
**步骤 2:检查参数格式**
|
||
- [ ] 必填参数是否都提供了?
|
||
- [ ] 参数类型是否正确?(number vs string)
|
||
- [ ] 枚举值是否在允许范围内?
|
||
- [ ] JSON 格式是否正确?
|
||
|
||
**步骤 3:简化测试**
|
||
- [ ] 尝试最小化的参数集
|
||
- [ ] 逐个添加可选参数
|
||
- [ ] 找到导致错误的具体参数
|
||
|
||
**步骤 4:查看后端日志**(如有权限)
|
||
```bash
|
||
# 生产环境日志
|
||
ssh tools_ai_proj "docker logs ai_backend_prod --tail 100"
|
||
|
||
# 开发环境日志
|
||
cd ~/coding/new-ai-proj/backend
|
||
tail -f logs/app.log
|
||
```
|
||
|
||
**步骤 5:参考类似的成功案例**
|
||
- [ ] 查看 SKILL.md 中的示例
|
||
- [ ] 查看之前成功的调用记录
|
||
- [ ] 对比参数差异
|
||
|
||
### 13.5 常见错误与解决方案
|
||
|
||
| 错误 | 可能原因 | 解决方案 |
|
||
|------|----------|----------|
|
||
| `BAD_REQUEST` | 参数格式错误 | 检查参数类型和 JSON 格式 |
|
||
| `VALIDATION_ERROR` | 参数验证失败 | 检查必填字段和枚举值 |
|
||
| `AUTH_FAILED` | 认证失败 | 检查 Token 是否过期 |
|
||
| `PERMISSION_DENIED` | 权限不足 | 检查用户角色和权限 |
|
||
| `NOT_FOUND` | 资源不存在 | 检查 ID 是否正确 |
|
||
| `INTERNAL_ERROR` | 服务器错误 | 查看后端日志排查 |
|
||
|
||
### 13.6 需求 description 长度测试记录
|
||
|
||
**测试日期**: 2026-02-17
|
||
|
||
| 长度 | 格式 | 结果 | 备注 |
|
||
|------|------|------|------|
|
||
| ~200字 | 简单文本 | ✅ 成功 | 核心方案3点 |
|
||
| ~3000字 | 完整 Markdown | ❌ 失败 | "请求数据格式错误" |
|
||
| 待测试 | 1000字 Markdown | ? | 需要进一步测试 |
|
||
| 待测试 | 2000字 Markdown | ? | 需要进一步测试 |
|
||
|
||
**建议**:
|
||
- 需求描述控制在 1000 字以内
|
||
- 详细内容使用关联文档
|
||
- 复杂格式改为纯文本
|