26-automated-hiring-orchestration.md 5.69 KB

26. 全自动招聘编排 — Creator → Skills → Innovator 流水线

版本: v1.0 日期: 2026-03-26 状态: ✅ 已实现 关键提交: 5b508ce feat: Automate full hiring orchestration (Creator → Skills → Innovator)


一、核心问题

当 CEO 需要招聘一个模板库中不存在的角色(如"视频剪辑师")时,系统不能简单报错。 需要一套全自动编排流水线:从零定义 Agent → 注入技能 → 训练至合格。


二、编排全景

POST /api/company/:companyId/hire { role: "video-editor" }
      │
      ▼
   companyService.hireWithTraining()
      │
      ├── 1. 在 templates/ 中查找 "video-editor"
      │      → ❌ 模板不存在
      │
      ├── 2. AgentScaffold 创建空白骨架目录
      │      → data/{companyId}/agents/video-editor/
      │      → 状态标记为 status: "training"
      │
      ├── 3. [异步] Agent-Creator 编写定义文件
      │      → POST /api/agent/agent-creator/chat
      │      → "为 video-editor 补充 agent.md, soul.md, identity.md..."
      │
      ├── 4. [同步] Arena 技能搜索与注入
      │      → skillDb.searchSkills("video-editor", { limit: 3 })
      │      → 将匹配的 Skill 复制到 agents/video-editor/skills/
      │
      └── 5. [延时5s] Innovator FDE 训练
             → POST /api/agent/innovator/chat
             → "对 video-editor 进行 FDE 训练,Benchmark ≥ 95"
             → Hunt → Digest → Evolve 循环
             → 合格后自动部署

三、三阶段详解

阶段 1: Agent-Creator 定义

Agent-Creator 是一个专门负责"写定义文件"的元 Agent。接到请求后:

  1. 根据 role name 和 description 理解角色职责
  2. 使用 Write 工具写入标准定义文件:
    • agent.md — 核心身份标识 + 职责描述
    • identity.md — 名称、emoji、简介
    • soul.md — 思维模式、价值观
    • user.md — 上级偏好
    • tools.md — 可用工具清单
  3. 验证写入完成

关键实现 (server/routes/company.js Line 399-407):

fetch(`http://127.0.0.1:${PORT}/api/agent/agent-creator/chat`, {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
    message: `新员工 ${namespacedId} 已由脚手架创建空白目录...请补充完整的定义文件`,
    conversationId: `create-${companyId}-${role}-${Date.now().toString(36)}`
  })
});

阶段 2: Arena 技能搜索与注入

从技能数据库(Arena 技能商店)中搜索与角色匹配的现有技能,最多注入 3 个基础技能:

  1. skillDb.searchSkills(role, { limit: 3 }) — 按角色名关键词搜索
  2. 将匹配的 Skill 目录递归复制到 Agent 的 skills/ 目录下
  3. 如果没有匹配的技能,日志输出"将交由 Innovator 凭空生成"

关键实现 (server/routes/company.js Line 409-438):

const skills = skillDb.searchSkills(role, { limit: 3 });
for (const skill of skills) {
  if (skill.directory && fs.existsSync(skill.directory)) {
    copyDir(skill.directory, path.join(skillsDir, skill.skillName));
    console.log(`[Hire] 💉 成功为其注入基础技能: ${skill.skillName}`);
  }
}

阶段 3: Innovator FDE 训练

延时 5 秒(等 Creator 写入完毕)后,通知 Innovator 对新 Agent 进行 FDE 训练:

  1. Innovator 评估当前 Agent 技能水平
  2. 启动 Hunt → Digest → Evolve 训练流水线
  3. 循环迭代直到 Benchmark 评分 ≥ 95
  4. 训练完成后自动安装 SKILL.md

关键实现 (server/routes/company.js Line 441-451):

setTimeout(() => {
  fetch(`http://127.0.0.1:${PORT}/api/agent/innovator/chat`, {
    method: 'POST',
    body: JSON.stringify({
      message: `公司 ${companyId} 的员工 ${role} 骨架和基础技能已注入完毕。
        请使用 FDE pipeline 进行评测和进化训练,直到 Benchmark 达标 (Score ≥ 95)。`
    })
  });
}, 5000);

四、招聘后的动态心跳挂载

招聘成功后(无论是从模板还是训练完成),系统会立即为新 Agent 注册心跳定时器:

const heartbeatService = require('../services/heartbeat-service');
const namespacedId = `${companyId}:${role}`;
heartbeatService._setupAgentHeartbeat(namespacedId);

五、与模板招聘的对比

维度 模板招聘 (Template) 全自动编排 (Orchestration)
触发条件 templates/ 下存在对应模板 templates/ 下不存在
耗时 数分钟 (FDE 训练)
流程 复制 → 注入上下文 → 上岗 Scaffold → Creator → Skills → FDE → 上岗
Agent 状态 直接 ready → active training → (训练完成) → ready
模板沉淀 不需要 训练合格后自动 deposit-template 到 templates/

六、模板沉淀 (Deposit Template)

训练合格的新角色会被自动沉淀为模板,供未来复用:

POST /api/company/:companyId/deposit-template
{
  "agentId": "video-editor",
  "benchmarkScore": 96
}

沉淀内容:只保存骨架文件(agent.md, soul.md, config.json 等),不含 memory 和 workspace。


七、关键代码文件

文件 位置 职责
server/routes/company.js Line 376-474 POST /:companyId/hire — 完整招聘 + 编排
server/routes/company.js Line 528-542 POST /:companyId/deposit-template — 模板沉淀
server/services/company-service.js hireWithTraining() 模板查找 + 骨架创建
server/services/skill-db.js searchSkills() Arena 技能搜索