OLAW — Open Legal AI Workbench

OLAW는 법률 질의응답을 위한 tool-based RAG 워크벤치다. LLM이 먼저 검색 대상을 고르고, 사용자가 확인한 뒤, CourtListener 같은 법률 API를 호출해 근거를 붙이는 방식으로 동작한다.

한줄 요약

OLAW는 Harvard Library Innovation Lab이 만든 실험적 법률 AI 프로토타입이다. 단순 챗봇이 아니라 검색 타겟 추출 → 사용자 확인 → 법률 검색 → 스트리밍 답변으로 이어지는 워크플로우를 제공한다.

핵심 포인트

  • 법률 특화 RAG: 법률 질문에 대해 외부 API를 검색 도구로 붙이는 구조
  • 명시적 검색 타겟: 현재는 courtlistener 하나를 중심으로 설계
  • LLM 분리 단계: /api/extract-search-statement/api/complete를 분리해 검색과 답변 생성을 분리
  • OpenAI + Ollama 지원: 로컬/원격 모델 둘 다 염두에 둔 구성
  • 모듈식 확장: 새 검색 도구는 SEARCH_TARGETS 목록, 프롬프트, SearchTarget 구현만 추가하면 됨
  • 실험용 보일러플레이트: 프로덕션 완성형이 아니라 연구·UX 실험용

아키텍처 메모

코드를 보면 흐름이 꽤 선명하다.

  1. 사용자가 법률 질문을 입력한다.
  2. LLM이 질문을 보고 검색 필요성과 검색문을 JSON으로 뽑는다.
  3. UI가 검색 제안을 보여주고 사용자의 확인을 받는다.
  4. 확인 후 CourtListener 검색을 실행한다.
  5. 검색 결과를 컨텍스트로 넣어 최종 답변을 스트리밍한다.

즉 OLAW는 법률 검색 API를 LLM의 도구로 감싼 얇은 오케스트레이션 레이어다. 모델 성능 자체보다, 프롬프트 설계·검색 대상 선택·검색 결과 포맷이 더 중요하다.

API 표면

README 기준 핵심 엔드포인트는 다음과 같다.

  • GET /api/models — 사용 가능한 모델 목록
  • POST /api/extract-search-statement — 질문에서 search target과 search statement 추출
  • POST /api/search — 선택된 search target에 대해 검색 실행
  • POST /api/complete — 검색 컨텍스트를 포함해 스트리밍 응답 생성

구현상 특징

  • Flask 앱 팩토리 패턴을 사용한다.
  • Flask-Limiter로 API rate limit을 건다.
  • 환경변수로 프롬프트와 provider 설정을 제어한다.
  • OpenAIollama.Client를 분기 처리한다.
  • CourtListener 결과는 prompt_text/ui_text/ui_url을 따로 만든다.

이건 단순 데모보다 한 단계 더 나가 있다. 검색 결과를 사람용 UI와 LLM용 컨텍스트로 분리해서, 같은 데이터를 두 관점으로 재포장한다.

왜 의미가 있나

이 저장소는 다음으로 읽을 수 있다.

  • 법률 업무용 에이전트 하네스의 가장 단순한 형태
  • 검색 타겟을 도구로 분리하는 설계는 다른 전문 도메인에도 그대로 확장 가능
  • “에이전트가 마음대로 답변”보다 “검색 제안을 먼저 만들고 사용자 확인을 받는 구조”가 신뢰성 면에서 유리
  • 법률 같은 고위험 도메인에서 근거를 먼저 찾고 답을 나중에 쓰는 UX를 보여준다

주의할 점

  • README와 코드 모두 실험용임을 분명히 밝힌다.
  • 법률 자문용이 아니며, 결과를 그대로 신뢰하면 안 된다.
  • 현재 구현은 CourtListener 중심이라 범용 법률 플랫폼이라기보다 특정 검색 백엔드에 강하게 묶인 연구용 작업대에 가깝다.
  • 새 검색 타겟을 추가하려면 프롬프트 품질과 결과 포맷을 다시 맞춰야 한다.

관련 노트