Este projeto contém um agente de inteligência artificial bem simples que tem duas ferramentas: calculadora e acesso à base de dados do Instituto Nacional de Propriedade Intelectual (INPI).
Ele é capaz de lidar com cálculos que requerem diversas passos como "você consegue multiplicar 3x4 e depois dividir o resultado por dois e então adicionar 12 a esse resultado?" e também perguntas que exigem acesso à base de dados do INPI, como "quem detém a marca Nubank?"
O objetivo de publicar esse projeto em português é sobretudo aumentar a visibilidade da linguagem BAML na comunidade brasileira.
Isso, porque BAML apresenta paradigmas relevantes tanto para quem está buscando desenvolver aplicações sofisticadas e altamente integradas a modelos de linguagem, quanto para quem está começando a programar agora. Algumas características relevantes incluem:
-
Prompts são funções: O principal paradígma de BAML é que prompts são funções nas quais você define com clareza a estrutura de dados que um prompt recebe e qual a estrutura de dados que ele retorna. Isso permite um desenvolvimento focado em modelagem de domínio útil para profissionais de LLMOps/AI deployment que atuam em setores complexos como o jurídico, por exemplo.
-
Cada função é testável: Como modelos de linguagem são probabilísticos, é essencial testar diversas variações para garantir que o modelo se comporta de maneira consistente e da forma esperada. BAML tem uma extensão para VSCode que permite iterar facilmente sobre diferentes prompts e assim como em Rust é incentivado que ao final de cada arquivo escreva-se testes para as funções nele contidas.
-
Funciona com qualquer linguagem: O compilador de BAML é escrito em Rust, o que garante uma latência de compilação bem baixa, mas não só permite-se exportar para as principais linguages de programação, como também é possível facilmente configurar uma API REST.
-
Funciona com qualquer modelo: O termo 'Prompt Engineering' de alguma forma passou a ser usado para se referir à alquimia necessaria para extrair o que você precisa dos modelos. O compilador de BAML garante que você vai ter um output alinhado com as estruturas de dados definidas independentemente do comportamento do modelo, o que permite que você passe mais tempo se dedicando à engenharia propriamente dita - explorar diferentes arquiteturas, fluxo de dados, gerenciamento de contexto, ferramentas, etc.
- Typescript
- BAML
- Node
- Git
Caso você precise de ajuda para configurar o ambiente acima, você pode seguir as instruções presentes aqui
Por enquanto o ambiente para testagem está disponível apenas para VSCode e existe um syntax highlighter criado pela comunidade para Neovim. Suporte para JetBrains e Zed devem vir no futuro.
- Clone o repositório e entre no diretório:
git clone https://github.com/oscaromsn/inpi-agent && cd inpi-agent
- Faça uma cópia do
.env.example
e insira a API key do seu modelo de preferência em.env.local
:
cp .env.example .env.local
- Lembre-se de instalar as dependências necessárias:
pnpm install
O CLI tem dois modos: o principal contém apenas as mensagens finais do agente e você pode iniciar executando:
pnpm chat
Caso queira também exibir cada chamada ao LLM execute no modo de depuração:
pnpm chat -d
Para encerrar o agente amigavelmente digite /exit
ou use seu atalho de saída habitual. Não há persistência entre as conversas, salve você mesmo a conversa conforme julgue necessário.
O objetivo do repositório é ser um boilerplate simples para prototipação e posterior integração em aplicações maiores. Caso queira se aprofundar no desenvolvimento de agentes usando BAML sugiro fortemente acompanhar o trabalho do Vaibhav Gupta e Dexter Horthy, especialmente a série de webnars que eles têm feito em conjunto. Os detalhes da arquitetura especificamente usada neste agente está descrita neste vídeo.