Architecting a chat-with-data agent that doesn't AI generate SQL