{"id":17027,"date":"2025-04-10T08:08:45","date_gmt":"2025-04-10T15:08:45","guid":{"rendered":"https:\/\/www.couchbase.com\/blog\/?p=17027"},"modified":"2025-06-13T16:36:10","modified_gmt":"2025-06-13T23:36:10","slug":"self-hosted-ai-chatbot-docker-couchbase-capella","status":"publish","type":"post","link":"https:\/\/www.couchbase.com\/blog\/ko\/self-hosted-ai-chatbot-docker-couchbase-capella\/","title":{"rendered":"Docker \ubc0f Couchbase Capella\ub97c \uc0ac\uc6a9\ud55c \uc790\uccb4 \ud638\uc2a4\ud305 AI \ucc57\ubd07"},"content":{"rendered":"<p>AI \ucc57\ubd07\uc740 \uae30\uc5c5\uacfc \uc870\uc9c1\uc5d0 \ud544\uc218\uc801\uc778 \ub3c4\uad6c\uac00 \ub418\uc5c8\uc2b5\ub2c8\ub2e4. \ud558\uc9c0\ub9cc \ub300\ubd80\ubd84\uc758 \ucc57\ubd07 \uc194\ub8e8\uc158\uc740 \ud074\ub77c\uc6b0\ub4dc \uae30\ubc18 \ubaa8\ub378\uc5d0 \uc758\uc874\ud558\uae30 \ub54c\ubb38\uc5d0 \uc9c0\uc5f0 \uc2dc\uac04, API \uc81c\ud55c, \uadf8\ub9ac\uace0 \uac00\uc7a5 \uc911\uc694\ud55c \uac1c\uc778 \uc815\ubcf4 \ubcf4\ud638 \ubb38\uc81c\uac00 \ubc1c\uc0dd\ud569\ub2c8\ub2e4. AI \ucc57\ubd07\uc744 \uc628\uc804\ud788 \uc790\uccb4 \uc2dc\uc2a4\ud15c\uc5d0\uc11c \uc2e4\ud589\ud558\uba74\uc11c\ub3c4 \ubaa8\ub4e0 \uae30\ub2a5\uc744 \uac16\ucd98 \ub370\uc774\ud130 \ud50c\ub7ab\ud3fc\uc73c\ub85c \ub300\ud654 \uae30\ub85d\uc744 \ubcf4\uad00\ud560 \uc218 \uc788\ub2e4\uba74 \uc5b4\ub5a8\uae4c\uc694?<\/p>\n<p>\uc774 \uac8c\uc2dc\ubb3c\uc5d0\uc11c\ub294 \ucd94\ub860 \ub4f1\uc744 \uc704\ud574 \ub85c\uceec\uc5d0\uc11c \ucee8\ud14c\uc774\ub108\ud654\ub41c \ubaa8\ub378\uc744 \uc2e4\ud589\ud560 \uc218 \uc788\ub294 Docker\uc758 \uc0c8\ub85c\uc6b4 \uae30\ub2a5\uc778 Docker Model Runner\uc640 \ub300\ud654\ub97c \uc800\uc7a5, \uac80\uc0c9 \ubc0f \uac80\uc0c9\ud558\ub294 Couchbase Capella\ub97c \uc0ac\uc6a9\ud558\uc5ec \uc790\uccb4 \ud638\uc2a4\ud305 AI \ucc57\ubd07\uc744 \uc124\uc815\ud558\ub294 \ubc29\ubc95\uc744 \uc548\ub0b4\ud569\ub2c8\ub2e4. \uadf8 \uacb0\uacfc \uc0ac\uc6a9\uc790\uac00 \uc81c\uc5b4\ud560 \uc218 \uc788\ub294 \ube60\ub974\uace0 \ube44\uacf5\uac1c\uc801\uc774\uba70 \uc720\uc5f0\ud55c \ucc57\ubd07\uc774 \ud0c4\uc0dd\ud569\ub2c8\ub2e4.<\/p>\n<p>\uc2dc\uc791\ud560 \uc900\ube44\uac00 \ub418\uc168\ub098\uc694? \uc2dc\uc791\ud558\uc138\uc694!<\/p>\n<h2>Docker \ubaa8\ub378 \ub7ec\ub108 \uc124\uc815<\/h2>\n<p>\uba3c\uc800 \ubaa8\ub378 \ub7ec\ub108 \uae30\ub2a5\uc744 \uc0ac\uc6a9\ud560 \uc218 \uc788\ub3c4\ub85d Docker \ub370\uc2a4\ud06c\ud1b1 \ubc0f CLI \ubc84\uc804\uc774 \ucd5c\uc2e0 \uc0c1\ud0dc\uc778\uc9c0 \ud655\uc778\ud569\ub2c8\ub2e4. \ub2e4\uc74c\uc744 \uc2e4\ud589\ud558\uc5ec \uc774\ub97c \uc218\ud589\ud569\ub2c8\ub2e4. <code>\ub3c4\ucee4 \ubaa8\ub378 \uc0c1\ud0dc<\/code> \ub97c \uc785\ub825\ud569\ub2c8\ub2e4. \uc131\uacf5\ud558\uba74 \ub2e4\uc74c\uacfc \uac19\uc740 \uc131\uacf5 \uba54\uc2dc\uc9c0\uac00 \ucd9c\ub825\ub429\ub2c8\ub2e4. <code>\ub3c4\ucee4 \ubaa8\ub378 \ub7ec\ub108\uac00 \uc2e4\ud589 \uc911\uc785\ub2c8\ub2e4.<\/code>. \uadf8\ub807\uc9c0 \uc54a\uc740 \uacbd\uc6b0\uc5d0\ub294 \uba3c\uc800 \ucd5c\uc2e0 \ubc84\uc804\uc758 Docker\ub97c \uad6c\ud558\uc5ec \uc124\uce58\ud574\uc57c \ud569\ub2c8\ub2e4. Docker\ub97c \uc5c5\ub370\uc774\ud2b8\ud55c \ud6c4 \ud574\ub2f9 \uba85\ub839\uc744 \ub2e4\uc2dc \uc2e4\ud589\ud558\uba74 \uc815\uc0c1\uc801\uc73c\ub85c \uc791\ub3d9\ud569\ub2c8\ub2e4.<\/p>\n<p>\uadf8\ub807\uac8c \ud55c \ud6c4\uc5d0\ub294 Docker Model Runner\ub97c \uc0ac\uc6a9\ud558\uc5ec \ucee8\ud14c\uc774\ub108 \uc774\ubbf8\uc9c0\ub97c Llama 3.2 \ubaa8\ub378\ub85c \uac00\uc838\uc640 \ub85c\uceec\uc5d0\uc11c \uc0ac\uc6a9\ud560 \uc218 \uc788\ub3c4\ub85d \ud569\ub2c8\ub2e4:<\/p>\n<p style=\"padding-left: 40px;\"><code>\ub3c4\ucee4 \ubaa8\ub378 \ud480 AI\/llama3.3<\/code>\n<\/p>\n<p>\ub2e4\uc74c\uc744 \uc2e4\ud589\ud558\uc5ec Llama 3.2 \ubaa8\ub378\uc744 \uc131\uacf5\uc801\uc73c\ub85c \ub2e4\uc6b4\ub85c\ub4dc\ud588\ub294\uc9c0 \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. <code>\ub3c4\ucee4 \ubaa8\ub378 \ubaa9\ub85d<\/code> \ub97c \ud074\ub9ad\ud558\uba74 \uc0ac\uc6a9 \uac00\ub2a5\ud55c \ubaa8\ub378\uc744 \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4:<\/p>\n<p style=\"padding-left: 40px;\"><code>{\"object\":\"list\",\"data\":[{\"id\":\"ai\/llama3.3\",\"object\":\"model\",\"created\":1741794281,\"owned_by\":\"docker\"}]}<\/code>\n<\/p>\n<p>\ud14c\uc2a4\ud2b8\ud574\ubcf4\uace0 \uc2f6\uc73c\uc2e0\uac00\uc694? \ub300\ud654\ud615 \ubaa8\ub4dc\uc5d0\uc11c \ubaa8\ub378\uc744 \uc5ec\ub294 \uac83\uc740 \uc544\uc8fc \uc27d\uc2b5\ub2c8\ub2e4! \uc2e4\ud589\ud558\uae30\ub9cc \ud558\uba74 \ub429\ub2c8\ub2e4. <code>\ub3c4\ucee4 \ubaa8\ub378 \uc2e4\ud589 AI\/llama3.3<\/code> \ub97c \uc785\ub825\ud558\uba74 \ub300\ud654\ud615 \ubaa8\ub4dc\ub85c \uc804\ud658\ub429\ub2c8\ub2e4:<\/p>\n<p style=\"padding-left: 40px;\">\n<code>\ub300\ud654\ud615 \ucc44\ud305 \ubaa8\ub4dc\uac00 \uc2dc\uc791\ub418\uc5c8\uc2b5\ub2c8\ub2e4. \uc885\ub8cc\ud558\ub824\uba74 '\/bye'\ub97c \uc785\ub825\ud569\ub2c8\ub2e4.<br \/>\n<\/code><code>&gt;<\/code><\/p>\n<p>\uc774\uc81c Llama 3.2\ub97c \ub2e4\uc6b4\ub85c\ub4dc\ud558\uc5ec \uc0ac\uc6a9\ud560 \uc900\ube44\uac00 \ub418\uc5c8\uc73c\ub2c8, \uc774\uc81c \uc790\uccb4 \ud638\uc2a4\ud305 AI \ucc57\ubd07 \ubaa8\ub378\uc744 \ud65c\uc6a9\ud558\ub294 \uac04\ub2e8\ud55c \ubc31\uc5d4\ub4dc \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc744 \uad6c\ucd95\ud560 \ucc28\ub840\uc785\ub2c8\ub2e4.<\/p>\n<h2>\ucc57\ubd07 \ub9cc\ub4e4\uae30<\/h2>\n<p>\uc0dd\uc131\ud560 \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc740 \ub2e4\uc74c \uc791\uc5c5\uc744 \uc218\ud589\ud569\ub2c8\ub2e4:<\/p>\n<ul>\n<li style=\"list-style-type: none;\">\n<ul>\n<li >Llama 3.2\ub97c \ub85c\uceec\uc5d0\uc11c \uc2e4\ud589\ud558\ub824\uba74 <code>\ub3c4\ucee4 \ubaa8\ub378 \uc2e4\ud589<\/code>\u00a0CLI \uba85\ub839<\/li>\n<li >\ubaa8\ub378\uc5d0 \uc0ac\uc6a9\uc790 \uba54\uc2dc\uc9c0\ub97c \ud504\ub86c\ud504\ud2b8\ub85c \ubcf4\ub0b4\uae30<\/li>\n<li >\uce74\uc6b0\uce58\ubca0\uc774\uc2a4 \uce74\ud3a0\ub77c\uc5d0 \ucc44\ud305 \uae30\ub85d \uc800\uc7a5\ud558\uae30<\/li>\n<li >\uc774\uc804 \ucc44\ud305 \uac80\uc0c9<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>\ubaa8\ub4e0 \uae30\ub2a5\uc744 \uac16\ucd98 \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc744 \ucf58\uc194\uc5d0\uc11c \uac15\ub825\ud55c AI \uae30\ubc18 \ucc57\ubd07\uc73c\ub85c \uc989\uc2dc \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc5ec\uae30\uc11c \ud568\uaed8 \uad6c\ucd95\ud55c \ucf54\ub4dc\ub294 \ud544\uc694\uc5d0 \ub530\ub77c \ub9ac\ud329\ud130\ub9c1\ud560 \uc218 \uc788\ub294 \uae30\ubc18\uc744 \uc81c\uacf5\ud569\ub2c8\ub2e4. \uc6f9 \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc758 \ubc31\uc5d4\ub4dc\ub85c \uc804\ud658\ud558\uace0 \uc2f6\uc744 \uc218\ub3c4 \uc788\uc2b5\ub2c8\ub2e4. \uc774\ub97c \uc704\ud574\uc11c\ub294 \uba87 \uac00\uc9c0 \uc218\uc815\ub9cc \ud558\uba74 \ub429\ub2c8\ub2e4.<\/p>\n<p>\uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc5d0\ub294 \uba87 \uac00\uc9c0 \uc885\uc18d\uc131\uc774 \ud544\uc694\ud558\ubbc0\ub85c \ud504\ub85c\uc81d\ud2b8 \ub514\ub809\ud1a0\ub9ac\uc5d0\uc11c \ub2e4\uc74c\uc744 \uc2e4\ud589\ud569\ub2c8\ub2e4. <code>\uc5d4\ud53c\uc5e0 \uc124\uce58 \uce74\uc6b0\uce58\ubca0\uc774\uc2a4 \ub9ac\ub4dc\ub77c\uc778 \ub3d9\uae30\ud654<\/code>. \uc6b0\ub9ac\ub294 Couchbase Node.js SDK\ub97c \uc0ac\uc6a9\ud558\uc5ec Couchbase Capella \ub370\uc774\ud130 \uc2a4\ud1a0\uc5b4\uc640 \uc0c1\ud638 \uc791\uc6a9\ud558\uba70, \ub2e4\uc74c\uc744 \uc0ac\uc6a9\ud569\ub2c8\ub2e4. <code>\ub9ac\ub4dc\ub77c\uc778 \ub3d9\uae30\ud654<\/code> \ub97c \uc0ac\uc6a9\ud558\uc5ec \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc774 \ud130\ubbf8\ub110\uc5d0\uc11c \uc0ac\uc6a9\uc790\uc640 \uc0c1\ud638 \uc791\uc6a9\ud558\ub3c4\ub85d \ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<p>Capella\uc5d0\uc11c \ucc44\ud305 \ub370\uc774\ud130\ub97c \uc800\uc7a5\ud560 \ubc84\ud0b7\uc744 \uc124\uc815\ud558\uace0 Capella \uc790\uaca9 \uc99d\uba85\uc744 \uc900\ube44\ud574 \ub450\uc5c8\ub294\uc9c0 \ud655\uc778\ud558\uc138\uc694. \ud56d\uc0c1 \uadf8\ub807\ub4ef\uc774 \uc790\uaca9 \uc99d\uba85\uc744 \ubc84\uc804 \uad00\ub9ac\uc5d0 \uc800\uc7a5\ud558\uc9c0 \ub9c8\uc138\uc694. \ub85c\uceec \uac1c\ubc1c \uc2dc \ud658\uacbd \ubcc0\uc218\ub97c \uc0ac\uc6a9\ud558\uc5ec \uc790\uaca9 \uc99d\uba85\uc744 \uacf5\uac1c\ub418\uc9c0 \uc54a\uace0 \uc548\uc804\ud558\uac8c \uc720\uc9c0\ud558\uc138\uc694.\u00a0<\/p>\n<p>\uc800\ud76c\ub294 \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc5d0\uc11c \ub124 \uac00\uc9c0 \uae30\ub2a5\uc744 \uad6c\ucd95\ud558\uace0 \uc788\uc2b5\ub2c8\ub2e4:<\/p>\n<ul>\n<li style=\"list-style-type: none;\">\n<ul>\n<li ><code>askAI<\/code> \ub97c \uc0ac\uc6a9\ud558\uc5ec \ub85c\uceec\uc5d0\uc11c \uc2e4\ud589\ub418\ub294 AI \ubaa8\ub378\uc5d0 \uba54\uc2dc\uc9c0\ub97c \uacf5\uae09\ud558\ub294 \ud504\ub85c\uc138\uc2a4\ub97c \ucea1\uc290\ud654\ud569\ub2c8\ub2e4.<\/li>\n<li ><code>storeChat<\/code> \uc744 \ud074\ub9ad\ud574 \ucc44\ud305 \ub0b4\uc5ed\uc744 \uce74\ud3a0\ub77c\ub85c \uc804\uc1a1\ud569\ub2c8\ub2e4.<\/li>\n<li ><code>fetchChatHistory<\/code> \ub97c \ud074\ub9ad\ud558\uc5ec \ucc44\ud305 \ub300\ud654 \uac80\uc0c9<\/li>\n<li ><code>\uba54\uc778<\/code> \ub97c \uc0ac\uc6a9\ud558\uc5ec \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc758 \uae30\ubcf8 \uc778\ud130\ud398\uc774\uc2a4 \uc5ed\ud560\uc744 \ud569\ub2c8\ub2e4.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>\uba3c\uc800 <code>\uba54\uc778<\/code> \ud568\uc218\ub97c \ucd94\uac00\ud558\uba74 \ub098\uba38\uc9c0\ub294 \ubaa8\ub450 \ub9c8\ubb34\ub9ac\ub429\ub2c8\ub2e4. \uc774 \ud568\uc218\ub294 \uc0ac\uc6a9\uc790\uac00 \uc5b8\uc81c\ub4e0\uc9c0 \uc885\ub8cc\ud560 \uc218 \uc788\ub294 \ub8e8\ud504\ub97c \ub9cc\ub4e4\uc5b4 \uc9c0\uc18d\uc801\uc778 \ucc44\ud305 \ud658\uacbd\uc744 \uc81c\uacf5\ud569\ub2c8\ub2e4:<\/p>\n<pre class=\"nums:false lang:default decode:true\">async function main() {\r\n\u00a0const { cluster, collection } = await connectToCouchbase();\r\n\r\n\u00a0\u00a0console.log(\"Self-Hosted AI Chatbot (Llama 3.2 + Capella)\");\r\n\u00a0\u00a0console.log(\"Type your message below. Type 'history' to view past chats or 'exit' to quit.\\n\");\r\n\r\n\u00a0\u00a0while (true) {\r\n\u00a0\u00a0\u00a0\u00a0const userMessage = readlineSync.question(\"&gt; \");\r\n\r\n\u00a0\u00a0\u00a0\u00a0if (userMessage.toLowerCase() === \"exit\") {\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0console.log(\"Goodbye!\");\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0break;\r\n\u00a0\u00a0\u00a0\u00a0}\r\n\r\n\u00a0\u00a0\u00a0\u00a0if (userMessage.toLowerCase() === \"history\") {\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0const history = await fetchChatHistory(cluster);\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0console.log(\"\\n\ud83d\udcdc Chat History:\");\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0history.forEach((chat) =&gt; {\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0console.log(`\ud83e\uddd1 ${chat.user}\\n\ud83e\udd16 ${chat.response}\\n`);\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0});\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0continue;\r\n\u00a0\u00a0\u00a0\u00a0}\r\n\r\n\u00a0\u00a0\u00a0\u00a0console.log(\"\ud83e\udd16 Thinking...\");\r\n\u00a0\u00a0\u00a0\u00a0const aiResponse = await askAI(userMessage);\r\n\u00a0\u00a0\u00a0\u00a0console.log(`\ud83e\udd16 ${aiResponse}\\n`);\r\n\r\n\u00a0\u00a0\u00a0\u00a0await storeChat(collection, userMessage, aiResponse);\r\n\u00a0\u00a0}\r\n}<\/pre>\n<p>\ubcf4\uc2dc\ub2e4\uc2dc\ud53c, \uc800\ud76c\ub294 Capella\uc758 \ub370\uc774\ud130 \uc800\uc7a5\uc18c \uc704\uc5d0 \uad6c\ucd95\ub41c \uae30\ub2a5, \uc989 \ucc44\ud305 \uc790\uccb4 \ub0b4\uc5d0\uc11c \uc774\uc804 \ucc44\ud305 \uae30\ub85d\uc744 \uac80\uc0c9\ud560 \uc218 \uc788\ub294 \uae30\ub2a5\uc744 \ub3c4\uc785\ud588\uc2b5\ub2c8\ub2e4. \uc774 \uae30\ub2a5\uc740 \uc0ac\uc6a9\uc790\uac00 \uc0c8 \uc138\uc158\uc744 \uc2dc\uc791\ud560 \ub54c\ub9c8\ub2e4 \ucc44\ud305 \ucee8\ud14d\uc2a4\ud2b8\ub97c \ub418\ucc3e\ub294 \ub370 \uc720\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<p>\uc774\uc81c \uc6b0\ub9ac\ub294 <code>\uba54\uc778<\/code> \ud568\uc218\ubd80\ud130 \uc2dc\uc791\ud558\uc5ec \uc774 \ud568\uc218\uac00 \ud638\ucd9c\ud558\ub294 \uc9c0\uc6d0 \ud568\uc218\ub97c \ub9cc\ub4e4\uc5b4 \ubcf4\uaca0\uc2b5\ub2c8\ub2e4. <code>askAI<\/code> \ud568\uc218\uc785\ub2c8\ub2e4:<\/p>\n<pre class=\"nums:false lang:default decode:true\">\ube44\ub3d9\uae30 \ud568\uc218 askAI(prompt) {\r\n  \ubc18\ud658 \uc0c8 \ud504\ub85c\ubbf8\uc2a4((\ud574\uacb0, \uac70\ubd80) =&gt; {\r\n    exec(\r\n      `docker \ubaa8\ub378 \uc2e4\ud589 ai\/llama3.3 \"${prompt}\"`,\r\n      (error, stdout, stderr) =&gt; {\r\n        if (error) {\r\n          console.error(`\ubaa8\ub378 \uc2e4\ud589 \uc911 \uc624\ub958: ${error.message}`);\r\n          reject(error);\r\n        }\r\n        if (stderr) {\r\n         console.error(`Docker stderr: ${stderr}`);\r\n        }\r\n        resolve(stdout.trim()); \/\/ AI \uc751\ub2f5 \ubc18\ud658\r\n      }\r\n    );\r\n  });\r\n}<\/pre>\n<p>\ub2e4\uc74c\uc73c\ub85c <code>storeChat<\/code> \ud568\uc218\uc785\ub2c8\ub2e4:<\/p>\n<pre class=\"nums:false lang:default decode:true\">\ube44\ub3d9\uae30 \ud568\uc218 storeChat(collection, userMessage, aiResponse) {\r\n  const chatDoc = {\r\n    \uc0ac\uc6a9\uc790: userMessage,\r\n    response: aiResponse,\r\n    timestamp: new Date().toISOString(),\r\n  };\r\n\r\n  await collection.upsert(`chat_${Date.now()}`, chatDoc);\r\n}<\/pre>\n<p>\ub9c8\uc9c0\ub9c9\uc73c\ub85c <code>fetchChatHistory<\/code> \ud568\uc218\uc785\ub2c8\ub2e4:<\/p>\n<pre class=\"nums:false lang:default decode:true\">async function fetchChatHistory(cluster, limit = 5) {\r\n\u00a0\u00a0const query = `\r\n\u00a0\u00a0\u00a0\u00a0SELECT user, response, timestamp FROM \\`chatbot\\`\r\n\u00a0\u00a0\u00a0\u00a0ORDER BY timestamp DESC\r\n\u00a0\u00a0\u00a0\u00a0LIMIT ${limit};\r\n\u00a0\u00a0`;\r\n\u00a0\u00a0const result = await cluster.query(query);\r\n\u00a0\u00a0return result.rows;\r\n}<\/pre>\n<p>\uae30\ub2a5\uc744 \uc644\ub8cc\ud55c \ud6c4\uc5d0\ub294 \ub2e4\uc74c\uc744 \ucd94\uac00\ud574\uc57c \ud569\ub2c8\ub2e4. <code>require<\/code> \ubb38\uc744 \ucd94\uac00\ud558\uace0 Couchbase Capella \ud074\ub7ec\uc2a4\ud130\uc5d0 \ub300\ud55c \uc5f0\uacb0\uc744 \uc0dd\uc131\ud569\ub2c8\ub2e4:<\/p>\n<pre class=\"nums:false lang:default decode:true\">const { exec } = require(\"child_process\");\r\nconst readlineSync = require(\"readline-sync\");\r\nconst couchbase = require(\"couchbase\");\r\nrequire(\"dotenv\").config();\r\n\r\n\ube44\ub3d9\uae30 \ud568\uc218 connectToCouchbase() {\r\n  try {\r\n    const cluster = await couchbase.connect(COUCHBASE_URL, {\r\n      username: COUCHBASE_USERNAME,\r\n      password: COUCHBASE_PASSWORD,\r\n    });\r\n    const bucket = cluster.bucket(\"chatbot\");\r\n    const collection = bucket.defaultCollection();\r\n    console.log(\"\uce74\uc6b0\uce58\ubca0\uc774\uc2a4 \uce74\ud3a0\ub77c\uc5d0 \uc5f0\uacb0\ub418\uc5c8\uc2b5\ub2c8\ub2e4\");\r\n    \ubc18\ud658 { \ud074\ub7ec\uc2a4\ud130, \uceec\ub809\uc158 };\r\n  } catch (err) {\r\n    console.error(\"\uce74\uc6b0\uce58\ubca0\uc774\uc2a4\uc5d0 \uc5f0\uacb0\ud558\uc9c0 \ubabb\ud588\uc2b5\ub2c8\ub2e4:\", err);\r\n    process.exit(1);\r\n  }\r\n}<\/pre>\n<p>\ub9c8\uc9c0\ub9c9\uc73c\ub85c, \uc2a4\ud06c\ub9bd\ud2b8 \ub9c8\uc9c0\ub9c9\uc5d0 <code>\uba54\uc778<\/code> \ud568\uc218\ub97c \uc0bd\uc785\ud558\uc5ec <code>main();<\/code> \ub97c \uc785\ub825\ud569\ub2c8\ub2e4.<\/p>\n<p>\uc644\ub8cc\ub418\uba74 \uac1c\uc778 \uc815\ubcf4\ub97c \ubcf4\ud638\ud558\uba74\uc11c \ub3d9\uc2dc\uc5d0 \uc800\uc7a5 \ubc0f \uac80\uc0c9\uc744 \uc704\ud574 Capella\ub97c \ud65c\uc6a9\ud558\ub294 \uc644\uc804\ud788 \uc900\ube44\ub41c AI \ucc57\ubd07\uc744 \uc790\uccb4 \uba38\uc2e0\uc5d0\uc11c \ud638\uc2a4\ud305\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<h2>\uc790\uccb4 \ud638\uc2a4\ud305 AI \ucc57\ubd07 \uc0ac\uc6a9\ud558\uae30<br \/>\n<\/h2>\n<p>\ub098\ub9cc\uc758 \ucc57\ubd07\uc744 \uc0ac\uc6a9\ud560 \uc900\ube44\uac00 \ub418\uc5c8\uc2b5\ub2c8\ub2e4! \ubcf4\ub0b4\ub294 \ubaa8\ub4e0 \ucffc\ub9ac\ub294 Llama 3.2 \ubaa8\ub378\uc744 \uc0ac\uc6a9\ud558\uc5ec \ucef4\ud4e8\ud130\uc5d0\uc11c \ub85c\uceec\ub85c\ub9cc \ucc98\ub9ac\ub429\ub2c8\ub2e4. \uc5b4\ub5a4 AI \uc81c\uacf5\uc5c5\uccb4\uc5d0\ub3c4 \uc6d0\uaca9\uc73c\ub85c \uc804\uc1a1\ub418\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.<\/p>\n<p>\uc0ac\uc6a9\ud574 \ubcfc \uc900\ube44\uac00 \ub418\uc5c8\ub2e4\uba74 \ub2e4\uc74c\uc744 \uc2e4\ud589\ud558\uc5ec \uc0ac\uc6a9\ud574 \ubcf4\uc138\uc694:<\/p>\n<p style=\"padding-left: 40px;\">\n<code>\ub178\ub4dc index.js # \ub610\ub294 \ud30c\uc77c \uc774\ub984\uc744 \uc9c0\uc815\ud569\ub2c8\ub2e4.<\/code>\n<\/p>\n<p>\uc2e4\ud589\ud558\uba74 \ub2e4\uc74c\uacfc \uac19\uc740 \ub0b4\uc6a9\uc774 \ud45c\uc2dc\ub429\ub2c8\ub2e4:<\/p>\n<p style=\"padding-left: 40px;\">\n<code>\uce74\uc6b0\uce58\ubca0\uc774\uc2a4 \uce74\ud3a0\ub77c\uc5d0 \uc5f0\uacb0<\/code><\/p>\n<p style=\"padding-left: 40px;\"><code>\uc790\uccb4 \ud638\uc2a4\ud305 AI \ucc57\ubd07(\ub77c\ub9c8 3.2 + \uc544\uce74\ud3a0\ub77c)<\/code><\/p>\n<p style=\"padding-left: 40px;\"><code>\uc544\ub798\uc5d0 \uba54\uc2dc\uc9c0\ub97c \uc785\ub825\ud569\ub2c8\ub2e4. \uc9c0\ub09c \ucc44\ud305\uc744 \ubcf4\ub824\uba74 '\uae30\ub85d'\uc744 \uc785\ub825\ud558\uace0 \uc885\ub8cc\ud558\ub824\uba74 '\uc885\ub8cc'\ub97c \uc785\ub825\ud569\ub2c8\ub2e4.<\/code><\/p>\n<p style=\"padding-left: 40px;\"><code>&gt;<\/code>\n<\/p>\n<p>\uc774\uc81c \uc9c8\ubb38\uc744 \ud558\uace0 \uc0c1\ud638\uc791\uc6a9\uc744 \uc2dc\uc791\ud558\uc138\uc694. \ub2e4\uc74c\uc740 \uc608\uc0c1\ud560 \uc218 \uc788\ub294 \uac04\ub2e8\ud55c \uc608\uc2dc\uc785\ub2c8\ub2e4:<\/p>\n<pre class=\"nums:false lang:default decode:true\">Connected to Couchbase Capella\r\n\r\n\ud83d\ude80 Self-Hosted AI Chatbot (Llama 3.2 + Capella)\r\nType your message below. Type 'history' to view past chats or 'exit' to quit.\r\n\r\n&gt; Should I pack a raincoat for Barcelona for a trip there at the end of March? Answer only with \"yes\" or \"no\".\r\n\ud83e\udd16 Thinking...\r\n\ud83e\udd16 Yes.\r\n\r\n&gt; Tell me why I should pack a raincoat for Barcelona at the end of March. Limit your answer to 15 words or less.\r\n\ud83e\udd16 Thinking...\r\n\ud83e\udd16 You may need a raincoat as March weather in Barcelona can be unpredictable and rainy, up to 10C.\r\n\r\n&gt; exit\r\n\ud83d\udc4b Goodbye!<\/pre>\n<p>\ub85c\uceec\uc5d0\uc11c AI \ubaa8\ub378\uc744 \uc2e4\ud589\ud558\ub294 Docker Model Runner\uc758 \uac1c\uc778 \uc815\ubcf4 \ubcf4\ud638 \uc6b0\uc120 \uc811\uadfc \ubc29\uc2dd\uacfc \ud568\uaed8 Couchbase Capella\uc758 \ud655\uc7a5\uc131 \ubc0f \ubcf4\uc548\uc744 \uc0ac\uc6a9\ud558\uba74 \uc0ac\uc6a9\uc790 \uac1c\uc778 \uc815\ubcf4\ub97c \uc6b0\uc120\uc2dc\ud558\ub294 \ub3d9\uc801 AI \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc744 \uad6c\ucd95\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \ub610\ud55c \uc790\uccb4 \uba38\uc2e0\uc5d0\uc11c \ubaa8\ub378\uc744 \uc2e4\ud589\ud558\uba74 \ub354 \ube60\ub978 \ucd94\ub860, \uc989\uac01\uc801\uc778 \uc0ac\uc6a9\uc790 \uc9c0\uc815, \ucd94\uac00 \uba54\ud0c0\ub370\uc774\ud130 \uc800\uc7a5 \uae30\ub2a5, \ucc57\ubd07\uc758 \ub3d9\uc791\uc744 \ubbf8\uc138 \uc870\uc815\ud560 \uc218 \uc788\ub294 \uc720\uc5f0\uc131\uc744 \ubaa8\ub450 \uc790\uccb4 \ud658\uacbd\uc5d0\uc11c \ub204\ub9b4 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<p>Capella\uc640 \ub3c4\ucee4 \ubaa8\ub378 \ub7ec\ub108\uc758 \uc870\ud569\uc740 \uc678\ubd80 API\uc5d0 \uc758\uc874\ud558\uc9c0 \uc54a\uace0\ub3c4 AI \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc744 \uad6c\ucd95\ud558\ub294 \ub370 \ud544\uc694\ud55c \uc18d\ub3c4, \uc81c\uc5b4 \ubc0f \uac1c\uc778\uc815\ubcf4 \ubcf4\ud638 \uae30\ub2a5\uc744 \uc81c\uacf5\ud569\ub2c8\ub2e4. \ucc57\ubd07\uc744 \ub9cc\ub4e4\ub4e0, \ub370\uc774\ud130\ub97c \ubd84\uc11d\ud558\ub4e0, AI \uae30\ubc18 \uc6cc\ud06c\ud50c\ub85c\ub97c \uc2e4\ud589\ud558\ub4e0, \uc774 \uc124\uc815\uc740 \uad6c\ucd95\ud558\ub294 \ubaa8\ub4e0 \uac83\uc774 \ud6a8\uc728\uc801\uc774\uace0 \ud655\uc7a5 \uac00\ub2a5\ud558\uba70 \uc644\ubcbd\ud558\uac8c \uc81c\uc5b4\ub418\ub3c4\ub85d \ubcf4\uc7a5\ud569\ub2c8\ub2e4. <\/p>\n<p>\uc720\uc77c\ud55c \uc9c8\ubb38\uc740 '\ubb34\uc5c7\uc744 \ub9cc\ub4e4 \uac83\uc778\uac00'\uc785\ub2c8\ub2e4.<\/p>\n<ul>\n<li style=\"list-style-type: none;\">\n<ul>\n<li><a href=\"https:\/\/www.couchbase.com\/blog\/ko\/developers\/community\/\">\uac1c\ubc1c\uc790 \ucee4\ubba4\ub2c8\ud2f0\uc640 \uc18c\ud1b5\ud558\uae30<\/a> \ub97c \ud074\ub9ad\ud558\uace0 \ubb34\uc5c7\uc744 \ub9cc\ub4e4\uace0 \uc788\ub294\uc9c0 \ubcf4\uc5ec\uc8fc\uc138\uc694!<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p><br style=\"font-weight: 400;\" \/><br style=\"font-weight: 400;\" \/><\/p>","protected":false},"excerpt":{"rendered":"<p>AI chatbots have become an essential tool for businesses and organizations. But most chatbot solutions depend on cloud-based models that introduce latency, API limitations, and perhaps most importantly, privacy concerns. What if you could run an AI chatbot entirely on [&hellip;]<\/p>","protected":false},"author":85356,"featured_media":17028,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[10123,10122,1815,9973],"tags":[9974],"ppma_author":[9985],"class_list":["post-17027","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-agentic-ai-apps","category-artificial-intelligence-ai","category-best-practices-and-tutorials","category-generative-ai-genai","tag-genai"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v26.0 (Yoast SEO v26.0) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Self-Hosted AI Chatbots with Docker and Couchbase Capella - The Couchbase Blog<\/title>\n<meta name=\"description\" content=\"Build a private, self-hosted AI chatbot using Docker Model Runner &amp; Couchbase Capella. Fast, flexible, and fully under your control\u2014no external APIs needed.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.couchbase.com\/blog\/ko\/self-hosted-ai-chatbot-docker-couchbase-capella\/\" \/>\n<meta property=\"og:locale\" content=\"ko_KR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Self-Hosted AI Chatbots with Docker and Couchbase Capella\" \/>\n<meta property=\"og:description\" content=\"Build a private, self-hosted AI chatbot using Docker Model Runner &amp; Couchbase Capella. Fast, flexible, and fully under your control\u2014no external APIs needed.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.couchbase.com\/blog\/ko\/self-hosted-ai-chatbot-docker-couchbase-capella\/\" \/>\n<meta property=\"og:site_name\" content=\"The Couchbase Blog\" \/>\n<meta property=\"article:published_time\" content=\"2025-04-10T15:08:45+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-06-13T23:36:10+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2025\/04\/blog-ai-agent-development.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"2400\" \/>\n\t<meta property=\"og:image:height\" content=\"1256\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Ben Greenberg, Senior Developer Evangelist\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Ben Greenberg, Senior Developer Evangelist\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"5\ubd84\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/self-hosted-ai-chatbot-docker-couchbase-capella\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/self-hosted-ai-chatbot-docker-couchbase-capella\/\"},\"author\":{\"name\":\"Ben Greenberg, Senior Developer Evangelist\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/48efa1524aec97312d92f65a270c255d\"},\"headline\":\"Self-Hosted AI Chatbots with Docker and Couchbase Capella\",\"datePublished\":\"2025-04-10T15:08:45+00:00\",\"dateModified\":\"2025-06-13T23:36:10+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/self-hosted-ai-chatbot-docker-couchbase-capella\/\"},\"wordCount\":954,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/self-hosted-ai-chatbot-docker-couchbase-capella\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2025\/04\/blog-ai-agent-development.jpg\",\"keywords\":[\"GenAI\"],\"articleSection\":[\"Agentic AI Applications\",\"Artificial Intelligence (AI)\",\"Best Practices and Tutorials\",\"Generative AI (GenAI)\"],\"inLanguage\":\"ko-KR\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/self-hosted-ai-chatbot-docker-couchbase-capella\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/self-hosted-ai-chatbot-docker-couchbase-capella\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/self-hosted-ai-chatbot-docker-couchbase-capella\/\",\"name\":\"Self-Hosted AI Chatbots with Docker and Couchbase Capella - The Couchbase Blog\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/self-hosted-ai-chatbot-docker-couchbase-capella\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/self-hosted-ai-chatbot-docker-couchbase-capella\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2025\/04\/blog-ai-agent-development.jpg\",\"datePublished\":\"2025-04-10T15:08:45+00:00\",\"dateModified\":\"2025-06-13T23:36:10+00:00\",\"description\":\"Build a private, self-hosted AI chatbot using Docker Model Runner & Couchbase Capella. Fast, flexible, and fully under your control\u2014no external APIs needed.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/self-hosted-ai-chatbot-docker-couchbase-capella\/#breadcrumb\"},\"inLanguage\":\"ko-KR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/self-hosted-ai-chatbot-docker-couchbase-capella\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"ko-KR\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/self-hosted-ai-chatbot-docker-couchbase-capella\/#primaryimage\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2025\/04\/blog-ai-agent-development.jpg\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2025\/04\/blog-ai-agent-development.jpg\",\"width\":2400,\"height\":1256},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/self-hosted-ai-chatbot-docker-couchbase-capella\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.couchbase.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Self-Hosted AI Chatbots with Docker and Couchbase Capella\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\",\"url\":\"https:\/\/www.couchbase.com\/blog\/\",\"name\":\"The Couchbase Blog\",\"description\":\"Couchbase, the NoSQL Database\",\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.couchbase.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"ko-KR\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\",\"name\":\"The Couchbase Blog\",\"url\":\"https:\/\/www.couchbase.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"ko-KR\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png\",\"width\":218,\"height\":34,\"caption\":\"The Couchbase Blog\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/48efa1524aec97312d92f65a270c255d\",\"name\":\"Ben Greenberg, Senior Developer Evangelist\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"ko-KR\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/c9bda12524045d12a5878a2ef3fbe0de\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2024\/06\/T024FJS4M-U075H3NTJUR-b4c321d902e2-512.jpeg\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2024\/06\/T024FJS4M-U075H3NTJUR-b4c321d902e2-512.jpeg\",\"caption\":\"Ben Greenberg, Senior Developer Evangelist\"},\"url\":\"https:\/\/www.couchbase.com\/blog\/ko\/author\/bengreenberg\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Self-Hosted AI Chatbots with Docker and Couchbase Capella - The Couchbase Blog","description":"Docker Model Runner \ubc0f Couchbase Capella\ub97c \uc0ac\uc6a9\ud558\uc5ec \ube44\uacf5\uac1c, \uc790\uccb4 \ud638\uc2a4\ud305 AI \ucc57\ubd07\uc744 \uad6c\ucd95\ud558\uc138\uc694. \ube60\ub974\uace0 \uc720\uc5f0\ud558\uba70 \uc644\ubcbd\ud558\uac8c \uc81c\uc5b4\ud560 \uc218 \uc788\uc73c\uba70 \uc678\ubd80 API\uac00 \ud544\uc694\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.couchbase.com\/blog\/ko\/self-hosted-ai-chatbot-docker-couchbase-capella\/","og_locale":"ko_KR","og_type":"article","og_title":"Self-Hosted AI Chatbots with Docker and Couchbase Capella","og_description":"Build a private, self-hosted AI chatbot using Docker Model Runner & Couchbase Capella. Fast, flexible, and fully under your control\u2014no external APIs needed.","og_url":"https:\/\/www.couchbase.com\/blog\/ko\/self-hosted-ai-chatbot-docker-couchbase-capella\/","og_site_name":"The Couchbase Blog","article_published_time":"2025-04-10T15:08:45+00:00","article_modified_time":"2025-06-13T23:36:10+00:00","og_image":[{"width":2400,"height":1256,"url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2025\/04\/blog-ai-agent-development.jpg","type":"image\/jpeg"}],"author":"Ben Greenberg, Senior Developer Evangelist","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Ben Greenberg, Senior Developer Evangelist","Est. reading time":"5\ubd84"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.couchbase.com\/blog\/self-hosted-ai-chatbot-docker-couchbase-capella\/#article","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/self-hosted-ai-chatbot-docker-couchbase-capella\/"},"author":{"name":"Ben Greenberg, Senior Developer Evangelist","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/48efa1524aec97312d92f65a270c255d"},"headline":"Self-Hosted AI Chatbots with Docker and Couchbase Capella","datePublished":"2025-04-10T15:08:45+00:00","dateModified":"2025-06-13T23:36:10+00:00","mainEntityOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/self-hosted-ai-chatbot-docker-couchbase-capella\/"},"wordCount":954,"commentCount":0,"publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/self-hosted-ai-chatbot-docker-couchbase-capella\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2025\/04\/blog-ai-agent-development.jpg","keywords":["GenAI"],"articleSection":["Agentic AI Applications","Artificial Intelligence (AI)","Best Practices and Tutorials","Generative AI (GenAI)"],"inLanguage":"ko-KR","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.couchbase.com\/blog\/self-hosted-ai-chatbot-docker-couchbase-capella\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.couchbase.com\/blog\/self-hosted-ai-chatbot-docker-couchbase-capella\/","url":"https:\/\/www.couchbase.com\/blog\/self-hosted-ai-chatbot-docker-couchbase-capella\/","name":"Self-Hosted AI Chatbots with Docker and Couchbase Capella - The Couchbase Blog","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/self-hosted-ai-chatbot-docker-couchbase-capella\/#primaryimage"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/self-hosted-ai-chatbot-docker-couchbase-capella\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2025\/04\/blog-ai-agent-development.jpg","datePublished":"2025-04-10T15:08:45+00:00","dateModified":"2025-06-13T23:36:10+00:00","description":"Docker Model Runner \ubc0f Couchbase Capella\ub97c \uc0ac\uc6a9\ud558\uc5ec \ube44\uacf5\uac1c, \uc790\uccb4 \ud638\uc2a4\ud305 AI \ucc57\ubd07\uc744 \uad6c\ucd95\ud558\uc138\uc694. \ube60\ub974\uace0 \uc720\uc5f0\ud558\uba70 \uc644\ubcbd\ud558\uac8c \uc81c\uc5b4\ud560 \uc218 \uc788\uc73c\uba70 \uc678\ubd80 API\uac00 \ud544\uc694\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.","breadcrumb":{"@id":"https:\/\/www.couchbase.com\/blog\/self-hosted-ai-chatbot-docker-couchbase-capella\/#breadcrumb"},"inLanguage":"ko-KR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/self-hosted-ai-chatbot-docker-couchbase-capella\/"]}]},{"@type":"ImageObject","inLanguage":"ko-KR","@id":"https:\/\/www.couchbase.com\/blog\/self-hosted-ai-chatbot-docker-couchbase-capella\/#primaryimage","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2025\/04\/blog-ai-agent-development.jpg","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2025\/04\/blog-ai-agent-development.jpg","width":2400,"height":1256},{"@type":"BreadcrumbList","@id":"https:\/\/www.couchbase.com\/blog\/self-hosted-ai-chatbot-docker-couchbase-capella\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.couchbase.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Self-Hosted AI Chatbots with Docker and Couchbase Capella"}]},{"@type":"WebSite","@id":"https:\/\/www.couchbase.com\/blog\/#website","url":"https:\/\/www.couchbase.com\/blog\/","name":"\uce74\uc6b0\uce58\ubca0\uc774\uc2a4 \ube14\ub85c\uadf8","description":"NoSQL \ub370\uc774\ud130\ubca0\uc774\uc2a4, Couchbase","publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.couchbase.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"ko-KR"},{"@type":"Organization","@id":"https:\/\/www.couchbase.com\/blog\/#organization","name":"\uce74\uc6b0\uce58\ubca0\uc774\uc2a4 \ube14\ub85c\uadf8","url":"https:\/\/www.couchbase.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"ko-KR","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png","width":218,"height":34,"caption":"The Couchbase Blog"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/48efa1524aec97312d92f65a270c255d","name":"\ubca4 \uadf8\ub9b0\ubc84\uadf8, \uc218\uc11d \uac1c\ubc1c\uc790 \uc5d0\ubc18\uc824\ub9ac\uc2a4\ud2b8","image":{"@type":"ImageObject","inLanguage":"ko-KR","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/c9bda12524045d12a5878a2ef3fbe0de","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2024\/06\/T024FJS4M-U075H3NTJUR-b4c321d902e2-512.jpeg","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2024\/06\/T024FJS4M-U075H3NTJUR-b4c321d902e2-512.jpeg","caption":"Ben Greenberg, Senior Developer Evangelist"},"url":"https:\/\/www.couchbase.com\/blog\/ko\/author\/bengreenberg\/"}]}},"authors":[{"term_id":9985,"user_id":85356,"is_guest":0,"slug":"bengreenberg","display_name":"Ben Greenberg, Senior Developer Evangelist","avatar_url":{"url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2024\/06\/T024FJS4M-U075H3NTJUR-b4c321d902e2-512.jpeg","url2x":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2024\/06\/T024FJS4M-U075H3NTJUR-b4c321d902e2-512.jpeg"},"author_category":"","last_name":"Greenberg, Senior Developer Evangelist","first_name":"Ben","job_title":"Senior Developer Evangelist","user_url":"","description":""}],"_links":{"self":[{"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/posts\/17027","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/users\/85356"}],"replies":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/comments?post=17027"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/posts\/17027\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/media\/17028"}],"wp:attachment":[{"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/media?parent=17027"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/categories?post=17027"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/tags?post=17027"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/ppma_author?post=17027"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}