一个成熟Agent框架的优势包括:
- 高度抽象与开发加速。框架将与llm交互的流程封装为简易接口,使用者无需关心底层逻辑,专注于agent的核心功能即可
- 高度的模块化与可重用性。可以轻松切换不同的llm,而且具有对话记忆功能,可以结合上下文感知语境和主题,同时提供一些标准化接口以接入一些插件,让agent可以调用搜索引擎等外部api
- 强大的可扩展性与灵活性。支持使用者自定义框架的标准组件和拓展一些外部组件
- 内置先进的智能体模式。使用者可以直接使用高级模式来实现更强的推理和规划能力
- 庞大的生态系统与社区支持
- 稳定性和可维护性。成熟agent框架内置错误处理、日志记录等机制,能自行处理和解决部分bug
基于以上评估此项目,关于迁移重构方面,可以发现主要不足在拓展性和可维护性。ArcanAgent启动时一定会按女祭司->隐士->魔术师->正义->皇后这个流程进行,如果想要新增agent(例如生成思维导图类图像的agent),可能会需要重写核心代码
大体解决方向为:
- 引入任务队列(Introduce a Task Queue)异步化,即将每个agent封装成可被任务队列调用的任务。
- 改造 ArcanAgentOrchestrator:它的职责不再是直接调用 Agent,而是向任务队列派发第一个任务(女祭司的评估任务),并立即返回给前端一个 session_id
- 每个 Agent 任务完成后,负责触发下一个 Agent 任务的派发。例如,女祭司任务成功后,将评估结果存好,然后调用 tasks.hermit.delay(session_id)。
另外任何一个agent接口变化都可能导致编排逻辑出错,并且由于是线性调用链,中间步骤出错调试会比较复杂(比如魔术师生成内容不正确导致正义无法解析)
大体解决方向为:
- 使用一个简单的数据库来记录每个 session_id 的状态。
- 每个 Agent 任务开始时,从数据库读取当前会话的状态;任务结束时,将自己的产出更新回数据库。以解决agent之间的数据依赖
- 为整个学习会话创建一个父 Span,为每一个 Agent 任务的执行创建一个子 Span,在 Span 中记录关键信息:Agent 的输入参数、输出结果的摘要或路径、LLM 调用的 token 消耗、耗时等,这样错误环节能方便找出
一个成熟Agent框架的优势包括:
基于以上评估此项目,关于迁移重构方面,可以发现主要不足在拓展性和可维护性。ArcanAgent启动时一定会按女祭司->隐士->魔术师->正义->皇后这个流程进行,如果想要新增agent(例如生成思维导图类图像的agent),可能会需要重写核心代码
大体解决方向为:
另外任何一个agent接口变化都可能导致编排逻辑出错,并且由于是线性调用链,中间步骤出错调试会比较复杂(比如魔术师生成内容不正确导致正义无法解析)
大体解决方向为: