跳转至

Agent框架OWL原理详解

Ch01.348 Agent框架OWL原理详解

📊 Level ⭐⭐ | 10.5KB | entities/agent-framework-owl-principles.md

** 前言 ** OWL是一个优秀的开源agent框架,在agent benchmark GAIA上,OWL是表现最好的开源agent框架。虽然deerflow star也不少,但是基于langgraph的实现不太好细究agent底层实现原理。因此本文以OWL代码为例,讲解agent框架的细节实现。OWL其实是对camel库的进一步封装,比如像agent、toolkit等核心代码内容都是在camel库中实现的。 github仓库地址如下: See also Agent Harness Architecture

  • * https://github.com/camel-ai/camelhttps://github.com/camel-ai/owl 官方提供的系统架构图如下所示,可以看到OWL是一个 ** 多agent架构 ** ,user agent和assistant agent不断的交互,去完善问题的答案。assistant agent比较好理解,去调用各种工具解决用户提出的问题,这些工具自己本身也可以是一个agent,比如web agent,采用了ReACT架构,比assistant Agent还要复杂。aser Agent则是人类用户的一个代理,帮助人类用户去监督assistant agent更好的解决问题。 OWL在具体的代码实现上流程更加复杂一些,笔者看的代码入口为:owl\examples\run.py,应该是最简单的一个启动demo了,所有agent使用的模型都是GPT4O,结构图如下所示。 框架中涉及到agent都是通过设置 ** system prompt ** 告诉他们需要做什么工作的,所有角色的system prompt在camel/camel/prompts/ai_society.py路径下。 除了上文提到的assiatant agent和user agent不断交互外,在任务开始时候,还有任务改写和任务计划两个环节,这两个环节是非必须的。 任务改写由TaskSpecifyAgent类完成,目的是借助LLM充分理解人类用户的意图,并细化任务,实现原理也很简单,只是去调用一次LLM,没有什么复杂的流程,使用的system prompt如下。细化后的任务描述会 ** 替换 ** 掉原来的人类提供的任务描述,供下游User Agent和Assistant Agent使用。 Here is a task that {assistant_role} will help {user_role} to complete: {task}.Please make it more specific. Be creative and imaginative.Please reply with the specified task in {word_limit} words or less. Do not add anything else.=============================================中文翻译分割线=============================================这是一个任务,{助理角色} 将帮助 {用户角色} 完成:{任务}。请使其更具体。发挥创意和想象力。请用不超过 {字数限制} 的文字回复指定任务,不要添加其他内容。 任务计划由TaskPlannerAgent类完成, 使用的input prompt如下。任务计划生成后会和人类的任务描述(或细化后的任务描述)拼接起来,供下游User Agent和Assistant Agent使用。 Divide this task into subtasks: {task}. Be concise.=============================================中文翻译分割线=============================================请将此任务分解为子任务:{task}。要求简洁。 user agent和assistant交互过程中,critic model作为第三者,用来选择一个user / assistant agent的最佳答案给到assistant / user agent。critic model可以是人类的判断,让人工介入进行选择,在Human类中实现。OWL是camel库的更高层的封装,Human类在camel库的camel/human.py中实现。critic model也可以是一个LLM,由CriticAgent类实现,使用system prompt如下: You are a {critic_role} who teams up with a {user_role} and a {assistant_role} to solve a task: {task}.Your job is to select an option from their proposals and provides your explanations.Your selection criteria are {criteria}.You always have to choose an option from the proposals.=============================================中文翻译分割线=============================================你是一位 {批评者角色},与一位 {用户角色} 和一位 {助手角色} 合作来解决一项任务:{任务}。你的工作是从他们的提议中选择一个选项,并给出你的解释。你的选择标准是 {criteria(标准内容)}。你必须始终从这些提议中选择一个选项。

User Agent和Assistant Agent之间的交互

本小节笔者用一个例子来展示User Agent和Assistant Agent之间的交互细节,具体任务如下。由于任务比较简单,没涉及TaskSpecifyAgent和TaskPlannerAgent。 上述内容已涵盖OWL框架的核心机制。

深度分析

核心架构设计思想

OWL框架的设计精髓在于角色解耦与协作机制。传统的单Agent架构中,一个Agent既要理解用户意图、又要执行任务、还要判断完成度,容易出现角色混淆导致的行为不一致。OWL通过将User Agent(监督者)与Assistant Agent(执行者)严格分离,配合Critic机制,实现了类似"产品经理-工程师-技术评审"的三方协作模式。 这种设计的核心优势在于:

  • 意图对齐:User Agent持续监督Assistant Agent的输出,确保与原始任务目标一致
  • 迭代优化:Critic机制提供了第三方视角的选择判断,避免了执行者自我评价的偏差
  • 可扩展性:TaskSpecifyAgent和TaskPlannerAgent作为可选前置环节,可以根据任务复杂度灵活插拔

记忆管理机制的层次设计

OWL继承自CAMEL的ChatAgent类实现了三层记忆管理体系: 1. ChatHistoryMemory(短期记忆):通过滑动窗口机制保留最近_N_条对话,适合高频交互场景 2. VectorDBMemory(向量化记忆):将历史对话语义压缩存储,通过向量相似度召回相关内容,解决长期记忆检索问题 3. LongtermAgentMemory(混合记忆):结合前两者,既保留近期上下文又通过向量召回扩展历史感知 这种分层设计反映了Agent系统对"工作记忆-长期记忆"认知architure的工程模拟。

工具生态的"嵌套Agent"模式

OWL的工具体系并非简单的函数调用集合,而是采用了工具即Agent的递归架构。以BrowserToolkit为例:

  • 顶层:User Agent ↔ Assistant Agent的多轮对话
  • 中间层:BrowserToolkit内部嵌套了planning_agent(规划)和web_agent(执行)两个子Agent
  • 底层:各子Agent调用VideoAnalysisToolkit等原子工具 这种嵌套结构使得工具本身具备了"理解意图-分解任务-执行-反馈"的完整闭环能力,是构建复杂Agent系统的关键模式。

Critic机制的两种形态

Critic在OWL中承担"裁判"角色,其实现有两种形态: | 形态 | 实现方式 | 适用场景 | |------|----------|----------| | Human Critic | 人工介入判断 | 高风险决策、需要领域专家审核 | | LLM Critic | CriticAgent(LLM驱动的评估Agent) | 规模化自动化处理、低风险任务 | CriticAgent的system prompt要求其"必须始终选择一个选项",这强制避免了决策瘫痪问题。

实践启示

何时选择OWL架构

OWL的多Agent协作模式适合以下场景:

  • 任务需要多轮迭代优化:如研究报告撰写、代码调试、创意生成
  • 需要外部工具调用:OWL内置11大类工具生态,开箱即用
  • 任务目标需要监督对齐:User Agent可确保Assistant执行不偏离原始意图
  • 需要人工审核节点:Critic机制支持人工介入

避坑指南

  1. 网络问题优先处理:文中案例显示DuckDuckGo搜索失败是常见问题,实战中建议:

  2. 配置多个搜索源备份

  3. 添加搜索超时报错重试逻辑
  4. 考虑使用SerpAPI等商业搜索API
  5. System Prompt工程至关重要:所有Agent行为由Prompt定义,实操建议:

  6. 角色定义要明确(如"你是{user_role},我是{assistant_role}")

  7. 输出格式要强制约束(如必须以"Solution:"开头)
  8. 结束信号要清晰(如
  9. 工具复杂度需要评估:BrowserToolkit等复杂工具的嵌套Agent架构带来强大能力的同时也增加了调试难度,建议:

  10. 先用简单工具验证流程

  11. 复杂工具单独测试后再集成

二次开发建议

基于OWL架构扩展自有Agent系统时:

  • 复用ChatAgent基类处理LLM调用和记忆管理
  • 通过继承ChatAgent实现专业Agent(如CriticAgent、TaskPlannerAgent)
  • 工具生态优先使用camel已有的Toolkit,需要自研时参考BrowserToolkit的嵌套Agent模式
  • Critic机制可根据业务需求选择人工或LLM实现 OWL的核心价值在于其协作框架的成熟度——多Agent如何有效对话、记忆如何管理、工具如何调用的最佳实践已在CAMEL/OWL中经过验证。

*本文档基于对OWL框架源代码和官方文档的分析整理,引用自原文 * * 帮我查询一下作家王小波的3部作品 首先看下user agent和assistant agent的system prompt,这是理解这两个agent需要干什么的核心,也同时给出了中文翻译方便读者阅读。 ** user agent的system prompt: ** ===== RULES OF USER =====Never forget you are a {user_role} and I am a {assistant_role}. Never flip roles! You will always instruct me.We share a common interest in collaborating to successfully complete a task.I must help you to comp

相关实体