Files
2026-heima-agent-setup/docs/external-agent-skill-specs_v3.md

858 lines
34 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 外部 Coding Agent 技能规范(研发云协同 · 算力分级分流)
> **架构定位**:强模型(TeleAgent)离线生成高质量中间产物 → 弱模型(研发云数字员工)只做机械提交。
>
> **核心原则**:弱模型的工作量降到最低——**读一个清单 + 执行一个动作**,不做语义理解、不做数据解析、不做 API 编排。
>
> **共 4 个域技能 + 1 套交接协议**。技能0(总控路由)不作为独立技能加载,其路由表/决策树/缺失检测规则作为 TeleAgent Agent 核心的 prompt 参考(见附录D)。
---
## 交接协议(Handoff Protocol)—— 弱模型执行层规范
> **这是整个架构的关键层**。TeleAgent 产出中间产物后,通过一个极简清单文件 `.handoff.json` 告诉弱模型"做什么动作、对哪个文件、用什么参数"。弱模型只读清单、逐条执行,不做任何语义理解。
### H.1 交接清单格式(`.handoff.json`)
TeleAgent 每次完成产物生成后,在产物目录下生成一个 `.handoff.json` 文件:
```json
{
"protocol_version": "1.0",
"batch_id": "batch-20260923-001",
"generated_at": "2026-09-23T10:00:00",
"generated_by": "TeleAgent",
"target": "srdcloud-digital-employee",
"actions": [
{
"action_id": "act-001",
"action_type": "upload_file",
"file_path": "PRD-客户跟进提醒.md",
"file_content_type": "markdown",
"params": {
"doc_title": "PRD-客户跟进提醒",
"folder": "Desktop"
},
"version": 1,
"depends_on": null,
"status": "pending"
},
{
"action_id": "act-002",
"action_type": "upload_file",
"file_path": "tech-spec-客户跟进提醒.md",
"file_content_type": "markdown",
"params": {
"doc_title": "技术规约-客户跟进提醒",
"folder": "Desktop"
},
"version": 1,
"depends_on": null,
"status": "pending"
},
{
"action_id": "act-003",
"action_type": "save_html_artifact",
"file_path": "客户管理后台-proto.html",
"file_content_type": "html",
"params": {
"artifact_title": "客户管理后台原型"
},
"version": 1,
"depends_on": null,
"status": "pending"
},
{
"action_id": "act-004",
"action_type": "create_workitems_from_json",
"file_path": "workitems-batch-客户跟进提醒.json",
"file_content_type": "json",
"params": {
"project_id": "从用户上下文获取",
"iteration_id": "从用户上下文获取或null"
},
"version": 1,
"depends_on": null,
"status": "pending"
}
]
}
```
### H.2 弱模型动作目录(仅4种动作,穷举)
弱模型只需要识别以下 4 种 `action_type`,每种对应一个固定的执行流程:
| action_type | 输入文件类型 | 弱模型执行流程 | 研发云 MCP 工具 |
|-------------|-------------|--------------|----------------|
| `upload_file` | .md / .txt | 读取文件内容 → 调用文档上传接口 → 返回文档链接 | `document_upload_to_desktop` |
| `save_html_artifact` | .html | 读取文件内容 → 调用产物写入+发布接口 → 返回产物链接 | `artifact_write` + `artifact_publish` |
| `create_workitems_from_json` | .json | 读取JSON数组 → 逐条调用工作项创建接口 → 返回创建结果 | `workitems_batch_create` |
| `mark_deprecated` | .json | 读取旧版本清单 → 标记旧产物为过期(不删除) → 返回标记结果 | 工作项更新/文档备注 |
> **弱模型不需要理解文件内容**。对于 `create_workitems_from_json`,TeleAgent 已将工作项拆分建议转化为结构化 JSON 数组(见技能4输出格式),弱模型只需逐条 `POST` 到研发云 API。
### H.3 弱模型执行流程(伪代码)
```
// 弱模型收到 .handoff.json 后的执行逻辑
1. 读取 .handoff.json
2. 遍历 actions 数组:
for each action in actions:
if action.status != "pending": skip
if action.depends_on != null:
检查依赖的 action 是否已完成,未完成则跳过(等下一轮)
switch action.action_type:
case "upload_file":
content = read_file(action.file_path)
result = call_mcp("document_upload_to_desktop", {
file_name: action.params.doc_title + ".md",
file_content: content,
folder: action.params.folder
})
action.result = { doc_url: result.url }
action.status = "done"
case "save_html_artifact":
content = read_file(action.file_path)
call_mcp("artifact_write", { filePath: action.file_path, content: content, mode: "final" })
result = call_mcp("artifact_publish", { filePath: action.file_path })
action.result = { artifact_url: result.url }
action.status = "done"
case "create_workitems_from_json":
items = read_json(action.file_path) // 结构化JSON数组,无需解析Markdown
result = call_mcp("workitems_batch_create", { workitems: items })
action.result = { created_count: result.count, items: result.items }
action.status = "done"
case "mark_deprecated":
// 版本更新时标记旧产物
old_actions = read_json(action.file_path)
for each old in old_actions:
// 根据旧action_type执行对应的"标记过期"操作
action.status = "done"
case default:
action.status = "error"
action.error = "unknown action_type: " + action.action_type
3. 输出执行结果摘要(成功数/失败数/跳过数)
4. 将更新后的 .handoff.json(含各action的result和status)返回给用户
```
### H.4 交接失败处理
| 失败场景 | 处理方式 |
|---------|---------|
| 弱模型找不到文件 | action.status = "error",error_message = "file not found: {path}",跳过该条继续执行下一条 |
| 研发云 API 返回错误 | action.status = "error",error_message = API错误信息,跳过继续 |
| 依赖的 action 未完成 | action.status = "blocked",本轮跳过,等待下一轮重试 |
| 弱模型无法识别 action_type | action.status = "error",error_message = "unknown action_type",跳过继续 |
> **关键原则**:单条 action 失败不阻断其他 action 执行。弱模型执行完后输出摘要,用户可决定是否重试失败的 action。
### H.5 版本管理与失效传播
#### 产物版本号
每个产物文件名带版本号:`PRD-{项目名}-v{N}.md`、`tech-spec-{项目名}-v{N}.md`、`{主题}-proto-v{N}.html`、`workitems-batch-{项目名}-v{N}.json`
#### 修改时的失效传播
当 TeleAgent 重新生成某个产物的新版本时,在 `.handoff.json` 中追加一条 `mark_deprecated` action:
```json
{
"action_id": "act-005",
"action_type": "mark_deprecated",
"file_path": "deprecated-清单.json",
"file_content_type": "json",
"params": {
"deprecated_actions": ["act-001"],
"reason": "PRD内容已更新,旧版本标记为deprecated",
"cascade": ["act-002", "act-003", "act-004"]
},
"version": 2,
"depends_on": null,
"status": "pending"
}
```
- `deprecated_actions`:直接标记过期的旧 action
- `cascade`:级联失效的下游 action(如 PRD 改了,架构/原型/拆分都需要重新生成)
- 弱模型执行 `mark_deprecated` 时:对已上传的文档追加备注"已过期,见 v{N+1}";对已创建的工作项更新状态或添加评论"需求已变更,请参考最新PRD"
#### 串联失效规则
| 修改的产物 | 级联失效 | 用户操作 |
|-----------|---------|---------|
| PRD v1 → v2 | 架构 v1、原型 v1、工作项 v1 全部标记 deprecated | TeleAgent 重新生成 v2 链 |
| 架构 v1 → v2 | 原型 v1、工作项 v1 不一定失效(取决于改动范围) | TeleAgent 判断是否级联 |
| 原型 v1 → v2 | 无级联 | 仅原型重新提交 |
| 工作项 v1 → v2 | 无级联 | 弱模型创建新工作项,旧工作项标记 deprecated |
---
## 技能 1:PRD 生成(srdcloud-prd-distilled)
### 1.1 职责
将用户需求描述转化为**结构化产品需求文档(PRD)**,产出为 Markdown 文件 + 交接清单 action。
### 1.2 输入
| 字段 | 类型 | 必填 | 说明 |
|------|------|------|------|
| `requirement_text` | String | 是 | 用户原始需求描述或问需单内容摘要 |
| `project_name` | String | 否 | 项目名称,用于文档命名 |
| `template_override` | String | 否 | 用户自定义模板要求 |
| `reference_docs` | String[] | 否 | 参考文档内容 |
| `tech_constraints_whitelist` | String | 否 | **技术约束白名单**(不压缩、原样传递的关键约束) |
| `version` | Integer | 否 | 版本号,默认1,修改时递增 |
### 1.3 输出
**文件1**:`PRD-{项目名}-v{N}.md`(Markdown 格式)
**文件2**:追加到 `.handoff.json` 的 action:
```json
{
"action_id": "act-{序号}",
"action_type": "upload_file",
"file_path": "PRD-{项目名}-v{N}.md",
"file_content_type": "markdown",
"params": {
"doc_title": "PRD-{项目名}",
"folder": "Desktop"
},
"version": {N},
"depends_on": null,
"status": "pending"
}
```
**标准模板结构**(9 章):
```markdown
## 1. 功能名
[功能名称]
## 2. 需求描述
核心需求的简要描述。
## 3. 项目概述
**项目背景** / **目标用户** / **业务目标** / **关键指标(KPIs)**
## 4. 用户旅程
**触发点** → **第一步** → ... → **结束点**
### 流程图(Mermaid graph TD)
- 判断节点用菱形,流程节点用矩形
- 标注每步执行角色和核心操作
## 5. 功能列表
## 6. 功能详细描述
每个功能:详细描述、实现逻辑、输入、输出
## 7. 页面列表
## 8. 页面详细设计
每个页面:布局、元素、交互、边界条件、错误处理
### 页面结构图(markmap)
- 层级:# 主模块 → ## 页面 → ### 功能区域 → #### 控件 → ##### 规则/反馈
## 9. 统计需求
### 用户行为统计(埋点表)
### 统计指标
```
### 1.4 生成规则
1. 需求不清晰时仅追问一次关键信息
2. 一次写入产物文件
3. 严格按模板结构填充
4. 流程图用 `mermaid graph TD`,页面结构图用 `markmap`
5. 禁止填充文案,验收标准必须可量化
6. **技术约束白名单**:用户在对话中提到的技术栈/数据库/框架等关键词(如"用PostgreSQL不用MySQL""Spring Boot 3.x""部署到K8s")**不压缩、原样写入PRD第6章功能详细描述中**
### 1.5 质量检查清单
- [ ] 9 章完整
- [ ] Mermaid/markmap 语法正确
- [ ] 每个功能有输入/输出/实现逻辑
- [ ] 每个页面有布局/元素/交互/边界条件/错误处理
- [ ] 无填充文案、无编造数据
- [ ] 技术约束白名单内容已原样写入
- [ ] 文件名含版本号 `PRD-{项目名}-v{N}.md`
- [ ] `.handoff.json` 已追加 upload_file action
---
## 技能 2:架构设计文档生成(architecture-design-doc-distilled)
### 2.1 职责
将 PRD 转化为**可据以实现的技术规约**,产出 Markdown 文件 + 交接清单 action。
### 2.2 输入
| 字段 | 类型 | 必填 | 说明 |
|------|------|------|------|
| `prd_content` | String | 是 | PRD 文档内容 |
| `tech_constraints` | String | 否 | 技术约束(从PRD技术约束白名单传递 + 用户补充) |
| `project_name` | String | 否 | 项目名称 |
| `version` | Integer | 否 | 版本号,默认1 |
### 2.3 输出
**文件1**:`tech-spec-{项目名}-v{N}.md`
**文件2**:追加到 `.handoff.json`:
```json
{
"action_id": "act-{序号}",
"action_type": "upload_file",
"file_path": "tech-spec-{项目名}-v{N}.md",
"file_content_type": "markdown",
"params": { "doc_title": "技术规约-{项目名}", "folder": "Desktop" },
"version": {N},
"depends_on": null,
"status": "pending"
}
```
**模板结构**(5章 + 修订历史):
```markdown
# 技术规约
> 状态:📝 草案 | 🧊 已冻结 | ⚠️ 已过期(见v{N+1})
> 版本:v{N}
## 1. 架构设计
- 整体架构 + 技术选型理由 + 部署架构
- 架构图(Mermaid graph TD/LR)
## 2. 模块拆分
| 模块 | 职责 | 依赖 |
- 模块依赖图(Mermaid)
## 3. 接口契约
每个接口:方法/路径、输入、输出(成功/失败)、错误码
## 4. 数据模型
| 字段 | 类型 | 约束 | 说明 |
- ER图(Mermaid erDiagram)
## 5. 验收标准
对应PRD每个功能,可验证的验收点
## 修订历史
| 版本 | 日期 | 变更内容 | 原因 |
```
### 2.4 生成规则
1. 仔细阅读PRD,理解每个功能意图。不清楚的标注 `[待确认]`
2. 架构设计要具体:明确架构类型、选型理由、部署方案
3. 接口契约是硬约束:字段名、类型、错误码都要明确
4. 验收标准要可验证
5. **技术约束优先级**:用户明确指定的技术栈 > PRD技术约束白名单 > TeleAgent推荐
6. 架构图/模块依赖图/ER图必须用 Mermaid
7. 文件名含版本号
### 2.5 质量检查清单
- [ ] 架构设计明确 + 选型理由
- [ ] Mermaid 语法正确
- [ ] 接口契约完整(方法/路径/输入/输出/错误码)
- [ ] 数据模型完整(字段/类型/约束/说明)
- [ ] 验收标准可验证
- [ ] 技术约束白名单内容已采纳
- [ ] 文件名含版本号
- [ ] `.handoff.json` 已追加 action
---
## 技能 3:HTML 原型生成(design-proto-distilled)
### 3.1 职责
根据设计简报,生成**生产级自包含 HTML 原型文件**。
### 3.2 输入(设计简报)
| 字段 | 类型 | 必填 | 说明 |
|------|------|------|------|
| `design_system` | String | 是 | 设计体系(9选1) |
| `platform` | String | 是 | 目标平台(6选1) |
| `page_type` | String | 是 | 页面类型(13种或通用前端) |
| `page_topic` | String | 是 | 页面主题 |
| `target_audience` | String | 否 | 目标受众 |
| `core_content` | String | 是 | 核心内容摘要 |
| `component_library` | String | 否 | 组件库(element-plus/shadcn) |
| `multi_view` | Boolean | 否 | 是否多视图 |
| `version` | Integer | 否 | 版本号,默认1 |
### 3.3 设计体系速查表(9套)
| 名称 | 主色调 | 适用场景 | 关键词 |
|------|--------|---------|--------|
| Neutral Modern | 浅蓝 | 通用极简、B2B | 简约/现代/清爽 |
| Claude | 暖棕 | 文档、内容型 | 中文/博客/温暖 |
| ElevenLabs | 青蓝 | 音频、轻量化 | 音频/语音/优雅 |
| Hugging Face | 暖黄 | 开发者工具、ML | ML/开源/模型 |
| MiniMax | 淡紫 | 数字人、多模态 | 海螺/视频/中国AI |
| Runway | 亮蓝 | 创意AIGC | 电影/创意/影视 |
| OpenAI | 极简白 | AI研究 | AI/OpenAI/研究 |
| Ant | 商务蓝 | 政企金融、后台 | 后台/数据/企业 |
| Colorful | 灼橙 | 多彩创意 | 多彩/活泼/创意 |
> 默认:Neutral Modern
### 3.4 平台速查表(6种)
| 名称 | 关键词 | 默认联动 |
|------|--------|---------|
| 响应式Web | 分享/多端/落地页 | Neutral Modern |
| 桌面Web | 桌面/后台/大屏 | Ant |
| iOS应用 | iPhone/iOS | Neutral Modern |
| Android应用 | Android | Neutral Modern |
| 平板应用 | iPad/平板 | Neutral Modern |
| 桌面应用 | Electron/客户端 | Neutral Modern |
> 默认:响应式Web
### 3.5 页面类型速查表
| 关键词 | 页面类型 | 推荐设计体系 | 推荐平台 |
|--------|---------|-------------|---------|
| FAQ/帮助中心 | faq-page | OpenAI | 响应式Web |
| 登录/注册 | login-flow | Neutral Modern | 响应式Web |
| 简历/CV | resume-modern | Claude | 响应式Web |
| 文章/博客 | article-magazine | Claude | 响应式Web |
| 数据报告/周报 | data-report | Ant | 桌面Web |
| 管理后台/仪表盘 | dashboard | Ant | 桌面Web |
| SaaS/落地页 | saas-landing | OpenAI | 响应式Web |
| 定价/套餐 | pricing-page | Neutral Modern | 响应式Web |
| 邮件/newsletter | email-marketing | MiniMax | 响应式Web |
| 海报/分享图 | poster-hero | Runway | 桌面Web |
| 看板/kanban | kanban-board | Ant | 桌面Web |
| 发票/账单 | invoice | Neutral Modern | 响应式Web |
| 文档/guide | docs-page | OpenAI | 桌面Web |
| 原型/demo/页面 | 通用前端 | 按关键词推断 | 按关键词推断 |
### 3.6 输出
**文件1**:`{主题}-proto-v{N}.html`(单个自包含 HTML)
**文件2**:追加到 `.handoff.json`:
```json
{
"action_id": "act-{序号}",
"action_type": "save_html_artifact",
"file_path": "{主题}-proto-v{N}.html",
"file_content_type": "html",
"params": { "artifact_title": "{主题}原型" },
"version": {N},
"depends_on": null,
"status": "pending"
}
```
### 3.7 分步生成策略(解决单次生成可靠性问题)
> **不强制一次写入**。允许分步生成 + 自检修复,提高 P0 硬门控通过率。
#### 生成步骤
| 步骤 | 产出 | 说明 |
|------|------|------|
| Step 1:骨架 | HTML骨架 + `:root`令牌注入 + `<meta>`平台约束 | 基础结构,不含页面内容 |
| Step 2:内容 | `<body>`页面内容 + 语义化标签 + 内联SVG | 注入页面技能定义的区块 |
| Step 3:交互 | 多视图JS + 弹窗JS + 分段控件JS | 交互逻辑注入 |
| Step 4:自检 | P0门控逐项检查 → 修复不通过项 | 内部静默执行 |
| Step 5:交付 | 写入文件 + 追加handoff action | 最终产物 |
#### 自检修复规则
- P0 不通过项 → **就地修复后重新检查**,最多3轮修复
- 3轮后仍不通过 → 降级交付(标注未通过项,让用户手动检查)
- 自检过程不输出给用户,仅最终交付时附自检摘要
### 3.8 代码合成铁律
#### 设计令牌
- `tokens.css` 的 `:root` 整体注入 `<style>` 首段
- **全文 `var(--xxx)` 引用,禁止 `:root` 外裸 hex**
- Chart.js 例外:通过 `cssVar()` 辅助函数读取
#### 平台约束
- Viewport / 断点 / 设备框架 / 触摸目标(≥44px iOS / 48dp Android)
#### 多视图导航(≥2功能模块时)
- 单个自包含 HTML,`data-view-link` 切换
- 登录页作为首个无导航栏独立视图
- 移动端App ≥2功能区块强制底部tab
#### 动作按钮(三选一)
1. `data-open-dialog` 弹窗
2. 就地反馈 toast
3. `aria-disabled` 显式inert
#### 分段控件
- `data-seg` + `data-seg-mode`(panel/filter),点击必须产生可见变化
### 3.9 P0 硬门控清单(自检用,不输出给用户)
1. `:root` 外无裸 hex
2. 标题用 `var(--font-display)`、正文用 `var(--font-body)`
3. 强调色每屏 ≤2 处
4. 无紫蓝渐变、无 emoji 功能图标
5. 无填充文案、无编造数据
6. hover/focus/active 三态完整
7. 移动端栅格折叠正常、无横向溢出
8. `<!doctype html>` 恰好1次、`<html>` 恰好1个
9. 动作按钮非死钮
10. 弹窗默认隐藏
11. 分段控件点击有可见变化
12. 组件库启用时含 `.ep-*`/`.sh-*` 类且 `:root` 外零裸hex
### 3.10 2秒直觉检查
看页面2秒,是否像"这月见的每个AI创业公司首页"?若是,回去换具体内容、删强调色。
---
## 技能 4:工作项拆分建议(workitem-split-advisor-distilled)
### 4.1 职责
将需求内容转化为**结构化工作项 JSON 数组**(不是 Markdown),弱模型直接逐条 POST 到研发云 API,无需解析 Markdown 内容。
### 4.2 输入
| 字段 | 类型 | 必填 | 说明 |
|------|------|------|------|
| `requirement_content` | String | 是 | 需求内容(PRD全文/问需单/自然语言) |
| `split_to_task` | Boolean | 否 | 是否拆到任务级(默认true) |
| `team_members` | String[] | 否 | 团队成员列表 |
| `sprint_info` | String | 否 | 迭代信息 |
| `version` | Integer | 否 | 版本号 |
### 4.3 输出(关键变化:JSON而非Markdown)
**文件1**:`workitems-batch-{项目名}-v{N}.json`(结构化 JSON 数组,弱模型可直接消费)
```json
[
{
"title": "客户管理模块-客户跟进提醒功能",
"description": "实现客户跟进提醒功能,支持设置提醒时间、多渠道推送、逾期升级",
"workitem_type": "feature",
"priority": "high",
"estimated_hours": 40,
"parent": null,
"iteration": null,
"acceptance_criteria": "1.可设置跟进提醒时间 2.支持企微/站内消息推送 3.逾期自动升级提醒",
"children": [
{
"title": "跟进提醒设置",
"description": "作为销售,我希望设置跟进提醒时间,以便按时跟进客户",
"workitem_type": "user_story",
"priority": "high",
"estimated_hours": 8,
"parent": "客户管理模块-客户跟进提醒功能",
"iteration": null,
"acceptance_criteria": "1.可选择提醒时间 2.可设置提醒方式 3.保存成功有反馈",
"children": [
{
"title": "设计提醒时间字段",
"description": "设计客户跟进提醒时间的数据字段和数据库表结构",
"workitem_type": "task",
"priority": "high",
"estimated_hours": 4,
"parent": "跟进提醒设置",
"task_type": "backend",
"assignee_suggestion": "待分配"
},
{
"title": "实现提醒时间设置接口",
"description": "开发提醒时间的CRUD接口",
"workitem_type": "task",
"priority": "high",
"estimated_hours": 4,
"parent": "跟进提醒设置",
"task_type": "backend",
"assignee_suggestion": "待分配"
}
]
}
]
}
]
```
> **为什么用JSON而不是Markdown**:弱模型不需要从Markdown中解析父子树——JSON本身就是结构化的,弱模型只需递归遍历 `children` 数组,逐条调用 `workitems_batch_create`,`parent` 字段告诉它父子关系。
**文件2**:追加到 `.handoff.json`:
```json
{
"action_id": "act-{序号}",
"action_type": "create_workitems_from_json",
"file_path": "workitems-batch-{项目名}-v{N}.json",
"file_content_type": "json",
"params": {
"project_id": "从用户上下文获取",
"iteration_id": "从用户上下文获取或null"
},
"version": {N},
"depends_on": null,
"status": "pending"
}
```
### 4.4 拆分规则
#### 特性拆分
- 按功能模块拆分,每个模块一个「特性」
- `workitem_type: "feature"`
#### 用户故事拆分
- 遵循 INVEST 原则
- 格式:「作为{角色},我希望{功能},以便{价值}」
- 优先级基于 RICE 模型
- `workitem_type: "user_story"`
- 工作量:1-3人天/故事
#### 任务拆分(split_to_task=true)
- 每个故事 2-5 个任务,每个 ≤1人天
- `workitem_type: "task"`
- `task_type`: frontend/backend/test/doc
- 工时 = 人天 × 8
#### 父子关系
- `parent` 字段填写父工作项的 `title`(弱模型创建时先创建父项,拿到ID后再创建子项并关联)
- `children` 数组嵌套子工作项
### 4.5 质量检查清单
- [ ] 每个用户故事遵循 INVEST
- [ ] 用户故事格式正确
- [ ] 每个任务 ≤1人天
- [ ] 任务工作量之和 = 父故事工作量
- [ ] 父子关系树完整(parent字段 + children数组)
- [ ] 优先级基于 RICE
- [ ] 预估工时 = 人天 × 8
- [ ] JSON 格式合法(可被 JSON.parse 解析)
- [ ] 文件名含版本号
- [ ] `.handoff.json` 已追加 action
---
## 附录A:完整串联流程(含交接协议)
```
用户原始输入
│
▼
┌──────────────────────────────────────────────────┐
│ TeleAgent(强模型 · 离线生产层) │
│ ────────────────────────────────────────────── │
│ Agent核心路由(参考附录D路由决策树) │
│ ├─ 技能1: PRD生成 → PRD-{项目名}-v1.md │
│ ├─ 技能2: 架构设计 → tech-spec-{项目名}-v1.md │
│ ├─ 技能3: HTML原型 → {主题}-proto-v1.html │
│ └─ 技能4: 工作项拆分 → workitems-batch-v1.json │
│ │
│ 生成 .handoff.json(交接清单) │
│ · 列出所有产物文件路径 + action_type + params │
│ · 弱模型只读此清单,逐条执行 │
└──────────────────┬───────────────────────────────┘
│ .handoff.json + 产物文件
▼
┌──────────────────────────────────────────────────┐
│ 研发云数字员工(弱模型 · 在线执行层) │
│ ────────────────────────────────────────────── │
│ 1. 读取 .handoff.json │
│ 2. 遍历 actions: │
│ · upload_file → 读取.md → 上传文档空间 │
│ · save_html_artifact → 读取.html → 写入+发布 │
│ · create_workitems_from_json → 读取.json → │
│ 逐条创建工作项 │
│ · mark_deprecated → 标记旧产物过期 │
│ 3. 输出执行摘要(成功/失败/跳过) │
│ 4. 返回更新后的 .handoff.json │
└──────────────────────────────────────────────────┘
```
### 串联执行示例
```
用户: "帮我做一个客户跟进提醒功能,要PRD、技术方案和原型"
│
▼
[TeleAgent Agent核心]
路由: multi_step (PRD→架构+原型并行)
技术约束白名单: 提取并保留用户提到的技术栈
缺失检测: page_topic(阻断) → 追问
│
用户回复: "客户管理后台"
│
▼
[技能1: PRD生成]
输出: PRD-客户跟进提醒-v1.md
handoff: +upload_file action
│
┌────────┴────────┐
▼ ▼
[技能2: 架构设计] [技能3: HTML原型]
输出: tech-spec-v1 输出: proto-v1.html
handoff: +upload handoff: +save_artifact
│ │
└────────┬────────┘
▼
[可选: 技能4 工作项拆分]
输出: workitems-batch-v1.json
handoff: +create_workitems action
│
▼
生成完整 .handoff.json (4个action)
│
▼
[研发云数字员工]
读取 .handoff.json → 逐条执行 → 返回结果
```
### 修改场景(版本+失效传播)
```
用户: "PRD里加一个客户标签管理功能"
│
▼
[TeleAgent]
检测: PRD修改 → 版本 v1→v2
失效传播: 架构v1/原型v1/工作项v1 级联deprecated
│
▼
[技能1: PRD生成 v2]
输出: PRD-客户跟进提醒-v2.md
handoff: +upload_file(v2) + mark_deprecated(v1, cascade:[架构,原型,工作项])
│
▼
[研发云数字员工]
1. 上传 PRD-v2 到文档空间
2. 标记 PRD-v1 为过期(追加备注)
3. 标记 架构v1/原型v1/工作项v1 为过期
4. 返回结果
│
▼
[TeleAgent 继续重新生成 v2 链]
架构v2 → 原型v2 → 工作项v2
handoff: 追加新action
```
---
## 附录B:各技能输入输出速查表
| 技能 | 输入 | 输出文件 | handoff action_type |
|------|------|---------|---------------------|
| PRD生成 | 需求描述+技术约束白名单 | `PRD-{项目名}-v{N}.md` | `upload_file` |
| 架构设计 | PRD内容+技术约束 | `tech-spec-{项目名}-v{N}.md` | `upload_file` |
| HTML原型 | 设计简报(9×6×13) | `{主题}-proto-v{N}.html` | `save_html_artifact` |
| 工作项拆分 | PRD内容+团队+迭代 | `workitems-batch-{项目名}-v{N}.json` | `create_workitems_from_json` |
## 附录C:设计体系 × 平台 × 页面类型 联动推荐
| 页面类型 | 推荐设计体系 | 备选 | 推荐平台 |
|---------|-------------|------|---------|
| resume-modern | Claude | Neutral Modern | 响应式Web |
| article-magazine | Claude | OpenAI | 响应式Web |
| docs-page | OpenAI | Hugging Face/Claude | 桌面Web |
| dashboard | Ant | Neutral Modern | 桌面Web |
| data-report | Ant | Neutral Modern | 桌面Web |
| saas-landing | OpenAI | Neutral Modern/MiniMax | 响应式Web |
| pricing-page | Neutral Modern | OpenAI | 响应式Web |
| login-flow | Neutral Modern | ElevenLabs | 响应式Web |
| faq-page | OpenAI | Claude/Neutral Modern | 响应式Web |
| email-marketing | MiniMax | Neutral Modern/ElevenLabs | 响应式Web |
| poster-hero | Runway | MiniMax/Claude | 桌面Web |
| kanban-board | Ant | Neutral Modern | 桌面Web |
| invoice | Neutral Modern | Claude | 响应式Web |
| 通用前端 | 按关键词推断 | Neutral Modern(默认) | 按关键词推断 |
> 联动推荐与用户明确指定冲突时,**优先用户指定值**。
## 附录D:TeleAgent Agent核心路由参考(不作为独立技能加载)
> **以下内容作为 TeleAgent Agent 核心系统提示词的参考知识注入,不作为独立技能加载。** Agent核心已在做意图识别和路由,这些路由表/决策树/缺失检测规则用于增强其路由准确性。
### D.1 关键词→域技能路由表
| 关键词/语义模式 | 路由目标 | action_type |
|----------------|---------|-------------|
| PRD/需求文档/产品需求 | srdcloud-prd-distilled | create/modify |
| 架构/技术方案/接口设计/数据模型 | architecture-design-doc-distilled | create/modify |
| 原型/页面/demo/界面/UI/HTML | design-proto-distilled | create/modify |
| 拆分/任务/工作项/排期/指派 | workitem-split-advisor-distilled | create |
| 做个功能/帮我实现/我想要一个 | multi_step | create |
### D.2 复合请求串联顺序
| 信号组合 | 串联顺序 |
|---------|---------|
| "做个XX功能"(无已有PRD) | PRD → 架构(并行) + 原型(并行) → 拆分(可选) |
| "做个XX功能"(已有PRD) | 架构 + 原型 → 拆分 |
| "根据需求做原型" | PRD → 原型 |
| "写PRD然后拆任务" | PRD → 拆分 |
### D.3 缺失信息检测(一次性追问)
| 检测项 | 阻断级别 | 追问示例 | 默认值 |
|--------|---------|---------|--------|
| requirement_text 过于模糊 | 阻断 | "能否详细描述核心功能和目标用户?" | 无 |
| page_topic 缺失(原型) | 阻断 | "页面主题是什么?" | 无 |
| project_name 缺失 | 非阻断 | "属于哪个项目?" | "未命名项目" |
| design_system 无法推断 | 非阻断 | "偏好哪种设计风格?" | Neutral Modern |
| team_members 缺失 | 非阻断 | "提供团队成员列表?" | "待分配" |
| tech_constraints 缺失 | 非阻断 | "有技术栈要求?" | 按最佳实践推荐 |
### D.4 上下文压缩规则(含技术约束白名单)
#### 压缩规则
1. 去除口语化词汇
2. 补全隐含信息
3. 按"目标用户+核心功能+业务价值"结构化
4. 标注不确定项 `[推断]`、缺失项 `[待确认]`
#### 技术约束白名单(不压缩、原样传递)
以下类型的关键词在上下文压缩时**不压缩、原样保留**,直接传递给下游技能:
| 类别 | 示例关键词 | 传递目标 |
|------|-----------|---------|
| 数据库 | PostgreSQL/MySQL/Redis/MongoDB/Oracle | 架构设计技能 |
| 框架 | Spring Boot/Django/Express/React/Vue | 架构设计技能 |
| 部署 | K8s/Docker/阿里云/腾讯云/私有化 | 架构设计技能 |
| 协议 | gRPC/RESTful/WebSocket/GraphQL | 架构设计技能 |
| 性能约束 | "1000并发"/"响应<200ms"/"支持百万级" | 架构设计技能+PRD |
| 安全要求 | "等保三级"/"数据加密"/"SSO" | 架构设计技能+PRD |
| 否定约束 | "不用MySQL"/"不用Redis" | 架构设计技能 |
> **白名单匹配规则**:使用正则 `/(PostgreSQL|MySQL|Redis|MongoDB|Oracle|Spring\s*Boot|Django|Express|React|Vue|K8s|Kubernetes|Docker|gRPC|RESTful|WebSocket|GraphQL|并发|响应|毫秒|等保|加密|SSO|不用|不使用)/i` 扫描用户原始输入,命中的句子整句保留,不进入压缩摘要。
## 附录E:关键设计原则
1. **弱模型只做机械提交**:读 `.handoff.json` 清单 → 逐条执行4种动作之一 → 返回结果。不做语义理解、不解析Markdown内容、不编排API
2. **TeleAgent负责所有复杂逻辑**:需求分析、文档生成、工作项拆分、设计简报推断——全部在强模型侧完成
3. **工作项输出用JSON不用Markdown**:弱模型直接 `JSON.parse` 逐条创建,不需要从Markdown中解析父子树
4. **交接协议极简**:一个 `.handoff.json` 清单文件,4种 action_type,弱模型执行流程固定
5. **版本管理+失效传播**:产物文件名带版本号,修改时旧版本通过 `mark_deprecated` action 标记过期,级联失效由 TeleAgent 判断
6. **技术约束白名单不压缩**:数据库/框架/部署/性能/安全等关键词原样传递,避免压缩丢信息
7. **HTML原型允许分步生成**:骨架→内容→交互→自检→交付,最多3轮自检修复,不强制一次写入
8. **总控路由作为prompt参考**:路由表/决策树注入Agent核心系统提示词,不作为独立技能加载,避免冗余序列化
9. **单条action失败不阻断**:弱模型逐条执行,失败跳过继续,最终输出摘要
10. **project_id/iteration_id从用户上下文获取**:TeleAgent在handoff的params中标注"从用户上下文获取",弱模型从会话上下文中读取,不需要TeleAgent提供