mcpField
E
Elemental

Elemental

github.com/AttoAgents框架与 SDK666 周前更新

关于 Elemental

Elemental 是用于构建单 Agent 和多 Agent 系统的框架,让 Agent 协作完成任务。它支持动态规划与重新规划,可配置模型和工具,并能通过代码或 YAML 定义工作流。

主要功能

  1. 01组合单个 Agent 与 Agent 团队
  2. 02执行期间规划和重新规划任务
  3. 03为每个 Agent 配置模型
  4. 04使用模板和多模态消息
  5. 05通过 YAML 或命令行运行工作流
  6. 06观察 Agent 事件

适用场景

  1. 01通过编排 Agent 团队自动执行任务
  2. 02构建带有记忆的对话助手
  3. 03在一个工作流中为 Agent 分配不同模型
  4. 04向 Agent 提供选定的 MCP 工具

MCP 相关

Elemental 可连接已配置的 MCP 服务,并向 Agent 注册其中的单个工具或全部工具。

详细介绍

Elemental

GitHub License PyPI - Version


Elemental 是一个通用的多 Agent 框架,用于通过团队协作的对话式方式组合 AI Agent 来自动执行任务。Agent 可以使用来自各种提供商的语言模型(包括本地环境中的小型模型),从而允许更灵活地选择运行环境,并在需要时将工作与外部基础设施隔离。它也支持领先的大模型。Agent 配备了可与外部系统交互的工具(包括内部工具和 MCP 服务提供的工具)。Elemental 支持多种配置,包括简单助手、隔离 Agent、多 Agent 团队和工作流。Agent 配置是动态的,能够规划工作,并在执行期间重新规划任务。

功能

  • 多 Agent 任务执行。
  • 为每个 Agent 定制语言模型,包括不同的推理引擎和模型规模;直接支持 Ollama、Llama.cpp、Gemini、OpenAI 及兼容 API、Anthropic(原生和 AWS Bedrock)。
  • 支持 OpenAI、Anthropic、Anthropic、Gemini 和 Ollama 的多模态消息。
  • 为每个 Agent 简单地选择模型,例如 ollama|gemma3 或 openai|gpt-4.1-mini。
  • 支持使用 Jinja 格式变量的可自定义模板。
  • 默认动态编排器包含动态规划、执行、重新规划、组合和验证步骤。
  • 简单的命令行界面,通过 YAML 文件提供 Agent 配置。
  • 工具执行采用可扩展接口,可提供能与任何语言模型配合使用的原生工具。
  • 推理型和对话型 Agent 提示词策略。
  • MCP 工具支持选择完整工具集或单个工具。
  • 上下文管理器可将文件引入消息。
  • Agent 事件可观测性。

开始使用

安装

使用以下命令安装:

pip install elemental-agents
从源代码安装
git clone [email protected]:AttoAgents/elemental.git
cd elemental
poetry build
pip install dist/elemental_agents-*.whl
.env 文件

Elemental 项目的 .env 文件示例如下:

openai_api_key="<OPENAI API KEY HERE>"
openai_streaming=False
openai_max_tokens=10000
default_engine="ollama"
custom_max_tokens=2000
google_search_api_key="<GOOGLE SEARCH API HERE>"
google_cse_id="<GOOGLE CSE ID HERE>"
google_search_timeout=5
wikipedia_user_agent="<Agents/1.0 YOUR EMAIL HERE>"
observer_destination="screen"
mcpServers='{"Github": {"command": "npx", "args": ["-y","@modelcontextprotocol/server-github"], "env": {"GITHUB_PERSONAL_ACCESS_TOKEN": "<YOUR GITHUB TOKEN>"}}}'

默认情况下,Elemental 会使用当前目录中的 .env 文件,除非环境变量 ATTO_ENV_FILE 指定了另一个配置文件的路径。

示例

下面展示如何以编程方式使用 elemental_agents 框架来设置简单助手、Agent、Agent 团队、使用工具以及利用外部 MCP 服务。此处展示的所有示例也都可以在 examples 目录中找到。

简单助手

Elemental 中最简单的 Agent 配置是设置一个无法执行工具、仅作为语言模型接口的简单助手。不过,该助手能够感知对话,并包含用于存储对话历史的 ShortMemory。

from loguru import logger

from elemental_agents.core.agent.agent_factory import AgentFactory

TASK = "Why is the sky blue?"
SESSION = "TestSession"

assistant = AgentFactory.create(
    agent_name="AssistantAgent",
    agent_persona="Simple always helpful assistant",
    agent_type="simple",
    llm_model="ollama|gemma3",
)

result = assistant.run(task=TASK, input_session=SESSION)
logger.info(f"Result: {result}")

在此示例中,我们使用 Ollama 和 Gemma3 模型(参见示例 1)。

ReAct Agent

通过使用 ReAct 等迭代推理提示词策略,可以创建更复杂、更完整的 Agent。此时,Agent 能够通过执行操作来使用工具,并将结果作为观察返回。在下面的示例中(参见示例 2),我们为 Agent 配备了多个工具。

from loguru import logger

from elemental_agents.core.agent.agent_factory import AgentFactory

TASK = "Calculate the sum of 5 and 3."
SESSION = "Test Session"

assistant = AgentFactory.create(
    agent_name="AssistantAgent",
    agent_persona="You are a helpful assistant.",
    agent_type="ReAct",
    llm_model="openai|gpt-4.1-mini",
    tools=["Calculator", "CurrentTime", "NoAction"],
)
result = assistant.run(task=TASK, input_session=SESSION)
logger.info(f"Result: {result}")

此任务展示了使用 Calculator 工具的必要性。在此示例中,我们使用 OpenAI API 提供的语言模型。

说明


Elemental 不依赖特定语言模型的函数调用能力,而是通过 Agent 的提示词策略处理操作定义(用于选择工具及其参数)。

带内部规划的 ReAct Agent - PlanReAct

与 ReAct Agent 类似,我们可以定义更复杂的提示词策略,其中包含内部规划。通过选择 agent_type="PlanReAct",我们可以创建一个通过内部规划增强 ReAct 策略的 Agent(参见示例 3)

from loguru import logger

from elemental_agents.core.agent.agent_factory import AgentFactory

TASK = "Calculate the sum of 5 and 3."
SESSION = "Test Session"

assistant = AgentFactory.create(
    agent_name="AssistantAgent",
    agent_persona="You are a helpful assistant.",
    agent_type="PlanReAct",
    llm_model="openai|gpt-4.1-mini",
    tools=["Calculator", "CurrentTime", "NoAction"],
)
result = assistant.run(task=TASK, input_session=SESSION)
logger.info(f"Result: {result}")
对话式 Agent 团队

可以先创建各个 Agent,再使用 GenericAgentTeam 类创建 Agent 团队,让一组 Agent 协同工作。若要让 Agent 具备对话特性,需要使用 agent_type="ConvPlanReAct" 创建它们。此设置通过提示词策略赋予 Agent 对话特性和团队意识(参见示例 4)

from loguru import logger

from elemental_agents.core.agent.agent_factory import AgentFactory
from elemental_agents.core.agent_team.generic_agent_team import GenericAgentTeam
from elemental_agents.core.selector.agent_selector_factory import AgentSelectorFactory

agent1 = AgentFactory.create(
    agent_name="AssistantAgent",
    agent_persona="You are a helpful assistant.",
    agent_type="ConvPlanReAct",
    llm_model="openai|gpt-4.1-mini",
    tools=["Calculator", "CurrentTime", "NoAction"],
)
agent2 = AgentFactory.create(
    agent_name="ProgrammerAgent",
    agent_persona="You are a helpful programmer.",
    agent_type="ConvPlanReAct",
    llm_model="openai|gpt-4.1-mini",
    tools=["Calculator", "CurrentTime", "NoAction"],
)

selector_factory = AgentSelectorFactory()
agent_selector = selector_factory.create(
    selector_name="conversational", lead_agent="AssistantAgent"
)
agent_team = GenericAgentTeam(selector=agent_selector)
agent_team.register_agent("AssistantAgent", agent1, "ConvPlanReAct")
agent_team.register_agent("ProgrammerAgent", agent2, "ConvPlanReAct")

result = agent_team.run(
    task="What is the color of sky on Mars?", input_session="Example Session"
)
logger.info(f"Result: {result}")

上述任务不需要(也可能不会使用)对话。

Agent 编排团队 - 外部规划和任务队列

单个 Agent 可以使用 PlanReAct 这类内部规划提示词策略,也可以使用专门的规划 Agent 来完成规划过程。在这种情况下,Agent 会制定计划并填充任务队列。此过程由灵活的 DynamicAgentOrchestrator 类进行编排,也可以包含更多步骤,例如在执行期间进行重新规划。

以下示例包含两个简单的 Agent,用于说明此过程(参见示例 5)

from loguru import logger

from elemental_agents.core.agent.agent_factory import AgentFactory
from elemental_agents.core.orchestration.dynamic_agent_orchestrator import (
    DynamicAgentOrchestrator,
)

planner_agent = AgentFactory.create(
    agent_name="PlannerAgent",
    agent_persona="",
    agent_type="planner",
    llm_model="openai|gpt-4.1-mini",
)
executor_agent = AgentFactory.create(
    agent_name="ExecutorAgent",
    agent_persona="You are an expert software engineer.",
    agent_type="ReAct",
    llm_model="openai|gpt-4.1-mini",
    tools=[
            "Calculator",
            "CurrentTime",
            "NoAction",
            "ReadFiles",
            "WriteFile",
            "ListFiles"
        ],
)

orchestrator = DynamicAgentOrchestrator(planner=planner_agent, executor=executor_agent)

result = orchestrator.run(
    instruction="Create FastAPI backend for a TODO application.",
    input_session="Example Session"
)
logger.info(f"Result: {result}")

上述示例使用了 DynamicAgentOrchestrator 管理的工作流中的两个步骤。完整列表包括 planner、plan_verifier、replanner、executor、verifier 和 composer。

使用 YAML 文件定义

Agent 配置可以通过 YAML 文件提供。Elemental 包含 Workflow 和 Driver 类,它们会为 DynamicAgentOrchestrator 运行设置所有必要的对象(即 Agent/Agent 团队)。

配置示例(参见示例 6)

workflowName: ModelTest
workflow:
  - executor
executor:
  - name: Assistant
    type: Simple
    persona: >-
      You are expert researcher and great communicator of complex topics using
      simple terms. You always give comprehensive and extensive responses that
      consider the task at hand.
    tools: []
    llm: ollama|qwen3:14b
    temperature: 0
    frequencyPenalty: 0
    presencePenalty: 0
    topP: 1
    maxTokens: 2000
    stopWords: <PAUSE>, STOP
    template: >
      {{ agent_persona }}

      Follow user's instruction. Do this on a stepwise basis and double-check
      each step, one at a time. Use markdown in your response for more readable
      format. 

可以通过在程序中使用 Driver 类,或使用 elemental_agents.main.main 工具来应用此 YAML 配置;后者提供了非常简单的用户界面。

可以使用以下命令运行上述配置:

python -m elemental_agents.main.main --config example.yaml --instruction "Why is the sky blue?" 

在此情况下,--instruction 选项会将用户提供的任务添加到此配置中。

模型上下文协议(MCP)服务工具

要在 Elemental 中使用 MCP 服务,需要在配置文件中使用 mcpConfig 变量定义它们,例如:

mcpServers='{"Github": {"command": "npx", "args": ["-y","@modelcontextprotocol/server-github"], "env": {"GITHUB_PERSONAL_ACCESS_TOKEN": "<YOUR GITHUB TOKEN>"}}}'

上述 mcpConfig 变量值会添加 Github MCP 服务。可以用类似方式在 JSON 数据块中添加条目,以定义多个服务。 随后,可以使用 MCP|server_name|tool_name 语法,将 MCP 服务中的工具无缝添加到 Agent。在以下示例中(参见示例 7),我们将上述 Github MCP 服务中的 search_repositories 工具添加为 MCP|Github|search_repositories。

from loguru import logger

from elemental_agents.core.agent.agent_factory import AgentFactory

TASK = "Search Github repositories for REST API creation in Python."
SESSION = "Test Session"

assistant = AgentFactory.create(
    agent_name="AssistantAgent",
    agent_persona="You are a helpful assistant.",
    agent_type="ReAct",
    llm_model="openai|gpt-4.1-mini",
    tools=["Calculator", "CurrentTime", "NoAction", "MCP|Github|search_repositories"],
)
result = assistant.run(task=TASK, input_session=SESSION)
logger.info(f"Result: {result}")

若要让 Agent 使用 MCP 服务提供的所有工具,请将 MCP|server_name|* 用作工具名称。系统会查询该服务的工具并将它们全部注册。可以将上述示例中的 MCP|Github|search_repositories 改为 MCP|Github|*(参见示例 8)。

联系方式

该项目由 AttoAgents 开发和维护。如需了解更多信息,请通过 [email protected] 联系我们。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。