Atomic Agents 框架被设计为模块化、可扩展且易于使用。其主要目标是消除冗余的复杂性、不必要的抽象和隐藏的假设,同时仍然为通过原子性构建人工智能应用程序提供灵活而强大的平台。该框架提供了一组工具和代理,可以组合起来创建强大的应用程序。它构建在 Instructor 之上,并利用 Pydantic 的强大功能进行数据和模式验证及序列化。
虽然现有的代理人工智能框架专注于构建自主多代理系统,但它们通常缺乏现实应用程序所需的控制和可预测性。企业需要人工智能系统能够产生与其品牌和目标相符的一致、可靠的输出。
原子代理通过提供以下功能来满足这一需求:
模块化:通过组合小型、可重用的组件来构建人工智能应用程序。
可预测性:定义清晰的输入和输出模式以确保一致的行为。
可扩展性:轻松更换组件或集成新组件,而无需中断整个系统。
控制:单独微调系统的每个部分,从系统提示到工具集成。
在原子代理中,代理由几个关键组件组成:
系统提示:定义代理的行为和目的。
输入架构:指定代理输入的结构和验证规则。
输出架构:指定代理输出的结构和验证规则。
内存:存储对话历史记录或其他相关数据。
上下文提供程序:在运行时将动态上下文注入代理的系统提示中。
这是一个高级架构图:
要安装原子代理,您可以使用 pip:
pip 安装原子代理
确保您还安装了要使用的提供程序。例如,要使用 OpenAI 和 Groq,您可以安装openai
和groq
软件包:
pip 安装 openai groq
这还会安装 CLI Atomic Assembler ,它可用于下载工具(很快还可以下载代理和管道)。
对于本地开发,您可以从存储库安装:
git 克隆 https://github.com/BrainBlend-AI/atomic-agents.gitcd 原子代理 诗歌装置
Atomic Agents 使用 monorepo 结构,具有以下主要组件:
atomic-agents/
:核心原子代理库
atomic-assembler/
:用于管理 Atomic Agents 组件的 CLI 工具
atomic-examples/
:展示原子代理用法的示例项目
atomic-forge/
:可与原子代理一起使用的工具集合
完整的示例列表可以在示例目录中找到。
我们努力彻底记录每个示例,但如果有任何不清楚的地方,请随时提出问题或拉取请求以改进文档。
下面是一个快速片段,展示了使用原子代理创建强大的代理是多么容易:
# 定义自定义输出模式class CustomOutputSchema(BaseIOSchema):""" 自定义输出模式的文档字符串 """chat_message: str = Field(..., description="来自代理的聊天消息。")suggested_questions: List[str ] = Field(..., description="建议的后续问题。")# 设置系统提示system_prompt_generator = SystemPromptGenerator(background=["该助手是知识渊博、有帮助,并建议后续问题。"],steps=["分析用户的输入以了解上下文和意图。","制定相关且信息丰富的响应。","生成 3 个建议的后续问题用户。"],output_instructions=["提供清晰简洁的信息来响应用户的查询。","在每个响应中为用户提供 3 个相关的建议问题。"] )# 初始化代理agent = BaseAgent(config=BaseAgentConfig(client=your_openai_client, # 替换为您实际的clientmodel="gpt-4o-mini",system_prompt_generator=system_prompt_generator,memory=AgentMemory(),output_schema=CustomOutputSchema) )# 使用agentresponse = agent.run(user_input)print(f"Agent: {response.chat_message}")print("建议问题:")for Question in response.suggested_questions:print(f"- {question}")
此代码片段展示了如何创建可定制的代理来响应用户查询并建议后续问题。有关完整的、可运行的示例,请参阅atomic-examples/quickstart/quickstart/
目录中的以下文件:
基本聊天机器人 一个帮助您入门的最小聊天机器人示例。
自定义聊天机器人带有自定义系统提示的更高级示例。
带有架构的自定义聊天机器人 具有自定义输出架构的高级示例。
多提供商聊天机器人 演示如何使用不同的提供商,例如 Ollama 或 Groq。
除了快速入门示例之外,我们还有更复杂的示例来展示原子代理的强大功能:
Web 搜索代理:执行 Web 搜索并根据结果回答问题的智能代理。
YouTube Summarizer:从 YouTube 视频中提取和总结知识的代理。
有关示例的完整列表,请参阅示例目录。
这些示例为理解和使用原子代理提供了一个很好的起点。
原子代理允许您使用上下文提供程序通过动态上下文增强代理。上下文提供程序使您能够在运行时将附加信息注入代理的系统提示中,从而使您的代理更加灵活和上下文感知。
要使用上下文提供程序,请创建一个继承自SystemPromptContextProviderBase
的类并实现get_info()
方法,该方法返回要添加到系统提示符的上下文字符串。
这是一个简单的例子:
fromatomic_agents.lib.components.system_prompt_generator 导入 SystemPromptContextProviderBaseclass SearchResultsProvider(SystemPromptContextProviderBase):def __init__(self, title: str, search_results: List[str]):super().__init__(title=title)self.search_results = search_resultsdef get_info(self ) -> str:返回"n".join(self.search_results)
然后,您可以向代理注册您的上下文提供程序:
# 使用动态 datasearch_results_provider = SearchResultsProvider(title="Search Results",search_results=["Result 1", "Result 2", "Result 3"] 初始化上下文提供程序 )# 向agent注册上下文提供者agent.register_context_provider("search_results", search_results_provider)
这允许您的代理将搜索结果(或任何其他上下文)包含在其系统提示中,从而根据最新信息增强其响应。
原子代理通过调整代理和工具的输入和输出模式,可以轻松地将代理和工具链接在一起。这种设计使您可以轻松更换组件,从而促进人工智能应用程序的模块化和可重用性。
假设您有一个生成搜索查询的代理,并且您希望通过不同的搜索工具使用这些查询。通过将代理的输出模式与搜索工具的输入模式对齐,您可以轻松地将它们链接在一起或在不同的搜索提供程序之间切换。
以下是实现这一目标的方法:
import coachimport openaifrom pydantic import Fieldfromatomic_agents.agents.base_agent import BaseIOSchema, BaseAgent, BaseAgentConfigfromatomic_agents.lib.components.system_prompt_generator import SystemPromptGenerator# 导入要使用的搜索工具from web_search_agent.tools.searxng_search import SearxNGSearchTool# 定义查询的输入架构代理类QueryAgentInputSchema(BaseIOSchema):"""QueryAgent 的输入架构。"""指令:str = Field(...,description="生成搜索查询的指令。")num_queries: int = Field(...,description ="要生成的查询数。")# 初始化查询agentquery_agent = BaseAgent(BaseAgentConfig(client=instructor.from_openai(openai.OpenAI()),model="gpt-4o-mini",system_prompt_generator=SystemPromptGenerator(background=["您是一位智能查询生成专家。","您的任务是根据给定指令生成指定数量的多样化且高度相关的查询。"],steps=["接收指令和要生成的查询数量。","生成查询JSON 格式。"],output_instructions=["确保每个查询都是唯一且相关的。","以预期架构提供查询。"], ),input_schema=QueryAgentInputSchema,output_schema=SearxNGSearchTool.input_schema, # 对齐输出架构) )
在这个例子中:
模块化:通过将query_agent
的output_schema
设置为与SearxNGSearchTool
的input_schema
匹配,您可以直接使用代理的输出作为工具的输入。
可互换性:如果您决定切换到不同的搜索提供程序,您可以导入不同的搜索工具并相应地更新output_schema
。
例如,要切换到另一个搜索服务:
# 导入不同的搜索工具 from web_search_agent.tools.another_search import AnotherSearchTool# 更新输出 schemaquery_agent.config.output_schema = AnotherSearchTool.input_schema
这种设计模式简化了链接代理和工具的过程,使您的 AI 应用程序更具适应性且更易于维护。
要运行 CLI,只需运行以下命令:
原子
或者,如果您使用 Poetry 安装了 Atomic Agents,例如:
诗歌运行原子
或者,如果您使用 uv 安装了 Atomic Agents:
紫外运行原子
运行此命令后,您将看到一个菜单,允许您下载工具。
每个工具都有自己的:
输入模式
输出模式
使用示例
依赖关系
安装说明
atomic-assembler
CLI 使您可以完全控制您的工具,避免不必要的依赖项造成的混乱。此外,它还使修改工具变得简单,每个工具都有自己的一套可靠性测试。
但您不仅限于 CLI!如果您愿意,您可以直接访问工具文件夹并通过简单地根据需要复制和粘贴来手动管理它们。
原子代理取决于讲师包。这意味着在使用 OpenAI 的所有示例中,也可以使用 Instructor 支持的任何其他 API,例如 Ollama、Groq、Mistral、Cohere、Anthropic、Gemini 等。有关完整列表,请参阅 GitHub 页面上的讲师文档。
API 文档可以在这里找到。
Atomic Forge 是一个工具集合,可以与 Atomic Agent 一起使用来扩展其功能。当前的工具包括:
计算器
SearchxNG 搜索
YouTube 脚本抓取器
有关使用和创建工具的更多信息,请参阅 Atomic Forge 自述文件。
我们欢迎贡献!有关如何为原子代理做出贡献的详细信息,请参阅开发人员指南。以下是一些快速步骤:
分叉存储库
创建一个新分支( git checkout -b feature-branch
)
做出你的改变
运行测试( pytest --cov atomic_agents
)
格式化您的代码( black atomic_agents atomic_assembler
)
检查代码 ( flake8 atomic_agents atomic_assembler
)
提交您的更改( git commit -m 'Add some feature'
)
推送到分支( git push origin feature-branch
)
打开拉取请求
有关完整的开发设置和指南,请参阅开发人员指南。
该项目已获得 MIT 许可证的许可 - 有关详细信息,请参阅许可证文件。