market_research_ai / deepseek_client.py
Marek4321's picture
Upload 3 files
d204d81 verified
# deepseek_client.py
# Komunikacja z DeepSeek API
import streamlit as st
from openai import OpenAI
import os
from personas import get_persona_for_analysis
class DeepSeekClient:
def __init__(self):
"""
Inicjalizuje klienta DeepSeek z kluczem API z secrets
"""
try:
self.api_key = st.secrets["DEEPSEEK_API_KEY"]
self.client = OpenAI(
api_key=self.api_key,
base_url="https://api.deepseek.com"
)
except Exception as e:
st.error(f"Błąd inicjalizacji DeepSeek API: {str(e)}")
self.client = None
def load_knowledge_base(self):
"""
Ładuje bazę wiedzy z plików dane_polacy.txt i raport_polska.txt
"""
knowledge_content = ""
knowledge_files = ["dane_polacy.txt", "raport_polska.txt"]
for filename in knowledge_files:
filepath = os.path.join("knowledge", filename)
try:
with open(filepath, 'r', encoding='utf-8') as file:
content = file.read()
knowledge_content += f"\n\n=== {filename} ===\n{content}"
except FileNotFoundError:
st.warning(f"Nie znaleziono pliku: {filepath}")
except Exception as e:
st.error(f"Błąd czytania pliku {filepath}: {str(e)}")
return knowledge_content
def build_analysis_prompt(self, concept_description, selected_personas, custom_target, knowledge_context):
"""
Buduje prompt dla analizy koncepcji reklamowej
"""
prompt = f"""
Jesteś ekspertem od badań rynku i analizy konsumenckiej w Polsce. Twoim zadaniem jest przeanalizowanie koncepcji reklamowej/produktowej i przewidzenie reakcji różnych grup docelowych.
=== KONTEKST WIEDZY O POLSKICH KONSUMENTACH ===
{knowledge_context}
=== KONCEPCJA DO ANALIZY ===
{concept_description}
=== GRUPY DOCELOWE DO ANALIZY ===
"""
# Dodawanie wybranych person
if selected_personas:
for persona_key in selected_personas:
persona_desc = get_persona_for_analysis(persona_key)
prompt += f"\n{persona_desc}"
# Dodawanie custom target group
if custom_target:
prompt += f"\n\nCustom Target Group:\n{custom_target}"
prompt += f"""
=== ZADANIE ===
Dla każdej z grup docelowych przeanalizuj koncepcję i przedstaw wyniki w następującym formacie:
**[NAZWA GRUPY/PERSONY]**
**Co myślę:**
[Wypowiedź w pierwszej osobie - jakie są pierwsze myśli, skojarzenia, czy to jest interesujące/nudne/wartościowe]
**Co czuję:**
[Wypowiedź w pierwszej osobie - jakie emocje wywołuje ta koncepcja, jakie ma skojarzenia pozytywne/negatywne]
**Co zrobię:**
[Wypowiedź w pierwszej osobie - jaka będzie prawdopodobna reakcja zakupowa, czy kupi, poleci, zignoruje]
---
WAŻNE WSKAZÓWKI:
- Pisz w pierwszej osobie, jak gdyby to była autentyczna wypowiedź danej osoby
- Uwzględnij specyfikę polskiego rynku i mentalności
- Bazuj na danych z kontekstu wiedzy
- Bądź realistyczny - nie wszyscy muszą reagować pozytywnie
- Uwzględnij demografię, wartości i styl życia każdej grupy
"""
return prompt
def analyze_concept(self, concept_description, selected_personas=None, custom_target=None):
"""
Główna metoda analizująca koncepcję
"""
if not self.client:
return "Błąd: Brak połączenia z API DeepSeek"
# Ładowanie bazy wiedzy
knowledge_context = self.load_knowledge_base()
# Budowanie promptu
prompt = self.build_analysis_prompt(
concept_description,
selected_personas,
custom_target,
knowledge_context
)
try:
# Wywołanie API DeepSeek
response = self.client.chat.completions.create(
model="deepseek-chat",
messages=[
{"role": "system", "content": "Jesteś ekspertem od badań rynku i analizy konsumenckiej w Polsce."},
{"role": "user", "content": prompt}
],
temperature=1.3, # Dla kreatywnej analizy
max_tokens=4000
)
return response.choices[0].message.content
except Exception as e:
error_msg = f"Błąd podczas analizy: {str(e)}"
st.error(error_msg)
return error_msg
def format_custom_target_description(self, gender, age_range, location, additional_desc=""):
"""
Formatuje opis custom target group
"""
target_desc = f"Grupa docelowa: {gender}, wiek {age_range}, mieszka w: {location}"
if additional_desc:
target_desc += f"\nDodatkowe informacje: {additional_desc}"
return target_desc
# Test funkcji
if __name__ == "__main__":
print("DeepSeek Client - moduł testowy")
# Tutaj można dodać testy jednostkowe