Publicado em: 09, outubro 2025
No dia 6 de outubro, a OpenAI apresentou oficialmente o Agent Kit, um novo conjunto de ferramentas criado para facilitar a construção, integração e publicação de agentes inteligentes dentro de qualquer aplicação web.
O pacote traz dois componentes principais: Agent Builder e Chat Kit — e juntos, eles representam um salto significativo na forma como desenvolvedores podem implementar IA conversacional e fluxos multiagentes em seus sistemas.
O Agent Kit é um conjunto integrado de recursos e APIs oferecidos pela OpenAI para permitir que desenvolvedores criem workflows multiagentes, interfaces de chat escaláveis e aplicações inteligentes seguras de forma nativa, sem precisar de infraestrutura complexa.
Ele foi pensado para ser plugável — ou seja, você pode usá-lo tanto de forma independente quanto acoplado a ferramentas de automação que já utiliza (como n8n, Zapier ou Make).
O objetivo é centralizar a inteligência e descentralizar a execução, permitindo que seu back-end continue responsável pelas regras de negócio, enquanto a OpenAI cuida da camada cognitiva e de mensagens.
O Agent Builder é a parte do kit voltada à criação e orquestração de workflows multiagentes.
Com ele, é possível montar visualmente fluxos compostos por diversos agentes especializados, que se comunicam entre si para resolver tarefas complexas — como se fosse uma automação inteligente, mas com IA capaz de raciocinar, acessar bases de conhecimento (RAG) e interagir com ferramentas externas.
Dentro do painel do Agent Builder, o desenvolvedor pode:
Tudo isso acontece em uma interface visual, muito mais intuitiva que escrever código manualmente para cada conexão entre agentes.
Na prática, ele não compete com automatizadores de workflow como o n8n, mas complementa — já que o workflow criado no Agent Builder pode ser consumido dentro de outras plataformas.
Em resumo: o Agent Builder é o coração lógico do Agent Kit — é nele que você ensina o comportamento dos seus agentes, define suas funções, adiciona segurança e conecta suas fontes de dados.
O Chat Kit é o front-end do ecossistema.
Com poucas linhas de código, você consegue embedar um chat completo, idêntico à interface do ChatGPT, diretamente no seu site — e o melhor: totalmente gerenciado e escalável pela OpenAI.
Isso significa que você não precisa hospedar ou gerenciar o servidor de mensagens, pois toda a comunicação, armazenamento e processamento das conversas é feita pela própria OpenAI.
No seu front-end, você apenas inicializa o componente, configura o tema (dark/light), idioma, prompts iniciais e conecta ao workflow criado no Agent Builder.
Ou seja:
No painel da OpenAI, crie e publique um workflow no Agent Builder e copie o workflow_id (vamos usar no back-end).
<!-- head --> <scripts src="<https://cdn.platform.openai.com/deployments/chatkit/chatkit.js>" ></script>
<!-- body --> <openai-chatkit id="openai-chat" style="height:560px;width:100%;display:none" ></openai-chatkit>
💡 o display:none é um truque para evitar que o navegador faça scroll automático para o iframe do chat ao carregar.
<script> // Mostra o chat 1s após o load para evitar scroll automático const chatkit = document.getElementById('openai-chat'); setTimeout(() => (chatkit.style.display = 'block'), 1000); // Gera um UUID simples por visita function genUUID() { if (crypto?.randomUUID) return crypto.randomUUID(); // fallback simples return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, c => { const r = (crypto.getRandomValues(new Uint8Array(1))[0] & 0x0f) >> 0; const v = c === 'x' ? r : (r & 0x3) | 0x8; return v.toString(16); }); } chatkit.setOptions({ api: { async getClientSecret(currentClientSecret) { // Se a própria SDK já nos der um secret válido, use-o if (currentClientSecret) return currentClientSecret; const userId = genUUID(); const res = await fetch('/api/chat-kit', { method: 'POST', headers: { 'Content-Type': 'application/json', 'Accept': 'application/json', }, body: JSON.stringify({ user_id: userId }), }); if (!res.ok) { throw new Error(`Falha ao obter client_secret: ${res.status}`); } const data = await res.json(); // Ajuste conforme sua resposta do back-end: // tente as chaves mais prováveis antes de lançar erro const clientSecret = data?.client_secret ?? data?.session?.client_secret ?? data?.clientSecret; if (!clientSecret) { throw new Error('Resposta sem client_secret do servidor.'); } return clientSecret; }, }, // Opcional: tema/locale/tela inicial theme: { colorScheme: 'dark' }, locale: 'br', startScreen: { greeting: 'Como posso te ajudar hoje?', }, }); </script>
// routes/api.php use Illuminate\\Support\\Facades\\Route; use App\\Http\\Controllers\\ChatKitController; Route::post('/chat-kit', ChatKitController::class) ->middleware('throttle:1,10'); // 1 requisição a cada 10 minutos por IP
<?php namespace App\\Http\\Controllers; use Illuminate\\Http\\Request; use Illuminate\\Support\\Facades\\Http; class ChatKitController extends Controller { public function __invoke(Request $request) { $request->validate([ 'user_id' => 'required|uuid', ], [ 'user_id.required' => 'ID INVALIDO', 'user_id.uuid' => 'ID INVALIDO', ]); $response = Http::withHeaders([ 'Content-Type' => 'application/json', 'OpenAI-Beta' => 'chatkit_beta=v1', 'Authorization'=> 'Bearer ' . config('openai.api_key'), ]) ->timeout(10) ->retry(2, 200) // 2 tentativas com backoff de 200ms ->post('<https://api.openai.com/v1/chatkit/sessions>', [ 'workflow' => ['id' => config('openai.workflow_id')], 'user' => $request->user_id, ]); if ($response->failed()) { $response->throw(); } // Retorne o JSON cru da OpenAI (ou normalize aqui se preferir) return $response->json(); } }
📌 Dica: você pode normalizar a resposta e retornar apenas { client_secret: ... } no controller para simplificar o JS.
.env:
OPENAI_API_KEY=sk-xxxxxxxxxxxxxxxx OPENAI_WORKFLOW_ID=wf_XXXXXXXXXXXXXXXXXXXXXXXX
config/openai.php (exemplo simples):
<?php return [ 'api_key' => env('OPENAI_API_KEY'), 'workflow_id' => env('OPENAI_WORKFLOW_ID'), ];
Link para o repositorio: https://github.com/beerandcodeteam/chatkit-example
Mais de 10 anos de experiência com Laravel e sólidos conhecimentos em frameworks front-end, como ReactJS, React Native e Vue JS. Experiência em Design de Serviço. No primeiro projeto profissional como júnior, desenvolveu em e-commerce para a maior indústria de equipamentos odontológicos da América Latina. Atualmente, atua como Full Stack Engineer Specialist em uma grande multinacional. Lidera decisões técnicas e é um suporte fundamental para a equipe de desenvolvimento.