From dcccdf7365fc137d02cc2416dde30ec468f3bc37 Mon Sep 17 00:00:00 2001 From: Marco Minerva Date: Fri, 14 Jun 2024 17:42:37 +0200 Subject: [PATCH] Enhanced app with Vector Search support - Updated README.md with details on Vector Support in Azure SQL Database, application functionalities, and setup instructions. - Removed inheritance of `Question` class from `Search` class and deleted `Search` class. - Minor adjustment in Program.cs for endpoint description consistency. - Simplified appsettings.Development.json by removing the empty "ConnectionStrings" section. - Enhanced Script.sql with SQL commands to create `DocumentChunks` and `Documents` tables, including schema for identifiers, content, embeddings, document names, creation dates, and established a foreign key relationship between the two tables. --- README.md | 13 +++++++- Script.sql | 30 ++++++++++++++++++ SqlDatabaseVectorSearch/Models/Question.cs | 2 +- SqlDatabaseVectorSearch/Models/Search.cs | 4 --- SqlDatabaseVectorSearch/Program.cs | 2 +- .../appsettings.Development.json | 3 -- SqlServerVectorSearch.png | Bin 0 -> 44874 bytes 7 files changed, 44 insertions(+), 10 deletions(-) create mode 100644 Script.sql delete mode 100644 SqlDatabaseVectorSearch/Models/Search.cs create mode 100644 SqlServerVectorSearch.png diff --git a/README.md b/README.md index e116d95..87e2201 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,13 @@ # SQL Database Vector Search Sample -A repository that showcases the Vector Support in Azure SQL Database to perform embeddings and RAG \ No newline at end of file +A repository that showcases the Vector Support in Azure SQL Database to perform embeddings and RAG with Azure OpenAI. + +> [!IMPORTANT] +> Usage of this application requires the Vector Support feature in Azure SQL Database, currently in EAP. [See this blog post](https://devblogs.microsoft.com/azure-sql/announcing-eap-native-vector-support-in-azure-sql-database/) for more details. + +The application is a Minimal API that exposes endpoints to load documents, generate embeddings and save them into the database as Vectors, and perform searches using Vector Search and RAG. Database access is done using the [EFCore.SqlServer.VectorSearch](https://github.com/efcore/EfCore.SqlServer.VectorSearch) library. + +### Setup + +- Create an Azure SQL Database on a server that has the Vector Support feature enabled. +- Execute the [Scripts.sql](https://github.com/marcominerva/SqlDatabaseVectorSearch/blob/master/Scripts.sql) file to create the tables needed by the application. +- Open the [appsettings.json](https://github.com/marcominerva/SqlDatabaseVectorSearch/blob/master/SqlDatabaseVectorSearch/appsettings.json) file and set the connection string to the database and the other settings required by Azure OpenAI. \ No newline at end of file diff --git a/Script.sql b/Script.sql new file mode 100644 index 0000000..2b62ad4 --- /dev/null +++ b/Script.sql @@ -0,0 +1,30 @@ +CREATE TABLE [dbo].[DocumentChunks]( + [Id] [uniqueidentifier] NOT NULL, + [DocumentId] [uniqueidentifier] NOT NULL, + [Content] [nvarchar](max) NOT NULL, + [Embedding] [varbinary](8000) NOT NULL, + CONSTRAINT [PK_DocumentChunks] PRIMARY KEY CLUSTERED +( + [Id] ASC +)) +GO + +CREATE TABLE [dbo].[Documents]( + [Id] [uniqueidentifier] NOT NULL, + [Name] [nvarchar](255) NOT NULL, + [CreationDate] [datetimeoffset](7) NOT NULL, + CONSTRAINT [PK_Documents] PRIMARY KEY CLUSTERED +( + [Id] ASC +)) +GO + +ALTER TABLE [dbo].[DocumentChunks] ADD CONSTRAINT [DF_DocumentChunks_Id] DEFAULT (newid()) FOR [Id] +GO + +ALTER TABLE [dbo].[Documents] ADD CONSTRAINT [DF_Documents_Id] DEFAULT (newid()) FOR [Id] +GO + +ALTER TABLE [dbo].[DocumentChunks] WITH CHECK ADD CONSTRAINT [FK_DocumentChunks_Documents] FOREIGN KEY([DocumentId]) +REFERENCES [dbo].[Documents] ([Id]) +GO diff --git a/SqlDatabaseVectorSearch/Models/Question.cs b/SqlDatabaseVectorSearch/Models/Question.cs index e853813..4fb45db 100644 --- a/SqlDatabaseVectorSearch/Models/Question.cs +++ b/SqlDatabaseVectorSearch/Models/Question.cs @@ -1,3 +1,3 @@ namespace SqlDatabaseVectorSearch.Models; -public record class Question(Guid ConversationId, string Text) : Search(Text); +public record class Question(Guid ConversationId, string Text); diff --git a/SqlDatabaseVectorSearch/Models/Search.cs b/SqlDatabaseVectorSearch/Models/Search.cs deleted file mode 100644 index a3a3077..0000000 --- a/SqlDatabaseVectorSearch/Models/Search.cs +++ /dev/null @@ -1,4 +0,0 @@ -namespace SqlDatabaseVectorSearch.Models; - -public record class Search(string Text); - diff --git a/SqlDatabaseVectorSearch/Program.cs b/SqlDatabaseVectorSearch/Program.cs index ab39ecb..dc2a595 100644 --- a/SqlDatabaseVectorSearch/Program.cs +++ b/SqlDatabaseVectorSearch/Program.cs @@ -101,7 +101,7 @@ documentsApiGroup.MapDelete("{documentId:guid}", async (Guid documentId, VectorS .WithOpenApi(operation => { operation.Summary = "Deletes a document"; - operation.Description = "This endpoint deletes the document and all its chunks from SQL Server"; + operation.Description = "This endpoint deletes the document and all its chunks from SQL Server."; return operation; }); diff --git a/SqlDatabaseVectorSearch/appsettings.Development.json b/SqlDatabaseVectorSearch/appsettings.Development.json index 1fc08ee..63fe121 100644 --- a/SqlDatabaseVectorSearch/appsettings.Development.json +++ b/SqlDatabaseVectorSearch/appsettings.Development.json @@ -1,7 +1,4 @@ { - "ConnectionStrings": { - "SqlConnection": "" - }, "Logging": { "LogLevel": { "Default": "Information", diff --git a/SqlServerVectorSearch.png b/SqlServerVectorSearch.png new file mode 100644 index 0000000000000000000000000000000000000000..2d83803416c83949ef79837dd7ebd860f3368364 GIT binary patch literal 44874 zcmeFZXH-*9^e!9_L_|O-q99@cK@d=B3er?SKzeThL|Q_J5b1~o1p%c!||(RS9edj?DD$ ztUgby`~d*2fWLnXQ!YX;0Duaj_G5L^7r+$)dsZCe=y+Yhso1&r;WL7ULTyT2QH0|o ziMpFb-``#)G-5on$zM9y$Ub?$ z(`z_Kfr=$-jITRoY#-KYkKIovXU&MJNEwwJuXtcpP>p?vDRoy13@-ZwK#cPVBLEPY zwlj9zGStP1Tb!V@KueOdtX*@ym`i3ZeY4LZ>EA?CG4tY{q?z%QMqIXW;K&n?{CVnI zxNn>knFpX|rO8DX@q4YpdE`Jwf~tR~jzNvC)ClC4=VaBQYESQq0ODO4+ip+DOvJst$zYhn1$aAVUqhs~i2XZlSLV~?0rM?K@k)U! z6^lU$i2_;qxp&Q%rDcW)uuqW2-}TIO=N!fXFJ@vVChz11dy`r=$Cr7aBY`g(KO>v0 zh0q1RrS`E1QR~7z^XL$8z^DjpMc8qHRh3vS4Q@uIgTciGVp`B(ca{hfr&w zN**gayib0hYm9;`7I-fxct>^ONN3GT%xAE+ zm8;tbRs+*f{jPEHR_ z4W(x3qz`UVfl%cX5XKpYE<`Kkm+CTJAYg0-M#J*xKOVU{8VrVs0610!^GlBREnLy6 zFF1q6k7EtwW*1rqzMMEtf*(9Ac`PpX5p&cu#E7@eLD-vDo#c2r+<@J&JYfRCdk2%w zteSPCx`MWGYrZx453;4Qba!3?3{PrUa9shH7XWZlV~2)ON6jS5MHY_>kj$q9EW zRSaA%aFoH%E2)YlEW;t0(}1fG4bbS0)M=LCEq%j_gAK*BRir@_Q(I22wQP9Pyti+s z(+}2NyAEx!AId zA6f-2uSFDuIkEz-FW#dYMBs1j$lh4F@&!O#Xo$_ZR|y`@P0B{~+n36Ui0GvJL>NRy z2rJoq8Jo-rJ%4|CtTiY-=fZ#%^n(q8Fn9aPRO@^YVX$3sTTbKY^Vt=%aoq&?OyrVv zJu&;OUs+(LIcSz6de;YK%!zI{>Z0xF6rBv?lL8mb&+Wk~d6`P|LQL&~&tSPVj>5zj z;`b?c_02Iv;3c}k);I-a$TzfiPLSn>AzH}yIugH+!4q|SN6cxhkov=&p5WD$R?U*& zKJH^m%Wmpaee^9=PwbyNCRD3pB_PwMZKuuzck)M3Rb-=8^O>aL1F86HOWDAhrxzn2khR|U}RSBI!mt?fE*c*JbnC8A=B>M-b(E@yTw z67(6NX&qhA4PeiNthDmZ^{pS#)yV^Ce#@T1!8bkOY<=#>vm%#%9d?0gL#4^V#7b8R zC)tqUe0Tw+hbR+Xp}+k)5bk{qxQhGyW}69|p3Z-ND)p>b{*(PGN=g2XKQr`4ES>r$6oK3lWuW0$6M4AFaGrrWm@FXMQ&k=DKb7J>R_{D)WV)U`{ zaE18Vd%GWbi10&+2v#Po|HgMslwtc8&Y$g7L{pjl$8wh3j8f)JSMc7m9l7J6=Cx7J zWu7nRau2)t+ygNxvOwl zNp?$l7?l^qzYw2yaIdem`(C4`W%YxIJI8Dl#wC%)Pxgsn$D_w3X`0Yxu*?eTg;xwP z9B%OPxZi|NGRZ{kcvR%O7XEVAzCcS7Y}p&mG;7X0%0D&Yw5~Cpu-ot$`g7C5bCU94 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