Skip to content

[功能讨论]Agent协作-共享有用信息机制 #36

@NyxJae

Description

@NyxJae

现状

用户发起任务 -> 主Agent委派探索子Agent -> 探索子Agent探索项目生成探索报告 -> 主Agent根据探索报告委派规划子Agent -> 规划子Agent又搜索项目,再去计划 -> 主Agent根据规划报告委派通用子Agent -> 通用子Agent又又搜索项目,再去实施...
如果主Agent细分任务发布给多个通用子Agent,从项目中找文件这一耗时耗token步骤又会重复多次

问题

耗时,耗Token显而易见
每个子Agent在各自搜索时,会读取到与自己任务无关的多余的文件内容,以找到有用信息.

解决思路

一个在各Agent之间共享有用信息的机制
让Agent可以在工作时,将找到的有用信息,精确到行,添加到会话级,同会话的所有Agent的上下文都会被注入有用信息内容.
已在我的fork仓库中实现了此方案,可直接试用下

工具

1. useful-info-add

  • 功能: 精确添加文件内容到有用信息列表
  • 参数:
    • filePath (必选): 文件路径
    • startLine (可选,默认为1): 起始行号
    • endLine (可选,默认为文件末尾): 结束行号
    • description (可选): 描述信息
  • 特点:
    • 支持批量添加
    • 自动合并重叠范围
    • 跳过不存在的文件
  • 使用场景: 编辑文件后添加修改的关键部分

2. useful-info-delete

  • 功能: 从有用信息列表中删除项目
  • 参数:
    • itemId (可选): 项目 ID
    • filePath (可选): 文件路径
    • startLine (可选): 起始行号
    • endLine (可选): 结束行号
  • 删除方式:
    • 按项目 ID 删除
    • 按文件路径删除所有项目
    • 按文件路径 + 行号范围精确删除
  • 使用场景: 清理过时或无效的信息

3. useful-info-list

  • 功能: 列出当前会话的所有有用信息元数据列表(不含内容,仅显示位置信息)
  • 使用场景: 调试使用,或展示给用户看,一般不授权给Agent,若有专门管理有用信息的子Agent,可授权给它

机制

根据有用信息索引实时获取文件内容,格式化(加行号)整合后,作为一条特殊user消息,注入到Agent上下文.
同文件交集或相邻行的合并,LRU,限制注入数量等优化
上下文压缩后,有用信息仍在

新的工作流

用户发起任务 -> 主Agent委派探索子Agent -> 探索子Agent探索项目,并记录有用信息 -> 主Agent根据探索报告委派规划子Agent -> 规划子Agent直接已知多条有用信息,稍微看下重要文件,甚至跳过不看,直接规划(如果是生成 计划.md,会将计划.md加入有用信息) -> 主Agent根据规划报告委派通用子Agent -> 通用子Agent已知多条有用信息和任务规划,直接看相关文件,实施任务(实施后,会将编辑过的文件加入有用信息)

忧虑

以下是设计之初就担心的点,但实际使用中还未去做实际验证:

  • 会担心Agent即使有有用信息,但仍倾向于调用读文件工具再读一遍
  • Agent使用有用信息工具时倾向于只增不减(todo工具也同样),如果确切要清理,需要用户明确要求
  • 希望是 有用信息的token占用,甚至是信息有效率,能自动通知Agent,自主决策何时清理.但增加了系统复杂度.
  • 实际使用是否对Agent协作有效率和准确性提升,我暂无法测评.

最后

佬可以去我的fork试试这个机制,看有没有用,因为我的fork还有其他更改,部分觉得不符合佬的设计,故没提pr.但这个 共享有用信息 想提出来 大佬们讨论下.

ps

我的fork没提的特性简述,需要可再开讨论

  1. ROLE.md全量替换内置系统提示词,而非只替换第一行角色定义.(觉得不符和佬设计,没提,就有后续一堆没提的了)
  2. snow启动直接yolo(本来是想实现用户切换yolo,立刻生效的,但偷懒了).
  3. 全局和项目ROLE.md,项目级别覆盖全局级别.
  4. AGENTS.md 追加到 主Agent和所有子Agent的系统提示词后面,全局和项目合并.
  5. 子代理换用TOML配置,可读性和多行文本可编辑行更好
  6. 主Agent和子Agent增强出错重试,很难打断工作循环(我聚合多家公益站,api极其不稳定也不断)
  7. todo工具去掉create,改为每个会话自动创建,且主子Agent只共用这一个todo列表 [todo工具设计讨论]去掉create工具,会话开始自动生成唯一todo. #37
  8. 子代理回复在ui精简展示(是想做成默认截断显示,快捷键可展开)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions