[{"data":1,"prerenderedAt":211},["ShallowReactive",2],{"blog-list":3},[4,95],{"id":5,"title":6,"body":7,"category":77,"date":78,"description":79,"draft":80,"extension":81,"meta":82,"navigation":83,"path":84,"seo":85,"stem":86,"tags":87,"thumbnail":91,"thumbnailAlt":92,"updatedAt":93,"__hash__":94},"blog\u002Fblog\u002Fai\u002Fazure-ai-search-rag.md","Azure AI SearchでRAGを構築する — ハマりどころと解決策まとめ",{"type":8,"value":9,"toc":65},"minimark",[10,14,18,21,24,27,40,43,47,50,53,56,59,62],[11,12,13],"h2",{"id":13},"はじめに",[15,16,17],"p",{},"Azure AI Search を使って RAG（Retrieval-Augmented Generation）を組むときに、いくつか詰まったポイントがあったので、自分の備忘録としてまとめておきます。",[15,19,20],{},"完璧に整理されたチュートリアルではなく、「実装中に手が止まった場面」を中心に書いています。",[11,22,23],{"id":23},"構成",[15,25,26],{},"今回つくったのはシンプルな構成です。",[28,29,30,34,37],"ul",{},[31,32,33],"li",{},"ドキュメントのチャンク分割と埋め込み生成",[31,35,36],{},"Azure AI Search のベクトル検索インデックス作成",[31,38,39],{},"LLM への入力にトップ K 件を差し込む",[11,41,42],{"id":42},"ハマったところ",[44,45,46],"h3",{"id":46},"インデックスのスキーマ設計",[15,48,49],{},"ベクトルフィールドを足したあとに、追加のフィールドをあとから差し込もうとしたら、インデックスの再作成が必要でした。最初のスキーマで「これは持っておきたい」と思うフィールドは全部入れておくのが結果的に楽でした。",[44,51,52],{"id":52},"チャンクサイズ",[15,54,55],{},"長すぎても短すぎても精度が落ちます。今回は 400 〜 600 トークン程度に揃えて、オーバーラップを 50 トークンほど入れる構成で、自分のドキュメントには馴染みました。",[11,57,58],{"id":58},"やってみた感想",[15,60,61],{},"最小構成で動かしてから、徐々にチューニングしていくのが向いていそうです。最初から「正解の構成」を狙うより、まず動かすほうが早く学べました。",[15,63,64],{},"次は、検索スコアと LLM のプロンプトの相性について、もう少し試してみる予定です。",{"title":66,"searchDepth":67,"depth":67,"links":68},"",3,[69,71,72,76],{"id":13,"depth":70,"text":13},2,{"id":23,"depth":70,"text":23},{"id":42,"depth":70,"text":42,"children":73},[74,75],{"id":46,"depth":67,"text":46},{"id":52,"depth":67,"text":52},{"id":58,"depth":70,"text":58},"ai","2026-04-27","Azure AI Search を使って RAG を実装した際に詰まったポイントと、その解決策を整理します。",false,"md",{},true,"\u002Fblog\u002Fai\u002Fazure-ai-search-rag",{"title":6,"description":79},"blog\u002Fai\u002Fazure-ai-search-rag",[88,89,90],"Azure","RAG","LangChain","\u002Fimages\u002Fblog\u002Fazure-ai-search-rag\u002Fthumbnail.jpg","Azure AI Search で RAG を構築するイメージ","2026-04-28","cbsfXzZeDOoxBByqr2e2H_kejuEFaTT-pSiJUh5WS4g",{"id":96,"title":97,"body":98,"category":197,"date":198,"description":199,"draft":80,"extension":81,"meta":200,"navigation":83,"path":201,"seo":202,"stem":203,"tags":204,"thumbnail":208,"thumbnailAlt":209,"updatedAt":93,"__hash__":210},"blog\u002Fblog\u002Ftech\u002Fnuxt4-migration.md","Nuxt 4 への移行で学んだこと",{"type":8,"value":99,"toc":185},[100,102,105,108,111,136,139,153,156,160,171,174,180,182],[11,101,13],{"id":13},[15,103,104],{},"個人ブログのフロントを Nuxt 3 から Nuxt 4 に移行してみました。互換レイヤーが用意されているとはいえ、いくつか手を入れる箇所があったので、気づきを残しておきます。",[11,106,107],{"id":107},"主な変更点",[44,109,110],{"id":110},"ディレクトリ構成",[15,112,113,117,118,121,122,121,125,128,129,132,133,135],{},[114,115,116],"code",{},"app\u002F"," ディレクトリが標準になり、",[114,119,120],{},"pages\u002F","・",[114,123,124],{},"components\u002F",[114,126,127],{},"composables\u002F"," などはこの配下に置く構成が推奨になりました。既存プロジェクトは ",[114,130,131],{},"compatibilityVersion"," を切り替えるだけでも動きますが、新規ならフラットに ",[114,134,116],{}," 配下にまとめておくのが見通しがよさそうです。",[44,137,138],{"id":138},"データ取得",[15,140,141,144,145,148,149,152],{},[114,142,143],{},"useAsyncData"," や ",[114,146,147],{},"useFetch"," の挙動と型は基本的に同じですが、一部のオプションで挙動が整理されています。レンダー前に必要なデータは、引き続き ",[114,150,151],{},"await"," 付きで取りに行く形が安全です。",[11,154,155],{"id":155},"詰まったところ",[44,157,159],{"id":158},"nuxt-content-の差分","Nuxt Content の差分",[15,161,162,163,166,167,170],{},"Content v3 では Collection API が追加され、",[114,164,165],{},"queryCollection('blog')"," のように扱う形に変わっていました。",[114,168,169],{},"queryContent"," 系のクエリは自前のラッパーを書いていた箇所と整合が取れず、書き直しが必要でした。",[44,172,173],{"id":173},"型推論",[15,175,176,179],{},[114,177,178],{},"schema"," で frontmatter を定義していると、コレクションから取り出した値がきちんと型付けされて気持ちよく書けます。最初に schema をしっかり書いておくと、あとで楽でした。",[11,181,58],{"id":58},[15,183,184],{},"「動かなくなる」というよりは「整理されて素直になった」という印象の移行でした。必要な範囲だけ手を入れて、徐々にディレクトリ構成も新しい形に寄せていく予定です。",{"title":66,"searchDepth":67,"depth":67,"links":186},[187,188,192,196],{"id":13,"depth":70,"text":13},{"id":107,"depth":70,"text":107,"children":189},[190,191],{"id":110,"depth":67,"text":110},{"id":138,"depth":67,"text":138},{"id":155,"depth":70,"text":155,"children":193},[194,195],{"id":158,"depth":67,"text":159},{"id":173,"depth":67,"text":173},{"id":58,"depth":70,"text":58},"tech","2026-04-25","Nuxt 3 から Nuxt 4 へのマイグレーションで遭遇した変更点と、その対処法を整理します。",{},"\u002Fblog\u002Ftech\u002Fnuxt4-migration",{"title":97,"description":199},"blog\u002Ftech\u002Fnuxt4-migration",[205,206,207],"Nuxt","Vue.js","Web開発","\u002Fimages\u002Fblog\u002Fnuxt4-migration\u002Fthumbnail.jpg","Nuxt 4 移行作業のイメージ","a7nAmClA8PEzcXMh4jylI_Gwhv72OYLqF9TDIBQFvAw",1777432174655]