Architecture

GraphRAG for AI Decisions: Why Graphs Beat Vector Search for Agent Memory

AI
AIAgentree Team
Decision Infrastructure
July 5, 2026
15 min read

GraphRAG for AI Decisions

GraphRAG (graph-enhanced retrieval-augmented generation) retrieves context by traversing a knowledge graph rather than only ranking text chunks by vector similarity. For AI agent decisions, the graph is a normative argument graph: decisions connected to the pro and con arguments that supported or opposed them, the evidence cited, and the precedents referenced, via typed edges (supports, opposes, refutes). Decision retrieval is a hybrid pipeline — vector search finds the relevant decisions, then graph expansion fetches the complete, bounded context — and its output is a Decision Packet: a self-contained record of the proposition, argument tree, evidence, policies, approvals, outcome, and precedents. This beats vector-only RAG over logs, which returns disconnected chunks that miss counterarguments, approvals, and precedent. A decision graph is an unusually good GraphRAG substrate because each decision is a natural root node, edges are high-signal (they carry reasoning), and each decision's subgraph is small and bounded. AIAgentree implements the full stack: decision-trace data model, hybrid precedent search, precedent citation, Decision Packet assembly, retrieval over MCP and A2A, automatic outcome feedback, outcome-quality scoring that boosts precedent rankings, argument-effectiveness tracking, and auto-suggested precedents on seal — the complete institutional-memory flywheel is shipped and live.

Share:
TL;DR

The question isn't "should we store AI decisions?" — it's "what do we store them in?" Store them as text and you get vector RAG's chunk soup. Store them as a normative argument graph and retrieval returns a bounded, auditable Decision Packet.

  • Vector RAG over logs returns disconnected snippets — it misses the counterargument, the approver, the precedent
  • Decision GraphRAG retrieves the decision with its reasoning intact, via typed edges
  • A decision graph is a rare GraphRAG-perfect substrate: natural root nodes, high-signal edges, bounded subgraphs
  • Shipped: hybrid precedent search, Decision Packets, MCP/A2A retrieval, outcome feedback, outcome-weighted ranking, argument effectiveness, auto-suggested precedents — the full flywheel

Your agent needs to know how you decided last time.

You point it at a vector store of logs. It gets back six snippets. None of them contain the reason.

The Retrieval Problem Nobody Names

Every serious agent system eventually needs memory: the ability to look up how a similar situation was handled before and act consistently. The default answer in 2026 is vector RAG — embed everything, retrieve the top-k most similar chunks, stuff them into the context window.

For documents, that works. For decisions, it quietly fails. And the failure is structural, not a tuning problem.

A decision is not a paragraph. It's a small web of relationships: a proposition, the arguments for and against it, the evidence each argument leaned on, who approved the exception, and which past case it followed. Flatten that into text chunks and embed them, and retrieval hands back fragments with the relationships severed. You get the conclusion without the counterargument. You get the approval without the reasoning. You get a sentence that mentions a precedent without the precedent itself.

This is what practitioners call "chunk soup." It's why vector-only retrieval over decision logs feels confident and is subtly untrustworthy.

Chunk Soup vs. the Decision Packet

Vector RAG returns

…"the refund was approved for the premium customer" (0.83)

…"threshold for auto-approval is $200" (0.79)

…"escalate SEV-1 incidents to tier 2" (0.74)

Three plausible fragments. No links between them. Was this refund above the threshold? Who overrode it? What happened next? The chunks can't say.

Decision GraphRAG returns

Proposition: Approve refund #4521 ($240)
PRO: Premium customer, valid defect
CON: Exceeds $200 auto-approve threshold
Override: Approved by Sr. Analyst (policy P-12)
Precedent: cites case #1234 (approved, 0 chargebacks)
Outcome (6mo): retained, no dispute

One bounded packet. The reasoning, the exception, the precedent, and the result — connected.

The difference isn't the embedding model or the chunk size. It's the substrate. One stores text about decisions; the other stores decisions as structure.

Why Normative Edges Change Everything

Generic knowledge graphs store descriptive edges: "mentions," "related to," "owned by." They tell you two things are connected but not why it mattered.

A decision graph stores normative edges — the relationships carry reasoning:

  • supports / opposes — this argument pushed the decision toward or away from the outcome
  • refutes — this evidence directly contradicts that claim
  • qualifies / depends_on — this holds only under a condition

Because the edge type is the reasoning, the graph already knows what's load-bearing. Retrieval doesn't have to guess which of ten mentioned facts actually drove the call — the supports edges with high weight say so. Descriptive graphs enable search. Normative graphs enable judgment.

Why a Decision Graph Is "GraphRAG-Perfect"

Most teams that try GraphRAG on a general enterprise graph give up. The reasons are consistent, and a decision graph avoids every one of them:

Why generic GraphRAG strugglesWhy a decision graph doesn't
Graph is enormous (millions of nodes)Each decision's subgraph is small and self-contained
Edges are low-signal ("related_to")Edges are normative and carry the reasoning
No natural root node to start fromThe decision is the root node
Traversal has no natural stopping pointA decision's boundary is intrinsic — expand to its arguments, evidence, and cited precedents, then stop

The graph has "what mattered" built into its structure. That's the property GraphRAG needs and rarely gets.

The Hybrid Retrieval Pipeline

Vectors and graphs aren't rivals here. Decision retrieval uses vectors to find the entry points and graph structure to fetch the complete context. In AIAgentree this is a five-step pipeline (shipped in the precedent-search service):

  1. 1Vector search over decision and argument embeddings — find the handful of relevant past decisions
  2. 2Structured filters — tenant, category, entity type, precedent maturity (so you retrieve validated cases, not drafts)
  3. 3Graph-context expansion — walk the normative edges to pull in each decision's arguments and evidence
  4. 4Outcome-weighted ranking — a precedent whose outcome turned out well ranks above a superficially-similar one that didn't
  5. 5Packaging — assemble the result into bounded Decision Packets ready to hand to an agent or a reviewer

Hard limits (max depth, max nodes, timeout) keep expansion from running away. The output is never a wall of tokens — it's a small number of complete, comparable decisions.

Retrieval For Agents: MCP and A2A

Memory is only useful if the agent can reach it while it reasons. AIAgentree exposes decision retrieval two ways:

Over MCP

The Model Context Protocol server exposes tools like search_precedents and get_packet. An agent queries for relevant prior decisions and receives Decision Packets inline — mid-reasoning, not as a batch job.

Over A2A

In agent-to-agent delegation, the Decision Packet is the payload. A receiving agent inherits the full, self-contained context of a decision without any access to the sender's database.

The packet is portable by design — it carries everything needed to understand and apply the decision, which is exactly what makes it safe to pass across a trust boundary.

What It Looks Like In Code

Retrieving precedent for the decision an agent is about to make:

# Find how similar cases were decided before acting
results = client.search_precedents(
    query="refund above auto-approve threshold, premium customer",
    filters={"category": "customer_service", "maturity": "validated"},
)

for packet in results:
    # Each packet is a complete decision: proposition, pro/con
    # arguments, evidence, approvals, outcome, and cited precedents
    print(packet.proposition, packet.outcome, packet.confidence)

No prompt-stuffing of raw logs. The agent reasons over prior decisions, with their reasoning attached. The snippet uses the Python client for clarity — but the same retrieval (get_packet, search_precedents) is available over MCP with no SDK, so an MCP-native agent consumes decisions as tools.

The Full Stack Is Shipped

We'd rather be precise than impressive. Here's what's live today:

Decision Capture & Retrieval

  • Normative decision-trace data model (typed argument edges)
  • Hybrid precedent search (the five-step pipeline above)
  • Precedent citation — cite a past decision as a first-class argument
  • Decision Packet assembly
  • Retrieval over MCP + A2A
  • Tamper-evident, append-only decision records

Institutional Memory Flywheel

  • Automatic outcome feedback — webhook + polling ingestion writes results back onto decisions
  • Outcome-quality scoring — decisions with good outcomes rank higher in precedent search
  • Argument effectiveness — track which arguments led to positive outcomes
  • Auto-suggested precedents — relevant prior decisions surfaced at seal time

The full closed-loop flywheel is live: outcome feedback flows back into precedent rankings, argument effectiveness surfaces what worked, and agents get relevant precedents auto-suggested when they seal a decision. The graph substrate makes it possible — and now the self-improving layer runs on top of it.

What This Does Not Replace

  • Your vector database — it's a component of the pipeline, step 1
  • Your document RAG — retrieving policies and manuals is a different job
  • Observability tools — spans, latency, and token metrics still belong to LangSmith/Langfuse et al.

Decision GraphRAG sits on top of all of them and captures the artifact none of them stored: the structured decision, retrievable with its reasoning intact.

Frequently Asked Questions

What is GraphRAG for AI decisions?

GraphRAG (graph-enhanced retrieval-augmented generation) retrieves context by traversing a knowledge graph instead of only ranking text chunks by vector similarity. For AI decisions, the graph is a normative argument graph — decisions, the pro/con arguments that supported or opposed them, the evidence cited, and the precedents referenced, connected by typed edges (supports, opposes, refutes). Retrieval starts from vector search to find relevant decisions, then expands along those edges to return a complete, bounded Decision Packet rather than disconnected snippets.

How is decision GraphRAG different from vector RAG over logs?

Vector RAG embeds chunks of text (logs, transcripts, docs) and returns the top-k most similar fragments. Those fragments are disconnected — a retrieved snippet may quote a decision's conclusion but miss the counterargument that nearly reversed it, the human who approved the exception, or the precedent it relied on. Decision GraphRAG retrieves the decision as a structured unit with its reasoning intact, because the relationships are stored as first-class typed edges, not left implicit in prose.

What is a Decision Packet?

A Decision Packet is the bounded output of graph decision retrieval: a self-contained, structured representation of one decision containing the proposition, the pro/con argument tree, the evidence and its provenance, the policies evaluated, the humans who approved it, the sealed outcome, and any precedents cited. It is what an agent (or an auditor) retrieves instead of a pile of log lines. AIAgentree assembles Decision Packets from the stored decision trace.

Why is a decision graph a good substrate for GraphRAG when generic enterprise graphs are not?

Generic enterprise knowledge graphs are hard to traverse: they are enormous, their edges are low-signal ('related_to' conveys no reasoning), there is no natural root node, and expansion has no obvious stopping point. A decision graph avoids all four problems: each decision is a natural root, edges are normative and high-signal (supports/opposes/refutes carry the actual reasoning), and a single decision's subgraph is small and naturally bounded. The graph already encodes 'what mattered,' so retrieval knows what to include.

Does this replace my vector database or RAG stack?

No. Vector search is a component of decision GraphRAG, not a competitor to it — embeddings find the right entry points, then graph structure fetches the complete context. AIAgentree sits at the decision layer on top of your operational systems and your existing RAG for documents. It captures and retrieves the one artifact those systems historically did not store: the structured decision itself.

What is shipped?

Everything described in this post is shipped and live: the normative decision-trace data model, hybrid precedent search (a five-step pipeline: vector search → structured filters → graph-context expansion → outcome-weighted ranking → packaging), precedent citation (citing a past decision as a first-class argument), Decision Packet assembly, retrieval exposed to agents over MCP and A2A, automatic outcome feedback (webhook + polling ingestion), outcome-quality scoring that boosts precedent rankings, argument-effectiveness tracking (which arguments led to good outcomes), and auto-suggested precedents on seal. The full 'institutional memory flywheel' is live and closed-loop.

How do agents retrieve decisions at inference time?

Through the Model Context Protocol (MCP) and agent-to-agent (A2A) delegation. AIAgentree exposes tools such as search_precedents and get_packet over an MCP server, so an agent can query for relevant prior decisions and receive Decision Packets inline while it reasons. In A2A delegation, a Decision Packet is the self-contained payload passed between agents, so a receiving agent inherits the full context of a decision without access to the sender's database.

Related Topics

Related Articles

AI

AIAgentree Team

Decision Infrastructure

The AIAgentree team is building decision tracing and retrieval infrastructure for AI agents. Our mission is to make AI reasoning visible, auditable, retrievable, and improvable.

Give your agents a memory worth retrieving.

Capture decisions as a graph, not a log — and retrieve them as bounded Decision Packets. Free tier available, no credit card required.

Start Free