Building Trustworthy LLM-Powered Agents for Automated Expense Management

ramp · Finance · 2025 · source Agentic: yes · promotional bias: med · source-backed · extracted with prompt 0.5.5 (schema v2)

Generated from extraction.json — do not edit by hand. Every claim cites verbatim source evidence; stated means the quote directly asserts the claim, implied means it supports it indirectly.

Problem

Domain: finance automation agents

Ramp wanted LLM-powered agents that could automate expense approval and related finance tasks while preserving user trust through transparency, user control, and reliable escalation.

Constraints:

Architecture

Ramp's agent architecture centers on a policy agent with policy retrieval, cited reasoning, categorical outcomes, an uncertainty fallback, editable customer policy context, workflow-builder autonomy settings, deterministic rules, staged rollout from suggestions to autonomy, and evals that grow from edge cases and user-flagged failures.

Diagram confidence: reconstructed (reconstructed from prose).

flowchart LR
  expense-event["expense event"] --> policy-agent["policy agent"]
  policy-agent --> policy-retrieval["policy retrieval"]
  policy-retrieval --> policy-editor["policy editor"]
  policy-agent --> decision-categories["decision categories"]
  decision-categories --> escape-hatch["escape hatch"]
  policy-agent --> citation-ui["citation UI"]
  citation-ui --> finance-operators["finance operators"]
  escape-hatch --> human-escalation["human escalation"]
  human-escalation --> finance-operators
  policy-agent --> workflow-autonomy-layer["workflow autonomy layer"]
  workflow-autonomy-layer --> deterministic-hard-stops["deterministic hard stops"]
  workflow-autonomy-layer --> finance-operators
  finance-operators --> collaborative-feedback-loop["collaborative feedback loop"]
  collaborative-feedback-loop --> policy-editor
  collaborative-feedback-loop --> eval-harness["eval harness"]
  eval-harness --> policy-agent
Drag to pan · scroll or use +/− to zoom · reconstructed from the source's described component topology

Components

Component Role Interacts with
expense event Represents an expense needing approval, rejection, or review. policy agent
policy agent Runs the LLM-backed approval decision and produces reasoning. policy retrieval, decision categories, citation UI, escape hatch, workflow autonomy layer
policy retrieval Selects policy sections relevant to the expense. policy editor
policy editor Keeps customer expense policies current and user-correctable inside Ramp. collaborative feedback loop
decision categories Constrain outcomes to Approve, Reject, or Needs review. escape hatch
citation UI Shows reasoning and links facts to policy sections. finance operators
escape hatch Defers uncertain decisions to human judgment and records why. human escalation
workflow autonomy layer Defines where agents can act and where human review is mandatory. deterministic hard stops, finance operators
deterministic hard stops Apply dollar limits, vendor blocklists, and category restrictions outside LLM judgment. workflow autonomy layer
human escalation Receives uncertain or restricted decisions. finance operators
collaborative feedback loop Turns disagreements, policy edits, and failures into context and evaluation improvements. eval harness, policy editor
eval harness Tests edge cases, production failures, and golden datasets to prevent regressions. policy agent
finance operators Review decisions, set autonomy, verify citations, and clarify policies. citation UI, workflow autonomy layer, human escalation, collaborative feedback loop

Data flow

The policy agent evaluates expenses against in-platform policy context, renders reasoning with policy citations, chooses Approve/Reject/Needs review, applies workflow guardrails, escalates unsure cases, and uses policy edits plus eval failures to improve the system over time.

3 supporting quotes
“Every decision needs a "why." It’s not enough to tell users "You should approve this expense.” This helps users verify the outcome, spot errors quickly, and understand how your LLM thinks. This last point is also important to both developers and users: *”article, stated
“the policy agent links directly to sections of the user’s expense policy that its reasoning references. Putting this together, here’s an example of how we present the reasoning and citations of the policy agent to users: ![Image”article, stated
“where the LLM is prone to errors or inconsistencies. * Turn failures into test cases - Every user-flagged error should be a candidate for your evals. This is especially useful for building your datasets early on. * Trust but verify - Users can be wrong, lazy, or both.”article, stated

Why this architecture

Ramp treats trust as a system property: users need to see the model's reasoning, verify it against policy, configure autonomy, and watch uncertain cases defer rather than hallucinate. The architecture therefore mixes LLM decisions with citations, policy editing, deterministic rules, and evals.

3 supporting quotes
“clearly explain their reasoning, recognize their own limitations, defer to human judgment, and ultimately build trust.”article, stated
“When giving your systems agency it’s important you’re not removing agency from your users. Our solution was to reuse the workflow builder that’s already used across the product to customize and define processes.”article, stated
“These guardrails aren't just safety nets, they're how users tell the agent "I'll never be comfortable with you touching this.””article, stated

Models used: LLMs

Scale

Alternatives considered (roads not taken)

Represent uncertainty as a confidence percentage.

Rejected because: Ramp found LLM confidence scores uncalibrated and prone to repeated 70-80% values.

“LLMs will eagerly give you a confidence of 70-80% with no indication that they will almost always give that same score.”article, stated
“Instead, we use predefined categories which are not only easier to explain but also more accurate: * Approve - Clear match between expense and policy * Reject - Clear conflict between expense and policy * Needs review - Edge case when the model”article, stated

Let the LLM make every decision autonomously.

Rejected because: Ramp explicitly preserves human review for uncertain cases and customer-defined hard stops.

“When the agent isn’t sure, we fall back to the pre-agent escalation process users are accustomed to. We can then use that explanation to: 1. Tell the user what made the AI unsure, to help them focus on what may need additional review 2. Track how the unsure”article, stated
“builder defines exactly where and when agents can act. The autonomy slider works both ways. Users can greenlight agents AND set hard stops. Not everything needs to be an LLM decision. We layer deterministic rules on top: dollar limits, vendor blocklists, category”article, stated

Roll out full autonomy immediately.

Rejected because: Ramp built a trust curve by starting with suggestions and gradually granting action rights.

“we started with suggesting actions to humans before moving to taking those actions autonomously. This builds confidence. Users learned the agent's patterns, caught its mistakes, and most importantly saw it getting things right. Only after proving itself as a”article, stated
“Only after proving itself as a copilot did we let customers promote the agent to take real action. The progression is deliberate: suggestions → acting on subsets → full autonomy. Each step validates the previous one, creating a natural trust curve that”article, stated

Patterns

structured-output-contract (decisioning)

The agent buckets outcomes into Approve, Reject, and Needs review.

“* Approve - Clear match between expense and policy * Reject - Clear conflict between expense and policy * Needs review - Edge case when the model is unsure This forces the model to bucket uncertainty into actionable states:”article, stated
“* Approve - Clear match between expense and policy * Reject - Clear conflict between expense and policy * Needs review - Edge case when the model is unsure This forces the model to bucket uncertainty into actionable states:”article, stated

human-in-the-loop-gate (control)

The escape hatch and workflow settings keep humans in the loop for unsure or restricted cases.

“When the agent isn’t sure, we fall back to the pre-agent escalation process users are accustomed to.”article, stated
“These guardrails aren't just safety nets, they're how users tell the agent "I'll never be comfortable with you touching this.” Image 4 The more conservative end of the autonomy slider, requiring human review on every expense above $50. !”article, stated

safety-policy-enforcement (guardrails)

Deterministic business rules bound the agent's autonomy.

“We layer deterministic rules on top: dollar limits, vendor blocklists, category restrictions.”article, stated

eval-driven-development (evaluation)

Ramp treats evals as unit tests and adds production failures to the evaluation set.

“Just as unit tests are needed to responsibly evolve a traditional application over time, evals are needed to responsibly evolve your LLM systems over time.”article, stated
“* Turn failures into test cases - Every user-flagged error should be a candidate for your evals. This is especially useful for building your datasets early on.”article, stated

Tradeoffs

Use a hybrid of LLM judgment and deterministic rules.

Chose LLM policy reasoning plus dollar/vendor/category hard stops over LLM-only decisioning.

Rationale: Some organizational rules are clearer and safer as deterministic boundaries.

“Not everything needs to be an LLM decision. We layer deterministic rules on top: dollar limits, vendor blocklists, category restrictions.”article, stated
“We layer deterministic rules on top: dollar limits, vendor blocklists, category restrictions.”article, stated

Use editable policy context.

Chose Ramp-hosted policy editor over External PDF-only policy context.

Rationale: Policy edits improve both agent decisions and human clarity.

“Brought the user’s expense policy (typically a PDF) onto Ramp so it’s always up to date”article, stated
“This feedback loop not only reduces the amount of work humans need to do over time, but also improves policy accuracy.”article, stated

Progress from suggestions to autonomy.

Chose A staged trust curve over Immediate autonomous action.

Rationale: Users needed to observe patterns and mistakes before granting the agent real action authority.

“Users learned the agent's patterns, caught its mistakes, and most importantly saw it getting things right.”article, stated

Gotchas (what bit them)

Overconfident automation damages trust.

Root cause: Forcing LLMs to decide under uncertainty encourages hallucinated answers and unexpected actions.

Resolution: Allow the LLM to say it is unsure and route the case to human review.

“Forcing your LLM to come up with one and act on it is a recipe for hallucinations.”article, stated
“We’ve seen LLMs practicing humility be a very strong force for building user trust.”article, stated

Static policy context can stay ambiguous.

Root cause: Policies maintained outside the platform may not be updated when the agent reveals confusing language.

Resolution: Bring policy authoring into Ramp and let users edit the source context.

“Bring the surfaces where users define their context into your platform”article, stated
“Allow users to modify that context in the platform when they disagree with the LLM output or reasoning”article, stated

Raw user approval behavior can teach the wrong policy.

Root cause: Finance reviewers may approve reasonable but not fully compliant expenses.

Resolution: Review golden datasets against the information available in the system.

“If we always took the user’s action as the ground truth , the LLM could have been too lenient.”article, stated
“To address this, we created several golden datasets, each carefully reviewed by our team”article, stated

Evaluation

Ramp's evaluation process grows from quick tests to deeper edge-case coverage, converts user-flagged failures into test cases, and uses internally reviewed golden datasets to avoid affinity bias.

Metrics: More than 65% of approvals fully handled by the agent · Unsure reasons tracked over time · User-flagged errors added as eval candidates · Several golden datasets reviewed by Ramp

3 supporting quotes
“Since enabling the policy agent at Ramp, we’ve seen more than 65% of approvals be fully handled by the agent.”article, stated
“Track how the unsure reasons changes over time as you modify the system”article, stated
“we created several golden datasets, each carefully reviewed by our team”article, stated

Outcomes

The source provides a 65% autonomous approval figure and example review threshold, but not detailed error-rate, latency, cost, or customer-distribution metrics.

“Since enabling the policy agent at Ramp, we’ve seen more than 65% of approvals be fully handled by the agent.”article, stated
“we optimized our suite of agents to deliver real business value, clearly explain their reasoning, recognize their own limitations”article, stated