ããã«ã¡ã¯ããµã€ãªã¹ãã¯ãããžãŒã®äœè€éœã§ãã 仿¥ã¯Azure AI Searchã®ã€ã³ãã¯ã·ã³ã°ã«é¢ããèšäºã«ãªããŸãã RAGã®æ§ç¯ã«ããã£ãŠãéåžžã«éèŠãšãªããAzure AI Searchãã®åºæ¬çãªãšããã解説ããŠãããŸãïŒ ã¯ããã« æ£çŽãªãšãããä»ãŸã§ãªããšãªãã§AI Search䜿ã£ãŠããŸããã AzurePortalã®AI SearchãããããŒã¿ãã€ã³ããŒãããšããããããæãã«ã€ã³ããã¯ã¹ãäœæããã ãµã³ãã«ã³ãŒããšãèŠããšãè¯ãæãã«ã€ã³ããã¯ã¹äœæããããã°ã©ã ãæ¢ã«æäŸãããŠãã ãšããããé©åœã«ããŒã¿æå
¥ããŠããRAGã«çµã¿èŸŒãã ããããªãã®åçè¿ã£ãŠãã ãšãã£ãæãã§ãäœãšãªãã§ã䜿ããŠã¯ããã®ã§ãããããã§ããã®ã…ïŒããšæãã è
°ãæ®ããŠå
¬åŒããã¥ã¡ã³ãããæ§ã
ãªèšäºãèªãã§ãŸãšããŠã¿ãŸããã ç®æ°ããæ
å ±ã¯ç¡ããããããªãã§ãã ãAI Searchå
šç¶ããããããããAI Searchãªããšãªãåãã£ãããšãªãã°å¹žãã§ãã (èªåãšããŠã¯ãå
¬åŒã®ãµã³ãã«ã®ã€ã³ãã¯ã·ã³ã°ã®ãµã³ãã«ã³ãŒãã¯çè§£ã§ããããã«ãªããŸããã) ä»åã®èšäºã§æ±ãããŒããšããŠã¯ãAI Searchã®äžã§ã ã¹ããŒãèšèšã®åºæ¬ ãã ããŒã¿æå
¥ã®å®è£
ã®éšåãšãã ã¹ããŒãã®åçš®ãã©ã¡ãŒã¿ã®è§£èª¬ããèšèšããããŒã¿ã®æå
¥ãŸã§ã®åºæ¬çãªæµãã解説ããŠããŸãã ãŸãããŸã ãŸã å匷äžã®èº«ãªã®ã§ãèŠåœéãã®ããšãæžããŠãããã³ã¡ã³ããªã©ã§æããŠããã ãããšå¹žãã§ãïŒ AI Searchã®äž»ãªæ©èœ Azure AI Searchã®äž»ããæ©èœãšããŠã¯ä»¥äž2ã€ã§ãã Azure AI Searchã«ããŒã¿ã远å ããåŠç(ã€ã³ãã¯ã·ã³ã°) Azure AI Searchã«å¯Ÿããæ€çŽ¢åŠç(ã¯ãšãªã®å®è¡) MSã®å
¬åŒã§ãæãããŠãã以äžã®å³ãåãããããã§ãã ã€ã³ãã¯ã·ã³ã° åçš®ããŒã¿ãAI Searchã«ç»é²ããæ€çŽ¢å¯èœãªç¶æ
ãšããŸãã ç¹åŸŽãšããŠã¯ ããã¹ããšããŠç»é²ããã ãã§ã¯ãªãããã¯ãã«å€ãšããŠãç»é²ãå¯èœ æå
¥ããããŒã¿ã«é¢ããŠã现ããã¬ãã«ã§å€æãæ€çŽ¢ã®èšå®ãè¡ãäºãå¯èœ(æ€çŽ¢æ§èœã«çŽçµ) ãšãã£ãç¹ãæããããããšæããŸãã ç¹°ãè¿ãã«ã¯ãªããŸããã仿¥ã¯ãã®ã€ã³ãã¯ã·ã³ã°ã®æ©èœã«ãã©ãŒã«ã¹ã ã¹ããŒãã®å®çŸ© ã€ã³ããã¯ã¹ã®äœæ ããŒã¿æå
¥ ãããã®è©±ãã¡ã€ã³ã«æžããŠãããŸãã ã¯ãšãªã®å®è¡ ãŠãŒã¶ãŒããã®è³ªåã«å¯ŸããŠåçãåºãæ©èœã§ãã ãŠãŒã¶ãŒããã®è³ªåäºé
ã«å¯ŸããŠãé¢é£ããããŒã¿ãè¿ãããšãå¯èœã§ãã ãã®æåãªãããã¹ãæ€çŽ¢ãå¯èœã§ããããã¯ãã«æ€çŽ¢ãã»ãã³ãã£ãã¯æ€çŽ¢ãšãã£ãé«åºŠãªæ€çŽ¢ãè¡ãããšãå¯èœã§ãã ã¯ãšãªã®å®è¡ã«é¢ãã¯ãåŒç€ŸæŠäºãåããã¿æ·±ã玹ä»ããŠããã®ã§ããã¡ããåç
§ãã ããïŒ (ãã®ããæ¬èšäºã§ã¯ã¹ã³ãŒãå€ãšããŸãã) çæAIæä»£ã®æ§ã
ãªæ€çŽ¢ææ³ãæ€èšŒãã ãAzure AI Searchã«ãããã¯ãã«/ã»ãã³ãã£ãã¯/ãã€ããªããæ€çŽ¢ã ã€ã³ãã¯ã·ã³ã°ãšã¯ MSã® ããã¥ã¡ã³ã ã確èªãããšã以äžã®ããã«å®çŸ©ãããŠããŸãã æ€çŽ¢ã€ã³ããã¯ã¹ãèšå®ããããã¹ãã®ã³ã³ãã³ããšããŒã¯ã³ãåã蟌ã¿ãè§£æããæ ŒçŽããããšãæããŸãã ã€ã³ããã¯ã¹äœæã«ãããæ
å ±ååŸããµããŒãããéã€ã³ããã¯ã¹ããã®ä»ã®ç©ççãªããŒã¿æ§é ãäœæãããŸãã ã¹ããŒãã«ãã¯ã¿ãŒ ãã£ãŒã«ããå«ãŸããŠããå Žåã¯ããã¯ãã« ã€ã³ããã¯ã¹ãäœæãããŸãã ã¡ãªã¿ã«ãã®ãIndexingããšããåèªã§ãããæ¥æ¬èªã ãšãã€ã³ãã¯ã·ã³ã°ããšãã€ã³ããã¯ã¹ã®äœæããšèš³ãããããšããããŸãã ãŸããä»ã«ããã€ã³ãã¯ãµãŒããšãã衚çŸããããããæ··ä¹±ããã¡ã§ãã æ¬èšäºã§ã¯ä»¥äžã®ããã«äœ¿ãåããããšæããŸãã ã€ã³ããã¯ã¹ ã³ã³ãã³ããæ ŒçŽããå Žæ(ããŒã¿æ§é ) ã€ã³ããã¯ã¹äœæ Azure AI Searchäžã«ã€ã³ããã¯ã¹ãäœæããäº ã€ã³ãã¯ã·ã³ã° äœæãããã€ã³ããã¯ã¹ã«å¯ŸããŠããŒã¿ãæå
¥ããäº ã€ã³ãã¯ãµãŒ ã€ã³ãã¯ãµãŒãè¡ãã¢ããªã±ãŒã·ã§ã³ ã€ã³ããã¯ã¹ã®ã¹ããŒãå®çŸ© ãŸãã¯ã€ã³ããã¯ã¹ã®ãããã«ã¹ããŒãã®èšèšã«ã€ããŠèŠãŠãããããšæããŸãã ããããã€ã³ããã¯ã¹ã®ããŒã¿æ§é ãæ±ºããéšåã«ãªããŸãã ã¹ããŒãã«é¢ããŠã¯ãå
¬åŒã® ããã¥ã¡ã³ã ã«ä»¥äžã®ãããªjsonã®åœ¢ã§å®çŸ©ãããŠããŸããã {  "name": "name_of_index, unique across the service",  "fields": [   {    "name": "name_of_field",    "type": "Edm.String | Collection(Edm.String) | Collection(Edm.Single) | Edm.Int32 | Edm.Int64 | Edm.Double | Edm.Boolean | Edm.DateTimeOffset | Edm.GeographyPoint",    "searchable": true (default where applicable) | false (only Edm.String and Collection(Edm.String) fields can be searchable),    "filterable": true (default) | false,    "sortable": true (default where applicable) | false (Collection(Edm.String) fields cannot be sortable),    "facetable": true (default where applicable) | false (Edm.GeographyPoint fields cannot be facetable),    "key": true | false (default, only Edm.String fields can be keys),    "retrievable": true (default) | false,    "analyzer": "name_of_analyzer_for_search_and_indexing", (only if 'searchAnalyzer' and 'indexAnalyzer' are not set)    "searchAnalyzer": "name_of_search_analyzer", (only if 'indexAnalyzer' is set and 'analyzer' is not set)    "indexAnalyzer": "name_of_indexing_analyzer", (only if 'searchAnalyzer' is set and 'analyzer' is not set)    "normalizer":  "name_of_normalizer", (applies to fields that are filterable)    "synonymMaps": "name_of_synonym_map", (optional, only one synonym map per field is currently supported)    "dimensions": "number of dimensions used by an emedding models", (applies to vector fields only, of type Collection(Edm.Single))    "vectorSearchProfile": "name_of_vector_profile" (indexes can have many configurations, a field can use just one)   }  ],  "suggesters": [ ],  "scoringProfiles": [ ],  "analyzers":(optional)[ ... ],  "charFilters":(optional)[ ... ],  "tokenizers":(optional)[ ... ],  "tokenFilters":(optional)[ ... ],  "defaultScoringProfile": (optional) "...",  "corsOptions": (optional) { },  "encryptionKey":(optional){ },  "semantic":(optional){ },  "vectorSearch":(optional){ } } äžéšæœåºããŠå³ã«èµ·ãããšä»¥äžã®ãããªåœ¢ãšãªããŸãã ã€ã¡ãŒãžãšããŠã¯RDBMSã®ããŒãã«èšèšã«ãè¿ãã®ããªããšå人çã«ã¯æã£ãŠããŸãã name ãããŒãã«åã fields ãåã«ã©ã ã«å¯Ÿå¿ããŠããæãã§ãã RDBMSã§ãåã«ã©ã ã«å¯ŸããŠåã®å®çŸ©ãããããnullableã«èšå®ãããã§ããŸãããã AI Searchã¯ããã«å ããŠããæ€çŽ¢å¯Ÿè±¡ãšãããã©ããããªã©ã®æ€çŽ¢ã«ç¹åãããã©ã¡ãŒã¿ãæã£ãŠãããããªåœ¢ãšãªããŸãã ã¹ããŒãå
容 ãã®ã€ã³ããã¯ã¹ãæ§æããããã®å€ã«ã€ããŠããäœãšãªãçè§£ã§ãããã¬ãã«ãç®æšã«ã衚ã«ãŸãšããŠã¿ãŸããã äžå¿ããããããã®ãããRDBMSã§ãããšïŒããšããé
ç®ãä»ããŠãŸããããããŸã§ã€ã¡ãŒãžãã€ããçšåºŠã§èªãã§ãã ããã ããããã§ãã RDBMSã®ããŒãã«èšèšãšAI Searchã®ã¹ããŒãèšèšã§ã¯èãæ¹ãç°ãªãéšåãå€ã ããšæããŸãã key velue RDMBSã§ãããšïŒ name ã€ã³ããã¯ã¹åã§ãã ããŒãã«å fields ã€ã³ããã¯ã¹ã®äž»åœ¹ã§ãã ããŒã¿ãæå
¥ããã«ããã£ãŠãããŒã¿ã®åœ¢åŒãªã©ã®è©³çŽ°ãæ±ºå®ããŸã ã«ã©ã fields.name ãã£ãŒã«ãã®åç§°ã§ãã ã«ã©ã å fields.type æå
¥ããããŒã¿ã®å. Edm.StringãEdm.Singleãªã©ããããŸãã ãã¯ãã«å€ãå
¥ããéã¯Collection[Edm.single]ãå©çšããŸãã ã«ã©ã ã®å fields.searchable å
šæãŸãã¯ãã¯ãã«æ€çŽ¢ãå¯èœãšãããåŠããèšå®ããŸãã fields.filterable æ€çŽ¢æã®$filterã¯ãšãªã«å¯Ÿå¿ãããåŠããèšå®ããŸãã fields.sortable æ€çŽ¢çµæã®äžŠã¹æ¿ãå¯èœãåŠããèšå®ããŸãã ããã©ã«ãã§ã¯AI Searchã§ç®åºãããã¹ã³ã¢ãé«ãé ã«äžŠã³æ¿ããããŸããã sortableãå©çšããããšã§ãã®fieldã®å€ã§äžŠã¹æ¿ããããšãå¯èœãšãªããŸãã fields.facetable ãã£ãŒã«ãã®å€ã§ã®éçŽãªã©ãè¡ããŸãã äŸãã°ååã®ããŒã¿ãAI Searchã«ç»é²ããå Žåã fields.nameãcategoryããŠããããfoodããclothesããªã©ã®å€ãç»é²ããŸãã ãããšæ€çŽ¢çµæãšããŠããfoodãã®ããŒã¿ãäœä»¶ããclothesãã®ããŒã¿ãäœä»¶ã ãšãã£ããããªéçŽæ
å ±ã確èªããããšãå¯èœã§ãã fields.key åãã£ãŒã«ããäžæã«å®ããããã®å€ã typeãšããŠã¯Edm.Stringã§ããå¿
èŠããããŸã äž»ããŒ(Primary Key) fields.retrievable æ€çŽ¢çµæãšããŠå€ãè¿ããåŠããèšå®ããŸãã ãFilterãSortã®å¯Ÿè±¡ãšããŠã¯å©çšããããããŠãŒã¶ãŒã«ã¯å€ãè¿ããããªãïŒã ãšãã£ãèŠæã®æã«å©çšã§ããããšæããŸãã fields.analyzer ããã¹ããããŒã¯ã³ã«å€æããããã®ã¢ãã©ã€ã¶ã®èšå®ã§ãã æç« ã 圢æ
çŽ è§£æ ããéã«å©çšãããŸãã æç€ºçãªæå®ããªããã°æšæºã§Luceneãšããã¢ãã©ã€ã¶ãå©çšãããŸãã ããŒã¿ãæ¥æ¬èªã®å Žåã¯ã²ãšãŸãja.luceneã®å©çšããå§ãããŸãã fields. searchAnalyzer äžèšã®analyzerã¯ã€ã³ãã¯ã·ã³ã°ãšã¯ãšãªæ€çŽ¢ã®å Žåã«åãAnalyzerã䜿ããŸããã ããããåãããå Žåã«åå¥ã«èšå®ããããšãå¯èœã§ã fields. indexAnalyzer åäž fields.normalizer Normalizerã¯ãfilterableãsortableãšããŠæå®ããããã£ãŒã«ãã«å¯Ÿããæ€çŽ¢ããã¹ããäºåã«åŠçããæ©èœã§ãã åŠçå
容ãšããŠã¯ãäŸãã°æ€çŽ¢ããã¹ããlowercaseã«å€æããããšãã£ãå
容ã§ãè¡šèšæºããªã©ã«å¯Ÿå¿å¯èœã§ãã ããã©ã«ãã¯nullãšãªã£ãŠãããããå¿
èŠãšããå Žåã¯èšå®ããŸãã fields.synonymMaps é¡çŸ©èªããŸãšããsynonymMapãæå®ããŸãã äŸãã°ãã«ããéšããå€ç«ããã²ãªã©è±ªéšããšãã£ãèšèã¯ã©ãã䌌ããããªäºè±¡ã瀺ããŠããŸãã ãã®æã«ããããMapã«å€æããŠããããšã§ãã«ããéšããšããæ€çŽ¢ã¯ãšãªãæ¥ãå Žåã§ãã ãå€ç«ããšããŠæ±ãããšãã§ããæ©èœã§ãã fields.dimensions ãã¯ãã«åã®ããŒã¿ã®æ¬¡å
æ°ã«ãªããŸãã fields.vectorSearchProfile ãã¯ãã«åãããéã«è¡ããããã¡ã€ã«ãæå®ããŸã(åŸè¿°) suggesters ãªãŒãã³ã³ããªãŒãããµãžã§ã¹ãã®å
¥åã«äœ¿çšãããã£ãŒã«ããæå®ããŸãã scoringProfiles ã¹ã³ã¢ä»ããããéã«ãåãã£ãŒã«ãã«å¯ŸããŠéã¿ã¥ããè¡ãããšãã§ããŸãã äŸãã°ãã¡ãã¥ãŒããšãããã£ãŒã«ããéèŠããããã«èšå®ããå Žåã ãã³ãŒããŒããšãããŠãŒã¶ãŒããã®æ€çŽ¢ã«å¯ŸããŠã â ãã¡ãã¥ãŒãã®ãã£ãŒã«ãã®äžã«ãã³ãŒããŒããå«ãŸããŠããããŒã¿ â¡ã詳现説æããšãããã£ãŒã«ãã®äžã«ãã³ãŒããŒããå«ãŸããŠããããŒã¿ ããã£ãå Žåãâ ã®æ¹ããã¹ã³ã¢ãé«ããªããŸãã analyzers fields.analyzerã§ã«ã¹ã¿ã ã¢ãã©ã€ã¶ãŒå©çšããå Žåã¯ãããã§ã«ã¹ã¿ã ã¢ãã©ã€ã¶ãŒã®å
容ãèšå®ããŸã corsOptions CORSã®èšå®ãè¡ããŸã encryptionKey ã€ã³ããã¯ã¹å
ã®ããŒã¿ãäºéã§æå·åããŸãã semantic ã»ãã³ãã£ãã¯ã©ã³ã«ãŒã®æ§æãã©ã¡ãŒã¿ã®æå®ãè¡ããŸã(åŸè¿°) vectorSearch ãã¯ãã«æ€çŽ¢ã®ããã®ã¢ã«ãŽãªãºã ããã³ãã©ã¡ãŒã¿ã®æå®ãè¡ããŸã(åŸè¿°) Fieldã«äžèº«ã«çç®ãããšãsearchableãfilterable, sortableãªã©ãRDBMSã§ã¯ã¯ãšãªã工倫ããŠå®è¡ããŠããéšåã AI Searchã§ã¯ã€ã³ããã¯ã¹å®çŸ©ã®æã«çްããå®çŸ©ããŠããããšãåãããŸãã æãããããèšå€§ãªããŒã¿ããæ£ç¢ºãã€é«éã«æ€çŽ¢ããããã®ãã€ã³ããªã®ããšæããŸãã ããã ãAI Searchã«ãããŠã¹ããŒãèšèšãéèŠã§ããããšããäºããããããŸãã ããã§ã semantic ãš vectorSearch ã«é¢ããŠã¯éèŠãªãã©ã¡ãŒã¿ã§ããã®ã§ãããå°ãæ·±å ããŠã¿ãŠã¿ãããšæããŸãã semantic å
¬åŒã®ããã¥ã¡ã³ãã«semanticã®å€ã®ãµã³ãã«ããããŸããã "semantic": {   "defaultConfiguration": "my-semantic-config-default",   "configurations": [     {       "name": "my-semantic-config-default",       "prioritizedFields": {         "titleField": {           "fieldName": "HotelName"         },         "prioritizedContentFields": [           {             "fieldName": "Description"           }         ],         "prioritizedKeywordsFields": [           {             "fieldName": "Tags"           }         ]       }     },           {       "name": "my-semantic-config-desc-only",       "prioritizedFields": {         "prioritizedContentFields": [           {             "fieldName": "Description"           }         ]       }     }   ] } 倧ããªæµããšããŠã¯ã configurationsã®é
åã®äžã§åã»ãã³ãã£ãã¯ã©ã³ã«ãŒã®èšå®ãè¡ã ããããæ€çŽ¢æã«æå®ããŠå©çšãã圢ã«ãªããŸãã åå€ã®èª¬æãšããŠã¯ ãã¡ã ã«æžããŠãããŸããã ä»åèšå®ããé
ç®ãšããŠã¯ä»¥äž3ã€ã§ãã titleField prioritizedContentFields prioritizedKeywordsFields ããããã®ãã©ã¡ãŒã¿(Title, Content, Keyword)ãšããŠãã©ã®ãã£ãŒã«ããéèŠããããèšå®ããŸãã æäœéprioritizedContentFieldsã®ã¿èšå®ãããŠããã°OKã§ãã ãããã®èšå®ã«ãã£ãŠãã»ãã³ãã£ãã¯ã®ã©ã³ã¯ä»ãã®ç²ŸåºŠãå€ãã£ãŠããŸãã vectorSearch 次ã«vectorSearchã®å
容ã«ã€ããŠãã¿ãŠãããŸãã ãã¡ããå
¬åŒã®ãµã³ãã«ãèŒããŸãã "vectorSearch": {    "algorithms": [      {        "name": "my-hnsw-config-1",        "kind": "hnsw",        "hnswParameters": {          "m": 4,          "efConstruction": 400,          "efSearch": 500,          "metric": "cosine"        }      },      {        "name": "my-hnsw-config-2",        "kind": "hnsw",        "hnswParameters": {          "m": 8,          "efConstruction": 800,          "efSearch": 800,          "metric": "cosine"        }      },      {        "name": "my-eknn-config",        "kind": "exhaustiveKnn",        "exhaustiveKnnParameters": {          "metric": "cosine"        }      }    ],    "profiles": [     {      "name": "my-default-vector-profile",      "algorithm": "my-hnsw-config-2"     }    ]  } 倧ããåã㊠algorithms ãš profiles ã®2ã€ã®å€ããããŸãã algorithmsãšããŠããã¯ãã«æ€çŽ¢ã«å©çšããã¢ã«ãŽãªãºã ã®è©³çްãå®çŸ©ããŸãã æ¬¡ã«ãprofileã®å€ãšããŠnameãšã䜿çšããalgorithmãèšå®ãã nameã®å€(my-default-vector-profile)ã®å€ãã fields.vectorSearchProfile ã«èšå®ããŸãã "fields": [ { "vectorSearchProfile" = "my-default-vector-profile" } ] ä»åããã¯ãã«æ€çŽ¢ã®ã¢ã«ãŽãªãºã å
容ã®çްããèšå®ã«é¢ããŠã¯å²æãããŠããã ããŸãã ã€ã³ããã¯ã¹ã®äœææ¹æ³ 次ã«ãéåžžã«ã·ã³ãã«ãªã€ã³ããã¯ã¹ãå®éã«äœæããŠã¿ãããšæããŸãã äœæã«é¢ããŠã¯RESTãåçš®SDKã§äœæå¯èœã§ãã ä»åã¯RESTã䜿ã£ãŠãããããšæããŸãã RESTã®å Žåã¯ãå
çšå®çŸ©ããjsonãbodyã«å
¥ããŠå®è¡ããã°OKã§ãã ä»åã¯ç°¡ç¥åã®ããAPI Keyãå©çšããŠå®è¡ããŸãã â»ä»åãæ€çŽ¢æã®æ€èšŒã®ããTagsã®ãã£ãŒã«ãã«é¢ããŠã¯ searchable ã¯faleseãšããŠããŸãã POST /indexes?api-version=2024-07-01 HTTP/1.1 Host: {{resourceName}}.search.windows.net Content-Type: application/json api-key: {{apyKey}} Content-Length: 1090 {   "name": "idx-users",   "fields": [     {       "name": "UserId",       "type": "Edm.String",       "key": true,       "filterable": true     },     {       "name": "UserName",       "type": "Edm.String",       "searchable": true,       "filterable": true,       "facetable": false     },     {       "name": "Profile",       "type": "Edm.String",       "searchable": true,       "filterable": false,       "sortable": false,       "facetable": false,       "analyzer": "ja.lucene"     },     {       "name": "Age",       "type": "Edm.Int32",       "searchable": false,       "filterable": true,       "sortable": true,       "facetable": true     },     {       "name": "Tags",       "type": "Collection(Edm.String)",       "searchable": false,ã//falseãšãã       "filterable": true,       "sortable": false,       "facetable": true     }   ] } Azure Portaläžããã¿ããšãæ£ããçæã§ããŠããããšã確èªã§ããŸããã ãªãããã¡ããAzure Portaläžããã§ãã€ã³ããã¯ã¹ã®äœæã¯å¯èœã§ãã GUIããŒã¹ã§ã€ã³ããã¯ã¹ã®äœæãããã£ãŒã«ãã®è¿œå ãè¡ããŸãã æ³šæãã€ã³ã æèŠçã«ãåããããšã§ããã  å€ãã®ãã£ãŒã«ãã远å ãããããã£ãŒã«ãã«å¯Ÿãããã©ã¡ãŒã¿ãè€éã«èšå®ãããš ã€ã³ããã¯ã¹äœæã®é床ãäœäžããŸãã ã€ã³ããã¯ã¹ãå°ããã»ã©ãã€ã³ããã¯ã¹äœæã¯éããªããŸãã ãŸããåæ§ã«ãã©ã¡ãŒã¿ãè€éã«ããããšã«ãããæ ŒçŽããããŒã¿éãå¢ããã¹ãã¬ãŒãžãå§è¿«ãããšãã£ãããšãèµ·ãããŸãã ããã©ãŒãã³ã¹ããã³ã¹ã圱é¿ããéšåãªã®ã§ããã®ãããæ°ã«ããªããèšèšãå¿
èŠããšæããŸãã ã€ã³ãã¯ã·ã³ã° å®çŸ©ããã€ã³ããã¯ã¹ã«å¯ŸããŠããŒã¿ãæå
¥ããŠãããŸãã ããŒã¿ã®æå
¥æ¹æ³ãšããŠã¯ãããã·ã¥åãšãã«åã®2çš®é¡ããããŸãã ä»åã¯ããã·ã¥åãäŸã«æããŠããŒã¿ã®æå
¥ãè¡ã£ãŠãããŸãã å
çšäœæããã€ã³ããã¯ã¹ã«å¯ŸããŠããããŒã®ããŒã¿ã10ä»¶ã»ã©çšæããŸãã ChatGPTããã«ãã€ã³ããã¯ã¹äœææã«å©çšããbodyã®å
容ãæç€ºããŠããµã³ãã«ããŒã¿ãäœã£ãŠããããŸããã å°å³ã«ããããæã«çæAIã®äŸ¿å©ããçæããŸããã  {   "UserId": "1001",   "UserName": "ç°äž äžé",   "Profile": "æ±äº¬éœåºèº«ã§å€§åŠåæ¥åŸã«å€§æSIerã«å°±è·ãAzureã䜿ã£ãã¢ããªã±ãŒã·ã§ã³ã®éçºã«æºãããAzure Developer Associateã®è³æ ŒãååŸããŠãããè¶£å³ã¯æ¬ãèªãããšã§ãç¡é¡ã®ãã¹ããªãŒå¥œã",   "Age": 36,   "Tags": ["Engineer", "Azure"]  },  .... ãããã®ãµã³ãã«ãã¢ããããŒãããŠãããŸãã æ³šæç¹ãšããŠã¯ã ãªã¯ãšã¹ãã®ãã¹ãã©ã¡ãŒã¿ãšããŠå¯Ÿè±¡ã®ã€ã³ããã¯ã¹åãå
¥ãã bodyã®ãã©ã¡ãŒã¿ã« @search.action ã远å ãã ã®2ç¹ã§ãã POST /indexes/idx-users/docs/index?api-version=2024-07-01 HTTP/1.1 Host: {{resourceName}}.search.windows.net Content-Type: application/json api-key: {{apiKey}} Content-Length: 3518 {   "value": [     {       "@search.action": "upload",       "UserId": "1001",       "UserName": "ç°äž äžé",       "Profile": "æ±äº¬éœåºèº«ã§å€§åŠåæ¥åŸã«å€§æSIerã«å°±è·ãAzureã䜿ã£ãã¢ããªã±ãŒã·ã§ã³ã®éçºã«æºãããAzure Developer Associateã®è³æ ŒãååŸããŠãããè¶£å³ã¯æ¬ãèªãããšã§ãç¡é¡ã®ãã¹ããªãŒå¥œã",       "Age": 36,       "Tags": [         "Engineer",         "Azure"       ]     },     {       "@search.action": "upload",       "UserId": "1002",       "UserName": "éŽæš è±å",       "Profile": "ç¥å¥å·çåºèº«ããã¶ã€ã³å°éåŠæ ¡ã忥åŸããã¶ã€ããŒãšããŠæŽ»åãUI/UXãã¶ã€ã³ã«èå³ããããæè¿ã¯ããªãŒã©ã³ã¹ãšããŠæ§ã
ãªãããžã§ã¯ãã«åå ãè¶£å³ã¯çµµãæãããš",       "Age": 28,       "Tags": [         "Designer",         "Freelance"       ]     },     {       "@search.action": "upload",       "UserId": "1003",       "UserName": "äœè€ 次é",       "Profile": "倧éªåºåºèº«ãããŒã±ãã£ã³ã°ãããŒãžã£ãŒãšããŠå€ãã®äŒæ¥ã§çµéšãç©ããããžã¿ã«ããŒã±ãã£ã³ã°ã«ç²ŸéããŠãããçŸåšã¯èªç€Ÿã®ããŒã±ãã£ã³ã°æŠç¥ãæ
åœãè¶£å³ã¯ãŽã«ã",       "Age": 42,       "Tags": [         "Marketing",         "Manager"       ]     },     {       "@search.action": "upload",       "UserId": "1004",       "UserName": "å±±ç° ççŸ",       "Profile": "çŠå²¡çåºèº«ã倧åŠåæ¥åŸããããžã§ã¯ããããŒãžã£ãŒãšããŠå€ãã®ãããžã§ã¯ããæåã«å°ããçŸåšã¯ITäŒæ¥ã§PMãšããŠæŽ»èºãè¶£å³ã¯æ
è¡ã§ãç¹ã«æµ·å€æ
è¡ã奜ã",       "Age": 33,       "Tags": [         "Project Manager",         "IT"       ]     },     {       "@search.action": "upload",       "UserId": "1005",       "UserName": "äžæ å¥",       "Profile": "åæµ·éåºèº«ã倧åŠã§æ
å ±å·¥åŠãåŠã³ãçŸåšã¯æå¹ã®ã¹ã¿ãŒãã¢ããäŒæ¥ã§ãšã³ãžãã¢ãšããŠåããã¯ã©ãŠãæè¡ã«åŒ·ããAWSãAzureã®è³æ Œã倿°ä¿æãè¶£å³ã¯ãã£ã³ã",       "Age": 29,       "Tags": [         "Engineer",         "Cloud"       ]     },     {       "@search.action": "upload",       "UserId": "1006",       "UserName": "äŒè€ çŸå²",       "Profile": "åå€å±åžåºèº«ã倧åŠã§çµå¶åŠãåŠã³ãçŸåšã¯äŒæ¥ã³ã³ãµã«ã¿ã³ããšããŠåããçµå¶æŠç¥ã財ååæã«åŒ·ããå€ãã®äŒæ¥ããµããŒããè¶£å³ã¯èªæžã§ãç¹ã«ããžãã¹æžã奜ã",       "Age": 37,       "Tags": [         "Consultant",         "Business"       ]     },     {       "@search.action": "upload",       "UserId": "1007",       "UserName": "å°æ é",       "Profile": "åèçåºèº«ã倧åŠåæ¥åŸã倧æã¡ãŒã«ãŒã§ãšã³ãžãã¢ãšããŠãã£ãªã¢ãã¹ã¿ãŒããçŸåšã¯ããŒã ãªãŒããŒãšããŠå€ãã®ãããžã§ã¯ããææ®ãè¶£å³ã¯é£ã",       "Age": 45,       "Tags": [         "Engineer",         "Leader"       ]     },     {       "@search.action": "upload",       "UserId": "1008",       "UserName": "æŸæ¬ ç±çŸ",       "Profile": "京éœåºåºèº«ã倧åŠã§å¿çåŠãåŠã³ãçŸåšã¯äººäºéšéã§åãã瀟å¡ã®ã¡ã³ã¿ã«ãã«ã¹ã±ã¢ã«åãå
¥ããŠãããå€ãã®ç ä¿®ã宿œãè¶£å³ã¯ãšã¬",       "Age": 31,       "Tags": [         "HR",         "Psychology"       ]     },     {       "@search.action": "upload",       "UserId": "1009",       "UserName": "髿© 倧èŒ",       "Profile": "çŠå³¶çåºèº«ã倧åŠã§ååŠãå°æ»ããçŸåšã¯ç ç©¶æã§åããæ°çŽ æã®ç ç©¶ã«åŸäºããŠãããå€ãã®è«æãçºè¡šãè¶£å³ã¯å±±ç»ã",       "Age": 39,       "Tags": [         "Researcher",         "Chemistry"       ]     },     {       "@search.action": "upload",       "UserId": "1010",       "UserName": "森 çŸäœ³",       "Profile": "åºå³¶çåºèº«ã倧åŠã§æåŠãåŠã³ãçŸåšã¯åºç瀟ã§ç·šéè
ãšããŠåããå€ãã®ãã¹ãã»ã©ãŒãæãããæ¥çã§é«ãè©äŸ¡ãåãããè¶£å³ã¯æç",       "Age": 34,       "Tags": [         "Editor",         "Literature"       ]     }   ] } å®è¡åŸãã°ãããããšã10ä»¶ã®ããŒã¿ãæå
¥ãããŠããããšã確èªã§ããŸãã ãªãä»åããã¯ãã«ããŒã¿ã¯å
¥ããŠãªãã®ã§ãã¯ãã«ã€ã³ããã¯ã¹ã®ãµã€ãºã¯0ã®ãŸãŸã§ãã ãã£ãããªã®ã§ããã®ã€ã³ããã¯ã¹ã«å¯ŸããŠæ€çŽ¢ãããŠã¿ãããšæããŸãã äŸãã°ãåºå³¶ããšå
¥ããŠæ€çŽ¢ãããšãProfileã«åºå³¶ãå
¥ã£ãŠããããã¥ã¡ã³ããæœåºãããŸãã ãŸããå
çš searchable ãfalseãšããTagsã®æ
å ±ã§æ€çŽ¢ãããšããããããªãããšãåãããŸãã ãã ãä»åã¯ãã¯ãã«æ€çŽ¢ãããŠããããã§ããªãã®ã§ãç¹ã«æ€çŽ¢ã®çæ°ããã¯ãªãã§ãã…ã ä»åã®èšäºã¯ãããŸã§ã€ã³ãã¯ã·ã³ã°ã«ãã©ãŒã«ã¹ããŠããã®ã§ã ãŸãæ€çŽ¢åšãã«ã€ããŠã¯èª¿æ»ããŠèšäºã«ããŠãããããšæããŸãã ãŸãšã ä»åã¯Azure AI Searchã«å¯ŸããŠã€ã³ããã¯ã¹ãäœæããå®éã«ããŒã¿ãå°å
¥ããæµãã解説ããŸããã ã€ã³ããã¯ã¹ã®ã¹ããŒãèšèšã«é¢ããŠã¯ãéåžžã«è©³çްãªéšåãŸã§èšå®ãå¯èœã§ããããAzure AI Searchã®æ§èœã決ããèããšæããŸããã RDBMSã§ãããŒãã«èšèšã¯éåžžã«éèŠãšãããŠããŸãããAIãSearchã®ã¹ããŒãèšèšã¯ãã以äžã«æ°ãä»ããŠè¡ããªããã°ããåããã«æããŸãã ãã®ããã«ãããã£ãããšæå
¥å
ã®ããŒã¿ã®æ§è³ªãªã©ã«é¢ããŠçè§£ãæ·±ããå¿
èŠãããããã§ããã ãŸããä»åã¯ã€ã³ãã¯ã·ã³ã°ã«é¢ããŠæŠèŠãããã£ãã ãã§ããããŸã ãŸã æ©èœã¯å€ãååšããŠããŸãã ãã¯ãã«æ€çŽ¢ã®ããã®ã¹ããŒãèšèš ã»ãã³ãã£ãã¯æ€çŽ¢ã®ããã®ã¹ããŒãèšèš ãã«åã®ããŒã¿æå
¥ ã¹ãã«ã»ãã ãã®ãããã«ããŸãè§ŠããŠããã£ãããšçè§£ããŠãããããšæããŸãã ã§ã¯ãŸãïŒ äœè« AI Searchã¯ããäŸ¡æ Œãé«ãäºãèšãããŠãŸãã å®éã¡ãã£ãšãé«ãã ããªãããšã¯æããŸãã 確ãã«ããã®ã¶ã髿©èœãªã®ã¯ä»åå匷ããŠã¿ãŠæããŸããã…ã äžæ¹ã§ãæè¿CosmosDBããã¯ãã«æ€çŽ¢ã«å¯Ÿå¿ããããšã§éåžžã«çãäžãã£ãŠãã ã·ã³ãã«ãªRAGã®æ§ç¯ããããããªããCosmosDBã§ãããããããªããïŒãšãã話ãåºãŠãŸãã ãšããããšã§AI Searchã®ãã£ããã¢ãããšäžŠè¡ããŠãCosmosDBã䜿ã£ãå Žåã®æ€çŽ¢ã«ã€ããŠããŸãæ€èšããŠãããããšæããŸãã åèè³æ Azure AI Search ããã¥ã¡ã³ã – Microsoft åºæ¬æŠå¿µããçè§£ããAzure AI Search – Azure OpenAI Serviceãšã®é£æºãŸã§ Azure Cognitive Search ã§æ¥æ¬èªå
šææ€çŽ¢ãããããã®ã¢ãã©ã€ã¶ãŒå®è£
ã¡ã¢ Azure Search 倧å
š çæAIæä»£ã®æ§ã
ãªæ€çŽ¢ææ³ãæ€èšŒãã ãAzure AI Searchã«ãããã¯ãã«/ã»ãã³ãã£ãã¯/ãã€ããªããæ€çŽ¢ã ã芧ããã ãããããšãããããŸãïŒ ãã®æçš¿ã¯ã圹ã«ç«ã¡ãŸãããïŒ åœ¹ã«ç«ã£ã 圹ã«ç«ããªãã£ã 0人ããã®æçš¿ã¯åœ¹ã«ç«ã£ããšèšã£ãŠããŸãã The post Azure AI Searchã«ãããã€ã³ãã¯ã·ã³ã°å
¥éã¬ã€ã first appeared on SIOS Tech. Lab .