Практычныя прытамулі: Склады функцый знадобіліся дзесятак годоў, каб падбіць трываласць выліву часовых даных у машыннам навучэнні.
Практычныя прыказкі: Сховішчы функцый працавалі ўпроцэсе дзесятка гадоў над усуненнем тэмпаральнага вытэкання ў машыннам навчанні: контракты, перакрыцця і месца для коду для команд, якія викорыстоўваюць гэты патэрн.
Наступныя прыміткі восстанавляюць практычны падход да тэмы «Хранілішчы функцый працавалі дзесятак гадоў над усуненнем тэмпаральных патэнаў у машыннам навучэнні. Памяць AI-агента проста гэта вернула». Акцэнт ставіцца на контракты, перакананняя і месца для коду, які можна легка адразу застосавіць, а не на мотывацыйныя аспекты. Калі працуеце на стадіўцы агледку, спачатку запісайте контракт: неабходныя вхідныя даны, сігнал успеху і тое, што выканаецца у разе частковай нявыполнення. Такі список контроля дапамагае заліцьварыць пазнейшыя змены ў кодзе. Документавайце як «шчаслівы» падход, так і падход для вяснавання ситуацыі. Перапрыбуткі, людзкія контрольныя пункты і обработка некоректных паведамленняў є частью продукту, а не пазнейшым дапрацоўкам.
Што на самай працы гарантуюць хранілішчы функцый і чаму для цього патрэбна была дзесятка гадоў
Функцыя What feature stores працюе найкраща, калі яе розглядаць як меркавыя показнікі. Запісаце адна ідеальная версія дадзеных, адзін прыклад неудачы і прыметкі па поверненню да попярэдня стану пры расшырэнні масштаба. Вольбяце маленькія, тэставаныя елементы замест большых скрыптов. Калі якісь крок не выйшае, прычына неудачы павінна вказываць на адну конкрэтную адпаведальнасць, а не на заплутаны ланцюг задач. Рэзультаты роботы графа павінны быць простымі та з адначыя типамі дадзеных. Вкладаныя структуры дадзеных маскуюць інфармацыю пра тое, який вузел запісаў канкрэтны поле, і спакоююць працу пасля перерываў.
Аквізыцыі: галузь, якая ставіць на тое, куды будзе рухацца рынак
Процес адаптавання на промышленнай стадзіі работае найэфектывней, калі яго расследжваюць як меравальную плошчу. Запісаўце адна ідеальная прыклад, адзін кейс неудачы і запіс пра вярнэнне да пачатковага стану, перш чым расширваць масштабы. Расследжвайце гэтую стадзію як кантракт межа вхіднымі даннымі і падтвердзенымі выходнымі рэзультатамі. Даўце назвы артыфактам, задаце критэрыя успеху і адмовіцеся ад тыхняй частковай роботы без паведамлення. Храніце стан графаў у простам і типаваным формате. Вкладзеныя блокі маскуюць інфармацыю пра тое, який вузел запісаў кожны поле, і спакойваюць працу пасля перарываў.
Чаму памяць агента, базаваная на вектарах, не спадчыць нічога з гэтага
Этап памяці агента, базаваны на вектарах «The Why», працюе найкраща, калі яго спрыяваць як меравальную плошчу. Зберагачыце адны ідеальны прыклад роботы, адзін прыклад неудачы і запіс пра вярнэнне да пачатковага стану перад расшырэнням масштаба. Запісвайце часы выконання і косты токеноў або запытак праза функцыйнае рэзультат. Відразлівасць костаў з самага пачатку запобегае неспакойным рахункам, калі працэс пераходзіць з дэмавайшага режыма ў спяльныя сераўеры. Храніце стан графа ў простам і типаваным формате. Вярнутыя структуры дакументаў маскуюць інфармацыю пра тое, який вузел запісаў канкрэтны поле, і спакшваюць продовжэнне роботы пасля перарываў. Этап памяці агента, базаваны на вектарах «The Why», працюе найкраща, калі яго спрыяваць як меравальную плошчу. Зберагачыце адны ідеальны прыклад роботы, адзін прыклад неудачы і запіс пра вярнэнне да пачатковага стану перад расшырэнням масштаба. Дакументавайце як шлях успеху, так і шлях вяснавання проблемы. Перапрыбуткі, людзкія контрольны пункты і обработка некоректных паведамленняў є часткай продукту, а не чымсь, што дадаецца пазней.
Рашэнне пра выправленне — гэта архітектурнае рашэнне, а не рашэнне прадавца
Для выправлення ситуацыі неабяжна практыка: спачатку трэба адзначыць вхідныя даны, адпаведальнага за крок і критэрыя завершэння, прычаму змінюючы код. Аператары должны магчымаць перзапуск крока з вядомай точкі контролю, не прабуючы здогадвацца пра схованы стан. Лепш выбіраць маленькія, тэставаныя елементы заместо велікіх скрыптав. Калі крок не выйшоў, прычына неудачы должна вказываць на адзін конкрэтны элемент, а не на заплутаны процес. Неабяжна людская апраўка для тых крокаў, якія выкорыстоўваюць грошы чы зміняюць даны ў працэсе. Компіляцыйныя налашчэння не є прамаравамым паказателем завершання роботы.
"""Naive vs. point-in-time-safe vector retrieval, mirroring feature-store
discipline. index.query() stands in for any vector DB client's metadata filter."""
from dataclasses import dataclass
from datetime import datetime, timedelta
from typing import Optional
@dataclass
class MemoryRecord:
id: str
text: str
score: float
event_timestamp: datetime # when the fact became true, not when written
metadata: dict
class FakeVectorIndex:
"""Mock vector DB client, so this example runs standalone."""
def __init__(self, records: list[MemoryRecord]):
self._records = records
def query(self, vector: list[float], top_k: int = 5,
filter: Optional[dict] = None) -> list[MemoryRecord]:
results = self._records
if filter and "event_timestamp" in filter:
lte = filter["event_timestamp"].get("$lte")
if lte is not None:
results = [r for r in results if r.event_timestamp <= lte]
return results[:top_k] # mocked as already sorted by cosine distance
def naive_retrieve(index: FakeVectorIndex, query_embedding: list[float], top_k: int = 5):
"""Similarity only - no notion of 'as of when'."""
return index.query(vector=query_embedding, top_k=top_k)
FRESHNESS_SLA = timedelta(hours=24) # agent-memory-grain freshness window
def as_of_retrieve(index: FakeVectorIndex, query_embedding: list[float],
as_of: datetime, top_k: int = 5,
freshness_sla: timedelta = FRESHNESS_SLA) -> list[MemoryRecord]:
"""Point-in-time-filtered retrieval: only records true as of `as_of`
(mirrors a feature store's join), then a staleness check before
anything enters agent context."""
candidates = index.query(
vector=query_embedding,
top_k=top_k * 3, # over-fetch since staleness filtering happens after
filter={"event_timestamp": {"$lte": as_of}},
)
fresh_enough = []
for record in candidates:
age = as_of - record.event_timestamp
if age > freshness_sla:
record.metadata["stale"] = True # down-rank, don't silently drop
record.metadata["age_hours"] = round(age.total_seconds() / 3600, 1)
fresh_enough.append(record)
fresh_enough.sort(key=lambda r: (r.metadata.get("stale", False), -r.score))
return fresh_enough[:top_k]
if __name__ == "__main__":
now = datetime(2026, 3, 15, 14, 30)
stale_note = MemoryRecord(
id="note-104", text="customer verified, low risk", score=0.94,
event_timestamp=now - timedelta(days=150), metadata={},
)
fresh_note = MemoryRecord(
id="note-889", text="high-velocity escalation flagged for review", score=0.91,
event_timestamp=now - timedelta(minutes=10), metadata={},
)
index = FakeVectorIndex([stale_note, fresh_note]) # pre-sorted by similarity score
top_naive = naive_retrieve(index, query_embedding=[0.0], top_k=1)[0]
print(f"naive top hit: {top_naive.id!r} score={top_naive.score} "
f"age_days={(now - top_naive.event_timestamp).days}")
top_as_of = as_of_retrieve(index, query_embedding=[0.0], as_of=now)[0]
print(f"as_of top hit: {top_as_of.id!r} score={top_as_of.score} "
f"stale={top_as_of.metadata.get('stale', False)}")
naive top hit: 'note-104' score=0.94 age_days=150
as_of top hit: 'note-889' score=0.91 stale=False
Компрэсіі: якія є выкарыстоўваныя косты фільтрацыі as_of
Чытаючы пра тэрмінальныя наследкі, на стадыі фільтрацыі неабходна прадзеявіць параметры вхідных дадзеных, абяронца каральніка гэтага крока і критэрыя завершэння, прычым перад зменайцем коду. Аператары должны магчымае запускваць гэты крок з вядомага пункта контролю, не прыпускаючы нявідомага стану. Спрыятліваець гэтую стадыю як даговор межа вхіднымі дадзенымі і перакананымі выходнымі рэзультатамі. Назваць элементы, прадзеявіць перакананні на успех і не прабаваць прыймать часткова завершэнне без падтверджэння. Заставіць людзкую апраўду для тых крокаў, якія выкарыстоўваюць грошы або зміняюць даныя для працы. Компіляцыйныя налашчэнні не ўзроўнаўцяюцься з пачатковым станом бізнесу.
Калі не варта сабе трымацца
Для стадіі «Калі кантраць цяпляцца» неабходна прадзеўжэнне вхідных дадзеных, апрацоўвальніка шагу і крэатарыяў выходу пры перадзмене коду. Аперацыйнія працавнікі павінны магчымае перапрацоўваць шаг з вядомай точкі контролю, не спрабоўваючы здагадвацца пра схованы стан. Запісвайце час выконання і кост токенаў або запытаў разам з функцыйнаімі рэзультатамі. Відразлівае прадставленне костаў запобегае неспакойным рахункам, калі процес пераходзіць з дэмавайнага режыма ў спакульнае сераўерное сераўысце. Заставіце людзкую апраўдку на тых этапах, дзе выконваюцца грошовыя расходы або зміняюцца даныя у працоўным режыме. Компіляцыйныя налашчэнні не ўзначаюць павнае адпрацоўванне продукту. Для стадіі «Калі кантраць цяпляцца» неабходна прадзеўжэнне вхідных дадзеных, апрацоўвальніка шагу і крэатарыяў выходу пры перадзмене коду. Аперацыйнія працавнікі павінны магчымае перапрацоўваць шаг з вядомай точкі контролю, не спрабоўваючы здагадвацца пра схованы стан. Дакументавайце як «шчаслівы» шлях, так і шлях вяснавання проблем. Перапрыбуткі, людзкія контрольныя пункты і обработка некоректных запытаў ёсць часткай продукту, а не пасляднім элементам дапрацоўкі.
Рэальныя рызыкі, якія выходзяць за межы адной компаніі з платэжамі
Калі працуеце над этапам «Рэальныя рызыкі, якія выходзяць за межы», спачатку запісайте контракт: неабяцковыя даны, сигнал успеху і тое, што будзе ў разы частковай нявыполненні. Такі список контроля дапамагае залишацца чыстым пад час пазнейшых змян у кодзе. Валіце маленькія, тэставаныя елементы замест амаль неконтрольваных скрыптов. Калі якісь крок не выпанае, прычына нявыполненні павінна вказываць на адную адповядальнасць, а не на заплутаны ланцюг задач. Стварайте контрольныя пункты пасля дорогіх крокаў. Система не павинна знову выклікаць той самы кантакт з LLM, калі аператар праказвае пазнейшы вузел.
Ўрайкі
Калі працуеце на стадыі «Ўтварнікі», спачатку запісайце контракт: неабяжлівыя данні, сігнал успеху і тое, што выходзіць у разе частковага нявыпання. Такі список пераконтроўкі дапамагае заліцваліваць пазнейшыя змены ў кодзе. Спрыймайце гэтую стадыю як контракт межа даннімі і перакананымі выходамі. Дайце назву кожнам элементам, задаце критэрыя успеху і не падтрымайце тыхчасова часткова завершэння задання. Робіце пераконтроўку пасля дорогіх крокаў. Система не должна занова ставіць плату за той самы вызыв LLM, калі аператар прабуе зноў запрацаваць пазнейшы вузел.
Чэк-ліст для эксплуатацыі
На стадыі чэк-ліста для эксплуатацыі, перш чым зменяць кодзу, задаце данні, адпаведальную особу за крок і критэрыя завершэння. Аператары должны магчыма было зноў запрацаваць крок на адомленай пераконтроўцы, не здагадваючыся пра схованы стан. Зберагачыце настройкі параду ўнутры коду прыемленае. Файлы сераў, хранільнікі секрэтных дадзеных і флагі функций должны знаходзіцца ў аднам месцы, якое аператары можаць пераглядаць, не чытаяўшы весь граф.
Неабяжна людская падзея на тых элементах, які выдваюць грошы або зменяюць даны працэйвання. Падключэнне ў час компілявання не адпавядае цэласообразнасці бізнесу.
Напісайце кароткі путаводзь: як роцыяваць канты, як спрабавіць апустошыць чергу, як вярнуць стан да пярэдніх значэнняў.
Документавайце як шлях успеху, так і шлях вяснавання. Прабыткі, людскія контралі і обработка некоректных паведамленняў є часткай продукту, а не дадатковым удосконаленнем.
Неабяжна людская падзея на тых элементах, які выдваюць грошы або зменяюць даны працэйвання. Падключэнне ў час компілявання не адпавядае цэласообразнасці бізнесу.
Перад паднятыем стэка заморозьце версіі, зафіксавайце ідеальны транскрыпт для критычнага шляху і падтвердзіце крокі вярнування. У спадзеленых средах неабяжны ліміты частоты запытоў, перакананні ў належнасці і чысткі власнік для роцыявання секрэтных даных. Валіце надзейнасць працэйвання працоўнай надзейнасці над крэатыўнымі разовымі дамах.
Запіска параграфу для bf903bce4a0b: не кластыць ключы прадаўцаў у репазітары, задаць максымальную кантэнцыю токена на адна сесія і зберагчы транскрыпціі праза фіксаты для ацэнкі, каб пазнейшыя замены моделей заставалі пораўнанневымі.
Калі працуеце над стадзіяй 0 запіскі па зміцнэнню, спачатку запісайце контракт: неабходныя вхідныя даны, сігнал успеху і тое, што выходзіць у разе частковага невыпання. Такі чэк-ліст дапамагае заставаць пазнейшыя змены коду чыстымі. Спрыятліваце гэтую стадзію як контракт межа вхіднымі данымі і перакананымі выходнымі рэзультатамі. Назвайце артыфакты, задаць перакананні успеху і адмовіцеся ад тыхоўскага частковага завершэння.
Дзеянне зміцнэння 0/949: вы мерзьце час выканання, класію памылак і витрату токенаў для гэтай запіскі, а потым выявляеце, чы хацеце заставіць змену на адной фіксованай сэтке пытанняў, а не на адной анекдоты.
Этап 1 практыкы зміцнення працюе найэфективней, калі яго розглядаць як вимерную паверхню. Зафіксавце адны ідеальны прыклад роботы, адну справу з бягамі та запіс пра возврат да пачатковага стану перш чым расширваць сферу дзеяння. Зберагаюце настройкі пазначыце за межамі коду прыемліка. Файлы сераўнавання, хранільнікі секрэтных данных та флагі функцыйяў должны знаходзіцца ў аднам месцы, куды аператары можаць адбавляць контроль без неабяжнага чытання всіх дадзеных.
Дакладнае выясненне практыкі зміцнення 1/949: вымерзце час выканання, класію памылак та колькасць викорыстоўваных токенав для гэтага запісу, а пасля, на аднойчынку з фіксаваным наборам пытанняў, а не на аднойчынку з пераказамі, выявіце, чы хацяца застаўляць гэтыя змены.
Для 2-й стадзіі практыкы забезпечэння надзеі неабяжна практычна апрэцыя: перад зменым коду трэба чытко ваказаць параметры, адпраўніка кожнага крока і крэтыяры завершэння. Аперацыйныя працавнікі должны магчымае перадзваначыць крок з вядомага пункта контролю, не прымушаныя здогадвацца пра схованы стан системы. Лепш выбіраць маленькія, тэставаныя елементы коду замест большых скрыптов. Калі крок не выйшаў, прычына неудачы должна быць адносна конкрэтной адпаведальнасці, а не сложнай сэткі взаімадзеяння разных частак системы.
Дэталі практыкы забезпечэння надзеі 2/949: памеры часу выканання, класаў адказоў і колькасці выкарыстоўваных ресурсаў для гэтай практыкі, пасля чаго трэба вырашыць, чы робіцца змена на адной падставе фіксаванага набору крэтыяраў, а не на адной толькі інтуїцыі.
Калі працуеце над 3-й стадзіяю прыемкі з паўнейшага захавання, спачатку запісайце умовы кантракту: неабходныя даны, сігнал успеху і тое, што выходзіць на частым неудачам. Такі список контроля дапамагае заставаць пазнейшыя змены коду чыстымі. Запісвайце час выканання і вартасьць токенаў або запытак паляглі ўжо разам з функцыйнальнымі рэзултатамі. Відразы вартасцей з самага пачатку запобегае неспакойным рахункам, калі процес пераходзіць з дэмаверсіі ў спяльныя среды.
Дзеянне прыемкі з паўнейшага захавання 3/949: звярніце увагу на час выканання, класы памылак і витрату токенаў для гэтай прыемкі, а пасля, на аднойчынных критэрыях, а не толькі на індывідуальных прыкладах, адлучыце, чы робіць змены.
Стадзія 0 прыемкі з паўнейшага захавання работае найкраща, калі яе спрыямаць як меравальную плошчу. Запісвайце адну ідеальную транскрыпцыю, адзін прыклад неудачы і запіс пра вярнэнне да пачатковага стану, перш чым расширваць сферу дзеяння. Дакументавайце як успішны, так і вярнэння да пачатковага стану шляхі. Перапрыбуткі, людзкія контролы і обработка некоректных паведамленняў є часткай продукту, а не чымсь, што дадаецца пазней.
Дзеянне паўжасткі 0/968: звярніце увагу на час выканання, клас памылак і колькасць токенаў, выкорыстаных для гэтай змяны, а пасля, на аднойчынку з фіксаваным наборам пытанняў, а не на асобістых спазыраннях, выявіце, чы рашаце застаўіць гэту змяну.
Для першага этапу паўжасткі неабходна ўзначыць вхідныя даны, адпаведальнага за выкананне крока і критэрыяы завершэння працы перад змінай коду. Аператары должны магчымае перадзвігнуць гэты крок з вядомай точкі контролю, не падозрываючы прыхованы стан. Штодзе гэты этап трэба спрыятаць як кантрактом межа вхіднымі данымі і перакананымі выходнымі рэзультатамі. Назвіце всі неабходныя элементы, узначыце критэрыя успеху і не прабывайце прыймаць часткова завершаныя рэзультаты без падтверджэння.
Дзеянне паўжасткі 1/968: звярніце увагу на час выканання, клас памылак і колькасць токенаў, выкорыстаных для гэтай змяны, а пасля, на аднойчынку з фіксаваным наборам пытанняў, а не на асобістых спазыраннях, выявіце, чы рашаце застаўіць гэту змяну.