OxyGent
综合介绍
OxyGent 是由京东探索研究院开发并开源的一款Python框架,专门用于构建生产就绪且可扩展的多智能体系统。在多智能体系统的开发过程中,开发者常常面临标准不一、组件复用困难以及协作逻辑复杂等问题。OxyGent旨在解决这些痛点,它通过一个核心设计,将工具、模型和智能体统一抽象为标准化的模块“Oxy”单元。这个设计让开发者可以像搭积木一样,通过简洁的Python代码快速组合、部署和升级AI协作系统,极大地降低了开发门槛。OxyGent的核心能力体现在其高效的开发流程、智能的动态协作机制、富有弹性的系统架构以及持续的自我进化能力,为开发者提供从构建、运行、评估到演化的完整工具链。
功能列表
- 高效开发: 提供标准化的模块“Oxy”组件,开发者可以通过简洁的Python接口快速组装和重用这些即插即用的模块,无需复杂的配置文件,显著提升开发效率。
- 智能协作: 采用动态规划的协作模式,使智能体能够根据任务的实时情况,智能地分解复杂任务、动态协商解决方案并适应环境变化,从而高效处理预设流程之外的突发状况。
- 弹性架构: 底层架构灵活,支持从简单的ReAct(思考-行动循环)到复杂的混合规划模式等多种智能体组织结构。框架还提供可视化调试工具,帮助开发者优化系统性能。
- 持续进化: 内置独立的评估引擎,能够基于智能体系统的运行日志自动生成用于优化的训练数据。通过这种知识反馈循环,系统可以在与环境和用户的交互中不断学习,实现自我优化和进化。
- 生产级可扩展性: 采用分布式任务调度器,使得系统能够以线性的成本增长来支持协作智能的指数级提升,轻松应对大规模、高并发的实时决策任务。
- 全流程可追溯: 提供完全透明的监控功能,开发者可以清晰地观察每一个智能体的完整思维过程,并对每一步决策实现审计和回溯,确保系统的可靠性和可解释性。
使用帮助
OxyGent 致力于为开发者提供一个易于上手的多智能体开发平台。无论您是经验丰富的AI专家还是初次接触该领域的用户,都可以参考以下步骤快速开始。
环境准备
开始之前,您需要一个Python 3.10或更高版本的环境。我们强烈建议使用conda
来创建一个独立的环境,以避免与其他项目的依赖发生冲突。
- 创建并激活conda环境:打开您的终端,输入以下命令来创建一个名为
oxy_env
的独立环境并激活它。conda create -n oxy_env python==3.10 conda activate oxy_env
- 安装OxyGent:激活
conda
环境后,您可以直接使用pip
来安装OxyGent框架。pip install oxygent
如果您想获取最新的功能或为项目贡献代码,可以从GitHub仓库克隆并进行源码安装:
git clone https://github.com/jd-opensource/OxyGent.git cd OxyGent pip install -r requirements.txt
- 配置大语言模型(LLM):智能体的“思考”能力由大语言模型驱动。您需要配置至少一个LLM的API凭证。OxyGent支持通过环境变量或
.env
文件进行配置,推荐使用.env
文件管理凭证。在您的项目根目录下创建一个名为
.env
的文件,并填入以下内容。请将your_...
替换为您的真实凭证。DEFAULT_LLM_API_KEY="your_api_key" DEFAULT_LLM_BASE_URL="your_base_url" DEFAULT_LLM_MODEL_NAME="your_model_name"
构建第一个多智能体应用
下面我们通过一个实例,展示如何构建一个可以“查询当前时间,并将结果写入文件”的多智能体系统。
- 编写Python脚本:创建一个名为
run_app.py
的文件,复制以下代码。这段代码定义了系统所需的所有组件,并发起一个任务。import os import asyncio from oxygent import MAS, Config, oxy, preset_tools # 1. 设置全局默认的LLM模型名称 Config.set_agent_llm_model("default_llm") # 2. 定义Oxy空间,这是构建系统的蓝图 oxy_space = [ # 定义一个HttpLLM作为默认的大语言模型驱动 oxy.HttpLLM( name="default_llm", api_key=os.getenv("DEFAULT_LLM_API_KEY"), base_url=os.getenv("DEFAULT_LLM_BASE_URL"), model_name=os.getenv("DEFAULT_LLM_MODEL_NAME"), llm_params={"temperature": 0.0}, ), # 加载框架预设的工具集 preset_tools.time_tools, # 时间查询工具 preset_tools.file_tools, # 文件读写工具 preset_tools.math_tools, # 数学计算工具 # 3. 定义具备特定功能的智能体 # 时间智能体,只负责处理和时间相关的任务 oxy.ReActAgent( name="time_agent", desc="一个可以查询当前时间的智能体", tools=["time_tools"], # 仅可使用时间工具 ), # 文件智能体,只负责文件读写 oxy.ReActAgent( name="file_agent", desc="一个可以读写文件的智能体", tools=["file_tools"], # 仅可使用文件工具 ), # 4. 定义一个主智能体,负责任务分解和协调 oxy.ReActAgent( is_master=True, name="master_agent", # 主智能体可以调度以下子智能体 sub_agents=["time_agent", "file_agent"], ), ] # 5. 定义异步主函数来启动系统 async def main(): # 使用定义的oxy_space来初始化多智能体系统(MAS) async with MAS(oxy_space=oxy_space) as mas: # 提出任务需求 query = "现在是什么时间?请把结果保存到 time.txt 文件里。" response = await mas.run(query) print("任务完成,响应如下:") print(response) # 运行主函数 if __name__ == "__main__": asyncio.run(main())
- 代码结构解析:
Config.set_agent_llm_model
: 此行代码为系统中的所有智能体指定了默认使用的LLM实例名称,即default_llm
。oxy_space
: 这是一个列表,是OxyGent的核心概念。它像一个蓝图,定义了系统内所有可用的资源,包括LLM、工具和智能体。oxy.HttpLLM
: 定义了一个名为default_llm
的LLM组件,它通过HTTP协议与模型API进行通信。preset_tools
: OxyGent内置了一些常用工具集,可以直接加载使用。这里我们加载了时间、文件和数学工具。oxy.ReActAgent
: 这是定义智能体的地方。我们定义了两个功能单一的“工具人”智能体(time_agent
和file_agent
),它们分别被授权使用不同的工具。is_master=True
: 这个参数将master_agent
指定为“主智能体”。它不直接执行工具,而是负责理解用户总任务,将其分解,并调度合适的子智能体去完成子任务。MAS(oxy_space=oxy_space)
:MAS
(Multi-Agent System) 是系统的总控制器。我们用定义好的oxy_space
来实例化它。mas.run(query)
: 这是向系统提交任务的入口。MAS会激活主智能体来处理这个query
。
- 运行与观察:确保你的
.env
文件配置正确,然后在终端中运行脚本。python run_app.py
执行后,脚本会输出任务最终的执行结果。同时,你会发现项目目录下多了一个
time.txt
文件,里面记录了脚本运行的时间。工作流程揭秘:当你运行
mas.run
后,系统内部发生了以下过程:a. 用户的请求“现在是什么时间?请把它保存到 time.txt 文件里”首先被发送给master_agent
。b.master_agent
利用其背后的LLM进行思考,将任务分解为两步:第一,获取当前时间;第二,将获取到的时间写入文件。c.master_agent
根据子智能体的描述(desc
字段),判断出time_agent
最适合执行第一步。于是它向time_agent
下达指令:“获取当前时间”。d.time_agent
接收指令,调用其被授权的time_tools
工具,得到当前时间,并将结果返回给master_agent
。e.master_agent
接收到时间结果后,继续执行第二步。它判断出file_agent
最适合写入文件,于是向file_agent
下达指令:“将以下内容写入time.txt
文件:[上一步获取的时间]”。f.file_agent
调用file_tools
将内容写入文件,并向master_agent
报告任务完成。g. 所有子任务完成后,master_agent
向系统报告总任务完成,并生成最终的回复。
应用场景
- 自动化研究助理构建一个能够自动“阅读”网页、提取关键信息并生成摘要的智能体系统。例如,你可以让它监控特定领域的最新论文,下载PDF,将其转换为文本,再由另一个智能体进行总结,最后将摘要发送到你的邮箱。
- 企业级自动化流程在企业内部,可以部署OxyGent系统来处理复杂的业务流程。例如,一个订单处理系统可以由多个智能体协作完成:一个智能体负责接收客户订单,另一个负责查询库存,第三个负责调用物流API安排发货,主智能体则负责监控整个流程的顺利进行。
- 复杂的软件操作可以构建一个能够理解人类指令并操作复杂软件(如Photoshop、Excel)的智能体。用户只需用自然语言描述“帮我把这张图片的背景换成蓝色”,系统就能自动规划并执行一系列精确的软件操作。
- 智能游戏NPC在游戏开发中,可以使用OxyGent为NPC(非玩家角色)注入灵魂。不同的NPC可以作为独立的智能体,它们之间可以进行交流、协作甚至欺骗,从而创造出更加动态和真实的游戏世界。
QA
- OxyGent中的“Oxy”单元具体指什么?“Oxy”是OxyGent框架的核心抽象,它代表系统中的任何一个功能单元,可以是一个LLM模型(
oxy.HttpLLM
)、一个工具(oxy.Tool
)、或是一个智能体(oxy.Agent
)。这种统一的抽象使得所有组件都具备标准化的接口,可以被轻松地组合和管理。 - 相比于其他框架,OxyGent在“生产就绪”方面有哪些具体体现?主要体现在两个方面:一是其可扩展的分布式架构,能够应对高并发请求;二是其完整的可追溯性,系统中的每一次决策、每一次工具调用都有详细的日志记录,方便开发者进行调试、审计和优化,这在商业应用中至关重要。
- 如果我想添加一个自定义的工具,应该怎么做?OxyGent的设计使得添加自定义工具非常简单。你只需要编写一个标准的Python函数,并使用
@oxy.tool
装饰器来标记它,就可以将其注册为一个OxyGent工具。然后,在定义智能体时,将这个新工具的名称添加到其可用的tools
列表中即可。