69 lines
3.2 KiB
Python
69 lines
3.2 KiB
Python
"""Generate «Руководство оператора» text via OpenRouter."""
|
|
|
|
from __future__ import annotations
|
|
|
|
from pathlib import Path
|
|
|
|
from app.core.config import get_settings
|
|
|
|
EXAMPLE_PATH = Path(__file__).resolve().parents[2] / "espd_templates" / "ro_mat.txt"
|
|
|
|
SYSTEM_PROMPT = """Ты — технический писатель. Твоя задача: по краткому описанию программы составить текст «Руководство оператора» по ГОСТ ЕСПД (ГОСТ 19.503-79 и др.).
|
|
Структура документа: 1) Назначение программы; 2) Условия выполнения программы; 3) Установка программы; 4) Работа с программой.
|
|
Пиши строго по образцу: тот же стиль, нумерация разделов и подпунктов (1.1, 1.2, 2.1, 3.1.1 и т.д.), без лишних пояснений и без упоминания ИИ."""
|
|
|
|
|
|
def _load_example() -> str:
|
|
if not EXAMPLE_PATH.exists():
|
|
return ""
|
|
return EXAMPLE_PATH.read_text(encoding="utf-8", errors="replace")
|
|
|
|
|
|
def generate_ro_content(progname: str, decimal: str, user_description: str) -> str:
|
|
settings = get_settings()
|
|
api_key = (settings.openrouter_api_key or "").strip()
|
|
if not api_key:
|
|
return "[Ошибка: не задан OPENROUTER_API_KEY.]"
|
|
|
|
example = _load_example()
|
|
user_prompt = f"""Составь полный текст «Руководство оператора» по ГОСТ ЕСПД.
|
|
|
|
Данные документа:
|
|
- Обозначение (децимальный номер): {decimal}
|
|
- Название программы: {progname}
|
|
|
|
Описание от заказчика (что за программа, для какой системы, что должна делать):
|
|
{user_description}
|
|
|
|
Образец оформления и стиля (придерживайся этой структуры и нумерации):
|
|
---
|
|
{example[:12000] if example else "Структура: 1. Назначение программы; 2. Условия выполнения; 3. Установка; 4. Работа с программой."}
|
|
---
|
|
Выведи только текст руководства, без предисловий."""
|
|
|
|
try:
|
|
from openai import OpenAI
|
|
|
|
client = OpenAI(
|
|
base_url=settings.openrouter_base_url.rstrip("/"),
|
|
api_key=api_key,
|
|
default_headers={
|
|
"Authorization": f"Bearer {api_key}",
|
|
"HTTP-Referer": "https://gostgenerator.local",
|
|
"X-Title": "GostGenerator Web ESPD",
|
|
},
|
|
)
|
|
response = client.chat.completions.create(
|
|
model=settings.openrouter_model or "deepseek/deepseek-chat",
|
|
messages=[
|
|
{"role": "system", "content": SYSTEM_PROMPT},
|
|
{"role": "user", "content": user_prompt},
|
|
],
|
|
temperature=0.4,
|
|
max_tokens=4000,
|
|
)
|
|
text = response.choices[0].message.content or ""
|
|
return text.strip()
|
|
except Exception as e:
|
|
return f"[Ошибка генерации: {e}]"
|