Sistema RAG (Retrieval-Augmented Generation) basato su .NET 8 e Angular per l'indicizzazione di documenti PDF e il retrieval semantico con vettori embedding.
rag-server/
โโโ RagBackend/ # Backend API (.NET 8 ASP.NET Core)
โ โโโ Services/ # Servizi (Embedding, Chat, VectorStore)
โ โโโ Models/ # Modelli dati
โ โโโ Dockerfile # Container Docker per il backend
โ โโโ appsettings.json # Configurazione
โ โโโ web.config # Configurazione IIS
โโโ rag-frontend/ # Frontend Angular (v22)
โ โโโ src/app/ # Applicazione Angular
โ โโโ package.json # Dipendenze frontend
โโโ docker-compose.yml # Orchestrazione servizi (Qdrant DB)
โโโ _check/ # Progetto di test check
โโโ _inspect/ # Progetto di test inspect
โโโ _ns/ # Progetto di test ns
โโโ readme.md # Questo file
Il sistema รจ composto da:
docker-compose up -d qdrant
Qdrant sarร disponibile su http://localhost:6333 (gRPC) e http://localhost:6334 (HTTP API).
Avviare il server llama.cpp per gli embedding con il modello nomic-embed-text:
.\llama-server.exe -m .\models\nomic-embed_text-Q8_0.gguf --embedding --host 0.0.0.0 --port 1337
Nota: Aggiornare l'URL in RagBackend/appsettings.json se il server non รจ in locale:
{
"LlamaCppEmbeddingServer": {
"Url": "http://your-embedding-server-ip:1337"
}
}
cd RagBackend
dotnet run
Il backend sarร disponibile su http://localhost:5000 (o la porta configurata).
cd rag-frontend
npm install
ng serve
Il frontend sarร disponibile su http://localhost:4200.
{
"Qdrant": {
"Url": "http://localhost:6334"
},
"LlamaCppEmbeddingServer": {
"Url": "http://100.78.184.121:1337"
},
"LlamaCppChatServer": {
"Url": "http://100.90.112.22:9000"
},
"EmbeddingModel": {
"Name": "nomic-embed-text-v1.5"
},
"Cors": {
"AllowedOrigins": ["*"]
}
}
| Setting | Descrizione | Default |
|---|---|---|
Qdrant:Url | URL del server Qdrant | http://localhost:6334 |
LlamaCppEmbeddingServer:Url | URL del server embedding llama.cpp | http://100.78.184.121:1337 |
LlamaCppChatServer:Url | URL del server chat llama.cpp | http://100.90.112.22:9000 |
EmbeddingModel:Name | Nome del modello embedding | nomic-embed-text-v1.5 |
Cors:AllowedOrigins | Origini CORS consentite | ["*"] |
POST /api/index?content=Testo%20da%20indicizzare
Content-Type: text/plain
Divide il testo in chunk e li indicizza nel vettore store.
Risposta:
{
"message": "Indicizzati N chunk."
}
POST /api/upload-pdf
Content-Type: multipart/form-data
file: <pdf_file>
Carica un PDF, estrae il testo, genera embedding e li indicizza in background.
Risposta: (202 Accepted)
{
"jobId": "unique-job-id"
}
GET /api/upload-status/{jobId}
Risposta:
{
"jobId": "unique-job-id",
"fileName": "documento.pdf",
"status": "Processing|Completed|Failed",
"totalChunks": 10,
"processedChunks": 5,
"errorMessage": null
}
GET /api/search?query=testo%20ricerca
Risposta:
[
{
"id": "uuid",
"score": 0.85,
"metadata": {
"content": "...",
"source": "documento.pdf"
}
}
]
GET /api/ask?question=La%20tua%20domanda
Combina ricerca semantica e generazione LLM per risposte contestuali.
Risposta:
{
"answer": "Testo della risposta generata dal modello...",
"sources": [
{
"id": "uuid",
"score": 0.85
}
]
}
GET /api/documents
Risposta:
[
{
"source": "documento.pdf",
"chunks": 10
}
]
DELETE /api/documents/{source}
Elimina tutti i chunk associati a un documento sorgente.
Risposta:
{
"message": "Eliminati N chunk del documento 'documento.pdf'."
}
Interfaccia per la generazione di vettori embedding. Supporta singolo testo e batch.
Interfaccia per operazioni sul vector store Qdrant (Upsert, Search, DeleteBySource, ListSources).
Interfaccia per interazione con il server chat llama.cpp.
docker build -t rag-backend -f RagBackend/Dockerfile .
docker run -p 8080:8080 -p 8081:8081 rag-backend
docker-compose up -d
Questo avvia automaticamente Qdrant. Il backend va avviato separatamente.
Cors:AllowedOrigins in appsettings.json| Progetto | Descrizione |
|---|---|
_check/ | Progetto di test per verifiche |
_inspect/ | Progetto di test per ispezione |
_ns/ | Progetto di test ns |
[Da specificare]
Sistema RAG (Retrieval-Augmented Generation) basato su .NET 8 e Angular per l'indicizzazione di documenti PDF e il retrieval semantico con vettori embedding.
rag-server/
โโโ RagBackend/ # Backend API (.NET 8 ASP.NET Core)
โ โโโ Services/ # Servizi (Embedding, Chat, VectorStore)
โ โโโ Models/ # Modelli dati
โ โโโ Dockerfile # Container Docker per il backend
โ โโโ appsettings.json # Configurazione
โ โโโ web.config # Configurazione IIS
โโโ rag-frontend/ # Frontend Angular (v22)
โ โโโ src/app/ # Applicazione Angular
โ โโโ package.json # Dipendenze frontend
โโโ docker-compose.yml # Orchestrazione servizi (Qdrant DB)
โโโ _check/ # Progetto di test check
โโโ _inspect/ # Progetto di test inspect
โโโ _ns/ # Progetto di test ns
โโโ readme.md # Questo file
Il sistema รจ composto da:
docker-compose up -d qdrant
Qdrant sarร disponibile su http://localhost:6333 (gRPC) e http://localhost:6334 (HTTP API).
Avviare il server llama.cpp per gli embedding con il modello nomic-embed-text:
.\llama-server.exe -m .\models\nomic-embed_text-Q8_0.gguf --embedding --host 0.0.0.0 --port 1337
Nota: Aggiornare l'URL in RagBackend/appsettings.json se il server non รจ in locale:
{
"LlamaCppEmbeddingServer": {
"Url": "http://your-embedding-server-ip:1337"
}
}
cd RagBackend
dotnet run
Il backend sarร disponibile su http://localhost:5000 (o la porta configurata).
cd rag-frontend
npm install
ng serve
Il frontend sarร disponibile su http://localhost:4200.
{
"Qdrant": {
"Url": "http://localhost:6334"
},
"LlamaCppEmbeddingServer": {
"Url": "http://100.78.184.121:1337"
},
"LlamaCppChatServer": {
"Url": "http://100.90.112.22:9000"
},
"EmbeddingModel": {
"Name": "nomic-embed-text-v1.5"
},
"Cors": {
"AllowedOrigins": ["*"]
}
}
| Setting | Descrizione | Default |
|---|---|---|
Qdrant:Url | URL del server Qdrant | http://localhost:6334 |
LlamaCppEmbeddingServer:Url | URL del server embedding llama.cpp | http://100.78.184.121:1337 |
LlamaCppChatServer:Url | URL del server chat llama.cpp | http://100.90.112.22:9000 |
EmbeddingModel:Name | Nome del modello embedding | nomic-embed-text-v1.5 |
Cors:AllowedOrigins | Origini CORS consentite | ["*"] |
POST /api/index?content=Testo%20da%20indicizzare
Content-Type: text/plain
Divide il testo in chunk e li indicizza nel vettore store.
Risposta:
{
"message": "Indicizzati N chunk."
}
POST /api/upload-pdf
Content-Type: multipart/form-data
file: <pdf_file>
Carica un PDF, estrae il testo, genera embedding e li indicizza in background.
Risposta: (202 Accepted)
{
"jobId": "unique-job-id"
}
GET /api/upload-status/{jobId}
Risposta:
{
"jobId": "unique-job-id",
"fileName": "documento.pdf",
"status": "Processing|Completed|Failed",
"totalChunks": 10,
"processedChunks": 5,
"errorMessage": null
}
GET /api/search?query=testo%20ricerca
Risposta:
[
{
"id": "uuid",
"score": 0.85,
"metadata": {
"content": "...",
"source": "documento.pdf"
}
}
]
GET /api/ask?question=La%20tua%20domanda
Combina ricerca semantica e generazione LLM per risposte contestuali.
Risposta:
{
"answer": "Testo della risposta generata dal modello...",
"sources": [
{
"id": "uuid",
"score": 0.85
}
]
}
GET /api/documents
Risposta:
[
{
"source": "documento.pdf",
"chunks": 10
}
]
DELETE /api/documents/{source}
Elimina tutti i chunk associati a un documento sorgente.
Risposta:
{
"message": "Eliminati N chunk del documento 'documento.pdf'."
}
Interfaccia per la generazione di vettori embedding. Supporta singolo testo e batch.
Interfaccia per operazioni sul vector store Qdrant (Upsert, Search, DeleteBySource, ListSources).
Interfaccia per interazione con il server chat llama.cpp.
docker build -t rag-backend -f RagBackend/Dockerfile .
docker run -p 8080:8080 -p 8081:8081 rag-backend
docker-compose up -d
Questo avvia automaticamente Qdrant. Il backend va avviato separatamente.
Cors:AllowedOrigins in appsettings.json| Progetto | Descrizione |
|---|---|
_check/ | Progetto di test per verifiche |
_inspect/ | Progetto di test per ispezione |
_ns/ | Progetto di test ns |
[Da specificare]