콘텐츠로 이동

v0.4.1

릴리스이전 버전

v0.4.1은 v0.4.0 orchestration 플랫폼 위에 SDK가 직접 소유하는 개인정보 마스킹을 추가하고 runtime evaluator 판정과 orchestrator 결과 검증을 durable하게 안정화한 릴리스입니다. Studio AI와 observability 경로도 함께 하드닝했습니다.

Breaking 없음 — 기존 agent/flow/orchestrator 프로젝트는 그대로 동작합니다. 개인정보 마스킹은 GuardrailConfig.sensitive_info를 명시할 때만 적용되고 나머지는 refinement·하드닝입니다.

  • 개인정보 마스킹 — SDK가 소유하는 deterministic detector SensitiveInfoMask가 Registry 없이 단독으로 또는 기존 Registry 가드레일과 함께 동작합니다. Registry rule ID·이름·pattern을 개인정보 종류로 추측하지 않으므로 Registry regex가 놓친 값도 설정한 kind에 해당하면 마스킹합니다. kindkr_rrn·kr_foreigner_id·email·kr_phone·payment_card, strategyfull_v1·front6_v1·front7_v1·domain_v1·local_first_v1·middle_v1·last4_v1이며 kind별로 허용 strategy를 검증합니다. TextPart와 DataPart 모두 안전하게 투영합니다.
  • 설정 가능한 evaluation judge — runtime evaluator의 judge를 judge_llm으로 지정하고 judge 판정 로직을 fail-closed로 안정화했습니다.
  • Durable outcome verification — orchestrator 결과 검증(VerificationEvaluatorAdapter)과 deterministic result gate·bounded transition을 durable checkpoint 경계에서 확정하도록 정리했습니다.
  • Studio AI 하드닝 — bounded agent loop, ProposalChecks, 로그 privacy, serializer 안전성, operation·knowledge sidecar transaction, destructive preview·confirmation을 회귀 테스트로 고정했습니다.
  • Observability 하드닝 — evaluation API를 일관된 계약으로 정리하고 score·tag·metadata·observation 설계 가이드를 추가했으며 console trace logging을 완전히 비활성화할 수 있게 했습니다.
  • Orchestrator 스캐폴드 — 새 스캐폴드를 agentic-first로 바꾸고 data-summary 스캐폴드에는 검증된 model-generated work-summary keyword 계약이 있습니다.
  • A2A task history privacy — inbound 서버가 A2A Task.history 프로토콜 필드를 저장·응답 전에 항상 비웁니다(PrivacyAwareTaskStore가 backend 앞에 기본 적용). 현재 요청 message와 orchestrator·workflow의 metadata.history 실행 입력, agent 동작과 cold-start prefill은 그대로입니다.

GuardrailConfig에서 id를 생략하고 sensitive_info만 선언하면 Registry 조회와 prompt judge LLM 호출 없이 detector만 동작합니다.

app/config.py
from llamon_agent import GuardrailConfig, SensitiveInfoMask
from llamon_agent.agent import Agent
AGENT = Agent(
model="qwen3",
provider="ollama",
output_guardrail=GuardrailConfig(
mask_replacement="[REDACTED]",
sensitive_info=[
SensitiveInfoMask(kind="kr_rrn", strategy="front7_v1"),
SensitiveInfoMask(kind="email", strategy="domain_v1"),
],
),
)

idsensitive_info를 모두 생략한 빈 GuardrailConfig는 거부되고 Registry 없는 설정에서 의미가 없는 regex_action·prompt_action·judge_llm도 설정 오류로 처리됩니다. SensitiveInfoMask 자체가 항상 마스킹 정책이므로 별도의 action="mask"는 없습니다. Registry 정책과 함께 쓰면 Registry block 판정이 우선하고 그다음 SDK detector가 kind별 strategy를 적용합니다.

자세한 설정과 우선순위는 개인정보 마스킹을 보세요.

시나리오작업
기존 agent/flow/orchestrator수정 불필요
개인정보 마스킹 도입GuardrailConfig(sensitive_info=[SensitiveInfoMask(...)])를 output guardrail에 추가
evaluation judge 지정evaluator에 judge_llm을 명시 (미지정 시 기존 동작 유지)
A2A 응답의 Task.history로 대화 내역을 재구성하던 클라이언트Task.history가 항상 []로 반환됩니다. agent 실행 입력(metadata.history·현재 message)과 멀티턴 동작은 불변이므로, 클라이언트는 자신이 주고받은 메시지로 내역을 유지하세요

개인정보 마스킹(TextPart·DataPart), 설정 가능한 judge, durable verification, Studio AI 하드닝, trace console 비활성화, A2A task history 억제를 회귀 테스트에 포함했습니다.