<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>RAG on Ingenboy.inc</title>
    <link>https://blog.ingenboy.com/tags/rag/</link>
    <description>Recent content in RAG on Ingenboy.inc</description>
    <image>
      <title>Ingenboy.inc</title>
      <url>https://blog.ingenboy.com/%3Clink%20or%20path%20of%20image%20for%20opengraph,%20twitter-cards%3E</url>
      <link>https://blog.ingenboy.com/%3Clink%20or%20path%20of%20image%20for%20opengraph,%20twitter-cards%3E</link>
    </image>
    <generator>Hugo -- 0.152.2</generator>
    <language>en</language>
    <lastBuildDate>Fri, 06 Jun 2025 17:50:17 +0900</lastBuildDate>
    <atom:link href="https://blog.ingenboy.com/tags/rag/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Create_RAG</title>
      <link>https://blog.ingenboy.com/post/create_rag/</link>
      <pubDate>Fri, 06 Jun 2025 17:50:17 +0900</pubDate>
      <guid>https://blog.ingenboy.com/post/create_rag/</guid>
      <description>&lt;h1 id=&#34;背景&#34;&gt;背景&lt;/h1&gt;
&lt;p&gt;gmailの返答を自動化するプロジェクトを推進しています。
そこで、RAGですね。もうだいぶ時間が経っていますが、しっかりやっていきたいと思う。
RAG = 「Retrieval-Augmented Generation」
これを理解できればもう仕組みを理解したも同然です。
が一応説明しておきます。&lt;/p&gt;
&lt;h1 id=&#34;ragの仕組み&#34;&gt;RAGの仕組み&lt;/h1&gt;
&lt;p&gt;めっちゃ簡単にいうと、&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;ベクトルデータベースに保存されたナレッジから&lt;/li&gt;
&lt;li&gt;問い合わせと類似するナレッジを検索し引っ張り出し&lt;/li&gt;
&lt;li&gt;それを元にGEN AIに回答を作らせる&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;という流れになります。&lt;/p&gt;
&lt;p&gt;1でベクトルデータベースにナレッジを保存する時には、元の自然言語をベクトル表現に変換した物を格納する必要があります。
このベクトル変換器のことを「Embedding model」と言います。&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;x: 自然言語
f: Embedding model
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;とすると&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;y = f(x)
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;で得られたy（とそれに対応するx）をベクトルDBに格納しておくわけですね。&lt;/p&gt;
&lt;p&gt;x_q: 問い合わせが来た時&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;y_q = f(x_q)
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;から得られるy_qと類似しているy_1, y_2, y_3, ,,, y_nを検索し、
それに対応するx_1, x_2, x_3, ,,, x_n
を出力し、&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;ans = LLM(x_1, x_2, x_3, ,,, x_n)
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;とう感じで回答を作らせるという流れです。&lt;/p&gt;
&lt;h1 id=&#34;embedding-modelsの選定&#34;&gt;Embedding modelsの選定&lt;/h1&gt;
&lt;p&gt;&lt;a href=&#34;https://qiita.com/ke-suke-Soft/items/f904a442d8ce0e6b7522&#34;&gt;こちらの記事&lt;/a&gt;に書いてある通り、Embedding modelの選定がRAG全体の回答生成性能に大きく影響する。
まあ、chatGPTに聞いた結果これが一番いいのかな。
&lt;a href=&#34;https://huggingface.co/BAAI/bge-base-en&#34;&gt;BAAI/bge-base-en&lt;/a&gt;&lt;/p&gt;
&lt;h1 id=&#34;今回ragを構築するにあたり使うソフト&#34;&gt;今回RAGを構築するにあたり使うソフト&lt;/h1&gt;
&lt;p&gt;vector DB: &lt;a href=&#34;https://github.com/qdrant/qdrant&#34;&gt;qdrant&lt;/a&gt;
embedding model: &lt;a href=&#34;https://huggingface.co/BAAI/bge-base-en&#34;&gt;BAAI/bge-base-en&lt;/a&gt;
LLM: &lt;a href=&#34;https://ollama.com/library/phi4&#34;&gt;phi4 14b&lt;/a&gt; on ollama (@ rtx 3060 12g)&lt;/p&gt;
&lt;p&gt;Langchainなどの統合的なライブラリは使わない。なぜなら自由度が低いから。
vector DBでの検索も普通にREST APIでできるので問題なさそう。&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
