Практичні нотатки: створення сучасної системи ISR для роботи з кодом у великих проектах.
Покрокова інструкція з практичних нотаток: створення сучасної системи ISR для роботи з кодом у великих проектах – контракти, перевірки та місця для вставки коду для команд, які використовують цю схему.
Наступні примітки описують практичний підхід до реалізації концепції „Створення сучасної системи обробки даних для роботи з кодом у великих системах агентів“. Основна увага приділяється контрактам, перевіркам та шаблонам коду, які можна легко вставити, а не мотиваційним аспектам. Під час роботи на етапі огляду спочатку запишіть контракт: необхідні вхідні дані, сигнал про успіх та те, що відбувається у разі часткової невдачі. Такий перелік допоможе зберегти чесність пізніших змін у коді. Документуйте як успішний, так і відновлювальний сценарії роботи. Повторні спроби, людський контроль та обробка некоректних повідомлень є частиною продукту, а не етапом подальшої оптимізації.
Проблема, яку ніхто насправді не вирішив
Проблема, яку ніхто насправді не розуміє, краще всього аналізувати як вимірювану поверхню. Зафіксуйте один ідеальний приклад роботи, один випадок невдачі та примітки щодо скасування змін перед розширенням обсягу роботи. Віддавайте перевагу невеликим, тестованим одиницям перед складними скриптами. Коли якийсь крок зазнає невдачі, причина має вказувати на конкретну відповідальність, а не на заплутану послідовність дій. Використовуйте інструменти з вузькими схемами та чіткими позначеннями побічних ефектів. Адміністраторам потрібно знати, які виклики змінюють стан системи, перш ніж вони автоматично схвалять їх.
Етап 1: Прийом даних — створення трьох основ
Етап створення бази даних на першій фазі найкраще роботи, якщо його розглядати як вимірювану поверхню. Зафіксуйте один ідеальний пример обробки даних, один випадок збою та примітку щодо скасування змін перед розширенням обсягу роботи. Розглядайте цей етап як угоду між вхідними даними та перевіреними результатами. Позначте всі елементи, визначте критерії успіху та не допускайте мовчазного часткового виконання завдань. Використовуйте інструменти з вузькими схемами та чіткими позначеннями побічних ефектів. Адміністраторам потрібно знати, які запити змінюють стан системи, перш ніж вони автоматично схвалять їх.
Крок 1: Клонування та підготовка репозиторію
Клонування на етапі 1 та відповідні процеси працюють найкраще, якщо їх розглядати як вимірювану поверхню. Збережіть один ідеальний зразок даних, один випадок збою та примітку щодо скасування змін перед розширенням обсягу роботи. Записуйте час виконання та витрати на токени чи запити поруч із функціональними результатами. Візуалізація витрат заздалегідь запобігає несподіваним рахункам під час переходу від демо-середовища до спільних.
git.Repo.clone_from(
f"https://{token}@github.com/{owner}/{repo}",
target_dir=f"~/.isr/repos/{owner}/{repo}",
depth=None # Full history — crucial for incremental updates
)
Клонування на етапі 1 та відповідні процеси працюють найкраще, якщо їх розглядати як вимірювану поверхню. Збережіть один ідеальний зразок даних, один випадок збою та примітку щодо скасування змін перед розширенням обсягу роботи. Одночасно задокументуйте оптимальний та відновлювальний сценарії роботи. Повторні спроби, людський контроль та обробка некоректних повідомлень є частиною продукту, а не етапом подальшої оптимізації.
Етап 2: Перелік файлів та виявлення мови
На етапі переліку файлів у Кроці 2 необхідно визначити вхідні дані, власника кроку та критерії завершення перед зміною коду. Оператори повинні мати можливість знову запустити крок з відомої точки контролю, не намагаючись вгадати прихований стан. Краще використовувати невеликі, перевірювані одиниці коду замість об’ємних скриптів. Коли крок зазнає невдачі, причина має вказувати на конкретну відповідальність, а не на заплутану структуру обробки даних. Аутентифікуйтеся біля шлюзу та знову надайте дозволи на рівні обробки даних. Один лише токен-носій не є межею окремого тенантства.
Крок 3: Розділення AST на частини — найскладніша проблема
На етапі розділення AST на частини (крок 3) необхідно визначити вхідні дані, відповідальну особу за виконання кроку та критерії завершення перед зміною коду. Оператори повинні мати можливість перезапустити крок з відомої точки контролю, не намагаючись визначити прихований стан. Розглядайте цей етап як контракт між вхідними даними та перевіреними результатами. Позначте всі елементи, визначте критерії успіху та не допускайте мовчазного часткового завершення роботи. Аутентифікуйтеся біля шлюзу та повторно авторизуйтесь на рівні обробки даних. Один лише токен-носій не є межею окремого тенантства.
assert "".join(chunk.raw_text for chunk in chunks) == file.content
Крок 4: Вилучення символів — створення діаграми викликів
На етапі 4 «Вилучення символів» необхідно визначити вхідні дані, власника кроку та критерії завершення перед зміною коду. Оператори повинні мати можливість знову запустити крок з відомої точки контролю, не намагаючись вгадати прихований стан. Записуйте час виконання та витрати на токени чи запити поруч із функціональними результатами. Візуалізація витрат заздалегідь запобігає несподіваним рахункам під час переходу з демо-середовища у спільні. Аутентифікуйтеся біля шлюзу та повторно авторизуйтесь на рівні обробки даних. Один лише токен-носій не є межею окремого тенанту. На етапі 4 «Вилучення символів» необхідно визначити вхідні дані, власника кроку та критерії завершення перед зміною коду. Оператори повинні мати можливість знову запустити крок з відомої точки контролю, не намагаючись вгадати прихований стан. Документуйте як успішний, так і відновлювальний сценарії роботи. Повторні спроби, людський контроль та обробка некоректних повідомлень є частиною продукту, а не етапом подальшої оптимізації.
class_pattern = r'class\s+(\w+)'
func_pattern_python = r'def (\w+)\('
func_pattern_go = r'func.*\('
Крок 5: Створення заголовка — додавання контексту метаданих
Під час виконання етапу створення заголовка на кроці 5 спочатку запишіть умови використання: необхідні вхідні дані, сигнал про успіх та наслідки часткової невдачі. Такий перелік допоможе зберегти чесність подальших змін у коді. Віддавайте перевагу невеликим, тестованим одиницям коду перед об’ємними скриптами. Якщо якийсь крок зазнає невдачі, причина має вказувати на конкретну відповідальність, а не на складну ієрархію операцій. Фіксуйте назву інструменту, хеш аргументів, час виконання та результат кожного виклику. Без цих записів налагодження коду займає години.
# File: decode.go
# Class/Module: decoder
# Function: unmarshal(n *Node, out reflect.Value) (good bool)
# Description: Handles type dispatch for YAML → Go struct conversion
Крок 6: Генерація контексту (необов’язково) — покращення за допомогою LLM
Під час виконання етапу 6 «Створення контексту» спочатку запишіть угоду: необхідні вхідні дані, сигнал про успіх та те, що відбувається у разі часткової невдачі. Цей перелік допомагає зберігати чесність пізніших змін у коді. Розглядайте цей етап як угоду між вхідними даними та перевіреними результатами. Дайте назви створюваним елементам, визначте критерії успіху та не допускайте беззвучного часткового завершення роботи. Зберігайте у кеші стабільні інструкції системи та схеми інструментів. Повторна передача ідентичних даних є поширеною причиною витрат ресурсів.
INPUT: [large function body]
OUTPUT: "Handles type dispatch for YAML to Go struct conversion.
Routes based on the target type reflection and handles nil values."
embedding_input = contextual_text + raw_text
Етап 7: Вбудовування коду — перетворення коду на вектори
Під час виконання етапу вбудовування коду з кроку 7 спочатку запишіть умови взаємодії: необхідні вхідні дані, сигнал про успіх та те, що відбувається у разі часткової невдачі. Цей перелік допомагає зберігати чесність у подальших змінах коду. Запишіть час виконання та витрати на токени або запити поруч із функціональними результатами. Відображення витрат заздалегідь запобігає несподіваним рахункам, коли процес переходить від демо-версії до спільних середовищ. Вимірюйте рівень точності відповідей на фіксований набір запитань перед налаштуванням формулювань запитів. Часта зміна формулювань рідко допомагає покращити якість пошуку. Під час виконання етапу вбудовування коду з кроку 7 спочатку запишіть умови взаємодії: необхідні вхідні дані, сигнал про успіх та те, що відбувається у разі часткової невдачі. Цей перелік допомагає зберігати чесність у подальших змінах коду. Одночасно задокументуйте оптимальний та резервний сценарії роботи. Повторні спроби, людський контроль та обробка некоректних повідомлень є частиною продукту, а не етапом подальшої оптимізації.
Крок 8: Система з трьома сховищами — серце гібридного підходу
Етап Крок 8 «Три сховища» працює найкраще, якщо його розглядати як вимірювану поверхню. Збережіть один ідеальний запис, один випадок збою та примітку про скасування перед розширенням обсягу роботи. Віддавайте перевагу невеликим, тестованим одиницям перед складними скриптами. Коли якийсь крок зазнає невдачі, причина має вказувати на конкретну відповідальність, а не на заплутану послідовність дій. Використовуйте інструменти з вузькими схемами та чіткими позначеннями побічних ефектів. Хостам потрібно знати, які виклики змінюють стан, перш ніж вони автоматично схвалять їх.
Сховище 1: Qdrant — векторні дані + повнотекстовий пошук
Етап Store 1 Qdrant Vector працює найкраще, коли його розглядають як вимірювану поверхню. Збережіть один ідеальний приклад роботи, один випадок збою та примітку про скасування змін перед розширенням обсягу завдань. Розглядайте цей етап як контракт між вхідними даними та перевіреними результатами. Позначте всі елементи, визначте критерії успіху та не допускайте мовчазного часткового виконання завдань. Використовуйте інструменти з вузькими схемами та чіткими позначеннями побічних ефектів. Адміністраторам потрібно знати, які виклики змінюють стан системи, перш ніж автоматично схвалювати їх.
{
"chunk_id": "a1b2c3d4e5f6:1",
"repo_name": "go-yaml/yaml",
"rel_path": "decode.go",
"language": "go",
"raw_text": "func (d *decoder) unmarshal(...) { ... }",
"contextual_text": "Handles type dispatch for YAML...",
"header": "# File: decode.go\n# Function: unmarshal...",
"start_line": 340,
"end_line": 390
}
point_id = uuid.uuid5(NAMESPACE_DNS, chunk_id).int % (2**63)
Store 2: BM25 — чисте ранжування за ключовими словами
Етап Store 2 BM25 Pure працює найкраще, коли його розглядають як вимірювану поверхню. Збережіть один ідеальний запис, один випадок збою та примітку про скасування змін перед розширенням обсягу роботи. Записуйте час виконання та витрати на токени чи запити поруч із функціональними результатами. Візуалізація витрат заздалегідь запобігає несподіваним рахункам, коли процес переходить від демо-середовища до спільних. Використовуйте інструменти з вузькими схемами та чіткими позначеннями побічних ефектів. Хостам потрібно знати, які виклики змінюють стан, перш ніж вони автоматично схвалюють їх. Етап Store 2 BM25 Pure працює найкраще, коли його розглядають як вимірювану поверхню. Збережіть один ідеальний запис, один випадок збою та примітку про скасування змін перед розширенням обсягу роботи. Документуйте як успішний, так і відновлювальний шляхи виконання. Повторні спроби, людський контроль та обробка некоректних повідомлень є частиною продукту, а не етапом подальшої оптимізації.
# Build the BM25 index with full text
corpus = [chunk.get_text_for_embedding() for chunk in all_chunks]
bm25.fit(corpus)
# Store only the chunk IDs in the doc store
doc_store = [chunk.chunk_id for chunk in all_chunks]# Save both
pickle.dump(bm25, "index.pkl")
pickle.dump(doc_store, "doc_store.pkl")
Store 3: KùzuDB — The Property Graph
Для етапу Store 3 K zuDB необхідно визначити вхідні дані, власника кроку та критерії завершення перед зміною коду. Оператори повинні мати можливість перезапустити крок з відомої точки контролю, не намагаючись визначити прихований стан. Краще використовувати невеликі, перевірювані одиниці коду замість об’ємних скриптів. Коли крок зазнає невдачі, причина має вказувати на конкретну відповідальність, а не на заплутану структуру обробки даних. Аутентифікуйтеся біля шлюзу та знову авторизуйтесь на рівні обробки даних. Один лише токен-носій не є межею окремого тенанта.
CREATE NODE TABLE Symbol (
fqn STRING PRIMARY KEY,
file STRING,
language STRING,
kind STRING
)
CREATE REL TABLE Calls (FROM Symbol TO Symbol, confidence FLOAT)
CREATE REL TABLE Imports (FROM Symbol TO Symbol, confidence FLOAT)
CREATE REL TABLE Inherits (FROM Symbol TO Symbol, confidence FLOAT)
MATCH (seed:Symbol WHERE seed.fqn IN [list_of_fqns])
-[*1..hops]->(reachable:Symbol)
RETURN DISTINCT reachable.fqn
Store 4: Hash Tracker — можливість інкрементального вводу даних
Для етапу Store 4 Hash Tracker необхідно визначити вхідні дані, власника кроку та критерії завершення перед зміною коду. Оператори повинні мати можливість перезапустити крок з відомої точки контролю, не намагаючись вгадати прихований стан. Розглядайте цей етап як контракт між вхідними даними та перевіреними результатами. Призначте назви елементів, визначте критерії успіху та не допускайте мовчазного часткового завершення. Аутентифікуйтеся біля шлюзу та повторно авторизуйтесь на рівні обробки даних. Одного лише токена не достатньо для визначення межи території користувача.
CREATE TABLE chunks (
chunk_id TEXT PRIMARY KEY,
repo_name TEXT,
rel_path TEXT,
content_sha256 TEXT,
ingested_at TIMESTAMP
);
CREATE TABLE repos (
repo_name TEXT PRIMARY KEY,
last_sha TEXT,
last_ingested TIMESTAMP
);
Крок 9: Оркестрація — об’єднання всього
На етапі оркестрації кроку 9 необхідно визначити вхідні дані, власника кроку та критерії завершення перед зміною коду. Оператори повинні мати можливість перезапустити крок з відомої точки контролю, не намагаючись вгадати прихований стан. Записуйте час виконання та витрати на токени чи запити поруч із функціональними результатами. Візуалізація витрат заздалегідь запобігає несподіваним рахункам під час переходу з демо-середовища у спільні середовища. Аутентифікуйтеся біля шлюзу та повторно авторизуйтесь на рівні обробки даних. Один лише токен-носій не є межею окремого тенантства. На етапі оркестрації кроку 9 необхідно визначити вхідні дані, власника кроку та критерії завершення перед зміною коду. Оператори повинні мати можливість перезапустити крок з відомої точки контролю, не намагаючись вгадати прихований стан. Документуйте як успішний, так і відновлювальний сценарії роботи разом. Повторні спроби, людський контроль та обробка некоректних повідомлень є частиною продукту, а не етапом подальшої оптимізації.
Етап 2: Пошук — три сигнали, один рангований список
Під час виконання третього етапу пошуку другої фази спочатку запишіть умови контракту: необхідні вхідні дані, сигнал успіху та те, що відбувається у разі часткової невдачі. Такий перелік допомагає зберігати чесність пізніших змін у коді. Віддавайте перевагу невеликим, тестованим одиницям коду перед об’ємними скриптами. Якщо якийсь крок зазнає невдачі, причина має вказувати на конкретну відповідальність, а не на заплутану послідовність операцій. Фіксуйте назву інструменту, хеш аргументів, час відгуку та результат кожного виклику. Без цих даних налагодження агента займає години.
Маршрутизатор запитів — класифікація без витрат
Під час роботи над етапом The Query Router Zero-Cost спочатку запишіть умову використання: необхідні вхідні дані, сигнал про успіх та те, що відбувається у разі часткової невдачі. Такий перелік допомагає зберігати чесність пізніших змін у коді. Розглядайте цей етап як угоду між вхідними даними та перевіреними результатами. Дайте назви елементам, визначте критерії успіху та не допускайте беззвучного часткового виконання. Фіксуйте назву інструменту, хеш аргументів, час виконання та результат кожного виклику. Без цих записів дебагування займає години.
"how does ...", "explain how ...", "walk me through ...",
"trace ...", "step by step", "what happens when ..."
"what calls ...", "who calls ...", "callers of ...",
"what imports ...", "subclasses of ...", "where is X used ..."
camelCase like "parseTimestamp" or "NewDecoder"
snake_case like "parse_yaml"
quoted strings like "permission denied"
function calls like "handleErr()"
The EXACT_FIRST Short-Circuit — Grep
Під час роботи над етапом The EXACTFIRST Short-Circuit Grep спочатку запишіть умови використання: необхідні вхідні дані, сигнал про успіх та те, що відбувається у разі часткової невдачі. Цей перелік допомагає зберігати чесність пізніших змін у коді. Запишіть час виконання та витрати на обробку даних поруч із функціональними результатами. Відображення витрат заздалегідь запобігає несподіваним рахункам, коли процес переходить від демо-середовища до спільних. Записуйте назву інструменту, хеш аргументів, час відгуку та результат кожного виклику. Без цих записів дебагування може займати години. Під час роботи над етапом The EXACTFIRST Short-Circuit Grep спочатку запишіть умови використання: необхідні вхідні дані, сигнал про успіх та те, що відбувається у разі часткової невдачі. Цей перелік допомагає зберігати чесність пізніших змін у коді. Одночасно задокументуйте оптимальний та альтернативний шляхи виконання. Повторні спроби, людський контроль та обробка некоректних повідомлень є частиною продукту, а не етапом подальшої оптимізації.
rg --json --max-filesize 1M --context 5 --smart-case -- <query> <search_root>
Семантичний пошук — векторна схожість
Етап векторної схожості у семантичному пошуку працює найкраще, коли його розглядають як вимірювану характеристику. Перед розширенням обсягу необхідно зафіксувати один ідеальний приклад виконання, один випадок збою та примітки щодо скасування дій. Краще використовувати невеликі, тестовані одиниці замість складних скриптів. Коли якась дія зазнає невдачі, причина має вказувати на конкретну відповідальність, а не на заплутану послідовність операцій. Необхідно надавати інструменти з вузькими схемами та чіткими позначеннями побічних ефектів. Адміністраторам потрібно знати, які виклики змінюють стан системи, перш ніж автоматично схвалювати їх.
Пошук за ключовими словами — лексичне зіставлення BM25
Етап лексичного аналізу BM25 для пошуку за ключовими словами працює найкраще, якщо його розглядати як вимірювану поверхню. Збережіть один ідеальний зразок результату, один випадок невдачі та примітку про скасування дій перед розширенням обсягу роботи. Розглядайте цей етап як угоду між вхідними даними та перевіреними результатами. Позначте всі елементи, визначте критерії успіху та не допускайте мовчазного часткового виконання завдань. Використовуйте інструменти з вузькими схемами та чіткими позначеннями побічних ефектів. Адміністраторам потрібно знати, які виклики змінюють стан системи, перш ніж автоматично схвалювати їх.
Розширення графа — структурні зв’язки
Етап «Структурні взаємозв’язки розширення Graph» функціонує найкраще, якщо його розглядати як вимірювану поверхню. Збережіть один ідеальний запис, один випадок збою та примітку про скасування змін перед розширенням обсягу роботи. Записуйте час виконання та витрати на токени або запити поруч із функціональними результатами. Візуалізація витрат заздалегідь запобігає несподіваним рахункам під час переходу з демо-середовища у спільні. Використовуйте інструменти з вузькими схемами та чіткими позначеннями побічних ефектів. Хостам потрібно знати, які виклики змінюють стан, перш ніж вони автоматично схвалюють їх. Етап «Структурні взаємозв’язки розширення Graph» функціонує найкраще, якщо його розглядати як вимірювану поверхню. Збережіть один ідеальний запис, один випадок збою та примітку про скасування змін перед розширенням обсягу роботи. Одночасно задокументуйте оптимальний та відновлювальний шляхи роботи. Повторні спроби, людський контроль та обробка некоректних повідомлень є частиною продукту, а не етапом подальшої оптимізації.
MATCH (seed:Symbol WHERE seed.fqn IN [{seed_fqns}])
-[*1..1]->(reachable:Symbol)
RETURN DISTINCT reachable.fqn
def _fqn_lookup_term(fqn: str) -> str:
parts = fqn.split(".")
# Use last two segments for specificity
term = ".".join(parts[-2:]) # "PieceTree.applyDelta", not just "applyDelta"
return term
RRF Fusion — Об’єднання сигналів
На етапі об’єднання сигналів у RRF Fusion необхідно визначити вхідні дані, відповідального за крок та критерії завершення перед зміною коду. Оператори повинні мати можливість перезапустити крок з відомої точки контролю, не намагаючись визначити прихований стан. Краще використовувати невеликі, тестовані одиниці коду замість об’ємних скриптів. Коли крок зазнає невдачі, причина має вказувати на конкретну відповідальність, а не на складну структуру обробки даних. Аутентифікуйтеся біля шлюзу та повторно авторизуйтесь на рівні обробки даних. Один лише токен-носій не є межею окремого тенантства.
score(doc) = Σᵢ 1 / (k + rankᵢ(doc))
1/(60+1) + 1/(60+3) = 0.01639 + 0.01587 = 0.03226
1/(60+1) = 0.01639
Переранжування — Оцінка за допомогою глибокого крос-енкодера
Для етапу оцінки Reranking Deep Cross-Encoder необхідно визначити вхідні дані, відповідального за виконання кроку та критерії завершення перед зміною коду. Оператори повинні мати можливість перезапустити цей крок з відомої точки контролю, не намагаючись відгадати прихований стан. Розглядайте цей етап як контракт між вхідними даними та перевіреними результатами. Позначте всі елементи, визначте критерії успіху та не допускайте беззвучного часткового завершення роботи. Аутентифікуйтеся біля шлюзу та повторно авторизуйтесь на рівні обробки даних. Одного лише токена-носія недостатньо для визначення меж користувацького облікового запису.
client.rerank(query, documents, model="rerank-english-v3.0", top_n=20)
Цикл агента — ORA (Спостерігати → Міркувати → Діяти)
Для етапу The Agentic Loop ORA необхідно визначити вхідні дані, власника кроку та критерії завершення перед зміною коду. Оператори повинні мати можливість перезапустити крок з відомої точки контролю, не намагаючись вгадати прихований стан. Записуйте час виконання та витрати на токени чи запити поруч із функціональними результатами. Візуалізація витрат заздалегідь запобігає несподіваним рахункам під час переходу з демо-середовища у спільні середовища. Аутентифікуйтеся біля шлюзу та повторно авторизуйтесь на рівні обробки даних. Один лише токен-носій не є межею окремого тенанту. Для етапу The Agentic Loop ORA необхідно визначити вхідні дані, власника кроку та критерії завершення перед зміною коду. Оператори повинні мати можливість перезапустити крок з відомої точки контролю, не намагаючись вгадати прихований стан. Документуйте як успішний, так і відновлювальний сценарії роботи. Повторні спроби, людський контроль та обробка некоректних повідомлень є частиною продукту, а не етапом подальшої оптимізації.
INPUT: "How does YAML error handling work?"
OUTPUT: "yaml error handling failf TypeError panic propagate"
SearchPipeline — Оркестратор
Під час роботи з етапом SearchPipeline The Orchestrator спочатку запишіть умови використання: необхідні вхідні дані, сигнал про успіх та те, що відбувається у разі часткової невдачі. Такий перелік допомагає зберігати чесність пізніших змін у коді. Віддавайте перевагу невеликим, тестованим одиницям коду перед об’ємними скриптами. Якщо якийсь крок зазнає невдачі, причина має вказувати на конкретну відповідальність, а не на заплутану структуру процесу. Фіксуйте назву інструменту, хеш аргументів, час виконання та результат кожного виклику. Без цих даних налагодження коду займає години.
Етап 3: Отримання даних — Збір контексту та синтез відповіді
Під час роботи над етапом Phase 3 Retrieval Context спочатку запишіть угоду: необхідні вхідні дані, сигнал про успіх та те, що відбувається у разі часткової невдачі. Цей перелік допомагає зберігати чесність пізніших змін у коді. Розглядайте цей етап як угоду між вхідними даними та перевіреними результатами. Дайте назви елементам, визначте критерії успіху та не допускайте беззвучного часткового виконання завдань. Вимірюйте рівень відтворення інформації за фіксованим набором запитань перед налаштуванням підказок. Часта зміна підказок рідко виправляє слабкі алгоритми пошуку.
ContextAssembler — створення вікна контексту
Під час роботи над етапом створення контексту у ContextAssembler спочатку запишіть умови використання: необхідні вхідні дані, сигнал про успіх та те, що відбувається у разі часткової невдачі. Цей перелік допомагає зберігати чесність пізніших змін у коді. Запишіть час виконання та витрати на обробку токенів чи запитів поруч із функціональними результатами. Відображення витрат заздалегідь запобігає несподіваним рахункам, коли процес переходить від демо-середовища до спільних. Фіксуйте назву інструменту, хеш аргументів, час відгуку та результат кожного виклику. Без цих записів дебагування може займати години. Під час роботи над етапом створення контексту у ContextAssembler спочатку запишіть умови використання: необхідні вхідні дані, сигнал про успіх та те, що відбувається у разі часткової невдачі. Цей перелік допомагає зберігати чесність пізніших змін у коді. Одночасно задокументуйте оптимальний та резервний сценарії роботи. Повторні спроби, людський контроль та обробка некоректних повідомлень є частиною продукту, а не етапом подальшої оптимізації.
<context id="1" file="decode.go" lines="340-390"
repo="go-yaml/yaml" source="qdrant" expansion="function">
func newDecoder() *decoder {
...
}
</context>
AnswerSynthesizer — Генерація LLM із посиланнями
Інструмент AnswerSynthesizer для генерації LLM у кілька етапів працює найкраще, якщо його розглядати як вимірювану систему. Збережіть один ідеальний результат, один випадок збою та примітки щодо скасування дій перед розширенням обсягу роботи. Віддавайте перевагу невеликим, тестованим одиницям перед складними скриптами. Коли якийсь крок зазнає невдачі, причина має вказувати на конкретну відповідальність, а не на заплутану послідовність дій. Встановіть ліміт токенів на кожен крок та сеанс. Інструменти типу агентів активно розширюють контекст; жорсткі обмеження запобігають тому, що демонстрації перетворюються на несподівані рахунки.
You are a code intelligence assistant. Answer questions about source code precisely.
Rules:
- Answer ONLY from the provided code context — never hallucinate code or APIs
- Cite every file you reference using [path/to/file.go:start-end] format
- Show working code examples from the context, not just descriptions
- If context is insufficient, say exactly: "Insufficient context: [what is missing]"
\[([^:\]\s][^:\]]*):(\d+)(?:-(\d+))?\]
RetrievalPipeline — Остаточний оркеструвальник
Етап Final Orchestrator у RetrievalPipeline працює найкраще, якщо його розглядати як вимірювану поверхню. Зафіксуйте один ідеальний запис, один випадок збою та примітку про скасування змін перед розширенням обсягу роботи. Розглядайте цей етап як контракт між вхідними даними та перевіреними результатами. Позначте всі елементи, визначте критерії успіху та не допускайте мовчазного часткового виконання завдань. Розділіть політику часткового оброблення даних від політики їх отримання. Зміна однієї з них не повинна змушувати переписувати іншу при зміні показників якості.
retrieval = RetrievalPipeline(
search_pipeline=SearchPipeline(...),
context_assembler=ContextAssembler(search_pipeline.qdrant),
answer_synthesizer=AnswerSynthesizer(...),
)
API та CLI
Етап API та CLI працює найкраще, коли його розглядають як вимірювану поверхню. Зафіксуйте один ідеальний запис дії, один випадок збою та примітку щодо скасування перед розширенням обсягу роботи. Записуйте час виконання та витрати на токени чи запити поруч із функціональними результатами. Візуалізація витрат заздалегідь запобігає несподіваним рахункам під час переходу від демо-середовищ до спільних.
HTTP API
Етап HTTP API працює найкраще, коли його розглядають як вимірювану поверхню. Збережіть один ідеальний запис дії, один випадок збою та примітку про скасування перед розширенням обсягу. Тримайте конфігурацію поза кодом додатку. Файли середовища, сховища секретів та прапорці функцій мають знаходитися в одному місці, де оператори можуть їх перевіряти, не читаючи весь граф. Запропонуйте інструменти з вузькими схемами та чіткими позначеннями побічних ефектів. Хостам потрібно знати, які виклики змінюють стан, перш ніж вони автоматично схвалюють їх.
{
"query": "parseTimestamp",
"repo_name": "go-yaml/yaml",
"top_k": 10,
"use_graph": false,
"use_rerank": true
}
{
"question": "how does yaml error handling work?",
"repo_name": "go-yaml/yaml",
"mode": "answer",
"max_context_chunks": 10
}
CLI
Етап CLI працює найкраще, коли його розглядають як вимірювану поверхню. Зафіксуйте один ідеальний варіант виконання, один випадок збою та примітку щодо скасування змін перед розширенням обсягу роботи. Документуйте як успішний, так і відновлювальний сценарії. Повторні спроби, людський контроль та обробка некоректних повідомлень є частиною продукту, а не етапом подальшої оптимізації. Зробіть інструменти доступними з вузькими схемами та чіткими позначеннями побічних ефектів. Хостам потрібно знати, які виклики змінюють стан, перш ніж вони автоматично схвалюють їх.
# Ingest a repository
isr ingest go-yaml/yaml --with-context
# Search
isr search "what calls Unmarshal" --repo go-yaml/yaml# Retrieve with answer
isr retrieve "how does YAML error handling work?" \
--repo go-yaml/yaml --mode answer --verbose# Start the server
isr server
Конфігурація та налаштування
Етап конфігурування та налаштування працює найкраще, якщо його розглядати як вимірювану поверхню. Збережіть один ідеальний зразок роботи, один випадок збою та примітку про скасування змін перед розширенням обсягу роботи. Віддавайте перевагу невеликим, тестованим одиницям перед складними скриптами. Коли якийсь крок зазнає невдачі, причина має вказувати на конкретну відповідальність, а не на заплутану послідовність дій. Використовуйте інструменти з вузькими схемами та чіткими позначеннями побічних ефектів. Адміністраторам потрібно знати, які виклики змінюють стан системи, перш ніж вони автоматично схвалять їх.
Оцінка та тестування
Етап оцінки та тестування працює найкраще, якщо його розглядати як вимірювану поверхню. Зафіксуйте один ідеальний результат, один випадок збою та примітку про скасування змін перед розширенням обсягу роботи. Розглядайте цей етап як контракт між вхідними даними та перевіреними результатами. Позначте всі елементи, визначте критерії успіху та не допускайте мовчазного часткового виконання завдань. Використовуйте інструменти з вузькими схемами та чіткими позначеннями побічних ефектів. Адміністраторам потрібно знати, які виклики змінюють стан системи, перш ніж автоматично схвалювати їх.
Висновок: чому це важливо
Етап „Висновок: чому це важливо“ функціонує найкраще, коли його розглядають як вимірювану поверхню. Збережіть один ідеальний запис, один випадок збою та примітку про скасування змін перед розширенням обсягу роботи. Записуйте час виконання та витрати на токени чи запити поруч із функціональними результатами. Візуалізація витрат заздалегідь запобігає несподіваним рахункам під час переходу з демо-середовища у спільні. Використовуйте інструменти з вузькими схемами та чіткими позначеннями побічних ефектів. Хостам потрібно знати, які виклики змінюють стан, перш ніж вони автоматично схвалюють їх. Етап „Висновок: чому це важливо“ функціонує найкраще, коли його розглядають як вимірювану поверхню. Збережіть один ідеальний запис, один випадок збою та примітку про скасування змін перед розширенням обсягу роботи. Документуйте як успішний, так і відновлювальний сценарії роботи разом. Повторні спроби, людський контроль та обробка некоректних повідомлень є частиною продукту, а не етапом подальшої оптимізації.
Чек-лист операцій
На етапі перевірки операційних процедур необхідно визначити вхідні дані, відповідальну особу за кожен крок та критерії завершення перед зміною коду. Оператори повинні мати можливість знову виконати крок, починаючи з відомої точки контролю, без необхідності здогадуватися про прихований стан.
Зберігайте конфігурацію окремо від коду додатку. Файли середовища, сховища конфіденційних даних та флаги функцій мають знаходитися в одному місці, яке оператори можуть перевірити, не читаючи весь код.
Аутентифікуйтеся біля шлюзу та знову авторизуйтесь на рівні обробки даних. Один лише токен не є межею окремого тенанту.
Створюйте точки контролю після дорогих операцій. Система відновлення не повинна знову стягувати плату за один і той самий виклик ШІ, коли оператор намагається виконати наступний етап.
Фіксуйте версії залежностей та записуйте хеш образу, який використовувався під час демонстрації. Відтворюваність є кращою за індивідуальні знання.
Розглядайте цей етап як контракт між вхідними даними та перевіреними результатами. Назвіть створювані елементи, визначте критерії успіху та не допускайте мовчазного часткового виконання.
Перш ніж переходити до наступного етапу, заморозьте версії, зафіксуйте ідеальний запис для критичного шляху та підтвердьте кроки для скасування змін. У спільних середовищах необхідні обмеження на частоту використання, перевірки прав доступу та чіткий власник для зміни секретів. Віддавайте перевагу надійності перед креативними одноразовими демонстраціями.
Примітка для пакету 2f4a57bf7527: не зберігайте ключі постачальника у репозиторії, встановіть ліміт токенів на сеанс та зберігайте записи поруч із фіксами для оцінки, щоб подальша заміна моделей залишалася порівнянною.