Практычныя прытамулкі: OKF + RAG: Апошній AI агент
Практычныя прыказкі: OKF + RAG: Апошній AI-агент: контракты, перакрыцця та слоты для коду для команд, якіе викорыстоўваюць гэты патэрн.
У гэтым карыце парадоксальная структура перадаўляецца ад сыр'ёчных матэрыялаў да рабочай системы для: OKF + RAG: The Ultimate AI Agent Architecture. Акцэнт ставіцца на практычныя крокі, чыстае перакананне і код, які можна проста дадаць у репазітарый без неабясненых падозр. Для агульнага відношэння, перад змянай коду неабходна визначыць вхідныя даны, адпаведальнага за крок і критэрыя завершэння. Аперацыёныя працавікі должны магчымае перадзваніць крок з вядомай точкі контролю без неабясненняя скрытага стану. Спрэчвайце гэты этап як кантракт межа вхіднымі данымі і падтверджанымі выходнымі рэзультатамі. Дайце назвы артыфактам, визначыце перакананні на успех і адмовіцеся ад беззвучнага частковага завершэння.
Две системы памяці
Калі працюеце над «Двумя системамі памяці», спачатку запісайте умовы: неабяжлівыя даны, сигнал успеху і тое, што выходзіць у разе частковага абякання. Такі список контролю дапамагае заставаць змяны коду чыстымі. Запісвайце час выканання і кост токена або запиту праз ці функцыональныя рэзультаты. Відразувая видимасць костаў запобiegае неспакойным рахункам, калі працэс пераходзіць з дэмавайнага режыма ў спакульнае сераўерное сэрвіса. Замерьце спроможнасць адзысквання інфармацыі на фіксаванай сэтке запытаў прычым регулюванні падказак. Частае змена падказак рэдка калі лепшае слабую спроможнасць адзысквання дакументаў.
Што такое OKF? (Формат адкрытых ведамаў)
Калі працюеце над кнігай «Што такое OKF? (Формат відкрытых знанняў)», спачатку запісайце умовы викорыстання: неабходныя даны, сігнал успеху і тое, што выходзіць пад частым неудачам. Такі список дапамагае заліцварыць будучыя змены ў кодзе. Зберагаюце настройкі паза кодам прыемліка. Файлы сераўіса, храненні секрэтных данных і пазначкі функцыйяў должны знаходзіцца ў аднам месцы, куды аператары можаюць пераглядаць іх без неабходнасці чытання всей структуры. Перад налагоджэньем запитоў пераканайцеся, што система правільна адпавядае на фіксаваны набор запитаў. Частая зміна запитоў рэдка калі выправляе слабую эфектывнасьць пошуку.
---
type: metric
title: "Monthly Churn Rate"
description: "Official formula for calculating monthly customer churn."
owner: "data-engineering"
tags: [revenue, kpi, board-report]
timestamp: 2026-06-20T10:00:00Z
---
# Monthly Churn Rate
The official churn rate formula used in all board reports and investor decks:
Churn Rate = (Customers Lost During Month / Customers at Start of Month) × 100
### Rules
- **Do NOT** use trial accounts in the denominator.
- **Do NOT** count plan downgrades as churn.
- Source of truth: `analytics.monthly_churn_summary` table.
### Related
- [Monthly Active Users](mau.md)
- [Revenue Dashboard](revenue_dashboard.md)
Чаму гэта важна
Калі працуеце над раздзелам «Чаму гэта важна», спачатку запісайце умовы кантракту: неабяжлівыя даннэ, сигнал успеху і тое, што выходзіць пад часты няудачны результат. Такі список пераканаець у тым, што пазнейшыя змены коду будуць чыстымі. Документавайце як шлях успеху, так і шлях вярнення да нормы. Перапрыбуткі, людзкія контрольны пункты і обработка некоректных паведамленняў ёсць частью продукту, а не пазнейшым дапрацоўкам. Перад налаштаваннем запитаў пераканайцеся ў рэкале на фіксаваным наборы пытанняў. Змена запитоў рэдка калі вярнайць сильную способнасць да выкарыстоўвання інформацыі. Калі працуеце над раздзелам «Чаму гэта важна», спачатку запісайце умовы кантракту: неабяжлівыя даннэ, сигнал успеху і тое, што выходзіць пад часты няудачны результат. Такі список пераканаець у тым, што пазнейшыя змены коду будуць чыстымі. Спрэтавайцеся да гэтага этапу як да кантракту межа даннэмі і перакананымі выходамі. Дайце назвы элементам, задаць критэрыя успеху і не падзеўляйцеся частым непূরным выкананнем задачы.
Што такое RAG? (Retrieval-Augmented Generation)
Што такое RAG? (Retrieval-Augmented Generation) работае наяўней, калі яго розглядаць як мерыябельную структуру. Запісаце адна ідеальная версія рэзультата, адин прыклад неудачы і прыметкі па поверненню да пачатковага стану пры расшырэнні масштаба. Запісвайце часы выконання і косты токенавання або запита разам з функцыональнымі рэзультатамі. Відразлівая вартасці з самага пачатку запобегае неспакоўным рахункам, калі працэс пераходзіць з дэмовай среды ў спяльнаныя сераўеры. Раздзеляйце правілы часткавання дадзеных і правілы ўзяць дадзеныя з базы. Змена аднаго з іх не должна вымагаць перапісвы другога, калі зменяюцца паказнікі якосці.
Гібрыдная архітектура: OKF + RAG
Гібрыдная архітектура: OKF + RAG працююць наякша, калі іх розглядаць як вимерную структуру. Запісаўце адна ідеальная транскрыпцыя, адзін прыклад неудачы і запіс пра відкатанне раней, чым расширваць масштабы. Зберагаўце настройкі паза кодам прыемлена. Файлы серавыска, хранільнікі секрэтных дадзеных і флагі функцыйяў должны знаходзіцца ў аднам месцы, куды аператары можаць адбавляць аудит, не чытаючы весь граф. Раздзеляйце політыку часткавання дадзеных ад політыки ўзяць іх. Змена адной з яных не должна вымагаць перапісвання другой, калі зменяюцца показнікі якасці.
Як рутэр прымечае рашэння
Як прынцып «Как Router Decides» работае наяўнейша, калі яго розглядаць як вимерную плошчу. Запісаўце адна ідеальная транскрыпцыя, адзін прыклад неудачы і запіс пра вярнэнне да пачатковага стану перш чым расширваць масштабы. Дакументаваце як шлях успеху, так і шлях вярнэння. Перапрыбуткі, людзкія контрольныя пункты і обработка некоректных паведамленняў є часткай продукту, а не наступным этапам дорабачання. Раздзеліце політыку часткавай обработкі дадзеных ад політыки ўзяць іх. Змена адной з яных не павінна вымагаць перапісву другой, калі зменяюцыся показнікі якосці.
Прыклад рэалізацыі
Прынцып рэалізацыі працуе наяўнейша, калі яго спрыяваць як мерыемую паверхню. Запісаце адна ідеальная версія, адзін прыклад неудачы і заўважэння па поверненню да пачатковага стану пры расшырэнні масштаба. Валіце маленькія, тэставаныя елементы замест большых скрыптов. Калі якісь крок не выйшае, прычына неудачы павінна адносіцца да конкрэтной адпаведальнасці, а не да заплутанага ланцоўка дзеянняў. Раздзеляйце правілы часткавання інфармацыі ад правілаў яе выявлення. Змена ў одных не павінна прымусваць перапісванне другых, калі зменяюцца паказнікі якосці.
from openai import OpenAI
import os
import glob
import yaml
client = OpenAI()
# 1. Load the OKF knowledge bundle from the local directory
def load_okf_bundle(bundle_path: str) -> dict:
"""Reads all Markdown files in the OKF directory into a searchable dict."""
knowledge = {}
for filepath in glob.glob(f"{bundle_path}/**/*.md", recursive=True):
with open(filepath) as f:
content = f.read()
# Extract the title from YAML frontmatter
if content.startswith("---"):
_, frontmatter, body = content.split("---", 2)
meta = yaml.safe_load(frontmatter)
title = meta.get("title", os.path.basename(filepath))
knowledge[title.lower()] = body.strip()
return knowledge
# 2. Search OKF (deterministic, keyword-based)
def search_okf(query: str, okf_knowledge: dict) -> str | None:
"""Simple keyword match against OKF titles."""
for title, content in okf_knowledge.items():
if title in query.lower():
return content
return None
# 3. Search RAG (probabilistic, vector-based)
def search_rag(query: str) -> str:
"""Placeholder for your vector DB search (Pinecone, Weaviate, etc.)."""
# results = vector_db.similarity_search(query, top_k=5)
return "RAG context: [retrieved chunks would appear here]"
# 4. The Intelligent Router
def answer_query(query: str, okf_bundle_path: str) -> str:
okf_knowledge = load_okf_bundle(okf_bundle_path)
# Try OKF first (deterministic path)
okf_result = search_okf(query, okf_knowledge)
if okf_result:
context = f"[SOURCE: Official Knowledge Base (OKF)]\n{okf_result}"
else:
# Fall back to RAG (probabilistic path)
context = f"[SOURCE: Document Search (RAG)]\n{search_rag(query)}"
# Send to LLM with the retrieved context
response = client.chat.completions.create(
model="gpt-4o",
messages=[
{"role": "system", "content": "Answer using ONLY the provided context."},
{"role": "user", "content": f"Context:\n{context}\n\nQuestion: {query}"}
]
)
return response.choices[0].message.content
Вывык
Вывык працюе наяўней, калі яго спрыяваць як мерыемую плошчу. Зафіксавайце адны ідеальны прыклад, адзін кейс неудачы і запіс пра вярнэнне да пачатковага стану перш чым расширваць масштабы. Спрыяйце гэтаму этапу як кантракту межа вхідных дадзеных і перакананыя выходныя рэзультаты. Дайце назвы артыфактам, задаце критэрыі успеху і не падзеўляйцеся частым, непূরным выкананнем задач. Раздзеліце правілы часткавага апрацоўвання дадзеных ад правіл ях выявлення. Змена ў одных не павінна прымусваць перапісванне іншых, калі змянююцыся показнікі якосці.
Чэк-ліст для эксплуатацыі
Чэк-ліст для эксплуатацыі працюе наяўней, калі яго спрыяваць як мерыемую плошчу. Зафіксавайце адны ідеальны прыклад, адзін кейс неудачы і запіс пра вярнэнне да пачатковага стану перш чым расширваць масштабы.
Валідзіце маленькія, тэставаныя елементы замест большых скрыптов. Калі якісьць кроку падупае, неудача павінна вказваць на адную адповядальнасць, а не на заплутаны ланцужок задач.
Адміністрацыю частакавання трэба адзяліць ад адміністрацыі выкарыстання. Змена адной з іх не павинна прымусваць перапісванне другой, калі зменяюцыся паказнікі якосці.
Неабяжна людская апрацоўка для тых крокаў, якія выкорыстоўваюць грошы або зменяюць даны праработкі. Працэс кампайлявання не ўзроўнаважваецца з повнасцю бізнес-процэсаў.
Напісце кароткі посібнік: як роцыяваць клучы, як спрачыслаць чергу, як анулюваць пярэдняе запісванне дадзеных.
Конфігурацыю трэба зберагаць праза код аплікацыі. Файлы сяродавішча, хранільнікі секрэтных дадзеных і флагі функцыйяў павінны знаходзіцца ў адном месцы, куды аператары можаць адбавіць аудыт без чытання всей структуры.
Перад паўышэнням версій стака трэба заморазіць іх, зафіксаваць „золаты“ транскрыпт для критычнага маршруту і падтвердзіць крокі анулювання. У спадзяльных сяродавішчах неабяжны ліміты частоты запытоў, пераказы належнасці і чыстае вялоўнік для роцыявання секрэтных дадзеных. Лепш выбіраць простую надзеянасць, чым крэатывныя, але еднакратныя дамыслы.
Запіска параграфу 26b9ceed44f1: не класты ключы прадаўцоў у репазітарыю, задаць максымальны ліміт токена на кожную сесію, а таксама зберагчы транскрыпціі праза фіксатуры адлічэння, каб пазнейшыя замены моделей заставаліся порównанымі.