v3.3.1: редактор промпта LLM — сохранить/сбросить/по умолчанию
This commit is contained in:
+37
-6
@@ -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)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user