Skip to content

关于迁移重构方面 #1

Description

@wuweizhe256

一个成熟Agent框架的优势包括:

  1. 高度抽象与开发加速。框架将与llm交互的流程封装为简易接口,使用者无需关心底层逻辑,专注于agent的核心功能即可
  2. 高度的模块化与可重用性。可以轻松切换不同的llm,而且具有对话记忆功能,可以结合上下文感知语境和主题,同时提供一些标准化接口以接入一些插件,让agent可以调用搜索引擎等外部api
  3. 强大的可扩展性与灵活性。支持使用者自定义框架的标准组件和拓展一些外部组件
  4. 内置先进的智能体模式。使用者可以直接使用高级模式来实现更强的推理和规划能力
  5. 庞大的生态系统与社区支持
  6. 稳定性和可维护性。成熟agent框架内置错误处理、日志记录等机制,能自行处理和解决部分bug

基于以上评估此项目,关于迁移重构方面,可以发现主要不足在拓展性可维护性。ArcanAgent启动时一定会按女祭司->隐士->魔术师->正义->皇后这个流程进行,如果想要新增agent(例如生成思维导图类图像的agent),可能会需要重写核心代码

大体解决方向为:

  1. 引入任务队列(Introduce a Task Queue)异步化,即将每个agent封装成可被任务队列调用的任务。
  2. 改造 ArcanAgentOrchestrator:它的职责不再是直接调用 Agent,而是向任务队列派发第一个任务(女祭司的评估任务),并立即返回给前端一个 session_id
  3. 每个 Agent 任务完成后,负责触发下一个 Agent 任务的派发。例如,女祭司任务成功后,将评估结果存好,然后调用 tasks.hermit.delay(session_id)。

另外任何一个agent接口变化都可能导致编排逻辑出错,并且由于是线性调用链,中间步骤出错调试会比较复杂(比如魔术师生成内容不正确导致正义无法解析)

大体解决方向为:

  1. 使用一个简单的数据库来记录每个 session_id 的状态。
  2. 每个 Agent 任务开始时,从数据库读取当前会话的状态;任务结束时,将自己的产出更新回数据库。以解决agent之间的数据依赖
  3. 为整个学习会话创建一个父 Span,为每一个 Agent 任务的执行创建一个子 Span,在 Span 中记录关键信息:Agent 的输入参数、输出结果的摘要或路径、LLM 调用的 token 消耗、耗时等,这样错误环节能方便找出

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