{"id":6291,"date":"2026-01-17T12:36:31","date_gmt":"2026-01-17T03:36:31","guid":{"rendered":"https:\/\/secondlife.lol\/?p=6291"},"modified":"2026-01-17T12:36:33","modified_gmt":"2026-01-17T03:36:33","slug":"%ed%95%98%ec%9d%b4%eb%b8%8c%eb%a6%ac%eb%93%9c-rag-bm25-vector-search","status":"publish","type":"post","link":"https:\/\/secondlife.lol\/ja\/%ed%95%98%ec%9d%b4%eb%b8%8c%eb%a6%ac%eb%93%9c-rag-bm25-vector-search\/","title":{"rendered":"\ud558\uc774\ube0c\ub9ac\ub4dc RAG: BM25\uc640 \ubca1\ud130 \uac80\uc0c9\uc744 \uacb0\ud569\ud55c \uace0\uae09 \uae30\uc220"},"content":{"rendered":"<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img decoding=\"async\" width=\"600\" height=\"341\" src=\"https:\/\/secondlife.lol\/wp-content\/uploads\/2026\/01\/image-61-600x341.png\" alt=\"\ud558\uc774\ube0c\ub9ac\ub4dc RAG \uc378\ub124\uc77c \uc774\ubbf8\uc9c0\" class=\"wp-image-6293\" srcset=\"https:\/\/secondlife.lol\/wp-content\/uploads\/2026\/01\/image-61-600x341.png 600w, https:\/\/secondlife.lol\/wp-content\/uploads\/2026\/01\/image-61-300x171.png 300w, https:\/\/secondlife.lol\/wp-content\/uploads\/2026\/01\/image-61-768x437.png 768w, https:\/\/secondlife.lol\/wp-content\/uploads\/2026\/01\/image-61-18x10.png 18w, https:\/\/secondlife.lol\/wp-content\/uploads\/2026\/01\/image-61.png 1049w\" sizes=\"(max-width: 600px) 100vw, 600px\" \/><\/figure>\n<\/div>\n\n\n<p>\uc774\uc804\uc5d0 \uc0b4\ud3b4\ubcf4\uc558\ub358 <a href=\"https:\/\/secondlife.lol\/macos%ec%97%90%ec%84%9c-ollamasqlite-%ea%b8%b0%eb%b0%98-%eb%a1%9c%ec%bb%ac-rag-%ea%b5%ac%ec%b6%95-%eb%b0%a9%eb%b2%95\/\">\ub85c\uceec RAG \uad6c\ucd95 \ubc29\ubc95<\/a>\uc5d0 \uc774\uc5b4\uc11c \uc774\ubc88\uc5d0\ub294 \ud558\uc774\ube0c\ub9ac\ub4dc <a href=\"https:\/\/ailib.secondlife.lol\/rag-ai-augmented-generation\/\">RAG<\/a>\uc5d0 \ub300\ud574\uc11c \uc0b4\ud3b4\ubcf4\uaca0\uc2b5\ub2c8\ub2e4. \ud558\uc774\ube0c\ub9ac\ub4dc RAG\ub294 \uc804\ud1b5\uc801\uc778 BM25 \ud0a4\uc6cc\ub4dc \uac80\uc0c9\uacfc \uc2dc\ub9e8\ud2f1 \ubca1\ud130 \uac80\uc0c9\uc758 \uc7a5\uc810\uc744 \uacb0\ud569\ud55c \ubc29\ubc95\uc73c\ub85c, \ub450 \ubc29\uc2dd\uc758 \uac15\uc810\uc744 \ubaa8\ub450 \uc0b4\ub824 \ubb38\uc11c \uac80\uc0c9\uc758\u00a0<strong>\uc815\ud655\ub3c4\uc640 \uc7ac\ud604\uc728<\/strong>\uc744 \ub3d9\uc2dc\uc5d0 \uac1c\uc120\ud569\ub2c8\ub2e4.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\ud558\uc774\ube0c\ub9ac\ub4dc RAG\ub780?<\/h2>\n\n\n\n<p>\ud558\uc774\ube0c\ub9ac\ub4dc RAG(Retrieval-Augmented Generation)\ub294 LLM(\ub300\ud615\uc5b8\uc5b4\ubaa8\ub378) \uc55e\ub2e8\uc5d0\u00a0<strong>\uc815\ubcf4 \uac80\uc0c9(Retrieval)<\/strong>\u00a0\uacfc\uc815\uc744 \ucd94\uac00\ud558\uc5ec \uc2e0\ub8b0\ud560 \ub9cc\ud55c \ucd9c\ucc98 \uae30\ubc18 \ub2f5\ubcc0\uc744 \uc0dd\uc131\ud558\ub294 \uae30\uc220\uc785\ub2c8\ub2e4. \uc5ec\uae30\uc11c \uae30\uc874\uc758 RAG\ub294 \ubcf4\ud1b5\u00a0<strong>\ud0a4\uc6cc\ub4dc \uae30\ubc18 \uac80\uc0c9(BM25)<\/strong>\u00a0\ub610\ub294\u00a0<strong>\ubca1\ud130 \uc784\ubca0\ub529 \uac80\uc0c9<\/strong>\u00a0\uc911 \ud558\ub098\ub97c \uc0ac\uc6a9\ud574 \uad00\ub828 \ubb38\uc11c\ub97c \ucc3e\uc2b5\ub2c8\ub2e4. <\/p>\n\n\n\n<p><strong>BM25<\/strong>\ub294 \uc0ac\uc6a9\uc790\uac00 \uc785\ub825\ud55c \ud0a4\uc6cc\ub4dc\uc758 \ubb38\uc11c \ub0b4 \ube48\ub3c4\ub97c \ubc14\ud0d5\uc73c\ub85c \uc815\ud655\ud55c \ub9e4\uce6d\uc744 \uc218\ud589\ud558\uc9c0\ub9cc \ubb38\ub9e5\uae4c\uc9c0 \uc774\ud574\ud558\uc9c0\ub294 \ubabb\ud569\ub2c8\ub2e4. \ubc18\uba74\u00a0<strong>\ubca1\ud130 \uac80\uc0c9<\/strong>\uc740 \ubb38\uc7a5 \uc804\uccb4\ub97c \uc784\ubca0\ub529\ud55c \ub4a4 \ucf54\uc0ac\uc778 \uc720\uc0ac\ub3c4\ub85c \uc758\ubbf8\uc801 \uc720\uc0ac\uc131\uc744 \uacc4\uc0b0\ud558\uc5ec, \u201c\uc0ac\uacfc\u201d\ub97c \u201c\uacfc\uc77c\u201d\uacfc \uac19\uc740 \uac1c\ub150\uc73c\ub85c \uc5f0\uad00 \uc9c0\uc5b4 \ucc3e\uc544\ub0c5\ub2c8\ub2e4. <\/p>\n\n\n\n<p>\ud558\uc774\ube0c\ub9ac\ub4dc \uac80\uc0c9\uc740 \uc774 \ub458\uc744 \ud568\uaed8 \uc0ac\uc6a9\ud558\uc5ec, \ud0a4\uc6cc\ub4dc\uc640 \uc758\ubbf8 \uc815\ubcf4\ub97c \ubaa8\ub450 \ud65c\uc6a9\ud569\ub2c8\ub2e4. \uc989, BM25\ub294 \ud575\uc2ec \ud0a4\uc6cc\ub4dc \uc77c\uce58\ub97c \uc7a1\uc544\ub0b4\uace0, \ubca1\ud130 \uac80\uc0c9\uc740 \ubb38\uc7a5\/\ubb38\ub9e5\uc758 \uc720\uc0ac\uc131\uc744 \uc7a1\uc544\ub0b4\ubbc0\ub85c,\u00a0<strong>\ub450 \ubc29\ubc95\uc758 \ub2e8\uc810\uc744 \ubcf4\uc644\ud558\uba70 \ub354 \uc815\ud655\ud558\uace0 \ud48d\ubd80\ud55c \uac80\uc0c9 \uacb0\uacfc\ub97c \uc81c\uacf5\ud569\ub2c8\ub2e4<\/strong>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\uc65c \uc9c0\uae08 \uc774\uac8c \ub728\ub294\uac00<\/h2>\n\n\n\n<p>\ucd5c\uadfc RAG\uac00 \ucc57\ubd07\u00b7AI \ube44\uc11c\uc758 \ud575\uc2ec\uc73c\ub85c \ubd80\uc0c1\ud558\uba70,\u00a0<strong>\uac80\uc0c9 \uc815\ud655\ub3c4\uc640 \uc2e0\ub8b0\uc131<\/strong>\uc774 \ub354\uc6b1 \uc911\uc694\ud574\uc84c\uc2b5\ub2c8\ub2e4. LLM\uc740 \ub9c9\uac15\ud558\uc9c0\ub9cc \ud6c8\ub828 \ub370\uc774\ud130 \uc678\uc758 \ucd5c\uc2e0 \uc9c0\uc2dd\uc740 \uc54c\uc9c0 \ubabb\ud558\uace0, \ub54c\ub85c\ub294 \uadfc\uac70 \uc5c6\ub294 \ub2f5\ubcc0(\ud658\uac01)\uc744 \ub0b4\ub193\uae30\ub3c4 \ud569\ub2c8\ub2e4. \ub530\ub77c\uc11c\u00a0<strong>RAG<\/strong>\ub97c \ud1b5\ud574 \uc678\ubd80 \uc9c0\uc2dd \uae30\ubc18\uc5d0\uc11c \uc815\ubcf4\ub97c \ucc3e\uc544 LLM\uc5d0 \uacf5\uae09\ud558\uba74 \ub2f5\ubcc0\uc758 \uc2e0\ub8b0\ub3c4\ub97c \ub192\uc77c \uc218 \uc788\uc2b5\ub2c8\ub2e4. <\/p>\n\n\n\n<p>\uadf8\ub7f0\ub370 \ub2e8\uc21c\ud788 \ubca1\ud130 \uac80\uc0c9\ub9cc\uc73c\ub85c\ub294 \uad6c\uccb4\uc801\uc778 \ud0a4\uc6cc\ub4dc\ub97c \ub193\uce58\uac70\ub098, \ub178\uc774\uc988\uc131 \uacb0\uacfc\uac00 \uc11e\uc77c \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc774\uc5d0 \ud0a4\uc6cc\ub4dc \uac80\uc0c9\uacfc \ubca1\ud130 \uac80\uc0c9\uc744 \ud568\uaed8 \uc4f0\uba74 \uad00\ub828 \uc815\ubcf4\ub97c \ub354 \ud3ed\ub113\uac8c \ucc3e\uc744 \uc218 \uc788\uc5b4 \uc720\uc6a9\ud569\ub2c8\ub2e4. \ucd5c\uadfc\uc5d0\ub294\u00a0<a href=\"https:\/\/www.sqlite.ai\/sqlite-vector\" target=\"_blank\" rel=\"noopener\"><strong>SQLite-vec<\/strong>\u00a0<\/a>\uac19\uc740 \uacbd\ub7c9 \ub85c\uceec \ubca1\ud130 DB\uc640\u00a0<strong><a href=\"https:\/\/secondlife.lol\/open-webui-ollama-setup-macbook-part2\/\" data-type=\"post\" data-id=\"5141\">Ollama<\/a><\/strong>\u00a0\uac19\uc740 \ub85c\uceec LLM \uc2e4\ud589\uae30\uac00 \ub098\uc624\uba74\uc11c, \ud074\ub77c\uc6b0\ub4dc \uc5c6\uc774 \ub370\uc2a4\ud06c\ud0d1 \uc218\uc900\uc5d0\uc11c\ub3c4 \uc644\uc804\ud788 \ub85c\uceec \ud658\uacbd\uc73c\ub85c \uc774 \uae30\uc220\uc744 \uad6c\ud604\ud560 \uc218 \uc788\uac8c \ub418\uc5b4 \uc8fc\ubaa9\ubc1b\uace0 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\uc804\uccb4 \uad6c\uc870(\uadf8\ub9bc\uc73c\ub85c \uc774\ud574)<\/h2>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter\"><img decoding=\"async\" src=\"https:\/\/ailib.secondlife.lol\/wp-content\/uploads\/2026\/01\/image-23-600x333.png\" alt=\"\uc804\uccb4 \uad6c\uc870\" class=\"wp-image-3180\"\/><\/figure>\n<\/div>\n\n\n<p>\ud558\uc774\ube0c\ub9ac\ub4dc RAG\uc758 \uc804\uccb4 \ud750\ub984\uc740 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4. \uc0ac\uc6a9\uc790\uac00 \uc9c8\ubb38\uc744 \ud558\uba74, \uc774 \uc9c8\uc758\ub294 \ub450 \uacbd\ub85c\ub85c \ubd84\uae30\ub429\ub2c8\ub2e4. \ud558\ub098\ub294&nbsp;<strong>\ud0a4\uc6cc\ub4dc \uac80\uc0c9(FTS5\/BM25)<\/strong>&nbsp;\uacbd\ub85c\ub85c, \ub2e4\ub978 \ud558\ub098\ub294&nbsp;<strong>\ubca1\ud130 \uac80\uc0c9<\/strong>&nbsp;\uacbd\ub85c\ub85c \uc815\ubcf4 \ud0d0\uc0c9\uc744 \uc218\ud589\ud569\ub2c8\ub2e4. \ub450 \uacb0\uacfc\ub97c \ubc1b\uc544&nbsp;<strong>\uc885\ud569 \uc21c\uc704\ud654(\uc608: RRF)<\/strong>&nbsp;\uacfc\uc815\uc744 \uac70\uccd0 \uc911\uc694\ud55c \ubb38\uc11c\ub4e4\uc744 \uc120\ubcc4\ud55c \ub4a4, \ud574\ub2f9 \ubb38\uc11c\ub97c LLM\uc758 \uc785\ub825(prompt)\ub85c \uc81c\uacf5\ud558\uc5ec \ub2f5\ubcc0\uc744 \uc0dd\uc131\ud569\ub2c8\ub2e4.<\/p>\n\n\n\n<p>\uc694\uc57d\ud558\uc790\uba74, \uc0ac\uc6a9\uc790 \uc9c8\uc758(query)\ub97c BM25 \uae30\ubc18 \ud0a4\uc6cc\ub4dc \uac80\uc0c9\uacfc \uc784\ubca0\ub529 \uae30\ubc18 \ubca1\ud130 \uac80\uc0c9\uc744 \ud1b5\ud574 \uac01\uac01 \uac80\uc0c9\ud55c \ud6c4, \uc774\ub97c \uacb0\ud569\ud558\uc5ec LLM\uc5d0 \ucee8\ud14d\uc2a4\ud2b8\ub85c \uc81c\uacf5\ud569\ub2c8\ub2e4.<\/p>\n\n\n\n<p>\uc774 \uacfc\uc815\uc5d0\uc11c&nbsp;<strong>BM25 \uac80\uc0c9<\/strong>\uc740 \uac04\ub2e8\ud55c \ub2e8\uc5b4 \ub9e4\uce6d\uc744 \ud1b5\ud574 \uba85\uc2dc\uc801\uc778 \ud0a4\uc6cc\ub4dc\uac00 \ud3ec\ud568\ub41c \ubb38\uc11c\ub97c \ub192\uc740 \uc810\uc218\ub85c \ucc3e\uc544\ub0b4\uba70,&nbsp;<strong>\ubca1\ud130 \uac80\uc0c9<\/strong>\uc740 \uc784\ubca0\ub529\uc73c\ub85c \uacc4\uc0b0\ub41c \ubb38\uc11c \uac04 \uc758\ubbf8\uc801 \uac70\ub9ac\ub97c \ud65c\uc6a9\ud574 \ubb38\uc7a5\/\uad6c\ubb38\uc758 \ub258\uc559\uc2a4\uae4c\uc9c0 \ubc18\uc601\ud569\ub2c8\ub2e4. \uadf8 \uacb0\uacfc \ub450 \ubc29\ubc95 \ubaa8\ub450\uc5d0\uc11c \uc911\uc694\ub3c4\uac00 \ub192\uc740 \ubb38\uc11c\ub4e4\uc774 LLM\uc5d0 \uc804\ub2ec\ub418\uc5b4, \ub354 \uc815\ud655\ud558\uace0 \ub2e4\uac01\uc801\uc778 \ub2f5\ubcc0\uc774 \uac00\ub2a5\ud574\uc9d1\ub2c8\ub2e4.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\ud558\uc774\ube0c\ub9ac\ub4dc RAG \uc124\uce58\/\uc900\ube44\ubb3c<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\uc6b4\uc601\uccb4\uc81c:<\/strong>\u00a0macOS (SQLite 3, FTS5\ub294 macOS \uae30\ubcf8 \ud0d1\uc7ac)<\/li>\n\n\n\n<li><strong>Python \ud658\uacbd:<\/strong>\u00a0<a href=\"https:\/\/www.python.org\" target=\"_blank\" rel=\"noopener\">Python<\/a> 3 \uc774\uc0c1 (pip)<\/li>\n\n\n\n<li><strong>SQLite-vec \ud655\uc7a5:<\/strong>\u00a0<code>pip install sqlite-vec<\/code>\u00a0\uba85\ub839\uc73c\ub85c \uc124\uce58 (SQLite\uc5d0 \ubca1\ud130 \uac80\uc0c9 \uae30\ub2a5 \ucd94\uac00). \ub610\ub294\u00a0sqlite-vec GitHub\uc5d0\uc11c \ud655\uc7a5 \ud30c\uc77c \ub2e4\uc6b4\ub85c\ub4dc<\/li>\n\n\n\n<li><strong>Ollama:<\/strong>\u00a0\ub85c\uceec LLM \uc2e4\ud589\uae30(\uc608: Ollama \uc124\uce58 \ubc0f \ub85c\uceec \ubaa8\ub378 \uc138\ud305)<\/li>\n\n\n\n<li><strong>\uae30\ud0c0 \ub77c\uc774\ube0c\ub7ec\ub9ac:<\/strong>\u00a0<code>sqlite3<\/code>,\u00a0<code>requests<\/code>\u00a0\ub4f1 (Python \uc608\uc81c\uc6a9)<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">\uc2e4\uc804 \uc0ac\uc6a9\ubc95 (Step-by-step)<\/h2>\n\n\n<style>.wp-block-kadence-advancedheading.kt-adv-heading6291_d193e4-50, .wp-block-kadence-advancedheading.kt-adv-heading6291_d193e4-50[data-kb-block=\"kb-adv-heading6291_d193e4-50\"]{font-style:normal;}.wp-block-kadence-advancedheading.kt-adv-heading6291_d193e4-50 mark.kt-highlight, .wp-block-kadence-advancedheading.kt-adv-heading6291_d193e4-50[data-kb-block=\"kb-adv-heading6291_d193e4-50\"] mark.kt-highlight{font-style:normal;color:#f76a0c;-webkit-box-decoration-break:clone;box-decoration-break:clone;padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px;}.wp-block-kadence-advancedheading.kt-adv-heading6291_d193e4-50 img.kb-inline-image, .wp-block-kadence-advancedheading.kt-adv-heading6291_d193e4-50[data-kb-block=\"kb-adv-heading6291_d193e4-50\"] img.kb-inline-image{width:150px;vertical-align:baseline;}<\/style>\n<h3 class=\"kt-adv-heading6291_d193e4-50 wp-block-kadence-advancedheading\" data-kb-block=\"kb-adv-heading6291_d193e4-50\">1. <strong>\uae30\ubcf8 \ub370\uc774\ud130\ubca0\uc774\uc2a4 \uad6c\uc131<\/strong><\/h3>\n\n\n\n<p>\ubb38\uc11c \ud14c\uc774\ube14(\uc608:\u00a0<code>articles<\/code>)\uc744 \ub9cc\ub4e0 \ub4a4, FTS5 \uc778\ub371\uc2a4\ub97c \uc0dd\uc131\ud569\ub2c8\ub2e4. \uc608\ub97c \ub4e4\uc5b4\u00a0<code>articles<\/code>\u00a0\ud14c\uc774\ube14\uc5d0\u00a0<code>id<\/code>,\u00a0<code>headline<\/code>\u00a0\uceec\ub7fc\uc774 \uc788\uc744 \ub54c, \ub2e4\uc74c\uacfc \uac19\uc774 \uac00\uc0c1 \ud14c\uc774\ube14\uc744 \uc0dd\uc131\ud558\uace0 \ub0b4\uc6a9\uc744 \uc0bd\uc785\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code language-python\"><code>-- FTS5 \uc778\ub371\uc2a4 \uc0dd\uc131 (BM25\uc6a9)\nCREATE VIRTUAL TABLE fts_articles USING fts5(\n  headline,\n  content='articles', content_rowid='id'\n);\nINSERT INTO fts_articles(rowid, headline)\n  SELECT rowid, headline FROM articles;<\/code><\/pre>\n\n\n\n<p>\uc774\ub85c\uc368\u00a0<code>fts_articles<\/code>\u00a0\ud14c\uc774\ube14\uc774 \uc0dd\uc131\ub418\uc5b4\u00a0<code>headline MATCH '\uac80\uc0c9\uc5b4'<\/code>\u00a0\ud615\ud0dc\uc758 \ud0a4\uc6cc\ub4dc \uac80\uc0c9\uc774 \uac00\ub2a5\ud569\ub2c8\ub2e4.<\/p>\n\n\n\n<ol class=\"wp-block-list\"><\/ol>\n\n\n<style>.wp-block-kadence-advancedheading.kt-adv-heading6291_75da77-71, .wp-block-kadence-advancedheading.kt-adv-heading6291_75da77-71[data-kb-block=\"kb-adv-heading6291_75da77-71\"]{font-style:normal;}.wp-block-kadence-advancedheading.kt-adv-heading6291_75da77-71 mark.kt-highlight, .wp-block-kadence-advancedheading.kt-adv-heading6291_75da77-71[data-kb-block=\"kb-adv-heading6291_75da77-71\"] mark.kt-highlight{font-style:normal;color:#f76a0c;-webkit-box-decoration-break:clone;box-decoration-break:clone;padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px;}.wp-block-kadence-advancedheading.kt-adv-heading6291_75da77-71 img.kb-inline-image, .wp-block-kadence-advancedheading.kt-adv-heading6291_75da77-71[data-kb-block=\"kb-adv-heading6291_75da77-71\"] img.kb-inline-image{width:150px;vertical-align:baseline;}<\/style>\n<h3 class=\"kt-adv-heading6291_75da77-71 wp-block-kadence-advancedheading\" data-kb-block=\"kb-adv-heading6291_75da77-71\">2. <strong>\ubca1\ud130 \uc778\ub371\uc2a4 \uc0dd\uc131<\/strong><\/h3>\n\n\n\n<ol class=\"wp-block-list\"><\/ol>\n\n\n\n<p>SQLite-vec\uc758\u00a0<code>vec0<\/code>\u00a0\uac00\uc0c1 \ud14c\uc774\ube14\uc5d0 \uc784\ubca0\ub529 \ubca1\ud130\ub97c \uc800\uc7a5\ud569\ub2c8\ub2e4. \uc608\ub97c \ub4e4\uc5b4 \ubb38\uc11c\ub9c8\ub2e4 768\ucc28\uc6d0 \uc784\ubca0\ub529\uc774 \uc788\ub2e4\uba74, \ub2e4\uc74c\uacfc \uac19\uc774 \uc815\uc758\ud558\uace0 \uc0bd\uc785\ud569\ub2c8\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code language-python\"><code>-- vec0 \ud14c\uc774\ube14 \uc0dd\uc131 (\ubca1\ud130 \uac80\uc0c9\uc6a9)\nCREATE VIRTUAL TABLE vec_articles USING vec0(\n  article_id INTEGER PRIMARY KEY,\n  headline_embedding FLOAT&#91;768]\n);\nINSERT INTO vec_articles(article_id, headline_embedding)\n  SELECT rowid, lembed(headline) FROM articles;<\/code><\/pre>\n\n\n\n<p>\uc5ec\uae30\uc11c\u00a0<code>lembed(text)<\/code>\ub294 <a href=\"https:\/\/ollama.com\" target=\"_blank\" rel=\"noopener\">Ollama<\/a> \ub610\ub294 <a href=\"https:\/\/www.ibm.com\/kr-ko\/granite\" target=\"_blank\" rel=\"noopener\">Granite<\/a> \ubaa8\ub378\uc744 \uc0ac\uc6a9\ud574 \ud14d\uc2a4\ud2b8\ub97c \uc784\ubca0\ub529\ud558\ub294 \ud568\uc218\uc785\ub2c8\ub2e4. \uc704\ucc98\ub7fc \uc0bd\uc785\ud558\uba74 \uac01 \ubb38\uc11c\uc758 \uc784\ubca0\ub529\uc774\u00a0<code>vec_articles<\/code>\uc5d0 \uc800\uc7a5\ub429\ub2c8\ub2e4.<\/p>\n\n\n\n<ol class=\"wp-block-list\"><\/ol>\n\n\n<style>.wp-block-kadence-advancedheading.kt-adv-heading6291_fe98cd-c2, .wp-block-kadence-advancedheading.kt-adv-heading6291_fe98cd-c2[data-kb-block=\"kb-adv-heading6291_fe98cd-c2\"]{font-style:normal;}.wp-block-kadence-advancedheading.kt-adv-heading6291_fe98cd-c2 mark.kt-highlight, .wp-block-kadence-advancedheading.kt-adv-heading6291_fe98cd-c2[data-kb-block=\"kb-adv-heading6291_fe98cd-c2\"] mark.kt-highlight{font-style:normal;color:#f76a0c;-webkit-box-decoration-break:clone;box-decoration-break:clone;padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px;}.wp-block-kadence-advancedheading.kt-adv-heading6291_fe98cd-c2 img.kb-inline-image, .wp-block-kadence-advancedheading.kt-adv-heading6291_fe98cd-c2[data-kb-block=\"kb-adv-heading6291_fe98cd-c2\"] img.kb-inline-image{width:150px;vertical-align:baseline;}<\/style>\n<h3 class=\"kt-adv-heading6291_fe98cd-c2 wp-block-kadence-advancedheading\" data-kb-block=\"kb-adv-heading6291_fe98cd-c2\">3. <strong>\ud0a4\uc6cc\ub4dc \uac80\uc0c9 \uc608\uc2dc<\/strong><\/h3>\n\n\n\n<pre class=\"wp-block-code language-python\"><code>SELECT rowid AS id, headline, rank\nFROM fts_articles\nWHERE fts_articles MATCH '\uc608\uc2dc \ud0a4\uc6cc\ub4dc';<\/code><\/pre>\n\n\n\n<p>\uc704 \ucffc\ub9ac\ub294 FTS5 \uc778\ub371\uc2a4\ub97c \uc774\uc6a9\ud574 \u2018\uc608\uc2dc \ud0a4\uc6cc\ub4dc\u2019\uac00 \ud3ec\ud568\ub41c \ubb38\uc11c\ub97c \ub7ad\ud06c \uc21c\uc11c\ub300\ub85c \ubcf4\uc5ec\uc90d\ub2c8\ub2e4.<\/p>\n\n\n\n<ol class=\"wp-block-list\"><\/ol>\n\n\n<style>.wp-block-kadence-advancedheading.kt-adv-heading6291_098223-2f, .wp-block-kadence-advancedheading.kt-adv-heading6291_098223-2f[data-kb-block=\"kb-adv-heading6291_098223-2f\"]{font-style:normal;}.wp-block-kadence-advancedheading.kt-adv-heading6291_098223-2f mark.kt-highlight, .wp-block-kadence-advancedheading.kt-adv-heading6291_098223-2f[data-kb-block=\"kb-adv-heading6291_098223-2f\"] mark.kt-highlight{font-style:normal;color:#f76a0c;-webkit-box-decoration-break:clone;box-decoration-break:clone;padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px;}.wp-block-kadence-advancedheading.kt-adv-heading6291_098223-2f img.kb-inline-image, .wp-block-kadence-advancedheading.kt-adv-heading6291_098223-2f[data-kb-block=\"kb-adv-heading6291_098223-2f\"] img.kb-inline-image{width:150px;vertical-align:baseline;}<\/style>\n<h3 class=\"kt-adv-heading6291_098223-2f wp-block-kadence-advancedheading\" data-kb-block=\"kb-adv-heading6291_098223-2f\">4. <strong>\ubca1\ud130 \uac80\uc0c9 \uc608\uc2dc<\/strong><\/h3>\n\n\n\n<p>\ucffc\ub9ac \ubb38\uc7a5\uc744 \uc784\ubca0\ub529\ud574 \uac00\uae4c\uc6b4 \ubb38\uc11c\ub97c \ucc3e\uc2b5\ub2c8\ub2e4. \uc608\ub97c \ub4e4\uc5b4, Ollama \uc784\ubca0\ub529\uc744 \ud638\ucd9c\ud574 \uacb0\uacfc\ub97c \uc5bb\ub294\ub2e4\uace0 \uac00\uc815\ud558\uba74<\/p>\n\n\n\n<pre class=\"wp-block-code language-python\"><code>SELECT article_id, distance\nFROM vec_articles\nWHERE headline_embedding MATCH lembed('\uc608\uc2dc \uc9c8\uc758')\nORDER BY distance ASC\nLIMIT 10;<\/code><\/pre>\n\n\n\n<p>\uc774 \ucffc\ub9ac\ub294\u00a0<code>lembed('\uc608\uc2dc \uc9c8\uc758')<\/code>\ub85c \ubcc0\ud658\ub41c \uc9c8\uc758 \uc784\ubca0\ub529\uc744 \uc774\uc6a9\ud574 \uac00\uc7a5 \uc720\uc0ac\ud55c \uc0c1\uc704 10\uac1c \ubb38\uc11c\ub97c \ubc18\ud658\ud569\ub2c8\ub2e4. SQLite-vec\uc5d0\uc11c\ub294\u00a0<code>lembed()<\/code>\u00a0\ud568\uc218\uc640 KNN \ubc29\uc2dd\uc73c\ub85c \ubca1\ud130 \uac70\ub9ac\ub97c \uacc4\uc0b0\ud569\ub2c8\ub2e4.<\/p>\n\n\n<style>.wp-block-kadence-advancedheading.kt-adv-heading6291_b48fa0-64, .wp-block-kadence-advancedheading.kt-adv-heading6291_b48fa0-64[data-kb-block=\"kb-adv-heading6291_b48fa0-64\"]{font-style:normal;}.wp-block-kadence-advancedheading.kt-adv-heading6291_b48fa0-64 mark.kt-highlight, .wp-block-kadence-advancedheading.kt-adv-heading6291_b48fa0-64[data-kb-block=\"kb-adv-heading6291_b48fa0-64\"] mark.kt-highlight{font-style:normal;color:#f76a0c;-webkit-box-decoration-break:clone;box-decoration-break:clone;padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px;}.wp-block-kadence-advancedheading.kt-adv-heading6291_b48fa0-64 img.kb-inline-image, .wp-block-kadence-advancedheading.kt-adv-heading6291_b48fa0-64[data-kb-block=\"kb-adv-heading6291_b48fa0-64\"] img.kb-inline-image{width:150px;vertical-align:baseline;}<\/style>\n<h3 class=\"kt-adv-heading6291_b48fa0-64 wp-block-kadence-advancedheading\" data-kb-block=\"kb-adv-heading6291_b48fa0-64\">5. <strong>\uacb0\uacfc \uacb0\ud569 \ubc0f \uc7ac\uc21c\uc704<\/strong><\/h3>\n\n\n\n<p>BM25 \uac80\uc0c9 \uacb0\uacfc\uc640 \ubca1\ud130 \uac80\uc0c9 \uacb0\uacfc\ub97c \ud569\uccd0 \ucd5c\uc885 \uc21c\uc704\ub97c \ub9e4\uae41\ub2c8\ub2e4. \uac04\ub2e8\ud55c \ubc29\ubc95\uc740 FTS \uacb0\uacfc\uc640 \ubca1\ud130 \uacb0\uacfc\ub97c \ud569\uc9d1\ud569\ud55c \ub4a4 \uc21c\uc11c\ub300\ub85c \ub098\uc5f4\ud558\ub294 \uac83\uc774\uace0, \uace0\uae09 \ubc29\ubc95\uc740 RRF(Reciprocal Rank Fusion)\uacfc \uac19\uc740 \uae30\ubc95\uc785\ub2c8\ub2e4. <\/p>\n\n\n\n<p>\uc608\ub97c \ub4e4\uc5b4 RRF\ub97c \uc0ac\uc6a9\ud558\uba74 \uac01 \ubb38\uc11c\uc758 BM25 \uc21c\uc704\uc640 \ubca1\ud130 \uc21c\uc704\ub97c\u00a0<code>(1\/(k+rank))<\/code>\u00a0\uc2dd\uc73c\ub85c \ubcc0\ud658\ud558\uc5ec \ud569\uc0b0\ud569\ub2c8\ub2e4. SQL\ub85c \ud45c\ud604\ud558\uba74<\/p>\n\n\n\n<pre class=\"wp-block-code language-python\"><code>WITH\n  vec_matches AS (\n    SELECT article_id,\n           row_number() OVER (ORDER BY distance) AS vec_rank\n    FROM vec_articles\n    WHERE headline_embedding MATCH lembed(:query)\n    AND k = :k\n  ),\n  fts_matches AS (\n    SELECT rowid,\n           row_number() OVER (ORDER BY rank) AS fts_rank\n    FROM fts_articles\n    WHERE fts_articles MATCH :query\n    LIMIT :k\n  ),\n  combined AS (\n    SELECT\n      coalesce(1.0\/(:rrf_k + fts_rank), 0.0) * :w1 +\n      coalesce(1.0\/(:rrf_k + vec_rank), 0.0) * :w2\n      AS rrf_score,\n      COALESCE(fts_matches.rowid, vec_matches.article_id) AS id\n    FROM vec_matches FULL OUTER JOIN fts_matches\n      ON vec_matches.article_id = fts_matches.rowid\n  )\nSELECT id, rrf_score FROM combined\nORDER BY rrf_score DESC;<\/code><\/pre>\n\n\n\n<p>\uc774\ucc98\ub7fc RRF\ub97c \uc774\uc6a9\ud558\uba74 \ubca1\ud130 \uc21c\uc704\uc640 \ud0a4\uc6cc\ub4dc \uc21c\uc704\ub97c \ud568\uaed8 \uace0\ub824\ud55c\u00a0<strong>\ubcf5\ud569 \uc810\uc218<\/strong>\ub85c \uc815\ub82c\uc774 \uac00\ub2a5\ud569\ub2c8\ub2e4. \uadf8 \uc678\uc5d0\ub3c4,\u00a0<strong>\uad50\ucc28 \uc778\ucf54\ub354(Cross-Encoder) \uc7ac\uc21c\uc704<\/strong>\ub97c \ud1b5\ud574 \uc0c1\uc704 \ubb38\uc11c\uc5d0 \ub300\ud55c \uc758\ubbf8\uc801 \uc720\uc0ac\ub3c4\ub97c \uc138\ubc00\ud558\uac8c \ub2e4\uc2dc \uce21\uc815\ud560 \uc218\ub3c4 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n\n\n\n<ol class=\"wp-block-list\"><\/ol>\n\n\n\n<h2 class=\"wp-block-heading\">\ubc14\ub85c \uc368\uba39\ub294 \ud301 3\uac00\uc9c0<\/h2>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter\"><img decoding=\"async\" src=\"https:\/\/ailib.secondlife.lol\/wp-content\/uploads\/2026\/01\/image-24-600x344.png\" alt=\"\" class=\"wp-image-3181\"\/><\/figure>\n<\/div>\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\ud6c4\ubcf4 \uac1c\uc218\uc640 k\uac12 \uc870\uc815:<\/strong>\u00a0\ubca1\ud130 \uac80\uc0c9 \uc2dc\u00a0<code>k<\/code>\u00a0\uac12\uc744 20\u201340 \uc815\ub3c4\ub85c \uc124\uc815\ud558\uace0, \uac80\uc0c9\ud560 \ud6c4\ubcf4 \ubb38\uc11c \uc218\ub97c 200\u2013400 \uc815\ub3c4\ub85c \uc720\uc9c0\ud558\uc138\uc694. \ub108\ubb34 \uc801\uc73c\uba74 \uc911\uc694\ud55c \ubb38\uc11c\ub97c \ub193\uce60 \uc218 \uc788\uace0, \ub108\ubb34 \ub9ce\uc73c\uba74 \ucc98\ub9ac \ube44\uc6a9\uacfc \ub178\uc774\uc988\uac00 \uc99d\uac00\ud569\ub2c8\ub2e4.<\/li>\n\n\n\n<li><strong>\uc801\uc808\ud55c \uccad\ud06c \uae38\uc774\uc640 \uc784\ubca0\ub529 \ubaa8\ub378 \uc120\ud0dd:<\/strong>\u00a0\ubb38\uc11c \uae38\uc774\ub97c \uc801\ub2f9\ud788 \ub098\ub220(\uc608: \uc57d 250\ud1a0\ud070) \uc784\ubca0\ub529\ud558\uba74 \uac80\uc0c9 \uc815\ud655\ub3c4\ub97c \ub192\uc77c \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc0ac\uc6a9 \uc911\uc778 \uc784\ubca0\ub529 \ubaa8\ub378\uc758 \uad8c\uc7a5 \ubb38\uc7a5 \uae38\uc774\uc5d0 \ub9de\ucdb0 \ubd84\ud560\ud558\uc138\uc694.<\/li>\n\n\n\n<li><strong>\uc7ac\uc21c\uc704\ud654\ub85c \uc815\ubc00\ub3c4 \uac15\ud654:<\/strong>\u00a0RRF\uc640 \uac19\uc740\u00a0<strong>\uc735\ud569(Fusion)<\/strong>\u00a0\uae30\ubc95\uc740 \uac80\uc0c9 \uacb0\uacfc\uc758 \uc7ac\ud604\uc728\uacfc \uc815\ubc00\ub3c4 \uade0\ud615\uc744 \uc7a1\uc544\uc90d\ub2c8\ub2e4. \ub354 \ub098\uc544\uac00 \ubb38\uc7a5 \uc218\uc900\uc758 \uc758\ubbf8\ub97c \uc798 \ud310\ub2e8\ud558\ub294 BERT \uacc4\uc5f4 \uad50\ucc28 \uc778\ucf54\ub354\ub97c \uc774\uc6a9\ud574 top-k \ud6c4\ubcf4\ub97c \uc7ac\uc815\ub82c\ud558\uba74, \ubd88\ud544\uc694\ud55c \ub178\uc774\uc988\ub97c \uc904\uc5ec \uac80\uc0c9 \ud488\uc9c8\uc744 \ub354\uc6b1 \ub192\uc77c \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">\uc628\ub77c\uc778 \ubc18\uc751\/\ud6c4\uae30 \uc694\uc57d<\/h2>\n\n\n\n<p>SQLite-vec\uc640 \ub85c\uceec LLM\uc744 \ud65c\uc6a9\ud55c \ud558\uc774\ube0c\ub9ac\ub4dc RAG\uc5d0 \ub300\ud55c \uad00\uc2ec\uc774 \ub192\uc2b5\ub2c8\ub2e4. \uac1c\ubc1c\uc790 \ucee4\ubba4\ub2c8\ud2f0\uc5d0\uc11c\ub294 \u201c\ub370\uc774\ud130\uac00 \ucef4\ud4e8\ud130\ub97c \ubc97\uc5b4\ub098\uc9c0 \uc54a\ub294\ub2e4\u201d\ub294 SQLite-vec\uc758 \uc7a5\uc810\uacfc Ollama \uc870\ud569\uc774 \ud2b9\ud788 \uc8fc\ubaa9\ubc1b\uc558\uc2b5\ub2c8\ub2e4. <\/p>\n\n\n\n<p>\uc608\ub97c \ub4e4\uc5b4 SQLite-vec \ucc3d\uc2dc\uc790\ub294 \u201cSQLite\ub97c \uc0ac\uc6a9\ud558\uba74 \ub2e8 \ud55c \ubc14\uc774\ud2b8\ub3c4 \ucef4\ud4e8\ud130\ub97c \ubc97\uc5b4\ub098\uc9c0 \uc54a\ub294\ub2e4\u2026 \uc804\uccb4 \uc2a4\ud0dd\uc774 100% \ub85c\uceec\uc774\uc790 \ubb34\ub8cc\u201d\ub77c\uace0 \uac15\uc870\ud588\uc2b5\ub2c8\ub2e4. \ub610\ud55c \uc5b4\ub5a4 \uac1c\ubc1c\uc790\ub294 SQLite-vec\uacfc Ollama, Apache 2.0 \ub77c\uc774\uc120\uc2a4\uc758 Granite \ubaa8\ub378\uc744 \uacb0\ud569\ud558\uc5ec \u201c\uac15\ub825\ud55c \ub85c\uceec RAG \ud30c\uc774\ud504\ub77c\uc778\u201d\uc744 \uad6c\ud604\ud588\ub2e4\uace0 \uc804\ud558\uba70 \ud638\ud3c9\ud588\uc2b5\ub2c8\ub2e4. GitHub\uc640 Reddit\uc5d0\uc11c\ub3c4 SQLite-vec\uac00 \u201c\ub2e4\ub978 \ubca1\ud130 DB\ubcf4\ub2e4 \uc124\uce58\uac00 \uac04\ud3b8\ud558\ub2e4\u201d\ub294 \ud3c9\uc744 \uc5bb\uace0 \uc788\uc5b4, \ub85c\uceec \ud558\uc774\ube0c\ub9ac\ub4dc RAG \uae30\uc220\uc774 \ube60\ub974\uac8c \ud655\uc0b0 \uc911\uc785\ub2c8\ub2e4.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img decoding=\"async\" width=\"600\" height=\"344\" src=\"https:\/\/secondlife.lol\/wp-content\/uploads\/2026\/01\/image-60-600x344.png\" alt=\"\" class=\"wp-image-6292\" srcset=\"https:\/\/secondlife.lol\/wp-content\/uploads\/2026\/01\/image-60-600x344.png 600w, https:\/\/secondlife.lol\/wp-content\/uploads\/2026\/01\/image-60-300x172.png 300w, https:\/\/secondlife.lol\/wp-content\/uploads\/2026\/01\/image-60-768x440.png 768w, https:\/\/secondlife.lol\/wp-content\/uploads\/2026\/01\/image-60-18x10.png 18w, https:\/\/secondlife.lol\/wp-content\/uploads\/2026\/01\/image-60.png 1200w\" sizes=\"(max-width: 600px) 100vw, 600px\" \/><\/figure>\n<\/div>\n\n\n<h2 class=\"wp-block-heading\">\ub9ac\uc2a4\ud06c &amp; \uc8fc\uc758\uc0ac\ud56d (TOS\/\ubcf4\uc548\/\ube44\uc6a9)<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\ub370\uc774\ud130\/\ubcf4\uc548:<\/strong>\u00a0\ubaa8\ub4e0 \ucc98\ub9ac\ub97c \ub85c\uceec\uc5d0\uc11c \uc218\ud589\ud558\ubbc0\ub85c \ub370\uc774\ud130\uac00 \uc678\ubd80\ub85c \uc720\ucd9c\ub420 \uc704\ud5d8\uc740 \uac70\uc758 \uc5c6\uc2b5\ub2c8\ub2e4. \uae30\uc5c5 \ubb38\uc11c\ub098 \uac1c\uc778 \ub370\uc774\ud130\ub97c \uc678\ubd80 API\uc5d0 \ubcf4\ub0b4\uc9c0 \uc54a\uae30 \ub54c\ubb38\uc5d0 \uae30\ubc00\uc131\uc744 \uc720\uc9c0\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/li>\n\n\n\n<li><strong>\uc131\ub2a5:<\/strong>\u00a0SQLite-vec\uc740 \ud604\uc7ac \ube0c\ub8e8\ud2b8\ud3ec\uc2a4 \ubc29\uc2dd\ub9cc \uc9c0\uc6d0\ud558\ubbc0\ub85c\u00a0<strong>\uc218\uc2ed\ub9cc \uac1c \uc774\ud558<\/strong>\u00a0\uc218\uc900\uc5d0\uc11c\ub294 \ube60\ub974\uac8c \ub3d9\uc791\ud558\uc9c0\ub9cc, \ubca1\ud130 \uc218\uac00 \ub108\ubb34 \ub9ce\uc544\uc9c0\uba74 \uc131\ub2a5\uc774 \uc800\ud558\ub420 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \ud544\uc694 \uc2dc FP16\/FP8 \uc591\uc790\ud654 \uae30\ub2a5\uc774\ub098 \ub370\uc774\ud130 \ubd84\ud560(partition)\uc744 \ud65c\uc6a9\ud574\uc57c \ud569\ub2c8\ub2e4.<\/li>\n\n\n\n<li><strong>\ub77c\uc774\uc120\uc2a4\/\ube44\uc6a9:<\/strong>\u00a0Ollama\uc5d0\uc11c \uc0ac\uc6a9\ud558\ub294 Granite \ubaa8\ub378\uc740 Apache 2.0 \ub77c\uc774\uc120\uc2a4 \ub4f1\uc73c\ub85c \ube44\uad50\uc801 \uc0ac\uc6a9 \uc81c\uc57d\uc774 \uc801\uc2b5\ub2c8\ub2e4. \uc790\uccb4 GPU \uc5c6\uc774 CPU\ub9cc\uc73c\ub85c\ub3c4 \ub3d9\uc791\ud558\uc9c0\ub9cc, \ub2f5\ubcc0 \uc0dd\uc131 \uacfc\uc815\uc5d0\uc11c GPU\ub97c \uc0ac\uc6a9\ud560 \uacbd\uc6b0 \uc804\uae30 \uc694\uae08\uc774\ub098 \ud558\ub4dc\uc6e8\uc5b4 \ube44\uc6a9\uc774 \ubc1c\uc0dd\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/li>\n\n\n\n<li><strong>\uc815\ubc00\ub3c4 \uc774\uc288:<\/strong>\u00a0\ud558\uc774\ube0c\ub9ac\ub4dc \uac80\uc0c9\uc740 \uc5ec\ub7ec \ub2e8\uacc4\ub97c \uac70\uce58\ubbc0\ub85c \uc798\ubabb \uc124\uc815\ud558\uba74 \uc624\ud788\ub824 \ub178\uc774\uc988\uac00 \uc99d\uac00\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \ud56d\uc0c1 \uac80\uc0c9 \ud30c\ub77c\ubbf8\ud130(<code>k<\/code>,\u00a0<code>rrf_k<\/code>, \uac00\uc911\uce58 \ub4f1)\ub97c \uc2e4\ud5d8\ud558\uc5ec \ud29c\ub2dd\ud558\uc138\uc694.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">FAQ<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Q: \ud558\uc774\ube0c\ub9ac\ub4dc \uac80\uc0c9\uc774\ub780 \ubb34\uc5c7\uc778\uac00\uc694?<\/strong><br>A:\u00a0<strong>\ud558\uc774\ube0c\ub9ac\ub4dc \uac80\uc0c9<\/strong>\uc740 BM25 \uae30\ubc18\uc758 \ud0a4\uc6cc\ub4dc \uac80\uc0c9\uacfc \uc784\ubca0\ub529 \uae30\ubc18\uc758 \uc2dc\ub9e8\ud2f1 \uac80\uc0c9\uc744 \uacb0\ud569\ud55c \ubc29\uc2dd\uc785\ub2c8\ub2e4. \ub450 \ubc29\ubc95\uc758 \uacb0\uacfc\ub97c \ud568\uaed8 \uc0ac\uc6a9\ud574 \ubb38\uc11c\uc758 \uc5f0\uad00\uc131\uc744 \ud3c9\uac00\ud569\ub2c8\ub2e4.<\/li>\n\n\n\n<li><strong>Q: BM25 \uac80\uc0c9\uacfc \ubca1\ud130 \uac80\uc0c9\uc758 \ucc28\uc774\ub294 \ubb34\uc5c7\uc778\uac00\uc694?<\/strong><br>A: BM25\ub294 \uc9c8\uc758\uc5b4 \ub2e8\uc5b4\uc758 \ube48\ub3c4\uc640 \uc5ed\ubb38\uc11c\ube48\ub3c4\ub97c \uc774\uc6a9\ud574 \uc815\ud655\ud55c \ud0a4\uc6cc\ub4dc \ub9e4\uce6d\uc5d0 \uac15\uc810\uc744 \ubcf4\uc785\ub2c8\ub2e4. \ubc18\uba74 \ubca1\ud130 \uac80\uc0c9\uc740 \ubb38\uc7a5\uc774\ub098 \ubb38\uc11c \uc804\uccb4\ub97c \uc784\ubca0\ub529\ud558\uc5ec \uc758\ubbf8\uc801 \uc720\uc0ac\ub3c4\ub97c \uacc4\uc0b0\ud558\ubbc0\ub85c, \ub3d9\uc758\uc5b4\ub098 \ube44\uc2b7\ud55c \ud45c\ud604\ub3c4 \uc798 \ucc3e\uc544\ub0c5\ub2c8\ub2e4.<\/li>\n\n\n\n<li><strong>Q: RRF(Reciprocal Rank Fusion)\ub780 \ubb34\uc5c7\uc778\uac00\uc694?<\/strong><br>A: RRF\ub294 \uc5ec\ub7ec \uac80\uc0c9 \uacb0\uacfc \ub9ac\uc2a4\ud2b8\ub97c \ud1b5\ud569\ud558\ub294 \uae30\ubc95\uc785\ub2c8\ub2e4. BM25\uc640 \ubca1\ud130 \uac80\uc0c9 \uac01\uac01\uc758 \uc21c\uc704 \uc21c\uc11c(row number)\ub9cc\uc744 \uc774\uc6a9\ud574\u00a0<code>(1\/(k+\uc21c\uc704))<\/code>\u00a0\uacf5\uc2dd\uc744 \uacc4\uc0b0\ud558\uace0, \ub450 \uc810\uc218\ub97c \ud569\uc0b0\ud558\uc5ec \ucd5c\uc885 \uc21c\uc704\ub97c \ub9cc\ub4ed\ub2c8\ub2e4. \uc774\ub807\uac8c \ud558\uba74 \ub450 \uac80\uc0c9 \ubc29\uc2dd \ubaa8\ub450\uc5d0\uc11c \ub192\uc740 \uc21c\uc704\uc5d0 \uc624\ub978 \ubb38\uc11c\uac00 \uc6b0\uc120\uc2dc\ub429\ub2c8\ub2e4.<\/li>\n\n\n\n<li><strong>Q: SQLite\uc5d0\uc11c \ubca1\ud130 \uac80\uc0c9\ub3c4 \uac00\ub2a5\ud55c\uac00\uc694?<\/strong><br>A: \ub124,\u00a0<strong>SQLite-vec<\/strong>\u00a0\ud655\uc7a5\uc744 \uc0ac\uc6a9\ud558\uba74 \uac00\ub2a5\ud569\ub2c8\ub2e4. \uc704 \uc608\uc2dc\ucc98\ub7fc\u00a0<code>CREATE VIRTUAL TABLE vec_articles USING vec0(...)<\/code>\u00a0\uba85\ub839\uc73c\ub85c \ubca1\ud130 \uceec\ub7fc\uc744 \ub9cc\ub4e4\uace0 \uc784\ubca0\ub529\uc744 \uc800\uc7a5\ud558\uba74,\u00a0<code>MATCH lembed(...)<\/code>\u00a0\uad6c\ubb38\uc73c\ub85c \uac00\uae4c\uc6b4 \ubca1\ud130\ub97c \uac80\uc0c9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. Postgres\uc758 pgvector\uc640 \uc720\uc0ac\ud55c \uae30\ub2a5\uc744 SQLite\uc5d0\uc11c \uad6c\ud604\ud560 \uc218 \uc788\ub294 \uc148\uc785\ub2c8\ub2e4.<\/li>\n\n\n\n<li><strong>Q: \ud558\uc774\ube0c\ub9ac\ub4dc \uac80\uc0c9\uc744 \uc0ac\uc6a9\ud558\uba74 \uc815\ub9d0 \uc131\ub2a5\uc774 \uc88b\uc544\uc9c0\ub098\uc694?<\/strong><br>A: \uc77c\ubc18\uc801\uc73c\ub85c \uac80\uc0c9 \uc7ac\ud604\uc728(Recall)\uc774 \ud5a5\uc0c1\ub429\ub2c8\ub2e4. \uc5ec\ub7ec \uc5f0\uad6c\uc5d0\uc11c \ud558\uc774\ube0c\ub9ac\ub4dc \uac80\uc0c9\uc744 \uc0ac\uc6a9\ud560 \ub54c \uc21c\uc218 \ud0a4\uc6cc\ub4dc\ub098 \ubca1\ud130\ub9cc \uc4f0\ub294 \uacbd\uc6b0\ubcf4\ub2e4 \uc57d 10~20% \ub354 \ub9ce\uc740 \uad00\ub828 \ubb38\uc11c\ub97c \ucc3e\uc544\ub0c8\ub2e4\uace0 \ubcf4\uace0\ud588\uc2b5\ub2c8\ub2e4. \ucd94\uac00\ub85c RRF \uac19\uc740 \uae30\ubc95\uc744 \uc4f0\uba74 \uc815\ubc00\ub3c4\ub3c4 \ubcf4\uc644\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \ub2e8, \ubaa8\ub4e0 \ubc29\ubc95\uc744 \ub3d9\uc2dc\uc5d0 \uc2e4\ud589\ud558\ubbc0\ub85c \uc751\ub2f5 \uc18d\ub3c4\ub294 \ub290\ub824\uc9c8 \uc218 \uc788\uc73c\ubbc0\ub85c\u00a0<code>k<\/code>\u00a0\uac12 \ub4f1\uc740 \uc801\uc808\ud788 \uc870\uc815\ud574\uc57c \ud569\ub2c8\ub2e4.<\/li>\n\n\n\n<li><strong>Q: \ud558\uc774\ube0c\ub9ac\ub4dc \uac80\uc0c9\uc758 \ub2e8\uc810\uc740?<\/strong><br>A: \ub450 \uac00\uc9c0 \uac80\uc0c9\uc744 \ubaa8\ub450 \uc218\ud589\ud558\ubbc0\ub85c \ubcf5\uc7a1\ub3c4\uac00 \ub298\uc5b4\ub098\uace0, \uc804\uccb4\uc801\uc73c\ub85c \uc9c0\uc5f0(latency)\uc774 \uc99d\uac00\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \ub610\ud55c RRF\ub098 \uad50\ucc28 \uc778\ucf54\ub354 \uc7ac\uc21c\uc704\uc640 \uac19\uc740 \ucd94\uac00 \ub2e8\uacc4\uac00 \ud544\uc694\ud574 \uc124\uc815\uc774 \uae4c\ub2e4\ub85c\uc6b8 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \ub530\ub77c\uc11c, \uaf2d \ud544\uc694\ud55c \uacbd\uc6b0\uc5d0\ub9cc \uc801\uc6a9\ud558\uace0 \ud30c\ub77c\ubbf8\ud130\ub97c \ud29c\ub2dd\ud574\uc57c \ud569\ub2c8\ub2e4.<\/li>\n\n\n\n<li><strong>Q: Ollama \uc5c6\uc774\ub3c4 \ub418\ub098\uc694?<\/strong><br>A: Ollama\ub294 \ubca1\ud130 \uc784\ubca0\ub529\uacfc LLM \uc0dd\uc131\uc744 \uc704\ud55c \ub85c\uceec \ud234\ud0b7\uc77c \ubfd0\uc785\ub2c8\ub2e4. OpenAI \ub4f1 \uc678\ubd80 API\ub85c\ub3c4 \uc784\ubca0\ub529\uacfc LLM \ud638\ucd9c\uc774 \uac00\ub2a5\ud558\uc9c0\ub9cc, \ube44\uc6a9\uc774 \ub4e4\uace0 \uac1c\uc778\uc815\ubcf4 \uc774\uc288\uac00 \uc0dd\uae38 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \ub85c\uceec\ub85c \ucc98\ub9ac\ud558\ub824\uba74 Ollama\ub098 GPT4All \uac19\uc740 \ub85c\uceec LLM\uc744 \uc0ac\uc6a9\ud558\ub294 \uac83\uc774 \uc548\uc804\ud569\ub2c8\ub2e4. SQLite-vec\ub294 Ollama \uc5c6\uc774\ub3c4 \ubb38\uc11c \uc784\ubca0\ub529\ub9cc \ub85c\uceec\uc5d0 \uc800\uc7a5\ud560 \uc218 \uc788\ub2e4\ub294 \uc810\uc774 \uac15\uc810\uc785\ub2c8\ub2e4.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">\ub9c8\ubb34\ub9ac<\/h2>\n\n\n\n<p>\uc774\ubc88 \uae00\uc5d0\uc11c\ub294 macOS \ud658\uacbd\uc758 SQLite FTS5\uc640 Ollama\ub97c \ud65c\uc6a9\ud574&nbsp;<strong>\ud558\uc774\ube0c\ub9ac\ub4dc RAG<\/strong>\ub97c \uad6c\ud604\ud558\ub294 \ubc29\ubc95\uc744 \uc790\uc138\ud788 \uc0b4\ud3b4\ubd24\uc2b5\ub2c8\ub2e4. BM25 \ud0a4\uc6cc\ub4dc \uac80\uc0c9\uacfc \ubca1\ud130 \uc784\ubca0\ub529 \uac80\uc0c9\uc744 \uacb0\ud569\ud558\uc5ec \uc790\ub8cc \uac80\uc0c9\uc758&nbsp;<strong>\uc7ac\ud604\uc728\uacfc \uc815\ubc00\ub3c4<\/strong>\ub97c \ud568\uaed8 \ub192\uc77c \uc218 \uc788\uc74c\uc744 \ud655\uc778\ud588\uc2b5\ub2c8\ub2e4. \ub2e4\uc74c \ud3b8\uc5d0\uc11c\ub294 \uc774 \uac80\uc0c9 \uacb0\uacfc\ub97c LLM\uc5d0 \uc785\ub825\ud558\uc5ec \uc2e4\uc81c\ub85c \ub2f5\ubcc0\uc744 \uc0dd\uc131\ud558\ub294 \uacfc\uc815\uacfc, \ucd94\uac00\ub85c&nbsp;<strong>LLM \uae30\ubc18 \uc7ac\uc21c\uc704(Re-rank)<\/strong>&nbsp;\ud639\uc740&nbsp;<strong>\ub2f5\ubcc0 \uc694\uc57d(Summarization)<\/strong>&nbsp;\ub4f1\uc744 \ud1b5\ud574 \uc751\ub2f5 \ud488\uc9c8\uc744 \ud55c\uce35 \ub354 \ub04c\uc5b4\uc62c\ub9ac\ub294 \ubc29\ubc95\uc744 \ub2e4\ub8f0 \uc608\uc815\uc785\ub2c8\ub2e4. \ub9ce\uc740 \uae30\ub300 \ubc14\ub78d\ub2c8\ub2e4!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\uc774\uc804\uc5d0 \uc0b4\ud3b4\ubcf4\uc558\ub358 \ub85c\uceec RAG \uad6c\ucd95 \ubc29\ubc95\uc5d0 \uc774\uc5b4\uc11c \uc774\ubc88\uc5d0\ub294 \ud558\uc774\ube0c\ub9ac\ub4dc RAG\uc5d0&#8230;<\/p>","protected":false},"author":3,"featured_media":6293,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_kad_blocks_custom_css":"","_kad_blocks_head_custom_js":"","_kad_blocks_body_custom_js":"","_kad_blocks_footer_custom_js":"","_kad_post_transparent":"","_kad_post_title":"","_kad_post_layout":"","_kad_post_sidebar_id":"","_kad_post_content_style":"","_kad_post_vertical_padding":"","_kad_post_feature":"","_kad_post_feature_position":"","_kad_post_header":false,"_kad_post_footer":false,"_kad_post_classname":"","footnotes":""},"categories":[7],"tags":[1445,1433,916,1440,1444,1442,1443,1441],"class_list":["post-6291","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-ai-coding","tag-ai","tag-bm25","tag-ollama","tag-rag","tag-sqlite-vec","tag-1442","tag-1443","tag-1441"],"taxonomy_info":{"category":[{"value":7,"label":"\uc778\uacf5\uc9c0\ub2a5(AI)"}],"post_tag":[{"value":1445,"label":"AI\uac80\uc0c9"},{"value":1433,"label":"BM25"},{"value":916,"label":"Ollama"},{"value":1440,"label":"RAG"},{"value":1444,"label":"SQLite-vec"},{"value":1442,"label":"\ubca1\ud130 \uac80\uc0c9"},{"value":1443,"label":"\uc2dc\ub9e8\ud2f1 \uac80\uc0c9"},{"value":1441,"label":"\ud558\uc774\ube0c\ub9ac\ub4dc \uac80\uc0c9"}]},"featured_image_src_large":["https:\/\/secondlife.lol\/wp-content\/uploads\/2026\/01\/image-61-600x341.png",600,341,true],"author_info":{"display_name":"TERE","author_link":"https:\/\/secondlife.lol\/ja\/author\/tere\/"},"comment_info":0,"category_info":[{"term_id":7,"name":"\uc778\uacf5\uc9c0\ub2a5(AI)","slug":"ai-coding","term_group":0,"term_taxonomy_id":7,"taxonomy":"category","description":"","parent":20,"count":69,"filter":"raw","cat_ID":7,"category_count":69,"category_description":"","cat_name":"\uc778\uacf5\uc9c0\ub2a5(AI)","category_nicename":"ai-coding","category_parent":20}],"tag_info":[{"term_id":1445,"name":"AI\uac80\uc0c9","slug":"ai%ea%b2%80%ec%83%89","term_group":0,"term_taxonomy_id":1445,"taxonomy":"post_tag","description":"","parent":0,"count":1,"filter":"raw"},{"term_id":1433,"name":"BM25","slug":"bm25","term_group":0,"term_taxonomy_id":1433,"taxonomy":"post_tag","description":"","parent":0,"count":2,"filter":"raw"},{"term_id":916,"name":"Ollama","slug":"ollama","term_group":0,"term_taxonomy_id":916,"taxonomy":"post_tag","description":"","parent":0,"count":7,"filter":"raw"},{"term_id":1440,"name":"RAG","slug":"rag","term_group":0,"term_taxonomy_id":1440,"taxonomy":"post_tag","description":"","parent":0,"count":1,"filter":"raw"},{"term_id":1444,"name":"SQLite-vec","slug":"sqlite-vec","term_group":0,"term_taxonomy_id":1444,"taxonomy":"post_tag","description":"","parent":0,"count":1,"filter":"raw"},{"term_id":1442,"name":"\ubca1\ud130 \uac80\uc0c9","slug":"%eb%b2%a1%ed%84%b0-%ea%b2%80%ec%83%89","term_group":0,"term_taxonomy_id":1442,"taxonomy":"post_tag","description":"","parent":0,"count":1,"filter":"raw"},{"term_id":1443,"name":"\uc2dc\ub9e8\ud2f1 \uac80\uc0c9","slug":"%ec%8b%9c%eb%a7%a8%ed%8b%b1-%ea%b2%80%ec%83%89","term_group":0,"term_taxonomy_id":1443,"taxonomy":"post_tag","description":"","parent":0,"count":1,"filter":"raw"},{"term_id":1441,"name":"\ud558\uc774\ube0c\ub9ac\ub4dc \uac80\uc0c9","slug":"%ed%95%98%ec%9d%b4%eb%b8%8c%eb%a6%ac%eb%93%9c-%ea%b2%80%ec%83%89","term_group":0,"term_taxonomy_id":1441,"taxonomy":"post_tag","description":"","parent":0,"count":1,"filter":"raw"}],"_links":{"self":[{"href":"https:\/\/secondlife.lol\/ja\/wp-json\/wp\/v2\/posts\/6291","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/secondlife.lol\/ja\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/secondlife.lol\/ja\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/secondlife.lol\/ja\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/secondlife.lol\/ja\/wp-json\/wp\/v2\/comments?post=6291"}],"version-history":[{"count":4,"href":"https:\/\/secondlife.lol\/ja\/wp-json\/wp\/v2\/posts\/6291\/revisions"}],"predecessor-version":[{"id":6299,"href":"https:\/\/secondlife.lol\/ja\/wp-json\/wp\/v2\/posts\/6291\/revisions\/6299"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/secondlife.lol\/ja\/wp-json\/wp\/v2\/media\/6293"}],"wp:attachment":[{"href":"https:\/\/secondlife.lol\/ja\/wp-json\/wp\/v2\/media?parent=6291"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/secondlife.lol\/ja\/wp-json\/wp\/v2\/categories?post=6291"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/secondlife.lol\/ja\/wp-json\/wp\/v2\/tags?post=6291"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}