Rxly.ai에서 풀고 싶었던 문제는 진료 대화를 기록으로 정리하는 부담이었습니다. 의사는 환자의 말을 듣는 동안 핵심 정보를 파악하고, 확인할 질문을 남기고, 진료가 끝난 뒤 사용할 문서까지 작성해야 합니다. 저는 대화를 들으며 기록 초안과 확인할 항목을 함께 준비하는 진료 보조 도구를 기획·개발했습니다. 미국 현직 의사들과 임상 요구사항을 정리하며, 환자를 만나고 있는 동안 사용할 수 있는 작업 화면에 초점을 두었습니다.
받아쓴 문장을 진료 맥락으로 바꾸기
전사본이 생겨도 기록 작업이 모두 끝나지는 않습니다. 환자가 말한 증상과 의사가 확인한 소견을 구분하고, 흩어진 대화를 병력·평가·계획 같은 항목으로 정리해야 합니다. 그래서 전사, 진료 중 인사이트, 감별진단 후보, 기록 초안을 하나의 진료 세션에 연결했습니다. 생성한 결과는 의사가 읽고 수정할 수 있는 작업 자료로 두었습니다.
실시간 음성 처리에서도 누가 말했는지를 알아내는 과정과 그 사람이 어떤 역할인지를 판단하는 과정을 나눴습니다. 음성 인식의 화자 번호만으로는 의사와 환자를 구분할 수 없기 때문입니다. 발화를 화자별로 분리한 뒤 대화 내용을 이용해 역할을 연결하고, 판단 전에는 미확인 상태로 둡니다. 화면에 잠시 나타나는 전사 중간 결과와 확정된 발화도 구분해 다룹니다. 의료용 음성 인식 모델을 지원하는 언어에는 해당 모델을 선택하지만, 모든 언어에서 같은 의료 용어 인식 성능이 나온다고 전제하지 않습니다.
대화가 이어져도 의사의 작업을 유지하기
진료 중 분석은 완성된 녹음 파일을 한 번 요약하는 작업과 달랐습니다. 새 대화가 들어올 때마다 전체 내용을 다시 보내면 요청이 커지고, 새 부분만 보내면 앞서 확인한 맥락을 놓칠 수 있습니다. 저는 평소에는 추가된 발화와 이전 요약을 전달하고, 주기적으로 전체 대화를 다시 확인하는 방식으로 구성했습니다. 의사가 인라인 의견을 남겼을 때에도 전체 맥락을 전달합니다. 분석 중 새 입력이 들어오면 다음 실행에 반영하도록 재실행 상태를 남겼습니다.
화면을 갱신할 때에는 의사가 이미 한 일도 지켜야 했습니다. 확인을 끝낸 체크리스트가 새 AI 응답과 함께 초기화되면 보조 도구가 오히려 작업을 늘립니다. 기존 항목의 식별자를 다음 요청에 보내고, 응답을 기존 항목과 맞춰 체크 상태와 의사 메모를 유지하게 했습니다. 의사가 직접 추가한 항목도 별도로 보존합니다. 인사이트의 품질뿐 아니라 사람이 수정한 내용과 AI가 새로 제안한 내용을 어떻게 합칠지가 구현의 중요한 부분이 됐습니다.
늦게 도착한 결과가 다른 진료에 섞이지 않도록
비동기 처리에서 특히 신경 쓴 경계는 진료 세션 전환이었습니다. AI 응답을 기다리다가 다른 진료를 열면 이전 응답이 늦게 도착할 수 있고, 예약된 자동 저장도 남아 있을 수 있습니다. 개발 과정에서 이 경로를 수정해, 요청을 시작한 세션과 현재 세션이 같은지 확인한 뒤 결과를 반영하도록 했습니다. 자동 저장 역시 예약 당시 세션을 기억하고 실행 직전에 다시 확인하며, 세션이 바뀌면 남은 타이머를 해제합니다. 화면상으로는 단순한 진료 목록 이동이지만 기록의 소속을 보장해야 하는 작업이었습니다.
의사가 출처를 따라갈 수 있는 답변
감별진단 후보와 연구 답변에는 확인할 수 있는 자료를 연결했습니다. 문헌 검색에는 PubMed와 Europe PMC, 약물 관련 자료에는 OpenFDA와 DailyMed, 임상시험에는 ClinicalTrials.gov를 사용했습니다. 기존의 다섯 의료 지식 소스에 질병 분류를 위한 ICD-11 조회를 별도로 결합했습니다. 서로 다른 자료를 한 종류의 권위로 취급하기보다, 무엇을 조회한 결과인지 구분해서 모델과 화면에 전달하려는 구조입니다.
외부 서비스 하나가 지연되거나 실패해도 나머지 검색 결과는 사용할 수 있도록 병렬 조회와 소스별 실패 처리를 넣었습니다. 프롬프트에는 실제로 결과가 있는 출처와 제목·링크를 전달하고, 모델이 이를 인용에 사용하도록 구성했습니다. 검색 결과가 없는 경우에도 모델이 후보를 생성할 수 있으므로, 모든 답변이 검색으로 입증됐다고 설명할 수는 없습니다. 인용을 따라가며 적절성을 검토할 수 있는 경로를 구현한 것이며, 자료 연결 자체가 진단 정확도를 보증하지는 않습니다.
문서 형식과 전송 전 검토까지 연결하기
기록 생성에는 전사뿐 아니라 의사가 남긴 메모와 기존 초안도 함께 사용합니다. 환자가 말한 내용, 의사가 덧붙인 내용, 이미 작성된 문서를 다음 생성 단계의 맥락으로 유지하기 위해서입니다. 구조화된 SOAP 기록에서 출발해, 필요한 항목을 가진 문서 템플릿을 만들고 편집하는 기능으로 확장했습니다. 진단 항목이 있는 템플릿에는 확정 진단을 선택하는 입력 요건을 둘 수 있어, 감별진단 후보와 문서에 기재할 진단을 구분하도록 했습니다.
병원 시스템으로 보내는 경로도 생성과 전송을 나눴습니다. FHIR R4 형식의 데이터 묶음을 먼저 준비하고 화면에서 내용을 검토한 뒤 Medplum으로 전송하도록 구현했습니다. 모델이 만든 구조화 데이터가 바로 외부 기록이 되지 않게 검토 지점을 둔 것입니다. 이는 표준 형식의 내보내기와 연결 코드를 갖춘 상태를 뜻하며, 실제 병원 EMR과의 상호운용성 검증을 마쳤다는 의미는 아닙니다.
출품작에서 확인한 구현 범위
전사와 분석이 이어지는 흐름을 반복해서 살펴볼 수 있도록 샘플 진료 대화를 재생하는 시뮬레이션도 만들었습니다. 녹음 중단과 재개, 분석 결과 갱신, 세션 이동 같은 앱 동작을 확인하는 데 사용할 수 있습니다. 의료 데이터를 다루는 경로에는 AES-256-GCM 기반 필드 암호화, 인증과 감사 로그, 요청 제한 등 HIPAA 요구사항을 참고한 통제를 구현했습니다. 시뮬레이션이나 이러한 기술 통제가 임상 검증 또는 규정 준수 감사를 대신하지는 않습니다.
기획부터 해커톤 출품까지 1개월 동안 단독으로 개발했고, Anthropic의 ‘Built with Opus 4.6’ Claude Code 해커톤에서 지원자 약 13,000명 중 유일한 한국인 파이널리스트(결선 230인)로 선발됐습니다. 출품한 것은 대화를 받아쓰는 단계부터 진료 중 분석, 기록 초안, 출처 조회와 내보내기까지 이어지는 프로토타입입니다. 의사의 문서 작성 시간이나 진단 결과가 얼마나 개선됐는지는 별도로 측정하지 않았습니다. 다음 검증 과제는 실제 진료 환경에서 전사와 화자 구분, 생성된 기록의 정확성, 의사의 검토 부담을 함께 평가하는 것입니다.
출품 데모 · 소스 코드 · 실시간 분석 흐름 · 전송 전 검토 구현