Spaces:
Sleeping
Sleeping
File size: 4,855 Bytes
3aa83be |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 |
import streamlit as st
import requests
import os
import phonenumbers
from phonenumbers import geocoder, carrier
import re
# Pobierz klucz API z zmiennej środowiskowej
API_KEY = os.getenv('SAMBANOVA_API_KEY')
if not API_KEY:
st.error("Brak klucza API. Ustaw zmienną środowiskową SAMBANOVA_API_KEY w ustawieniach Spaces.")
st.stop()
# Funkcja do weryfikacji numeru telefonu
def get_phone_info(phone_number):
try:
parsed_number = phonenumbers.parse(phone_number, None)
country = geocoder.description_for_number(parsed_number, 'pl')
operator = carrier.name_for_number(parsed_number, 'pl')
return country, operator
except phonenumbers.NumberParseException:
return None, None
# Proste sprawdzenia heurystyczne wiadomości
def simple_checks(message):
warnings = []
# Słowa kluczowe często używane w oszustwach
scam_keywords = ['pieniądze', 'przelew', 'hasło', 'kod', 'nagroda', 'wygrana', 'pilne', 'pomoc', 'opłata']
if any(keyword in message.lower() for keyword in scam_keywords):
warnings.append("Wiadomość zawiera słowa kluczowe związane z potencjalnym oszustwem.")
# Sprawdzenie obecności linków
if re.search(r'http[s]?://', message):
warnings.append("Wiadomość zawiera link.")
# Sprawdzenie, czy nadawca prosi o poufne informacje
if re.search(r'\b(podaj|prześlij|udostępnij)\b.*\b(hasło|kod|dane osobowe|numer konta)\b', message.lower()):
warnings.append("Wiadomość zawiera prośbę o poufne informacje.")
return warnings
# Funkcja do analizy wiadomości za pomocą API SambaNova
def analyze_message(message, phone_number):
url = "https://api.sambanova.ai/v1/chat/completions"
headers = {
"Authorization": f"Bearer {API_KEY}"
}
system_prompt = "Jesteś asystentem pomagającym w identyfikacji fałszywych wiadomości SMS. Analizuj pod kątem typowych cech oszustw i phishingu. Podaj swoją ocenę oraz zalecenia dla użytkownika."
user_prompt = f"Przeanalizuj następującą wiadomość pod kątem potencjalnego oszustwa:\n\nWiadomość: {message}\nNumer telefonu: {phone_number}\n\nPodaj swoją analizę i wnioski po polsku."
payload = {
"model": "Meta-Llama-3.1-8B-Instruct",
"messages": [
{"role": "system", "content": system_prompt},
{"role": "user", "content": user_prompt}
],
"max_tokens": 500,
"temperature": 0.1,
"top_p": 0.9,
"stop": ["<|eot_id|>"]
}
response = requests.post(url, headers=headers, json=payload)
if response.status_code == 200:
data = response.json()
analysis = data['choices'][0]['message']['content']
return analysis
else:
return f"Błąd API: {response.status_code} - {response.text}"
# Główny interfejs aplikacji
def main():
st.set_page_config(page_title="Detektor Fałszywych Wiadomości SMS", page_icon="📱")
st.title("📱 Detektor Fałszywych Wiadomości SMS")
st.write("Wprowadź treść wiadomości SMS oraz numer telefonu nadawcy, aby przeprowadzić analizę pod kątem potencjalnego oszustwa.")
with st.form("sms_form"):
message = st.text_area("Treść wiadomości SMS", height=150)
phone_number = st.text_input("Numer telefonu nadawcy (w formacie międzynarodowym, np. +48123123123)")
submitted = st.form_submit_button("Analizuj wiadomość")
if submitted:
if not message.strip():
st.error("Proszę wprowadzić treść wiadomości.")
else:
# Wyświetl informacje o numerze telefonu
if phone_number:
country, operator = get_phone_info(phone_number)
if country and operator:
st.write(f"**Informacje o numerze telefonu:**")
st.write(f"- **Kraj:** {country}")
st.write(f"- **Operator:** {operator}")
else:
st.write("Nie udało się uzyskać informacji o numerze telefonu.")
# Przeprowadź proste sprawdzenia heurystyczne
warnings = simple_checks(message)
if warnings:
st.warning("Znaleziono następujące potencjalne czerwone flagi:")
for warn in warnings:
st.write(f"- {warn}")
# Analiza za pomocą modelu językowego
with st.spinner("Analizuję wiadomość przy użyciu modelu AI..."):
analysis = analyze_message(message, phone_number)
st.subheader("Wynik analizy AI:")
st.write(analysis)
st.info("Pamiętaj: zawsze zachowuj ostrożność przy otrzymywaniu wiadomości od nieznanych nadawców. Nie udostępniaj poufnych informacji i nie klikaj w podejrzane linki.")
if __name__ == "__main__":
main()
|