IRESG_RAG_BOT / guardrails.py
Corin1998's picture
Upload 8 files
da3cebc verified
from __future__ import annotations
import re
ALLOWED_TOPICS = [
r"IR", r"投資家", r"決算", r"財務", r"ガバナンス", r"統合報告", r"サステナビリティ",
r"人的資本", r"リスク", r"セグメント", r"株主", r"資本政策", r"ESG", r"GHG",
]
OUT_OF_SCOPE_PATTERNS = [r"採用の可否", r"未公開情報", r"株価予想", r"インサイダー", r"個人情報"]
# 簡易PIIマスク(郵便・電話・メール)
PII = re.compile(
r"(\d{3}-\d{4})" # 郵便番号
r"|(\d{2,4}-\d{2,4}-\d{3,4})" # 電話番号
r"|([A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+)" # メール
)
SCOPE_HINT = (
"このボットはIR/ESG開示文書(統合報告書、サステナ、決算短信、コーポガバ報告)を根拠とするQ&A専用です。"
)
def detect_out_of_scope(q: str) -> bool:
if any(re.search(p, q) for p in OUT_OF_SCOPE_PATTERNS):
return True
if not any(re.search(p, q) for p in ALLOWED_TOPICS):
return True
return False
def sanitize(text: str) -> str:
return PII.sub("[REDACTED]", text)
def compliance_block() -> str:
return "※免責:本回答は公開済みIR/ESG資料に基づく情報提供であり、投資判断を目的としません。"