Практычныя прытамулкі: Ніколі не сумавайце два балансу.
Практычныя прыказкі: Ніколі не сумавайце два балансовыя відношэння: контракты, чекі і слоты для коду для команд, якія використоўваюць гэты шаблон.
Існавайце гэта як перапрацоўку ідэй з кнігі “Ніколі не сумавайце два балансовыя відношэння” для аператараў: чыстыя этапы, арганізаваныя блакіты коду і прыметкі па восстановленню, якія застаюцца пасля перадачы. Этап “Адгледжэння” найкраща працюе, калі яго розглядаць як вимерную плошчу. Запісайце адна ідеальная транскрыпцыя, адзін прыклад неудачы і прыметку па анулюванні змян перш чым расширваць масштаб. Запісвайце часы выконання і косты токеноў або запытаў праза функцыйнае рэзультат. Відкрытыя данні пра косты з’являюцца рана, таму не будзе неспакою, калі процес перейдзе з дэмаверсіі ў спяльныя сераўыры.
Закрэсленне меж
Для стадіі праграмавання ліній неабяцо пазначыць вхідныя даны, адпаведальнага за шаг і крэтырыя для завершэння пры зміне коду. Аперацыйныя працавнікі должны магчымаць перзапуск шагу з вядомай точкі контролю, не падозрываючы прыхованы стан. Конфігурацыю трэба знаходзіць за межамі коду прыемленае. Файлы сераўіса, храненні секрэтных данных і флагі функцыйяў должны быць у аднам месца, якое працавнікі можуць пераглядаць, не чытаючы весь граф. Паказваць трэба тыя часткі, якія фактычна лежалі в основе адпаведнай адказы. Без цых цитатаў працавнікі не можуць адразніць галюцинацыю ад прасоўкі ў індэксаванні.
Адна запытка, ад початку да канца
Ёнколі трэба завершыць процес запытку, паказвайце вхідныя даны, адпаведнага адпаведальнага за крок і критэрыя завершэння пры перадзеіснаванні коду. Аператары должны магчымаць перзапуск крока з вядомай точкі контролю, не падозрываючы прыхованы статус. Дакументавайце як шлях успеху, так і шлях вярнення. Перазапускі, людзкія перакрыцця і обробка некоректных паведамленняў ёсць часткай продукту, а не пасляднім дапрацоўкам. Указывайце тыя часткі, якія фактычна лежалі в основе адпаведзення. Без цых цытатаў аператары не зможаць разлічыць галюцинацію ад прасоўкі ў індэксаванні.
@app.get("/api/analyze")
def analyze(q: str, market: str = "US", refresh: bool = False):
snap = _up("marketdata", "/snapshot",
params={"q": q, "market": market, "refresh": refresh})
rates = _up("marketdata", f"/rates/{market}")
result = _up("valuation", "/analyze", method="POST", json={
"symbol": snap["symbol"], "market": market,
"snapshot": snap["data"], "rates": rates, "persist": True,
})
# Provenance travels with the numbers, so the UI can show who said what.
result["sources"] = snap.get("sources", [])
result["disagreements"] = snap.get("disagreements", [])
return result
Тры джерелы і правіла, што нічога не трэба сярэдняваць
Для трохіць ваходзячых джэронаў і стадыі неабходна прадзефінаваць вхідныя даны, адпаведальную особу за кожны крок і крэтынія выходу пры змены коду. Аператары должны магчымае перзапускаць крок з вядомай точкі контролю, не падозрываючы прыхованы стан. Лепш выбіраць маленькія, тэставаныя елементы замест большых скрыптов. Калі крок не выйшоў, прычына неудачы павінна вказываць на адзін конкрэтны аспект, а не на заплутаны ланцужок задач. Наводзіце тыя часткі тексту, якія фактычна служылі падставай для адпаведнай адказу. Без ціх цытатаў аператары не можуць разлічыць галюцинацію ад працягу ў індэксаванні. Для трохіць ваходзячых джэронаў і стадыі неабходна прадзефінаваць вхідныя даны, адпаведальную особу за кожны крок і крэтынія выходу пры змены коду. Аператары должны магчымае перзапускаць крок з вядомай точкі контролю, не падозрываючы прыхованы стан. Запісвайце час выконання і кост токенаў або запытаў разам з функцыйнальнымі рэзултатамі. Відразувыя даны пра косцы запобегаюць неспакойным рахункам, калі процес пераходзіць з дэмовай среды ў спакульнаваныя сераўысы.
/p># SEC is as-filed, so it outranks everything in the US.
PRIORITY_US = ("sec", "fmp", "yahoo")
PRIORITY_OTHER = ("fmp", "yahoo")
def _dispersion(values: list[float]) -> float | None:
"""Relative spread across sources. 0.0 means they agree exactly."""
clean = [v for v in values if v is not None]
if len(clean) < 2:
return None
scale = abs(statistics.median(clean))
if scale < 1e-9:
return None if max(map(abs, clean)) < 1e-9 else 1.0
return (max(clean) - min(clean)) / scale
Вораткі грошовай системы
Калі працуеце над стадзіяй «Вораткі грошовай системы», спачатку запісаце кантракт: неабяжлівыя даны, сігнал успеху і тое, што выходзіць у разе частковага нявыпання. Такі список контроля дапамагае заліцьваты змяны ў кодзе. Храніце настройкі параду ўнутры коду прыемлівача. Файлы сераўнавання, хранільнікі секрэтных данных і флагі функцыйяў должны знаходзіцца ў аднам месцы, куды аператары можаць адбавіць аудыт без неабяжлівага чытання всей структуры. Перад налаштаваннем запитоў пераканайцеся, што рэтка адпаведзенняў на фіксаваны набор запытанняў є высокай. Частае змяненне запытоў рэдка калі лепшае слабую систему аднаходжэння інформацыі.
for name, data in sources.items():
rc = (data.get("reporting_currency")
or data.get("currency") or base_currency or "").upper()
allowed_statements[name] = (not base_currency) or rc == base_currency.upper()
Хавайце код стаўкі без рызыку ў вигляде жорсткага кодавання
Калі працюеце над этапам зупнення жорсткага кодавання, спачатку запісайце контракт: неабяжлівыя даны, сигнал успеху і тое, што выходзіць у разе частковага абякання. Такі список пераконтролю дапамагае заліцварыць пазнейшыя змены коду. Документавайце як шлях успеху, так і шлях вярнення. Перапрыбуткі, людзкіе контралі і обработка некоректных паведамленняў ёсць часткай продукту, а не пазнейшым дапрацоўкам. Змяроўвайце рэткасць адпаведзенняў на фіксованы набор запитаў прычымо да налаштавання падказак. Частае змена падказак рэдка калі вярнайце слабкую базу адзысквання інфармацыі.
"US": {"rf": 0.042, "erp": 0.045, "tax": 0.21},
def risk_free(market: str, fallback: float) -> dict:
"""{rate, source, observed_on, series}. Never raises."""
series_id = SERIES.get(market)
static = {"rate": fallback, "source": "static",
"observed_on": None, "series": None}
if not series_id or not enabled():
return static
...
Даны вырахоўваюцца, іх ніколі не зберагаецца
Калі працуеце з элементамы, якія вытэчаюць з Holdings, ніколі не прыходзіце да наступнага этапу без таго, каб спачатку запісаць „контракт“: неабяжлівыя даннэ, сигнал успеху і тое, што выходзіць на частым нявыпанні. Такі список перакладае пазнейшыя змены коду ў прозрачныя.
Валіце маленькія, тэставаныя елементы замест велікіх скрыптов. Калі якісь крок не выйшоў, нявыпанні должна паказваць на адную адпаведальнасць, а не на заплутаны ланцужок задач.
Перад налаштаваннем запитоў пераканайцеся ў рэзультатах адпаведнага набора запытаў. Частая зміна запитоў рэдка калі-небудзь выправляе слабкую эфектыўнасць пошуку.
Калі працуеце з элементамы, якія вытэчаюць з Holdings, ніколі не прыходзіце да наступнага этапу без таго, каб спачатку запісаць „контракт“: неабяжлівыя даннэ, сигнал успеху і тое, што выходзіць на частым нявыпанні. Такі список перакладае пазнейшыя змены коду ў прозрачныя.
Запісвайце час выканання і кост токеноў або запытаў разам з функцыйнальнымі рэзультатамі. Відразувыя данні пра косты запобегаюць неспакойным рахункам, калі праця пераходзіць з дэмовай среды ў спаканую.
Аналізавацькі прыстроі, якія не можуць парадзіраць аналіз
Аналізавацькі прыстроі, якія не можуць выпраўляць рэзультаты аналізу, працуюць наяўней калі іх спрыяваць як меравальную паверхню. Зберагчыце адна ідеальная транскрыпцыя, адзін прыклад неудачы і запіс пра вярнэнне да пачатковага стану, перш чым расширваць сферу дзеяння. Храніце настройкі парадульна коду прыемлена. Файлы сяродавішча, хранільнікі секрэтных дадзеных і флагі функцый кануць у аднам месца, якое аператары можуць пераглядаць без неабяжнага чытання всіх дадзеных. Раздзеляйце правілы часткавання дадзеных і правілы ўтрымання іх. Змена адных не павінна вымагаць перапісву іншых, калі зменяюцыся паказателі якасці.
VALUATION
blended fair value: 1402.11 INR (confidence medium, model spread 0.43)
per model: dcf=1610.22, epv=1104.50, graham=1288.31, gordon=1377.90
margin of safety: -8.4% - Trading above fair value
growth assumed: 11.0% (basis: revenue YoY 11.0%) discount rate: 11.2%
SOURCE DISAGREEMENTS (treat these figures as uncertain):
net_income: fmp=261.0B, yahoo=248.5B (spread 4.9%, using fmp)
def _clamp_to_engine(model_verdict, engine_verdict):
gap = SCALE.index(model_verdict) - SCALE.index(engine_verdict)
if abs(gap) <= 1:
return model_verdict, None
capped = SCALE[SCALE.index(engine_verdict) + (1 if gap > 0 else -1)]
return capped, (f"model said '{model_verdict}', more than one rung from "
f"the engine's '{engine_verdict}' - capped at '{capped}'")
Што на самай працэ фіксуець маніфесты
Механізмы, якія выражаюцься ў маніфестах, працуюць найэфектывней, калі іх спрыяваць як мерыемую паверхню. Запісаце адна ідеальная версія, адзін прыклад неудачы і прыметку па адвярненню змян перш чым расширваць сферу дзеяння. Дакументавайце як успішны, так і варыянт вяснавання ситуаціи. Перапрыбуткі, людзкі контроль і обработка некоректных паведамленняў є часткай продукту, а не элементамі пазнейшага доўнелення. Раздзеляйце правілы часткавання і правілы выкарыстоўвання дадзеных. Змена аднаго з іх не должна вымагаць перапісвання другога, калі зменяюцца паказнікі якосці.
startupProbe: { httpGet: { path: /health/live, port: http },
failureThreshold: 30, periodSeconds: 5 }
readinessProbe: { httpGet: { path: /health/ready, port: http }, periodSeconds: 15 }
livenessProbe: { httpGet: { path: /health/live, port: http }, periodSeconds: 30 }
Чатыры рэшткі, якія зламаліся
Чатыры элемента, які спанулілі роботу на певным этапе, найэфектывнейшая працуюць, калі іх расследваць як вимерную плошчу. Зберагачыце адны ідеальны прыклад роботы, адзін прыклад неудачы і запіс пра вярнэнне да пачатковага стану перад расшырэнням масштаба. Валіце маленькія, тэставаныя елементы замест большых скрыптов. Калі якісь крок не выйшае, прычына неудачы павінна вказываць на адную адпаведальнасць, а не на заплутаны ланцюг задач. Раздзеляйце правілы фрагментавання інфармацыі ад правіл яе выкарыстоўвання. Змена адных не павінна вымагаць перапісву іншых, калі зменяюцца паказнікі якосці. Чатыры элемента, які спанулілі роботу на певным этапе, найэфектывнейшая працуюць, калі іх расследваць як вимерную плошчу. Зберагачыце адны ідеальны прыклад роботы, адзін прыклад неудачы і запіс пра вярнэнне да пачатковага стану перад расшырэнням масштаба. Запісвайце часы выканання і косты токеноў або запытак праза функцыйнае рэзультат. Відразлівасць костаў з самага пачатку запобегае неспакойным рахункам, калі процес пераходзіць з дэмаверсіі ў спяльныя среды.
Што вы бы зменілі
У стадії «Што вы будете зменяць» неабяжна практычна вказаць усіх параметраў, адпаведальнага за выкананне крока, а таксама крэтарыяў завершэння працы перад праверкай коду. Аперацыйныя спецыялісты павінны магчыма было перзапускати крок з вядомай точкі контролю, не прабуючы вычысляць схованы стан. Конфігурацыю трэба зберагаць праза код аплікацыі. Файлы сераўнавання, базы секрэтных дадзеных і флагі функцыйяў павінны знаходзіцца ў аднам месцы, якое спецыялісты можаць пераглядаць, не чытаяўшы весь код. Неабяжна цітаваць тые часткі тексту, якія фактычна лежаць у падставе адпаведнай адказы. Без цітатаў спецыялісты не можаюць адразніць галюцинацію ад працягу індэксавання.
Чек-ліст для аперацыйнай роботы
Калі працуеце над чек-лістам для аперацыйнай роботы, спачатку запісуйце умовы виканання: неабяжны параметры, сігнал успеху і тое, што вядзець да частковага невыпання. Такі чек-ліст дапамагае заставіць пасляэтапныя змены коду чыстымі і прозрачнымі.
Спрытваце гэты ўраг як кантракт межа вхіднымі дадзеннямі і паверыцельнымі выходамі. Дайце назву рэзультатам, задаце критэрыя успеху і не прыймайце часткова завершэння без паведамлення.
Змяркуйце рэкалі на фіксаванай сэтке запытаў прычым налаштаванні прамптам. Часта змена прамптам рэдка калі-небудзь выправляе слабую систему аднаходжэння інфармацыі.
Зафіксавайце версіі залежнасцяў і запісаўце хеш-значэнне зображэння, якое было выкарыстоўвана для дэманстрацыі. Возможнасць павторэння роботы важлівей, чым традыцыйныя знання.
Запісаўце час выканання і кост токэнаў або запытаў разам з функцыйнымі рэзультатамі. Відразлівасць костаў з самага пачатку запобегае неспакойным рахункам, калі працэс пераходзіць з дэманстрацыйнага режыма ў спільныя сераверы.
Змяркуйце рэкалі на фіксаванай сэтке запытаў прычым налаштаванні прамптам. Часта змена прамптам рэдка калі-небудзь выправляе слабую систему аднаходжэння інфармацыі.
Перш чым запускать стак, заморозьце версіі, зафіксавце «золаты» транскрыпты для критычнага шляху і паказвце способы абяроны. У спільных средах неабходны ліміты частоты запытоў, пераканання ў належнасці тэнантам і чысткі власнік для ротацыі секрэтных даных. Валіце простую надзейнасць працы замест хітрых разовых дэманстрацый.
Прыміткі для 6fc55994b561: не кладзіце ключы прадастальніка ў репазітарый, задаце верхнюю межу токена на кожную сесію і зберагачыце транскрыпты празаўседы ў фікстурах eval, каб пазнейшыя замены модэляў заставаліся порównаннімі.