assemelhar-seLangChaineCrewAIresponder cantandoAutoGenEssas estruturas são populares por fornecerem abstrações de alto nível para a criação de sistemas de IA. No entanto, muitos desenvolvedores, inclusive eu, descobriram que essas ferramentas fazem mais mal do que bem, muitas vezes acrescentando complexidade desnecessária e frustração ao processo de desenvolvimento.
entrar emAgentes atômicos- Uma estrutura modular e simplificada projetada para eliminar os problemas associados às ferramentas de desenvolvimento de IA existentes. Modelo de entrada-processo-saída (IPO)responder cantandoatomicidadefornecendo uma nova abordagem que prioriza a simplicidade, a flexibilidade e o controle do desenvolvedor.
Neste artigo, veremos mais de perto por que o Atomic Agents foi criado, o paradigma de programação que ele usa e como ele se destaca dos demais. Dê uma olhada no Atomic Agents com amostras de código e exemplos do mundo real e, se você já pensou que o LangChain era muito complicado, vamos dar uma olhada nele juntos!
Problemas com as estruturas de IA existentes
Quando comecei a fazer experiências comLangChainNa época, eu estava muito interessado em simplificar o desenvolvimento de agentes de IA. No entanto, na verdade, não é tão simples assim.
Além da complexidade de classes e métodos, os desenvolvedores da LangChain não parecem entender os desafios práticos do desenvolvimento de IA, talvez valorizando mais a elegância teórica do que a usabilidade no mundo real. A abstração excessiva não só torna o desenvolvimento mais difícil, como também o torna opaco.
Ilusões mágicas no CrewAI e no AutoGen
Da mesma forma.CrewAIresponder cantandoAutoGenEstruturas como essas também tentam fornecer soluções "mágicas" automatizando tarefas complexas. A ideia de implementar enxames de agentes de IA para lidar com tudo de forma autônoma é tentadora, mas, na prática, essas ferramentas geralmente não funcionam adequadamente na metade do tempo. Na prática, elas prometem demais e entregam de menos, deixando os desenvolvedores sobrecarregados com comportamentos imprevisíveis e falta de controle.
Essas estruturas obscurecem os processos subjacentes, dificultando a depuração ou a personalização da funcionalidade. O resultado é que essas ferramentas são mais uma caixa preta do que uma estrutura útil, o que não é ideal para o desenvolvimento de aplicativos que exigem confiabilidade e facilidade de manutenção.
A função de excesso de compromisso: perguntas frequentes
Um problema recorrente com essas estruturas é a tendência deFunção de excesso de comprometimento. Algumas empresas e ferramentas afirmam oferecer soluções que se aproximam da AGI (Inteligência Artificial Geral), mas se você tiver uma longa carreira relacionada ao campo da IA, perceberá que ainda não chegamos lá. O hype geralmente leva a expectativas irrealistas e, quando essas ferramentas inevitavelmente ficam aquém do esperado, os desenvolvedores têm de enfrentar as consequências.
Precisa de uma maneira melhor
Depois de lutar contra esses contratempos, ficou claro para nós que precisávamos de uma estrutura desse tipo:Eliminação de complexidade desnecessáriae camadas de abstração:
- Eliminação de complexidade desnecessáriae camadas de abstração.
- Fornecer aos desenvolvedores controle totalsem ocultar a funcionalidade principal por trás de interfaces opacas.
- Seguir paradigmas de programação confiáveis e testados pelo tempomelhorando a capacidade de manutenção e o dimensionamento.
- Criado por desenvolvedores, para desenvolvedoresCompreender os desafios práticos enfrentados no desenvolvimento de IA.
Esse entendimento levou aAgentes atômicosO nascimento de.
Introdução aos agentes atômicos
Agentes atômicosé uma estrutura de código aberto projetada para ser o mais leve, modular e componível possível. Ela segue o padrãoModelo de entrada-processamento-saída (IPO)responder cantandoatomicidadegarantindo que cada componente seja de propósito único, reutilizável e intercambiável.
Por que existem os agentes atômicos?
Agentes atômicos foi criado para preencher as lacunas das estruturas existentes. Seu objetivo é
- Fornecendo componentes claros e gerenciáveis.Simplificando o desenvolvimento da inteligência artificial.
- Eliminar a complexidade redundante que assola outras estruturase abstrações desnecessárias.
- Promoção da flexibilidade e da coerênciapermitindo que os desenvolvedores se concentrem na criação de aplicativos de IA eficazes, em vez de se envolverem com a própria estrutura.
- Incentivo às melhores práticasOs desenvolvedores são incentivados a adotar uma estrutura de código modular e de fácil manutenção.
Ao aderir a esses princípios, o Atomic Agents permite que os desenvolvedores criem agentes e aplicativos de IA que são poderosos e fáceis de gerenciar.
O paradigma de programação por trás dos agentes atômicos
Modelo de entrada-processo-saída (IPO)
No centro do Atomic Agents está oModelo de entrada-processo-saída (IPO)que é um paradigma básico de programação que divide a estrutura de um programa em três fases distintas:
- EntradaReceber dados de usuários ou de outros sistemas.
- ProcessoProcessamento ou conversão de dados.
- SaídaOs dados processados são apresentados como resultados.
Esse modelo é claro e conciso e facilita a compreensão e o gerenciamento do fluxo de dados em um aplicativo.
Em Atomic Agents, isso se traduz em
- Esquemas de entradaUse Pydantic para definir a estrutura dos dados de entrada e as regras de validação.
- Componentes de processamentoAgentes e ferramentas que realizam operações em dados.
- Esquemas de saídaGarantir que os resultados sejam estruturados e validados antes de serem retornados.
Atomicidade: blocos de construção funcionais
atomicidadeO conceito consiste em decompor um sistema complexo em suas menores partes funcionais ou "átomos". Cada átomo
- Ter uma única responsabilidadeIsso facilita a compreensão e a manutenção.
- ReutilizávelIsso permite que os componentes sejam usados em diferentes partes do aplicativo ou até mesmo em diferentes projetos.
- Pode ser combinado com outros componentes atômicos para criar funções mais complexas.
Ao se concentrar em componentes atômicos, o Atomic Agents facilita uma arquitetura modular para aumentar a flexibilidade e o dimensionamento.
Como funcionam os agentes atômicos
ingrediente
No Atomic Agents, o agente de IA consiste em vários componentes principais:
- alerta do sistemaDefinição do comportamento e da finalidade do agente: Definir o comportamento e a finalidade do agente.
- modo de entradaEstrutura de entrada: Especifica a estrutura esperada dos dados de entrada.
- modo de saídaDados de saída: Define a estrutura dos dados de saída.
- memória de acesso aleatório (RAM)Histórico de diálogo: Armazena o histórico do diálogo ou informações de status.
- programação sensível ao contextoInjeta um contexto dinâmico no prompt do sistema em tempo de execução.
- artefatoFunções externas ou interfaces de aplicativos disponíveis para o agente.
Cada componente foi projetado para ser modular e intercambiável e segue os princípios de separação de preocupações e responsabilidade única.
Modularidade e capacidade de composição
A modularidade é a essência do Atomic Agents. Ao projetar componentes para serem autônomos e focados em uma única tarefa, os desenvolvedores podem
- Mudança de ferramentas ou agentessem afetar o restante do sistema.
- Ajuste fino de componentes individuaiscomo avisos ou modos do sistema, sem criar efeitos colaterais indesejados.
- Ao ajustar os modos de entrada e saída, oAgentes e ferramentasSem problemas.
Essa abordagem modular não apenas torna o desenvolvimento mais gerenciável, mas também aprimora a capacidade de manutenção e o dimensionamento dos aplicativos de IA.
Fornecimento de contexto: aumento da flexibilidade
programação sensível ao contextoPermitir que os agentes incluam dados dinâmicos nos prompts do sistema e aprimorem as respostas com base nas informações mais recentes.
Exemplo:
de atomic_agents.lib.components.system_prompt_generator import SystemPromptContextProviderBase def __init__(self, title: str, search_results: List[str]): super(). __init__(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) # Registre o provedor de contexto com o agente agent.register_context_provider("search_results", search_results_provider)
Ao injetar dados em tempo real no contexto do agente, você pode criar aplicativos de IA mais dinâmicos e responsivos.
Encadeamento de padrões e agentes
O Atomic Agents simplifica o processo de encadeamento de agentes e ferramentas, ajustando os modos de entrada e saída.
Exemplo: Suponha que você tenha um agente de geração de consultas e uma ferramenta de pesquisa na Web. Ao definir o padrão de saída do agente de consulta para corresponder ao padrão de entrada da ferramenta de pesquisa, você pode encadeá-los diretamente.
de web_search_agent.tools.searxng_search import SearxNGSearchTool # Inicializar o agente de consulta query_agent = BaseAgent( BaseAgentConfig( # ... outras configurações ... output_schema=SearxNGSearchTool.input_schema, # Alinhar esquema de saída ) )
Esse design melhora a reutilização e a flexibilidade, permitindo a fácil substituição de componentes ou a expansão da funcionalidade.
Razões pelas quais os Atomic Agents são melhores do que outros produtos
Eliminação de complexidade desnecessária
Ao contrário das estruturas que introduzem várias camadas de abstração, o Atomic Agents mantém tudo simples e direto. Cada componente tem uma finalidade clara e não há nenhuma mágica oculta a ser descoberta.
- arquitetura transparenteVocê pode entender completamente como os dados fluem pelo seu aplicativo.
- Depuração mais fácilIdentificação e correção de problemas são facilitadas pela redução da complexidade.
- Curva de aprendizado reduzidaDesenvolvedores: Os desenvolvedores podem começar a trabalhar rapidamente sem precisar entender conceitos abstratos complexos.
Criado por desenvolvedores, para desenvolvedores
O Atomic Agents foi projetado tendo em mente os desafios de desenvolvimento do mundo real. Ele usa paradigmas de programação testados e comprovados e prioriza a experiência do desenvolvedor.
- Sólida base de programaçãoEstrutura de IPO: Ao seguir o modelo de IPO e a atomicidade, a estrutura incentiva as práticas recomendadas.
- Flexibilidade e controleOs desenvolvedores têm liberdade para personalizar e ampliar os componentes conforme necessário.
- voltado para a comunidadeComo um projeto de código aberto, ele convida contribuições e colaboração da comunidade de desenvolvedores.
Componentes autônomos e reutilizáveis
Cada parte do Atomic Agents pode ser executada de forma independente, promovendo assim a reutilização e a modularidade.
- Pode ser testado isoladamenteComponentes: os componentes podem ser testados individualmente para garantir a confiabilidade antes da integração.
- Reutilizável em vários projetosComponentes atômicos: os componentes atômicos podem ser usados em diferentes aplicações, economizando tempo de desenvolvimento.
- Manutenção mais fácilO recurso de isolamento reduz o impacto das alterações e simplifica as atualizações.
Criação de um agente de IA simples
Criaremos um agente de IA que responde às consultas do usuário e faz perguntas de acompanhamento.
Etapa 1: Definir modos personalizados de entrada e saída
from pydantic import BaseModel, Field from typing import List from atomic_agents.agents.base_agent import BaseIOSchema class CustomInputSchema(BaseIOSchema):: chat_message: str = Field(...) chat_message: str = Field(...) , description="A mensagem de entrada do usuário.") class CustomOutputSchema(BaseIOSchema): chat_message: str = Field(... , description="A mensagem de entrada do usuário.") chat_message: str = Field(..., description="A mensagem de entrada do agente.") , description="A mensagem de resposta do agente.") suggested_questions: List[str] = Field(..., description="Perguntas sugeridas.") , description="Perguntas de acompanhamento sugeridas.")
Etapa 2: Configuração dos alertas do sistema
de atomic_agents.lib.components.system_prompt_generator import SystemPromptGenerator system_prompt_generator = SystemPromptGenerator( background=[ "Você é um assistente experiente que fornece informações úteis e sugere perguntas de acompanhamento." ], background=[ "Você é um assistente experiente que fornece informações úteis e sugere perguntas de acompanhamento." ], steps=[ "Analisar a entrada do usuário para entender o contexto e a intenção.", "Fornecer uma resposta relevante e informativa. "Fornecer uma resposta relevante e informativa.", "Gerar 3 perguntas de acompanhamento sugeridas. "Gerar 3 perguntas de acompanhamento sugeridas." ], output_instructions=[ "Garanta clareza e concisão em sua resposta.", "Conclua com 3 sugestões de perguntas relevantes. "Conclua com 3 sugestões de perguntas relevantes." ] )
Etapa 3: inicializar o agente
from atomic_agents.agents.base_agent import BaseAgent, BaseAgentConfig importar instructor import openai # Inicializar o agente agente = BaseAgent( config=BaseAgentConfig( client=instructor.from_openai(openai.OpenAI(api_key='YOUR_OPENAI_API_KEY')), OpenAI(api_key='YOUR_OPENAI_API_KEY'), model="gpt-4", input_schema=CustomInputSchema, output_schema=CustomOutputSchema ) )
Etapa 4: Uso de proxies
user_input = "Can you explain the benefits of using Atomic Agents?" input_data = CustomInputSchema(chat_message=user_input) response = agent.run( input_data) print(f "Agente: {response.chat_message}") print("Perguntas sugeridas:") for question in response.suggested_questions: print(f"- {question}")
Resultado esperado:
Agent: Atomic Agents simplifica o desenvolvimento de IA fornecendo componentes modulares e reutilizáveis com base em paradigmas de programação sólidos, como o modelo IPO e a atomicidade.
Perguntas sugeridas.
- Como o Atomic Agents se compara a outras estruturas de IA?
- Você pode fornecer um exemplo de criação de um agente com o Atomic Agents?
- Quais são os principais recursos do Atomic Agents que aumentam a produtividade?
Ferramentas de integração e provedores de contexto
Suponhamos que queremos que o agente realize uma pesquisa na Web com base em uma consulta do usuário.
Etapa 1: Faça o download e configure o SearxNGSearchTool
fazer uso de CLI do Atomic AssemblerPodemos fazer o download da ferramenta de pesquisa:
atômico
Selecione SearxNGSearchTool no menu e siga as instruções para instalar as dependências.
Etapa 2: Integração de ferramentas de pesquisa
de web_search_agent.tools.searxng_search importar SearxNGSearchTool, SearxNGSearchToolConfig # Inicializar a ferramenta de pesquisa search_tool = SearxNGSearchTool(config=SearxNGSearchToolConfig(base_url="http://localhost:8080"))
Etapa 3: Atualize o agente para usar a ferramenta
Podemos modificar o agente para decidir quando usar a ferramenta de pesquisa com base na entrada do usuário.
from typing import Union class OrchestratorOutputSchema(BaseModel):: str = Field(.... tool: str = Field(... , description="A ferramenta a ser usada: 'search' ou 'chat'") parameters: Union[SearxNGSearchTool.input_schema, CustomInputSchema] = Field(... , description="Parâmetros para 'search' ou 'chat'") , description="Parâmetros para a ferramenta selecionada.") # Modificar a lógica do agente para gerar OrchestratorOutputSchema # ... # Execute a ferramenta selecionada Se response.tool == "search". search_results = search_tool.run(response.parameters) # Processar os resultados da pesquisa caso contrário. # usa o agente de bate-papo anterior passar
Etapa 4: Use um provedor contextual com resultados de pesquisa
def __init__(self, search_results): super(). __init__(title="Search_results"). __init__(title="Resultados da pesquisa") self.search_results = search_results def get_info(self) -> str. return "n".join(self.search_results) # Após obter os resultados da pesquisa provedor_de_contexto = provedor_de_resultados_da_pesquisa(resultados_da_pesquisa) agent.register_context_provider("search_results", context_provider)
Com essa integração, os agentes podem fornecer respostas com base em dados de pesquisa na Web em tempo real.
CLI do Atomic Assembler: ferramentas de gerenciamento fáceis
Uma característica distintiva dos agentes atômicos éCLI do Atomic AssemblerEssa é uma ferramenta de linha de comando que simplifica o gerenciamento de ferramentas e agentes.
Inspirado em algumas bibliotecas modernas do Tailwind, como a shadcn, em que, em vez de instalar componentes como dependências, você assume a propriedade deles em seu próprio código-fonte.
Isso significa que, em vez de instalar a ferramenta como uma dependência usando o pip, nós a copiaremos em nosso projeto. Há duas maneiras de fazer isso:
- Faça o download da ferramenta manualmente ou copie/cole o código-fonte do repositório do GitHub do Atomic Agents e solte-o no arquivo
forja atômica
pasta. - Usaremos a CLI do Atomic Assembler para fazer o download da ferramenta.
função-chave
- Ferramentas de download e gerenciamentoAdicione facilmente novas ferramentas a projetos sem precisar copiar ou resolver dependências manualmente.
- Evitar a desordem de dependênciasMantenha seu projeto enxuto, instalando apenas as ferramentas necessárias.
- Ferramenta de modificação fácilCada ferramenta é independente, com seus próprios testes e documentação.
- Ferramentas de acesso diretoSe desejar, você pode gerenciar manualmente as ferramentas acessando a pasta Tools.
escrever no final
O Atomic Agents traz uma mudança muito necessária para o campo de desenvolvimento de IA, priorizando a simplicidade, a modularidade e o controle do desenvolvedor. Ao adotar paradigmas de programação confiáveis, como o modelo Input-Process-Output e a atomicidade, ele resolve muitos dos problemas que os desenvolvedores enfrentam ao usar LangChain, CrewAI e AutoGen As frustrações encontradas nas estruturas existentes, como a
Com o Atomic Agents, você pode
- Eliminação de complexidade desnecessáriaque se concentra na criação de aplicativos de IA eficazes.
- Controle totalcada componente do sistema.
- Substituir ou modificar componentes com facilidadesem interromper o aplicativo inteiro.
- Aproveitamento da modularidade e da reutilizaçãoMelhorar a eficiência e a capacidade de manutenção.
Se você está cansado de lutar com estruturas excessivamente complexas que prometem demais e entregam de menos, é hora de experimentar o Atomic Agents.