Agent框架OWL原理详解


Agent框架OWL原理详解

仅用于站内搜索,没有排版格式,具体信息请跳转上方微信公众号内链接

前言

github仓库地址如下:
https ://github. com/camel-ai/camelhttps ://github. com/camel-ai/owl
官方提供的系统架构图如下所示,可以看到OWL是一个多agent架构,useragent和assistantagent不断的交互,去完善问题的答案。assistantagent比较好理解,去调用各种工具解决用户提出的问题,这些工具自己本身也可以是一个agent,比如webagent,采用了ReACT架构,比assistantAgent还要复杂。aserAgent则是人类用户的一个代理,帮助人类用户去监督assistantagent更好的解决问题。
OWL在具体的代码实现上流程更加复杂一些,笔者看的代码入口为:owl\examples\run. py,应该是最简单的一个启动demo了,所有agent使用的模型都是GPT4O,结构图如下所示。
框架中涉及到agent都是通过设置systemprompt告诉他们需要做什么工作的,所有角色的systemprompt在camel/camel/prompts/ai_society. py路径下。
除了上文提到的assiatantagent和useragent不断交互外,在任务开始时候,还有任务改写和任务计划两个环节,这两个环节是非必须的。
任务改写由TaskSpecifyAgent类完成,目的是借助LLM充分理解人类用户的意图,并细化任务,实现原理也很简单,只是去调用一次LLM,没有什么复杂的流程,使用的systemprompt如下。细化后的任务描述会替换掉原来的人类提供的任务描述,供下游UserAgent和AssistantAgent使用。

UserAgent和AssistantAgent之间的交互
本小节笔者用一个例子来展示UserAgent和AssistantAgent之间的交互细节,具体任务如下。由于任务比较简单,没涉及TaskSpecifyAgent和TaskPlannerAgent。
帮我查询一下作家王小波的3部作品
首先看下useragent和assistantagent的systemprompt,这是理解这两个agent需要干什么的核心,也同时给出了中文翻译方便读者阅读。
useragent的systemprompt:

AssistantAgent的SystemPrompt:

1
ROUND1

useragent输入:这块强调了尽量使用工具来回答任务,不然模型会优先用自身知识进行回答。

useragent输出&assistantagent输入

assistantagent输出:assistantagent触发了工具调用,尝试调用duckduckgo搜索工具,但是因为网络问题没有检索成功,最终反馈自己没有检索成功。

2
ROUND2
useragent输入:useragent输入为上一轮assistant的输出,同时agent保存了历史的对话内容,也会一并输入到模型里(这块省略了没有粘贴)。

useragent输出&assistantagent的输入:既然检索失败,useragent指导assistantagent根据自己的内在知识进行回答。

assistantagent的输出:assiantagent根据自身知识回答了王小波的三部作品是啥。

3
ROUND3
useragent输入:round2assistant的输出,同时也有历史的交互记录。

useragent的输出:useragent判断问题已经被成功解答,输出,交互跳出循环。

OWL的agent及工具
1
agent父类的实现
所有的Agent的实现都是继承自ChatAgent类,路径在camel/camel/agents/chat_agent. py。ChatAgent类除了负责调用LLM接口外还主要负责如下两个功能:

ChatHistoryMemory:返回最近的_window_size条(不是轮数)历史对话。

LongtermAgentMemory:结合了ChatHistoryMemory和VectorDBMemory的记忆召回特性,既返回最近时间窗口的内容也返回向量化召回的内容,具体实现如下:

2
agent子类
以ChatAgent为父类的所有agent实现都在camel库的camel/agents路径下,按照功能主要大致分为如下两类:
1. 专门化Agent类:
CriticAgent:专门用于评估和批评响应或解决方案的智能体
EmbodiedAgent:为具身AI场景设计的智能体,能够理解和响应物理世界上下文
KnowledgeGraphAgent:专门构建和利用知识图谱进行增强推理的智能体
MCPAgent:支持ModelContextProtocol的智能体
RepoAgent:用于代码仓库操作的智能体
RoleAssignmentAgent:负责角色分配的智能体
SearchAgent:专注于信息检索和搜索任务的智能体
2. 任务管理Agent类:
TaskCreationAgent:任务创建智能体
TaskPlannerAgent:任务规划智能体
TaskPrioritizationAgent:任务优先级排序智能体
TaskSpecifyAgent:任务细化智能体
3
工具组件
OWL的工具组件在camel/camel/toolkits路径下实现,大致可分为以下11类,各家agent框架整体流程花样并不多,效果的核心壁垒主要在于工具性能是否强大,可以看到camel-ai提供的工具组件非常全面:
1. 搜索与网络工具:
SearchToolkit:支持多种搜索引擎(Google、DuckDuckGo、Wikipedia、Bing、百度、WolframAlpha)
BrowserToolkit:网页浏览和交互,包括浏览器模拟和内容提取
SearxNGToolkit:基于SearxNG的搜索工具
BrowserNonVisualToolkit:非可视化浏览器工具
Crawl4AIToolkit:网页爬取工具
2. 学术研究工具
ArxivToolkit:与arXivAPI交互,搜索和下载学术论文
GoogleScholarToolkit:从GoogleScholar检索作者和出版物信息
SemanticScholarToolkit:与SemanticScholarAPI交互获取论文和作者数据
PubMedToolkit:与PubMed的E-utilitiesAPI交互访问MEDLINE数据
3. 开发与代码工具
CodeExecutionToolkit:代码执行,支持多种沙箱环境(Python、Jupyter、Docker、subprocess、e2b)
GitHubToolkit:与GitHub仓库交互,包括检索issues和创建pullrequests
TerminalToolkit:终端操作,如按名称或内容搜索文件、执行shell命令
OpenAPIToolkit:处理OpenAPI规范和RESTAPIs
4. 社交媒体与通信工具
TwitterToolkit:Twitter操作,包括创建推文、删除推文和检索用户资料
LinkedInToolkit:LinkedIn操作,包括创建帖子、删除帖子和检索用户资料
SlackToolkit:Slack操作,包括创建频道、加入频道和管理频道成员
WhatsAppToolkit:与WhatsAppBusinessAPI交互
RedditToolkit:Reddit操作,包括收集热门帖子、评论情感分析
5. 文档处理工具
ExcelToolkit:从Excel文件提取和处理内容,包括转换为markdown表格
PPTXToolkit:创建和操作PowerPoint文件,包括添加幻灯片、文本和图像
FileWriteToolkit:创建、写入和修改文本文件
MinerUToolkit:使用MinerUAPI提取和处理文档内容,支持OCR、公式识别和表格检测
MarkItDownToolkit:文档转换工具
6. AI与多媒体工具
DalleToolkit:使用OpenAI的DALL-E模型生成图像
ImageAnalysisToolkit:使用视觉语言模型进行综合图像分析和理解
VideoAnalysisToolkit:使用视觉语言模型分析视频内容,包括帧提取和视频问答
AudioAnalysisToolkit:音频处理和分析,包括转录和音频内容问答
VideoDownloaderToolkit:下载视频并可选择分割成块
7. 数据分析与计算工具
MathToolkit:执行基本数学运算,如加法、减法和乘法
SymPyToolkit:使用SymPy进行符号计算,包括代数操作、微积分和线性代数
NetworkXToolkit:使用NetworkX库进行图操作和分析
OpenBBToolkit:通过OpenBB平台访问和分析金融市场数据
DataCommonsToolkit:查询和检索DataCommons知识图谱数据
8. 云服务与API集成工具
GoogleMapsToolkit:访问GoogleMaps服务,包括地址验证、海拔数据和时区信息
GoogleCalendarToolkit:创建、检索、更新和删除Google日历事件
NotionToolkit:使用NotionAPI从Notion页面和工作区检索信息
StripeToolkit:通过Stripe处理支付和管理金融交易
ZapierToolkit:与Zapier的NLAAPI交互,通过自然语言命令执行操作
9. 新闻与信息工具
AskNewsToolkit:使用AskNewsAPI根据用户查询获取新闻、故事和其他内容
DappierToolkit:搜索实时数据并获取跨关键垂直领域的AI推荐
WeatherToolkit:使用OpenWeatherMapAPI获取城市天气数据
10. 协议与框架工具
MCPToolkit:使用ModelContextProtocol与外部工具交互
RetrievalToolkit:基于指定查询从本地向量存储系统检索信息
MemoryToolkit:保存、加载和清除ChatAgent的记忆
HumanToolkit:促进AI系统中的人机交互和反馈
11. 专业化工具
MeshyToolkit:处理3D网格数据和操作
JinaRerankerToolkit:基于与给定查询的相关性对文档进行重新排序
KlavisToolkit:与KavisAI的API交互创建远程托管的生产就绪MCP服务器

2. planning_agent:用于计划浏览器的操作步骤,使用的systemprompt如下:

除此之外,在交互流程上,BrowserToolkit使用了ReAct框架,主流程中的useragent和assistantagent都没有实现的这么复杂。
进技术交流群请添加AINLP小助手微信(id:ainlp2)
请备注具体方向+所用到的相关技术点
关于AINLP
AINLP是一个有趣有AI的自然语言处理社区,专注于AI、NLP、机器学习、深度学习、推荐算法等相关技术的分享,主题包括LLM、预训练模型、自动生成、文本摘要、智能问答、聊天机器人、机器翻译、知识图谱、推荐系统、计算广告、招聘信息、求职经验分享等,欢迎关注!加技术交流群请添加AINLP小助手微信(id:ainlp2),备注工作/研究方向+加群目的。


文章作者: ZejunCao
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 ZejunCao !
  目录