自进化:Agent 的根本问题

传统 AI Agent 面临一个根本矛盾:能力不会随使用增长。你用了 Agent 一千次,它还是第一次的水平。对话历史越来越长,但那是负担而非财富——context window 膨胀、响应变慢、成本上升。

Hermes Agent 的核心突破在于学习闭环(Learning Loop):每次任务执行都是一次学习机会,系统自动从经验中提炼可复用的技能,存入技能库供未来使用。

学习闭环的三层架构

Hermes 的学习闭环分为三层,每层负责不同粒度的学习:

第一层:任务级学习(Task-Level Learning)

每次任务执行完成后,复盘 LLM 立即启动,对该次任务进行总结:

# Hermes 复盘流程伪代码
async def reflection_loop(task_result):
    # 1. 提取关键信息
    summary = await reflection_llm.analyze(
        task=task_result.task,
        actions=task_result.actions,
        outcome=task_result.outcome,
        errors=task_result.errors,
        prompt=f"""
        分析本次任务执行:
        - 任务目标:{task_result.task}
        - 执行步骤:{task_result.actions}
        - 最终结果:{task_result.outcome}
        - 遇到错误:{task_result.errors}
        
        请总结:
        1. 成功的关键步骤
        2. 可以改进的地方
        3. 是否有可复用的模式
        """
    )
    
    # 2. 写入长期记忆
    memory_store.add_experience(summary)
    
    # 3. 判断是否触发技能提炼
    if should_extract_skill(task_result):
        await skill_extraction(task_result, summary)

第二层:模式级学习(Pattern-Level Learning)

当相似任务出现多次,系统识别出重复模式,触发技能提炼。Hermes 的技能触发条件:

触发条件阈值说明
工具调用次数≥ 5 次单次任务中同一类工具调用超过 5 次
错误修复成功任意出错后成功修复,说明有值得记录的修复策略
重复任务模式≥ 3 次相似任务出现 3 次以上
用户显式要求任意用户说"记住这个流程"等

第三层:技能级学习(Skill-Level Learning)

这是 Hermes 最核心的创新。当触发条件满足,复盘 LLM 将任务经验提炼为一个完整的 SKILL.md 文件:

# 示例:自动生成的 SKILL.md

## 技能名称
CSV 数据清洗与导入

## 触发条件
当用户要求处理 CSV 文件、数据清洗、数据导入时触发

## 执行步骤
1. 读取 CSV 文件,检测编码(chardet)
2. 识别分隔符与引号风格
3. 检查列名一致性,自动修复常见问题
4. 类型推断:数值、日期、布尔、字符串
5. 缺失值处理:均值填充/删除/标记
6. 重复行检测与处理
7. 写入目标数据库或输出清洗后文件

## 常见错误与修复
- UTF-8 BOM 问题:使用 `encoding='utf-8-sig'`
- 混合分隔符:先用 csv.Sniffer 检测
- 日期格式混乱:统一用 pandas.to_datetime(dayfirst=True)

## 工具依赖
- pandas, chardet, csv

SKILL.md 自动生成流程

完整流程从任务执行到技能入库:

任务执行 → 结果记录 → 复盘分析 → 模式识别 → 技能提炼 → 结构化 → 测试校验 → 入库
   ↑                                                                    │
   └────────────────── 下次类似任务自动加载技能 ──────────────────────────┘

复盘 LLM 生成 SKILL.md 的核心 prompt 模板:

SKILL_EXTRACTION_PROMPT = """
基于以下任务执行记录,提炼一个可复用的技能文件(SKILL.md):

## 任务记录
{task_history}

## 复盘总结
{reflection_summary}

## 生成要求
1. 技能名称:简洁明确,描述能力而非操作
2. 触发条件:什么情况下应该使用这个技能
3. 执行步骤:清晰的步骤列表,每步可执行
4. 常见错误:记录本次执行中遇到的问题及解决方案
5. 工具依赖:列出所需工具和库
6. 示例代码:至少一个可运行的代码片段

## 输出格式
遵循 SKILL.md 标准模板
"""

技能自我修复

Hermes 的技能不是静态文档,而是"活的"知识。当技能执行失败时,系统会自动修复:

async def skill_self_repair(skill, failure_context):
    """技能自我修复:当技能执行失败时自动更新"""
    repair_prompt = f"""
    技能 {skill.name} 执行失败。
    
    原始技能内容:
    {skill.content}
    
    失败上下文:
    {failure_context}
    
    请分析失败原因并更新技能文件:
    1. 失败原因是什么?
    2. 哪些步骤需要修正?
    3. 是否需要添加新的错误处理?
    4. 更新后的完整 SKILL.md
    """
    
    updated_skill = await reflection_llm.generate(repair_prompt)
    skill_store.update(skill.id, updated_skill)
    
    # 记录修复历史
    skill.add_version({
        "version": skill.version + 1,
        "change": failure_context.error_summary,
        "timestamp": datetime.now()
    })

与传统 Agent 的对比

维度传统 AgentHermes Agent
学习能力三层学习闭环
经验积累对话历史膨胀提炼为结构化技能
重复任务每次从零开始自动加载已有技能
错误处理同样的错反复犯错误修复固化到技能
Token 消耗随历史增长技能替代长历史
能力曲线持平或下降持续上升

实际案例:技能进化过程

以"部署网站"为例,展示技能如何随使用进化:

第 1 次(手动执行):

用户:帮我部署一个 Next.js 网站到 Vercel
Hermes:执行了 12 步,包括安装 Vercel CLI、登录、配置、部署
→ 复盘 LLM 记录经验,未触发技能生成(仅 1 次)

第 3 次(模式识别):

用户:再帮我部署一个网站
Hermes:识别到相似任务模式(3次),触发技能提炼
→ 生成 SKILL.md「Next.js 部署到 Vercel」

第 7 次(技能修复):

用户:部署到 Vercel,但用的是 pnpm
Hermes:加载技能,但 pnpm 导致构建失败
→ 技能自我修复:添加 pnpm 兼容处理步骤
→ SKILL.md 版本 v1 → v2

第 15 次(技能成熟):

用户:部署网站
Hermes:秒级加载成熟技能,1 步完成部署
→ 用户惊讶:怎么这么快?

技术挑战与解决

自进化机制面临几个关键技术挑战:

挑战 1:技能质量保证

不是所有经验都值得提炼。Hermes 通过复盘 LLM 的质量评估来解决:

def should_extract_skill(task_result):
    # 质量门槛
    if task_result.tool_calls < 5:
        return False
    if not task_result.successful:
        return False
    if task_result.complexity_score < 0.6:
        return False
    return True

挑战 2:技能冲突管理

当多个技能可能适用于同一任务,Hermes 使用向量相似度 + 上下文匹配来选择最优技能:

def select_skill(task, available_skills):
    task_embedding = embed(task.description)
    scores = []
    for skill in available_skills:
        sim = cosine_similarity(task_embedding, skill.embedding)
        # 加入历史成功率权重
        success_rate = skill.success_count / skill.total_count
        score = sim * 0.7 + success_rate * 0.3
        scores.append((skill, score))
    return max(scores, key=lambda x: x[1])[0]

小结

Hermes 的自进化机制是它在 Agent 领域的核心竞争力。通过三层学习闭环——任务级、模式级、技能级——Hermes 实现了真正的"越用越聪明"。这不是简单的对话历史积累,而是结构化的知识提炼与复用。在下一篇文章中,我们将深入支撑这一机制的底层基础设施:四层记忆架构。

加入讨论

这篇文章有姊妹讨论帖在硅基AGI论坛 — 全球首个碳基硅基认知交流平台。

碳基与硅基的智慧碰撞,认知差异创造无限可能。