Aprendizagem pessoal com IA
e orientação prática
讯飞绘镜

Adeus LangChain! A Atomic Agents está pegando fogo!

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

Logotipo da Atomic Agents

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:

  1. EntradaReceber dados de usuários ou de outros sistemas.
  2. ProcessoProcessamento ou conversão de dados.
  3. 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:

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)
# 向代理注册上下文提供程序
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.

from web_search_agent.tools.searxng_search import SearxNGSearchTool

# Initialize the query agent
query_agent = BaseAgent(
BaseAgentConfig(
# ... other configurations ...
output_schema=SearxNGSearchTool.input_schema,  # Align output schema
)
)

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(..., description="The user's input message.")

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

Etapa 2: Configuração dos alertas do sistema

from atomic_agents.lib.components.system_prompt_generator import SystemPromptGenerator

system_prompt_generator = SystemPromptGenerator(
background=[
"You are a knowledgeable assistant that provides helpful information and suggests follow-up questions."
],
steps=[
"Analyze the user's input to understand the context and intent.",
"Provide a relevant and informative response.",
"Generate 3 suggested follow-up questions."
],
output_instructions=[
"Ensure clarity and conciseness in your response.",
"Conclude with 3 relevant suggested questions."
]
)

Etapa 3: inicializar o agente

from atomic_agents.agents.base_agent import BaseAgent, BaseAgentConfig
import instructor
import openai

# Initialize the agent
agent = BaseAgent(
config=BaseAgentConfig(
client=instructor.from_openai(openai.OpenAI(api_key='YOUR_OPENAI_API_KEY')),
model="gpt-4",
system_prompt_generator=system_prompt_generator,
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"Agent: {response.chat_message}")
print("Suggested questions:")
for question in response.suggested_questions:
print(f"- {question}")

Resultado esperado:

Agent: Atomic Agents simplifies AI development by providing modular, reusable components based on solid programming paradigms like the IPO model and atomicity.
Suggested questions:
- How does Atomic Agents compare to other AI frameworks?
- Can you provide an example of building an agent with Atomic Agents?
- What are the key features of Atomic Agents that enhance productivity?

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:

atomic

Selecione SearxNGSearchTool no menu e siga as instruções para instalar as dependências.

Etapa 2: Integração de ferramentas de pesquisa

from web_search_agent.tools.searxng_search import SearxNGSearchTool, SearxNGSearchToolConfig

# 初始化搜索工具
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):
tool: str = Field(..., description="The tool to use: 'search' or 'chat'")
parameters: Union[SearxNGSearchTool.input_schema, CustomInputSchema] = Field(..., description="Parameters for the selected tool.")
# 修改代理逻辑以输出 OrchestratorOutputSchema
# ...
# 执行选定的工具
if response.tool == "search":
search_results = search_tool.run(response.parameters)
# 处理检索结果
else:
# 使用之前的聊天代理
pass

Etapa 4: Use um provedor contextual com resultados de pesquisa

class SearchResultsProvider(SystemPromptContextProviderBase):
    def __init__(self, search_results):
        super().__init__(title="Search Results")
        self.search_results = search_results
def get_info(self) -> str:
return "n".join(self.search_results)
# After obtaining search results
context_provider = SearchResultsProvider(search_results)
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:

  1. 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 atomic-forge pasta.
  2. Usaremos a CLI do Atomic Assembler para fazer o download da ferramenta.

Agentes atômicos

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.

Não pode ser reproduzido sem permissão:Chefe do Círculo de Compartilhamento de IA " Adeus LangChain! A Atomic Agents está pegando fogo!
pt_BRPortuguês do Brasil