AnonyMizator / openai_fake_data_generator.py
petrsovadina's picture
Update openai_fake_data_generator.py
29b5df0 verified
raw
history blame
3.25 kB
from collections import namedtuple
from typing import Optional
import openai
from openai import OpenAI, AzureOpenAI
import logging
logger = logging.getLogger("presidio-streamlit")
OpenAIParams = namedtuple(
"open_ai_params",
["openai_key", "model", "api_base", "deployment_id", "api_version", "api_type"],
)
def call_completion_model(
prompt: str,
openai_params: OpenAIParams,
max_tokens: Optional[int] = 256,
) -> str:
"""Creates a request for the OpenAI Completion service and returns the response.
:param prompt: The prompt for the completion model
:param openai_params: OpenAI parameters for the completion model
:param max_tokens: The maximum number of tokens to generate.
"""
if openai_params.api_type.lower() == "azure":
client = AzureOpenAI(
api_version=openai_params.api_version,
api_key=openai_params.openai_key,
azure_endpoint=openai_params.api_base,
azure_deployment=openai_params.deployment_id,
)
else:
client = OpenAI(api_key=openai_params.openai_key)
try:
response = client.completions.create(
model=openai_params.model,
prompt=prompt,
max_tokens=max_tokens,
)
return response.choices[0].text.strip()
except Exception as e:
logger.error(f"Chyba při volání OpenAI API: {str(e)}")
return "Došlo k chybě při generování syntetických dat."
def create_prompt(anonymized_text: str) -> str:
"""
Create the prompt with instructions to GPT-3 for generating Czech synthetic text.
:param anonymized_text: Text with placeholders instead of PII values, e.g. My name is <OSOBA>.
"""
prompt = f"""
Vaším úkolem je vytvořit syntetický text na základě de-identifikovaného textu s zástupnými symboly místo osobních údajů (PII).
Nahraďte zástupné symboly (např. <OSOBA>, {{DATUM}}, {{IP_ADRESA}}) falešnými hodnotami v českém kontextu.
Pokyny:
a. Používejte zcela náhodná čísla, každá číslice je náhodně vybrána mezi 0 a 9.
b. Používejte realistická česká jména, která představují různá pohlaví a etnické skupiny.
c. Pokud v textu nejsou žádné zástupné symboly, vraťte text beze změny.
d. Zachovejte formátování co nejblíže původnímu textu.
e. Pokud se v textu vyskytují osobní údaje, nahraďte je falešnými hodnotami.
f. Odstraňte mezery před a za vygenerovaným textem.
g. Používejte české formáty pro data, adresy, telefonní čísla atd.
vstup: [[TEXT ZAČÍNÁ]] Jak mohu změnit limit na své kreditní kartě {{ČÍSLO_KARTY}}?[[TEXT KONČÍ]]
výstup: Jak mohu změnit limit na své kreditní kartě 2539 3519 2345 1555?
vstup: [[TEXT ZAČÍNÁ]]<OSOBA> byl hlavním vědeckým pracovníkem v <ORGANIZACE>.[[TEXT KONČÍ]]
výstup: Ing. Jana Nováková, CSc. byla hlavním vědeckým pracovníkem v Akademii věd ČR.
vstup: [[TEXT ZAČÍNÁ]]<OSOBA> žije na adrese <ADRESA>.[[TEXT KONČÍ]]
výstup: Petr Svoboda žije na adrese Dlouhá 254/14, 110 00 Praha 1.
vstup: [[TEXT ZAČÍNÁ]]{anonymized_text}[[TEXT KONČÍ]]
výstup:"""
return prompt