Automatyzacja / AI25 marca 2025

Jak Stworzyć Własnego Asystenta AI w Pythonie: Praktyczny Przewodnik

Asystent AI w Python z OpenAI API za mniej niż 5 USD/miesiąc. GPT-4, LangChain, embeddingi i pamięć konwersacji. Kod źródłowy i tutorial krok po kroku.

#python#openai api#gpt-4#chatbot#langchain#asystent ai#nlp#machine learning
Asystent AI w Python - OpenAI API i GPT-4

Stworzenie własnego asystenta AI z wykorzystaniem Pythona i sztucznej inteligencji może kosztować mniej niż 5 dolarów miesięcznie dzięki interfejsowi API OpenAI. Python, ze swoim bogatym ekosystemem bibliotek, stanowi idealne narzędzie do programowania w obszarze sztucznej inteligencji.

Wykorzystując biblioteki takie jak TensorFlow czy PyTorch, możemy tworzyć zaawansowane rozwiązania AI — w szczególności asystentów głosowych i chatboty. OpenAI API zapewnia dostęp do najnowocześniejszych modeli AI dla generowania tekstu i przetwarzania języka naturalnego.

W tym praktycznym przewodniku przeprowadzimy Cię przez cały proces tworzenia asystenta AI — od konfiguracji środowiska i uzyskania klucza API, przez implementację komunikacji z modelem, aż po rozszerzanie funkcjonalności i optymalizację kosztów.


Podstawy programowania asystenta AI w Pythonie

Wymagania systemowe i instalacja bibliotek

Podstawowym wymogiem jest posiadanie Pythona w wersji 3.7.1 lub nowszej. Pierwszym krokiem jest instalacja kluczowych bibliotek poprzez menedżer pakietów pip:

pip install openai flask flask-session

Biblioteka openai zapewnia interfejs do komunikacji z API OpenAI, natomiast flask oraz flask-session umożliwią stworzenie prostej aplikacji webowej z interfejsem konwersacyjnym.

Dla zaawansowanych projektów warto również rozważyć dodatkowe biblioteki:

pip install numpy pandas tensorflow pytorch

Konfiguracja konta OpenAI i klucza API

Proces uzyskania klucza API:

  1. Wejdź na stronę OpenAI (https://platform.openai.com) i kliknij „Log in"
  2. Jeśli nie posiadasz konta, wybierz „Sign up" i przejdź przez proces rejestracji
  3. Po zalogowaniu, przejdź do sekcji „API Keys" w menu po lewej stronie
  4. Kliknij „Create new secret key" i nadaj mu opisową nazwę
  5. Skopiuj wygenerowany klucz i zachowaj w bezpiecznym miejscu

Aby zminimalizować ryzyko nieoczekiwanych kosztów:

  • Przejdź do zakładki „Usage Limits" w sekcji „Billing"
  • Ustaw sensowny limit wydatków (np. 5 dolarów na start)

Klucz API najlepiej przechowywać jako zmienną środowiskową, nigdy bezpośrednio w kodzie:

import os
from openai import OpenAI

client = OpenAI(api_key=os.environ["OPENAI_API_KEY"])

Struktura projektu asystenta AI

Zalecana organizacja katalogów:

assistant_project/
├── app.py              # Główny plik aplikacji
├── templates/          # Szablony HTML
│   └── index.html      # Główny szablon interfejsu
├── static/             # Pliki statyczne (CSS, JavaScript)
├── utils/              # Funkcje pomocnicze
│   ├── __init__.py
│   └── openai_utils.py # Funkcje komunikacji z API
├── config.py           # Konfiguracja aplikacji
└── requirements.txt    # Lista wymaganych bibliotek

Plik app.py — główna aplikacja Flask:

from flask import Flask, render_template, request, session
from flask_session import Session
from openai import OpenAI

app = Flask(__name__)
app.config["SESSION_TYPE"] = "filesystem"
Session(app)

client = OpenAI(api_key=os.environ["OPENAI_API_KEY"])

Plik openai_utils.py — funkcje pomocnicze:

def create_assistant(client, system_message):
    """Tworzy instancję asystenta z określonym komunikatem systemowym."""
    assistant = client.beta.assistants.create(
        name="Mój Asystent",
        instructions=system_message,
        model="gpt-3.5-turbo"
    )
    return assistant

Implementacja komunikacji z OpenAI API

Nawiązywanie połączenia z API OpenAI

Inicjalizacja połączenia z API sprowadza się do kilku linii kodu:

from openai import OpenAI

# Inicjalizacja klienta z kluczem ze zmiennej środowiskowej
client = OpenAI(api_key=os.environ["OPENAI_API_KEY"])

Pierwsze zapytanie do API:

response = client.chat.completions.create(
    model="gpt-3.5-turbo",
    messages=[
        {"role": "system", "content": "Jesteś pomocnym asystentem."},
        {"role": "user", "content": "Jak się masz?"}
    ]
)

print(response.choices[0].message.content)

Wybór odpowiedniego modelu językowego

OpenAI udostępnia różne modele, różniące się możliwościami i ceną:

  • GPT-3.5-turbo — zrównoważony model pod względem ceny i wydajności, idealny na start
  • GPT-4o — najnowszy model z zaawansowanymi możliwościami rozumowania i generowania tekstu
  • GPT-4o Mini — opcja ekonomiczna, zaprojektowana z myślą o redukcji kosztów, oferująca cenę około 3,70 PLN za 100 000 tokenów

Wybór modelu zależy od złożoności zadań asystenta — dla prostych chatbotów wystarczy GPT-3.5-turbo, natomiast dla zaawansowanego rozumowania i analizy lepszym wyborem będzie GPT-4o.

Zarządzanie limitami i kosztami API

OpenAI stosuje limity szybkości (rate limits) dotyczące:

  • TPM — liczba tokenów na minutę
  • RPM — liczba zapytań na minutę

Praktyczne porady dotyczące zarządzania kosztami:

  1. Monitoruj i dostosowuj częstotliwość zapytań
  2. Ustaw sensowny próg wydatków w panelu OpenAI
  3. Rozważ użycie modeli z mniejszym kontekstem dla prostszych zadań
  4. Implementuj cache'owanie powtarzających się zapytań

Obsługa błędów i wyjątków

Prawidłowa obsługa błędów jest kluczowa w produkcyjnych zastosowaniach:

try:
    response = client.chat.completions.create(
        model="gpt-3.5-turbo",
        messages=[{"role": "user", "content": "Powiedz cześć!"}]
    )
    print(response.choices[0].message.content)
except Exception as e:
    print(f"Wystąpił błąd: {e}")

Najczęstsze kody błędów:

  • 401 — problem z autoryzacją (nieprawidłowy klucz API)
  • 429 — przekroczenie limitów zapytań lub tokenów
  • 500 — błąd po stronie serwera OpenAI

Tworzenie interfejsu konwersacyjnego w Pythonie

Projektowanie pętli konwersacji

Pętla konwersacji to serce każdego chatbota — pobiera dane użytkownika, przetwarza je przez model AI i generuje odpowiedzi:

def conversation_loop():
    # Inicjalizacja historii konwersacji
    conversation_history = [
        {"role": "system", "content": "Jesteś pomocnym asystentem AI."}
    ]

    print("Asystent: Witaj! W czym mogę pomóc?")

    while True:
        # Pobieranie wejścia od użytkownika
        user_input = input("Ty: ")

        # Sprawdzenie warunków zakończenia
        if user_input.lower() in ["koniec", "wyjdź", "exit"]:
            print("Asystent: Do widzenia!")
            break

        # Dodanie wejścia do historii
        conversation_history.append({"role": "user", "content": user_input})

        # Generowanie odpowiedzi
        response = client.chat.completions.create(
            model="gpt-4o-mini",
            messages=conversation_history
        )

        assistant_message = response.choices[0].message.content

        # Dodanie odpowiedzi do historii
        conversation_history.append({"role": "assistant", "content": assistant_message})

        # Wyświetlenie odpowiedzi
        print(f"Asystent: {assistant_message}")

Implementacja pamięci kontekstowej

Pamięć kontekstowa umożliwia prowadzenie wieloobrotowych rozmów — asystent „pamięta" wcześniejsze wypowiedzi w ramach sesji. Wątki przechowują komunikaty i automatycznie obsługują obcinanie w celu dopasowania zawartości do kontekstu modelu.

def manage_context(conversation_history, max_tokens=4000):
    """Zarządza kontekstem konwersacji, obcinając najstarsze wiadomości."""
    current_tokens = count_tokens(conversation_history)

    # Jeśli przekroczyliśmy limit, usuń najstarsze wiadomości
    while current_tokens > max_tokens and len(conversation_history) > 2:
        # Zawsze zachowaj pierwszą wiadomość (system prompt)
        if len(conversation_history) > 1:
            removed_message = conversation_history.pop(1)
            current_tokens -= count_tokens([removed_message])

    return conversation_history

Przetwarzanie wejścia użytkownika

Warto wstępnie przetwarzać dane wejściowe, aby asystent lepiej rozumiał intencje użytkownika:

def process_user_input(user_input):
    # Usuwanie zbędnych białych znaków
    user_input = user_input.strip()

    # Sprawdzanie specjalnych komend
    if user_input.startswith("/"):
        return handle_special_command(user_input)

    # Analiza nastrojów może pomóc dostosować odpowiedź asystenta
    sentiment = analyze_sentiment(user_input)

    # Zwracanie przetworzonego wejścia i metadanych
    return {
        "text": user_input,
        "sentiment": sentiment,
        "timestamp": get_current_time()
    }

Funkcja czatu z historią konwersacji

Kompletna funkcja czatu, którą można wykorzystać zarówno w CLI, jak i w aplikacji webowej:

def chat(user_message, conversation_history):
    """Wysyła wiadomość do modelu i zwraca odpowiedź."""
    conversation_history.append({
        "role": "user",
        "content": user_message
    })

    response = client.chat.completions.create(
        model="gpt-4o-mini",
        messages=conversation_history
    )

    assistant_message = response.choices[0].message.content
    conversation_history.append({
        "role": "assistant",
        "content": assistant_message
    })

    return assistant_message

Rozszerzanie funkcjonalności asystenta

Dodawanie własnych komend i funkcji

Asystenta można wzbogacić o niestandardowe komendy obsługujące konkretne zadania:

def handle_command(user_input):
    if user_input.startswith("/pogoda"):
        # Pobieranie informacji o pogodzie
        location = user_input.replace("/pogoda", "").strip()
        return get_weather(location)
    elif user_input.startswith("/przypomnij"):
        # Tworzenie przypomnienia
        return create_reminder(user_input)
    elif user_input.startswith("/pomoc"):
        return "Dostępne komendy: /pogoda [miasto], /przypomnij [treść], /pomoc"
    return None  # Nie wykryto komendy

System funkcji w API OpenAI (Function Calling)

OpenAI API umożliwia definiowanie zewnętrznych funkcji, które model może wywoływać w odpowiedzi na zapytania użytkownika:

tools = [
    {
        "type": "function",
        "function": {
            "name": "get_weather",
            "description": "Pobierz aktualną pogodę dla lokalizacji",
            "parameters": {
                "type": "object",
                "properties": {
                    "location": {
                        "type": "string",
                        "description": "Miasto, np. Warszawa"
                    }
                },
                "required": ["location"]
            }
        }
    }
]

response = client.chat.completions.create(
    model="gpt-3.5-turbo",
    messages=[{"role": "user", "content": "Jaka jest pogoda w Warszawie?"}],
    tools=tools
)

Model automatycznie rozpozna intencję użytkownika i wywoła odpowiednią funkcję z właściwymi parametrami.

Integracja z zewnętrznymi API i serwisami

Asystent AI nabiera prawdziwej mocy, gdy integruje się z zewnętrznymi usługami:

def check_emails(email_client, count=5):
    """Sprawdza nieprzeczytane wiadomości email."""
    messages = email_client.get_unread_messages(count)
    return [{"subject": msg.subject, "sender": msg.sender} for msg in messages]

Możliwe integracje:

  • API pogodowe — aktualne warunki atmosferyczne
  • Kalendarze — zarządzanie spotkaniami i przypomnieniami
  • Bazy danych — wyszukiwanie i zarządzanie danymi
  • API e-mail — sprawdzanie i wysyłanie wiadomości
  • Systemy CRM — dostęp do danych klientów

Implementacja systemu rozpoznawania intencji

Prosty system rozpoznawania intencji pozwala asystentowi lepiej klasyfikować zapytania użytkownika:

intents = {
    "sprawdz_pogode": ["jaka pogoda", "pogoda w", "temperatura w", "czy pada"],
    "utworz_przypomnienie": ["przypomnij mi", "ustaw przypomnienie", "zapamiętaj"],
    "sprawdz_email": ["sprawdź mail", "nowe wiadomości", "czy mam maile"],
    "pomoc": ["pomóż", "co potrafisz", "jak działasz"]
}

def detect_intent(user_input):
    """Wykrywa intencję użytkownika na podstawie słów kluczowych."""
    for intent, patterns in intents.items():
        for pattern in patterns:
            if pattern in user_input.lower():
                return intent
    return "unknown"

Optymalizacja i testowanie asystenta AI

Techniki optymalizacji wydajności

Optymalizacja asystenta AI to klucz do utrzymania niskich kosztów i wysokiej responsywności:

  • Cache'owanie odpowiedzi API — zapisuj często powtarzające się odpowiedzi w pamięci lub bazie danych
  • Asynchroniczne wywołania — główny wątek nie zostanie zablokowany podczas oczekiwania na odpowiedź API
  • Monitorowanie limitów API — dostosuj częstotliwość zapytań do przydzielonych limitów
  • Batch processing — grupuj zapytania, gdy to możliwe

Metody redukcji kosztów używania API OpenAI

  1. Zmniejszenie liczby tokenów wejściowych — przesyłaj tylko istotne informacje
  2. Wybór odpowiedniego modelu — GPT-4o Mini oferuje cenę około 3,70 PLN za 100 000 tokenów, co jest wielokrotnie tańsze niż GPT-4o
  3. Automatyczne obcinanie tekstu do maksymalnej długości kontekstu
  4. Cache'owanie odpowiedzi na powtarzające się pytania
  5. Kompresja historii konwersacji — podsumowuj dłuższe rozmowy zamiast przesyłać pełną historię

Testowanie scenariuszy konwersacji

Systematyczne testowanie jest niezbędne dla jakości asystenta:

  • Testy manualne — przeprowadzanie rozmów w różnych scenariuszach
  • Testy edge case — testowanie pytań sformułowanych „nieidealnie", z literówkami i niejasnościami
  • Testy automatyczne — masowe odpytywanie z zestawem pytań i porównywanie z oczekiwanymi odpowiedziami
  • Testy regresji — sprawdzanie, czy nowe zmiany nie pogorszyły wcześniej działających scenariuszy

Zbieranie i analiza opinii użytkowników

Ciągłe doskonalenie asystenta wymaga feedbacku:

  • Automatyczne zbieranie opinii (przyciski „pomocne" / „niepomocne")
  • Analiza sentymentu dla oceny tonu wypowiedzi użytkowników
  • Identyfikacja powtarzających się tematów i problemów
  • Analiza pytań, na które asystent nie potrafił odpowiedzieć

Wnioski

Stworzenie własnego asystenta AI z wykorzystaniem Pythona i OpenAI API jest bardziej dostępne niż kiedykolwiek — zarówno finansowo (mniej niż 5 USD/miesiąc), jak i technicznie. Kluczowe elementy sukcesu to:

  • Właściwe planowanie — przemyślana struktura projektu i wybór odpowiedniego modelu
  • Optymalizacja kosztów — cache'owanie, wybór ekonomicznych modeli i kompresja kontekstu
  • Systematyczne testowanie — regularne sprawdzanie jakości odpowiedzi w różnych scenariuszach
  • Ciągłe doskonalenie — zbieranie feedbacku i dostosowywanie zachowania asystenta

Dzięki elastyczności Pythona oraz możliwościom OpenAI API możemy ciągle rozbudowywać funkcjonalność asystenta — od prostego chatbota po zaawansowanego asystenta z integracjami zewnętrznymi, rozpoznawaniem intencji i pamięcią kontekstową.

Jeśli potrzebujesz wsparcia w budowie asystenta AI lub chatbota dla swojej firmy, skontaktuj się z nami. W FoxLink Automation tworzymy rozwiązania oparte na AI — od chatbotów obsługi klienta, przez asystentów biznesowych, aż po zaawansowane systemy automatyzacji z wykorzystaniem modeli językowych.

Potrzebujesz pomocy IT?

Skontaktuj się z nami i dowiedz się, jak możemy pomóc Twojemu biznesowi

Napisz do nas