"自我意识:最难的问题不是在限制内解决,而是发现自己的局限性"
[![Twitter Follow][twitter-image]][twitter-url] [![WeChat QR Code][wechat-image]][wechat-url] [![Discord][discord-image]][discord-url] [![License: MIT][license-image]][license-url] [![DeepWiki][deepwiki-image]][deepwiki-url] [![arXiv][arxiv-image]][arxiv-url] [![Tutorial][tutorial-image]][tutorial-url] [![Playground][playground-image]][playground-url]
</h4> <h4 align="center">中文版 | 安装 | 环境 | 代理 | 经验 | 训练 | 架构设计原则 | 进化 | 贡献 |
</h4>AWorld (Agent World) 构建智能代理及其操作的丰富环境,推动人工智能能力的前沿,并实现持续进化。该项目提供了代理学习的基本配方:环境访问,代理构建,经验检索,以及模型训练。AWorld的强大之处在于,代理可以利用这些相同的组件自动改进自己。

[!TIP] Python>=3.11
git clone https://github.com/inclusionAI/AWorld && cd AWorld
pip install -e .
提供丰富的环境很困难——包冲突,API需要密钥,并发必须扩展。我们通过三种访问模式使其无痛:
import os
import asyncio
from aworld.sandbox import Sandbox
INVITATION_CODE = os.environ.get("INVITATION_CODE", "")
mcp_config = {
"mcpServers": {
"gaia_server": {
"type": "streamable-http",
"url": "https://playground.aworldagents.com/environments/mcp",
"timeout": 600,
"sse_read_timeout": 600,
"headers": {
"ENV_CODE": "gaia",
"Authorization": f"Bearer {INVITATION_CODE}",
}
}
}
}
async def _list_tools():
sand_box = Sandbox(mcp_config=mcp_config, mcp_servers=["gaia_server"])
return await sand_box.mcpservers.list_tools()
if __name__ == "__main__":
tools = asyncio.run(_list_tools())
print(tools)

在AWorld中,代理只是一个增强的模型。要创建一个代理,您只需要:
from aworld.agents.llm_agent import Agent
from aworld.runner import Runners
# 参考上面的部分获取详细信息
mcp_config = {...}
searcher = Agent(
name="搜索代理",
system_prompt="您专长于搜索。",
mcp_config=mcp_config
)
if __name__ == "__main__":
result = Runners.sync_run(
input="使用Google搜索工具回答关于今天的AI新闻的问题。",
agent=searcher
)
print(f"答案: {result.answer}")
记得先插入您的LLM凭证。
# 设置LLM凭证
export LLM_MODEL_NAME="gpt-4"
export LLM_API_KEY="your-api-key-here"
export LLM_BASE_URL="https://api.openai.com/v1"
现实世界的问题往往需要不止一个代理。AWorld为您提供灵活的构建路径:
想看看它如何运行吗?在AWorld 游乐场加载预构建的DeepResearch团队,检查源代码并从头到尾运行它。

我们的运行时捕获了离线和在线运行中的每一步。每个任务都会生成一个完整的轨迹——每次LLM调用、动作和奖励——因此您可以合成训练样本,审计性能,并自信地迭代。
任务展开涉及多次LLM调用。框架捕获每一步,为您提供完整的轨迹。
import asyncio
from aworld.runner import Runners
from aworld.core.task import Task
from aworld.logs.util import logger
import json
# 参考上面的部分获取代理构建详情
searcher = Agent(...)
if __name__ == "__main__":
async def test_complete_trajectory():
task = Task(
input="使用Google搜索工具回答关于今天的AI新闻的问题。",
agent=searcher
)
responses = await Runners.run_task(task)
resp = responses[task.id]
logger.info(f"任务答案: {resp.answer}")
logger.info(f"任务轨迹: {json.dumps(resp.trajectory, ensure_ascii=False)}")
asyncio.run(test_complete_trajectory())
需要更细粒度的控制吗?调用step()一次检查一个动作/响应对。这允许您在训练期间注入中间奖励,从而实现更丰富、更灵活的学习信号。
import os
import asyncio
from aworld.runner import Runners
from aworld.core.task import Task
from aworld.logs.util import logger
import json
from aworld.config import TaskConfig, TaskRunMode
# 参考上面的部分获取代理构建详情
searcher = Agent(...)
if __name__ == "__main__":
async def test_single_step_introspection():
task = Task(
input="使用Google搜索工具回答关于今天的AI新闻的问题。",
agent=searcher,
conf=TaskConfig(
resp_carry_context=True,
run_mode=TaskRunMode.INTERACTIVE
)
)
trajectory_log = os.path.join(os.path.dirname(__file__), "trajectory_log.txt")
is_finished = False
step = 1
while not is_finished:
with open(trajectory_log, "a", encoding="utf-8") as traj_file:
is_finished, observation, response = await Runners.step(task)
traj_file.write(f"步骤 {step}\n")
traj_file.write(json.dumps(response.trajectory, ensure_ascii=False, indent=2))
traj_file.write("\n\n")
step += 1
asyncio.run(test_single_step_introspection())
一旦代理可以在环境中漫游,AWorld通过两种互补的训练模式完成循环,驱动持续改进。
将任何主流的LLM训练器——AReal、Swift、Verl、Slime等——插入运行时以直接更新模型参数。适配器轻量级,因此您可以在不同的训练器之间重用相同的环境和代理代码。
from datasets import load_dataset
from aworld.agents.llm_agent import Agent
from aworld.config import AgentConfig
from train.trainer.agent_trainer import AgentTrainer
from train.examples.train_gaia_with_aworld_verl.metrics.gaia_reward_function import gaia_reward_func
# 参考上面的部分获取详细信息
mcp_config = {...}
# 配置代理以使用Verl作为模型服务(自动适应推理格式)
agent_config = AgentConfig(
llm_provider="verl"
)
searcher = Agent(
name="搜索代理",
system_prompt="您专长于搜索。",
mcp_config=mcp_config,
conf=agent_config
)
train_dataset = load_dataset("", split="train")
test_dataset = load_dataset("", split="test")
trainer = AgentTrainer(
agent=agent,
config=custom_train_config,
reward_func=gaia_reward_func,
train_dataset=train_dataset,
test_dataset=test_dataset
)
trainer.train()
💡 查看真实案例以获取完整的训练配置,运行代理训练。
除了权重之外,您还可以元学习整个代理系统。启动特定角色的代理,它们可以批评、重写提示、优化工作流程或调整目标代理策略,然后迭代团队(例如我们的Gaia演示)。

该框架旨在高度适应,使研究人员和开发人员能够在多个领域探索和创新,从而推进多代理系统的功能和应用。
| 概念 | 描述 |
|---|---|
agent | 定义代理的基础类、描述、输出解析和多代理协作(群)逻辑,用于定义、管理和编排AWorld系统中的代理。 |
runner | 包含管理代理在环境中的执行循环的运行器类,处理情节展开和平行训练/评估工作流。 |
task | 定义封装环境目标、必要工具和终止条件的基任务类,用于代理交互。 |
swarm | 实现SwarmAgent类,通过分散策略管理多代理协调和涌现的群体行为。 |
sandbox | 提供具有可配置场景的受控运行时,用于快速原型设计和验证代理行为。 |
tools | 提供一个灵活的框架,用于定义、适配和执行AWorld系统中代理-环境交互的工具。 |
context | 特征全面的上下文管理系统,支持代理生命周期中的完整状态跟踪、配置管理、提示优化、多任务状态处理和动态提示模板化。 |
memory | 实现可扩展的代理记忆系统,支持短期和长期记忆、总结、检索、嵌入和集成。 |
trace | 特征可观测的追踪框架,支持分布式追踪、上下文传播、跨度管理和与流行框架及协议的集成,以监控和分析代理、工具和任务执行。 |
| 代理构建 | 编排拓扑 | 环境 |
|---|---|---|
| ✅ 集成MCP服务 | ✅ 封装运行时 | ✅ 运行时状态管理 |
| ✅ 多模型提供商 | ✅ 灵活的MAS模式 | ✅ 高并发支持 |
| ✅ 自定义选项 | ✅ 清晰的状态追踪 | ✅ 分布式训练 |
| ✅ 支持代理技能 🚀 |
我们的使命:AWorld处理复杂性,您专注于创新。本节展示了使用AWorld构建的尖端多代理系统,朝着AGI前进。