跳转至

Evolution

  • Evolution 专指 Harness 根据交互经验对自身进行持久化修改的机制
    • Agent 在当前 Context 中对 Belief, Plan 和行动倾向的更新不是 Evolution
    • Model 权重的训练与更新也不属于 Harness Evolution
  • Harness Evolution 的对象
    • 改变未来提供给模型的 Knowledge, 包括 Memory 和 Skill
    • 改变未来使用的 Cognitive Control, 包括 Workflow
    • 改变 Runtime, 包括工具, 安全机制, Hooks 和可观测性与评估机制
  • Evaluation 为 Harness Evolution 提供选择信号
    • 只有能够区分有效与无效经验, Harness 才能决定沉淀, 修改或遗忘什么

Memory

  • 广义的 Memory, 包括环境信息, 用户信息与沉淀经验
    • 环境信息可验证可推导
    • 用户信息不可验证不可推导, 但对完成任务很重要
    • 沉淀经验是之前完成过的任务的总结, 包括成功的经验和失败的教训
  • 可以由用户主动提供, 也可以由 Agent 维护
  • 关键点
    • 结构: 文本 / 知识图谱 / 结构化数据
    • 语义: 用户信息 / 沉淀经验 / 环境信息
    • 召回方式: 注入 / 检索 / 渐进式披露 / Agent 主动预测 + 推送
    • 生命周期管理: 什么时候写入 / 遗忘

结构

  • 结构取决于输入的信息类型与检索方式
    • 代码会使用 AST 进行结构化, 变成知识图谱
    • 图像会使用标签进行结构化, 变成标签列表
    • 文本可以按 chunk 进行结构化, 向量化后存入 VectorDB
    • 不管哪种, 都可以直接总结成文本
  • RAG
    • 狭义上指文本切割 -> 向量化 -> VectorDB -> 对提问向量化 -> 相似度匹配 -> 重排序 -> 注入上下文
  • 知识图谱
    • 编译知识大于检索知识
    • 不一定是用向量检索节点, 也可能是 LLM Wiki
  • AST
    • 对代码的最佳分析方式
    • 使用 Tree-sitter

LightRAG

  • 构建
    • llm-based 提取 chunk 中实体与关系为 K-V 形式 (实体名 - 实体摘要 / 实体暗示的全局主题 - 关系内容)
    • 对所有实体 / 关系的 K-V Embedding, 存入 VectorDB, 构建为知识图谱
    • 投入新文档不需要重新构建
  • 检索
    • llm-based 提取 Prompt 中实体与抽象
    • 实体向量检索实体, 再根据图谱关系做二跳检索
    • 抽象向量检索关系, 获取相关实体

语义

  • 环境信息
    • 也就是工作的项目的信息, 简化模型的探索过程
    • 应该只存索引, 由模型去确定并获取事实, 避免过度依赖记忆
  • 用户信息
    • 环境中无法推断, 但对完成任务很重要的信息, 例如用户的偏好, 项目的隐式约束
  • 沉淀经验
    • 之前完成过的任务的总结, 包括成功的经验和失败的教训
    • 总结为可复用的技能, 供未来类似任务调用

召回方式

  • 注入
    • 适合重要的, 需要模型持续关注的信息
    • 有的人也喜欢每次固定 RAG 一些环境信息, 但感觉不如让模型自己决定什么时候需要
  • 检索
    • 适合大量的, 需要模型偶尔参考的信息
    • 可以包装成一个工具, 让模型决定什么时候需要调用
  • 渐进式披露
    • 适合绝大部分情况其实, 而且与注入和检索不冲突
    • 提供一个索引, 需要时加载全量信息
  • Agent 主动预测 + 推送

生命周期管理

  • Agent 写入时机
    • Turn 结束时
    • 失败 / 成功时
    • 定时写入
    • 压缩时
  • 遗忘时机
    • 过时遗忘: 给记忆打上时间戳
    • 冲突遗忘: 记忆之间存在强相关, 遗忘或融合

最佳实践

  • 用户信息, 项目信息, 目录信息, 本地信息等记忆分层文件存储
    • 用一个 MEMORY.md 存有语义的记忆文件索引用作渐进式披露
    • 根据工作目录动态加载并主动注入
  • 对于更广阔具体的信息, 可以考虑检索 (向量相似度 / BM25 / grep+read)
  • 信息最好渐进式披露

Skills Based Memory

  • 完整上下文, 利于 subagent
  • 人类可读, 可编辑, 可审计, 可测试
  • 易于分发
  • Prompt 的快捷键
  • Claude Code 有一个 Commands 功能, 允许 SKills 里嵌入脚本加载时处理 Skills 本身

插件

LSP