Train AI agents to generate insights from institutional data
Workflow purpose
This guide demonstrates how to use Proto's platform to train an AI agent on your own institutional data – tickets, analytics exports, and reports – so it can answer open-ended analytical questions in chat instead of someone building a new dashboard each time. Insight Advisor turns "what was our fraud report rate last quarter compared to the annual average" into a conversational query rather than a data request that sits in someone's inbox for a week.
Who can benefit from this guide:
- Regulators and central banks fielding recurring internal data requests
- Enterprise operations teams who want self-serve reporting for non-technical staff
- Compliance teams tracking trends across a large regulated population
- Anyone currently exporting the same reports on a recurring basis
Generate insights from institutional data
This workflow lets anyone ask a plain-language question about institutional data and get a grounded answer, escalating for more detail when the question is too broad to answer safely. See how to train AI agents to generate insights from institutional data.
1. Create a trigger
Purpose: Start the flow whenever someone asks an analytical question in chat.
- Navigate to the Actions tab in the AI agent settings.
- Click “+ Add Trigger” and select the Message Received trigger type.
- Name the trigger “Institutional insight”.
- Add a description such as “Triggers when the user asks a question about institutional data, trends, or reports.”
2. Set chat variable – capture the question
Purpose: Store the user’s question exactly as asked, since it doubles as the LLM action’s input.
- Add a Set chat variable action:
question = _user_input.
3. LLM action – institutional insight
Purpose: Ground the answer in your own data rather than the model’s general knowledge.
- Add an LLM action named
Institutional insight. - Input text:
{question}. - Output variable:
insight_response. - Success branch: first action is Set chat variable –
insight_response = _.json_parse(insight_response). - System prompt should define the fields
answer(string),data_source(string, which report or dataset it drew from), andfollow_up_question(string, “none” if the question was answerable as asked).
4. Branch – check for a follow-up
Purpose: Ask for more scope before guessing at an answer that could be wrong.
- Add a Branch action.
- Condition:
insight_response["follow_up_question"] != "none" and insight_response["follow_up_question"] != none. - If a follow-up is needed: Send message with
{insight_response["follow_up_question"]}, then Surveymore_detail(Text, skip: On), then Set chat variablequestion = {question} {more_detail}, then jump back to the LLM action. - Branch (back check) on
more_detail– “back” in_.lower(more_detail)→ jump to menu.
5. Send the insight
Purpose: Deliver the answer with its source, so the person can trust and trace it.
- Add a Send message action: “{insight_response[“answer”]} (Source: {insight_response[“data_source”]})“
6. Test the flow
Purpose: Confirm the agent asks for clarification rather than fabricating an answer.
- Ask a deliberately vague question and confirm the follow-up loop fires instead of a guessed answer.
- Ask a question outside the trained dataset’s scope and confirm the agent says so rather than answering anyway.
- Ask the same question twice and confirm the answer and data source stay consistent.