Type something to search...
Atomic Agents 1.0 简介:构建 Agentic AI 的模块化框架

Atomic Agents 1.0 简介:构建 Agentic AI 的模块化框架

想象一下,构建 AI 应用程序就像组装乐高积木一样轻松。这就是 Atomic Agents 的理念,一个基于 Atomic Design 原则的模块化框架,用于构建 AI 代理。随着 1.0 版本 的发布,Atomic Agents 引入了一个强大的 CLI,称为 Atomic Assembler,使构建、管理和部署 AI 应用程序变得更加简单。

为什么选择原子代理?

许多现有的代理人工智能框架专注于构建自主的多代理系统,这些系统更像是好奇心的产物,而不是实用工具。虽然这些系统可能引人入胜,但它们往往缺乏现实应用所需的可预测性和控制能力。

企业通常并不希望有一个每次都以不同风格撰写文章的机器人。他们希望在风格、结构和语调上保持一致,以与其品牌形象相一致。微调模型是一种方法,但它需要大量的数据和资源,并且在使用最新模型(如GPT-4)时并不总是可行的。

原子代理旨在通过提供以下功能来解决这一问题:

  • 模块化:通过组合简单、可互换的组件构建复杂的人工智能系统。
  • 原子性:原子代理中的每个组件、每个工具、每个代理、每个上下文提供者,都尽可能单一目的和可重用,确保良好的关注点分离。
  • 控制:微调每个单独的步骤和组件,从系统提示到工具。
  • 可预测性:确保可重复和可靠的输出,适合商业用例。
  • 可扩展性:轻松添加或替换组件,而无需彻底改造整个系统。

传统模块化方法

在传统软件开发中,复杂问题被分解为更小、可管理的部分:

  1. 定义问题:从流程、用户故事或客户旅程开始。
  2. 分解:将问题划分为更小、可解决的任务。
  3. 开发模块化代码:编写处理特定任务的函数或类。
  4. 集成:将这些模块组合成完整的应用程序。

Atomic Agents 将这种模块化和可预测性带入 AI 代理开发中。

真实世界场景

与其构建一个“写博客文章”的单体 AI 系统,不如设计一个模块化系统,能够:

  1. 生成 与主题相关的查询。
  2. 识别 最相关的前 X 篇文章。
  3. 访问 每篇识别文章的页面。
  4. 提取 每篇文章的文本。
  5. 生成 每篇文章的摘要。
  6. 存储 摘要到向量数据库中。
  7. 生成 与主题相关的问题。
  8. 使用 向量数据库回答这些问题。
  9. 综合 答案成一篇连贯的博客文章。

这种方法虽然更冗长,但提供了更大的控制、可靠性和适用于现实商业应用的适应性。

CLI的介绍:Atomic Assembler

版本1.0中的一个重要新增功能是Atomic Assembler CLI。这个命令行工具允许您:

  • 下载和管理工具:轻松将新工具或代理添加到您的项目中。
  • 避免不必要的依赖:仅安装您所需的内容。
  • 轻松修改工具:每个工具都有自己的测试和文档。
  • 直接访问工具:如果您愿意,可以手动管理工具,而无需使用CLI。

代理的构成

AI 代理,特别是在 Atomic Agents 框架中,由几个关键组件组成:

  • 系统提示:定义代理的行为和目的。
  • 用户输入:用户提供的数据。
  • 工具:代理可以利用的外部函数或 API。
  • 记忆:跟踪对话或状态。

每个组件都设计为模块化和可互换,遵循关注点分离和单一责任原则。

模块化的力量

通过将代理分解为这些基本组件,您可以:

  • 更换工具 而不影响系统的其余部分。
  • 微调提示 以调整代理的行为。
  • 无缝连接代理和工具,通过匹配它们的输入和输出模式。

使用命令行界面:原子汇编器

安装

要开始使用 Atomic Agents 和 CLI,请通过 pip 安装该软件包:

pip install atomic-agents

运行 CLI

使用以下命令启动 CLI:

atomic

或者,如果您使用 Poetry 安装了 Atomic Agents:

poetry run atomic

您将看到一个菜单,用于下载和管理工具:

图像:Atomic CLI 主菜单

每个工具包括:

  • 输入模式
  • 输出模式
  • 使用示例
  • 依赖项
  • 安装说明

管理工具

Atomic Assembler CLI 提供了对您工具的完全控制,让您可以:

  • 避免依赖杂乱:仅安装您需要的工具。
  • 轻松修改工具:每个工具都是自包含的,拥有自己的测试。
  • 直接访问工具:如果您愿意,可以手动管理工具文件夹。

上下文提供者

Atomic Agents 引入了 上下文提供者,以增强您的代理的动态上下文。上下文提供者允许您在运行时将额外信息注入代理的系统提示中。

使用上下文提供者

创建上下文提供者类:子类化 SystemPromptContextProviderBase 并实现 get_info() 方法。

from atomic_agents.lib.components.system_prompt_generator import SystemPromptContextProviderBase   

class SearchResultsProvider(SystemPromptContextProviderBase):
      def __init__(self, title: str, search_results: List[str]):
          super().__init__(title=title)
          self.search_results = search_results

       def get_info(self) -> str:
          return "\n".join(self.search_results)

将上下文提供者注册到代理

## 使用动态数据初始化上下文提供者
search_results_provider = SearchResultsProvider(
      title="搜索结果",
      search_results=["结果 1", "结果 2", "结果 3"]
)   

## 将上下文提供者注册到代理  
agent.register_context_provider("search_results", search_results_provider)

这使得您的代理能够在其系统提示中包含动态数据,如搜索结果,从而根据最新信息增强其响应。

链接模式和代理

Atomic Agents 通过对齐它们的输入和输出模式来简化代理和工具的链接。这个设计促进了模块化和可重用性。

示例:为不同搜索提供者生成查询

假设您有一个生成搜索查询的代理,并且您希望将这些查询与不同的搜索工具一起使用。通过将代理的输出模式与搜索工具的输入模式对齐,您可以轻松地将它们串联或在提供者之间切换。

import instructor
import openai
from pydantic import Field
from atomic_agents.agents.base_agent import BaseIOSchema, BaseAgent, BaseAgentConfig
from atomic_agents.lib.components.system_prompt_generator import SystemPromptGenerator

## Import the search tool
from web_search_agent.tools.searxng_search import SearxNGSearchTool
class QueryAgentInputSchema(BaseIOSchema):
    """Input schema for the QueryAgent."""
    instruction: str = Field(..., description="Instruction to generate search queries for.")
    num_queries: int = Field(..., description="Number of queries to generate.")


## Initialize the query agent
query_agent = BaseAgent(
    BaseAgentConfig(
        client=instructor.from_openai(openai.OpenAI()),
        model="gpt-4",
        system_prompt_generator=SystemPromptGenerator(
            background=[
                "You are an intelligent query generation expert.",
                "Your task is to generate diverse and relevant queries based on a given instruction."
            ],
            steps=[
                "Receive the instruction and the number of queries.",
                "Generate the queries in JSON format."
            ],
            output_instructions=[
                "Ensure each query is unique and relevant.",
                "Provide the queries in the expected schema."
            ],
        ),
        input_schema=QueryAgentInputSchema,
        output_schema=SearxNGSearchTool.input_schema,  # Align output schema
    )
)

模块化:通过将query_agentoutput_schema设置为与SearxNGSearchToolinput_schema匹配,您可以直接将代理的输出用作工具的输入。

可切换性:要切换到不同的搜索提供者,导入另一个搜索工具并更新output_schema

## Import a different search tool
from web_search_agent.tools.another_search import AnotherSearchTool

## Update the output schema
query_agent.config.output_schema = AnotherSearchTool.input_schema

示例:构建一个简单的 AI 代理

现在我们已经介绍了基础知识,让我们使用 Atomic Agents 构建一个简单的 AI 代理,并探讨它的内部工作原理。

第一步:安装

首先,安装必要的软件包:

pip install atomic-agents openai instructor

步骤 2:导入组件

导入必要的组件:

import os
from atomic_agents.agents.base_agent import BaseAgent, BaseAgentConfig, BaseIOSchema
from atomic_agents.lib.components.system_prompt_generator import SystemPromptGenerator
from atomic_agents.lib.components.agent_memory import AgentMemory
from pydantic import Field
import instructor
import openai

步骤 3:定义自定义输出模式

class CustomOutputSchema(BaseIOSchema):
    chat_message: str = Field(..., description="The chat message from the agent.")
    suggested_questions: List[str] = Field(..., description="Suggested follow-up questions.")

步骤 4:设置系统提示

system_prompt_generator = SystemPromptGenerator(
    background=["这个助手知识渊博、乐于助人,并建议后续问题。"],
    steps=[
        "分析用户的输入,以理解上下文和意图。",
        "制定相关且信息丰富的回应。",
        "为用户生成 3 个建议的后续问题。"
    ],
    output_instructions=[
        "对用户查询提供清晰简洁的信息。",
        "在每个回应的结尾提供 3 个与用户相关的建议问题。"
    ]
)

第5步:初始化代理

## Initialize memory (optional)
memory = AgentMemory()

## Initialize the agent
agent = BaseAgent(
    config=BaseAgentConfig(
        client=instructor.from_openai(openai.OpenAI(api_key=os.getenv('OPENAI_API_KEY'))),
        model="gpt-4o-mini",
        system_prompt_generator=system_prompt_generator,
        memory=memory,
        output_schema=CustomOutputSchema
    )
)

第6步:使用代理

user_input = "Can you explain the benefits of using Atomic Agents?"
response = agent.run(agent.input_schema(chat_message=user_input))
print(f"Agent: {response.chat_message}")
print("Suggested questions:")
for question in response.suggested_questions:
    print(f"- {question}")

幕后发生了什么?

  • System Prompt: 定义代理的行为并指导LLM。
  • Input Schema: 验证用户的输入。
  • Output Schema: 确保代理的响应符合预期格式。
  • Memory: 记录对话历史。

结论

Atomic Agents 1.0 为 AI 代理开发带来了模块化、控制和灵活性。随着 Atomic Assembler CLI 的引入以及上下文提供者和模式链等功能,构建复杂的 AI 应用程序变得前所未有的简单。

无论您是希望构建 AI 驱动工具的开发人员,还是希望自动化复杂任务的企业,Atomic Agents 都提供了创建可靠且易于维护的 AI 系统的基础构件。

今天开始

Related Posts

使用 ChatGPT 搜索网络功能的 10 种创意方法

使用 ChatGPT 搜索网络功能的 10 种创意方法

例如,提示和输出 你知道可以使用 ChatGPT 的“搜索网络”功能来完成许多任务,而不仅仅是基本的网络搜索吗? 对于那些不知道的人,ChatGPT 新的“搜索网络”功能提供实时信息。 截至撰写此帖时,该功能仅对使用 ChatGPT 4o 和 4o-mini 的付费会员开放。 ![](https://images.weserv.nl/?url=https://cdn-im

阅读更多
在人工智能和技术领域保持领先地位的 10 项必学技能 📚

在人工智能和技术领域保持领先地位的 10 项必学技能 📚

在人工智能和科技这样一个动态的行业中,保持领先意味着不断提升你的技能。无论你是希望深入了解人工智能模型性能、掌握数据分析,还是希望通过人工智能转变传统领域如法律,这些课程都是你成功的捷径。以下是一个精心策划的高价值课程列表,可以助力你的职业发展,并让你始终处于创新的前沿。 1. 生成性人工智能简介课程: [生成性人工智能简介](https://genai.works

阅读更多
10 个强大的 Perplexity AI 提示,让您的营销任务自动化

10 个强大的 Perplexity AI 提示,让您的营销任务自动化

在当今快速变化的数字世界中,营销人员总是在寻找更智能的方法来简化他们的工作。想象一下,有一个个人助理可以为您创建受众档案,建议营销策略,甚至为您撰写广告文案。这听起来像是一个梦想? 多亏了像 Perplexity 这样的 AI 工具,这个梦想现在成为现实。通过正确的提示,您可以将 AI 转变为您的 个人营销助理。在本文中,我将分享 10 个强大的提示,帮助您自动

阅读更多
10+ 面向 UI/UX 设计师的顶级 ChatGPT 提示

10+ 面向 UI/UX 设计师的顶级 ChatGPT 提示

人工智能技术,如机器学习、自然语言处理和数据分析,正在重新定义传统设计方法。从自动化重复任务到实现个性化用户体验,人工智能使设计师能够更加专注于战略思维和创造力。随着这一趋势的不断增长,UI/UX 设计师越来越多地采用 AI 驱动的工具来促进他们的工作。利用人工智能不仅能提供基于数据的洞察,还为满足多样化用户需求的创新设计解决方案开辟了机会。 1. 用户角色开发 目的

阅读更多
在几分钟内完成数月工作的 100 种人工智能工具

在几分钟内完成数月工作的 100 种人工智能工具

人工智能(AI)的快速发展改变了企业的运作方式,使人们能够在短短几分钟内完成曾经需要几周或几个月的任务。从内容创作到网站设计,AI工具帮助专业人士节省时间,提高生产力,专注于创造力。以下是按功能分类的100个AI工具的全面列表,以及它们在现实世界中的使用实例。 1. 研究工具 研究可能耗时,但人工智能工具使查找、分析和组织数据变得更加容易。**ChatGPT, Cop

阅读更多
你从未知道的 17 个令人惊叹的 GitHub 仓库

你从未知道的 17 个令人惊叹的 GitHub 仓库

Github 隐藏的宝石!! 立即收藏的代码库 学习编程相对简单,但掌握编写更好代码的艺术要困难得多。GitHub 是开发者的宝藏,那里“金子”是其他人分享的精心编写的代码。通过探索 GitHub,您可以发现如何编写更清晰的代码,理解高质量代码的样子,并学习成为更熟练开发者的基本步骤。 1. notwaldorf/emoji-translate *谁需

阅读更多