Разработка AI-системы подготовки юридических документов
AI-система генерирует черновики юридических документов (договоры, претензии, доверенности, исковые заявления) из структурированных данных. Ускоряет работу юристов на рутинных задачах, снижает стоимость типовых документов.
Архитектура системы
from openai import AsyncOpenAI
from dataclasses import dataclass
from enum import Enum
import json
client = AsyncOpenAI()
class DocumentType(Enum):
SERVICE_AGREEMENT = "contract_services"
NDA = "nda"
EMPLOYMENT = "employment_contract"
PRIVACY_POLICY = "privacy_policy"
COMPLAINT = "complaint_letter"
POWER_OF_ATTORNEY = "power_of_attorney"
CLAIM = "civil_claim"
@dataclass
class LegalDocumentRequest:
document_type: DocumentType
jurisdiction: str = "RU" # RU, BY, KZ
parties: list[dict] = None
subject_matter: str = ""
special_conditions: list[str] = None
template_id: str = None
class LegalDocumentGenerator:
def __init__(self):
self.templates = self.load_templates()
self.jurisdiction_rules = self.load_jurisdiction_rules()
async def generate(
self,
request: LegalDocumentRequest,
output_format: str = "docx" # docx, pdf, markdown
) -> bytes:
# Загружаем шаблон для типа документа
template = self.templates.get(request.document_type.value, {})
jurisdiction_context = self.jurisdiction_rules.get(request.jurisdiction, "")
response = await client.chat.completions.create(
model="gpt-4o",
messages=[{
"role": "system",
"content": f"""Ты — юрист-практик, специализирующийся на {request.jurisdiction} праве.
Создай юридически грамотный черновик документа.
ТРЕБОВАНИЯ:
- Юрисдикция: {request.jurisdiction}
- Актуальное законодательство на 2024–2025 год
- Чёткие, однозначные формулировки
- Стандартная структура для данного типа документа
- Плейсхолдеры для данных, которых нет: [ДАТА], [СУММА], etc.
Правовой контекст: {jurisdiction_context}
Шаблон структуры: {json.dumps(template, ensure_ascii=False)}
ВАЖНО: Это черновик для проверки юристом, не финальный документ."""
}, {
"role": "user",
"content": f"""
Тип документа: {request.document_type.value}
Стороны: {json.dumps(request.parties, ensure_ascii=False) if request.parties else 'не указаны'}
Предмет: {request.subject_matter}
Особые условия: {', '.join(request.special_conditions or [])}
"""
}]
)
document_text = response.choices[0].message.content
return self.format_document(document_text, output_format)
Шаблоны с заполняемыми полями
DOCUMENT_TEMPLATES = {
"nda": {
"structure": [
"Преамбула (стороны, дата)",
"Определение конфиденциальной информации",
"Обязательства сторон",
"Исключения из конфиденциальности",
"Срок действия",
"Ответственность за нарушение",
"Применимое право и порядок разрешения споров",
"Реквизиты и подписи"
],
"required_fields": ["party_a", "party_b", "duration_years", "governing_law"],
"optional_fields": ["penalty_amount", "arbitration_clause"]
},
"contract_services": {
"structure": [
"Стороны договора",
"Предмет договора",
"Права и обязанности сторон",
"Стоимость и порядок оплаты",
"Сроки исполнения",
"Порядок приёма-передачи результатов",
"Ответственность сторон",
"Форс-мажор",
"Конфиденциальность",
"Срок действия и расторжение"
],
"required_fields": ["contractor", "client", "service_description", "price", "timeline"]
}
}
Анализ существующего документа
async def analyze_contract_risks(contract_text: str, party: str) -> dict:
"""Анализируем риски в договоре для указанной стороны"""
response = await client.chat.completions.create(
model="gpt-4o",
messages=[{
"role": "system",
"content": f"""Проанализируй договор с точки зрения рисков для стороны: {party}.
Выдели:
1. Невыгодные условия
2. Отсутствующие защитные клаузулы
3. Неоднозначные формулировки
4. Рекомендации по изменениям
Верни JSON: {{
risk_level: "low|medium|high",
risky_clauses: [{{clause: "...", risk: "...", recommendation: "..."}}],
missing_protections: ["..."],
overall_assessment: "..."
}}
ПРЕДУПРЕЖДЕНИЕ: только первичный анализ, требует проверки юриста."""
}, {
"role": "user",
"content": contract_text[:8000]
}],
response_format={"type": "json_object"}
)
return json.loads(response.choices[0].message.content)
Генерация DOCX через python-docx
from docx import Document
from docx.shared import Pt, Cm
import io
def generate_docx(document_text: str, title: str) -> bytes:
doc = Document()
# Настройка страницы
section = doc.sections[0]
section.top_margin = Cm(2)
section.bottom_margin = Cm(2)
section.left_margin = Cm(3)
section.right_margin = Cm(1.5)
# Добавляем контент
for line in document_text.split("\n"):
if line.startswith("## "):
p = doc.add_heading(line[3:], level=1)
elif line.startswith("### "):
p = doc.add_heading(line[4:], level=2)
elif line.strip():
p = doc.add_paragraph(line)
p.style.font.size = Pt(12)
p.style.font.name = "Times New Roman"
buf = io.BytesIO()
doc.save(buf)
return buf.getvalue()
Важные оговорки
Система генерирует черновики для ускорения работы юриста. Финальный документ обязательно проверяется квалифицированным юристом перед подписанием. Система не заменяет юридическую консультацию.
Сроки: генератор типовых договоров (NDA, договор оказания услуг) — 2–3 недели. Полноценная платформа с анализом рисков, версионированием и электронной подписью — 2–3 месяца.







