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에 해당하면 마스킹합니다.kind는kr_rrn·kr_foreigner_id·email·kr_phone·payment_card,strategy는full_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만 동작합니다.
from llamon_agent import GuardrailConfig, SensitiveInfoMaskfrom 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"), ], ),)id와 sensitive_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 억제를 회귀 테스트에 포함했습니다.