この記事は現在英語版のみです。

(記事)

After an AI Answering System Goes Live: Refusal Thresholds, Abuse Guards, and Keeping Answers Trustworthy

After launch, the costliest problem is a wrong answer nobody notices. Holding up takes a measured refusal threshold, guards on every model-calling path, allowances accounted by purpose, and a daily check on data quality.

Polish Design engineering team・2026-10-26

Contents

The weaknesses of an AI answering system are easy to name. It gets answers wrong, it sounds as confident when wrong as when right, and nobody notices. The first two come with language models. The third is an operations problem after launch, and it is the most expensive one: a user acts on a wrong answer while the system shows no sign that anything went wrong.

Two people sit facing each other, one speaking and one listening with a sheet of paper.

The risk of misinformation from generative AI is documented. NIST’s companion profile for generative AI risk management notes that generated content can make it hard to tell fact from opinion and can be used for large-scale misinformation campaigns (NIST, 2024). What matters after launch is how those risks show up in a single system.

“This question has no answer yet” is worth more than a forced answer

The most important sentence in an answering system is “This question does not have an organized answer yet.” A system that always answers wraps its mistakes in fluent sentences and puts the result in front of users. A system that can decline at least leaves the uncertain part to a person.

A refusal threshold is measured, not set by feel. The method is covered in how to evaluate an AI answering system before launch, so it is not repeated here. What matters after launch: whenever retrieval weights or knowledge content change, the threshold has to be measured again.

The idea has academic grounding. Geifman and El-Yaniv proposed selective classification for neural network classifiers: the user sets an acceptable level of risk, and the classifier rejects some inputs at test time so that risk stays within that level with high probability (Geifman et al., 2017). The SimpleQA benchmark sorts answers into three groups, correct, incorrect, and not attempted, and treats choosing not to answer when uncertain as what an ideal model does (Wei et al., 2024). The refusal threshold in an answering system follows a similar line of thinking.

When confidence is low, how the system replies matters. It says plainly that no organized official answer exists yet, lists the three closest questions, logs one miss, and hands the user to a person. Each logged miss is a question the knowledge base needs next.

After the answer, a validator checks once more

Passing the threshold does not mean an answer goes out. The model may answer only from the top retrieved sources, and the program checks the remaining rules one by one:

  • Every point carries a source number.
  • Any number in the answer must appear in a cited source or in the asker’s own question.
  • Words of judgment cannot be added by the model.
  • If validation fails, retry once with the reason; on the second attempt, drop only the points that failed.
  • If every point is dropped, do not force an answer and fall back to “no answer yet”; if both attempts fail, return an error and do not count against the user’s allowance.
Fig. 1Validation follows the model’s answer: failing points are dropped, and dropping every point returns “no answer yet”
  1. Retrieve and compare to the thresholdThe model is involved only once the confidence threshold, which takes in score and coverage, is passed
  2. Model answers from the sourcesEach point carries a source number
  3. Validator checks rule by ruleNumbers must appear in the source or the question; the model may not add words of judgment
  • Retrieval fails the threshold
    Reply “no organized answer yet”List the three closest questions, log one miss, hand off to a person
  • Validation passes in full
    Answer with sourcesEvery point traces back to a source
  • Some points fail validation
    Retry once, drop the points that still failIf all are dropped, no forced answer; if both attempts fail, return an error and do not count the attempt

Validators block wrongly too. A rule against passing judgment on the asker that bans words such as “fall short of,” “lower than,” and “higher than” will block correct answers, because official regulations are written exactly that way. The better rule blocks only statements that draw a conclusion about the asker personally, such as asserting that the person qualifies or has a strong chance. Rules on title length and on restating the question without answering work the same way: an end-to-end test that shows a correct answer being blocked is what tells the rule to loosen.

Tone gets amplified as well. The model can turn “many” and “in principle” in a source into “cannot” and “always,” so the rules now require keeping the source’s tone and scope. When the asker says the document is worded differently, the system neither denies nor agrees; it replies “not sure.”

The costliest failures raise no error: the run looks successful and nothing gets done

A crash is usually noticed quickly. The truly expensive failure returns success and does nothing. AI automation commonly fails in five ways, and the common thread is the absence of any error message.

  1. A category list was never passed to the model. Only after a full run does it turn out that most outputs are useless. Type checking cannot catch it; only a wiring check that verifies the call is really connected can, and the assertion has to compare the actual call, because a weak one lets the failure through.
  2. A write looked successful. The update statement carried a not-deleted condition, so when the target had already been deleted it updated 0 rows, and the function never checked the affected-row count. The return value was identical to success, and the records were mislabeled.
  3. A task was dropped. A newly added task never made it into the schedule and can go unnoticed for days.
  4. The wrong database. Connected to a different machine, the query for the pending list returned an empty array and the screen printed “nothing pending,” indistinguishable from a real empty queue.
  5. A setting never took effect. In an AI feature where the model is chosen in an admin panel, the chosen model can be rewritten in code to another vendor’s model while the fallback logic never runs, so the admin setting does nothing. Or the environment file has a line with an empty value; it loads as an empty string, the default is not applied, and the system reads a table with no suffix and even creates an empty one.

The safeguards are plain. A wiring check confirms that every task and every list is actually called. A read-back after each write confirms the data really changed. “No data” and “wrong database” are checked separately, and the target is confirmed as production before a run. When adding an environment variable with a default, use an expression that handles empty strings and confirm the production environment file has no empty lines. A call log proves only that a call succeeded, not that the answer was right, so a log cannot replace these checks. These checks belong in the specification of an AI answering system build from the start, not as a patch after an incident.

Guards belong on every path that calls the model

The entry point of an answering service first passes through programmatic guards: prompt injection, abuse, requests for other people’s personal data, requests to write code, gibberish, and self-harm wording. On a hit, the model is not called, a fixed reply goes back, the log keeps only the category and never the original text, and the user’s allowance is not charged. OWASP’s list of risks for LLM applications names prompt injection (LLM01:2025) and misinformation (LLM09:2025) among the main risks (OWASP Gen AI Security Project, 2025). The same guards are not limited to answering services: every product feature that calls a model needs guarding, including an AI settings feature inside an interactive product.

Guarding the main path is not enough. A common gap is that some paths that call the model count against no allowance and can be called without limit, and an API call log that writes every request to the database and to files can be flooded until the disk fills. The countermeasures are an hourly limit per member on model calls and a per-minute request limit per source address.

The lesson is simple: whenever a path that spends money is added, the allowance and the rate limit go into the same change. Miss one path and the guards on the others are worth little. The development team’s security check script looks specifically for this.

Fig. 2Every path that calls the model passes through the same guard and allowance first

User’s browser

  • QuestionThe user types a question
Question textAnswer with sources

Development team’s service

  • Entry guardProgrammatic matching for injection, abuse, and gibberish, plus allowance and rate limits
  • Retrieval and thresholdNo model call if the threshold is not met
  • ValidatorChecks the model’s draft rule by rule
A question that passed the guard, plus retrieved sourcesDraft with source numbers

Model provider

  • Language modelDrafts an answer from the sources

Not sent outA question that hits a guard never reaches the model; the log keeps only the category, not the original text

Scope: the user-request path of the answering service; batch work uses a separate key

Allowances are accounted by purpose

Model allowance should be accounted by purpose. Requests from users cannot be consumed by internal batch work or tests.

A common case is a key meant only for parsing end-user queries being used for a batch labeling run: if the batch prompt is wrong, every call in the thrown-away batch is pure waste, while legitimate front-end queries can fail once the allowance runs out. A test site’s API allowance is usually small, and batch tests can use up the allowance that users need, so every answer on the test site fails. The answer is to draw lines, as the table shows.

PurposeAllowance usedRule
User questionsA dedicated key and allowanceBatch work, cleanup, and tests never use it
Bulk data processingA separate key, or local processingA trial run that spends allowance reports an estimated cost first and runs only after approval
Periodic reviewNo key at all; runs on a local schedulePostponed if the computer is off, never moved to a cloud schedule

Separate accounting has a benefit unrelated to cost. When a runaway burst of parallel calls makes usage spike, the first reaction is often to suspect a leaked key, and a usage chart cannot tell normal work from a stolen key. Once allowances are separated by purpose, any anomaly on the user key is simply an anomaly.

Validate data on the way in, and compute a quality light once a day

An answering service depends on two kinds of data: the knowledge content and the records produced by use. When data gets worse, the system does not necessarily raise an error; answers may simply get worse slowly. Sculley et al. note that rapid progress in machine learning systems looks free but accrues substantial long-term maintenance cost, and the abstract lists data dependencies among the sources of risk (Sculley et al., 2015).

Take the front-end event intake of a content platform as an example. This layer is the data foundation. There is a single specification for events and shared fields, maintained by the front end. The back end syncs one copy, adds only and never deletes, and raises an error if content differs. Older versions are kept for a period. The release order is fixed within one day: merge the front end, sync the specification and deploy the back end that day, then deploy the front end last. When the order is reversed, the back end reports events and versions it does not recognize.

Every record is validated step by step: event name, whether it is in the plan, shared fields, version, user consent, personal data scrubbing, parameter specification, and deduplication. A failing record is rejected and no value is stored, only the reason and the path. Personal data is already blocked at the front end; the intake runs the same patterns once more, and on a hit clears the entire parameter instead of masking it. It is better to drop a suspect field than to let personal data into the database. IP addresses and raw browser strings are never stored.

Once a day at a fixed time, the system aggregates and computes the rejection rate, loss rate, duplicate rate, missing-required-field rate, share of late arrivals, and deviation of event volume from the median of the previous seven days. Above the threshold shows a red light, above half the threshold shows yellow, and too few samples means no rating. Lights use a shape plus text, not color alone. Aggregate cells with too few distinct users are not written, which puts data minimization into practice.

A reconciliation source that is not connected is not made to look healthy. The interface shows “not connected” and never rates it.

State held in memory means one process: write the scaling limit into the documentation

Some simplifications are deliberate, but the ceiling has to be stated. A common example is keeping the per-device lock that allows one report at a time, the queue, the cache of comparison results, the cache of external data, and the rate-limit counters all in memory. With several processes or machines, each holds a separate copy of that state, so locks and rate limits stop working. The documentation therefore has to say plainly: do not run more than one process.

When traffic grows, the next step is to move locks, the queue, and rate limiting into shared storage. Stating the limit is meant to keep a later expansion from being blocked by surprise.

Signals to watch after launch

General monitoring principles carry over directly. Ewaschuk’s chapter on monitoring distributed systems names four golden signals, latency, traffic, errors, and saturation, and holds that alerts should be raised, in principle, only for problems that need human action and affect users, with symptoms first and causes second (Ewaschuk, 2017). The ML Test Score of Breck et al. offers a checklist of the tests and monitoring that a machine learning system should have before and after launch (Breck et al., 2017).

A person holds a clipboard and ticks items on a checklist.

For an answering system, a few signals that only answering systems have come on top of those general ones.

SignalWhat to look atWhat an anomaly means
Refusals and missesThe rate, and the content of missed questionsA gap in the knowledge base, or a threshold that needs re-measuring
Validator blocksThe number of retries and dropped pointsThe model’s wording has shifted, or a rule is too strict or too loose
Guard hitsHits per categoryMore abuse attempts, or a guard that blocks wrongly
Allowance per purposeHow much of the user allowance is consumedConsumption on the user allowance that did not come from users
Data quality lightsRejection, loss, and duplicate ratesA change in a data source or in the front end
Whether expected work happenedRecords written, whether scheduled jobs ranA silent failure

After a rule changes, replay the fixed question set against the old and new versions and compare question by question. The same request always gets the same key, so a replay does not re-answer anything and costs no allowance. A score cannot show whether an answer reads smoothly, so a small set of questions in real users’ wording is read directly as text; this part is not scored.

When this is not a fit

  • Situations where a question depends on personal circumstances, or where every answer must be a commitment a person stands behind. A person should handle these, and an AI answering system is suited only to routing.
  • Teams whose knowledge content has no maintainer, or where nobody reads the miss records and the data quality lights after launch. The weaknesses then show up directly in front of users.
  • Cases with a limited number of questions and fixed answers. A page of prepared answers is enough, with no need for live generation or a refusal threshold.

Next step: what to prepare

To judge whether an answering system can hold up, gather four things: the official documents and common questions it rests on, and who keeps that material current; the questions people have actually asked, ideally in the original wording; which questions must always go to a person; and which functions call a model today, with the key each one uses. With those in hand, contact the development team and start from the current state.

(お問い合わせ)

Start a project.

三つのステップで、判断に足る進め方と予算帯が得られます。

  1. 01最初の打ち合わせを予約:時間を選びます。完全な仕様は不要です。
  2. 02オンライン相談(15〜30分):進め方の方向性、予算帯、スケジュール案を提示。
  3. 03素材を確認したうえで、約3〜5営業日で見積書兼納品仕様明細書を提出します。
メール
hello@polish-design.com.tw
郵送先住所
(104) 台湾 台北市 中山区 植福路191-1号 3F

最初の打ち合わせを予約

平日 16:00〜18:00オンライン30分

先に時間帯を選び、Google アカウントまたはメールアドレスで確認します。予約が確定するとカレンダーに追加できます。

時間を選ぶ

または、先に内容を送信

まだ時間を決めていない場合は、先にプロジェクトの内容をお送りください。担当者がメールで返信します。送信後に続けて予約することもできます。

補足情報(任意):サービス項目、現在のフェーズ、既存リンク、知ったきっかけ

入力内容は、今回のプロジェクト評価にのみ使用します。

ISO/IEC 27001:2022 認証書

(Certificate)

ISO/IEC 27001:2022

認証機関
ARES International Certification
認証範囲
インタラクティブ没入型3Dシステムの開発プロセス、ならびにネットワークおよびインフラの運用・管理。

認証機関サイトで確認