Minimalistyczna implementacja systemu text2sql wykorzystująca architekturę MCP (Model-Controller-Protocol) zintegrowana z TinyLLM, umożliwiająca tłumaczenie zapytań w języku naturalnym na SQL i wykonywanie ich na bazie danych SQLite.
- Fedora (lub inna dystrybucja Linuxa)
- Python 3.8+
- SQLite
- Wymagane pakiety zostaną zainstalowane przez skrypt instalacyjny
-
Sklonuj repozytorium:
git clone https://github.com/fin-officer/text2sql-mcp.git cd text2sql-mcp
-
Uruchom skrypt instalacyjny:
chmod +x setup.sh ./setup.sh
Lista plików projektu
text2sql-mcp/
├── README.md # Dokumentacja projektu
├── cli_client.py # Klient interaktywny
├── install_dependencies.sh # Skrypt do instalacji zależności
├── mcp_server.py # Serwer MCP
├── requirements.txt # Lista zależności projektu
├── rest_api.py # Klient API REST
├── run_text2sql.sh # Skrypt do uruchamiania komponentów
├── setup.sh # Skrypt instalacyjny
├── start_tinyllm.py # Skrypt do uruchomienia TinyLLM
├── test_text2sql.py # Testy jednostkowe
├── tinyllm_client.py # Klient TinyLLM
└── tinyllm_server.py # Serwer TinyLLM
- MCP Server (
mcp_server.py
) - Serwer MCP implementujący funkcjonalność text2sql - CLI Client (
cli_client.py
) - Interaktywny shell dla text2sql - REST API (
rest_api.py
) - API REST dla text2sql - TinyLLM Client (
tinyllm_client.py
) - Klient do usługi TinyLLM - TinyLLM Server (
start_tinyllm.py
) - Skrypt do uruchomienia serwisu TinyLLM
Aby zainstalować wszystkie zależności projektu, wykonaj następujące kroki:
-
Nadaj uprawnienia wykonywania skryptowi instalacyjnemu:
chmod +x install.sh
-
Uruchom skrypt instalacyjny:
./install.sh
Skrypt zainstaluje wszystkie wymagane pakiety systemowe (jeśli używasz Fedora lub systemu opartego na APT) oraz zależności Pythona wymienione w pliku requirements.txt
.
Alternatywnie, możesz też ręcznie zainstalować zależności używając pip:
pip install -r requirements.txt
Jeśli chcesz zainstalować zależności w wirtualnym środowisku, możesz wykonać:
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
Projekt można uruchomić na kilka sposobów:
./run_text2sql.sh all
./run_text2sql.sh tinyllm
./run_text2sql.sh api
./run_text2sql.sh shell
W interaktywnym shellu możesz wpisywać zapytania w języku naturalnym:
text2sql> create a user named John
text2sql> show all users
text2sql> create a product named Laptop price 999.99
text2sql> show all products
API REST jest dostępne pod adresem http://localhost:8000/ z następującymi endpointami:
GET /schema
- Pobiera schemat bazy danychGET /examples
- Pobiera przykłady zapytańPOST /translate
- Tłumaczy zapytanie w języku naturalnym na SQLPOST /query
- Wykonuje zapytanie SQLPOST /natural
- Przetwarza zapytanie w języku naturalnym, tłumaczy na SQL i wykonuje
Dokumentacja API jest dostępna pod adresem http://localhost:8000/docs
curl -X POST "http://localhost:8000/translate" \
-H "Content-Type: application/json" \
-d '{"query": "create a user named John"}'
curl -X POST "http://localhost:8000/natural" \
-H "Content-Type: application/json" \
-d '{"query": "show all users"}'
Projekt wykorzystuje architekturę MCP (Model-Controller-Protocol), która składa się z:
- Model - Odpowiada za operacje na bazie danych SQLite
- Controller - Zawiera logikę biznesową, w tym tłumaczenie języka naturalnego na SQL
- Protocol - Zarządza komunikacją między klientami a serwerem
Projekt jest zbudowany modułowo, co umożliwia łatwe rozszerzanie i integrację z innymi systemami.
Aby rozszerzyć funkcjonalność projektu:
- Dodawanie nowych tabeli - Zmodyfikuj funkcję
setup_database
wmcp_server.py
- Dodawanie nowych typów zapytań - Rozszerz funkcję
translate_to_sql
wmcp_server.py
- Integracja z innymi modelami LLM - Zmodyfikuj
tinyllm_client.py
istart_tinyllm.py
- mcp_server.py - Serwer MCP implementujący funkcjonalność text2sql
- cli_client.py - Interaktywny shell dla text2sql
- rest_api.py - API REST dla text2sql
- tinyllm_client.py - Klient do usługi TinyLLM
- start_tinyllm.py - Skrypt do uruchomienia serwisu TinyLLM
- tinyllm_server.py - Serwer TinyLLM (wcześniej generowany dynamicznie)
- setup.sh - Skrypt instalacyjny dla systemu Fedora
- run_text2sql.sh - Skrypt do uruchamiania poszczególnych komponentów
- test_text2sql.py - Testy jednostkowe
- README.md - Dokumentacja projektu
Stwórzmy brakujący plik run_text2sql.sh
jako osobny skrypt zamiast generować go dynamicznie:
Stwórzmy również plik tinyllm_server.py
, który wcześniej był generowany dynamicznie:
Zaktualizujmy również skrypt start_tinyllm.py
, aby używał predefiniowanego pliku tinyllm_server.py
zamiast generować go dynamicznie:
Zaktualizujmy również skrypt instalacyjny setup.sh
, aby był bardziej przejrzysty i nie generował innych skryptów:
Oto kompletna lista plików projektu text2sql w wersji z MCP i TinyLLM. Wszystkie pliki są bezpośrednio dostępne w projekcie, bez dynamicznego generowania ich w czasie wykonania:
-
mcp_server.py
- Serwer MCP implementujący funkcjonalność text2sql
- Zawiera definicje zasobów i narzędzi MCP
- Łączy się z bazą danych SQLite
-
cli_client.py
- Interaktywny klient CLI
- Łączy się z serwerem MCP przez protokół stdio
- Pozwala na wprowadzanie zapytań w języku naturalnym
-
rest_api.py
- Klient API REST
- Udostępnia funkcjonalność text2sql przez HTTP
- Umożliwia integrację z innymi aplikacjami
-
tinyllm_client.py
- Klient do usługi TinyLLM
- Odpowiada za tłumaczenie zapytań w języku naturalnym na SQL
- Komunikuje się z serwerem TinyLLM przez REST API
-
tinyllm_server.py
- Serwer TinyLLM
- Implementuje API kompatybilne z OpenAI
- Wykorzystuje llama-cpp-python do ładowania i uruchamiania modelu
-
start_tinyllm.py
- Skrypt do konfiguracji i uruchomienia lokalnego serwisu TinyLLM
- Instaluje wymagane zależności
- Pobiera model z HuggingFace, jeśli jest to konieczne
- Uruchamia serwer TinyLLM
-
run_text2sql.sh
- Skrypt pomocniczy do uruchamiania komponentów systemu
- Zawiera funkcje do uruchamiania shella, API lub TinyLLM
- Umożliwia uruchomienie wszystkich komponentów jednocześnie
-
setup.sh
- Skrypt instalacyjny dla systemu Fedora
- Konfiguruje wszystkie niezbędne zależności
- Sprawdza, czy wszystkie pliki projektu są dostępne
-
test_text2sql.py
- Testy jednostkowe dla weryfikacji poprawności działania implementacji
- Zawiera testy dla serwera MCP i klienta
-
README.md
- Dokumentacja projektu
- Zawiera instrukcje instalacji i uruchomienia
- Opisuje architekturę i funkcjonalność systemu
Upewnij się, że masz następujące pliki w katalogu projektu:
cli_client.py
(uproszczona wersja)rest_api.py
(uproszczona wersja)run_text2sql.sh
(uproszczona wersja)install.sh
(uproszczona wersja)
Wykonaj poniższe polecenia:
chmod +x install.sh
./install.sh
Ten skrypt:
- Zainstaluje wymagane pakiety systemowe
- Utworzy wirtualne środowisko Python (o ile nie istnieje)
- Zainstaluje niezbędne zależności Pythona
- Nada uprawnienia wykonywania skryptom
Najpierw aktywuj wirtualne środowisko:
source venv/bin/activate
Następnie uruchom aplikację:
# Uruchom interaktywny shell
./run_text2sql.sh shell
# Lub uruchom API REST
./run_text2sql.sh api
# Lub uruchom oba komponenty naraz
./run_text2sql.sh all
W interaktywnym shellu możesz wprowadzać zapytania w języku naturalnym:
text2sql> create a user named John
text2sql> show all users
text2sql> create a product named Laptop price 999.99
text2sql> show all products
Jeśli uruchomiłeś API REST, możesz korzystać z endpointów:
GET http://localhost:8000/schema
- Pobiera schemat bazy danychGET http://localhost:8000/examples
- Pobiera przykłady zapytańPOST http://localhost:8000/translate
- Tłumaczy zapytanie w języku naturalnym na SQLPOST http://localhost:8000/query
- Wykonuje zapytanie SQLPOST http://localhost:8000/natural
- Przetwarza zapytanie w języku naturalnym
Dokumentacja API dostępna jest pod adresem: http://localhost:8000/docs
- Ta uproszczona wersja nie używa MCP ani TinyLLM, więc nie ma problemów z instalacją tych zależności
- Używa podstawowego mechanizmu tłumaczenia opartego na regułach
- Obsługuje tylko proste zapytania (tworzenie użytkowników, wyświetlanie wszystkich użytkowników, itp.)
- Wszystkie dane są przechowywane w lokalnej bazie danych SQLite (
text2sql.db
)