Галоўная / Артыкулы / Дзесять спосабоў падсцягнуць зменшэнне галюцинацый без дакладной налаадкі

Дзесять спосабоў падсцягнуць зменшэнне галюцинацый без дакладной налаадкі

Апроксімаванне, абяранні, выкарыстоўванне і цыклы ацэнкі, якія зменшаюць выдуманыя факты ў рэзультатах адпаведных адказаў.

2855 слоў

У гэтым керавану парадокс зусім занова ствараецца ад сыр'ёў да рабочай системы для: «10 спосабаў зменшыць галюцинаціі ШІ без налаштавання вашага модэля». Акцэнт ставіцца на практычныя крокі, чыстае перакананне і код, які можна проста дадаць у репазітарый, не прабуючы здогадвацца пра мету. Для агледка, перш чым зменіць код, неабходна визначыць вхідныя даны, адпаведальнага за крок і критэрыя завершэння. Аперацыёныя працавікі должны магчымае перадзваніць крок з вядомай точкі контролю, не прабуючы здагадвацца пра схованы стан. Запісвайце час выконання і вартасьць токенав або запытак пад функцыйнальнымі рэзултатамі. Відразы вартасцей з самага пачатку запобегае неспакоўным рахункам, калі процес пераходзіць з дэмавай версіі ў спакульнаныя сераўысы.

Базовая проблема

Калі працюеце над «Базовай проблемай», спачатку запісаце кантракт: неабяжлівыя даны, сігнал успеху і тое, што выходзіць пад частыя неудачы. Такі список контроля дапамагае заліцьварыць пазнейшыя змены ў кодзе. Храніце настройкі параду ўнутры коду прыемлівача. Файлы серавэра, хранальнікі секретных данных і флагі функцыйяў должны знаходзіцца ў аднам месцы, куды аператары можаць адбавіць аудыт без неабяжлівага чытання всей структуры. Кэшавайце стабільныя інструкцыі системы і схемы інструментаў. Перадача таго ж самога прамэра ёсць частым выклікам затрат энергіі.

const response = await client.responses.create({
  model: "gpt-5",
  input: `
    Where is order #48291?
  `
});

console.log(response.output_text);
Customer
   ↓
AI Agent
   ↓
Order System
   ↓
Actual Order State
   ↓
AI Agent
   ↓
Response

1. Даўце модэлю кращы контекст

Калі працуеце над пунктам 1. «Дайце модэлю лепшы контекст», спачатку запісайце кантракт: неабяжлівыя даны, сігнал успеху і тое, што выходзіць пад часты няудача. Такі список пераконтроўкі дапамагае заліцьварыць пазнейшыя змены ў кодзе. Документавайце як шлях успеху, так і шлях вяснавання. Перапрыбуткі, людзкія контралі і обработка некоректных паведамленняў є часткай продукту, а не пазнейшым дапрацоўкам. Зберагайце у кэшы стабільныя інструкцыі системы і схемы інструментаў. Перадача таго ж самога прамэра є частым выклікам зношвання ресурсаў.

{
  "orderId": "48291",
  "status": "SHIPPED",
  "carrier": "FedEx",
  "trackingNumber": "784512963",
  "estimatedDelivery": "2026-08-25"
}
const context = {
  order: {
    id: "48291",
    status: "SHIPPED",
    carrier: "FedEx",
    trackingNumber: "784512963",
    estimatedDelivery: "2026-08-25"
  }
};

const response = await client.responses.create({
  model: "gpt-5",
  input: `
    Answer the customer using only the supplied order information.
    Context:
    ${JSON.stringify(context, null, 2)}
    Customer:
    Where is my order #48291?
  `
});

Шаблон

Калі працуеце з «The pattern», спачатку запісайте умовы викорыстоўвання: неабходныя даны, сігнал успеху і тое, што выходзіць на частым невыпанні. Такі список дапамагае залічваць пазнейшыя змены ў кодзе чыста і прозрачна. Валіце маленькія, тэставаныя елементы замест велікіх скрыптов. Калі якісь крок не выйшае, невыпанненне павінна вказваць на адну конкрэтную адпаведальнасць, а не на заплутаны ланцюг задач. Зберагаеце у кэшы стабільныя інструкцыі системы і схемы інструментаў. Перадзесланне ідэнтычных даных — частая прычына зайвых витрацоў.

Bad:

Customer → LLM → Answer

Better:
Customer
   ↓
Retrieve state
   ↓
Build context
   ↓
LLM
   ↓
Answer

Калі працуеце з «The pattern», спачатку запісайте умовы викорыстоўвання: неабходныя даны, сігнал успеху і тое, што выходзіць на частым невыпанні. Такі список дапамагае залічваць пазнейшыя змены ў кодзе чыста і прозрачна. Запісвайце час выконання і вартасць токенаў або запитаў разам з функцыональнымі рэзултатамі. Відразувая візуабільнасць витрацоў запобегае неспакойным рахункам, калі праця пераходзіць з дэмаверсіі ў спакульнаныя сераўы.

2. Атрымайце даны раней, чым іх ствараць

  1. Метод «З’явіць данні раней, чым ствараць» працюе найэфектыўней, калі яго расследжваць як мерыябельную величыну. Запісаце адна ідеальная транскрыпцыя, адзін прыклад неудачы і прыметку па адвярненню змян перш чым расширваць масштабы. Храніце настройкі парадульна коду прыемлена. Файлы сяродавішча, хранільнікі секрэтных дадзеных і флагі функцыйяў должны знаходзіцца ў аднам месцы, куды аператары можаць адбавляць контроль без неабяжнага чытання всіх дадзеных. Установіце ліміты токенаў на кожны раунд і на кожную сесію. Інструменты-агенты агрэсывна расширваюць контекст; строгі ліміты запобегаюць таму, каб дэманстрацыі ператварыліся на неспакоўныя рахункі.
Customer Question
       ↓
    Retrieve
       ↓
     Rank
       ↓
Build Context
       ↓
      LLM
       ↓
    Answer
const results = await vectorStore.search({
  query: customerQuestion,
  topK: 10
});

const relevant = results
  .filter(item => item.score > 0.8)
  .slice(0, 5);
const context = relevant
  .map(item => item.content)
  .join("\n\n");
const answer = await generateAnswer(
  customerQuestion,
  context
);

3. Скорачыце шум у контэксте

  1. Метод «Змены шуму ў контэксте» працюе найэфектывней, калі яго розглядаюць як вимерную характэрыстыку. Зберагачыце адна ідеальная транскрыпцыя, адзін прыклад неудачы і запіс пра вярнэнне да пачатковага стану перш чым расширваць масштабы. Дакументавайце як успішны, так і варыянт вярнэння да нормальнага стану. Перапрыбуткі, людзкі контроль і обработка некоректных паведамленняў є частью самага продукту, а не пасляднім этапам дорабкі. Задаць ліміты на колькість токенав за раунд і за сесію. Інструменты з агентным режымам актыўна расширваюць контэкст; строгі ліміты запобегаюць таму, каб дэманстрацыі ператварыліся на неспакоўныя рахункі.
20 retrieved documents
+
15 previous messages
+
10 previous tool responses
+
customer profile
+
product catalog
+
order history
+
promotion metadata
Available Information
        ↓
Relevance Filtering
        ↓
Metadata Filtering
        ↓
Ranking
        ↓
Deduplication
        ↓
Context Compression
        ↓
LLM
const context = results
  .filter(x => x.score >= 0.82)
  .filter(x => x.metadata.category === "returns")
  .filter(x => x.metadata.region === customer.region)
  .sort((a, b) => b.score - a.score)
  .slice(0, 5)
  .map(x => x.content);

4. Іспользаванне графа знанняў для структураваных фактов

  1. Іспытанне методу існавання графа для структураваных фактов дае найкращыя результаты, калі яго спрыяваць як меркаваную плошчу. Зберагачыце адны ідеальны прыклад, адзін кейс неудачы і запіс пра вярнэнне да пачатковага стану перш чым расширваць масштабы. Валіце маленькія, тэставаныя елементы замест большых скрыптов. Калі якісь крок не выйшае, прычына неудачы павінна вказываць на адную адпаведальнасць, а не на заплутаны ланцюг задач. Задаеце ліміты на колькість токенав на кожны раунд і сесію. Інструменты з агентным падходам агрэсіўна расширваюць контекст; строгі ліміты запобегаюць таму, што дэманстрацыі ператвараюцца на неспакоўныя рахункі.
  2. Іспытанне методу існавання графа для структураваных фактов дае найкращыя результаты, калі яго спрыяваць як меркаваную плошчу. Зберагачыце адны ідеальны прыклад, адзін кейс неудачы і запіс пра вярнэнне да пачатковага стану перш чым расширваць масштабы. Запісвайце час выканання і вартасць токенав або запытак праза функцыйнальныя рэзултаты. Відразувая візуабільнасць вартасцей запобегае неспакоўным рахункам, калі процес пераходзіць з дэманстрацыі ў спяльныя сераўеры.
Customer
   │
   └── PLACED → Order
                  │
                  ├── CONTAINS → Product
                  │
                  ├── PAID_BY → Payment
                  │
                  ├── FULFILLED_BY → Warehouse
                  │
                  └── SHIPPED_BY → Carrier
Order #48291
      ↓
FULFILLED_BY
      ↓
Warehouse #17
MATCH (o:Order {id: "48291"})
      -[:FULFILLED_BY]->
      (w:Warehouse)
RETURN w.id, w.name, w.location;
{
  "orderId": "48291",
  "warehouse": {
    "id": "WH-17",
    "name": "Delhi Fulfillment Center",
    "location": "Delhi"
  }
}
Without structured knowledge:

User → LLM
         ↓
      Guess
With Knowledge Graph:

User
 ↓
Entity Identification
 ↓
Graph Traversal
 ↓
Verified Relationship
 ↓
Context
 ↓
LLM

5. Адміністратыўныя адказы з доказамі

Для пункту 5. Адміністратыўныя адказы з доказамі неабходна перад зменым коду задаць вхідныя даны, абавесця крока і крэтырыі завершэння. Аперацыяныя працавнікі должны магчымае перадзваніць крок з вядомай точкі контролю, не спрабоўваючы здагадвацца пра схованы стан. Конфігурацыю трэба залічыць параду ад коду прыкладнення. Файлы сераўіса, хранільнікі секрэтных дадзеных і флагі функций должны знаходзіцца ў аднам месцы, якое працавнікі можуць пераглядаць, не чытаючы весь граф. Калі наступны крок — це код або вызов інструмента, лепш выкарыстоўваць структураваныя выходныя даны з перакананнем схэмы, чым вольныя тэкстовыя адказы.

{
  "answer": "Your order is being fulfilled by Warehouse WH-17.",
  "confidence": 0.98,
  "evidence": [
    {
      "type": "order_record",
      "source": "orders_db",
      "orderId": "48291"
    },
    {
      "type": "warehouse_relationship",
      "source": "knowledge_graph",
      "warehouseId": "WH-17"
    }
  ]
}
For every factual claim:
1. Identify supporting evidence.
2. Use only available evidence.
3. Never invent a source.
4. If evidence is unavailable, say so.
5. Clearly distinguish facts from inference.
if (result.confidence < 0.7) {
  return escalateToHuman(result);
}
LLM → Answer
LLM
 ↓
Answer
 ↓
Evidence
 ↓
Confidence
 ↓
Decision

6. Даўце агенту інструменты, замест таго каб ён здагадваўся

Для пункта 6. Заместо таго, каб агент сам дагадваўся, нехай ён мае інструменты: перад змянай коду неабходна адзначыць вхідныя даны, адпаведальнага за крок і критэрыя завершэння. Аператары должны магчымае перайсці на гэты крок з вядомага пункта контролю, не дагадваючыся пра схованы стан. Неабходна адзначыць як шлях успеху, так і шлях вярнення да нормальнага стану. Перапрыбуткі, перакрыцчя з боку чалавека і обробка непрацэсоўнае пашты є частью продукту, а не чымсь, што дадзецца пазней.

const tools = [{
  name: "get_refund_status",
  description: "Retrieve the current refund status for an order",
  parameters: {
    type: "object",
    properties: {
      orderId: {
        type: "string"
      }
    },
    required: ["orderId"]
  }
}];
Customer
   ↓
LLM
   ↓
get_refund_status()
   ↓
Payment System
   ↓
Actual Refund State
   ↓
LLM
   ↓
Customer

7. Пераканаць як вхідныя, так і выходныя даны інструментаў

Для пункту 7: Пераканаліцавайце як вхідныя, так і выходныя даныя інструменту. Перш чым зменіць код, неабяжна визначыць вхідныя даныя, адміністратара крока і критэрыя завершэння. Аператары должны магчымаць перзапуск крока з вядомай точкі контролю, не спрабоўваючы здогадвацца пра схованы стан. Валідзіруйце маленькія, тэставаныя елементы замест большых скрыптов. Калі крок не выканаецца, прычына нехасабності должна вказываць на адну конкрэтную адпаведальнасць, а не на заплутаны ланцюг задач. Калі наступны крок — це код або вызов інструмента, валідзіруйце структураваныя выходныя даныя з парадксамі, а не вольнай формату прозы. Для пункту 7: Пераканаліцавайце як вхідныя, так і выходныя даныя інструменту. Перш чым зменіць код, неабяжна визначыць вхідныя даныя, адміністратара крока і критэрыя завершэння. Аператары должны магчымаць перзапуск крока з вядомай точкі контролю, не спрабоўваючы здагадвацца пра схованы стан. Запісвайце час выканання, а таксу токеноў або запытав, празаўсюды разам з функцыйнальнымі рэзультатамі. Відразувыя даныя пра вартасцы запобегаюць неспакоўным рахункам, калі процес пераходзіць з дэмовай среды ў спакульнаваныя сераўы.

{
  "orderId": "48291",
  "amount": "one hundred",
  "currency": "dollars"
}
{
  "orderId": "48291",
  "amount": 100,
  "currency": "USD"
}
import { z } from "zod";

const RefundRequest = z.object({
  orderId: z.string(),
  amount: z.number().positive(),
  currency: z.enum(["USD", "EUR", "GBP", "INR"])
});
const refundRequest = RefundRequest.parse(
  modelOutput
);
if (refundRequest.amount > order.total) {
  throw new Error(
    "Refund amount exceeds order total"
  );
}
LLM
 ↓
Schema Validation
 ↓
Business Validation
 ↓
Permission Check
 ↓
Execute
 ↓
Response Validation
 ↓
Accept / Retry / Escalate

8. Адзэйнае факты ад разумаванню

Калі працуеце над пунктам 8. Адзэйнае факты ад разумаванню, спачатку запісайце контракт: неабяжлівыя даны, сігнал успеху і тое, што выканаецца пад частым неяксамошчынем. Такі список пераканаецца ў тым, што пазнейшыя змены коду буду чыстымі. Зберагаеце настройкі за межамі коду прыемліка. Файлы сераўнавання, храненні секрэтных дадзенаў і флагі функцыйяў должны знаходзіцца ў аднам месцы, якое аператары можаць пераглядзець без неабяжлівага чытання всей структуры. Кэшавайце стабільныя інструкцыі системы і схемы інструментаў. Перасылка ідэнтычных прамуслов ёсць частым выклікам зношэння ресурсаў.

{
  "facts": [
    "Order 48291 is shipped",
    "Order 48291 is fulfilled by Warehouse WH-17",
    "Warehouse WH-17 is currently operating"
  ],
"reasoning": [
    "The order is likely to remain on schedule"
  ],
  "conclusion": "The order is currently expected to arrive on time."
}
Was the fact wrong?

OR
Was the reasoning wrong?
FACT
→ Order shipped

FACT
→ Estimated delivery: Aug 25
INFERENCE
→ Delivery is currently expected on schedule

9. Учыцца на прыкладах успешных і неуспешных выкананняў

Калі працюеце над раздзелам 9. «Выучыцца на прыкладах успешных і няуспешных адкрыцэнняў», спачатку запісайце контракт: неабходныя даны, сігнал успеху і тое, што выканаецца у разе частковага няуспеху. Такі список пераканальвае ў тым, што пазнейшыя змены коду будуць чыстымі. Дакументавайце як шлях успеху, так і шлях вярнення. Перапрыбуткі, людзкі контроль і обработка некоректных паведамленняў є частью продукту, а не элементамі пазнейшай дапрацоўкі. Зберагаюце у кэшы стабільныя інструкцыі системы і схемы інструментаў. Перасылка ідэнтычных прамуров ёсць частым выклікам для ресурса.

{
  "orderId": "48291",
  "status": "PROCESSING",
  "cancelable": true
}
cancel_order(48291)
{
  "success": true,
  "cancellationId": "CAN-83921"
}
{
  "task": "Cancel order",
  "orderState": "PROCESSING",
  "action": "cancel_order",
  "result": "SUCCESS",
  "cancellationId": "CAN-83921"
}
New Request
    ↓
Find Similar Successful Execution
    ↓
Retrieve Relevant Pattern
    ↓
Check Current Order State
    ↓
Generate Action
    ↓
Validate
    ↓
Execute
Attempt 1
    ↓
cancel_order()
    ↓
Rejected: Order already shipped
    ↓
Agent retrieves shipping information
    ↓
Explains cancellation is unavailable
Execute
   ↓
Observe
   ↓
Evaluate
   ↓
Store Experience
   ↓
Improve Future Context

10. Ацэніце кожную змену

Калі працуеце над пунктам 10. «Адзейнацыя кожных змян», спачатку запісайце угоду: неабяжлівыя даны, сигнал успеху і тое, што выходзіць пад частковыя неудачы. Такі чарткі спамагаюць заставіць пазнейшыя змены коду быць чыстымі. Валіце маленькія, тэставаныя елементы замест большых скрыптов. Калі якісь крок не выходзіць, неудача должна адначасова паказваць адну відпаведальнасць, а не заплутаны ланцюг задач. Зберагаеце у кэшы стабільныя інструкцыі системы і схемы інструментаў. Перадзесланне ідэнтычных даных — частая прычына зайвых витрацэнняў. Калі працуеце над пунктам 10. «Адзейнацыя кожных змян», спачатку запісайце угоду: неабяжлівыя даны, сигнал успеху і тое, што выходзіць пад частковыя неудачы. Такі чарткі спамагаюць заставіць пазнейшыя змены коду быць чыстымі. Запісвайце час выканання і вартасць токенаў або запытак пад функцыйнальнымі рэзултатамі. Відразувая візуабільнасць вартасцей запобегае неспакойным рахункам, калі праця пераходзіць з дэмаверсіі ў спакульнаныя сераўсы.

[
  {
    "question": "Where is order 48291?",
    "expected": "SHIPPED"
  },
  {
    "question": "Which warehouse fulfills order 48291?",
    "expected": "WH-17"
  },
  {
    "question": "Can order 48291 be cancelled?",
    "expected": false
  }
]
Answer Accuracy
Groundedness
Retrieval Precision
Tool Selection Accuracy
Tool Success Rate
Task Success Rate
Recovery Rate
Hallucination Rate
Latency
Cost
                      Before    After
Answer Accuracy        72%      95%
Groundedness           69%      97%
Tool Success           81%      98%
Hallucination Rate     17%       3%
Change
  ↓
Test
  ↓
Measure
  ↓
Compare
  ↓
Improve

Абсалютны ўзаемадзеянне элементаў

Метод «Абсалютны ўзаемадзеянне элементаў» работае наякша, калі яго спрыяваць як мерыемую структуру. Зберагучы адну ідеальную транскрыпцію, адзін прыклад неудачы і запіс пра вярнэнне да пачатковага стану, перш чым расширваць масштабы. Канфігурацыю трэба залічваць паза кодам прыемлі. Файлы сяродавішча, хранільнікі секрэтных дадзеных і флагі функцыйяў должны знаходзіцца ў аднам месцы, куды аператары можаць адбавляць контроль, не чытаючы весь граф. Задаць ліміты токенам на кожны раунд і на кожную сесію. Інструменты-агенты агрэсывна расширваюць контекст; строгі ліміты не дазволяюць дэмам ператварыцца на неспакоўныя рахункі.

                         ┌──────────────────┐
                         │ Knowledge Graph  │
                         └────────┬─────────┘
                                  │
                         ┌────────▼─────────┐
                         │   RAG / Search   │
                         └────────┬─────────┘
                                  │
       Customer → Intent → Context Engine → LLM
                     ↑             │
                     │             ▼
                   Memory      Tool Selection
                     ↑             │
                     │             ▼
                     │          Validation
                     │             │
                     │             ▼
                     │        Real Systems
                     │             │
                     │             ▼
                     └─────── Feedback
                                   │
                                   ▼
                               Evaluation

Большая наука

«Большая лекцыя» працюе наўздоўж калі яе спрыяваць як мерыемую паверхню. Зафіксавайце адна ідеальная транскрыпцыю, адзін прыклад неудачы і запіс пра вярнэнне да пачатковага стану перш чым расширваць масштабы. Запісвайце адночасна шлях успеху і шлях вяснавання. Перапрыбуткі, людзкія контралі і обработка некоректных паведамленняў ёсць часткай продукту, а не пасляднім дапрацоўкам. Задаце бюджет токенав на кожны раунд і на кожную сесію. Інструменты-агенты агрэсывна расширваюць контекст; строгі ліміты не дазволяюць дэмам ператварыцца на неспакоўлівыя рахункі.

LLM — толькі частка системы

«LLM Яўляецца Толькі Адной Часткаю Сістэмы» працуе наяўнейша, калі яго спрыяваць як мерыемую паверхню. Зберагуце адна ідеальная транскрыпцыя, адзін прыклад неудачы і запіс пра вярнэнне да пачатковага стану перад расшырэнням масштаба. Валіце маленькія, тэставаныя елементы замест большых скрыптов. Калі якісь крок не выходзіць, прычына неудачы павінна вказываць на адную адпаведальнасць, а не на заплутаны ланцюг задач. Задаеце ліміт токенав на кожны рунг і на кожную сесію. Інструменты-агенты агрэсывна расширваюць контекст; строгі ліміты запобегаюць таму, каб дэманстрацыі ператварыліся на неспакоючыя рахункі. «LLM Яўляецца Толькі Адной Часткаю Сістэмы» працуе наяўнейша, калі яго спрыяваць як мерыемую паверхню. Зберагуце адна ідеальная транскрыпцыя, адзін прыклад неудачы і запіс пра вярнэнне да пачатковага стану перад расшырэнням масштаба. Запісвайце часы выконання і кост токенав або запытаў разам з функцыйнальнымі рэзултатамі. Відразувыя даны пра косты запобегаюць неспакоючым рахункам, калі процес пераходзіць з дэманстрацыі ў спяльныя сераўеры.

              ┌───────────────────┐
              │ Knowledge + RAG   │
              └─────────┬─────────┘
                        ↓
Customer → Context → LLM → Tools → Real World
            ↑         ↓      ↓
          Memory   Reasoning Validation
            ↑         ↓
            └──── Feedback
                    ↓
                Evaluation

Заключныя меркі

Як заключна прытамлівка, перш чым зменяць код, неабходна ясная дэфініцыя вхідных дадзеных, адпаведальнага за практыку і крэтарыяў завершэння. Аперацыйныя працавікі должны магчымае перайсці на гэтую практыку з вядомага контрольнага пункту, не спрабоўваючы здогадвацца пра схованы стан. Конфігурацыю трэба знаходзіць за межамі коду прыкладнення. Файлы сераўіса, хранільнікі секрэтных дадзеных і флагі функцыйяў должны быць аднароджаны ў аднам месца, куда працавікі можуць адбыць перагляд, не чытаючы весь ланцуг практык. Калі наступным крокам являецца код або вызов інструмента, лепш выкарыстоўваць структураваныя выходныя данні з перакананням ў ўсасцоўнасці, чым вольныя тэкстовыя апісанні.

Чэк-ліст для аперацый

Чэк-ліст для аперацый работае наяўней, калі яго спрыймаюць як мерыябельную структуру. Перш чым расширваць сферу дзеяння, неабходна зафіксаваць адны ідеальны прыклад выконання, адзін прыклад неудачы і прыметкі па адвярненню змян.

Спрыймайце гэты этап як кантракт межа вхідных дадзеных і перакананых выходных рэзультатаў. Дайце назвы всім элементам, задаць крэтарыяў успеху і адмовіцца ад тыхняе частковага завершэння без паведамлення.

Бюджет на токены за адзін раунд і за адзін сэсію. Агентныя інструменты агрэсывна расширваюць контекст; жорсткія ліміты не дазволяюць дэмам ператварыцца на неспакоўныя рахункі.

Калі бюджет дазволяе, дадзіце тэст на пераверканне, який працуе з критычным шляхам у CI за дапамою фіксатараў, а не з рэальнымі платнымі API.

Запісвайце часы выконання і кост токенав або запытаў праза функцыйнае рэзультат. Відкрытыя данні пра косцы з’являюцца рана і запобегаюць неспакоўным рахункам, калі шлях пераходзіць з дэмы ў спадзеленыя сераверы.

Бюджет на токены за адзін раунд і за адзін сэсію. Агентныя інструменты агрэсывна расширваюць контекст; жорсткія ліміты не дазволяюць дэмам ператварыцца на неспакоўныя рахункі.

Перш чым пераводзіць стэк, заморозьце версіі, зафіксавайце «золаты» транскрыпт для критычнага шляху і паказвайце крокі для атрыбутаўвання назад. Спадзеленыя сераверы трэбуюць лімітавання частоты запытаў, пераказаў прыналежнасці і чысткага власніка для ротацыі секрэтных даных. Валіце надзейнасць, нават якщо ёй не хватае крэатыўнасці, а не крэатыўныя, але разовыя дэмы.

Запіскі для пакета d3bfab080c19: не трэба кантрацаваць ключы прадступніка ў репазітарые, задаць максімальную кантроль на токены на адну сесію, а таксама зберагчы транскрыпціі праза фіксатуры для адгукнення, каб пазнейшыя замены модэляў заставаліся пораўнанымі.