Introdução
O Step 01 do workshop é o ponto de partida: você sobe uma aplicação Quarkus que conversa com um LLM via OpenAI e testa um chatbot funcional no navegador. Ao final deste capítulo, você terá passado pelo fluxo completo de ambiente, credencial e execução, o mesmo tipo de passo que repetirá em projetos reais.
O que você vai aprender
- O que são Quarkus, LLM e LangChain4j e como se encaixam
- Como declarar um AI Service como interface Java (
@RegisterAiService) - A anatomia mínima do projeto Step 01 (duas classes Java + configuração)
- Por que LLMs são stateless e quem mantém o histórico da conversa
- Como executar
./mvnw quarkus:deve testar o chatbot
Conceitos-chave
Quarkus + LangChain4j
Quarkus é um framework Java otimizado para cloud-native: inicia rápido, consome pouca memória e oferece live reload no modo dev. LangChain4j é a biblioteca Java que abstrai chamadas a LLMs. Em vez de montar JSON de requisição manualmente, você declara uma interface e a biblioteca cuida do resto.
A extensão Quarkus LangChain4j integra tudo ao CDI: lê application.properties, gera a implementação do AI Service em build time e injeta beans com @Inject.
AI Service
Um AI Service é uma interface Java anotada com @RegisterAiService. Não há implementação manual; o Quarkus gera o código em tempo de compilação:
@SessionScoped
@RegisterAiService
public interface CustomerSupportAgent {
String chat(String userMessage);
}
O método chat recebe a mensagem do usuário e retorna a resposta do LLM. A anotação @SessionScoped garante que cada sessão WebSocket tenha sua própria instância do agente (e, portanto, seu próprio histórico de conversa).
Memória e statelessness
LLMs são stateless: cada chamada à API é independente. Para o chatbot “lembrar” do contexto, a aplicação reenvia o histórico completo da conversa a cada interação. No Step 01, o Quarkus LangChain4j gerencia isso automaticamente por sessão.
Anatomia do projeto
O Step 01 tem apenas duas classes Java no backend:
section-1/step-01/
├── pom.xml
├── src/main/java/.../
│ ├── CustomerSupportAgent.java ← interface AI Service
│ └── CustomerSupportAgentWebSocket.java ← endpoint WebSocket
└── src/main/resources/
├── application.properties ← config (API key, modelo)
└── META-INF/resources/ ← UI do chat
A configuração essencial fica em application.properties:
quarkus.langchain4j.openai.api-key=${OPENAI_API_KEY}
quarkus.langchain4j.openai.chat-model.model-name=gpt-4o
O WebSocket em /customer-support-agent recebe mensagens do navegador e delega ao AI Service:
@WebSocket(path = "/customer-support-agent")
public class CustomerSupportAgentWebSocket {
private final CustomerSupportAgent customerSupportAgent;
@OnTextMessage
public String onTextMessage(String message) {
return customerSupportAgent.chat(message);
}
}
Fluxo da aplicação
sequenceDiagram
participant User as Usuário
participant WS as WebSocket
participant Agent as CustomerSupportAgent
participant LLM as OpenAI
User->>WS: mensagem via chat
WS->>Agent: chat(mensagem)
Agent->>LLM: system + histórico + mensagem
LLM-->>Agent: resposta
Agent-->>WS: resposta
WS-->>User: exibe no chat
Tarefa para casa
Objetivo: executar localmente o Step 01 do workshop oficial: subir o projeto Quarkus + LangChain4j e conversar com o chatbot.
Referência: Quarkus LangChain4j Workshop, Section 1, Step 01.
Pré-requisitos
- Java 17+ instalado (
java -version) - Git instalado
- Conta OpenAI com créditos disponíveis
O que fazer
- Clonar o repositório do workshop e abrir o projeto
section-1/step-01na sua IDE. - Obter uma API key da OpenAI: criar conta em OpenAI se necessário, gerar uma chave em API keys e exportá-la no terminal:
export OPENAI_API_KEY=sk-...Não commite a chave nem coloque em arquivo versionado.
- Verificar que
application.propertiesreferencia${OPENAI_API_KEY}. - Subir a aplicação:
cd section-1/step-01 ./mvnw quarkus:dev - Abrir
http://localhost:8080no navegador e enviar pelo menos uma mensagem ao chatbot.
Critério de sucesso
Você envia uma mensagem (por exemplo, “Olá, quero alugar um carro”) e recebe uma resposta coerente do bot no chat.
Troubleshooting
| Problema | Solução |
|---|---|
OPENAI_API_KEY not set | Exporte a variável no mesmo terminal onde roda ./mvnw quarkus:dev e reinicie |
| Erro 401 da OpenAI | Verifique se a chave é válida e tem créditos |
| Porta 8080 ocupada | Pare outra aplicação na porta ou configure quarkus.http.port |
Próximo passo
Com o chatbot funcionando, avance para o trilho AI Services. Comece por Configuration and Streaming, onde você aprende a ajustar parâmetros do modelo, fazer streaming de respostas e definir system messages.
Referência

CC BY 4.0 DEED