個人的なメモ

Tomohiro Suzuki @hiro128_777 のブログです。Microsoft MVP for Developer Technologies 2017- 本ブログと所属組織の公式見解は関係ございません。

C# だけで Azure OpenAI の RAG を試してみたい (6)AI Search の検索インデックス作成

 
前の記事
hiro128.hatenablog.jp
 

AI Search の検索インデックス作成

クロールしてクレンジングしたはてなブログ記事のドキュメントを登録する AI Search のインデックスを一括で作成するコンソールアプリを準備しました。
github.com
 
なお、AI Search の検索インデックスは RDBMS の世界に例えれば

  • 検索インデックス = RDBMS のテーブル
  • ドキュメント = RDBMS のテーブルにおける行

と理解いただければ、イメージしやすいと思います。
 
検索インデックスのスキーマは以下のように C# のコードで記述できます。
この SDK は頻繁に更新されるので文法が変わっている可能性があります。最新情報を必ずご確認下さい!

            var semanticConfigName = "defaultSemanticConfig";
            var vectorConfigName = "defaultVectorConfigName";
            var algorithmConfigName = "hnsw";

            var vectorSearch = new VectorSearch();
            vectorSearch.Algorithms.Add(new HnswAlgorithmConfiguration(algorithmConfigName));
            vectorSearch.Profiles.Add(new VectorSearchProfile(vectorConfigName, algorithmConfigName));

            var semanticPrioritizedFields = new SemanticPrioritizedFields()
            {
                TitleField = new SemanticField("title"),
            };
            semanticPrioritizedFields.ContentFields.Add(new SemanticField("content"));
            // TODO : Add prioritizedKeywordsFields

            var semanticSearch = new SemanticSearch();
            semanticSearch.Configurations.Add(new SemanticConfiguration(semanticConfigName, semanticPrioritizedFields));

            var defaulIindex = new SearchIndex(indexName)
            {
                VectorSearch = vectorSearch,
                SemanticSearch = semanticSearch,
                Fields =
                {
                    new SearchField("id", SearchFieldDataType.String)
                    {
                        IsKey = true,
                        IsSearchable = true
                    },
                    new SearchField("lastUpdated", SearchFieldDataType.String)
                    {
                        IsSearchable = true,
                        IsFacetable = false,
                    },
                    new SearchField("content", SearchFieldDataType.String)
                    {
                        IsSearchable = true,
                        IsSortable = false,
                        IsFacetable = false,
                        IsFilterable = false,
                        AnalyzerName = LexicalAnalyzerName.JaMicrosoft
                    },
                    new SearchField("title", SearchFieldDataType.String)
                    {
                        IsSearchable = true,
                        IsSortable = false,
                        IsFacetable = false,
                        IsFilterable = false,
                        AnalyzerName = LexicalAnalyzerName.JaMicrosoft
                    },
                    new SearchField("filePath", SearchFieldDataType.String)
                    {
                        IsSearchable = true,
                        IsSortable = false,
                        IsFacetable = false,
                        IsFilterable = false
                    },
                    new SearchField("url", SearchFieldDataType.String)
                    {
                        IsSearchable = true
                    },
                    new SearchField("metadata", SearchFieldDataType.String)
                    {
                        IsSearchable = true
                    },
                    new SearchField("contentVector", SearchFieldDataType.Collection(SearchFieldDataType.Single))
                    {
                        IsSearchable = true,
                        VectorSearchDimensions = 1536,
                        VectorSearchProfileName = vectorConfigName
                    },
                },
            };

 

フィールド

このアプリで作成されるフィールドは以下のようになります。

 
各フィールド定義の詳細は以下の公式ドキュメントを参照ください。
learn.microsoft.com
 

セマンティック構成

このアプリで作成されるセマンティック構成は以下のようになります。

 

ベクタープロファイル

このアプリで作成されるベクタープロファイルは以下のようになります。

  
次の記事
hiro128.hatenablog.jp