LP_2-test / examples /gpt5_2_example.py
DocUA's picture
feat: Інтеграція GPT-5.2 з підтримкою reasoning
492b465
"""
Приклад використання GPT-5.2 в проєкті Legal Position AI Analyzer
Цей файл демонструє, як використовувати нову модель GPT-5.2 з параметрами:
- reasoning_effort: "low", "medium", "high"
- verbosity: "low", "medium", "high"
- store: False (не зберігати в історії OpenAI)
"""
import os
from openai import OpenAI
# Ініціалізація клієнта OpenAI
client = OpenAI(api_key=os.getenv("OPENAI_API_KEY"))
def generate_with_gpt5_2(
court_decision_text: str,
reasoning_effort: str = "medium",
verbosity: str = "medium"
):
"""
Генерація правової позиції з використанням GPT-5.2
Args:
court_decision_text: Текст судового рішення
reasoning_effort: Рівень reasoning ("low", "medium", "high")
verbosity: Рівень деталізації відповіді ("low", "medium", "high")
Returns:
Згенерована правова позиція у форматі JSON
"""
system_prompt = """Ти - експерт-правознавець, який аналізує судові рішення
та формує правові позиції Верховного Суду України."""
user_prompt = f"""
Проаналізуй наступне судове рішення та сформуй правову позицію:
<court_decision>
{court_decision_text}
</court_decision>
Поверни результат у форматі JSON з полями:
- title: заголовок правової позиції
- text: текст правової позиції
- proceeding: тип судочинства
- category: категорія справи
"""
response = client.chat.completions.create(
model="gpt-5.2",
messages=[
{"role": "developer", "content": system_prompt},
{"role": "user", "content": user_prompt}
],
response_format={"type": "json_object"},
reasoning_effort=reasoning_effort,
verbosity=verbosity,
store=False,
max_completion_tokens=2048
)
return response.choices[0].message.content
def analyze_with_gpt5_2(
legal_position: dict,
existing_positions: list,
reasoning_effort: str = "medium"
):
"""
Аналіз релевантності існуючих правових позицій з використанням GPT-5.2
Args:
legal_position: Згенерована правова позиція
existing_positions: Список існуючих правових позицій
reasoning_effort: Рівень reasoning ("low", "medium", "high")
Returns:
Аналіз релевантності у форматі JSON
"""
system_prompt = """Ти - експерт-аналітик правових позицій Верховного Суду України."""
positions_text = "\n\n".join([
f"[{i+1}] {pos['title']}: {pos['text']}"
for i, pos in enumerate(existing_positions)
])
user_prompt = f"""
Проаналізуй релевантність існуючих правових позицій до нової позиції:
Нова позиція:
{legal_position['title']}: {legal_position['text']}
Існуючі позиції:
{positions_text}
Поверни аналіз у форматі JSON з полями:
- relevant_positions: список релевантних позицій з обґрунтуванням
"""
response = client.chat.completions.create(
model="gpt-5.2",
messages=[
{"role": "developer", "content": system_prompt},
{"role": "user", "content": user_prompt}
],
response_format={"type": "json_object"},
reasoning_effort=reasoning_effort,
verbosity="medium",
store=False,
max_completion_tokens=4000
)
return response.choices[0].message.content
# Приклад використання
if __name__ == "__main__":
# Тестовий текст судового рішення
test_decision = """
ПОСТАНОВА
ІМЕНЕМ УКРАЇНИ
Верховний Суд у складі колегії суддів...
[Тут має бути повний текст судового рішення]
"""
# Генерація правової позиції з високим рівнем reasoning
print("Генерація правової позиції з GPT-5.2...")
legal_position = generate_with_gpt5_2(
court_decision_text=test_decision,
reasoning_effort="high",
verbosity="high"
)
print(f"Результат: {legal_position}\n")
# Аналіз релевантності
print("Аналіз релевантності з GPT-5.2...")
existing = [
{
"title": "Про застосування норм ЦПК",
"text": "Верховний Суд вважає..."
}
]
import json
analysis = analyze_with_gpt5_2(
legal_position=json.loads(legal_position),
existing_positions=existing,
reasoning_effort="medium"
)
print(f"Аналіз: {analysis}")