使用 Azure AI 搜尋向量存放區連接器 (預覽)
警告
語意核心向量存放區功能處於預覽狀態,且需要重大變更的改善可能仍會在發行前有限的情況下發生。
概觀
Azure AI 搜尋向量存放區連接器可用來存取和管理 Azure AI 搜尋服務中的數據。 連接器具有下列特性。
功能區域 | 支援 |
---|---|
集合對應至 | Azure AI 搜尋索引 |
支援的索引鍵屬性類型 | 字串 |
支援的數據類型 |
|
支援的向量屬性類型 | ReadOnlyMemory<float> |
支援的索引類型 |
|
支援的距離函式 |
|
支援記錄中的多個向量 | Yes |
是否支援IsFilterable? | Yes |
是否支援IsFullTextSearchable? | Yes |
支援的 StoragePropertyName? | 否,請改用 JsonSerializerOptions 和 JsonPropertyNameAttribute 。 如需詳細資訊,請參閱這裡。 |
限制
值得注意的 Azure AI 搜尋連接器功能限制。
功能區域 | 因應措施 |
---|---|
不支援在集合建立期間設定全文搜索分析器。 | 直接使用 Azure AI 搜尋用戶端 SDK 來建立集合 |
開始使用
將 Azure AI 搜尋向量存放區連接器 NuGet 套件新增至您的專案。
dotnet add package Microsoft.SemanticKernel.Connectors.AzureAISearch --prerelease
您可以使用 Semantic Kernel 所提供的擴充方法,將向量存放區新增至 IServiceCollection
上KernelBuilder
可用的相依性插入容器或相依性插入容器。
using Azure;
using Microsoft.SemanticKernel;
// Using Kernel Builder.
var kernelBuilder = Kernel
.CreateBuilder()
.AddAzureAISearchVectorStore(new Uri(azureAISearchUri), new AzureKeyCredential(secret));
using Azure;
using Microsoft.SemanticKernel;
// Using IServiceCollection with ASP.NET Core.
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddAzureAISearchVectorStore(new Uri(azureAISearchUri), new AzureKeyCredential(secret));
也提供不採用任何參數的擴充方法。 這些要求 Azure AI 搜尋 SearchIndexClient
的實例必須個別向相依性插入容器註冊。
using Azure;
using Azure.Search.Documents.Indexes;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.SemanticKernel;
// Using Kernel Builder.
var kernelBuilder = Kernel.CreateBuilder();
kernelBuilder.Services.AddSingleton<SearchIndexClient>(
sp => new SearchIndexClient(
new Uri(azureAISearchUri),
new AzureKeyCredential(secret)));
kernelBuilder.AddAzureAISearchVectorStore();
using Azure;
using Azure.Search.Documents.Indexes;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.SemanticKernel;
// Using IServiceCollection with ASP.NET Core.
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddSingleton<SearchIndexClient>(
sp => new SearchIndexClient(
new Uri(azureAISearchUri),
new AzureKeyCredential(secret)));
builder.Services.AddAzureAISearchVectorStore();
您可以直接建構 Azure AI 搜尋向量存放區實例。
using Azure;
using Azure.Search.Documents.Indexes;
using Microsoft.SemanticKernel.Connectors.AzureAISearch;
var vectorStore = new AzureAISearchVectorStore(
new SearchIndexClient(
new Uri(azureAISearchUri),
new AzureKeyCredential(secret)));
可以建構具名集合的直接參考。
using Azure;
using Azure.Search.Documents.Indexes;
using Microsoft.SemanticKernel.Connectors.AzureAISearch;
var collection = new AzureAISearchVectorStoreRecordCollection<Hotel>(
new SearchIndexClient(new Uri(azureAISearchUri), new AzureKeyCredential(secret)),
"skhotels");
開始使用
使用 Azure 額外項目安裝語意核心,其中包括 Azure AI 搜尋 SDK。
pip install semantic-kernel[azure]
接著,您可以使用 類別建立向量存放區實例,這會使用 AzureAISearchStore
環境變數 AZURE_AI_SEARCH_ENDPOINT
並 AZURE_AI_SEARCH_API_KEY
連線到 Azure AI 搜尋服務實例,也可以直接提供這些值。 您也可以提供 Azure 認證或令牌認證,而不是 API 金鑰。
from semantic_kernel.connectors.memory.azure_ai_search import AzureAISearchStore
vector_store = AzureAISearchStore()
您也可以使用自己的 Azure 搜尋服務客戶端實例來建立向量存放區。
from azure.search.documents.indexes import SearchIndexClient
from semantic_kernel.connectors.memory.azure_ai_search import AzureAISearchStore
search_client = SearchIndexClient(endpoint="https://<your-search-service-name>.search.windows.net", credential="<your-search-service-key>")
vector_store = AzureAISearchStore(search_index_client=search_client)
您也可以直接建立集合。
from semantic_kernel.connectors.memory.azure_ai_search import AzureAISearchCollection
collection = AzureAISearchCollection(collection_name="skhotels", data_model_type=hotel)
序列化
由於 Azure AI 搜尋連接器需要一個簡單的聽寫,其欄位對應至索引做為輸入,因此串行化相當容易,只要傳回具有對應至索引欄位之索引鍵值的聽寫,從聽寫到存放區模型的內建步驟就是建立的聽寫的直接傳遞。
如需此概念的詳細資訊,請參閱 串行化檔。
開始使用
在 Maven 專案中加入下列相依性 pom.xml
,以在 Maven 專案中包含最新版的語意核心 Azure AI 搜尋數據連接器:
<dependency>
<groupId>com.microsoft.semantic-kernel</groupId>
<artifactId>semantickernel-data-azureaisearch</artifactId>
<version>[LATEST]</version>
</dependency>
接著,您可以使用 類別建立向量存放區實例 AzureAISearchVectorStore
,並將 AzureAISearch 用戶端設定為參數。
import com.azure.core.credential.AzureKeyCredential;
import com.azure.search.documents.indexes.SearchIndexClientBuilder;
import com.microsoft.semantickernel.data.azureaisearch.AzureAISearchVectorStore;
import com.microsoft.semantickernel.data.azureaisearch.AzureAISearchVectorStoreOptions;
import com.microsoft.semantickernel.data.azureaisearch.AzureAISearchVectorStoreRecordCollection;
import com.microsoft.semantickernel.data.azureaisearch.AzureAISearchVectorStoreRecordCollectionOptions;
public class Main {
public static void main(String[] args) {
// Build the Azure AI Search client
var searchClient = new SearchIndexClientBuilder()
.endpoint("https://<your-search-service-name>.search.windows.net")
.credential(new AzureKeyCredential("<your-search-service-key>"))
.buildAsyncClient();
// Build an Azure AI Search Vector Store
var vectorStore = AzureAISearchVectorStore.builder()
.withSearchIndexAsyncClient(searchClient)
.withOptions(new AzureAISearchVectorStoreOptions())
.build();
}
}
您也可以直接建立集合。
var collection = new AzureAISearchVectorStoreRecordCollection<>(searchClient, "skhotels",
AzureAISearchVectorStoreRecordCollectionOptions.<Hotel>builder()
.withRecordClass(Hotel.class)
.build());
資料對應
將數據模型的數據對應至記憶體時,Azure AI 搜尋連接器所使用的預設對應程式是 Azure AI 搜尋 SDK 所提供的對應程式。
此對應程式會將數據模型上的屬性清單直接轉換成 Azure AI 搜尋服務中的欄位,並使用 System.Text.Json.JsonSerializer
轉換為記憶體架構。 這表示如果需要與資料模型屬性名稱不同的記憶體名稱,則支援 使用 JsonPropertyNameAttribute
。
您也可以使用自定義實例搭配自定義 JsonSerializerOptions
屬性命名原則。 若要啟用此功能, JsonSerializerOptions
必須將 傳遞至 SearchIndexClient
和 AzureAISearchVectorStoreRecordCollection
建構時。
var jsonSerializerOptions = new JsonSerializerOptions { PropertyNamingPolicy = JsonNamingPolicy.SnakeCaseUpper };
var collection = new AzureAISearchVectorStoreRecordCollection<Hotel>(
new SearchIndexClient(
new Uri(azureAISearchUri),
new AzureKeyCredential(secret),
new() { Serializer = new JsonObjectSerializer(jsonSerializerOptions) }),
"skhotels",
new() { JsonSerializerOptions = jsonSerializerOptions });