Game-Api - Koło Naukowe .NET
Fracture
Opis
Witaj w repozytorium Koła Naukowego .NET, poświęconym naszemu najnowszemu projektowi gry! Niniejsza gra z gatunku RPG, jest aplikacją internetową, której głównym założeniem jest pełna niepowtarzalność wszelkich przygód w niej.
Witaj w repozytorium dla projektu "Fracture". Jako "Grupa .NET Politechniki Lubelskiej" (aka pollub.net) budujemy aplikację internetową będącą grą w stylu RPG, której założeniem jest niepowtarzalność przygód w niej poprzez wykorzystanie generowania proceduralnego oraz dużych modeli językowych.
O Pprojekcie
Nasza gra to innowacyjna produkcja, która łączy w sobie zarówno aspekty nowoczesnych wzorców architektonicznych, jak i wykorzystuje pełen potencjał najnowszych technologii.
Nasza gra ma trzy cele – z jednej strony chodzi o zabawę i rozrywkę, z drugiej o naukę programowania, a z trzeciej o naukę wykorzystania wzorców architektury oprogramowania.
- Platforma: Gra jest tworzona na platformie .NET, co pozwala nam wykorzystać bogaty ekosystem narzędzi dostępnych w środowisku .NET.
- Platforma: Gra jest tworzona na platformie .NET, co pozwala nam wykorzystać bogaty ekosystem narzędzi dostępnych w środowisku .NET. Wykorzystana jest platforma ASP.NET WebAPI oraz Blazor do tworzenia back-endu i front-endu aplikacji,
- Rodzaj gry: Nasza gra to przeglądarkowa produkcja z gatunku RPG (Role-Playing Game), która pozwala graczom wcielić się w postać i odgrywać niepowtarzalne przygody,
- Technologie: W trakcie projektu będziemy używać takich technologii jak PostgreSQL, RabbitMQ,
OpenAILLM, aby dostarczyć nowatorskie rozwiązania, - Architektura: Aplikacja została utworzona jako modularny monolit, z wykorzystaniem popularnych wzorców
typutakich jak CQRS. - Cel projektu: Naszym głównym celem jest stworzenie gry, która nie tylko dostarczy rozrywki, ale także będzie doskonałym przykładem naszych umiejętności w dziedzinie programowania i projektowania.
Uruchomienie aplikacji
Niniejszy projekt wykorzystuje technologię Docker oraz Docker Compose do zarządzania kontenerami i uruchamiania infrastruktury aplikacji. Aby uruchomić tę aplikację na swoim komputerze, postępuj zgodnie z poniższymi krokami:
1. Instalacja Docker Desktop
Jeśli nie masz jeszcze zainstalowanego Docker Desktop, będziesz musiał to zrobić przed uruchomieniem aplikacji. Docker Desktop jest dostępny dla systemów Windows, Linux oraz macOS. Pobierz go stąd: https://www.docker.com/products/docker-desktop/
(Możesz również skorzystać z Rancher Desktop, który jest open source https://github.com/rancher-sandbox/rancher-desktop/releases, bądź innego dowolnego rozwiazania)
Po pobraniu i zainstalowaniu Docker Desktop, upewnij się, że jest uruchomiony.
2. Pobranie repozytorium
W kolejnym kroku pobierz poniższe repozytorium na swój komputer, wykonując polecenia w terminalu windows w twoim lokalnym katalogu z repozytoriami.
git clone https://github.com/pollubnet/game-api.git
cd game-api
3. Dostosowanie pliku .env
w pliku docker-compose.yml
zostały wykorzystane zmienne środowiskowe. W celu utworzenia zmiennych środowiskowych skopiuj zawartość pliku .sample.env
do pliku .env
. Jeżeli nie istnieje plik .env
, to utwórz go w katalogu głównym, czyli w miejscu gdzie znajduje się plik docker-compose.yml
. Następnie dostosuj zmienne środowiskowe w .env
do swoich potrzeb oraz dokonaj analogicznie zmiany w projekcie Fracture.Api
w pliku appsettings.json
. Jeżeli pozostawiłeś wszystkie zmiany z .sample.env
, to nie musisz dostosowywać pliku appsettings.json
.
4. Uruchomienie infrastruktury aplikacji za pomocą Docker Compose
Po pobraniu repozytorium oraz zainstalowaniu Docker Desktop, możesz uruchomić infrastrukture aplikację za pomocą Docker Compose. W katalogu projektu znajdziesz plik docker-compose.yml
, który zawiera konfigurację kontenerów.
Jeżeli zamknąłeś terminal z poprzednich kroków to otwórz go i przejdź do katalogu projektu, a następnie wprowadź następującą komendę:
docker-compose up
5. Uruchomienie aplikacji w Visual Studio
Aby uruchomić tę aplikację w Visual Studio, rozpocznij od projektu Fracture.Api
, który należy ustawić jako domyślny. Wykonaj następujące kroki:
-
Otwórz solucję projektu w Visual Studio.
-
Przejdź do eksploratora rozwiązań (Solution Explorer) po prawej stronie.
-
Kliknij prawym przyciskiem myszy na projekcie
Fracture.Api
, który chcesz ustawić jako domyślny, a następnie wybierz opcję "Ustaw jako projekt startowy" (Set as StartUp Project).
Teraz Fracture.Api
jest ustawiony jako domyślny projekt. Możesz zacząć pracować nad nim i uruchamiać aplikację w trybie debugowania, naciskając klawisz F5 lub wybierając opcję "Uruchom" (Run) z menu Visual Studio.
Dodatkowo w celu zarządzania infrastrukturą aplikacji został uruchomiony pgAdmin4 oraz Redis Commander pod domyślnymi adresami:
- pgAdmin4
Adres:
localhost:8081
Dostęp:
[email protected]
PASSWORD=root
- Redis Commander
Adres:
localhost:8082
Dostęp:
USER=redis
PASSWORD=password
Numery portów, nazwy użytkowników i hasła można edytować w pliku .env
w katalogu głównym projektu.
Warto pamiętać, że na tym etapie wszystko powinno poprawnie się uruchomić, jeśli zostało wcześniej poprawnie skonfigurowane. Jeśli masz jakiekolwiek problemy z konfiguracją, upewnij się, że wszystkie zależności i środowisko są właściwie skonfigurowane.
Środowisko
Backend AI
Projekt komunikuje się z modelem AI na backendzie, w tym momencie dostosowany jest do serwera REST uruchamianego przez llama.cpp (aplikacja server
), oraz testowana była na modelu Mistral-7B i jego derywatywach (Mistral-RP-0.1-7B-GGUF).
Aby uruchomić backend, należy pobrać (skompilować) llama.cpp, pobrać plik modelu i uruchomić serwer wydając polecenie, na przykład:
./server -m <plik modelu> -ngl 35 --host 127.0.0.1
(tutaj następuje przeniesienie 35 warstw modelu na urządzenie CUDA, wymagana jest odmiana llama.cpp z obsługą CUDA, w przeciwnym wypadku parametr -ngl
nie jest dostępny)
Pełna dokumentacja serwera: https://github.com/ggerganov/llama.cpp/blob/master/examples/server/README.md
W jaki sposób uruchomić projekt i pomóc w jego rozwoju
dDocker
Można też uruchomić Backend AI llama.cpp w oparciu o plik docker-compose.llamacpp.yml
. W tym celu należy utworzyć plik .env
, w którym znajdą się dwie zmienne definiujące wariant serwera oraz ścieżkę lokalną do pliku modelu, np.:
LLAMA_VARIANT=full MODEL_PATH=U:\ml\krakowiak-7b.gguf.q4_k_m.bin
Dostępne warianty to: full
(CPU), full-cuda
(NVIDIA GPU) i full-rocm
(AMD ROCm GPU).
Uruchomienie:
docker compose -f docker-compose.llamacpp.yml up
Konfiguracja Backendu AI
W pliku Fracture.Api/appsettings.json
, możesz zdefiniować ścieżkę do URL serwera llama.cpp:
"AiEndpoint": { "EndpointUrl": "http://127.0.0.1:8080/completion" }
Niezbędne jest również wybranie modułów odpowiedzialnych za komunikację z backendem AI i przygotowaniem promptów, które to należy wybrać jako pełne nazwy typów, włącznie z ich assembly, dla Mistral-7B należy wybrać AlpacaPromptProvider
:
"AiBackendProvider": "Fracture.Shared.External.Providers.Ai.LlamaCpp.LlamaCppBackendProvider, Fracture.Shared.External, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null", "AiPromptTemplateProvider": "Fracture.Shared.External.Providers.Ai.AlpacaPromptProvider, Fracture.Shared.External, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null",
Wykorzystywane są Docker i Docker Compose do uruchomienia zależności takich jak serwer baza danych. Instrukcja dla początkujących jest zawarta w dokumencie Start. Zwykłe pobranie zawartości repozytorium i uruchomienie projektu Fracture.Server zakończy się błędem połączenia z bazą danych.
AI/LLM
Projekt wykorzystuje system Sztucznej Inteligencji, tzw. Duży Model Językowy (Large Language Model -- LLM), który jest uruchomiony na naszym serwerze uczelnianym. Z uwagi na to, że chcemy chronić się przed niepowołanym użyciem, adres i klucz dostępu do tego serwera są tajne, możesz dostać do nich dostęp na naszym serwerze Discord. Nie dodawaj ich do repozytorium!
Można też uruchomić model i serwer LLM na swoim własnym komputerze, korzystając z instrukcji opisanej w dokumencie AI.
Rozwój projektu, dodawanie własnych commitów
Aby móc uczestniczyć w rozwoju tego projektu musisz wykonać jego fork i utworzyć jego kopię na własnym koncie GitHub, a następnie poprosić o połączenie twoich zmian za pomocą funkcji Pull Request. Każdy Pull Request (PR) jest testowany na to, czy m.in. się poprawnie kompiluje, czy formatowanie kodu jest poprawne i tak dalej. Dodatkowo, każdy z PR zostanie przejrzany przez kogoś z głównej ekipy rozwoju projektu przed dołączeniem go głównej gałęzi.
Formatowanie kodu i tytułów commitów
Projekt wykorzystuje narzędzie git-conventional-commits do kontroli, czy tytuły commitów zgadzają się ze specyfikacją. A by móc z niego skorzystać, należy je zainstalować z wykorzystaniem NPM:
npm install --global git-conventional-commits
Narzędzie zostanie aktywowane automatycznie poprzez wykorzystanie Husky.Net -- aby skorzystać z Husky, należy wykonać pierwszy raz komendę dotnet restore
na projekcie Fracture.Api\Fracture.Api.csproj
Server\Fracture.Server.csproj
i zostanie automatycznie zainstalowane wraz z innymi zależnościami.
W podobny sposób, przed każdym commitem, pliki zostaną sprawdzone i przeformatowane z wykorzystaniem narzędzia csharpier w celu ujednolicenia stylu pisania kodu.
Autorzy
Ten projekt jest rozwijany przez członków Koła Naukowego "Grupa .NET na PolitechnicePolitechniki Lubelskiej".
Podziękowania
Chcielibyśmy podziękować wszystkim, którzy przyczynili się do tego projektu. Dziękujemy za zainteresowanie naszym projektem i zapraszamy do wspólnego tworzenia wspaniałejrozwoju gry!