Ga naar de hoofdinhoud
Ask Titan Engineering Deep Dive · Deel 2 van 7

Hoe we LangGraph en MCP gebruiken om Ask Titan te orkestreren

Ask Titan gebruikt een top-level LangGraph-runtime om uit toegestane specialistische AI-agents te kiezen. MCP biedt de toolinterface. SQL, Power BI/DAX en documentretrieval blijven binnen de agents die deze bronnen begrijpen.

LangGraph StateGraph ToolNode MCP Specialistische AI-agents
Eén Ask Titan-turn
agent + tool-loop
01 · REQUEST / RESPONSE Vraag in · definitief antwoord uit conversatiecontext geladen voor de turn
02 · LANGGRAPH Orchestrator selecteer capability · observeer · ga door of rond af
03 · MCP Capabilityinterface een toegestane specialist-agent aanroepen
04 · SPECIALISTISCHE UITVOERING SQL · Power BI/DAX · Documenten/RAG voer uit tegen bron · retourneer resultaat
aanvragen ↓ ↑ response

Ask Titan Engineering Deep Dive

Zeven artikelen, één architectuur

Deel 2 gaat de multi-agent-orchestratielaag in die in het architectuuroverzicht is geïntroduceerd. Volg de volledige serie via toolautorisatie, businessdata, conversatiecontext, documentretrieval en antwoordtraceerbaarheid.

Het engineeringprobleem

De orchestrator moet bepalen wat er daarna gebeurt. Niet hoe iedere databron werkt

AI-vraag

Top-level orchestrator

Beslis wat hierna gebeurt

Werk met het actieve gesprek, bekijk de toegestane capabilities, selecteer indien nodig een tool en bepaal wanneer de beurt klaar is.

Specialistische AI-agent

Voer het bronspecifieke werk uit

Inspecteer bronmetadata, genereer en voer de benodigde operatie uit, verwerk bronspecifieke fouten en retourneer een begrensd resultaat.

Applicatieruntime

Dwing deterministische controls af

Los capability-toegang op, bewaar conversatiestatus, handhaaf runtimelimieten en behoud uitvoeringsbewijs buiten het model.

Eén turn door de runtime

Van gebruikersvraag naar gespecialiseerde uitvoering en terug

De top-level graph heeft een klein control surface. Hij ontvangt de actieve conversatiecontext en de tools die voor die request zijn toegestaan. Als specialistische uitvoering nodig is, loopt de request via de MCP-capabilityinterface naar de geselecteerde specialistische agent. Het executionresultaat keert via MCP terug naar LangGraph, dat de agent-tool-loop voortzet of het eindantwoord voor de gebruiker produceert.

Ask Titan-orchestratieflow met LangGraph en MCP Een gebruikersvraag komt Ask Titan binnen en gaat naar de LangGraph-orchestrator. LangGraph kan alleen tools aanroepen die voor die aanvraag zijn toegestaan. Wanneer specialistische uitvoering nodig is, passeert de aanvraag de MCP-capability-interface en bereikt de geselecteerde SQL-, Power BI- en DAX-agent of document- en RAG-agent. Het uitvoeringsresultaat keert via MCP en LangGraph terug totdat een definitief antwoord aan de gebruiker wordt gegeven. Capability-autorisatie en het opslaan van conversatiecheckpoints blijven afzonderlijke applicatieverantwoordelijkheden. REQUEST / RESPONSE LANGGRAPH MCP SPECIALISTISCHE UITVOERING 01 · REQUEST / RESPONSE Vraag in definitief antwoord uit conversatiecontext geladen voor deze beurt 02 · LANGGRAPH Ask Titan-orchestrator capability selecteren · observeren doorgaan of afronden agent-tool-loop STATUS Conversatie checkpoints threadcontinuïteit opslaan 03 · CAPABILITY-INTERFACE MCP Capabilityinterface toegestane agent aanroepen uitvoeringsresultaat retourneren AUTORISATIE Capability beleid stuurt toolbinding GESTRUCTUREERDE DATA SQL-agent schemainspectie · SQL-uitvoering SEMANTISCHE DATA Power BI- + DAX-agent modelmetadata · DAX-uitvoering ONGESTRUCTUREERDE DATA Document- + RAG-agent retrieval · brononderbouwing REQUESTPAD Vraag gaat richting specialistische uitvoering request → LangGraph → MCP → geselecteerde specialist RESPONSPAD Uitvoeringsresultaat keert terug naar de gebruiker specialist → MCP → LangGraph → definitief antwoord

Stap 1 · bepaal de toolset

Ontdek eerst. Filter vóór modelbinding

De MCP-client kan een grotere capabilitycatalogus ontdekken dan de huidige request zou moeten ontvangen. Ask Titan bepaalt de toegestane toolset in applicatiecode en bindt alleen die tools aan het orchestrator-model.

01

Ontdek beschikbare MCP-tools

Laad de huidige toolcatalogus die door de MCP-capabilityservice beschikbaar wordt gesteld.

02

Los applicatiebeleid op

Bepaal welke tools zijn toegestaan voor de huidige identity en runtimecontext.

03

Bind alleen de toegestane tools

Het model ontvangt schema's voor de toegestane set in plaats van de volledige capabilitycatalogus.

Vereenvoudigd tool-resolution-patroon
available_tools = await discover_mcp_tools()
allowed_names = await resolve_allowed_tools(user_id)

permitted_tools = [
    tool
    for tool in available_tools
    if tool.name in allowed_names
]

agent = build_orchestrator(
    tools=permitted_tools,
    checkpointer=conversation_memory,
)

Dit is capability-autorisatie op applicatieniveau. Het vervangt geen rechten in Databricks, SQL Server, Power BI of enige andere gekoppelde bron.

Stap 2 · draai de LangGraph-loop

De control flow is expliciet: agent → tools → agent

Ask Titan gebruikt een ReAct-achtige LangGraph-loop. De agent-node roept het model aan met de actieve context en toegestane tools. Als het model een tool call uitstoot, routeert de graph de uitvoering naar de tool-node. Het resultaat wordt toegevoegd aan de graph-state en de control gaat terug naar de agent. Als het model geen tool call uitstoot, kan de graph de turn beëindigen met de modelrespons.

LangGraph agent- en tool-control-loop De agent produceert óf een modelrespons óf een tool-call. Een conditionele edge stuurt tool-calls naar de toolnode en responsen zonder tool-call naar de eindstatus. Toolresultaten gaan terug naar de agent voor een volgende modelpass. AGENTNODE Modelpass antwoord of tool-call CONDITIONELE EDGE Tool-call? modeloutput inspecteren TOOLNODE Geselecteerde tool uitvoeren resultaat van specialistische uitvoering EINDE Modelrespons retourneren geen tool-call uitgegeven JA · TOOL-CALL NEE RESULTAAT · VOLGENDE MODELPASS
AI-use cases Het wordt nieuw bewijs in de graph state, waarna de control teruggaat naar de agent voor de volgende modelpass.
Vereenvoudigd LangGraph-patroon
graph = StateGraph(AgentState)

graph.add_node("agent", agent_node)
graph.add_node("tools", ToolNode(permitted_tools))

graph.add_conditional_edges(
    "agent",
    route_next_step,
    {
        "tools": "tools",
        "end": END,
    },
)

graph.add_edge("tools", "agent")

graph = graph.compile(
    checkpointer=conversation_memory,
)
Control-grens: het model kiest uit toegestane tools. LangGraph beheert het execution path, terwijl deterministische runtimecontrols de uitvoering buiten het model begrenzen.

Stap 3 · specialistische uitvoering

Een MCP-tool kan een specialist-agent encapsuleren

De top-level orchestrator ziet een capability als een tool met naam, beschrijving en inputschema. Achter die interface kan de implementatie een deterministische functie of een bronspecifieke agentgraph zijn. Ask Titan gebruikt specialistische agents wanneer uitvoering meerdere bronspecifieke stappen vereist.

Gestructureerde data

SQL Agent

Werkt binnen de toegestane databron-grens en schemametadata, genereert SQL, voert de query uit en kan uitvoeringsfeedback gebruiken om de operatie te verfijnen.

  • Inspecteer schemametadata
  • SQL genereren
  • Voer query uit
  • Geef resultaat + querymetadata terug
Databricks · SQL Server · Fabric

Semantische data

Power BI + DAX Agent

Werkt met metadata, measures en relaties uit het semantische model en genereert en voert vervolgens DAX uit tegen het governed businessmodel.

  • Toon modeltabellen
  • Inspecteer modelmetadata
  • DAX genereren
  • Voer uit + verfijn
Power BI semantic models

Ongestructureerde data

Documenten + RAG Agent

Herschrijft de actieve vraag voor retrieval, haalt relevante documentchunks op en genereert een antwoord uit de resulterende broncontext.

  • Herschrijf de vraag
  • Haal relevante chunks op
  • Stel broncontext samen
  • Genereer een onderbouwd antwoord
Enterprise-documenten · vectorsearch

Capabilitygrens

Bronsemantiek blijft achter de toolinterface

De orchestrator hoeft niet te weten hoe Databricks execution metadata blootstelt, hoe een Power BI semantic model measures representeert of hoe documentretrieval is geïmplementeerd. Hij heeft alleen genoeg informatie nodig om de toegestane capability te kiezen en met het teruggegeven resultaat te werken.

Illustratieve specialist-tool-grens
@mcp_tool(
    name="semantic_model_agent",
    description="Answer questions using the governed semantic model",
)
async def semantic_model_agent(question: str):
    metadata = await inspect_model()
    dax = await generate_dax(question, metadata)
    result = await execute_dax(dax)

    if result.has_error:
        result = await refine_and_retry(
            question,
            metadata,
            result,
        )

    return bounded_tool_result(result)

Stap 4 · state en modelcontext

Opgeslagen conversatiestatus is niet hetzelfde als de context die naar het model wordt gestuurd

De graph gebruikt een checkpointer zodat threadstate over turns kan blijven bestaan. Dat betekent niet dat ieder opgeslagen bericht en historisch toolresultaat bij iedere pass terug naar het model moet worden gestuurd. Ask Titan houdt persistence en model-context-shaping als aparte concerns.

Opgeslagen threadstate

Behoud workflowcontinuïteit

Thread-scoped checkpoints bewaren graphstate buiten de modelprompt. Dit behoudt conversatiecontinuïteit en geeft de runtime een duurzame state van waaruit volgende turns kunnen doorgaan.

Turn 1 · gebruiker + agent + tool-events
Turn 2 · gebruiker + agent + tool-events
Turn 3 · actieve turn

Actieve LLM-context

Vorm de huidige modelpass

Afgeronde turns kunnen worden samengevouwen tot het gebruikersbericht en definitieve antwoord, terwijl de actieve turn de tool-call-sequence behoudt die nodig is voor uitvoering. Te grote toolresultaten kunnen compact in modelcontext worden weergegeven terwijl het volledige resultaat buiten de prompt blijft.

Recente voltooide turns · ingeklapt
Huidig gebruikersbericht · volledig
Huidige tool calls + resultaten · behouden / begrensd
State-boundary: opgeslagen state is storage voor continuïteit van conversatie en workflow. Modelcontext is een gevormde projectie van die state voor de huidige inference-pass.
Vereenvoudigd context-shaping-patroon
prefix, active_turn = split_at_latest_user_message(state.messages)

finished_turns = collapse_completed_turns(prefix)
recent_history = keep_recent_turns(finished_turns)

llm_context = [
    *recent_history,
    *active_turn,
]

llm_context = cap_oversized_tool_results(llm_context)

De rol van MCP

MCP standaardiseert de capability-interface. Niet de volledige agentruntime

Ask Titan gebruikt MCP zodat de orchestrator specialistische capabilities via een consistente toolinterface kan ontdekken en aanroepen. De orchestration-graph, conversation-state, application policy, bronpermissions en specialistimplementatie blijven afzonderlijke verantwoordelijkheden.

Interfacegrens: MCP definieert hoe capabilities aan de orchestrator worden aangeboden. Het beslist niet welke capabilities een gebruiker mag gebruiken, hoe een specialist zijn werk uitvoert of wat de onderliggende databron toestaat.

Verdeling van verantwoordelijkheden

LangGraph

State, nodes, conditional routing, toolloops en checkpointintegratie.

MCP

Capability-discovery, toolschema's en invocatie over de interfacegrens.

Applicatiepolicy

Bepaalt welke ontdekte capabilities voor het huidige request aan de orchestrator mogen worden gebonden.

Databron

Credentials, rollen en bronautorisatie, inclusief RLS of CLS waar ondersteund.

Runtimegrenzen

Het model kan een tool kiezen. Runtimecontrols begrenzen nog steeds de uitvoering

Agentloops hebben expliciet gedrag nodig voor fouten en beëindiging. Ask Titan behandelt dit als runtimeverantwoordelijkheid in plaats van erop te vertrouwen dat het model of een prompt zijn eigen uitvoering bewaakt.

Runtimecase Runtimegedrag
Model emit geen tool-call Beëindig de graph-turn met de modelrespons en sla de resulterende conversatiestate op.
Model emit een toegestane tool-call Routeer naar de tool-node, voer de geselecteerde capability uit en geef het resultaat terug aan de agent voor de volgende modelpass.
Specialistische uitvoering faalt Houd bronspecifieke foutinterpretatie en correctie binnen de specialist-flow, waar relevante bronmetadata en execution context beschikbaar zijn.
Tooloutput is te groot voor bruikbare modelcontext Houd het volledige resultaat buiten de prompt en geef een begrensde representatie door aan de volgende model-call.
Het model blijft toolcalls uitsturen Pas deterministische runtimelimieten toe zodat de loop niet afhankelijk is van het model dat uiteindelijk zelf besluit te stoppen.

Grenzen die gescheiden blijven

Discovery ≠ autorisatie

Een ontdekte MCP-tool is niet automatisch beschikbaar voor de huidige gebruiker of aanvraag.

Capability-autorisatie ≠ bronautorisatie

Het binden van een tool vervangt geen credentials, rollen of permissions die door de onderliggende databron worden afgedwongen.

Opgeslagen state ≠ modelcontext

Een thread opslaan betekent niet dat de volledige historie in iedere model-call moet worden afgespeeld.

Toolresultaat ≠ eindantwoord

AI-vaardigheden

Engineeringconclusie

Houd routing, execution en runtime control als afzonderlijke verantwoordelijkheden

De top-level Ask Titan-graph blijft eenvoudiger uitbreidbaar wanneer hij niet iedere databronimplementatie absorbeert. Nieuw bronspecifiek gedrag kan achter een specialistische capability boundary blijven terwijl de orchestrationstructuur grotendeels gelijk blijft.

Patronen die we behouden

Los capability-toegang op vóór tool binding.
Houd de top-level graph source-agnostic.
Houd bronsemantiek binnen specialist-agents.
Geef toolresultaten terug aan graph state vóór de volgende modelbeslissing.
Scheid persisted state van modelcontext.
Vorm modelcontext voor de huidige inference pass.
Ontwerp autonome toolplanning rond deterministische runtimecontrols.

Volgende in de serie

Deel 3 · Hoe we bepalen welke tools een AI-agent mag gebruiken

Het volgende artikel gaat dieper in op de autorisatieboundary die hier is geïntroduceerd: identity, applicatiebeleid, capability filtering, tool binding en source-level permissies. Het legt ook uit waarom het ontdekken van een MCP-capability niet hetzelfde is als een gebruiker autoriseren om die aan te roepen.

Lees deel 3

FAQ

Vragen over LangGraph- en MCP-orchestratie

Praktische antwoorden over Ask Titan's top-level orchestrator, MCP capability discovery, specialist-agents, graph state en modelcontext.

Wat doet LangGraph in Ask Titan?

LangGraph voert de top-level stateful agent-and-tool-loop uit. De orchestrator ontvangt de huidige conversatiecontext en de toegestane toolset, beslist of hij antwoordt of een tool aanroept, ontvangt toolresultaten en gaat door totdat de turn is afgerond.

Wat doet MCP in de orchestration-laag?

MCP biedt een consistente interface voor het ontdekken en aanroepen van specialistische capabilities. Ask Titan kan SQL-, Power BI- en documentagents via dezelfde toolgrens aanbieden zonder hun bronspecifieke implementatielogica in de top-level orchestrator te embedden.

Bepaalt MCP welke tools de gebruiker mag gebruiken?

Nee. Ask Titan bepaalt application-level tool access voordat tools aan de orchestrator worden gebonden. MCP levert de capability-interface; gebruikersautorisatie en datasourcepermissions zijn afzonderlijke controls.

Genereert de top-level orchestrator zelf SQL of DAX?

Nee. De orchestrator selecteert een toegestane specialistische capability. De SQL-agent beheert structured-data-executie, de Power BI-agent semantic-model- en DAX-executie en de documentagent retrieval en source-grounded answering.

Wat gebeurt er nadat een specialist-agent een resultaat teruggeeft?

Het resultaat keert terug naar de LangGraph-runtime als toolresultaat. Het top-level model kan dat resultaat gebruiken om te antwoorden, indien nodig een andere toegestane tool aanroepen of de turn afronden.

Hoe wordt conversatiestatus opgeslagen?

Ask Titan compileert de graph met thread-scoped checkpointpersistentie. De opgeslagen graph-state biedt continuïteit van gesprekken over meerdere turns, terwijl de modelcontext voor iedere call los van die opgeslagen state wordt opgebouwd.

Ontvangt de LLM iedere keer de volledige opgeslagen conversatie?

Nee. Oudere afgeronde turns kunnen worden teruggebracht tot gebruikersbericht en definitief antwoord, terwijl de actieve turn de tool-calls en toolresultaten behoudt die voor correcte executie nodig zijn. Oversized toolresultaten kunnen ook compacter in modelcontext worden weergegeven.

Waarom een custom LangGraph-loop gebruiken in plaats van één grote agentprompt?

De expliciete graph scheidt modelplanning, tooluitvoering, persisted state en stopcondities. Bronspecifiek gedrag blijft binnen specialistische agents in plaats van zich op te hopen in één top-level prompt en één connectorlaag.

Is de architectuur gebonden aan één MCP-transportversie?

Nee. Het orchestratieontwerp is afhankelijk van een capability-interface voor tool discovery en invocation. Transport- en protocol-lifecycledetails kunnen onafhankelijk evolueren, wat belangrijk is omdat MCP substantieel is veranderd tussen specificatierevisies.

Agentorchestratie

Bouw specialistische AI-agents zonder de orchestrator de integratielaag te maken

Ask Titan scheidt top-level routing van bronspecifieke uitvoering. Hetzelfde patroon kan worden gebruikt voor maatwerk enterprise-AI-systemen die meerdere beheerde tools, persistente state en expliciete applicatiecontrols nodig hebben.

Eén turn, vier grenzen

01 Bepaal toegestane capabilities vóór tool binding
02 Laat LangGraph de agent-tool-loop aansturen
03 Houd bronspecifieke uitvoering binnen specialist-agents
04 Scheid persisted state van actieve modelcontext

Technische runtimestate en tijdelijke writes die worden gebruikt om de thread voort te zetten.

De voorbeelden in dit artikel zijn vereenvoudigde architectuurpatronen. Deze publieke referenties documenteren de LangGraph- en MCP-concepten die in het ontwerp worden gebruikt.