Trace 관측성
컬렉션이 잘못된 도구를 반환했을 때 단순히 “무엇이 1위였는가”만으로는 원인을 찾기 어렵습니다. 다음 정보가 함께 필요합니다.
- 어떤 score channel이 각 후보의 순위를 움직였는가
- LLM target을 유지했는가, deterministic selector가 보정했는가
- 어떤 선행 producer가 dependency로 확장됐는가
- model token budget 안에 어떤 schema가 들어가고 빠졌는가
- 어느 단계가 latency를 사용했는가
Observability API는 이 답을 하나의 버전된 secret-scrubbed trace로 기록합니다. 엔진의 검색이나 선택 결과는 바꾸지 않습니다.
파이프라인 기록
from graph_tool_call.graphify import retrieve_graphify, select_target_candidate
from graph_tool_call.observability import (
STAGE_RETRIEVAL,
STAGE_TARGET_SELECTION,
TraceRecorder,
record_retrieval_result,
record_selector_result,
)
trace = TraceRecorder("catalog_request", attributes={"query": query})
with trace.start_span(STAGE_RETRIEVAL, "retrieve_graphify") as span:
retrieval = retrieve_graphify(graph, query, top_k=8, include_evidence=True)
record_retrieval_result(span, retrieval)
with trace.start_span(STAGE_TARGET_SELECTION, "select_target_candidate") as span:
selection = select_target_candidate(
query,
[row["name"] for row in retrieval["results"]],
graph.tools,
retrieval_results=retrieval["results"],
)
record_selector_result(span, selection)
trace.write("trace.json")
각 candidate와 schema decision에는 outcome, 가능한 경우 rank/score,
evidence, 그리고 최소 한 개의 reason_code가 들어갑니다.
안전한 재생
graph-tool-call trace trace.json
graph-tool-call trace trace.json --json
Replay는 schema version 1.0을 검증하고 stage 순서, latency, decision
outcome, reason coverage를 복원합니다. LLM이나 외부 API를 다시 호출하지
않습니다.
공통 scrub 정책은 credential 형태의 key, bearer/JWT 형태의 값, raw body/payload/result, 이메일, 전화번호 형태 값을 가립니다. 기본 plan/runner adapter는 raw argument와 output을 기록하지 않습니다.
OpenTelemetry 내보내기
pip install "graph-tool-call[observability]"
from graph_tool_call.observability import OpenTelemetryTraceExporter
OpenTelemetryTraceExporter().export(trace.finish())
OpenTelemetry SDK, sampling, batching, backend 설정은 host application이 소유합니다. graph-tool-call은 API만 설치하고 활성 tracer provider를 사용하므로 특정 collector나 telemetry vendor를 강제하지 않습니다.
저장 경계
Raw HTTP request/response 대신 scrubbed trace JSON만 저장하세요. Tool name과 field path도 내부 API 구조를 드러낼 수 있으므로 catalog artifact와 같은 접근 제어 및 보존 정책을 적용해야 합니다.