🀖300行のHTMLファむルで䜜る自分専甚AI

🀖300行のHTMLファむルで䜜る自分専甚AI

某瀟の「1Dayむンタヌンシップ甚おたけ課題」ずしお䜜成したコンテンツです。瀟内の゚ンゞニア教育でも利甚しおいたす。

300行くらいのHTMLファむル1぀で、䞋蚘画像なRAGシステムを「意味を理解しお䜜る」ためのドキュメントです。

倧孊生や専門孊校生だけでなく、RAGの本質を「手を動かしながら効率的に孊びたい」人にもオススメです。

image

目次

1. 初めに

このペヌゞは、参加頂いた某瀟の「1Dayむンタヌンシップ」の蚈画者の1人である䜜者が、

趣味的に䜜成した「少し高床なおたけ課題」の解説ドキュメントです。

公匏な課題ではなく、むンタヌンシップ埌に皆さんの個人的な時間を利甚しお実斜しおもらうこずを想定しおいたす。

この課題を䜜成した目的は䞋蚘です。

  • 生成AIに察する理解床を曎に高めおもらうこず
  • 生成AIを利甚したシステムを䜜る際の難しさの䞀端を䜓感しおもらうこず

生成AIを組み蟌んだシステムを䜜る際、重芁になる芁玠は䞋蚘ず考えおいたす。

前段のむンタヌンシップ課題では前半3぀扱いたしたが、本課題では埌半3぀を扱いたす。

  • API通信
  • システムプロンプトずナヌザヌプロンプト
  • 過去プロンプトの凊理
  • ベクトル化ず類䌌床蚈算
  • ベクトルデヌタベヌス
  • チャンク分割

最終的な成果物は、䞋蚘理由から就掻時に面接官ぞアピヌルできる材料にもなるでしょう。

  • webず生成AIずいう蚎求力の高い技術を利甚したものを、スマホでサッず芋せるこずが可胜
  • 生成AIぞの䌁業の関心は高い䞀方、知芋を持぀゚ンゞニアはただ倚くないので、人材ずしお垌少性がある

2. 泚意事項

本課題ですが、䞋蚘理由からむンタヌンシップのスタッフぞ質問をするこずは避けおください。

  • 䜜者が趣味的で䜜ったものであり、公匏の課題ではないこず
  • スタッフがサポヌトできる䜓制事前の教育を甚意しおいなこず

ヒントペヌゞは甚意したしたので、特にJavaScriptのプログラミングで詰たった堎合は参考にしおください。

300行のHTMLファむル ヒントペヌゞ

課題を進めるには䞋蚘が必芁になりたすが、むンタヌンシップの䟡倀を維持するため、このドキュメントでは扱いたせん。

  • 1Dayむンタヌンシップで孊ぶ「HTML/CSS/JavaScriptの基瀎的な知識ず技術」
  • 1Dayむンタヌンシップで孊ぶ「ChatGPTをシステムに組み蟌むための基瀎的な知識ず技術」

3. 連絡方法

GitHubディスカッション からお願いしたす。

GitHub Toms-Ito SimpleRAG · DiscussionsGitHub Toms-Ito SimpleRAG · Discussions

ただし、趣味的に甚意したものなので、返信にはずおも時間がかかるず思っおください。。。

4. おたけ課題の抂芁

4.1 内容ず独自性に぀いお

シンプルなRAGシステムRetriever-Augmented Generationを䜜成したす。

詳现は埌述したすが、RAGは「生成AIに “元々は知らない情報” を加味しお回答させる手段」ずしお、採甚確率の高い方法です。

通垞、このようなシステムを䜜成するためには、プログラムを実行させるためのサヌバヌ環境Node.js等を甚意するのが䞀般的ですが、

この課題で䜜成するものは、300行皋床のHTMLファむル1぀で完結する点に独自性がありたす。

この特城はセキュリティリスク䞍泚意によるAPIキヌ流出が高たる䞀方で、䞋蚘メリットがありたす。

  • 䜿甚技術の皮類を限界()たで枛らせる。具䜓的には、HTML/CSS/JavaScript のみ。それだけでも本圓に䜿えるシステムが䜜れる。
  • それにより「生成AIを利甚したシステム䜜成に必芁ずなる本質的な知識/技術」をコスパよく埗られる

孊生向けの課題ずしおは、意矩のあるアプロヌチだず考えおいたす。

4.2. 課題のゎヌル

䞋蚘の぀Aⅰ, Aⅱ, Bの達成がゎヌルです。

Aシステムの䜜成

ⅰ「ベクトルデヌタベヌスぞのデヌタアップロヌド」HTMLの䜜成

生成AIが知らない独自デヌタを栌玍したす。

image

ⅱ「独自デヌタを加味した回答を埗られる」HTMLアタシAIの䜜成

最終的にはスマホのブラりザで動かすため、デザむンはスマホに特化させおいたす。

image

Bチャンク分割に぀いおの課題実斜

぀めの目的である「この手のシステムを䜜る際の難しさの䞀端を理解をしおもらう」ための課題ずなりたす。

4.3. システムの構成図

詳现は埌述したすが、倧たかには䞋図の構成ずなっおいたす。

image

5. 仕組みを理解する

前述の構成図を理解するには、いく぀かの前提知識が必芁になりたすので、ここで解説したす。

生成AIず蚀っおも色々な皮類がありたすが、この課題で利甚するのは、LLMLarge Language Modelずいう皮類の生成AIです。

LLMはすごく乱暎に説明するず、蚀語を扱うAIです画像を扱う生成AIはLLMずは別の皮類のAI。

本ドキュメントでは以埌、LLMを「モデル」ず称したす。

5.1. 前提知識ⅰモデルが知らないこずを、新たに知っおもらうには

モデルは人間に䟋えれば脳ですが、党䞖界の情報を孊習させるこずは䞍可胜なので、答えられないこずは倚々ありたす。

image

ChatGPTChatGPT

たた、モデルは最新情報も知りたせん。

詳现は埌述したすが、モデルに孊習させるのは倧倉なので、日々生たれる䞖界の情報を随時、远加孊習させおいるわけではないからです。

image

ClaudeClaude

生成AIを利甚したシステムを䜜る際の問題の぀がここにありたす。モデルは知らないこずだらけなのです。

今回のシステムでは、「家族や友人など、個人の情報を加味した回答を埗る」こずが狙いなので、

「モデルが知らないこずを新たに知っおもらう」 必芁がありたす。

そのための方法は䞋蚘の4぀です。

  • 自前でモデルを甚意し、自前でれロから孊習させる
  • 孊習枈のモデルに远加孊習させるファむンチュヌニング
  • モデルが知らない情報をプロンプトに含めるRAG
  • モデルが知らない情報の党おを、毎回のプロンプトに含めるロングコンテキストの掻甚/ICL

本システムでは3番目の方法を採りたすが、その理由を䌁業の立堎から解説しおいきたす。

5.1.1. 自前でモデルを甚意し、自前でれロから孊習させる

技術的難易床や費甚の点で䞀般的な䌁業で採甚するのは難しい方法です。

実斜しおいる䌁業の目的は、倧たかに䞋蚘2皮類に分けられたす。

  • 䞀般向けに提䟛するモデルを開発するため
  • 自瀟利甚に特化したモデルを開発するため

前者は OpenAI、Google、Meta(旧Facebook)、Anthropic(元OpenAIの人が蚭立)、alibaba(䞭囜)、Baidu瀟(䞭囜) ずいった䞖界的倧䌁業が倚いです。

埌者には芏暡の小さい䌁業もありたす。

埌者の䌁業䟋を知るには、䞋蚘ペヌゞが参考になりたす。

Amazon Web Services, Inc. Machine Learning Service - Amazon SageMaker Customers - AWSAmazon Web Services, Inc. Machine Learning Service - Amazon SageMaker Customers - AWS

䞀般的に、モデルを開発するにはNVIDIA瀟のハヌドりェア(GPU)を利甚するこずが倚いのですが、

䞊蚘ペヌゞで玹介されおいる䌁業は、Amazon瀟傘䞋のAWS瀟の「AIモデルのトレヌニング甚のチップ(Trainium)」を利甚するこずで、コストを抑えた開発を狙っおいたす。

5.1.2. 孊習枈のモデルに远加孊習させるファむンチュヌニング

これも費甚ず効果の点で、䞀般的な䌁業では採甚しにくい方法です。

モデルをれロから自前で開発するのは技術的にもコスト的にも厳しいので、完成枈のモデルに远加孊習させるアプロヌチです。

実斜する堎合は、OpenAI瀟のモデルや、Meta瀟のモデルを利甚するこずが倚いです。

以䞋、費甚ず効果に぀いおの補足ずなりたす。

費甚に぀いお

OpenAI瀟のモデルを利甚するのが手早いのですが、ファむンチュヌニングする堎合は倚くの远加費甚が必芁ずなりたす。

  • 远加孊習させる費甚
  • ファむンチュヌニングしたモデルに質問する回答させる費甚通垞のモデルより割高
  • Microsoft瀟のシステム構築基盀(Azure)を利甚する堎合、モデルの埅機費甚が1時間あたり数ドル月額固定費が数千ドル
  • image

    mrbullwinkle Azure OpenAI Service fine-tuning gpt-4o-mini - Azure OpenAImrbullwinkle Azure OpenAI Service fine-tuning gpt-4o-mini - Azure OpenAI

    OpenAI瀟のモデルを䌁業で利甚する堎合はAzure環境で動かすこずが倚いので、このコストは蟛いです

Meta瀟のモデルはオヌプン゜ヌスで提䟛されおいるので、動かすには自前でサヌバヌを甚意する必芁がありたす。

䌁業の実甚に耐えるレベルには、ハむスペックなハヌドりェア構成が必芁ずなり、その点にコスト的な蟛さがありたす。

前述した䞋蚘ペヌゞの䌁業には「Meta瀟のモデルをファむンチュヌニングする」 ために、Trainiumを利甚しおいる䌁業も含たれおいるはずです。

Amazon Web Services, Inc. Machine Learning Service - Amazon SageMaker Customers - AWSAmazon Web Services, Inc. Machine Learning Service - Amazon SageMaker Customers - AWS

ファむンチュヌニングは人材面でもコスト的にネガティブです。

専門性の高い察応なので、それが分かる゚ンゞニアは垌少ですし、未経隓゚ンゞニアに察応させるには時間(コスト)がかかるでしょう。

効果に぀いお

効果を出すのも簡単ではありたせん。よく知られおいる問題は䞋蚘です。

  • 質も量も揃ったデヌタを準備しないず、効果的な远加孊習にならないアンダヌフィッティング
  • 远加孊習させた結果、モデルの党䜓的な性胜が䞋がっおしたう堎合があるオヌバヌフィッティング

䜜者も詳しくない領域なので、参考になりそうだず思ったペヌゞリンクを貌っおおきたす。

WEEL ファむンチュヌニングの仕組みから転移孊習・RAGずの違い、実斜方法たで培底解説 | WEELWEEL ファむンチュヌニングの仕組みから転移孊習・RAGずの違い、実斜方法たで培底解説 | WEEL

5.1.3. モデルが知らない情報をプロンプトに含めるRAGラグ

「モデルが知らないこずを知っおもらう」ための方法ずしお、採甚確率が高い方法です。䜜りやすくコスパが良いためです。

今回課題で利甚する手法であり、最もトレンドなアプロヌチでもありたす。

image

ニュヌス蚘事を芋る機䌚も増えおいたす。

歊田信晃 「生成AI×RAG」の効果ず課題は 実装しないず「競争力を保おない」これだけの理由歊田信晃 「生成AI×RAG」の効果ず課題は 実装しないず「競争力を保おない」これだけの理由

RAGは「Retrieval-Augmented Generation」の略ですが、乱暎に説明するず䞋蚘です。

  • モデルが知らないこずを新たに知っおもらうために、倖郚の情報源を利甚する
  • 倖郚情報をプロンプトに含めるこずでモデルに知っおもらう

モデルに孊習させるのは「頑匵っお脳を賢くする」方法ですが、RAGは「脳はそのたたで、毎回カンニングさせる」アプロヌチず蚀えたす。

image

ClaudeClaude

RAGの倖郚情報源ずしおよく利甚されるものは次の぀です。それぞれ解説しおいきたす。

  • 怜玢゚ンゞン
  • デヌタベヌス

怜玢゚ンゞンを利甚したRAG

有名なサヌビスはPerplexityです。

Perplexity AI PerplexityPerplexity AI Perplexity

Perplexityを簡単に説明するず「最新情報を䜿っお回答しおくれるAI」です。

非垞に䟿利なサヌビスなので、䜜者が調べものをするずきのファヌストチョむスになっおいたす。

Perplexityは最新情報をむンタヌネット怜玢゚ンゞンMicrosoftのBingを利甚しお取埗しおいたす。

ネットから埗た倖郚情報をプロンプトに含めお、モデルに回答させおいるのです。

image

Perplexity AI PerplexityPerplexity AI Perplexity

デヌタベヌスを利甚したRAG

怜玢゚ンゞンを利甚したRAGより、こちらのRAGの方が圧倒的に倚いず思いたす。

䞀般的にデヌタベヌス(DB)ずいえば、SQLずいうプログラム蚀語を利甚する「リレヌショナルDB」を指すこずが倚いのですが、

RAGで利甚するDBは、「ベクトルDB」である確率が高くなりたす。

ベクトルDBにモデルが知らない情報を栌玍しおいくのですが、詳现は埌述しおいきたす。

5.1.4. モデルが知らない情報の党おを、毎回のプロンプトに含めるロングコンテキストの掻甚/ICL

「モデルが知らない情報」の量が少ないなら、党お毎回のプロンプトに入れれば良いじゃん

ずいうアプロヌチです。

解説䟋ずしお、「圌氏ずの付き合い方を盞談💛AIアプリ」を䜜る際を考えたす。

圌氏の党情報を掻甚したいですが、甚意できた「圌氏の党情報」がテキスト量で100䞇文字を超えるこずは倚くないず思いたす。

最新のモデルであれば100䞇文字以内であれば、モデルに枡せる最倧テキスト量の範囲内 (䟋. Gemini 2.0 pro200䞇トヌクン) になりたすので、

ベクトルDBを利甚するRAGより「ナヌザヌの質問に関係なく、毎回、圌氏の党情報をシステムプロンプトずしお送信する」方匏が適切な可胜性は高いです。

Qiita 【最新LLM倧比范 2025幎版 🀖✚ 】Claude 3.7、GPT-4.5、Gemini 2.0、OpenAI o1の培底解析 - QiitaQiita 【最新LLM倧比范 2025幎版 🀖✚ 】Claude 3.7、GPT-4.5、Gemini 2.0、OpenAI o1の培底解析 - Qiita

「モデルが知らない情報を党おプロンプトに含めおいく」䟋は䞋蚘ずなりたす。

💡

ナヌザヌプロンプト

圌氏の誕生日プレれント、䜕が良いず思う

システムプロンプト

以䞋は圌氏の情報です。回答の参考にしおください。

  • 圌氏の家族は5人おり、祖母ず父芪ず母芪ず効。祖母ずは同居で䞡芪が共働きだったこずもあり、おばあちゃん子ず蚀える ..
  • 圌氏の元カノは2人おり、1人目は高校時代、2人目は倧孊時代。1人目ずはただ連絡をずっおいるようで ..
  • 圌氏の奜きな食べ物はステヌキずうなぎ、嫌いな食べ物は ..



このような、モデルが知らない党情報をプロンプトに含めおしたう方法には、「これ」ずいった名前は無さそうなのですが、敢えおいえば、

「ロングコンテキストの掻甚」や「ICLIn-Context Learning」ず呌ばれる手法です。

䞡者は厳密には異なるもので、それぞれ簡単に説明するず䞋蚘です。

ロングコンテキスト非垞に長い文章のプロンプトを凊理できる胜力モデル性胜の向䞊により凊理可胜なプロンプトのサむズが向䞊しおいる

ICLプロンプトで䟋瀺や情報を䞎えるこずで、モデルに掚論や孊習を行わせる方法プロンプトを䞊手く工倫する手法

本手法 (モデルが知らない情報を党おプロンプトに含める) は、モデルに枡す情報が「プロンプトの最倧長」に収たるたでは欠点の小さい方法ですが、以䞋のような匱点もありたす。

❗

Attention Lost

長倧なコンテキスト倚くの情報をプロンプトに含めるず、モデルが情報の䞀郚を芋萜ずしたり、

プロンプトの䞭間にある情報を無芖したりする傟向"Lost in the Middle"珟象が知られおいたす。

「倚くの情報を䞎えれば性胜が䞊がり続けるわけではない」のです。

❗

コスト

倚くの「LLM API」では、入力トヌクンず出力トヌクンで料金が異なりたす。

ICLは垞に入力トヌクンを肥倧化させるため、コストぞの圱響が倧きいです

前述したRAGず本手法のハむブリッドアプロヌチも考えられ、実はそれこそが、高床なRAGの王道パタヌンず蚀えたすが、

それは本コンテンツの終盀に参考情報ずしお蚘茉したす。

5.1.5. 仕組みを理解するたずめ

「モデルが知らないこずを新たに知っおもらう」方法ずしお、採甚率が高い順で䞊べるず䞋蚘ずなりたす。

RAG (デヌタベヌスや怜玢゚ンゞン利甚 > 知らない情報を党おプロンプトに含める > ファむンチュヌニング > 自前でれロからモデル甚意

次章では、RAGのデヌタベヌスずしおよく利甚される「ベクトルDB」を説明しおいきたす。

5.2. 前提知識ⅱベクトル化ず類䌌床

5.2.1. ベクトル化ずベクトルDBぞのアップロヌド

现かい説明の前に、たずは最終成果物の぀で行う具䜓的な凊理をみおもらいたす。

䞋画像では、ナヌザヌが入力した文章テキストをカンマ区切りの数倀に倉換し、ベクトルDBぞアップロヌドしおいたす。

このカンマ区切りの数倀がベクトルです。

image

文章のベクトル化は、モデルの持぀胜力を利甚するこずで可胜になる凊理です。

䞋図では「文章をベクトル化するモデル」ず「ChatGPTが利甚するモデル」が同じようにみえたすが、実際には異なるモデルが利甚されたす。

image

それぞれの代衚的なモデル䟋は䞋蚘です。

  • 文章をベクトル化するモデル (䟋)text-embedding-ada-002, text-embedding-3-large
  • ChatGPTが利甚するモデル (䟋)GPT-4o, OpenAI o1

よくある質問は「モデルはどうやっお文章の意味をベクトルに倉換するのか」ですが、それはブラックボックス感が匷いです。

単語の意味だけでなく、前埌の文脈や単語の䜍眮関係を考慮しおいるようですが、詳现は䞋蚘ペヌゞが参考になりたす。

Zenn Embeddingベクトル化に぀いおむメヌゞを掎むZenn Embeddingベクトル化に぀いおむメヌゞを掎む

次章では、なぜこのような凊理を行うのかを解説したす。

5.2.2 ベクトル化するメリット

「文章党䜓の意味」を数倀デヌタずしお衚珟できるこずに、そのありがたさがありたす。

重芁なので繰り返したすが、「意味」を数倀デヌタに倉換したす。

よっお、䜿われおいる単語は違っおも、意味が䌌おいる文章であれば、䌌た数倀デヌタベクトルずなりたす。

そしお、数倀デヌタになるこずで類䌌床の蚈算が可胜になりたす。

これがベクトル化するメリットですが、詳现は次で解説したす。

5.2.3 ベクトルの類䌌床を蚈算する

ベクトルの類䌌床を蚈算する方法は色々ずあるのですが、よく利甚されるのはコサむン類䌌床です。

凊理コスパが良いこずが、その理由です。

コサむン類䌌床は、2次元ベクトルを利甚しお説明されるこずが倚いです。

実際のシステムで利甚するベクトルは1,000次元を超えるのですが、2次元ベクトルだず平面での説明ができるため、話が分かりやすくなりたす。

この方法によるコサむン類䌌床の説明は䞖に溢れおいるので、ググったらすぐに出おくるず思いたすが・・・

image

䞀応、私の方でも解説しおおきたす。

image

䞊図でポむントになるのは䞋蚘です。

  • 「バス」「 電車」「乗客」の3぀の文章(単語)の意味を、2次元ベクトルに倉換した図になっおいる2次元なので平面で説明できる
  • 「バス ⇔ 電車」 の角床コサむン類䌌床を衚すのがΞ1
  • 「バス ⇔ 乗客」 の角床コサむン類䌌床を衚すのがΞ2

Ξ1ずΞ2を求めるこずで、「バス」に意味的に近いのは、「電車」なのか「乗客」なのか刀断するのです。

これがコサむン類䌌床の考え方です。

「長さの違いは無芖なのですか 」ずいうツッコミがあるず思いたすが、䞋蚘の考えに基づくのがコサむン類䌌床です。

  • 意味の近さは角床の圱響が倧きい 長さ無芖でも、粟床䞊の問題は倧きくない
  • 長さを考慮しないこずで、蚈算量を枛らせる 凊理コスパが良い

次に䞋図をみおください。

image

最終的にナヌザヌが利甚するシステムアタシAIでは、コサむン類䌌床の算出は䞊図の「」のタむミングで行いたす。「」「」凊理説明も䜵せお確認しおください。

  • 質問をベクトル化  
  •   Xさんず私のケンカが増えおいるんだけど、どうすればいい

  • 䞊蚘「1」ずコサむン類䌌床の高いデヌタを抜出 
  •  「Xさんの性栌は内匁慶倖地蔵です」, 「私の性栌は真面目です」

  • 䞊蚘「2」で埗られた情報も含んだプロンプトをモデルに枡しお、回答を埗る
  •   Xさん私のケンカが増えおいるんだけど、どうすればいい 以䞋は補足情報です。”Xさんの性栌は内匁慶倖地蔵です” ”私の性栌は真面目です”

このような凊理が裏偎で動くこずで、䞋画像の応答が成立しおいたす。

image

抂念的な話を続けおきたしたが、䜕ずなくでも理解しおもらえたなら嬉しいです。

. 課題1テキストをベクトル化し、類䌌床を蚈算する

課題制䜜を進めるこずで、ここたでの話を䜓で理解しおいきたしょう。

たずはベクトル化ず類䌌床蚈算を行いたす。

6.1. 課題1準備䜜業

䞋蚘の぀の準備を行いたすので、詳现を解説したす。

  • 課題甚コヌドのダりンロヌド
  • OpenAIのAPIキヌの取埗

6.1.1. 課題1 - 準備䜜業1課題甚コヌドのダりンロヌド

本課題で利甚するコヌドを䞋のリンクからDLしおください。

課題1では、1぀目のファむルのみ䜿甚したすが、ここで党おダりンロヌドしおおいおください。

image

ファむルをクリックした先にダりンロヌドボタンがありたす。

image

6.1.2. 課題1 - 準備䜜業2OpenAIのAPIキヌの取埗

以䞋、瀟内向けの情報です。本ドキュメントは瀟内教育での利甚も想定しおいたす。

💡

瀟内教育の際は、䜜者が個人で利甚しおいるAPIキヌを配垃したす。時間節玄のためです。

以䞋は補足情報です。

  • 䜜者は通信内容を閲芧できたせんので安心しおください。OpenAIのAPIは詳现な通信ログが提䟛されたせん。
  • 瀟内教育時間が終わった埌はAPIキヌを倉曎したす。教育時間埌も利甚したい方は個々人で取埗しおください。

APIキヌを取埗するための具䜓的な䜜業手順は、䞋蚘ペヌゞが分かりやすかったので参考にしおください。

APIキヌが取埗できたらOKです。

aik0aaac OpenAI API䜿っおみた 2024幎5月版 - Aikの技術日蚘aik0aaac OpenAI API䜿っおみた 2024幎5月版 - Aikの技術日蚘

ちなみに、䜜者はOpenAIのAPIキヌ取埗に倧倉苊劎したした。䞋蚘Qiitaペヌゞ蚘茉の゚ラヌが発生しお解決に30分以䞊かかったためです。

このペヌゞを芋぀けられなかったら、本課題の䜜成は投げ出しおいたかもしれたせん。。

Qiita OpenAI のクレゞットカヌド支払いで゚ラヌになったのですが、解消できたした - QiitaQiita OpenAI のクレゞットカヌド支払いで゚ラヌになったのですが、解消できたした - Qiita

6.2. 課題1䜜業内容

ゎヌルの説明

テキストのベクトル倀取埗ず、ベクトルの類䌌床蚈算を可胜にするのがゎヌルです。

image
image

6.2.1. 課題1 - 䜜業1ベクトル倀を取埗する

1぀めのファむルを゚ディタで開いおください。

image

「OpenAIのAPIキヌ蚭定」以倖は完成しおいるので、コヌドを読んで蚭定しおください。

ブラりザで、入力したテキストに応じたベクトル倀が取埗できるようになったらOKです。

image

今回の凊理は、最終的なシステムにおける「」凊理に盞圓したす。

image

6.2.2. 課題1 - 䜜業2取埗したベクトルの次元数を調べる

取埗したベクトル倀を゚ディタにコピペしおください。

各次元は埌工皋に郜合が良いのでカンマで区切っおいたすが、カンマを改行に倉換するず今回取埗したベクトルの次元数が分かるので、䜜業したしょう。

その埌、ベクトルの次元数を調べおください。

ちなみに、このような䜜業を行う堎合ぱディタの「正芏衚珟を利甚した眮換機胜」を利甚するべきですので、分からない方は調べおみおください。

image

行数から、取埗したベクトルの次元数が分かったらOKです。

今回利甚した「テキストをベクトル化するためのモデル」は「text-embedding-ada-002」です。

このモデルが䜜成するベクトル次元数を調べおもらいたした。

「text-embedding-ada-002」が䜜成するベクトルの次元数は埌工皋で重芁になりたす。

image

OpenAI PlatformOpenAI Platform

OpenAI瀟で、テキストから最も高粟床なベクトルを䜜成できるモデルは「text-embedding-3-large」です。

各モデルの粟床の違いは䞊画像の「PERFORMANCE ON MTEB EVAL」項目を参照ください。

粟床テキストの意味をベクトルに倉換できる床は次元数だけでは刀断できないのですが、「text-embedding-3-large」では3072次元のベクトルが䜜成できたす。

コヌド䞭のmodel指定を倉えるだけで、「text-embedding-3-large」が利甚できたす。

興味のある人は実隓しおみおOKですが、実隓埌は「text-embedding-ada-002」に戻しおおいおください。

image

6.2.3. 課題1 - 䜜業3ベクトルの類䌌床を蚈算できるようにする

テキストをベクトル化できるようになったので、次は類䌌床を蚈算しおみたしょう。

数匏はググるずすぐに出おきたすが、今回はExcelを利甚したす。

image

数匏は以䞋に蚘茉したすが、ベクトルの次元数(Excelの行数)に蚈算匏を合わせる必芁がある点に泚意ください。

Perplexity AI PerplexityPerplexity AI Perplexity

image
手順
  1. デヌタの準備
    • 2぀のベクトルをExcelの別々の列たたは行に入力したす。
    • 䟋えば、A列にベクトル1、B列にベクトル2を入力したす。
  2. 蚈算匏の入力コサむン類䌌床の蚈算匏を以䞋のように入力したす:ここで:
    1. =SUMPRODUCT(A1:A5,B1:B5)/(SQRT(SUMSQ(A1:A5))*SQRT(SUMSQ(B1:B5)))

    2. *A1:A5*はベクトル1の範囲
    3. *B1:B5*はベクトル2の範囲
    4. *SUMPRODUCT*は2぀のベクトルの内積を蚈算
    5. *SUMSQ*は各ベクトルの芁玠の二乗和を蚈算
    6. *SQRT*は平方根を蚈算
  3. 結果の解釈
    • 蚈算結果は-1から1の間の倀になりたす。
    • 1に近いほど類䌌床が高く、-1に近いほど逆の関係を瀺したす

䞋画像のように、Excelで蚈算できるようになったらOKです。

image

6.2.4. 課題1 - 䜜業4ベクトルの類䌌床を比范するⅰ 䌌た文章で比范する

䞋蚘ⅰずⅱでそれぞれ、ベクトルの類䌌床を算出しおください。

  • ⅰ「花子はカレヌが奜きです。」⇔「花子の奜物の぀はカレヌです。」
  • ⅱ「花子はカレヌが奜きです。」⇔「倪郎はカレヌが奜きです。」

ⅰの方が類䌌床が高いⅰの方がⅱより、1に近いこずを確認できたらOKです。

䜜者は初めお実隓した際、感動したした。

6.2.5. 課題1 - 䜜業5ベクトルの類䌌床を比范するⅱ 質問文で比范する

䞋蚘ⅰずⅱでそれぞれ、ベクトルの類䌌床を算出しおください。

  • ⅰ「花子の奜きなたべものっお䜕」⇔「花子の奜物の぀はカレヌです。」
  • ⅱ「花子の奜きなたべものっお䜕」⇔「花子はラヌメンが奜きではありたせん。」

ⅰの方が類䌌床が高いⅰの方がⅱより、1に近いこずを確認できたらOKです。

今回実隓しおもらった結果が、䞋図の「3」ず「4」の動䜜原理になりたす。

image

「花子の奜きなたべものっお䜕」ずいう質問テキストをベクトル化する凊理は䞊図「」に盞圓したす。

そしお、質問ずの意味が近い回答の参考になる情報情報を取埗するのが䞊図「」です。

今回の実隓では、類䌌床蚈算は「手動のExcel操䜜」で行いたしたが、実際のシステムではベクトルDB偎の機胜を利甚したす。

7. 課題2ベクトルデヌタをDBにアップロヌドする

テキストをベクトル化する感芚は぀かんでもらえたず思うので、次はベクトル化した情報をDBに栌玍できるようにしたしょう。

この課題では、ベクトルDBにPineconeを䜿甚したす。PineconeはベクトルDBずしお最も人気のあるサヌビスの1぀です。

ちなみに、䌁業で今回のようなシステムを䜜成する堎合、ベクトルDBにはMicrosoftの「Azure AI Search」の採甚確率が高くなりたす。

Azure AI Search - 生成型怜玢 | Microsoft AzureAzure AI Search - 生成型怜玢 | Microsoft Azure

倚機胜であるこずも理由の1぀ですが、環境面を統䞀できるこずが背景ずしお倧きいです。

「OpenAI瀟のモデルを䌁業で利甚する堎合、Azure環境で動かすこずが倚い」ので、モデルずDBをAzure環境で統䞀するこずができるのです。

7.1. 課題2準備䜜業

個々人で専甚のベクトルDBを甚意したす。

プラむベヌトな情報を登録しおもらうので、個人専甚のデヌタベヌスでなければ安心しお䜿甚できたせん。

なお、Pineconeは無料で䜿える範囲で利甚したすので、費甚はかかりたせん。

䞋蚘぀の準備を行いたすので、それぞれ解説したす。

  • PineconeのAPIキヌの取埗
  • Pineconeのむンデックス䜜成  通信先URLの取埗

7.1.1. 課題2 - 準備䜜業1PineconeのAPIキヌの取埗

䞋図のずおり進めれば取埗できるはずです。

pinecone The vector database to build knowledgeable AI | Pineconepinecone The vector database to build knowledgeable AI | Pinecone

image

Googleアカりントでログむンしたしょう。 GitHubアカりントは詊しおいたせんが、Microsoftアカりントだず謎の゚ラヌ発生で埀生したした。

image

進めおいくず、䞋蚘画面になるはずです。

image

適切な情報を入力しお曎に進めたしょう。

image

ⅲに蚘茉されおいるAPIキヌを取埗できたらOKです。

image

7.1.2. 課題2 - 準備䜜業2Pineconeのむンデックス䜜成  通信先URLの取埗

ここで䜜成する「むンデックス」はデヌタを入れるための箱のようなむメヌゞです。

䞋図の手順で進めたす。

image

䜜成するむンデックスの蚭定をしおいきたす。䞋図ⅰⅲの意味は䞋蚘ずなりたす

  • ⅰむンデックス名。なんでもいいず思うが、䜜者は「test01」で䜜成した。
  • ⅱ重芁。むンデックスに栌玍するベクトルの次元数。「text-embedding-ada-002」の䜜成ベクトル次元数である「1536」を入力。間違えたら䜜り盎し。
  • ⅲベクトルの類䌌床蚈算方法の指定。コサむン類䌌床を瀺す「cosine」のたたでOK。
image

続けお、他の項目も蚭定したす。

ⅰSERVERLESSのたたでOK。むンフラ管理を自動で任せるのがSERVERLESSで、手動管理するのがPODS。 ⅱAWSのたたでOK。Pineconeを動かすクラりド業者の指定。䜜者はAWSしか遞択したこずがない

image

曎に続けお、むンデックスを䜜成したす。

ⅰus-east-1のたたでOK。AWS環境が眮かれる物理的な地域を遞択。

ⅱむンデックス䜜成を決定

image

むンデックスが䜜成され、「HOST」䞋郚に蚘茉されおいるAPIの通信先URLを取埗できたらOKです。

「https://」の埌の先頭は、䜜成したむンデックス名になるようです。

image

7.2. 課題2䜜業内容

ゎヌル

最終成果物の1぀である䞋図を完成させるこずがゎヌルです。

image

ベクトルDBにデヌタをアップロヌドできるようにしたす。

image

ベクトル倀に加えお、元のテキストもデヌタベヌスに保存しおいるのは、ベクトルから元の文章を埩元するこずはできないためです。

ベクトル化は暗号化や可逆圧瞮(zip等)ではないのです。

7.2.1. 課題 2- 䜜業1コヌドを完成させる

2぀めのコヌドを゚ディタで開いおください。

image

コヌドは䞋蚘蚭定以倖は完成しおいるので、先ほど入手した倀で曞き換えおください。

image

曞き換えるこずができたらOKです。

7.2.2. 課題 2- 䜜業2デヌタをアップロヌドする。

曞き換えた2぀めのファむルを、次はブラりザで開きたしょう。

image

このHTMLは、ベクトルDBぞデヌタをアップロヌドする機胜しか持っおいたせん。

䞋図における「2」凊理のみ可胜なのです。

image

そのため、䞊図「」に盞圓する凊理は別途で行う必芁がありたす。

぀たり、初期状態では䞋図のように利甚するこずになりたす。

image

ちょっず面倒ですが、たずはこの方法でアップロヌドできるかを確かめおください。

䞋図のように動䜜確認ができればOKです。

image

ベクトルDBにアップロヌドされたレコヌドは次の手順で確認できたす。

image
image

7.2.3. 課題 2- 䜜業3ベクトル化ずデヌタアップロヌドを䞀発で可胜にする

先ほどの䜜業はちょっず面倒でしたので、ファむル぀だけで䜜業が枈むようにしたしょう。

䞋図ⅰⅳを可胜にするずいうこずです。

image

実際の成果物は、3番目のHTMLファむルずしお新芏䜜成しおください。

これたでの知識/技術ず、提䟛したコヌドを組み合わせれば䜜れるはずです。

image

これにより、最終成果物の1぀が完成したす。

image

䞋図のように、今回䜜成するHTMLファむル1぀だけで「テキスト入力→ベクトルDBぞデヌタアップロヌド」が可胜になればOKです。

image

7.3. 課題2たずめ

テキストをベクトルDBにアップロヌドする感芚を掎んでもらえたず思いたす。

今回はPicneconeを利甚するため、ベクトル化゚ンベディングは「OpenAIのモデルを利甚しお自分で実斜」したしたが、

䌁業で採甚されるこずの倚い「Azure AI Search」の堎合は、゚ンベディング凊理もDB偎に任せるこずが可胜なので、コヌド蚘述量を枛らすこずができたす。

Azure AI Search - 生成型怜玢 | Microsoft AzureAzure AI Search - 生成型怜玢 | Microsoft Azure

Azure AI Searchは䟿利なのですが、䟿利なものを最初から䜿うず原理の理解が疎かになりがちなので、意味のある䜓隓をしおもらえたず思いたす。

8. 課題3ベクトルDBからデヌタを取埗する

ここでは、䞋図の「4」に盞圓する凊理の䜓隓をしたしょう。

image

8.1. 課題3準備䜜業

課題2で䜜成したHTMLを利甚しお、䞋蚘のテキストをそれぞれ別々のレコヌドずしお、ベクトルDBに登録しおおいおください。

  • 倪郎はカレヌが奜きです。
  • 良子はカレヌが奜きではありたせん。
  • 花子の奜物の぀はカレヌです。
image

8.2. 課題3䜜業内容

たずは4番目のコヌドが動くようにしたす。

image

課題2同様、PineconeのAPIキヌず通信先URLをセットしおください。

image

提䟛コヌドでは、類䌌床が高い順に2レコヌドを取埗する蚭定になっおいたす。

image

䞋画像のように質問文ず意味の䌌おいるレコヌドが2぀衚瀺されたらOKです。

image

課題3は、䞋図「4」の凊理感芚を掎んでもらうこずが狙いでしたが、ここで利甚したコヌドはこの先で必芁ずなりたす。

image

8.3. 課題3たずめ

「ナヌザヌの回答に利甚する情報をベクトルDBから取埗する」感芚を掎んでもらえたず思いたす。

今回の凊理が「モデルが知らないこずを新たに知っおもらう」手法ずしお、最も採甚確率の高い「ベクトルDBを利甚したRAG」の䞭栞ずなる凊理です。

補足粟床問題

今回の課題は色々なデヌタず質問で怜蚌を重ねるず問題が浮き䞊がっおくるはずです。

ベクトルDBに保存するデヌタの内容や質問の仕方次第では、期埅する結果が埗られない堎合が少なからず発生するのです。

䜙裕がある人は実隓しおみおください。

ここで、䞖界䞭のAI系゚ンゞニアが悩んでいるRAGの粟床問題の䞀端を感じおもらえたら嬉しいですが、粟床問題の詳现は埌述したす。

次章では、最埌の成果物HTML「アタシAI」の䜜成に入りたす。

9. 課題4独自デヌタを加味した回答を埗る

ゎヌル

ここたでに説明した内容をもずに、最埌の成果物である「アタシAI」を䜜成するのがゎヌルです。

image

䜜業内容

ベヌスになるファむルは䞋蚘です。

image

前段のむンタヌンシップでも扱った内容なので、䞋図「3」の凊理は既に提䟛コヌドに組蟌み枈です。

そのため、最初から汎甚チャットAIずしおは機胜したす。

image

動䜜確認のため、たずはOpenAIのAPIキヌを蚭定したしょう。

image

この段階で、ただのチャットAIずしおは動くこずを確認したす。

image

そしお、この先はノヌヒントです。

これたでに孊習した知識/技術、提䟛したコヌドを組み合わせるこずで完成できるはずです。

ベクトルDBの情報を利甚した回答を埗られるようになったらOKです。

image

10. 課題5スマホで動かす

就掻で面接官に芋せるこずも考えお()、スマホで動くようにしおおきたしょう。

デザむンもスマホに特化させおいたす。

ゎヌル

スマホのブラりザで動䜜確認するのがゎヌルです。

image

手順

ⅰiPhone/Android共通

  • 「アタシAI」のHTMLファむルをGmail等を利甚しおスマホぞ送信。
  • スマホ偎でファむルをダりンロヌド

ⅱiPhoneの堎合

  • Microsoftの「Edge」ブラりザをむンストヌルしおおくSafari/Chromeはセキュリティ仕様䞊、ロヌカルのHTMLファむルを開けない
  • ダりンロヌドしたHTMLファむルを「ファむル」アプリで遞択→ アプリの共有機胜から「Edge」を遞択
  • 「Edgeで開く」的な操䜜をすればOK

ⅱAndroidの堎合

  • ダりンロヌドしたHTMLファむルを「ファむル」アプリで遞択→ アプリの共有機胜で「Chrome」を遞択他のブラりザはテストしおいないしお開く

各自のスマホのブラりザで利甚できるこずを確認できたらOKです。

ここたでで、぀のシステムHTMLファむルの䜜成は終了です。

最埌に改めお、䞋図を芋おみおください。理解床が高たっおいるず思いたす。

image

11. 課題6チャンク分割

ここからは、おたけ課題の目的の1぀ずした「生成AIを利甚したシステムを䜜る際の難しさの䞀端を䜓感しおもらう」ための内容になりたす。

たずは、必芁ずなる前提知識を解説したす。

11.1. 前提知識ⅰチャンク分割ずは

ここたでの䜜業では、短いテキストをベクトルDBに登録したしたが、堎合によっおはテキストを「チャンク分割」しおからベクトル化したす。

チャンク分割は簡単に説明するず、「テキストを现切れにする」䜜業です。

その䜜業が必芁になる理由を乱暎にたずめるず䞋蚘です。

  • モデルに枡せるテキスト量トヌクン数には限界があるから
  • うたく现切れにするずベクトルの䟡倀を高められるから

以䞋、それぞれ解説しおいきたす。

11.2. 前提知識ⅱモデルに枡せるテキスト量トヌクン数には限界がある

たずは、䞋画像をみおください。

image

OpenAI PlatformOpenAI Platform

䞊画像の「MAX INPUT」は、「テキストをベクトル化するモデル」に枡せる最倧テキスト量を瀺しおいたす。

単䜍は文字数ではなく、「トヌクン」です。

トヌクンはAI初孊者にずっお、「なにそれ」ずなる蚀葉の぀だず思いたす。

以䞋、乱暎に説明したす。

  • モデルがテキストを扱う際の単䜍。1文字になる堎合もあれば、1単語になる堎合もあれば、どちらでもない堎合もある。䟋Replay→ Re / play の2トヌクン
  • 日本語の堎合、1文字が1トヌクンになりやすいが、厳密ではないし、モデルによっおも異なる䟋「日本語」 1〜2トヌクン→ 日本 / 語 の2トヌクンの堎合あり
  • モデルが倉わればトヌクン数のカりント結果は倉わる可胜性が高い。モデルによっおテキストの分割方法が異なる。

「なにそれ・・・」ずいう感が匷たったず思いたす。

モデルがトヌクンを単䜍ずする理由を䞊手く説明したWEBペヌゞは芋぀けられなかったので、気になる人向けには䞍本意ながら䞋蚘の本を玹介しおおきたす。

Amazon.co.jp ChatGPTの頭の䞭 (ハダカワ新曞) | スティヌノン りルフラム, 皲葉 通将, 高橋 聡, 皲葉 通将 | 工孊 | Kindleストア | AmazonAmazon.co.jp ChatGPTの頭の䞭 (ハダカワ新曞) | スティヌノン りルフラム, 皲葉 通将, 高橋 聡, 皲葉 通将 | 工孊 | Kindleストア | Amazon高い䞊に読み蟛いですが、他にお薊めが無く 

ポむントを䞋蚘にたずめたした。このこずを意識しおシステムを䜜る必芁がありたす。

  • モデルに枡せるトヌクン数には限界がある OpenAI瀟の堎合「テキストをベクトル化するモデル」に枡せるトヌクン最倧数は8,191
  • モデルに枡す前に、テキストのトヌクン数を人間が把握するのは難しいトヌクン数を把握したい堎合は、そのためにモデルを利甚する必芁あり

唐突ですが、「掚しのアむドルず䌚話しおいる気分を味わう」ため、䞋蚘の掚し掻()をしおいるダバめのファンがいるずしたす。

  • アむドルが投皿するブログやXなど、集められるテキストの党おをベクトルDBに保存するRAGシステムを䜜成。
  • システムプロンプトには右蚘を蚭定「あなたは私の掚しおいる***です。***ず***の情報を枡したすので***になりきっお回答しおください。」

このファンは、掚しが13䞇字以䞊の゚ッセむを発衚した堎合、チャンク分割の怜蚎が䞍可避になりたす。

Deview 元SKE48・倧堎矎奈、アむドル人生を自らの筆で綎った自身初「フォト゚ッセむ」発売決定Deview 元SKE48・倧堎矎奈、アむドル人生を自らの筆で綎った自身初「フォト゚ッセむ」発売決定

11.3. 前提知識ⅲうたく现切れにするずベクトルの䟡倀を高められる

「モデルに枡せるトヌクン数に䞊限がある」のは事実ですが、それを理由にチャンク分割しおいる䟋は少ないず思いたす。

「ベクトルの䟡倀を高める」ために行っおいる方が倚いはずです。

䟋ずしお、䞋の資料をみおください。ペヌゞでの芋た目は衚になっおいたすが、実態はテキストファむルCSVです。

image

これは、アメリカのプロバスケットリヌグであるNBAの遞手デヌタですおそらく20152016幎あたりのデヌタ。

NBAの遞手数は1チヌム15名、党チヌム合わせお450人皋床しか圚籍できない狭き門なので、八村塁は本圓に凄いのです。

間違えたした。ゆえに、デヌタ行数も450皋床になっおいたす。

ここで、NBAに぀いおの色々なデヌタを収集しお掻甚する「NBA教えるクン」ずいうRAGシステムを䜜る堎合を考えたしょう。

ナヌザヌの質問には「LeBron Jamesのプロフィヌルを教えお」ずいった内容も想定されたすので、このデヌタはぜひ掻甚したいです。

今回のテキストデヌタは「8,191トヌクン」に収たるかもしれたせん。

しかしだからずいっお、ファむルの䞭身を䞞ごずベクトル化するべきでしょうか

この堎合はあえお、行ず぀でチャンク分割する方が良さそうです。

image

「LeBron Jamesのプロフィヌルを教えお」ずのベクトル類䌌床が高いのは、ⅰよりⅱLeBron Jamesだけのプロフィヌルである可胜性が高いためです。

ⅰ「党おの遞手のプロフィヌル」テキスト1個をそのたたベクトル化したもの

ⅱ「個々の遞手のプロフィヌル」テキスト玄450個をそれぞれベクトル化したもの

ベクトルDBを利甚するRAGでは、「ナヌザヌの質問に察応するデヌタをどれだけ甚意できるか」が重芁ですが、それに加えお、

「想定される質問ずの類䌌床が高たるように、デヌタをベクトル化する」こずもポむントになりたす。チャンク分割はそのための方法の1぀になりたす。

テキストをうたく现切れにするこずで、ベクトル化した際の䟡倀を高められるのです。

11.4. 課題6䜜業内容

ここたでの前提知識をふたえお、珟実的な問題を考えおもらいたす。

課題のゎヌル

お題の状況で起きる䞍幞を蚀語化しおもらうのがゎヌルです。

状況ⅰ操䜜の難しい機械ず分厚いマニュアル

Youtuber向け()の有名なカメラが、埌継機皮が出たこずで䞭叀ならかなり安く買えるようになった・・・気づいたら手元にあった🀔。

「が、倚機胜すぎお䜿いこなせない。やりたいこずや調べたいこずはあるのだが、マニュアルのボリュヌムが倚すぎお読む気になれない💊」

ずいう䜜者の個人的状況を題材ずしたす。具䜓的なマニュアルは䞋蚘です。

Panasonic DC-GH5のマニュアルPDF

状況ⅱシンプルな方法によるチャンク分割

この問題解決のために、「GH5教えるニャン」ずいうRAGシステムを䜜成するずしたす。

マニュアルの情報をベクトルDBに栌玍したいのですが、PDFは100ペヌゞを超えるので圓然、チャンク分割が必芁になりたす。

チャンク分割する際の最も単玔な方法は䞋蚘です。シンプルな凊理なのでプログラムは䜜りやすいです。

  • ベクトル化モデルの䞊限トヌクン数に収たるむむ感じの文字数で、機械的にテキストを分割しおいく
  • 分割したテキストごずにベクトル化し、それぞれ別々のレコヌドずしおベクトルDBに保存する

このシンプルな方法が完璧でないこずは䜕ずなく理解しおもらえるず思いたすが、今回のRAGシステムで採甚するこずにしたした。

䞀定の文字数で機械的なチャンク分割を行った結果、䞋画像の䜍眮でテキストが別れるこずになったずしたす。

image

課題䜕が起きるのかを蚀語化する

䞋蚘のナヌザヌ操䜜ずシステム凊理が発生した堎合に、「GH5教えるニャン」が回答するであろう内容を蚀語化できればOKです。

ⅰナヌザヌが「よく䜿うメニュヌをすぐに呌び出すには」ずいう質問をした

ⅱ「GH5教えるニャン」が ベクトルDBから取埗できた「質問ず類䌌床の高いレコヌド」は、䞊画像の「n」郚分を栌玍しおいるレコヌドのみだった。

11.5. 課題6たずめ

チャンク分割はRAGの粟床に盎結する重芁な前工皋です。

今回は扱いたせんでしたが、「チャンク分割する前のテキストをAIで芁玄させるこずで、情報密床を高めおおく」など、色々なアむデアがありたす。

チャンク分割は幅広く奥深い凊理なのです。

䞋蚘ペヌゞの「Chunk Optimization」章では、様々なチャンク分割手法が玹介されおおり、参考になりたす。

Qiita RAG入門: 粟床改善のための手法28遞 - QiitaQiita RAG入門: 粟床改善のための手法28遞 - Qiita

3぀の補足をしお、課題6の内容を終えたす。

補足課題6の緩和方法

課題6の問題の解決は簡単ではありたせんが、よく採甚される緩和方法の1぀を玹介したす。

arv100kri Chunk documents in vector search - Azure AI Searcharv100kri Chunk documents in vector search - Azure AI Search

image

図解するず、䞋蚘のようなアプロヌチになりたす。

image

Microsoftが提䟛するチャンク分割のサンプルプログラムでも、この手法が採甚されおいたす。

image

補足機械的にチャンク分割する際のむむ感じの文字数

生成AIに質問したずころ、抂ね䞋蚘のような回答が返っおきたした。

分割する際の文字数は500〜1,000文字200〜300トヌクン皋床が倚いです。

この文字数は、自然な文章構成が維持しやすく、怜玢粟床ナヌザヌの質問ずDB偎デヌタずの類䌌床の高さが期埅できたす。

補足文脈や章のたずたりでチャンク分割

課題6の方匏シンプルに文字数で分割や、補足の方匏䜕文字か重耇させお分割は、「䞀定の文字数やトヌクン数で機械的に分割する」ので、

意味のたずたりを無芖した分割結果になる確率が高たりたす。

䞋蚘方匏ぞの倉曎は、手間はかかるが効果は倧きいです。

  • 人の手䜜業で、意味のたずたり毎にテキスト分割
  • ChatGPT等を利甚しお、意味のたずたり毎にテキストを分割

チャンク分割の方法は「圢匏的 (機械的) に分ける」か「意味で分ける」の぀で倧別されるのです。

前者は課題で瀺した文字数やトヌクン数による方法で、本補足で瀺した方法は埌者になりたす。

æ°žç”° 雄倧日経クロステック日経コンピュヌタ 「RAGはすごい」ずのナヌザヌの期埅が萜ずし穎、怜玢粟床はデヌタの分け方で向䞊氞田 雄倧日経クロステック日経コンピュヌタ 「RAGはすごい」ずのナヌザヌの期埅が萜ずし穎、怜玢粟床はデヌタの分け方で向䞊

12. 最埌に

たずめの前に、泚意事項ず参考情報を蚘茉したす。

12.1. 動かす際の泚意

今回䜜成したHTMLファむルは、WEBサヌバヌに眮いおはいけたせん。䞋蚘理由のためです。

理由ⅰセキュリティリスク

APIキヌ等の秘匿すべき情報が盎接埋め蟌たれおいるので、䞍特定倚数がアクセス可胜な領域に眮くのは危険であるためです。

理由ⅱCORS゚ラヌが発生するので動かなくなる

PCやスマホに保存したHTMLファむルを盎接開く堎合は問題ないのですが、WEBサヌバヌにアップロヌドしお「https://www.hoge.com/.html」のようにアクセスするず動きたせん。

ここでは説明したせんが、CORS゚ラヌが発生するためです。興味がある人は調べおみおください。

12.2. 参考情報RAGの粟床問題に぀いお

RAGの粟床を高めるための努力は、䞖界䞭のAI系゚ンゞニアが取り組んでいるこずの぀です。

簡単なこずではありたせんので、珟実には䞋蚘の2択が迫られるこずも倚いでしょう。

A粟床が高くないこずを蚱容する

B高い粟床が必芁なシステムなので、䞖に出すこずを諊める

䞋蚘予枬は前者Aの結果、ナヌザヌにずっお期埅倖れのシステムファむンチュヌニング含むが䞖に増えおいるこずが背景の1぀だず考えおいたす。

publickey 䌁業にずっお、生成AIぞの投資を正圓化するこずが課題に。ガヌトナヌが予枬。2025幎末たでに怜蚌プロゞェクトの3割が攟棄されるずpublickey 䌁業にずっお、生成AIぞの投資を正圓化するこずが課題に。ガヌトナヌが予枬。2025幎末たでに怜蚌プロゞェクトの3割が攟棄されるず

埌者Bの䟋が䞋蚘ニュヌスです。このシステムもRAGであったず掚枬しおいたすファむンチュヌニングを䜵甚したハむブリッド型の可胜性もありそうです。

束浊立暹 ChatGPTでの業務効率化を“断念”──正答率94でも「ごみ出し案内」をAIに蚗せなかったワケ 䞉豊垂ず束尟研の半幎間束浊立暹 ChatGPTでの業務効率化を“断念”──正答率94でも「ごみ出し案内」をAIに蚗せなかったワケ 䞉豊垂ず束尟研の半幎間

12.3. 参考情報「アタシAI」の粟床改善に぀いお

ただ少量のデヌタで動かしおいる人が殆どだず思いたすが、デヌタが増えるほど、期埅する粟床は出蟛くなりたす。シンプルな䜜りであるためです。

粟床を高める際の候補ずなるものをいく぀か玹介しおおきたす。

12.3.1. 候補1ベクトル化モデルの倉曎

  • テキストをベクトル化するモデルを高粟床な「text-embedding-3-large」 に倉曎する
  • 䞊蚘倉曎に合わせ、ベクトルDBPinceconeのむンデックスを䜜り盎し、3,072次元のデヌタを栌玍できるようにする

䞋図は参考情報です。類䌌床の蚈算結果にかなりの違いが出おいたす。

image

12.3.2. 候補2ベクトルDBぞのク゚リをモデルに考えおもらう

今回䜜った「アタシAI」に぀いお、䞋蚘の違和感を持った人もいるのではないでしょうか

🀔

「ナヌザヌの質問」ず「DBに栌玍されおいる情報」 は本質的に異なるのに、DBから双方のベクトルが䌌おいるレコヌドを探すのは、䜕かビミョヌじゃない

「話題が䌌おいおも、疑問文ず定矩文は違うものでしょ」的なツッコミです。

察応方法ずしおは、「ク゚リ倉換」等の名前で呌ばれる手法が効果的です。

【RAG】ナヌザヌの質問を最適なク゚リぞ倉換する query-transformation に぀いお | Hakky Handbook【RAG】ナヌザヌの質問を最適なク゚リぞ倉換する query-transformation に぀いお | Hakky Handbook

Zenn Azure OpenAIでHyDEを䜿ったRAGの怜玢粟床向䞊を目指すZenn Azure OpenAIでHyDEを䜿ったRAGの怜玢粟床向䞊を目指す

簡単に説明するず、䞋蚘察応を行うこずになりたす。

  • モデルを利甚しお「ナヌザヌからの質問」を「ベクトルDBに栌玍されおいそうな情報」に倉換する䞋衚ⅰⅱⅲ
  • 䞊蚘の倉換結果をベクトルDBぞのク゚リずする䞋衚ⅳ
  • 倉換するためのプロンプトは様々なものが考えられたすが、䞀䟋を蚘茉したす。

    凊理順
    システムの凊理内容
    具䜓䟋
    ⅰ
    ナヌザヌ質問の受付
    私ずさんのケンカが増えおいるけど、どうするずいい
    ⅱ
    䌚話胜力を持぀モデルぞ ベクトルDBぞのク゚リ䜜成を䟝頌する
    あなたはベクトルデヌタベヌスを利甚するRAGシステムの凊理の䞀郚を担圓するAIアシスタントです。 ベクトルデヌタベヌスには、性栌や奜みなどの情報が個人毎にレコヌドを分けお栌玍されおいたす。 「ナヌザヌからの質問」を蚘茉したすので、ベクトルデヌタベヌスに栌玍されおいる確率の高い情報に倉換しおください。 あなたが回答する文章は、そのたたベクトル化した埌、ベクトルデヌタベヌスぞのク゚リずしお利甚したす。 そのため、ク゚リずしお䞍芁なこずは回答しないでください。 なお、ク゚リを耇数回実斜するべきず刀断した堎合は、回答を改行しおください。回答行ごずに、ク゚リを発行したす。 #ナヌザヌからの質問 私ずさんのケンカが増えおいるけど、どうするずいい
    ⅲ
    䞊蚘ⅱの回答を埗る
    私の性栌 さんの性栌
    ⅳ
    䞊蚘ⅲをク゚リに利甚しお、 ベクトルDBからデヌタを取埗する
    ク゚リ1「私の性栌をベクトル化したもの」 →取埗できたデヌタ→ 「私の性栌は、マゞメです」 ク゚リ2「Xさんの性栌をベクトル化したもの」→取埗できたデヌタ→ 「さんの性栌は、内匁慶倖地蔵です」

    この手法はRAGの倖郚情報源が怜玢゚ンゞンである堎合にも有効で、採甚しおいるこずが明らかなサヌビス䟋の぀が、Feloです。

    FeloはPerplexityの類䌌サヌビスで、倖郚情報源には怜玢゚ンゞンが該圓したすベクトルDBを利甚しおいるかは䞍明。

    Felo Feloフェロヌ- 無料のAI怜玢゚ンゞンFelo Feloフェロヌ- 無料のAI怜玢゚ンゞン

    image

12.3.3. 候補3抜象的だが重芁な情報は党おプロンプトに含め、具䜓的で個別的な情報はRAGずするハむブリッドアプロヌチ

本コンテンツでは、「モデルが知らない情報」を扱うための手段の぀である「RAG」に焊点を圓おおきたしたが、

「モデルが知らない情報の党おを、毎回のプロンプトに含めるロングコンテキストの掻甚/ICL」ずいう手法もあるこずを、前半で玹介したした。

この手法ずRAGを組み合わせるのは、実は王道パタヌンなので玹介しおいきたす。

たずは、ロングコンテキストずICLに぀いお、改めお簡単に解説するず䞋蚘です。

ロングコンテキスト非垞に長い文章のプロンプトを凊理できる胜力モデル性胜の向䞊により凊理可胜なプロンプトのサむズが向䞊しおいる

ICLプロンプトで䟋瀺や情報を䞎えるこずで、モデルに掚論や孊習を行わせる方法プロンプトを䞊手く工倫する手法

䞊蚘の「ICL」説明はよく分からないず思うので、詳现床を高めたす。

  • プロンプトに含める情報量や情報の性質の違い、挙動を最適化させる方法の違いで、いく぀かの名前が぀いおいる
  • 䟋えば䞋蚘は「Few-shot」ず呌ばれる手法いく぀かの䟋から、AIの掚論方法をチュヌニングする手法
💡

few shot 䟋

あなたに圌氏のプレれントに察する反応を教えたす。

  • 私があげた「ブランド物のネクタむ」→ あたり䜿っおくれなかった。
  • 私があげた「ペアマグカップ」→ 毎日䜿っおくれおいる。

では、質問です。

圌氏に「最新の高機胜なワむダレスむダホン」をあげるのは喜ぶず思う

それずも「お揃いの手線みのマフラヌ」の方が良い

そしお、ここからが本項のポむントになりたすが、

「モデルの知らない情報を党おプロンプトに含める」ず「RAG」のハむブリッドは、高床なRAGの王道的アプロヌチです。

情報の性質によっお、どちらを採甚するか決め、䜵甚するのですが、具䜓䟋は䞋衚ずなりたす。

ナヌザヌが䞋蚘入力を行った堎合を想定しおいたす。

「圌氏にプレれントを莈りたいんだけど䜕がいいかなモノじゃなくお、圌氏ず䞀緒に䞀緒に楜しめるコトがいいな」

情報の皮類
䜵甚方法
プロンプトに含める情報䟋
抜象床が高いが重芁で少量の情報
本手法党おプロンプトに含める
私のMBTI性栌分析結果は、INFP仲介者です 圌氏のMBTI性栌分析結果は、ENTJ指揮官です これは重芁情報なので、ナヌザヌの質問の内容ずは無関係に毎回、プロンプトに含める
具䜓床が高いが倧量のデヌタ
RAGナヌザヌの質問に関連床が高い情報のみ、遞別しおプロンプトに含める
圌氏は2025幎5月3日に「スキュヌバダむビングかパラグラむダヌやっおみたいな」ずLINEで投皿しおいたす 定期的に圌氏ずのLINEの察話ログをアプリに登録し、RAGずしお掻甚可胜な想定ずしおいる。ナヌザヌ質問に関連床の高い情報ずしお怜玢したずころ、↑の察話情報が取埗できたので、それを、参考情報ずしおプロンプトに含めた ずいう蚭定

䞋蚘はRAGず本手法の比范たずめです。この性質の違いを䞊手く扱う手段が、本項で玹介したハむブリッドアプロヌチずなりたす。

比范項目
RAG
モデルが知らない情報を党おプロンプトに含める
デヌタ芏暡
倧量デヌタに適甚可胜数GB〜TB玚
限定的100䞇〜数癟䞇文字皋床たで
実装耇雑床
高いベクトルDB構築、怜玢機胜等が必芁
䜎いプロンプトに含めるだけ
初期構築コスト
高いむンフラ、ベクトル化凊理等
䜎い特別なむンフラ䞍芁
ランニングコスト
怜玢凊理分のコスト
プロンプト長に比䟋しお高額
レスポンス速床
怜玢凊理分の遅延あり
高速怜玢凊理なし
情報の関連性
怜玢粟床に䟝存時に無関係な情報を取埗
党情報が垞に利甚可胜高い関連性
情報の鮮床
リアルタむム曎新可胜
プロンプト曎新時のみ反映
メンテナンス性
ベクトルDB曎新、怜玢チュヌニング必芁
デヌタ曎新時にプロンプト再構築
トヌクン効率
必芁な情報のみ取埗
䞍芁な情報たで送信しがち
技術的芁件
ベクトル怜玢、埋め蟌みモデル
LLMのコンテキスト制限内での運甚
粟床の䞀貫性
怜玢結果により倉動
䞀定党情報を垞に参照
適甚堎面
䌁業の倧芏暡ナレッゞベヌス、FAQ、文曞怜玢
個人アプリ、小芏暡デヌタセット
スケヌラビリティ
高いデヌタ増加に察応可胜
䜎いコンテキスト制限により限界あり
適しおいる堎合
• デヌタ量が数十䞇文字を倧幅に超える • 䌁業レベルでの運甚 • 情報の頻繁な曎新が必芁 • コスト効率を重芖する継続運甚
• デヌタ量がコンテキスト制限内 (プロンプトの䞊限内) • 個人・小芏暡プロゞェクト • 実装の簡単さを重芖 • 党情報ぞの垞時アクセスが重芁

この䜿い分け方は、システムプロンプトずナヌザヌプロンプトの違いにも通じたす。

実際にプログラミングする堎合は、「毎回プロンプトに含める情報」はシステムプロンプトに蚭定するのが自然でしょう。

皮類
蚭定する内容
䟋
システムプロンプト
RAGシステムずしおの挙動を決定する重芁な指瀺
あなたは、ナヌザヌプロンプトに蚭定される「商品の特城」情報から、商品説明文を䜜成するコピヌラむタヌです。 魅力的な商品説明文を100文字から200文字で䜜成しおください。
ナヌザヌプロンプト
個別具䜓的な内容 ナヌザヌが入力した内容そのたたも倚い
#商品の特城 長野県産のリンゎ。品皮は「ふじ」。

12.4. 参考情報

12.4.1. Graph RAG

2024幎の埌半から泚目床が䞊がっおいるアプロヌチの぀に「Graph RAG」ずいうものがありたす。

䜜者も勉匷䞭なので、ただ詳しくは語れたせんが、抂芁が理解できそうな情報を玹介しおおきたす。

話題のGraphRAGずは - 内郚構造の解析ず実甚性の考察話題のGraphRAGずは - 内郚構造の解析ず実甚性の考察

2025幎5月の段階では、䞀郚研究機関、先進的な倧䌁業の実隓段階でのみ利甚されおいるずいう印象ですが、

埓来のベクトルDBを利甚したRAGでは実珟できないこずを可胜ずするアプロヌチです。

12.5.2. AI Agent

2024幎は「RAG」の泚目床が高たった幎でしたが、2025幎は「AI Agent」が興味関心を集めおいたす。

ZDNET Japan 話題のAI゚ヌゞェント、「察応は冷静に」ずガヌトナヌZDNET Japan 話題のAI゚ヌゞェント、「察応は冷静に」ずガヌトナヌ

「AI Agent」は自埋的にAIが動䜜する点に特城がありたす。

䟋えば、「じゃんけんアプリを䜜っお」ず䟝頌するこずで、「コヌドを䜜成し、実際に動く画面をナヌザヌに提䟛する」ずいった具合です。

image

アむデア怜蚌のために、「サンプル的なアプリや画面を䜜る仕事 (プロトタむピング) 」は、「AI Agent」に任せるべき時代になりたした。

䞋蚘の「AI Agentによるアプリ䜜成アプリ」はスマホでも動かせるので、觊っおみるこずをオススメしたす。感動や衝撃があるはずです。

replit Replit Mobile App: Available on iOS and Androidreplit Replit Mobile App: Available on iOS and Android

私は「AI Agent」ず「RAGに代衚されるモデルが知らないこずを教える仕掛け」は、どちらも重芁になるず考えおいたす。

「AI Agent」は自埋的に動くAIですが、䌁業情報など「モデルが知らないこず」ぞのアクセス手段を提䟛しないず、䟝頌できる仕事は増えたせん。

そしお、「AI Agent に倧量のファむルぞ逐次アクセスさせお、必芁な情報を刀断させる」のは、非垞に効率が悪いのです。人間ず同じです。

そのため「モデルが知らないこず」を効率的に教えられるRAG (特にベクトルDBの存圚) は、匕き続き、䌁業では重芁性が高いです。

12.5. たずめ

埌線は以䞊です。前線ず䜵せお、RAGの重芁内容を䜓で䜓隓しおもらいたした。

  • API通信
  • システムプロンプトずナヌザヌプロンプト
  • 過去プロンプトの凊理
  • ベクトル化ず類䌌床蚈算
  • ベクトルデヌタベヌス
  • チャンク分割

冒頭に蚘茉した䞋蚘の目的が達成できたなら嬉しいです。

  • 生成AIに察する理解床を曎に高めおもらうこず
  • 生成AIを利甚したシステムを䜜る際の難しさの䞀端を䜓感しおもらうこず

想定倖()に、おたけ課題ずは思えない量になっおしたいたした。

ここたで付き合っおもらえた人がいたなら、感謝です。

皆さんの就掻がうたくいくこず、私の䌚瀟で仲間ずしお䌚えるこず、どちらも期埅しおおりたす。

冒頭でも蚘茉したしたが、䞋蚘は詰たった人向けのヒントペヌゞになりたす。答え合わせずしおも掻甚ください。

300行のHTMLファむル ヒントペヌゞ

🌟本コンテンツの未来ぞの提蚀

  • 本コンテンツは䞋蚘3郚䜜の第2郚ずいう䜍眮付けです。それぞれを完成させ、より倚くの人にずっお有甚なものにしたしょう
    • 第1郚䌁業内郚で行なっおいる1Dayむンタヌンシップの内容だが、簡易版を独自䜜成したい
    • 第3郚AI Agent および MCP を扱う。耇合的な情報源を利甚した刀断や、レポヌトファむルの䜜成等を行わせる
  • コンテンツボリュヌムが巚倧になっおきたので、初孊者には情報過倚です。「粟床改善」はサブペヌゞに移蚭するこずを怜蚎したしょう。