Files
llm/scripts/check_1c_rag_prompt.py

58 lines
1.6 KiB
Python

from __future__ import annotations
import argparse
import subprocess
import sys
from pathlib import Path
ROOT = Path(__file__).resolve().parents[1]
DEFAULT_INDEX = ROOT / "plugins" / "1c" / "datasets" / "prepared" / "rag_index.json"
REQUIRED_PHRASES = [
"Не выдумывай метаданные 1С",
"запроси метаданные через инструмент",
"источники",
"Какие реквизиты есть у справочника Номенклатура?",
]
def main() -> int:
parser = argparse.ArgumentParser(description="Check that the 1C RAG prompt contains safety-critical instructions.")
parser.add_argument("--index", type=Path, default=DEFAULT_INDEX)
args = parser.parse_args()
command = [
sys.executable,
"scripts/ask_1c_rag.py",
"Какие реквизиты есть у справочника Номенклатура?",
"--index",
str(args.index),
"--print-prompt",
]
result = subprocess.run(
command,
cwd=ROOT,
check=False,
text=True,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
)
if result.returncode != 0:
print(result.stderr, file=sys.stderr)
return result.returncode
missing = [phrase for phrase in REQUIRED_PHRASES if phrase not in result.stdout]
if missing:
print("1C RAG prompt check failed. Missing phrases:", file=sys.stderr)
for phrase in missing:
print(f"- {phrase}", file=sys.stderr)
return 1
print("1C RAG prompt check passed.")
return 0
if __name__ == "__main__":
raise SystemExit(main())