v3.3.1: редактор промпта LLM — сохранить/сбросить/по умолчанию

This commit is contained in:
2026-06-18 09:32:58 +04:00
parent 958865c397
commit ce4871227c
4 changed files with 142 additions and 8 deletions
+37 -6
View File
@@ -12,21 +12,37 @@ import json
import llm_client
def extract(parsed_text: str) -> dict:
def extract(parsed_text: str, custom_prompt: str = None) -> dict:
"""
Извлечь строки спецификации из текста документа через LLM.
Args:
parsed_text: текст документа (выдача textify.py)
custom_prompt: свой промпт (если None — используется DEFAULT_PROMPT)
Returns:
{"rows": [{row_num, name, price, qty, sum, date_start}, ...], "unresolved": [...]}
или
{"error": "...", "raw_response": "..."}
{"rows": [...], "unresolved": [...]} или {"error": "..."}
"""
# ── Промпт ──────────────────────────────────────────────────
prompt = f"""Ты — анализатор договоров. Ниже текст спецификации услуг из договора облачного провайдера.
prompt = custom_prompt or DEFAULT_PROMPT
prompt = prompt.replace("{parsed_text}", parsed_text)
"""
extractor.py — Извлечение строк спецификации из текста документа.
Берёт распарсенный текст (parsed_text из documents), отправляет LLM,
получает структурированный список строк спецификации.
Не зависит от parser.py, textify.py, upload.py.
Зависит только от llm_client.py.
"""
import json
import llm_client
# ── Промпт по умолчанию ─────────────────────────────────────────
# {parsed_text} будет заменён на текст документа
DEFAULT_PROMPT = """Ты — анализатор договоров. Ниже текст спецификации услуг из договора облачного провайдера.
Найди ВСЕ таблицы со списком услуг. Извлеки каждую строку в JSON-массив.
@@ -53,6 +69,21 @@ def extract(parsed_text: str) -> dict:
---
"""
def extract(parsed_text: str, custom_prompt: str = None) -> dict:
"""
Извлечь строки спецификации из текста документа через LLM.
Args:
parsed_text: текст документа (выдача textify.py)
custom_prompt: свой промпт (если None — DEFAULT_PROMPT).
Должен содержать {parsed_text} для подстановки текста.
Returns:
{"rows": [...], "unresolved": [...]} или {"error": "..."}
"""
prompt = (custom_prompt or DEFAULT_PROMPT).replace("{parsed_text}", parsed_text)
# ── Вызов LLM ────────────────────────────────────────────────
result = llm_client.ask(prompt, max_tokens=8000)