Skip to content
stackworx

Adding AI to an existing Rails application without putting production at risk

Share this blog with your network

AI inside your Rails app: an AI-drafted reply waiting for review

You can add AI features to an existing Rails application without a rebuild and without putting production at risk. The safe pattern is to start with one narrow feature tied to a real workflow, run model calls in background jobs, keep a person in the loop wherever output affects customers or money, cap cost per request and per account, and measure quality against real examples before and after every change. The model is the easy part. Most of the engineering goes into everything around it.

This guide is for founders and product leaders with a working Rails product who want AI to do useful work inside it, not to add a chatbot for its own sake.

Pick a feature where AI removes real work

The best first features take a task your users or staff already do by hand and make it faster, with a person still deciding the outcome. Good candidates share these traits:

  • The task is frequent and mostly text: drafting, summarizing, classifying, extracting.
  • A wrong answer is easy to spot and cheap to correct.
  • The input data already exists in your application.
  • Success can be measured, such as time saved or edits needed.

Examples that fit this pattern include drafting a reply from a customer's history, extracting fields from uploaded documents into a form for review, classifying incoming requests, or generating first-draft listing or marketing copy from structured data.

Weaker first candidates are open-ended chat over your whole product, anything that takes actions without review, and features where nobody can say what "correct" looks like.

Where AI fits in a Rails architecture

Wrap the provider behind one service

Create a small service layer in your app that every AI feature calls. It holds the provider client, prompt templates, timeouts, retries, logging, and cost tracking. Switching models or providers later becomes a change in one place.

Use background jobs for model calls

Model responses can take seconds and sometimes fail. Run them in background jobs with your existing job system, store the result, and update the page when it is ready. Web requests stay fast, and failures retry without the user waiting.

Store inputs and outputs

Save what was sent, what came back, the model version, and whether the user accepted, edited, or rejected the result. This record is how you debug complaints, measure quality, and build evaluation sets.

Validate output before using it

Treat model output as untrusted input. If you expect structured data, validate it against a schema and reject what does not fit. The OWASP Top 10 for LLM Applications lists improper output handling as its own risk category.

Risks to design for from day one

RiskWhat it looks likePractical control
Prompt injectionText in a document or message changes the model's instructionsSeparate instructions from user content, limit what the model can trigger, review actions
Excessive agencyThe model can send, delete, or charge on its ownGive it read or draft permissions only; a person confirms actions
Sensitive data exposurePrivate customer data sent where it should not go, or shown to the wrong userSend only needed fields, enforce your existing authorization, review provider data terms
Unbounded costA loop or a heavy user runs up the billPer-request token limits, per-account quotas, spend alerts
Wrong but confident outputPlausible text that is factually incorrectGround answers in your data, show sources, keep human review

Prompt injection, excessive agency, sensitive information disclosure, misinformation, and unbounded consumption all appear in the OWASP list. They are not theoretical. Any feature that reads text from users or documents is exposed to injection attempts.

If you have an AI feature in mind and want to know how it would fit your existing Rails application, bring a description of the workflow and the data it would use to a Systems Discovery Call.

Measure quality before you ship

Collect 30 to 100 real examples of the task with the answer a good employee would give. Run the feature against them before launch and after every prompt or model change. Track simple scores that match your goal: correct field extraction, acceptable drafts, correct classification.

In production, the most useful metric is usually how often users accept the output without edits, how much they edit it, and how often they reject it. Those numbers tell you whether the feature is saving time.

Rolling it out safely

  1. Ship behind a feature flag to internal users or a few customers first.
  2. Keep the manual path available so users are never blocked by a model outage.
  3. Watch cost and latency per request and per account from the first day.
  4. Review rejected outputs weekly and add them to your evaluation set.
  5. Expand gradually once acceptance rates and costs are where you want them.

Where teams go wrong

  • Starting with the model instead of the workflow. The question is which task gets faster, not which model is newest.
  • Calling the model inside web requests. Slow or failed responses then become slow or failed pages.
  • No logging of inputs and outputs. Without it, you cannot debug complaints or measure changes.
  • Giving the model write access too early. Drafts and suggestions first, actions later, with review.
  • Ignoring the rest of the app. If the application has reliability problems, AI features inherit them. See Stabilize your SaaS product before adding more features.

Common questions

Do we need to fine-tune a model?

Usually not for a first feature. Good prompts, relevant context from your own data, and structured output handle most business tasks. Consider fine-tuning only when you have many examples and a measured gap that prompting cannot close.

Which provider should we use?

Choose based on quality on your own examples, cost, latency, and data terms. Keeping the provider behind one service in your app means this decision is reversible.

Can AI features run on an older Rails version?

Calling an API works on most versions, but outdated dependencies can make client libraries, background job tooling, and security updates harder. If the app is several versions behind, plan the upgrade alongside the feature. See Upgrading an old Rails app without a rewrite.

Next step

If you want AI to take real work off your users or staff inside your existing application, book a Systems Discovery Call. It is 45 minutes on your product, the workflow you want to improve, and the data involved. You leave with a clear picture of whether AI is the right fit and what a first version would look like, whether you hire us or not.

Farooq Ch, CEO & Founder of Stackworx

Farooq Ch

Oct 2026