Why
A conventional dashboard is built around one HTTP request and one HTTP response — status code, latency, maybe a payload size. A multi-agent or LLM pipeline hides its real failures inside that single green checkmark: a tool call that silently returned nothing, a slow database step that ate the latency budget without tripping any alert, a prompt that grew past its context limit, or an answer that would come out differently on a retry with the exact same input. None of these fail the HTTP check. All four turn a working-looking system into one that quietly gives wrong, inconsistent, or non-compliant answers, and in a regulated domain — the video's example is loan underwriting — an unreproducible decision is itself a compliance problem, not just a bug. Closing this gap needs two different capabilities: enough recorded detail to reconstruct what actually happened inside a request (tracing), and a way to score whether what happened was correct (evaluation) — run continuously, not just when something visibly breaks.
How it works
Four silent failures
- Silent tool failures (03:00): an MCP server or tool call returns empty or malformed data, and the agent has no way to notice, so it answers anyway, plausibly and wrongly.
- Cascading latency (03:16): a slow downstream query — a database call, say — inflates the LLM call and the total response time, but nothing in a flat HTTP view says which hop was the bottleneck.
- Context overflow (03:22): too much data gets stuffed into a prompt, and the call fails or times out with no clear signal pointing back at the prompt-construction step.
- Non-determinism (03:40): identical input produces different output across runs, which breaks reproducibility and, in a regulated domain, breaks compliance review.
Traces and spans
A trace is the full record of one request from start to finish; a span is one step inside it — a single LLM call, a tool execution, a database query — and spans nest into a parent-child tree that renders as a visual timeline (04:04–04:21). Each span carries its inputs and outputs, latency, token consumption, and (for tool calls) the parameters passed in. Tagging a trace with a user ID and session ID lets an engineer replay the exact decision path of one problem session instead of guessing from aggregate metrics. Because MLflow Tracing is built on the OpenTelemetry standard, the same trace data can be dual-exported to tools like Jaeger or Grafana Tempo (08:13). Instrumentation is close to free for common frameworks — mlflow.langchain.autolog() captures LangChain/LangGraph traces automatically — and a @mlflow.trace decorator covers custom code paths (08:43).
Grading what the trace shows
Two evaluation styles sit on top of the trace data. Deterministic scoring covers anything checkable by a rule: regex matches, exact-match comparisons, latency thresholds (05:01). LLM-as-a-judge hands the trace to a separate model whose only job is to grade the output (05:16), against criteria such as: did the agent pick the right tool (tool-call correctness); did it solve the task in a minimal number of steps (tool-call efficiency); was the answer relevant; was it safe; did it follow a stated guideline, such as "be helpful but never promise a fixed interest rate" (05:24). Rules simple enough to write as a regex should stay a regex — the judge model is for judgment calls a rule can't express.
Prompt registry
Verified system prompts get version control comparable to a Git history — with an audit trail and the ability to roll back a prompt that regresses (06:10). This turns "we changed the prompt" from an untracked edit into a reviewable, revertible change with the same discipline as a code change.
Four things production needs
- A real backend. The default local file store breaks under concurrent writes; production wants a PostgreSQL/MySQL backend, object storage for trace artifacts, and an OAuth proxy in front (06:23).
- Async logging plus sampling. Trace writes go out in the background so they never block the response path; under high traffic, sample ordinary requests but keep collecting 100% of errors (06:57).
- A judge-model strategy with a cost budget. An air-gapped environment needs its own judge endpoint; cost scales as evaluation-set size times number of judges, so route anything rule-shaped to a regex instead of a judge call (07:22).
- Evaluation in CI. Run
mlflow.genai.evaluateas a quality gate — the same way a unit test runs — whenever a prompt or agent's logic changes, so a regression is caught before merge, not after a user hits it (07:56).
Where it lands in Jayverse
- Rabbit: trace every mandate execution. Which tool calls led to a submitted transaction is exactly the record the Auditor's rule needs made concrete — a mandate span tree with an
Interruptedstate or an empty-tool-response state should be a first-class, queryable case, not something read off logs after the fact. - Verex: the resolution pipeline is a trace, not a log line. Which source was queried, which benchmark or venue price it returned, and which rule picked the final resolution value belongs in a span tree tagged by market ID, so a disputed resolution can be replayed exactly as it happened.
- CI with frozen lockfiles: add an evaluation job.
mlflow.genai.evaluateas a merge gate on prompt or agent-logic changes is the same shape as Dark Horse (e)'s "boundary files before agent tasks" — both are about stopping a bad change at the gate instead of catching it in production. - Theory: non-determinism and sampling are the same problem as elsewhere. Same input, different output, on every run is a scheduling/queueing-adjacent reliability question, and the "sample normal traffic, keep 100% of errors" rule is a specific instance of a general triage pattern worth a Theory entry of its own.
- Eng: interview vocabulary. Trace, span, and judge (as in LLM-as-a-judge) are now standard terms for describing observability work in a systems-design interview; worth having ready in English, not just recognized in Korean translation.
Verified and unverified
Verified on 2026-09-19: MLflow is a real open-source machine learning lifecycle platform (originally from Databricks, now under the Linux Foundation); MLflow Tracing is built on the OpenTelemetry standard and ships autolog integrations plus a @mlflow.trace decorator for custom instrumentation; mlflow.genai.evaluate and LLM-as-a-judge scorers exist as part of MLflow 3; a prompt registry with versioning exists; and MLflow's default tracking backend is a local file store, with production deployments expected to run a database backend instead. Taken from the video summary and not independently checked: the specific timestamps, the exact wording of the four silent-failure categories and the four production requirements as the video states them, the dual-export claim to Jaeger and Grafana Tempo, the cost formula (evaluation-set size times judge count), and the loan-underwriting example.
Sources: YouTube — IBM Technology, "What Is MLflow? Tracing AI Agents & LLM Workflows" · MLflow project documentation (mlflow.org) · related items: Tech #62 (agentic engineering writes the boundaries), the AI-engineer item (key ai-engineer-builds-the-car; its Tier 3 is observability), Dark Horse (e).
Key expressions
| Expression | 뜻 · 쓰이는 자리 |
|---|---|
| 200 OK | HTTP 성공 상태 코드(요청이 정상 처리됐다는 서버 응답) · "정상"의 대명사이지만 정답을 보장하지 않는다는 대비로 쓰임. "an HTTP monitoring dashboard can show 200 OK and a fine response time" |
| silent failure | 침묵형 장애(에러 신호 없이 조용히 잘못되는 실패) · 관측성 논의의 핵심 개념. "an MCP server or tool call returns empty or malformed data, and the agent has no way to notice" |
| cascading latency | 연쇄 지연(한 구간의 느림이 전체로 번지는 것) · 병목 원인을 못 찾는 상황을 가리킴. "a slow downstream query... inflates the LLM call and the total response time" |
| context overflow | 컨텍스트 오버플로(프롬프트가 모델의 입력 한도를 넘는 것) · LLM 특유의 실패 모드. "too much data gets stuffed into a prompt, and the call fails or times out" |
| non-determinism | 비결정성(같은 입력에도 실행마다 다른 결과) · 재현성·컴플라이언스 문제의 원인. "identical input produces different output across runs" |
| trace | 트레이스(요청 하나의 전체 기록) · 관측성의 최상위 단위. "A trace is the full record of one request from start to finish" |
| span | 스팬(트레이스 안의 한 단계) · LLM 호출·도구 실행 등 세부 단위. "a span is one step inside it" |
| parent-child tree | 부모-자식 트리(스팬들이 중첩되는 구조) · 트레이스 시각화 방식. "spans nest into a parent-child tree that renders as a visual timeline" |
| LLM-as-a-judge | LLM을 심사자로 쓰는 평가 방식(별도 모델이 출력을 채점) · 규칙으로 못 잡는 판단을 대신함. "a separate model whose only job is to grade the output" |
| deterministic scoring | 결정론적 점수(규칙 기반 채점) · LLM-as-a-judge와 짝을 이루는 저비용 평가. "Deterministic scoring covers anything checkable by a rule" |
| tool-call correctness | 도구 호출 정확도(맞는 도구를 골랐는지) · 에이전트 평가 기준의 하나. "did the agent pick the right tool (tool-call correctness)" |
| prompt registry | 프롬프트 레지스트리(검증된 프롬프트의 버전 관리 저장소) · Git처럼 감사·롤백이 되는 것. "Verified system prompts get version control comparable to a Git history" |
| audit trail | 감사 추적(누가 언제 무엇을 바꿨는지의 기록) · 규제 도메인에서 필수. "with an audit trail and the ability to roll back a prompt that regresses" |
| quality gate | 품질 게이트(기준 미달이면 병합을 막는 CI 단계) · 평가를 테스트처럼 자동화하는 자리. "Run mlflow.genai.evaluate as a quality gate" |
| air-gapped | 에어갭(외부 네트워크와 물리적으로 분리된) · 폐쇄망 환경을 가리키는 표준 용어. "An air-gapped environment needs its own judge endpoint" |
| HTTP | HyperText Transfer Protocol(하이퍼텍스트 전송 프로토콜) · 웹 요청/응답의 기본 프로토콜. "an HTTP monitoring dashboard" |
| LLM | Large Language Model(대형 언어 모델) · 이 글 전체가 다루는 대상. "Tracing AI Agents & LLM Workflows" |
| MCP | Model Context Protocol(모델-컨텍스트 프로토콜, 에이전트가 도구·데이터에 접근하는 표준) · 침묵형 장애의 발생 지점. "an MCP server or tool call returns empty or malformed data" |
| CI | Continuous Integration(지속적 통합) · 평가를 자동 게이트로 거는 파이프라인. "Evaluation in CI" |
| OAuth | Open Authorization(개방형 인가 표준) · 프로덕션 백엔드 앞단 보안 요건. "an OAuth proxy in front" |