Agent Scope Java 2.x 系列【32】Harness:技能库自我迭代学习全链路设计

文章目录

  • [1. 概述](#1. 概述)
  • [2. 第一步:开启 Agent 自主编写技能(技能创作环节)](#2. 第一步:开启 Agent 自主编写技能(技能创作环节))
    • [2.1 配置代码](#2.1 配置代码)
    • [2.2 生效能力](#2.2 生效能力)
    • [2.3 两种发布模式](#2.3 两种发布模式)
    • [2.4 配套数据埋点](#2.4 配套数据埋点)
  • [3. 第二步:审核闸门 + 调用可见性控制(发布与灰度环节)](#3. 第二步:审核闸门 + 调用可见性控制(发布与灰度环节))
    • [3.1 核心配置](#3.1 核心配置)
    • [3.2 晋升闸门(PromotionGate)](#3.2 晋升闸门(PromotionGate))
    • [3.3 可见性过滤器(控制Agent能看到哪些自主创建的技能)](#3.3 可见性过滤器(控制Agent能看到哪些自主创建的技能))
  • [4. 第三步:后台定时自动治理(技能清理与整理环节)](#4. 第三步:后台定时自动治理(技能清理与整理环节))
    • [4.1 定时任务配置](#4.1 定时任务配置)
    • [4.2 自动执行规则](#4.2 自动执行规则)
    • [4.3 手动触发API(绕过定时节流)](#4.3 手动触发API(绕过定时节流))
  • [5. 完整闭环链路总结](#5. 完整闭环链路总结)

1. 概述

这是一套 Agent 自主迭代技能的完整自动化流水线,全程分为自主创作 → 审核灰度发布 → 自动归档治理三大部分。三个模块相互解耦,可以单独开启任意一段,不需要全量启用。

核心目标:Agent可以自行新建、修改技能,再配合人工审核、灰度放量,最后由定时任务清理长期闲置的技能,实现技能库自我迭代、自我瘦身。


2. 第一步:开启 Agent 自主编写技能(技能创作环节)

2.1 配置代码

java 复制代码
.enableSkillManageTool(SkillManageConfig.defaults())

2.2 生效能力

Agent 自动解锁两个内置工具:

  1. propose_skill
    • Agent 生成新技能草稿,自动写入目录:skills/_drafts/<技能名>/
    • 草稿只存放在草稿区,不会被 Agent 正常调用,必须晋升后才能正式启用。
  2. skill_manage
    • 对现有技能执行增、删、改操作:新建目录、修改 SKILL.md、新增脚本附件、删除文件。

2.3 两种发布模式

  1. 默认模式(推荐)
    草稿必须走审核流程,防止劣质脚本直接上线。
  2. 自动放行模式:.enableSkillManageTool(true)
    等价于开启 autoPromote=true,草稿写完直接自动转正,跳过审核闸门。

风险提示:生产环境禁止开启,容易产生大量垃圾脚本与不安全代码。

2.4 配套数据埋点

每次 Agent 调用 load_skill_through_path / read_skill 加载技能时,框架自动统计调用频次,写入文件:skills/.usage.json

记录:调用次数、最后使用时间。

作用:为后续灰度筛选、闲置技能清理提供数据依据。


3. 第二步:审核闸门 + 调用可见性控制(发布与灰度环节)

3.1 核心配置

java 复制代码
.enableSkillPromotionGate(
    // 审批人:本地控制台人工审批
    new LocalApprovalGate(LocalApprovalGate.defaultPrompter()),
    // 多层可见性过滤器
    new CompositeFilter(List.of(
        new EnvironmentFilter("prod", skillUsageStore),  // 环境隔离
        new CanaryFilter(0.10, skillUsageStore)          // 10%流量灰度放量
    )))
.environment("prod")

3.2 晋升闸门(PromotionGate)

草稿技能无法直接被调用,必须通过闸门审批才能从 _drafts 草稿区晋升为正式技能。

内置 3 种审批策略:

  • 默认策略:直接拒绝所有草稿晋升;
  • 本地人工审批:控制台弹窗,操作员手动确认通过/驳回;
  • 消息异步审批:推送审批消息,等待外部回执。

3.3 可见性过滤器(控制Agent能看到哪些自主创建的技能)

只有通过过滤器的技能,才会出现在<available_skills>列表中,Agent 才能调用。

支持多条件组合:

  1. EnvironmentFilter 环境隔离 :区分 dev/test/prod 环境,生产环境只放行生产级技能。
  2. CanaryFilter 灰度发布 :基于调用统计数据,按比例放量(示例:只开放10%请求试用新技能)。

底层依赖第一步生成的 .usage.json 使用日志做灰度决策。


4. 第三步:后台定时自动治理(技能清理与整理环节)

4.1 定时任务配置

java 复制代码
.enableSkillCurator(SkillCuratorConfig.builder()
    .intervalHours(7 * 24)        // 执行周期:每周执行一次
    .minIdleHours(2)              // 节流保护:技能至少闲置2小时才处理,避免占用运行资源
    .staleAfterDays(30)           // 连续30天无人调用:标记为stale(闲置待清理)
    .archiveAfterDays(90)         // 连续90天无调用:自动归档
    .build())

4.2 自动执行规则

  1. 执行节流:不能频繁运行,必须满足间隔与闲置条件;
  2. 生命周期自动流转:
    • 连续30天零调用:打上 stale 闲置标记;
    • 连续90天零调用:自动移动到归档目录 skills/.archive/,不再被检索加载;
  3. 可选增强能力:LLM 智能合并(伞合并)
    默认仅试运行(dry-run),只输出分析报告,不会自动修改文件。
    作用:扫描多个功能重复的零散技能,自动合并成一个通用技能,精简技能库。

4.3 手动触发API(绕过定时节流)

  1. 查询全量技能审计日志
java 复制代码
agent.queryAudit(LocalDate.now(), e -> true);
  1. 立即执行一次清理整理任务
java 复制代码
agent.runCuratorOnce().subscribe(report -> System.out.println(report));
  1. 手动将草稿晋升为正式技能
java 复制代码
agent.promoteSkill("notes-taker", "alice");

5. 完整闭环链路总结

  1. 创作层Agent 自主写技能 → 存入草稿区 + 自动记录调用埋点;
  2. 发布层:人工审批闸门 + 环境+灰度双过滤,控制新技能放量上线;
  3. 治理层:后台定时巡检,长期不用的技能自动标记、归档,还可以用大模型合并冗余技能;
  4. 灵活控制:三段能力完全解耦,可只开创作、只开审核、只开清理,并且支持API手动干预流程。