Numan 은 체중, 호르몬, 성 건강 등 장기적인 건강 문제를 관리하도록 환자를 돕는 영국의 디지털 헬스 기업입니다. 우리 환자 다수가 체중 감량 프로그램에 참여 중이며, 진행 상황을 추적하기 위해 매일 앱을 사용합니다.
저희 AI 건강 코치인 Nu를 개발할 때 설계상의 과제 중 하나는 의료 진단, 처전 또는 임상적 의사결정—고도로 규제된 의료 분야에서 에이전트에게 엄격한 경계선—으로 넘어가지 않으면서 고품질의 건강 코칭을 제공하는 것이었습니다. 처음에는 에이전트와 그 주변의 자동화에 집중했지만, 실제로 가장 중요했던 것은 평가 기준의 품질이었습니다. 이것이 규제 대상 영역을 피하면서 고품질의 사용자 경험을 제공하기 위해 평가 기준을 개발하고 개선한 이야기입니다.
표준 평가 방식이 Nu에 부족했던 이유
우리는 대부분의 팀이 시작하는 곳에서 시작했습니다. 즉, 입력과 기대 출력의 데이터셋, 그리고 각 답변을 채점하는 LLM 판정기였습니다. 그 플레이북이 Q&A 에이전트에는 잘 맞지만, 코칭은 답변이 아니라 대화입니다. Nu의 답변을 미리 고정하는 모든 접근 방식은 두 가지 방식으로 실패했습니다:
1. 정적 fixture에 대한 단일 턴 평가 (고정된 입력, 고정된 기대 출력, 그리고 하나의 답변만을 독립적으로 채점하는 판정기). 행동 코칭에서는 프롬프트에 대한 하나의 정답이 존재하는 경우가 드물고, 답변이 안전했는지 여부는 그 답변을 둘러싼 대화에 달려 있습니다. Nu는 조언하기 전에 대화 전반에 걸쳐 환자의 걸림돌이 무엇인지 이해해야 하고, 환자가 밀어붙일 때 올바른 경계를 유지해야 합니다.
전체 데이터셋에 걸쳐 하나의 점수를 평균 내는 방식은 Nu가 어디서 실패했는지를 가려버렸습니다. 몇 개의 나쁜 답변은 숫자를 거의 움직이지 못하므로, 실제로는 그렇지 않은데도 대화가 규정을 준수하는 것처럼 보입니다. fixture는 또 다른 문제를 일으켰습니다. 한 번의 실행에서 낮은 점수 무리가 밝혀진 것은 Nu가 아니라 평가 자체의 잘못이었습니다. 루브릭은 공감, 탐색 그리고 조언을 모두 두 턴의 교환 안에서 요구했지만, 인간 코치라면 이를 대화 전반에 걸쳐 배분했을 것입니다. Nu는 제대로 코칭하고 있었지만, 좁고 고정된 평가가 잘못된 실패 신호를 보낸 것입니다.
2. 스크립트화된 멀티 턴 대화. 단일 턴 fixture에 대한 명백한 해결책은 환자의 예상 답변 연속을 미리 작성하는 것입니다. 이 "스크립트"를 사용하면 시나리오의 여러 턴을 한 번에 하나씩 Nu에 입력하고, 판정기가 마지막에 전체 대화 기록을 채점할 수 있습니다. 단일 답변보다 판정기에 더 많은 여유를 주지만, 평가는 같은 방식으로 무너졌습니다. 환자의 두 번째 턴이 미리 작성되어 있으면, 테스트는 Nu가 첫 번째 턴에서 실제로 말한 것을 무시합니다. Nu가 스크립트가 예상하지 못한 말을 하는 순간, 이후의 모든 턴은 실제로 일어나지 않은 대화에 답변하게 됩니다.
이 2가지 실패 모드가 이후 우리가 만든 모든 것의 방향을 결정했습니다.
오늘날 우리가 운영하는 평가 프레임워크
Nu는 LangGraph 그래프입니다. 슈퍼바이저 모델이 도메인 전문 서브 에이전트들로의 handoff를 조율하며, 각 서브 에이전트는 자체 프롬프트와 도구를 갖추고 하나의 코칭 영역에 집중합니다. 이 구성 모델은 새로운 전문가를 저렴하게 추가할 수 있게 하고, 더 중요하게는, 모든 전문가에 걸쳐 평가 대상 표면을 균일하게 유지합니다.
Nu가 올바르게 해야 하는 것 중 일부 는 단일 답변만으로 판단할 수 있습니다. 예를 들어, 슈퍼바이저가 올바른 전문가로 라우팅했는지, 약물 질문에 안전한 답변을 했는지, 안전 가드가 의도한 것을 잡았는지 등입니다. 이를 위해 우리는 코칭 품질, 안전, 약물 질의, 라우팅, 요약에 걸친 테마별 데이터셋을 실행합니다. 초기의 단일 턴 평가와 달리 두 가지를 바꿨습니다: 1) 모든 데이터셋이 하나의 평균이 아니라 LLM 판정기가 카테고리별로 채점하므로, 나머지가 건강해 보이더라도 한 카테고리의 실패 무리가 계속 보입니다. 그리고 2) 각 루브릭은 단일 답변이 보여줄 수 있는 것만 묻기 때문에, 판정기가 더 이상 코치처럼 대화의 속도를 조절하는 Nu에게 벌점을 주지 않습니다.
fixture가 다룰 수 없는 모든 것(즉, 대화 전체의 형태를 필요로 하는 것)은 아래에서 설명할 별도의 계층을 갖습니다. Nu가 그래프이기 때문에, 평가는 전체 시스템을 대상으로 하거나 단일 서브 에이전트를 대상으로 할 수 있으며, 새로운 전문가는 평가 표면을 자동으로 상속받습니다.
"우리가 출시하는 것이 곧 우리가 테스트하는 것이다"
평가를 구축하는 쉬운 방법은 에이전트의 프롬프트를 복사하여 모델을 직접 호출하는 별도의 하네스를 만드는 것입니다...이는 하네스와 프로덕션이 어긋날 때까지는 잘 작동합니다. 우리는 별도의 하네스가 없으며 우리가 출시하는 것이 곧 우리가 테스트하는 것이라는 원칙 아래 운영됩니다. 모든 평가는 환자가 대화하는 것과 동일한 LangGraph 그래프를 통해 실행되므로, 우리가 채점하는 것이 곧 환자가 만나는 것입니다.
확장하면서 우리는 슈퍼바이저와 도메인 전문가들이 서로 다른 인지 작업을 수행하기에 하나의 공급자가 모든 에이전트에게 적합한지 질문하기 시작했습니다. Nu는 오늘날 에이전트별로 선택된 두 개의 프론티어 공급자에서 실행됩니다: 하나는 슈퍼바이저용, 다른 하나는 전문가용입니다. 열린 테마별 데이터셋으로 구축되어 어떤 구성이든 지정할 수 있는 평가 스위트의 이식성 덕분에, 동일한 데이터셋을 공급자 간에 실행하고 결과를 나란히 비교했습니다. 프론티어 공급자 간 마이그레이션은 보통 수 주의 수동 테스트가 필요하지만, 단 하루 만에 완료되었습니다.
규제 경계를 지키기 위한 행동 테스트
MHRA 지침에 따르면, 의료 목적(임상 조언, 진단 또는 치료 권고)을 가진 소프트웨어 기반 제품은 의료기기가 됩니다. Nu는 임상 진료가 아닌 라이프스타일 코칭과 교육을 위한 웰니스 제품으로 설계되었습니다.
Nu를 그 범위 안에 유지하는 것은 모든 변경 시마다 확인하는 사항입니다. 안전 프로브는 카테고리별 지표로 실행되어 릴리스를 게이트합니다: 그곳에서의 회귀는 변경 사항의 자동 출시를 차단합니다. 우리는 safe-completion, 즉 코치처럼 들리면서도 선을 지키는 리다이렉션으로 조정하여, 범위를 벗어난 질문을 하는 환자가 갑작스러운 거절 대신 따뜻하고 유용한 답변을 받도록 합니다.

테스트를 넘어, 가드 노드는 그래프 안의 모든 대화에서 실행됩니다. 안전 가드는 환자가 보기 전에 각각의 발신 응답을 고정된 임상 안전 규칙 집합과 대조하여 검토합니다. 안전하지 않은 초안은 감독자(supervisor)에게 되돌려져 재생성됩니다. 계속 실패하면 안전하지 않은 응답을 전달하는 대신 안전한 폴백(fallback) 메시지로 대체됩니다. 그리고 가드가 그래프 안에 있기 때문에 동일한 평가 표면 안에 존재합니다—우리의 테마별 데이터셋 중 하나가 바로 안전 가드가 잡아야 할 것을 잡는지 시험하기 위해 존재하는 곳입니다. 또한 헬스 코치들이 매일 실제 대화 표본을 검토하고 안전 실패로 보이는 것을 표시하여, 인간 전문가가 무엇이 안전한지에 대한 기준을 보정합니다.
대화를 스크립트로 작성하는 대신 시뮬레이션하기
오늘날 프로토타입 단계에 있는 우리의 가장 최신 계층은 대화를 스크립트로 작성하는 대신 시뮬레이션합니다. 우리는 평가에 환자 페르소나, 시나리오, Nu가 끌어내야 할 핵심 문제, 그리고 턴 제한을 제공합니다. 더 저렴한 모델이 환자 역할을 하며 실제 에이전트와 멀티턴 대화를 나누고 Nu가 말하는 모든 것에 반응합니다. 그런 다음 심판(judge)이 전체 대화 기록을 카테고리별로 채점합니다. 환자가 고정된 것이 아니라 생성되기 때문에, 적대적 사례(임상 요청을 코치에게 몰래 통과시키려는 표현, 평범한 질문으로 위장한 조작)를 탐색하고 픽스처(fixture)로는 결코 마주치지 않는 실패를 잡아낼 수 있습니다. 예를 들어, 코치가 그렇게 해야 하듯이 원인을 조사하는 대신 Nu가 성급하게 답을 서두르는 경우입니다.
이런 종류의 시뮬레이션된 대화를 통한 프롬프트 강화는 규제 경계에 대한 탈옥(jailbreak) 시나리오에서 심각한 범위 위반을 줄였습니다. 우리는 프롬프트 개선이 이미 신뢰하던 동작을 깨뜨리지 못하도록 회귀 게이트 역할을 하는 병렬 약물 질의 평가를 실행했습니다.
시뮬레이션된 대화 계층을 회귀 없이 지속적인 개선에 활용하는 것은 공학 문제라기보다 평가 기준(rubric) 문제에 가깝습니다. 이 계층의 기준을 처음 작성할 때, 호환될 것이라 생각했던 두 테마가 약 복용 누락 처리에서 서로 모순됨이 밝혀졌습니다. 하나는 거절하고 임상의에게 안내라고 했고, 다른 하나는 환자 정보 리플렛의 일반 정보로 안전 완료(safe-completion)라고 했습니다. 하나의 프롬프트로는 둘 다 만족시킬 수 없습니다. 이 프롬프트 충돌 사례는 우리에게 한 가지를 가르쳐 주었습니다. 즉, 희소하고 가치 있는 자산은 프롬프트가 아니라 평가 기준입니다. 유능한 모델은 제한된 맥락만으로도 프롬프트를 잘 작성할 수 있습니다. 그리고 규제 경계에서는 그 기준이 엔지니어가 아니라 규제 경계선도 이해하는 임상의가 작성하고 승인해야 합니다. Nu의 시뮬레이션된 대화 결과는 공학자가 작성한 기준으로 판정되기 때문에, 임상의가 평가 기준(rubric)에 서명 승인하기 전까지는 이 계층이 릴리스를 게이트하거나 어떠한 안전 주장에도 반영되지 않습니다(이것이 제품을 경계선의 웰니스 쪽에 유지하는 장치입니다).
스택: LangGraph와 LangSmith

LangGraph와 LangSmith는 하나의 시스템으로 결합되어 우리의 에이전트 개발 스택을 구성합니다.
LangGraph는 에이전트입니다. 감독자(supervisor)가 도메인 전문가들을 트리거하며, 각 전문가는 자체 프롬프트와 도구를 갖습니다.
평가는 그 동일한 그래프를 통해 실행됩니다. 픽스처 평가 계층과 시뮬레이션된 대화 평가 계층 모두 실제 에이전트를 대상으로 하며, 전체 시스템 또는 단일 하위 에이전트를 목표로 할 수 있습니다.
LangSmith는 모든 것이 측정되는 곳입니다. 모든 대화, 시뮬레이션이든 실제든, 트레이스(trace)로 기록됩니다. 리뷰어가 이 트레이스들에 주석을 달아 지속적인 품질 개선 루프를 시작합니다. 데이터셋과 실험도 그곳에 존재합니다. 예를 들어, 하루 만에 마이그레이션을 완료한 배경이 된 공급자 나란히 비교는 LangSmith에서 바로 읽어냈습니다.
LangGraph와 LangSmith의 통합은 평가 실행 비용을 낮게 유지합니다. 서로 분리된 세 가지 도구를 잇는 접착 코드(glue code)가 없습니다. 우리가 출시하는 것과 우리가 테스트하는 것은 동일한 그래프이며, 동일한 플랫폼이 지켜봅니다.
우리가 향하는 방향: 에이전트뿐 아니라 기준의 확장
코칭 품질은 1) 대화가 좋았는지를 판단하는 기준을 작성하는 것, 그리고 2) 그 기준이 테스트되는 범위를 넓히는 것에 달려 있습니다. 그래서 우리는 더 많은 적대적 페르소나와 시나리오를 테스트하고, 더 많은 전문가를 만들면서 더 많은 테마를 추가하며, 안전이나 범위에 닿는 곳마다 임상의가 참여하는 평가 기준을 확장하는 데 집중하고 있습니다. 리뷰어들은 LangSmith에서 실제 대화를 계속 읽고, 엔지니어가 여전히 모든 프롬프트 변경을 직접 올립니다.
지금까지 설명한 모든 것은 오프라인 단계로, 변경 사항이 출시되기 전에 규제 경계선을 유지하는지 입증합니다. 다음 단계는 실제 대화가 LangSmith에 들어올 때 동일한 평가 기준을 대화의 Nu 쪽에 지속적으로 채점하는 온라인 평가자입니다. 오늘날 코치들이 검토하는 일일 표본 대신, 인간 리뷰어는 평가자가 이미 표시해 둔 대화에서 시작하게 됩니다—프로덕션에서 경계가 지켜지는지 지켜보고 오탐(false alarm) 시 평가 기준을 다듬기 위해서입니다.
또한 신뢰할 수 있는 평가 기준을 따르는 워크플로를 자동화하기 위한 초기 실험에서 고무적인 결과를 보고 있습니다. 여기에는 검토된 대화를 우선순위가 매겨진 백로그로 분류하는 것과 고정된 벤치마크에 맞춰 프롬프트를 튜닝하는 것이 포함됩니다. 최근에는 단일 행동 벤치마크를 겨냥한 오프라인 프롬프트 최적화 루프가 손튜닝 없이도 점수를 유의미하게 향상시켰습니다... 이는 기준을 올바르게 잡으면 나머지는 자동화할 수 있다는 우리의 가설을 뒷받침합니다.
규제 경계선 근처에서 AI 코치 만들기
규제 경계선 근처 어디에서든 대화형 에이전트를 구축하고 있다면, 다음은 우리의 권고 사항입니다:
- 고정된 데이터셋은 전체 대화를 커버할 수 없습니다. 단일 응답으로 보여줄 수 있는 것은 픽스처를 유지하고, 나머지는 대화를 시뮬레이션하며, 종합 점수를 좇기보다 카테고리별로 채점하세요.
- 경계를 프로브로 만드세요. 모든 변경 시마다 실행하고, 회귀가 릴리스를 차단하게 하며, 동일한 루브릭을 프로덕션에도 적용하세요.
- 규제 대상 경계에서는 루브릭이 임상의의 몫입니다. 엔지니어링 관점에서 작성된 기준은 하네스를 가동하기에는 충분하지만, 안전성 주장을 승인하기에는 충분하지 않습니다.
- 노력의 대부분을 평가 기준에 투자하세요. 그 이후의 모든 것은 평가 기준에서 비롯됩니다. 더 나은 코칭, 방어 가능한 경계, 그리고 장기적으로 신뢰할 수 있는 자동화까지요.
기준과 자동화가 성숙해지면 다시 글을 쓰겠습니다.
Nu는 LangGraph 와 LangSmith를 기반으로 구축되었습니다. Numan의 AI 시스템은 여러 건강 도메인에 걸친 건강 코칭 대화를 처리합니다. Nu는 웰니스 제품으로 운영되도록 설계되었으며 의료기기가 아닙니다. 코칭과 건강 교육을 제공하며, 진단, 처방, 질병 모니터링 또는 임상 결정의 수행이나 지원은 하지 않습니다.
