Hace unas semanas estuve buscando la forma de aunar SAP CAP con IA, que hoy en día está ya en todas partes. Se me ocurrió montar un Chatbot con un agente que posea ciertas capacidades para manejar los datos de la aplicación que he creado, aquí os dejo las movidas que se me ocurrieron montar :D
Backend
En SAP CAP tengo una app backend que expone entidades como Materials, Suppliers, PurchaseOrders, etc.
CAP está montado con autenticación básica y sirve como fuente de datos del agente.
Agente en Python con FastAPI + LangChain
El cerebro de la operación es un agente Python. Usa FastAPI para exponer un endpoint /ask, y LangChain para procesar preguntas del usuario, llamar al backend SAP CAP, y devolver una respuesta en lenguaje natural.
🔧 Herramientas expuestas
Usé @tool de LangChain para definir funciones específicas:
@tool
def get_material(material_name: str):
"""Get material details based on the material name"""
url = f"{BASE_URL}/Materials?$filter=name eq '{material_name}'"
response = requests.get(url, headers=headers, auth=auth)
return response.json()
También se pueden crear materiales, consultar stock, proveedores, etc.
Endpoint principal /ask
@app.post("/ask")
async def ask_question(q: Question):
response = agent.invoke(q.question)
return {"answer": response}
Recibe una pregunta como:
{ "question": "¿Qué materiales hay en el centro 1000?" }
Y responde con texto como:
{ "answer": "Hay 57 materiales disponibles en el centro 1000. Ej: M-001, M-002." }
Interfaz conversacional con SAPUI5
En el frontend de la app, monté un chatbot simple usando componentes estándar de SAPUI5. Está dentro de un Panel lateral.
Quedó terriblemente feo, debería volver a echarle un vistazo y cambiarlo :)
XML de la vista
<Panel headerText="Virtual Assistant">
<FlexBox direction="Column">
<List items="{chatModel>/chat}">
<CustomListItem>
<HBox>
<Text text="{chatModel>sender}: " class="chatSender"/>
<Text text="{chatModel>message}" class="chatMessage"/>
</HBox>
</CustomListItem>
</List>
<HBox>
<TextArea id="chatInput" placeholder="Write your message here..."/>
<Button text="Enviar" press="onSendChat"/>
</HBox>
</FlexBox>
</Panel>
Lógica del controlador
onSendChat: async function () {
const sMessage = this.byId("chatInput").getValue();
const oModel = this.getView().getModel("chatModel");
const aChat = oModel.getProperty("/chat");
// Añadir mensaje del usuario
aChat.push({ sender: "Tú", message: sMessage });
oModel.setProperty("/chat", aChat);
try {
const res = await fetch("http://localhost:8000/ask", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({ question: sMessage })
});
const data = await res.json();
// Añadir respuesta del bot
aChat.push({ sender: "Bot", message: data.answer.output });
oModel.setProperty("/chat", aChat);
} catch (e) {
aChat.push({ sender: "Bot", message: "Error conectando con el asistente." });
oModel.setProperty("/chat", aChat);
}
this.byId("chatInput").setValue(""); // Limpiar input
}
El chatbot es funcional, rápido, y permite integraciones conversacionales sobre SAP sin complicaciones.
El proyecto completo está en GitHub:
Betheval - MaterialFlow
Integrar SAP CAP con un agente inteligente en Python abre un mundo de posibilidades. Puedes construir asistentes conversacionales internos, interfaces más naturales para usuarios o incluso automatizar flujos complejos de negocio.
Top comments (0)