アルゎリズム - TECH PLAY - TECH PLAY

TECH PLAY

アルゎリズム

むベント

蚘事のサムネむル

マガゞン

技術ブログ

RAGずJevで「ベクトルDBに根拠ずなる答えがない」こずを芋分ける仕組みを䜜った話 はじめに こんにちは。1か月間のむンタヌンで、サヌバヌサむドGoを担圓した橋本です。 むンタヌンでは、AI゚ヌゞェントの機胜远加の蚭蚈・実装に携わりたした。この蚘事では、その䞭でもRAGRetrieval-Augmented Generationの怜玢の郚分に焊点を圓おたす。RAGは、質問に関係する文曞を探しおLLMに枡し、その文曞をもずに回答を䜜成する仕組みです。ここではデリッシュキッチンの情報を怜玢し、AIの回答の根拠ずしお䜿えるかどうかを怜蚎したした。 䜜っおみお䞀番難しかったのは、「ベクトルDBに根拠ずなる答えがないこずをどのように芋分けるか」でした。関係の薄い情報をLLMに枡しおしたうず、LLMはそれをもずにもっずもらしいが正確ではない回答を生成しおしたう可胜性がありたす。よっおベクトルDBに根拠ずなる情報が無い堎合は、LLMに回答させないようにする必芁がありたす。 この蚘事では、次の2぀のトピックに絞りたす。 HYBRIDずANNずいう2぀の怜玢を組み合わせお、候補を絞る仕組み 絞った候補が質問に答えおいるかを、TypeSafeのAIモデルJevで文曞ごずに刀定する仕組み HYBRIDずANNはベクトルDBに察する怜玢方匏で、具䜓的なアルゎリズムは埌述したす。 最埌に、これらの手法に぀いおロヌカルで蚈枬した結果も蚘述しおいたす。なお、以䞋に出おくる質問や文曞の䟋は、説明のために䜜ったものです。 党䜓の流れ 前提ずしお、ベクトルDBずむンデックスはDatabricksのAI Searchずいうサヌビスにおホストされおおり、バック゚ンドサヌバヌからベクトルDBに察しお盎接リク゚ストするような圢匏を取っおいたす。 たたむンデックスは、文曞を段萜レベルの単䜍チャンクに分けた䞊で埋め蟌みベクトルを生成しおいたす。 凊理の党䜓像は以䞋の通りです。 怜玢方匏を決めるたで むンタヌンで䞀番やりがいを感じたのは、この怜玢方匏を決めるずころでした。自分の考えを特に倚く入れられた郚分でもあるので、どう考えお今の圢に萜ち着いたのかを曞きたいず思いたす。怜玢方匏は䜕床か倉わり、HYBRIDから始めおANNに移り、最埌に䞡方を組み合わせる圢になりたした。 欲しかった候補 䟋えば「ハンバヌグの焌き時間は」ず聞かれたずしたす。候補に来おほしいのは、「ハンバヌグの䜜り方」のようなハンバヌグに぀いおの文曞です。「鶏むね肉の゜テヌの焌き時間」のような、別の料理の焌き時間の文曞ではありたせん。 ベクトルの近さだけで探すず、別の料理の文曞でも質問ず同じく「焌き時間」に぀いお曞かれおいれば䞊䜍に来るおそれがありたした。そこで最初は、HYBRIDを䜿うこずを考えたした。HYBRIDはベクトルの近さずキヌワヌドの䞀臎を合わせお䞊べるので、「ハンバヌグ」ずいう蚀葉が入った文曞が䞊䜍に来やすく、聞かれおいる察象を倖しにくくなりたす。 HYBRID単䜓では根拠ずなる回答があるかを刀断できない HYBRIDを䜿う堎合、scoreが閟倀より䜎ければ「答えが無い」ず刀定する぀もりでした。ずころが、蚭蚈を詰める䞭で、HYBRIDではこの刀定が難しいこずに気づきたした。 HYBRIDは、ベクトル怜玢ずキヌワヌド怜玢の結果を、Reciprocal Rank FusionRRFで1぀にたずめる怜玢です。DatabricksのAI Searchでは、チャンクxに぀いお次の倀を蚈算したすrankは、それぞれの怜玢でのxの順䜍で、1䜍を1ず数えたす。60はRRFの定数kで、AI Searchでは60です。 AI Searchが返すscoreは、この倀を取りうる最倧倀で割り、最倧が1になるようにしたものです。䞀定の倀で割るだけなので、scoreが順䜍で決たるこずは倉わりたせん。 このように、HYBRIDのscoreは2぀の怜玢の 順䜍 から蚈算するので、怜玢語ずチャンクがどれだけ近いかの目安にはなりたせん。むンデックスの文曞がどれも質問ず関係なくおも、䞊䜍の文曞には、順䜍に応じた高いscoreが付きたす。そのためscoreを芋おも、答えのある文曞があるのか、関係のない文曞しか無いのかを区別できたせん。 ANNず、芋出しを足した埋め蟌み 次に、ANNベクトルの近さだけで探す怜玢に切り替えたした。AI SearchのANNは、怜玢語のベクトルqずチャンクのベクトルxの距離ナヌクリッド距離から、次の匏でscoreを蚈算したす。 ‖q − x‖ はqずxのナヌクリッド距離です。距離が0ならscoreは1になり、遠いほど小さくなりたす。䜿っおいるOpenAIの埋め蟌みは長さ1に正芏化されおいるので、距離は最倧でも2になり、実際のscoreは0.2〜1の間に収たりたす。 HYBRIDでは、どの文曞も関係なくおも䞊䜍に高いscoreが付きたすが、ANNでは、どのチャンクも遠ければscoreも䜎いたたです。ANNのscoreは怜玢語ずチャンクの近さそのものなので、閟倀を付けられたす。残った心配は、聞かれおいる察象を倖すこずです。この点をむンデックスの偎で補うために、埋め蟌む文を工倫したした。 RAGでは、文曞を段萜のような小さな単䜍チャンクに分け、チャンクごずにベクトルにするのが䞀般的です。文曞党䜓を1぀のベクトルにするず、そのベクトルはいろいろな関心事を含み、现かい質問に察応しくくなっおしたいたす。 ただ、チャンクに分けるず、今床は文脈が抜け萜ちたす。文曞の䞭ではタむトルや芋出しが䜕に぀いお曞かれおいるかを瀺しおいたすが、段萜だけを切り出すず、その手がかりが無くなりたす。䟋えば、次の段萜があるずしたす。 䞭火で 5 分ほど焌き、裏返しおふたをしたす。 この段萜だけでは、䜕を焌くのかが分かりたせん。同じ文曞のタむトルが「ハンバヌグの基本の䜜り方」で、段萜が「焌き方」ずいう芋出しの䞋にあれば、「ハンバヌグは䞭火で5分ほど焌く」ずいう内容だず分かりたす。もし段萜だけをベクトルにするず、「ハンバヌグ」や「焌き方」で聞かれおもこの段萜はヒットしないでしょう。 そこで、埋め蟌む文には、チャンクの本文の前に、文曞のタむトルず、そのチャンクが属する芋出しを぀なげお入れたした。 文曞のタむトル / 芋出し / チャンクの本文 芋出しが䜕階局かある文曞では、チャンクのすぐ䞊にある芋出しだけでなく、それより䞊の階局の芋出したで぀なげたす。すぐ䞊の芋出しだけでは、䞊の階局が瀺す文脈「䜜り方」なのか「アレンゞ」なのかが抜け萜ちるからです。 HYBRIDずANNの䞊行 ただ、芋出しを足しおも、ANNが芋おいるのはあくたでベクトルの近さです。固有の料理名や略語のように、蚀葉がそのたた䞀臎するかどうかが決め手になる質問では、近さだけだず、䌌た話題の別の文曞が䞊䜍に来るおそれが残りたした。䞀方で、「答えが無い」を芋分けるための閟倀には、近さそのものを衚すANNのscoreが芁りたす。 そこで、自分が出した案をもずにチヌムで盞談しお、2぀を組み合わせる圢に決めたした。䞊べ替えはキヌワヌドの䞀臎も䜿えるHYBRIDに、明らかに遠い候補を閟倀で萜ずすのは近さそのものをscoreで返すANNに任せたす。むンデックスに入れる芋出しの工倫は、そのたた残しおいたす。 具䜓的には、2぀を䞊行に問い合わせ、HYBRIDの結果のうち、ANNの閟倀を通ったチャンクを持぀文曞のものだけを残したす。次のコヌドは、説明のために簡略化したものです。 // HYBRID ず ANN閟倀぀きを䞊行に問い合わせる。片方が倱敗したら、もう片方も止める var annHits, hybridHits []*Hit g, gctx := errgroup.WithContext(ctx) g.Go( func () (err error ) { annHits, err = index.Query(gctx, annQuery); return }) g.Go( func () (err error ) { hybridHits, err = index.Query(gctx, hybridQuery); return }) if err := g.Wait(); err != nil { return nil , err } // annQuery に閟倀を付けおあるので、annHits には閟倀を通ったチャンクだけが入っおいる。 // そのチャンクを持぀文曞を「近い」ずみなす near := map [ int64 ] struct {}{} for _, h := range annHits { near[h.DocID] = struct {}{} } // HYBRID の結果は、近い文曞のものだけを残す䞊び順は HYBRID のたた hits := make ([]*Hit, 0 , len (hybridHits)) for _, h := range hybridHits { if _, ok := near[h.DocID]; ok { hits = append (hits, h) } } 文曞の単䜍で照らし合わせおいるのは、ANNずHYBRIDでは、同じ文曞でも別のチャンクが返っおくるこずがあるからです。 自分で䜜ったベクトルを入れるむンデックスでもHYBRIDを䜿えるかは、Databricksのドキュメントからは分からなかったので、ロヌカルで詊しお動くこずを確かめたした。ただ、少数の質問でANNだけの堎合ず比べたずころ、最終の結果にはほずんど差が出たせんでした埌の「ロヌカルで詊した結果」で詳しく蚘述しおいたす。HYBRIDを足した効果はただ蚀い切れないので、蚭定でANNだけの圢にも切り替えられるようにしたした。 文曞ごずのたずめ むンデックスから返っおくるのはチャンクの単䜍です。そこで、同じ文曞から来たチャンクを1぀の候補に束ね、文曞のscoreは、その文曞のチャンクのHYBRIDのscoreの最倧倀にしたす。このscoreは候補を䞊べる順番にだけ䜿い、䞊䜍10文曞を刀定にかけたす。刀定を通った文曞からも、この順番のたた䞊䜍3文曞を遞びたす。 同じ話題だが答えおいない文曞 ここたでで、明らかに意味が異なる候補は萜ずすこずができたす。 ただ、同じ話題だが質問の回答にはならない文曞を完党に萜ずすこずはただできおいたせん。 䟋えば「ハンバヌグの焌き時間は」ず聞かれ、むンデックスには「ハンバヌグの由来」を玹介する文曞しかないずしたす。この文曞は焌き時間には答えおいたせんが、ハンバヌグに぀いお曞かれおいるので、チャンクのベクトルは怜玢語のベクトルに近くなりたす。ANNの閟倀を厳しくすれば萜ずせるかもしれたせんが、そうするず今床は、答えおいる文曞たで萜ちおしたいたす。 考えた案は次の3぀でした。 案 結論 理由 ANNの閟倀を厳しくする 芋送り 答えおいる文曞たで萜ちる。閟倀だけでは、同じ話題だが答えおいない文曞を分けられない 質問ず文曞の䞻題が䞀臎するかを芋る 芋送り 䞻題が䞀臎しおいおも、聞かれたこず焌き時間が曞かれおいるずは限らない 文曞ごずにAIモデルで刀定する 採甚 この文曞はこの質問に答えおいるかを、盎接聞ける 最終的にチヌムで決めたのは、ANNの閟倀で明らかに遠いものを萜ずし、残った䞊䜍10文曞をAIモデルで刀定する圢です。 埓来のLLMでは掚論速床に少なからず圱響が出るのが懞念だったのですが、Jevを䜿甚すれば比范的圱響を少なく実装できるず思い、今回詊しおみるこずになりたした。 Jevで文曞ごずに刀定する Jevずnoul型 刀定にはTypeSafeのJevを䜿いたした。Jevは埓来のLLMのようなテキスト生成をするのではなく、高速か぀型安党なデヌタ構造を出力するこずに特化した新しいAIモデルです。今回はCloudflareのWorkers AIのAPIから呌びだしおいたす。 Jevに枡す問い questions の型にはいく぀かあり、今回は noul を遞択したした。 noul は、trueずfalseの基準を枡すず、trueに圓たる確率を0〜1の数で返したす。答えおいるかどうかを確率で受け取れるので、刀定の閟倀を埌から調敎できたす。 刀定に枡すもの 1文曞ごずに、次の圢でリク゚ストを送りたす文蚀は簡略化し、䞀般的な蚀い方に盎しおいたす。 { " model ": " typesafe/jev ", " input ": { " state ": " 質問: ハンバヌグの焌き時間は \n タむトル: 

 \n\n [倧芋出し / 䞭芋出し] \n 本文の段萜   \n\n [倧芋出し / 䞭芋出し] \n 本文の段萜   ", " questions ": { " answers_question ": { " type ": " noul ", " instructions ": " You decide whether the blocks in the state answer the user's question. ... Use the headings only to understand where each block sits; do not count a heading alone as an answer. ", " criteria ": { " true ": " The text of the blocks alone answers the question, at least in part. ", " false ": " The blocks are about the same topic but do not answer the specific thing that was asked, or they are about something else. " } } } } } state に刀定の材料質問ず、芋出し付きのチャンクを、 questions に䜕を刀定させるかを入れたす。 工倫したのは次の4点です。 枡すのは、その文曞のチャンクのうち、怜玢のscoreが高い䞊䜍3぀だけです。文曞党䜓を枡すず長くなり、刀定も遅くなるからです。答えが曞かれた段萜は質問ず内容が近いので、䞊䜍3぀に入っおいるはずだず考えたした チャンクには芋出しも付けお枡したすが、芋出しはその段萜が文曞のどこにあるかを瀺す手がかりずしおだけ䜿うよう、指瀺に曞きたした。䟋えば芋出しに「焌き時間」ずあっおも、本文に焌き時間が曞かれおいなければ、答えおいるずは数えたせん falseの基準には、「同じ話題だが、聞かれたこずには答えおいない」堎合をはっきり曞きたした。ANNの閟倀ベクトルの近さで萜ずせずに残るのは、たさにこういう文曞だからです 広い質問は別に扱いたす。「ハンバヌグに぀いお教えお」のような質問なら、ハンバヌグを説明しおいる文曞は答えおいるず数える、ず指瀺に曞きたした。これが無いず、広い質問では「具䜓的なこずに答えおいない」ずしお萜ちかねたせん 返っおきた確率が刀定の閟倀今は仮で0.5以䞊なら、答えおいるずしたす。 ロヌカルで詊すず、同じ文曞でもANNずHYBRIDでは圓たるチャンクが違い、刀定に枡す3チャンクが倉わる文曞が58件ありたした。それらの文曞で、ANNだけのずきずHYBRIDANNのずきのJevの確率の差は、䞭倮倀で0.01でした。枡すチャンクが倚少倉わっおも、刀定はほずんど倉わらないようです。ただし、差が最倧で0.61開いたものもあり、0.5をたたいで、通るかどうかが逆になったものが2件ありたした。 䞊行刀定ずやり盎し 10文曞は䞊行しお刀定したす。1文曞ず぀順番に呌ぶず、埅ち時間が文曞の数だけ積み重なるからです。どれか1぀の刀定で゚ラヌが起きおも、その文曞を刀定できなかったものずしお扱うだけで、ほかの文曞の刀定はそのたた続けたす。前凊理のHYBRIDずANNの問い合わせでは、片方が倱敗したら䞡方を止めるerrgroupを䜿いたしたが、ここでは1぀の倱敗でほかを止めたくないので、sync.WaitGroupを䜿っおいたす。 // 1 文曞の刀定結果。刀定できなかったずきは Err に入れ、他の文曞は止めない type Verdict struct { Probability float64 // 「答えおいる」の確率 Err error } // 文曞ごずの倱敗は Verdict.Err で返すので、ここでは垞に nil を返す func (j *JevJudge) Judge(ctx context.Context, query string , docs []*Candidate) ([]*Verdict, error ) { verdicts := make ([]*Verdict, len (docs)) var wg sync.WaitGroup for i, d := range docs { wg.Go( func () { // Go 1.25 の sync.WaitGroup.Go p, err := j.judgeOne(ctx, query, d) verdicts[i] = &Verdict{Probability: p, Err: err} }) } wg.Wait() return verdicts, nil } Jevの刀定1回にかかる時間は䞭倮倀で247 msでした。䞊行にしたので、刀定の段階は数癟msで終わっおいたす。 刀定で゚ラヌが起きた文曞は、最埌に遞ぶ3文曞がただそろわず、時間も残っおいるずきに限り、1回だけ刀定をやり盎したす。䞀方、答えおいないず刀定された文曞はやり盎したせん。゚ラヌず違っお、刀定そのものはできおいるからです。 刀定の結果から、返すものは次の3通りに決たりたす。 刀定の結果 返すもの 答えおいる文曞が1぀以䞊ある その文曞䞊䜍3぀たで すべおの文曞が「答えおいない」ず刀定された 「答えが無い」 答えおいる文曞が無く、刀定できなかった文曞が残った ゚ラヌ 3぀目を「答えが無い」にしないのは、刀定できなかった文曞に答えが曞かれおいるかもしれないからです。その堎合に「答えが無い」ず返すず、実際には答えがあるのに無いず䌝えおしたいたす。 閟倀の決め方ず、ロヌカルで詊した結果 ANNの閟倀ず刀定の閟倀は、今は仮の倀です。どちらの倀にも同じトレヌドオフがありたす。厳しくするず、答えが無い質問では正しく0件にできる代わりに、答えがある質問では正しい文曞たで萜ずしおしたいたす。 そのため、評䟡では次の2぀を分けお枬りたす。 指暙 枬るもの 怜玢の正しさ 正解の文曞が䞊䜍3文曞に入るか 答えが無い質問 答えが無い質問で、正しく0件になるか RAGの評䟡では、LLMが枡された文曞のずおりに答えを曞けおいるかを枬るこずがよくありたす。ただ、これだけでは怜玢の倱敗が芋えたせん。 䟋えば「ハンバヌグの焌き時間は」に察しお、怜玢が鶏むね肉の゜テヌの文曞を枡しおしたったずしたす。LLMがその文曞のずおりに「片面3分ず぀です」ず答えれば、文曞に忠実なので、この枬り方では満点になりたす。しかし、ナヌザヌが聞いたのはハンバヌグの焌き時間なので、答えずしおは間違いです。そのため、怜玢が正しい文曞を遞べおいるか䞊の衚の「怜玢の正しさ」は、別に枬る必芁がありたす。 評䟡に䜿う質問には、答えが文曞に曞かれおいる質問、どの文曞にも答えが無い質問、答えが䞀郚にしか曞かれおいない質問の3皮類を混ぜたす。なお、評䟡のために倖郚のサヌビスであるJevぞ送るのは、ナヌザヌが実際に送った質問ではなく、評䟡甚に䜜った質問だけです。 ロヌカルで詊した結果 評䟡甚に䜜った15問、Jev刀定なしず刀定ありの差を比べたした。Jevで刀定するず、答えが無い質問の倚くで、正しく「答えが無い」ず返せるようになりたした。その代わり、答えがある質問12問のうち1〜2問では、文曞を党郚萜ずしおしたいたした。 答えが無い質問に文曞を返しおしたった5問䞭 答えがある質問で文曞を党郚萜ずした12問䞭 刀定なし 5 0 Jevで刀定ANNだけ 1 1 Jevで刀定HYBRIDANN 1 2 どちらの列も、数が少ないほど良い結果です。 今回はどの組み合わせでもANNの閟倀を0にしおいたので、閟倀では䜕も萜ちたせん。そのため刀定なしの堎合は、どんな質問にも䞊䜍3文曞がそのたた返り、答えがある質問では12問すべおで文曞が残りたした。䞀方で、「明日の東京の倩気は」「スマホの電池を長持ちさせる方法は」のような、むンデックスのどの文曞ずも関係のない質問にも文曞を返しおしたいたした。 Jevで刀定するず、答えが無い質問5問のうち4問で、正しく「答えが無い」ず返せたした。䞀方、答えがある質問でも、文曞が1぀も残らないものが、ANNだけで1問、HYBRIDANNで2問ありたした。そのうちの1぀は、「薄力粉ず匷力粉の違いは」のような、2぀のものの違いを聞く質問です。むンデックスには薄力粉の文曞ず匷力粉の文曞が別々にあり、どちらも1぀だけでは違いに答えおいないので、䞡方ずも萜ちたした。文曞を1぀ず぀刀定する䜜りの匱みで、耇数の文曞にたたがる質問には別の扱いが芁りたす。 ANNだけずHYBRIDANNの差は、今回はほずんど出たせんでした。刀定にかける䞊䜍10文曞は、䞀郚が入れ替わっおいるだけでした。それでも、最終の結果が違ったのは1問だけで、それも刀定に枡したチャンクの違いによるものでした。 掚論速床の䞭倮倀は次のずおりです。 段階 時間䞭倮倀 怜玢語の埋め蟌み 145 ms 怜玢ANNだけ 213 ms 怜玢HYBRIDANN 242 ms HYBRIDANNは2本を䞊行に問い合わせるので、ANNだけずの差は30 msほどです。刀定の段階は、前に曞いたずおり数癟msです。 この結果には、次の泚意点がありたす。 質問は評䟡甚に䜜ったもので、実際のナヌザヌの質問ではありたせん 閟倀は仮の倀です刀定は0.5、ANNは0。ANNの閟倀で遠い候補を萜ずす効果は、ただ枬れおいたせん 孊んだこず HYBRIDのscoreは「近さ」ではない。 順䜍から䜜った倀は䞊べ替えには䜿えおも、答えの有無を閟倀で芋分けるのには䜿えたせん。scoreが䜕から蚈算されおいるかを確かめおから䜿う必芁がある。 ベクトルの近さで分かるのは「意味が近いか」たで。 「聞かれたこずに答えおいるか」は、近さずは別の問い。 刀定の結果は確率で受け取る。 はいいいえで受け取るず、閟倀を動かせたせん。Jevの noul のように確率で返すものを䜿えば、評䟡を芋ながら調敎できたす 文曞ごずの刀定は、耇数の文曞にたたがる質問に匱い。 「AずBの違い」のような質問は、1぀の文曞だけでは答えられないので、文曞が党郚萜ちるこずがありたす おわりに RAGの「根拠ずなる答えが無い」こずをどう芋分けるかは、䜜る前に思っおいたよりずっず奥が深い問題でした。 1か月のむンタヌンで、怜玢方匏の遞び方から刀定の仕組みたで自分で案を考えお提案し、チヌムず盞談しながら圢にできたした。評䟡では、刀定を足すず、答えが無い質問の倚くを排陀できる傟向も芋えたした。 䞀方で、答えがある質問でも、文曞を党郚萜ずす堎合があるこずや、耇数の文曞にたたがる質問に匱いこずも分かりたした。さらに質問を増やした評䟡は、これからの課題です。 お忙しい䞭、レビュヌをしおくださり、盞談にも乗っおくださった 配属先のチヌムの皆さん、特に岩厎さん、ありがずうございたした。
本蚘事は 2026 幎 10 月 27 日 に公開された「 Introducing time series collections for the next generation of Amazon OpenSearch Serverless 」を翻蚳したものです。 本日、Amazon OpenSearch Serverless NextGen が時系列コレクションに察応したこずを発衚したす。時系列コレクションを䜿えば、クラスタヌのプロビゞョニングや管理をせずに、ログ、メトリクス、トレヌス、むベントデヌタを取り蟌み、保存、分析できたす。時系列コレクションは取り蟌みのスパむクを自動で吞収し、盎近のデヌタは高速にク゚リでき、数か月から数幎分の履歎も䜎コストで怜玢可胜にしたす。これらすべおを同じコレクション内で実珟したす。時系列コレクションは OpenSearch Serverless にアラヌトず異垞怜知も远加するため、問題が起きた瞬間に発芋しお察凊できたす。コレクションあたり最倧 100 TB のホットストレヌゞをサポヌトし、アプリケヌション監芖、セキュリティ分析、IoT テレメトリなど倧芏暡なオブザヌバビリティワヌクロヌドに察応したす。 オブザヌバビリティデヌタは量が倚く、䞍具合のあるデプロむや障害など、チヌムが最も早く答えを求める瞬間に急増したす。クラスタヌのサむゞングが䞍足するず凊理が远い぀かず、゚ンゞニアが埅っおいるログの到着が遅れるため、チヌムはピヌク負荷に合わせおサむゞングし、それ以倖の日もその容量分を支払うこずになりたす。履歎が増えるずホットストレヌゞの費甚がかさむため、保持期間を短瞮したり、叀いデヌタをスナップショットに移したりせざるを埗たせん。しかしスナップショットからク゚リするには、たず誰かが埩元する必芁がありたす。クラスタヌには継続的なチュヌニングず容量蚈画も必芁で、本来デヌタが支揎するはずの調査から゚ンゞニアを匕き離しおしたいたす。あらゆる刀断がコスト、保持期間、システムぞの疑問に答えるたでの速床のトレヌドオフになりたす。 OpenSearch Serverless の時系列コレクションはトレヌドオフを取り陀きたす。むンシデントでログ量が急増しおも、コンピュヌトが数秒でスケヌルしお远埓するため、゚ンゞニアが埅っおいるログは時間通りに届きたす。トラフィックが萜ち着けばコンピュヌトはれロたでスケヌルダりンするため、ピヌク時の容量に支払い続ける必芁はありたせん。叀いデヌタは䜎コストのりォヌム局に移動したすがク゚リは可胜なので、保持期間を瞮めたりスナップショットを埩元したりせずに数幎分の履歎を保おたす。サむゞングやチュヌニングが必芁なクラスタヌはありたせん。コンピュヌトの䞊限ずいく぀かのむンデックス蚭定を指定すれば、あずはサヌビスが凊理したす。 ク゚リ頻床の䜎いデヌタは䜎コストで 時系列デヌタぞのク゚リの倧半は盎近数時間から数日を察象ずしたすが、叀いデヌタはク゚リ頻床こそ䜎いものの、匕き続き利甚可胜にしおおく必芁がありたす。新しい index.warm.after 蚭定で、デヌタがホット局に留たる期間を指定し、䜎コストのりォヌム局ぞ移動するタむミングを決められたす。日単䜍たたは時間単䜍で指定でき、最小 1 日 ( 24h たたは 1d ) から最倧 10 幎 ( 3650d ) たでの範囲で、むンデックスの保持期間を超えるこずはできたせん。未指定の堎合、デヌタは 1 日埌にりォヌム局ぞ移動したす。 PUT /app-logs { "settings": { "index.warm.after": "7d" } } 取り蟌み時、各ドキュメントは䜎レむテンシヌのホット局ず Amazon Simple Storage Service (Amazon S3) の䞡方に曞き蟌たれたす。デヌタが指定した経過期間に達するず、叀いものから順にホットコピヌが解攟され、デヌタは Amazon S3 䞊のりォヌム局に残りたす。ク゚リでりォヌム局のデヌタが必芁になるず、サヌビスがそのデヌタをホット局に読み戻しお凊理したす。該圓デヌタぞの最初のク゚リは時間がかかりたすが、同じデヌタぞの以降のク゚リはホット局のレむテンシヌで実行されたす。叀いデヌタに察する調査やレポヌト䜜成のように、同じ時間範囲を繰り返しク゚リする甚途に適しおいたす。ク゚リが䞡方の局にたたがる堎合も、結果は 1 ぀のレスポンスで返りたす。ホットストレヌゞの料金は、ホット局に残っおいるデヌタ分だけ発生したす。 図 1: デヌタは 7 日埌にホット局からりォヌム局ぞ移動し、党期間を通じお Amazon S3 に氞続化される ワヌクロヌドが必芁ずする期間だけデヌタを保持 保持期間はむンデックス自䜓に蚭定するため、別途ラむフサむクルポリシヌを䜜成・維持する必芁はありたせん。むンデックステンプレヌトで index.data.retention を蚭定すれば、パタヌンに䞀臎するすべおのむンデックスがその蚭定を継承したす。1 日から 3,650 日 (10 幎) たでの範囲で、日数の敎数で指定したす。 PUT /_index_template/app-logs { "index_patterns": ["app-logs*"], "template": { "settings": { "index.data.retention": "30" } } } 階局管理ず保持期間は独立しおいたす。階局管理はク゚リ速床ずコストを制埡し、保持期間はデヌタが削陀されるタむミングを制埡したす。たずえばアプリケヌションログは 7 日間ホット局に眮いお 30 日間保持する、あるいはコンプラむアンス芁件に合わせお監査デヌタを数幎間りォヌム局に残す、ずいった運甚が可胜です。監査が必芁になったら、同じコレクション内で履歎をク゚リするだけで、怜玢コンピュヌトが远加負荷に合わせおスケヌルアップしたす。スナップショットの埩元も、調査甚クラスタヌの立ち䞊げも䞍芁です。 図 2: デヌタの階局管理ず保持期間 むンデックスごずにむベントタむムスタンプを指定 時系列コレクション内のすべおのドキュメントには、タむムスタンプフィヌルドが必須になりたした。各むンデックスには、サヌビスがデヌタの敎理ず゜ヌトに䜿う時刻フィヌルドが 1 ぀指定されおおり、タむムスタンプが欠萜、null、たたは無効なドキュメントは拒吊されたす。 デフォルトの時刻フィヌルドは @timestamp です。むベントが event_time のような別のフィヌルドをすでに持っおいる堎合は、むンデックス䜜成時たたはむンデックステンプレヌトで index.timestamp_field を蚭定すれば、プロデュヌサヌ偎を倉曎せずに枈みたす。フィヌルドはトップレベルの date フィヌルドである必芁があり、ドキュメントのタむムスタンプはむンデックス登録埌に倉曎できたせん。 PUT /app-logs { "settings": { "index.timestamp_field": "event_time" } } 拒吊はドキュメント単䜍で、リク゚スト党䜓には及びたせん。 _bulk リク゚ストでは有効なドキュメントはむンデックス登録され、拒吊されたドキュメントはレスポンスの errors ブロックに列挙されるため、1 件の䞍正レコヌドでバッチ党䜓が倱敗するこずはありたせん。 図 3: 時刻フィヌルドが各ドキュメントのむンデックス登録たたは拒吊を決める仕組み 障害に発展する前に問題を芋぀ける 時系列コレクションではアラヌトず異垞怜知も䜿えるようになりたした。埓来の Classic サヌバヌレスコレクションでは提䟛されおいなかった機胜です。別のシステムに頌っお䞍具合を知らせおもらう代わりに、デヌタを保存しおいるコレクション自䜓で監芖、怜知、通知ができたす。運甚チヌムぱラヌ率やレむテンシヌの急増時に通知を受け取れ、セキュリティチヌムはログむン倱敗の急増を怜知でき、ビゞネスチヌムは泚文数の急萜を発芋できたす。 アラヌトモニタヌはスケゞュヌルに埓っおデヌタをク゚リし、条件が満たされるず遞択したチャネルを通じお通知したす。Per-query モニタヌは、平均レむテンシヌがしきい倀を超えるなど、単䞀の倀に察しおアラヌトを発したす。Per-bucket モニタヌは、゚ラヌ率が䞊がりすぎたホストごずなど、グルヌプを個別に評䟡したす。PPL モニタヌは Piped Processing Language (PPL) で、より耇雑なロゞックを扱えたす。 異垞怜知は Random Cut Forest (RCF) 機械孊習アルゎリズムでデヌタの通垞パタヌンを孊習し、固定しきい倀を掚定するこずなく、ほがリアルタむムで逞脱を怜出したす。怜出噚の結果にモニタヌを向けおおけば、異垞が珟れた瞬間に通知を受け取れたす。 モニタヌず怜出噚は OpenSearch UI ワヌクスペヌスで管理し、アクセス暩はワヌクスペヌスのコラボレヌタヌ暩限に埓いたす。読み取り専甚のコラボレヌタヌはモニタヌずアラヌトを閲芧でき、読み曞きおよび管理者のコラボレヌタヌは䜜成、曎新、確認応答も可胜です。Observability ワヌクスペヌスではアラヌトがダッシュボヌドや PPL ク゚リず䞊んで配眮されるため、サヌバヌレスコレクションや既存の Amazon OpenSearch Service ドメむンを暪断しお、アラヌトから背埌のむベントたでたどれたす。 䜿っおみる ワンクリックで始めるなら、Amazon OpenSearch Service コン゜ヌルの Express Create を䜿いたす。コレクショングルヌプ、暗号化、ネットワヌクアクセス、デヌタアクセスを自動で蚭定しおくれたす。各ステップを自分で制埡したい堎合は、以䞋のように AWS Command Line Interface (AWS CLI) を䜿いたす。 図 4: Express Create がデフォルト蚭定でコレクショングルヌプ、暗号化、ネットワヌクアクセスを蚭定する様子 たず、NextGen のコレクショングルヌプを䜜成したす。コレクショングルヌプは、所属するすべおのコレクションで共有するコンピュヌト䞊限を蚭定したす。OpenSearch Compute Unit (OCU) の最小倀を 0 にすれば、アむドル時にグルヌプをれロたでスケヌルダりンでき、最倧倀で支出に䞊限を蚭けられたす。 aws opensearchserverless create-collection-group \ --name app-logs-group \ --generation NEXTGEN \ --standby-replicas ENABLED \ --capacity-limits '{ "minIndexingCapacityInOCU": 0, "minSearchCapacityInOCU": 0, "maxIndexingCapacityInOCU": 96, "maxSearchCapacityInOCU": 96 }' 次に、コレクションぞアクセスできる堎所を制埡する ネットワヌクポリシヌ ず、どの AWS Identity and Access Management (IAM) プリンシパルがデヌタを読み曞きできるかを制埡する デヌタアクセスポリシヌ を䜜成したす。 続いお、コレクショングルヌプ内に時系列コレクションを䜜成したす。 aws opensearchserverless create-collection \ --name app-logs \ --type TIMESERIES \ --collection-group-name app-logs-group \ --encryption-config aWSOwnedKey=true コレクションがアクティブになったら、時刻フィヌルド、階局管理、保持期間の蚭定を含むむンデックステンプレヌトをワヌクロヌドに合わせお䜜成したす。名前がパタヌンに䞀臎するすべおのむンデックスが、以䞋の蚭定を自動で匕き継ぎたす。 PUT /_index_template/app-logs { "index_patterns": ["app-logs*"], "template": { "settings": { "index.timestamp_field": "event_time", "index.warm.after": "7d", "index.data.retention": "30" } } } 最埌にデヌタをコレクションに取り蟌み、OpenSearch UI の Observability ワヌクスペヌスを開いお、最初のダッシュボヌド、モニタヌ、異垞怜出噚を䜜成したす。 本日提䟛開始 時系列コレクションは、NextGen の OpenSearch Serverless が利甚可胜なすべおの AWS 商甚リヌゞョン で本日から提䟛されたす。料金は OCU 単䜍で䜿甚したコンピュヌトず、GB 月単䜍のホットおよびりォヌムストレヌゞに察しお発生したす。詳现は Amazon OpenSearch Service 料金ペヌゞ をご芧ください。 詳しくは、 Amazon OpenSearch Serverless 補品ペヌゞ ず Amazon OpenSearch Serverless 開発者ガむド を参照しおください。 Amazon OpenSearch Service コン゜ヌル でぜひお詊しいただき、 AWS re:Post たたは普段ご利甚の AWS サポヌト窓口からフィヌドバックをお寄せください。 著者に぀いお Kevin Fallis Kevin はベテランのリヌダヌ、アヌキテクト、デベロッパヌで、蟲業、アドテック、金融サヌビス、ネットワヌキング、セキュリティ、通信、そしおもちろん怜玢技術など、さたざたな業界ず専門領域での経隓を持ちたす。顧客がビゞネス目暙を達成できるよう、AWS サヌビスずオヌプン゜ヌス゜リュヌションの適切な組み合わせを匕き出すこずに情熱を泚いでいたす。仕事以倖では、家族ず過ごす時間、DIY プロゞェクト、倧工仕事、乗銬、ドラム挔奏、音楜党般を楜しんでいたす。 この蚘事は Kiro が翻蚳を担圓し、Solutions Architect の Sotaro Hikita がレビュヌしたした。
はじめに 「生成AIを導入すれば、組織の生産性は䞊がるのか」——珟堎でDXを掚進するマネヌゞャヌや、日々の業務でAIを䜿いながらどこか違和感を抱いおいる゚ンゞニア・知識劎働者の方も倚いのではないでしょうか。 私が担圓しおいるプロダクトの開発チヌムでも、AIコヌディングツヌルを導入しおいたす。しかし導入埌、生成されたコヌドが十分に確認されないたたプルリク゚ストずしお䞊がり、レビュヌで差し戻すずいうやり取りが䜕床も発生したした。コヌドを曞く速床は䞊がったはずなのに、レビュヌず手戻りに远われ、少なくずも私には、チヌム党䜓の生産性はAI導入前より䞋がっおいるように感じたした。 こうした経隓を

動画

曞籍