AI Lab — aplicação CAP com IA no SAP BTP
Aplicação de exemplo (Node.js + CAP + UI5) com um adaptador de provedor de IA que
suporta três modos, escolhidos automaticamente:
| Provedor | Quando é usado | Como configurar |
| SAP AI Core (Generative AI Hub) | há binding aicore ou AICORE_SERVICE_KEY | cds bind / serviço aicore / .env |
| LLM externo (OpenAI-compatível) | existe LLM_API_KEY ou OPENAI_API_KEY | .env (ver abaixo) |
| mock | nada configurado | — (a app funciona em modo demonstração) |
Estrutura
db/schema.cds entidade Interactions (histórico de prompts/respostas)
srv/ai-service.cds serviço OData: action ask(prompt) + function provider()
srv/ai-service.js handlers do serviço
srv/lib/ai-provider.js adaptador de provedores (AI Core / OpenAI / mock)
app/ui/ UI5 (freestyle, sem build)
app/xs-app.json rotas do approuter (login XSUAA + proxy para o srv)
app/package.json dependência @sap/approuter (módulo approuter do MTA)
mta.yaml MTA: srv (CAP) + approuter + xsuaa
Rodar localmente
cd ~/projects/ai-lab
npm install
npx cds watch
Abra <http://localhost:4004/ui/index.html>.
Teste rápido da API:
curl 'http://localhost:4004/api/ai/provider()'
curl -X POST http://localhost:4004/api/ai/ask \
-H 'content-type: application/json' \
-d '{"prompt":"Olá!"}'
Configurar IA
Crie um arquivo .env na raiz do projeto (não versionado).
Opção A — LLM externo (funciona hoje):
LLM_API_KEY=sua-chave
LLM_BASE_URL=https://api.openai.com/v1 # opcional
LLM_MODEL=gpt-4o-mini # opcional
Opção B — SAP AI Core / Generative AI Hub:
- 1. Tenha um serviço
aicoredisponível (AI Core + Generative AI Hub habilitados). - 2. Faça o bind do serviço à aplicação, ou defina no
.env:
AICORE_SERVICE_KEY={"serviceurls":{...},"clientid":"...","clientsecret":"...","url":"..."}
AICORE_MODEL=gpt-4o # opcional
O código já usa @sap-ai-sdk/orchestration quando detecta essa configuração.
Deploy no Cloud Foundry
cd ~/projects/ai-lab
mbt build
cf deploy mta_archives/ai-lab_1.0.0.mtar -f
App: <https://0494f001trial-dev-ai-lab.cfapps.us10-001.hana.ondemand.com>
(o login é feito com sua conta SAP via XSUAA)
Observações
- Banco de dados: SQLite (
db.sqlite) em produção — o container do CF é efêmero.
Para dados persistentes, crie uma instância do SAP HANA Cloud no Cockpit e rode
cds add hana para usar um HDI container no MTA.
- CSRF do approuter: desabilitado na rota
/(csrfProtection: false) para
simplificar o fetch da UI. Em produção, habilite e trate o token x-csrf-token.
- IA Core: o trial padrão do BTP não inclui AI Core / Generative AI Hub.
Alternativas: Generative AI Hub Trial (30 dias), conta BTP Free Tier, ou
entitlement de AI Core na sua global account corporativa.