Workflows / JevModel

Customer Feedback Classification: One Theme, a Priority Score, and Why Sentiment Is Not Enough

Sort open-ended NPS comments, reviews, and in-app feedback into one theme plus a follow-up priority. Compare keyword rules, LLM prompts, and a typed Choice plus Score request, and send mixed comments to people.

Last updated:

Quick answer: label the theme, score the priority, keep the rating as context

  • Customer feedback classification assigns one primary theme — such as performance, usability, feature request, billing, or mixed — to an open-ended comment, then separately rates how urgently the product team should look.
  • Keep the numeric rating (NPS or stars) in the state as context. Do not let that number choose the theme: a detractor can praise one feature, and a promoter can report a blocker.
  • Keyword rules cover phrases you already audit. LLM prompts explore new themes but drift. A typed request — JevModel Choice plus Score — returns one theme from your list and an ordered priority. The mid-band goes to a person. This is not a polarity API and not a live ticket queue.

What should customer feedback classification decide?

The decision is two questions, not one score. First: what is this comment mainly about? Second: how soon should a product person read it? Sentiment answers a different question — positive, neutral, or negative — and a weekly theme report disappears if you only store polarity. Support triage answers yet another question: which live queue should reply. A comment can be negative and still be a feature request, or positive and still describe a broken export. Opening a ticket for every comment also fills the queue with praise. Use sentiment-analysis-api when the dashboard needs polarity. Use support-triage or zendesk-ai-ticket-classification when someone must reply. Use content-moderation when the action is hide, ban, or escalate for safety. This page owns the offline corpus: NPS open answers, in-app feedback, public reviews, and survey free text that product teams bucket into a fixed theme list.

Sentiment Analysis API in 2026: Cloud APIs vs LLM Prompts vs a Typed Decision ModelRoute customer support with JevUse Jev for review queuesZendesk AI Ticket Classification & Routing: Built-in Intelligent Triage vs a Custom Classifier

How do you prepare a comment before classifying it?

Classify one open-ended answer at a time. If a survey has three free-text boxes, make three rows so themes do not blend. Build a JSON state with the respondent’s own words plus a few fields you already trust: channel (nps, in-app, review), the numeric score if any, plan, locale, and product area when the form asked for it. Strip the boilerplate the form adds, such as a label “Additional comments:”. If the row arrived as email, trim quoted replies and signatures first — that work is email-classification — and only then classify the remaining comment. Do not paste screenshots, audio, or files. This API accepts text or JSON only; a written description of an image is not the same as showing the pixels. Anonymize names, emails, and account ids before the request leaves your system. The serialized state must be at most 8,000 characters, and the full validated request (state plus questions) must also fit in 8,000 characters, so leave room for the criteria. Trim to the respondent’s sentences. If another model summarized the comment first, record that fact on the row, because you are no longer classifying the original words. Request data is sent to the upstream provider; see privacy-and-history.

Email Classification with AI: Rules, LLM Prompts, or a Typed Decision API for Inbound MailPrivate runs and historyHow to classify text with the JevModel API

Rules, an LLM prompt, or a typed Choice plus Score?

Most teams keep a thin rule layer for phrases they already trust, then a model for the rest. The table compares contracts and failure modes. It is not a benchmark, and none of the three replaces a labeled sample of your own comments.

Jev or rules?Jev vs GPT and Claude: choosing a decision layer
Rules, an LLM prompt, or a typed Choice plus Score?
DimensionKeyword rulesLLM prompt plus JSONTyped Choice plus Score
What comes backA matched phrase, or nothingLabels the model writes; you must parse themOne theme from your criteria, plus a score on your rubric
Mixed commentsThe first matching rule wins, or nothing matchesOften one invented combination labelAn explicit mixed criterion, or a close probability for a person
The numeric ratingYou can hard-code “low score means a bug”The prompt may ignore the score or obey it unevenlyPut the rating in the state; the theme question does not have to follow it
When it breaksParaphrase and new wordingRenamed keys, unknown themes, scores stuck highMore than 12 themes in one Choice, or criteria that overlap

What does a theme-and-priority request look like?

The Playground ships an example named Feedback intelligence. It classifies a comment about a report export getting slower into a theme (performance, usability, feature, or billing) and a follow-up Score from low to very high. The request below keeps that comment and adds an explicit mixed theme so a short or multi-topic note is not forced into a product area. Question ids start with a letter and then use only lowercase letters, digits, and underscores, up to 40 characters. Instructions are 8 to 600 characters. Each criterion is 2 to 350 characters. Choice takes 2 to 12 themes. Score takes 2 to 10 ordered levels; list them in rubric order, here from low to very high. A Choice answer has choice, a probability per theme, and a confidence summary of that distribution. Confidence is not a measured accuracy rate. A Score answer has score, which can fall between levels, and that number is not a probability. Read both before any side effect. A theme is not permission to change the roadmap. Sign in, verify email, create a key under Console, API keys, and store it as JEVMODEL_API_KEY on the server. The call below is a live request and can spend allowance or tokens. Free verified accounts share 5 successful runs per UTC day across Playground, each Batch row, and this API, subject to site capacity. The fixed model is typesafe/jev-1.13 via OpenRouter. There is no idempotency key: if the response is lost, check history before you retry.

JevModel API: request and responseChoice, Score, and NoulJevModel pricing and free Jev runs
curl --fail-with-body https://jevmodel.app/api/v1/systemone \
  -H "Authorization: Bearer $JEVMODEL_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"state":{"channel":"nps","score":3,"comment":"After the latest update, exporting a report takes two minutes instead of ten seconds. We export every morning."},"questions":{"theme":{"type":"choice","instructions":"Classify the main theme of this customer feedback.","criteria":{"performance":"Performance or speed regression.","usability":"Confusing interaction.","feature":"Feature request.","billing":"Billing issue.","mixed":"Several themes, or not enough text to choose."}},"urgency":{"type":"score","instructions":"Rate product-team follow-up priority for this feedback.","criteria":["Low: optional improvement","Medium: limited friction","High: recurring workflow degraded","Very high: core workflow blocked for many users"]}}}'

How do mixed comments stay with a person?

Set three bands on your own held-out comments, not on a universal cutoff. High band: write the theme and the priority onto the row in your warehouse. That action is reversible. Mid-band, the mixed label, or two themes whose probabilities are close: show the comment to a reviewer with the top two themes attached, and let that person add a second theme by hand if the report needs it. Low band: leave the row untagged. Do not create a public roadmap item from a label alone. Calibrate which Score values should page someone; the score is a reading of your rubric, not a probability of being right. Re-check the bands when you rename criteria or the upstream model behavior changes. For a backlog, Console, then Batch, imports CSV, TXT, or JSONL up to 2 MB and 1,000 rows, applies one fixed question set, and exports row-level answers. Join those answers to your labels outside the site. Batch does not compute accuracy, and it is not an asynchronous bulk-job endpoint. A row is still one ordinary run. See confidence-and-abstention for thresholds and evaluation for the held-out split. If one comment must carry several themes at once, that contract is multi-label-text-classification, not a wider Choice.

Jev probability, confidence and human-review thresholdsBatch text classification with the JevModel APIEvaluate a Jev workflowMulti-Label Text Classification: One Choice, Several Yes/No Questions, or a Second Pass

When should you use a different guide?

Stay here when the input is an open-ended product comment and the output is one theme plus a priority. Leave for sentiment-analysis-api if you only need positive, neutral, or negative for a chart. Leave for support-triage if the text is a live ticket that needs a reply. Leave for email-classification if the raw input is still a mailbox thread. Leave for content-moderation if the action is a safety enforcement. Leave for multi-label-text-classification if the report must keep every applicable theme, not only the primary one. A Decision Flow can chain the theme question into a follow-up question, but running a flow is for paid plans only: subscribe or buy a token pack. Flows do not use the daily free runs. JevModel does not train a classifier on your comments, does not accept images or attachments, is not open source, and does not offer a weight download.

Sentiment Analysis API in 2026: Cloud APIs vs LLM Prompts vs a Typed Decision ModelAI Decision Flows with Jev and human reviewMulti-Label Text Classification: One Choice, Several Yes/No Questions, or a Second PassIs Jev open source?Route customer support with JevUse Jev for review queuesBatch text classification with the JevModel APIJev probability, confidence and human-review thresholdsEmail Classification with AI: Rules, LLM Prompts, or a Typed Decision API for Inbound Mail

Frequently asked questions

Is customer feedback classification the same as sentiment analysis?

No. Sentiment stores polarity. Feedback classification stores a product theme and a separate follow-up priority. A negative comment can still be praise for one area, and a positive comment can still report a blocker. Use both only if the chart and the theme report are different decisions.

Should the NPS score be one of the labels?

No. Put the score in the state next to the comment. A label set of “promoter / passive / detractor” only repeats a number you already have. The theme question should describe the product topic, with an explicit mixed or unclear option.

How many themes can one Choice hold?

Two to twelve. If you have more, group them under parent themes and classify the child set in a second request, or switch to several yes/no questions as described in multi-label-text-classification. Overlapping descriptions make the probabilities less useful even when the count is legal.

Can I classify a backlog of survey exports?

Yes, one row per open-ended answer. Console Batch accepts CSV, TXT, or JSONL up to 2 MB and 1,000 rows and exports answers; it does not score accuracy. From code, POST each row to /api/v1/systemone. Free verified accounts share the daily successful-run allowance, so a large file needs a paid balance. Keep your own row id and join labels outside the product.

JevModel is independent and not affiliated with TypeSafe AI.