Галоўная / Артыкулы / Практычныя прытамулі: PageIndex: Рамка RAG, якая адмовілася ад вектарных баз дадзэння

Практычныя прытамулі: PageIndex: Рамка RAG, якая адмовілася ад вектарных баз дадзэння

Практычныя прыказкі: Index старонкі: Фрэймворк RAG, який заменіў базы дадзэння вектараў: контракты, перакананні і месцы для коду для команд, якія викорыстоўваюць гэты патэрн.

2894 слоў

Існавайце гэта як перапрацоўаны варыянт ідэй з артыкула “PageIndex: The RAG Framework That Threw Out Vector Databases and Still Hit 98.7% Accuracy” для аператараў: чыстыя этапы, арранжаваныя блакі коду і прыметкі па вяснаванню проблем, якія застаюцца пасля перадачы задання.

Як система адзысквання дадзеных на аснове логічных выводам VectifyAI таямніча руйнуюць найболей ужывучыя прыпускі ў практычным викорыстоўванні RAG

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

Проблема, яку мы продовжваем прыкрываць паперамі

Метод «The Problem We Keep» працюе найэфектывней, калі яго розглядаць як вимерную паверхню. Запісаўце адна «золатая» транскрыпцыя, адзін прыклад неудачы і запіс пра вярнэнне да поперадньага стану прычаму расшырэння масштаба. Храніце настройкі пазырочна ад коду прыемліка. Файлы сяродавішча, базы секрэтных даных і пазнакі функцый должны знаходзіцца ў адном месцы, куды аператары можаць адбавляць аудыт без неабяжнага чытання всіх дадзеных. Раздзеляйце політыку часткавання дадзеных ад політыки ўтрымання іх. Змена адной з яных не должна вымагаць перапісвання другой, калі зменяюцца паказнікі якосці.

Што на самай працэ ёсьць PageIndex

Этап «Што такое PageIndex на самай працоўны спосаб дзеяў, калі яго расследжваць як вимерную величыну. Запісаўце адны ідеальны прыклад, адну ситуацыю неудачы і прыметкі па адкату перш чым расширваць масштабы. Дакументаваць трэба як успішны, так і варыянт вяснявання проблемы. Перапрыбуткі, людзкія контралі і обработка некоректных паведамленняў ёсць часткай продукту, а не пасляднім дапрацоўкам. Разлучыце правілы частковай обработкі дадзеных і правілы ўтрымання іх. Змена адных не павінна вымагаць перапісвання іншых, калі змянююцыся паказатэлі якосці.

Шаг 1: Стварыце іерархічны дрэўяны індекс

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

{
  "node_id": "0006",
  "title": "Financial Stability",
  "start_index": 21,
  "end_index": 22,
  "summary": "Covers the Federal Reserve's financial stability oversight...",
  "sub_nodes": [
    {
      "node_id": "0007",
      "title": "Monitoring Financial Vulnerabilities",
      "start_index": 22,
      "end_index": 28,
      "summary": "Describes the Fed's vulnerability monitoring framework..."
    },
    {
      "node_id": "0008",
      "title": "Domestic and International Cooperation",
      "start_index": 28,
      "end_index": 31,
      "summary": "Federal Reserve collaboration with international bodies..."
    }
  ]
}

Шаг 2: Пошук у дрэве на адной засадзе логіки

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

Чаму гэта насправды работае: прыклад з Дадатку G

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

Рэалізацыя на Python: End-to-End Vectorless RAG

Для рэалізацыі на Python у модуле End-to-End Vectorless неабяжна пазначыць вхідныя даны, адпаведальнага за крок і критэрыі завершэння пры перадзеяванні коду. Аператары должны магчымаць перзапуск крока з вядомай точкі контролю, не прабуючы вычысляць захаваны стан. Лепш выбіраць маленькія, тэставаныя елементы заместо велікіх скрыптав. Калі крок не выйшоў, прычына неудачы павінна вказываць на адну конкрэтную адпаведальнасць, а не на заплутаны ланцюг задач. Раздзеляйце стварэнне кліента ад цыклу перадачы паведамленняў, ўжо тады калі будзе можна заменіць прадаўцоў без перапісвання машыны стану размовы.

Інсталяцыя

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

pip install pageindex openai

Настройка

У стадії налагоджэння неабяцо практычна апісацыя вхідных дадзенняў, адпаведальнага за крок і крэатарыяў выходу, прычаму праз перадзеяванне коду. Аператары должны магчымае запускаваць крок з вядомай точкі контролю, не прабуючы спадарацца пра схованы стан. Запісваюць час выконання і кост токенаў або запытаў праза функцыйнае рэзультат. Відразлівае паказанне костаў запобегае неспадзяваным рахункам, калі процес пераходзіць з дэмавай версіі ў спяльныя среды. Наводзяць фрагменты, якія насправды ляглі в основу адпаведнай адказаў. Без ціх цытатаў аператары не можуць разлічыць галюцинацыю ад прасоўкі ў індэксаванні.

import os
import json
import asyncio
from pageindex import PageIndexClient
from openai import AsyncOpenAI
# Grab an API key from https://dash.pageindex.ai/api-keys
PAGEINDEX_API_KEY = os.environ["PAGEINDEX_API_KEY"]
OPENAI_API_KEY = os.environ["OPENAI_API_KEY"]pi_client = PageIndexClient(api_key=PAGEINDEX_API_KEY)
openai_client = AsyncOpenAI(api_key=OPENAI_API_KEY)

Захаваць дакумент і стварыць дрэва

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

import pageindex.utils as utils
# Upload a PDF; PageIndex handles the tree generation
doc = pi_client.upload("annual_report_2024.pdf")
doc_id = doc["doc_id"]# Tree generation takes a bit, so we poll
while not pi_client.is_retrieval_ready(doc_id):
    print("Still indexing...")
    import time; time.sleep(5)# Grab the tree and take a look
tree = pi_client.get_tree(doc_id, node_summary=True)["result"]
print("Document Tree:")
utils.print_tree(tree)

Сэрца прыкладнення: пошук у дрэве на адной з ЛЛМ

Для стадіі The Core LLM-Driven Tree неабяжна ўзначыць вхідныя даны, адпаведальнага за крок і крэтыяры завершэння пры зміне коду. Аперацыйныя працавнікі должны магчымае перайсці на выкананне кроку з вядомага пункта контролю, не спрабоўваючы здогадвацца пра схованы стан. Неабяжна задокументаваць як шлях успеху, так і шлях вярнення да нормальнага стану. Перапрыбуткі, людзкія перакрыцця і обробка некоректных паведамленняў є частью продукту, а не чымсь, што дадаецца пазней. Калі наступны крок — гэта код або вызов інструмента, лепш выкарыстоўваць структураваныя выходныя даны з перакананнем схэмы, чым вольныя тэкстовыя апісанні.

async def find_relevant_nodes(tree: dict, query: str) -> list:
    """LLM reasons over tree structure to identify relevant nodes."""
    # Strip raw text to save tokens; the LLM only needs titles and summaries
    tree_without_text = utils.remove_fields(
        tree.copy(), fields=["text"]
    )    search_prompt = f"""
    You are a document retrieval expert. Given a question and
    a hierarchical tree structure of a document, identify all
    nodes likely to contain the answer.    Each node has a node_id, title, and summary.
    Follow cross-references if a section mentions another.    Question: {query}    Document tree structure:
    {json.dumps(tree_without_text, indent=2)}    Reply in this JSON format only:
    {{
        "thinking": "<reasoning about which nodes are relevant>",
        "node_list": ["node_id_1", "node_id_2"]
    }}
    """    response = await openai_client.chat.completions.create(
        model="gpt-4.1",
        messages=[{"role": "user", "content": search_prompt}],
        temperature=0,
        response_format={"type": "json_object"},
    )    result = json.loads(response.choices[0].message.content)
    print(f"LLM reasoning: {result['thinking']}")
    return result["node_list"]

Атрыманне контэнту і стварэнне адпаведзення

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

def collect_node_content(tree: dict, node_ids: list) -> str:
    """Pull raw text from the nodes the LLM selected."""
    all_nodes = utils.flatten_tree(tree)
    context_parts = []
    for node in all_nodes:
        if node["node_id"] in node_ids:
            title = node.get("title", "Untitled")
            pages = f"pages {node.get('start_index', '?')}-{node.get('end_index', '?')}"
            text = node.get("text", "")
            context_parts.append(
                f"[{title} | {pages}]\n{text}"
            )
    return "\n\n---\n\n".join(context_parts)
async def answer_query(tree: dict, query: str) -> dict:
    """Full vectorless RAG pipeline: tree search + answer generation."""    # Step 1: LLM picks the nodes
    node_ids = await find_relevant_nodes(tree, query)    # Step 2: Fetch content from those nodes
    context = collect_node_content(tree, node_ids)    # Step 3: Generate answer with citations
    answer_prompt = f"""
    Answer the question using only the provided context.
    Cite specific pages and sections in your answer.    Context:
    {context}    Question: {query}
    """    response = await openai_client.chat.completions.create(
        model="gpt-4.1",
        messages=[{"role": "user", "content": answer_prompt}],
        temperature=0,
    )    return {
        "answer": response.choices[0].message.content,
        "retrieved_nodes": node_ids,
        "context_length": len(context),
    }
# Run it
query = "What was the total value of deferred assets in 2023?"
result = asyncio.run(answer_query(tree, query))
print(result["answer"])
print(f"Nodes used: {result['retrieved_nodes']}")

Бонус: Інтэграцыя MCP

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

{
  "mcpServers": {
    "pageindex": {
      "type": "http",
      "url": "https://api.pageindex.ai/mcp",
      "headers": {
        "Authorization": "Bearer your_api_key"
      }
    }
  }
}
{
  "mcpServers": {
    "pageindex": {
      "command": "npx",
      "args": ["-y", "@pageindex/mcp"]
    }
  }
}

Цыфры кантрольных пунктаў (з контекстам)

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

Дзе PageIndex не падходзіць (і так і ёсць)

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

Тады калі ж насправдзе трэба яго вжываць?

Калі працуеце над стадзіяй «So When Should You», спачатку запісайце контракт: неабяжлівыя даны, сігнал успеху і тое, што выходзіць у разе частковага нявыпання. Такі список перакладзець пазнейшыя змены коду ў правільным напрамку. Спрэцьвуйце да гэтай стадзіі як да контракту межа данымі і перакананымі выходамі. Дайце назвы артыфактам, задаце критэрыя успеху і не падзволяйце частковаму завершэнню без паведамлення. Змяркуйце рэкалі на фіксаванай сэтке запытаў прычым регулюванні прапты. Часта змена прапты рэдка калі вярнуе слабую эфектыўнасць адзысквання інформаціі. Калі працуеце над стадзіяй «So When Should You», спачатку запісайце контракт: неабяжлівыя даны, сігнал успеху і тое, што выходзіць у разе частковага нявыпання. Такі список перакладзець пазнейшыя змены коду ў правільным напрамку. Зберагаце настройкі за межамі коду прыемленае. Файлы сяродавішча, хранільнікі секрэтных дадзеных і флагі функций должны знаходзіцца ў аднам месцы, якое аператары можаць пераглядаць без неабяжлівага чытання всей структуры.

Што выдарылася з моменту запуску (недзеўныя развіцці)

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

pip install openai-agents
python3 examples/agentic_vectorless_rag_demo.py

Большая картына

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

Пачатак работы

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

Чэк-ліст для эксплуатацыі

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

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

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

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

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

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

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

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

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

Дзеянне зміцнення 0/751: вымерыце час выканання, класію памылак і колькасць викорыстоўваных токенав для гэтага пункту, а потым выявіце, чы рашыцца застаўляць змену на адной фіксаванай сэтке пытанняў, а не на адзінаковых прыкладах.

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

Дзеянні паўжасткі 1/751: звярніце увагу на час выканання, клас памылак і колькасць викорыстоўваных токенав для гэтага запісу, а пасля, на аднойчынай базе фіксаванага набора пытанняў, а не на індывідуальных прыкладах, выявіце, чы хацяце застаўіць змены.