Python으로 자율 법률 계약 감사기 구축
I’m happy to translate the article for you, but I’ll need the full text you’d like translated. Please paste the content (excluding the source line you already provided), and I’ll return a Korean version while preserving the original formatting, markdown, and code blocks.
자율 법률 계약 감사자 – 기술 개요
Python 기반 자율 에이전트를 구축하여 예비 법률 감사 역할을 수행합니다. 이 에이전트는 서비스 계약서를 스캔하고, 기업 컴플라이언스 정책 집합(예: 결제 조건, 책임 한도)과 교차 검증한 뒤 위험 평가 보고서를 생성합니다. 단순 스크립트가 아니라, 에이전시 워크플로우가 실제 비즈니스 병목 현상을 어떻게 해결할 수 있는지를 보여주는 사례입니다.
Source Code:
왜 첫 번째 단계 AI 감사자가 필요한가?
다양한 프로젝트 팀과 협업하면서 법률 검토 단계가 종종 민첩성을 죽이는 구간이라는 것을 경험했습니다. 이는 변호사들의 잘못이 아니라, 그들이 과중한 업무에 시달리기 때문입니다. 저는 스스로에게 물었습니다:
“눈에 띄는 문제들을 표시해 주는 첫 번째 단계 AI 감사자를 만들 수 있다면 어떨까요?”
목표는 변호사를 대체하는 것이 아니라, 엔지니어나 제품 관리자가 명백한 문제(예: 누락된 관할법 조항)를 법률 자문을 받기 전에 스스로 수정할 수 있도록 역량을 강화하는 것입니다.
도구가 하는 일
명령줄 인터페이스(CLI)로:
-
계약을 수집합니다(평문 텍스트로 시뮬레이션).
-
**“규칙 데이터베이스”**에 대해 파싱합니다(예: 지불 조건).
예시 상호작용:
CLI: 계약 텍스트 제출 CLI->>Engine: 규칙 로드 및 계약 평가 Engine->>DB: 규칙 정의 검색 Engine-->>CLI: 결과 및 점수 반환 CLI->>User: 준수 보고서 표시
에이전트는 각 규칙을 순회하면서 구체적인 실패 항목에 대한 세부 보고를 제공하며, 일반적인 “잘못된 계약” 오류 대신 보다 상세한 정보를 제공합니다.
프로젝트 구조
autonomous-legal-auditor/
├─ main.py # CLI entry point
├─ compliance/
│ ├─ engine.py # Rule evaluation logic
│ └─ rules.yaml # Rule definitions (data, not code)
├─ models/
│ └─ rule.py # dataclass for a compliance rule
├─ utils/
│ └─ display.py # Rich UI helpers
└─ requirements.txt
핵심 코드 스니펫
1️⃣ 규칙 정의 (dataclass)
# models/rule.py
from dataclasses import dataclass
@dataclass
class ComplianceRule:
id: str
category: str
description: str
severity: str # "CRITICAL", "HIGH", "MEDIUM", "LOW"
check_logic: str # reference to a function name
2️⃣ 샘플 규칙 데이터베이스 (YAML)
# compliance/rules.yaml
- id: PAY-001
category: Payment Terms
description: >-
Payment terms must not exceed 45 days upon receipt of invoice.
severity: HIGH
check_logic: max_days_check
# ... more rules ...
3️⃣ 분석 엔진 (단순화)
# compliance/engine.py
from typing import Dict, Any, List
from models.rule import ComplianceRule
class ComplianceEngine:
def __init__(self, rules: List[ComplianceRule]):
self.rules = rules
def analyze_contract(self, contract_text: str) -> Dict[str, Any]:
results = {"findings": [], "score": 100}
for rule in self.rules:
# Simulation: In production, insert LLM or Regex logic here
has_violation = self._check_rule(rule, contract_text)
if has_violation:
results["findings"].append({
"rule_id": rule.id,
"status": "FAIL",
"severity": rule.severity,
"detail": f"Violation detected: {rule.description}"
})
results["score"] -= self._get_deduction(rule.severity)
else:
results["findings"].append({
"rule_id": rule.id,
"status": "PASS",
"severity": rule.severity,
"detail": "Compliant."
})
return results
# ---- Helper methods (stubs) ----
def _check_rule(self, rule: ComplianceRule, text: str) -> bool:
# Placeholder – replace with real logic/LLM call
return False
def _get_deduction(self, severity: str) -> int:
return {"CRITICAL": 30, "HIGH": 20, "MEDIUM": 10, "LOW": 5}.get(severity, 0)
4️⃣ 풍부한 UI 표시
# utils/display.py
from rich.console import Console
from rich.table import Table
from rich.progress import Progress
def show_progress():
console = Console()
with Progress() as progress:
task = progress.add_task("[cyan]Parsing natural language...", total=100)
while not progress.finished:
progress.update(task, advance=5)
def render_results(results):
console = Console()
table = Table(title="Compliance Findings", border_style="blue")
table.add_column("Rule ID", style="magenta")
table.add_column("Status", style="green")
table.add_column("Severity", style="red")
table.add_column("Detail")
for f in results["findings"]:
table.add_row(
f["rule_id"],
f["status"],
f["severity"],
f["detail"]
)
console.print(table)
console.print(f"[bold]Overall Score:[/] {results['score']}")
5️⃣ CLI 진입점
# main.py
import sys
from rich.console import Console
from models.rule import ComplianceRule
from compliance.engine import ComplianceEngine
from utils.display import show_progress, render_results
import yaml
def load_rules(path: str) -> list[ComplianceRule]:
with open(path) as f:
raw = yaml.safe_load(f)
return [ComplianceRule(**r) for r in raw]
def main():
console = Console()
console.print("[bold cyan]🚀 Autonomous Legal Contract Auditor[/]")
# Load mock contract (could be replaced with a file argument)
contract_text = open("sample_contract.txt").read()
# Load rules
rules = load_rules("compliance/rules.yaml")
engine = ComplianceEngine(rules)
# Show progress animation
show_progress()
# Run analysis
results = engine.analyze_contract(contract_text)
# Render table
render_results(results)
if __name__ == "__main__":
sys.exit(main())
시작하기
# Clone the repository
git clone https://github.com/aniket-work/autonomous-legal-auditor.git
cd autonomous-legal-auditor
# Install dependencies
pip install -r requirements.txt
# Run the auditor (uses a mock contract)
python main.py
활기찬 터미널 UI가 표시됩니다: 파싱 애니메이션, 규칙 검사, 그리고 최종 대시보드에 컴플라이언스 통계가 나타납니다.
향후 방향
- 로컬 LLM에 연결하여 실제 텍스트 추출 및 정교한 규칙 평가 수행.
- 규칙 집합 확장 (책임 한도, 적용 법률, 데이터‑프라이버시 조항).
- 비기술 이해관계자를 위한 웹 UI 추가.
PoC는 수직 AI 에이전트—깊고 도메인‑특화 작업에 특화된—가 미래임을 보여줍니다. 일반 챗봇 대신 계약서(지불 조건, 책임, 적용 법률 등)의 언어를 “구사”하는 집중된 도구를 만들었습니다.
여기에 표현된 견해와 의견은 전적으로 저 개인의 것이며 어떠한 조직의 견해를 대변하지 않습니다.
저의 고용주나 제가 소속된 어떠한 조직의 견해, 입장, 혹은 의견도 아닙니다.
내용은 저의 개인적인 경험과 실험에 기반한 것이며 불완전하거나 부정확할 수 있습니다. 오류나 오해는 의도된 것이 아니며, 어떠한 진술이 오해되거나 잘못 전달될 경우 미리 사과드립니다.