{"id":15671,"date":"2024-05-07T08:05:04","date_gmt":"2024-05-07T15:05:04","guid":{"rendered":"https:\/\/www.couchbase.com\/blog\/?p=15671"},"modified":"2025-06-13T20:27:16","modified_gmt":"2025-06-14T03:27:16","slug":"twitter-thread-tldr-with-ai-part-1","status":"publish","type":"post","link":"https:\/\/www.couchbase.com\/blog\/ko\/twitter-thread-tldr-with-ai-part-1\/","title":{"rendered":"\ud2b8\uc704\ud130 \uc2a4\ub808\ub4dc \uae00 \uc694\uc57d: \uc778\uacf5\uc9c0\ub2a5\uacfc \ud568\uaed8? 1\ubd80"},"content":{"rendered":"<div class=\"mb-8 px-4 text-center font-heading md:mb-14 md:px-5 lg:px-8 xl:px-20\">\n<div class=\"mb-8 px-4 text-center font-heading md:mb-14 md:px-5 lg:px-8 xl:px-20\">\n<h2 class=\"text-2xl leading-snug text-slate-700 dark:text-slate-400 md:text-3xl xl:text-3xl\">\ub204\uac00 \uc2dc\uac04\uc774 \uc788\uaca0\uc5b4\uc694? (\uc608\uc0c1\ubcf4\ub2e4 \ub354 \uc624\ub798 \uac78\ub838\uae30 \ub54c\ubb38\uc5d0 \ud30c\ud2b8 1\ub3c4 \ub9c8\ucc2c\uac00\uc9c0\uc785\ub2c8\ub2e4 \ud83d\ude2c)<\/h2>\n<\/div>\n<p>\uce74\uc6b0\uce58\ubca0\uc774\uc2a4\uac00 \ucd5c\uadfc \ub3c4\uc785\ud55c <a href=\"https:\/\/www.couchbase.com\/blog\/ko\/products\/vector-search\/\">\ubca1\ud130 \uac80\uc0c9 \uc9c0\uc6d0<\/a>. \uadf8\ub9ac\uace0 \uc800\ub294 \uadf8\uac83\uc744 \uac00\uc9c0\uace0 \ub180 \ud551\uacc4\ub97c \ucc3e\uace0 \uc788\uc5c8\uc2b5\ub2c8\ub2e4. \ub9c8\uce68 \ucd5c\uadfc\uc5d0 \uac1c\ubc1c\uc790 \ub9c8\ucf00\ud305\uc5d0 \uad00\ud55c \ud6cc\ub96d\ud55c \ud2b8\uc704\ud130 \uc2a4\ub808\ub4dc\uac00 \uc788\uc5c8\uc2b5\ub2c8\ub2e4. \uc800\ub294 \uadf8 \ub0b4\uc6a9 \ub300\ubd80\ubd84\uc5d0 \uacf5\uac10\ud560 \uc218 \uc788\uc5c8\uc2b5\ub2c8\ub2e4. \uc815\ub9d0 \uba4b\uc9c4 \uae00\uc785\ub2c8\ub2e4. \ud300\uc6d0\ub4e4\uc774 \ub2e8\uc2dc\uac04\uc5d0 \ucd5c\ub300\ud55c \ud65c\uc6a9\ud560 \uc218 \uc788\ub3c4\ub85d \uc694\uc57d\ud560 \uc218 \uc788\uc744 \uac83 \uac19\uc544\uc694. \uc81c\uac00 \uc9c1\uc811 \uc694\uc57d\ubcf8\uc744 \uc791\uc131\ud560 \uc218\ub3c4 \uc788\uc8e0. \uc544\ub2c8\uba74 \uadf8\uac8c \uc81c\uac00 \ucc3e\ub358 \ubcc0\uba85\uc77c \uc218\ub3c4 \uc788\uc8e0.<\/p>\n<p>\uc800\uc640 \ub2e4\ub978 \ubd84\ub4e4\uc744 \uc704\ud574 LLM(\ub300\uaddc\ubaa8 \uc5b8\uc5b4 \ubaa8\ub378)\uc5d0\uac8c \uc774 \ud6cc\ub96d\ud55c \uae00\uc744 \uc694\uc57d\ud574 \ub2ec\ub77c\uace0 \ubd80\ud0c1\ud574 \ubcf4\uaca0\uc2b5\ub2c8\ub2e4. \uc774\ub860\uc801\uc73c\ub85c\ub294 \ub2e4\uc74c\uacfc \uac19\uc774 \uc9c4\ud589\ub418\uc5b4\uc57c \ud569\ub2c8\ub2e4:<\/p>\n<ol>\n<li style=\"list-style-type: none;\">\n<ol>\n<li>\ud2b8\uc717 \ubc1b\uae30<\/li>\n<li>LLM\uc73c\ub85c \ubca1\ud130\ub85c \ubcc0\ud658\ud558\uae30<\/li>\n<li>\ud2b8\uc717\uacfc \ubca1\ud130\ub97c \uce74\uc6b0\uce58\ubca0\uc774\uc2a4\uc5d0 \uc800\uc7a5\ud558\uae30<\/li>\n<li>\ucffc\ub9ac\ub97c \uc704\ud55c \uc778\ub371\uc2a4 \uc0dd\uc131<\/li>\n<li>LLM\uc5d0 \uc9c8\ubb38\ud558\uae30<\/li>\n<li>\uc774\ub97c \ubca1\ud130\ub85c \ubcc0\ud658<\/li>\n<li>\ubca1\ud130 \uac80\uc0c9\uc744 \uc2e4\ud589\ud558\uc5ec LLM\uc5d0 \ub300\ud55c \ucee8\ud14d\uc2a4\ud2b8\ub97c \uc5bb\uc2b5\ub2c8\ub2e4.<\/li>\n<li>\uc9c8\ubb38\uacfc \ucee8\ud14d\uc2a4\ud2b8\uc5d0\uc11c LLM \ud504\ub86c\ud504\ud2b8 \ub9cc\ub4e4\uae30<\/li>\n<li>\ud658\uc0c1\uc801\uc778 \ub2f5\ubcc0 \ubc1b\uae30<\/li>\n<\/ol>\n<\/li>\n<\/ol>\n<p>\uc774\uac83\uc740 \uae30\ubcf8\uc801\uc73c\ub85c RAG \uc6cc\ud06c\ud50c\ub85c\uc785\ub2c8\ub2e4. RAG\ub294 \uac80\uc0c9 \uc99d\uac15 \uc138\ub300\uc758 \uc57d\uc790\uc785\ub2c8\ub2e4. \uac1c\ubc1c\uc790\ub294 \ucee8\ud14d\uc2a4\ud2b8\ub97c \uc81c\uacf5\ud568\uc73c\ub85c\uc368 \ubcf4\ub2e4 \uc815\ud655\ud558\uace0 \uac15\ub825\ud55c LLM \uae30\ubc18 \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc744 \uad6c\ucd95\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<h2 id=\"heading-extracting-twitter-data\">\ud2b8\uc704\ud130 \ub370\uc774\ud130 \ucd94\ucd9c\ud558\uae30<\/h2>\n<p>\uac00\uc7a5 \uba3c\uc800 \ud2b8\uc704\ud130\uc5d0\uc11c \ub370\uc774\ud130\ub97c \uac00\uc838\uc640\uc57c \ud569\ub2c8\ub2e4. \uc0ac\uc2e4 API\ub97c \uad6c\ub3c5\ud558\uc9c0 \uc54a\ub294\ub2e4\uba74 \uc774 \ubd80\ubd84\uc774 \uac00\uc7a5 \uc5b4\ub824\uc6b4 \ubd80\ubd84\uc785\ub2c8\ub2e4. \ud558\uc9c0\ub9cc \uc624\ub798\ub41c \ub370\uc774\ud130\ub97c \uc2a4\ud06c\ub7a9\ud558\uba74 \uad1c\ucc2e\uc740 \uacb0\uacfc\ub97c \uc5bb\uc744 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc544\ub9c8\ub3c4 100%\ub9cc\ud07c \uc815\ud655\ud558\uc9c0\ub294 \uc54a\uaca0\uc9c0\ub9cc, \uad1c\ucc2e\uc740 \uc218\uc900\uc740 \ub420 \uac83\uc785\ub2c8\ub2e4. \uadf8\ub7fc \uc2dc\uc791\ud574 \ubd05\uc2dc\ub2e4.<\/p>\n<p>\uc81c\uac00 \uac00\uc7a5 \uc88b\uc544\ud558\ub294 IDE\ub97c <a href=\"https:\/\/plugins.jetbrains.com\/plugin\/22131-couchbase\" target=\"_blank\" rel=\"noopener\">\uce74\uc6b0\uce58\ubca0\uc774\uc2a4 \ud50c\ub7ec\uadf8\uc778<\/a> \ub97c \uc124\uce58\ud55c \ud6c4 \uc0c8 \ud30c\uc774\uc36c \uc2a4\ud06c\ub9bd\ud2b8\ub97c \uc0dd\uc131\ud558\uace0 <a href=\"https:\/\/github.com\/d60\/twikit\" target=\"_blank\" rel=\"noopener\">\ud2b8\uc704\ud0b7<\/a>\ub77c\ub294 \ud2b8\uc704\ud130 \uc2a4\ud06c\ub808\uc774\ud37c \ub77c\uc774\ube0c\ub7ec\ub9ac\ub97c \uc0ac\uc6a9\ud588\uc2b5\ub2c8\ub2e4. HTTP \uc624\ub958 429\uac00 \ubc1c\uc0dd\ud558\uae30 \uc804\uae4c\uc9c0\ub294 \ubaa8\ub4e0 \uac83\uc774 \uc798 \uc791\ub3d9\ud569\ub2c8\ub2e4. <em>\ub108\ubb34 \ub9ce\uc740 \uc694\uccad<\/em>. \ub108\ubb34 \uc5f4\uc2ec\ud788 \uc2a4\ud06c\ub7a9\ud588\uc2b5\ub2c8\ub2e4. \ub098\ub294 \uc7a1\ud614\uc2b5\ub2c8\ub2e4. \uc774\ub97c \uc644\ud654\ud560 \uc218 \uc788\ub294 \uba87 \uac00\uc9c0 \ubc29\ubc95\uc774 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<\/div>\n<ol>\n<li style=\"list-style-type: none;\">\n<ol>\n<li>\uba3c\uc800, \uc800\ucc98\ub7fc \uc815\uc2e0\uc5c6\uc774 \uc7ac\ub85c\uadf8\uc778\ud558\uc9c0 \ub9d0\uace0 \uc778\uc99d \ucfe0\ud0a4\ub97c \ud30c\uc77c\uc5d0 \uc800\uc7a5\ud558\uc5ec \uc7ac\uc0ac\uc6a9\ud558\uc138\uc694.<\/li>\n<li>\ub458\uc9f8, \uc628\ub77c\uc778 IDE\ub85c \uc804\ud658\ud558\uba74 IP\ub97c \ub354 \uc27d\uac8c \ubcc0\uacbd\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/li>\n<li>\uc14b\uc9f8, \ub300\uae30 \uc2dc\uac04\uc744 \ub3c4\uc785\ud558\uace0 \ubb34\uc791\uc704\ub85c \uc124\uc815\ud558\uc138\uc694. \ubb34\uc791\uc704\ub85c \ud558\ub294 \uac83\uc774 \ub3c4\uc6c0\uc774 \ub420\uc9c0 \ubaa8\ub974\uaca0\uc9c0\ub9cc \uc548 \ub420 \uc774\uc720\ub294 \uc5c6\uc2b5\ub2c8\ub2e4.<\/li>\n<\/ol>\n<\/li>\n<\/ol>\n<p>\ucd5c\uc885 \uc2a4\ud06c\ub9bd\ud2b8\ub294 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4:<\/p>\n<pre class=\"lang:python decode:true\" title=\"\ud2b8\uc704\ud0b7 \uc2a4\ud06c\ub9bd\ud2b8\ub97c \uc0ac\uc6a9\ud558\uc5ec \ud2b8\uc717\uc744 \uae30\ub85d\ud558\uba74 JSON\uc73c\ub85c \ub2f5\uae00\uc774 \uc804\uc1a1\ub429\ub2c8\ub2e4.\">twikit\uc5d0\uc11c \ud074\ub77c\uc774\uc5b8\ud2b8 \uac00\uc838\uc624\uae30\r\n\ub79c\ub364\uc5d0\uc11c randint \uac00\uc838\uc624\uae30\r\nimport json\r\n\uc2dc\uac04 \uac00\uc838\uc624\uae30\r\n\r\ndef get_json_tweet(t, parentid):\r\n    return {\r\n        'created_at': t.created_at,\r\n        'id': t.id,\r\n        'parent' : parentid,\r\n        'full_text': t.full_text,\r\n        'created_at': t.created_at,\r\n        'text': t.text,\r\n        'lang': t.lang,\r\n        'in_reply_to': t.in_reply_to,\r\n        'quote_count': t.quote_count,\r\n        'reply_count': t.reply_count,\r\n        'favorite_count': t.favorite_count,\r\n        'view_count': t.view_count,\r\n        '\ud574\uc2dc\ud0dc\uadf8': t.\ud574\uc2dc\ud0dc\uadf8,\r\n        'user' : {\r\n            'id' : t.user.id,\r\n            'name' : t.user.name,\r\n            'screen_name ' : t.user.screen_name ,\r\n            'url ' : t.user.url ,\r\n        },\r\n    }\r\n\r\ndef get_replies(id, total_replies, recordTweetid):\r\n    tweet = client.get_tweet_by_id(id)\r\n    if( tweet.reply_count == 0):\r\n        return\r\n\r\n    # \ubaa8\ub4e0 \ub2f5\uae00 \uac00\uc838\uc624\uae30\r\n    all_replies = []\r\n    \ud2b8\uc717 = \ud2b8\uc717.\ub2f5\uae00\r\n    all_replies += \ud2b8\uc717\r\n\r\n    \ub3d9\uc548 len(tweets) != 0:\r\n        try:\r\n            time.sleep(randint(10,20))\r\n            tweets = tweets.next()\r\n            all_replies += tweets\r\n        \uc778\ub371\uc2a4 \uc5d0\ub7ec\ub97c \uc81c\uc678\ud569\ub2c8\ub2e4:\r\n            print(\"\ubc30\uc5f4 \uc778\ub371\uc2a4 \uc624\ub958\")\r\n            break\r\n\r\n    print(len(all_replies))\r\n    print(all_replies)\r\n    all_replies\uc758 t\uc5d0 \ub300\ud574\r\n        jsonTweet = get_json_tweet(t, id)\r\n        if (recordTweetid\uc5d0\uc11c t.id\uac00 \uc544\ub2cc \uacbd\uc6b0) \ubc0f ( t.in_reply_to == id):\r\n            time.sleep(randint(10,20))\r\n            get_replies(t.id, total_replies, recordTweetid)\r\n        f.write(',\\n')\r\n        json.dump(jsonTweet, f, ensure_ascii=False, indent=4)\r\n\r\n\r\n\r\nclient = Client('en-US')\r\n\r\n## \uc2a4\ud06c\ub9bd\ud2b8\ub97c \ucc98\uc74c \uc2e4\ud589\ud55c \ud6c4 \uc774 `login` \ubd80\ubd84\uc744 \uc8fc\uc11d \ucc98\ub9ac\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4(\uadf8\ub9ac\uace0 `cookies.json`` \ud30c\uc77c\uc774 \uc788\uc2b5\ub2c8\ub2e4).\r\nclient.login(\r\n    auth_info_1='\uc0ac\uc6a9\uc790 \uc774\ub984',\r\n    password='secret',\r\n)\r\n\r\nclient.save_cookies('cookies.json');\r\n# client.load_cookies(path='cookies.json');\r\n\r\nreplies = []\r\nrecordTweetid = []\r\nopen('data2.json', 'a', encoding='utf-8')\uc744 f\ub85c \uc124\uc815\ud569\ub2c8\ub2e4:\r\n    get_replies('1775913633064894669', replies, recordTweetid)\r\n<\/pre>\n<p>429\ub97c \ud53c\ud558\ub294 \uac83\uc740 \uc57d\uac04 \uace0\ud1b5\uc2a4\ub7ec\uc6e0\uace0 \uba87 \ubc88\uc758 \ubc18\ubcf5\uc744 \uac70\ucce4\uc9c0\ub9cc \uacb0\uad6d\uc5d0\ub294 \ub300\ubd80\ubd84 \uc791\ub3d9\ud558\ub294 \uac83\uc744 \uc5bb\uc5c8\uc2b5\ub2c8\ub2e4. \uc2dc\uc791 \ub300\uad04\ud638\uc640 \ub9c8\uce68 \ub300\uad04\ud638\ub97c \ucd94\uac00\ud558\uc5ec \uc720\ud6a8\ud55c JSON \ubc30\uc5f4\ub85c \ubc14\uafb8\uae30\ub9cc \ud558\uba74 \ub418\uc5c8\uc2b5\ub2c8\ub2e4:<\/p>\n<pre class=\"lang:js decode:true\" title=\"JSON \ub370\uc774\ud130\ub85c \ud2b8\uc717\ud558\uae30\">[\r\n    {\r\n         \"created_at\": \"Thu Apr 04 16:15:02 +0000 2024\",\r\n         \"id\": \"1775920020377502191\",\r\n         \"full_text\": null,\r\n         \"text\": \"@\ucf08\uc2dc\ud558\uc774\ud0c0\uc6cc SOCKS! \uc800\uc5d0\uac8c \uc591\ub9d0\uc744 \uc81c\uc548\ud558\ub294 \uccab \ubc88\uc9f8 \ud68c\uc0ac\uc5d0 \uc218\ubc31\ub9cc \ub2ec\ub7ec\ub97c \ub358\uc9c0\uaca0\uc2b5\ub2c8\ub2e4!\\n\\n\uc911\uc694\ud55c \ucc38\uace0 \uc0ac\ud56d\uc785\ub2c8\ub2e4: \uc800\ub294 \uc218\ubc31\ub9cc \ub2ec\ub7ec\uac00 \uc5c6\uc2b5\ub2c8\ub2e4! \\\ubb38\uc81c\uac00 \uc788\ub294 \uac83 \uac19\uc544\uc694.\",\r\n         \"lang\": \"en\",\r\n         \"in_reply_to\": \"1775913633064894669\",\r\n         \"quote_count\": 1,\r\n         \"reply_count\": 3,\r\n         \"favorite_count\": 23,\r\n         \"view_count\": \"4658\",\r\n         \"\ud574\uc2dc\ud0dc\uadf8\": [],\r\n         \"user\": {\r\n             \"id\": \"4324751\",\r\n             \"name\": \"\uc870\uc26c \ub871\",\r\n             \"screen_name \": \"\uc2a4\ud0c0\ubc85\uc2a4\ub9e8\",\r\n    \"url \": \"https:\/\/t.co\/PrSomoWx53\"\r\n         }\r\n    },\r\n...\r\n]\r\n<\/pre>\n<p>\uc591\ub9d0\uc740 \uc544\uc774\ub7ec\ub2c8\uc640 \ud568\uaed8 \uac1c\ubc1c\uc790 \ub9c8\ucf00\ud305\uc5d0\uc11c \uc6b0\ub9ac\uac00 \ud558\ub294 \uc77c\uc758 \ud575\uc2ec\uc785\ub2c8\ub2e4.<\/p>\n<p>\uc774\uc81c \uac1c\ubc1c \ub9c8\ucf00\ud305 \ud56b \ud14c\uc774\ud06c\uac00 \ubaa8\ub450 \ud3ec\ud568\ub41c JSON \ubb38\uc11c \ubc30\uc5f4\uc774 \ud3ec\ud568\ub41c \ud30c\uc77c\uc774 \uc0dd\uacbc\uc2b5\ub2c8\ub2e4. \ub2e4\uc74c\uc740 \ubb34\uc5c7\uc77c\uae4c\uc694?<\/p>\n<h2 id=\"heading-turning-tweets-in-vectors\">\ud2b8\uc717\uc744 \ubca1\ud130\ub85c \uc804\ud658\ud558\uae30<\/h2>\n<p>LLM\uc5d0\uc11c \ucd94\uac00 \ucee8\ud14d\uc2a4\ud2b8\ub85c \uc0ac\uc6a9\ud560 \uc218 \uc788\ub3c4\ub85d \ud558\ub824\uba74 \uc774\ub97c \ubca1\ud130\ub85c \ubcc0\ud658\ud574\uc57c \ud569\ub2c8\ub2e4. <em>\uc784\ubca0\ub529<\/em>. \uae30\ubcf8\uc801\uc73c\ub85c 0\uacfc 1 \uc0ac\uc774\uc758 \uc2ed\uc9c4\uc218 \uac12 \ubc30\uc5f4\uc785\ub2c8\ub2e4. \uc774 \ubaa8\ub4e0 \uac83\uc774 \uac80\uc0c9 \uc99d\uac15 \uc0dd\uc131, \uc989 RAG\ub97c \uac00\ub2a5\ud558\uac8c \ud569\ub2c8\ub2e4. \ubaa8\ub4e0 LLM\uc5d0\ub294 \ud14d\uc2a4\ud2b8, \uc624\ub514\uc624 \ub610\ub294 \ube44\ub514\uc624 \ub370\uc774\ud130\uc640 \uac19\uc740 \uac1d\uccb4\uc758 \uace0\uc720\ud55c \ud45c\ud604\uc774 \uc788\uae30 \ub54c\ubb38\uc5d0 \ubcf4\ud3b8\uc801\uc778 \uac83\uc740 \uc544\ub2d9\ub2c8\ub2e4. \uadf9\ub3c4\ub85c \uac8c\uc73c\ub974\uace0 \uadf8 \uacf5\uac04\uc5d0\uc11c \ubb34\uc2a8 \uc77c\uc774 \uc77c\uc5b4\ub098\uace0 \uc788\ub294\uc9c0 \uc54c\uc9c0 \ubabb\ud558\uae30 \ub54c\ubb38\uc5d0 \uc800\ub294 <a href=\"https:\/\/openai.com\">OpenAI\/ChatGPT<\/a>. 2017\ub144\uc758 \uc790\ubc14\uc2a4\ud06c\ub9bd\ud2b8 \ud504\ub808\uc784\uc6cc\ud06c\ubcf4\ub2e4 \ub9e4\uc8fc \ub354 \ub9ce\uc740 \ubaa8\ub378\uc774 \ucd9c\uc2dc\ub418\uace0 \uc788\ub294 \uc148\uc785\ub2c8\ub2e4.<\/p>\n<p>\uc5b4\uca0c\ub4e0 \uc800\ub294 OpenAI \uacc4\uc815\uc744 \ub9cc\ub4e4\uace0 API \ud0a4\ub97c \uc0dd\uc131\ud55c \ub2e4\uc74c, \ubb34\ub8cc\ub77c\ub3c4 API\ub97c \uc0ac\uc6a9\ud560 \uc218 \uc5c6\uc73c\ub2c8 \uba87 \ub2ec\ub7ec\ub97c \ucd94\uac00\ud588\uc2b5\ub2c8\ub2e4. \uadf8\ub7f0 \ub2e4\uc74c \ud2b8\uc717\uc744 \ubca1\ud130\ub85c \ubcc0\ud658\ud560 \uc900\ube44\uac00 \ub418\uc5c8\uc2b5\ub2c8\ub2e4. API\ub97c \ud1b5\ud574 \uc784\ubca0\ub529\ud558\ub294 \uac00\uc7a5 \uc9e7\uc740 \uacbd\ub85c\ub294 curl\uc744 \uc0ac\uc6a9\ud558\ub294 \uac83\uc785\ub2c8\ub2e4. \ub2e4\uc74c\uacfc \uac19\uc774 \uc0dd\uae41\ub2c8\ub2e4:<\/p>\n<pre class=\"lang:sh decode:true\" title=\"\uceec\uc744 \uc0ac\uc6a9\ud558\uc5ec \uc784\ubca0\ub529 \ub9cc\ub4e4\uae30\">curl https:\/\/api.openai.com\/v1\/embeddings -H \"Authorization: Bearer $OPENAI_API_KEY\" \\ \\\r\n -H \"Content-Type: application\/json\" \\.\r\n   -d '{\"\uc785\ub825\": \" SOCKS! \uc800\uc5d0\uac8c \uc591\ub9d0\uc744 \uc81c\uacf5\ud558\ub294 \uccab \ubc88\uc9f8 \ud68c\uc0ac\uc5d0 \uc218\ubc31\ub9cc \ub2ec\ub7ec\ub97c \ub358\uc9c0\uaca0\uc2b5\ub2c8\ub2e4!\\n\\n\uc911\uc694\ud55c \ucc38\uace0 \uc0ac\ud56d\uc785\ub2c8\ub2e4: \uc800\ub294 \uc218\ubc31\ub9cc \ub2ec\ub7ec\uac00 \uc5c6\uc2b5\ub2c8\ub2e4! \\\ubb38\uc81c\uac00 \uc788\ub294 \uac83 \uac19\uc544\uc694.\", \"model\": \"text-embedding-ada-002\"}'\r\n{\r\n  \"object\": \"list\",\r\n  \"data\": [\r\n{\r\n   \"object\": \"\uc784\ubca0\ub529\",\r\n   \"index\": 0,\r\n   \"\uc784\ubca0\ub529\": [\r\n     -0.008340064,\r\n     -0.03142008,\r\n     0.01558878,\r\n    ...\r\n    0.0007338819,\r\n     -0.01672055\r\n   ]\r\n}\r\n  ],\r\n  \"model\": \"text-embedding-ada-002\",\r\n  \"\uc0ac\uc6a9\ubc95\": {\r\n\"\ud504\ub86c\ud504\ud2b8_\ud1a0\ud070\": 40,\r\n\"\ucd1d_\ud1a0\ud070\": 40\r\n  }\r\n}\r\n<\/pre>\n<p>\uc5ec\uae30\uc11c JSON \uc785\ub825\uc5d0\ub294 \ubca1\ud130\ub85c \ubcc0\ud658\ud560 \uc785\ub825 \ud544\ub4dc\uc640 \ud14d\uc2a4\ud2b8\ub97c \ubca1\ud130\ub85c \ubcc0\ud658\ud558\ub294 \ub370 \uc0ac\uc6a9\ud560 \ubaa8\ub378\uc744 \ucc38\uc870\ud558\ub294 \ubaa8\ub378 \ud544\ub4dc\uac00 \uc788\ub294 \uac83\uc744 \ubcfc \uc218 \uc788\uc2b5\ub2c8\ub2e4. \ucd9c\ub825\uc740 \ubca1\ud130, \uc0ac\uc6a9\ub41c \ubaa8\ub378 \ubc0f API \uc0ac\uc6a9 \ud1b5\uacc4\ub97c \ubc18\ud658\ud569\ub2c8\ub2e4.<\/p>\n<p>\ud658\uc0c1\uc801\uc774\uc8e0, \uc774\uc81c \uc5b4\ub5bb\uac8c \ud558\ub098\uc694? \uc774\ub97c \ubca1\ud130\ub85c \ubcc0\ud658\ud558\ub294 \uac83\uc740 \ube44\uc6a9\uc774 \ub9ce\uc774 \ub4ed\ub2c8\ub2e4. \ub098\uc911\uc5d0 \uc7ac\uc0ac\uc6a9\ud560 \uc218 \uc788\ub3c4\ub85d \ub370\uc774\ud130\ubca0\uc774\uc2a4\uc5d0 \uc800\uc7a5\ud558\ub294 \uac83\uc774 \uc88b\uc2b5\ub2c8\ub2e4. \ub610\ud55c \ud558\uc774\ube0c\ub9ac\ub4dc \uac80\uc0c9\uacfc \uac19\uc740 \uba4b\uc9c4 \ucd94\uac00 \uae30\ub2a5\ub3c4 \uc27d\uac8c \uc5bb\uc744 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<p>\uc774\ub97c \ud655\uc778\ud558\ub294 \ubc29\ubc95\uc5d0\ub294 \uba87 \uac00\uc9c0\uac00 \uc788\uc2b5\ub2c8\ub2e4. \uc9c0\ub8e8\ud55c \uc218\ub3d9 \ubc29\uc2dd\uc774 \uc788\uc9c0\ub9cc \ubc30\uc6b0\uae30\uc5d0\ub294 \uc88b\uc2b5\ub2c8\ub2e4. \uadf8\ub9ac\uace0 \uc0b6\uc744 \ub354 \uc27d\uac8c \ub9cc\ub4e4\uc5b4\uc8fc\ub294 \ub77c\uc774\ube0c\ub7ec\ub9ac\uc640 \ub3c4\uad6c\ub97c \uc0ac\uc6a9\ud558\ub294 \ubc29\ubc95\uc774 \uc788\uc2b5\ub2c8\ub2e4. \uc800\ub294 \uc2e4\uc81c\ub85c <a href=\"https:\/\/www.langchain.com\">\ub7ad\uccb4\uc778<\/a> \uc81c \uc0b6\uc744 \ub354 \uc27d\uac8c \ub9cc\ub4e4\uc5b4 \uc904 \uac70\ub77c\uace0 \uc0dd\uac01\ud588\uace0, \uc2e4\uc81c\ub85c \uadf8\ub807\uac8c \ub418\uc5c8\uc9c0\ub9cc '\uc870\uae08' \uae38\uc744 \uc783\uc5c8\uc2b5\ub2c8\ub2e4. \uadf8\ub798\uc11c \uc9d1\ub2e8 \ud559\uc2b5\uc758 \uc774\uc810\uc744 \uc704\ud574 \uc218\ub3d9 \ubc29\uc2dd\ubd80\ud130 \uc2dc\uc791\ud558\uaca0\uc2b5\ub2c8\ub2e4. JSON \ubb38\uc11c \ubc30\uc5f4\uc774 \uc788\uace0, \uadf8 \ub0b4\uc6a9\uc744 \ubca1\ud130\ud654\ud558\uc5ec Couchbase\uc5d0 \uc800\uc7a5\ud55c \ub2e4\uc74c \ub2e4\ub978 \ubca1\ud130\ub85c \ucffc\ub9ac\ud560 \uc218 \uc788\uc5b4\uc57c \ud569\ub2c8\ub2e4.<\/p>\n<h2 id=\"heading-loading-the-tweets-in-a-vector-store-like-couchbase\">\uce74\uc6b0\uce58\ubca0\uc774\uc2a4\uc640 \uac19\uc740 \ubca1\ud130 \uc2a4\ud1a0\uc5b4\uc5d0\uc11c \ud2b8\uc717 \ub85c\ub4dc\ud558\uae30<\/h2>\n<p>\uc790\ubc14\ub098 \uc790\ubc14\uc2a4\ud06c\ub9bd\ud2b8\ub85c\ub3c4 \ub7ad\uccb4\uc778 \uad6c\ud604\uc744 \ubcfc \uc218 \uc788\uc9c0\ub9cc, \uc800\ub294 \ud30c\uc774\uc36c\uc744 \ub354 \uc798\ud574\uc57c \ud55c\ub2e4\uace0 \uc0dd\uac01\ud558\uae30 \ub54c\ubb38\uc5d0 \ud30c\uc774\uc36c\uc744 \uc0ac\uc6a9\ud558\ub824\uace0 \ud569\ub2c8\ub2e4. \uadf8\ub9ac\uace0 \uac00\uc7a5 \uba3c\uc800 \ub2e4\ub8e8\uace0 \uc2f6\uc740 \uac83\uc740 \uce74\uc6b0\uce58\ubca0\uc774\uc2a4\uc5d0 \uc5f0\uacb0\ud558\ub294 \ubc29\ubc95\uc785\ub2c8\ub2e4:<\/p>\n<pre class=\"lang:python decode:true\" title=\"Python\uc73c\ub85c Couchbase\uc5d0 \uc5f0\uacb0\">def connect_to_couchbase(connection_string, db_username, db_password):\r\n    \"\"\"\uce74\uc6b0\uce58\ubca0\uc774\uc2a4\uc5d0 \uc5f0\uacb0\"\"\"\r\n    couchbase.cluster\uc5d0\uc11c Cluster\ub97c \uac00\uc838\uc635\ub2c8\ub2e4.\r\n    couchbase.auth\uc5d0\uc11c PasswordAuthenticator\ub97c \uac00\uc838\uc635\ub2c8\ub2e4.\r\n    from couchbase.options import ClusterOptions\r\n    from datetime import timedelta\r\n\r\n    auth = PasswordAuthenticator(db_username, db_password)\r\n    options = ClusterOptions(auth)\r\n    \uc5f0\uacb0 \ubb38\uc790\uc5f4 = \uc5f0\uacb0 \ubb38\uc790\uc5f4\r\n    \ud074\ub7ec\uc2a4\ud130 = \ud074\ub7ec\uc2a4\ud130(\uc5f0\uacb0 \ubb38\uc790\uc5f4, \uc635\uc158)\r\n    # \ud074\ub7ec\uc2a4\ud130\ub97c \uc0ac\uc6a9\ud560 \uc900\ube44\uac00 \ub420 \ub54c\uae4c\uc9c0 \uae30\ub2e4\ub9bd\ub2c8\ub2e4.\r\n    cluster.wait_until_ready(timedelta(\ucd08=5))\r\n    \ud074\ub7ec\uc2a4\ud130 \ubc18\ud658\r\n\r\nname == \"__main__\":\r\n    # \ud658\uacbd \ubcc0\uc218 \ub85c\ub4dc\r\n    DB_CONN_STR = os.getenv(\"DB_CONN_STR\")\r\n    DB_USERNAME = os.getenv(\"DB_USERNAME\")\r\n    DB_PASSWORD = os.getenv(\"DB_PASSWORD\")\r\n    DB_BUCKET = os.getenv(\"DB_BUCKET\")\r\n    DB_SCOPE = os.getenv(\"DB_SCOPE\")\r\n    DB_COLLECTION = os.getenv(\"DB_COLLECTION\")\r\n    # \uce74\uc6b0\uce58\ubca0\uc774\uc2a4 \ubca1\ud130 \uc2a4\ud1a0\uc5b4\uc5d0 \uc5f0\uacb0\r\n    cluster = connect_to_couchbase(DB_CONN_STR, DB_USERNAME, DB_PASSWORD)\r\n    bucket = cluster.bucket(DB_BUCKET)\r\n    scope = bucket.scope(DB_SCOPE)\r\n    collection = scope.collection(DB_COLLECTION)\r\n<\/pre>\n<p>\uc774 \ucf54\ub4dc\uc5d0\uc11c \ub2e4\uc74c\uc744 \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. <em>CONNECT_TO_COUCHBASE<\/em> \uba54\uc11c\ub4dc\ub97c \ud5c8\uc6a9\ud558\ub294 <em>\uc5f0\uacb0 \ubb38\uc790\uc5f4<\/em>, <em>\uc0ac\uc6a9\uc790 \uc774\ub984<\/em> \uadf8\ub9ac\uace0 <em>\ube44\ubc00\ubc88\ud638<\/em>. \uc774 \ubaa8\ub4e0 \uac83\uc740 \ucc98\uc74c\uc5d0 \ub85c\ub4dc\ub41c \ud658\uacbd \ubcc0\uc218\uc5d0 \uc758\ud574 \uc81c\uacf5\ub429\ub2c8\ub2e4. \ud074\ub7ec\uc2a4\ud130 \uac1d\uccb4\uac00 \uc788\uc73c\uba74 \uc5f0\uacb0\ub41c \ubc84\ud0b7, \ubc94\uc704 \ubc0f \uceec\ub809\uc158\uc744 \uac00\uc838\uc62c \uc218 \uc788\uc2b5\ub2c8\ub2e4. Couchbase\uc5d0 \uc775\uc219\ud558\uc9c0 \uc54a\uc73c\uc2dc\ub2e4\uba74, \uceec\ub809\uc158\uc740 RDBMS \ud14c\uc774\ube14\uacfc \uc720\uc0ac\ud569\ub2c8\ub2e4. \ubc94\uc704\ub294 \ubc94\uc704 \uc218\ub9cc\ud07c \ub9ce\uc740 \uceec\ub809\uc158\uacfc \ubc84\ud0b7\uc744 \uac00\uc9c8 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc774\ub7ec\ud55c \uc138\ubd84\uc131\uc740 \uc5ec\ub7ec \uac00\uc9c0 \uc774\uc720(\uba40\ud2f0\ud14c\ub10c\uc2dc, \ube60\ub978 \ub3d9\uae30\ud654, \ubc31\uc5c5 \ub4f1)\ub85c \uc720\uc6a9\ud569\ub2c8\ub2e4.<\/p>\n<p>\uceec\ub809\uc158\uc744 \uac00\uc838\uc624\uae30 \uc804\uc5d0 \ud55c \uac00\uc9c0 \ub354 \ud574\uc57c \ud560 \uc77c\uc774 \uc788\uc2b5\ub2c8\ub2e4. \ud14d\uc2a4\ud2b8\ub97c \ubca1\ud130\ub85c \ubcc0\ud658\ud558\ub294 \ucf54\ub4dc\uac00 \ud544\uc694\ud569\ub2c8\ub2e4. OpenAI \ud074\ub77c\uc774\uc5b8\ud2b8\ub97c \uc0ac\uc6a9\ud558\uba74 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4:<\/p>\n<pre class=\"lang:python decode:true\" title=\"OpenAI \uc124\uc815\">\uc5d0\uc11c OpenAI \uac00\uc838\uc624\uae30\r\n\r\n    def get_embedding(text, model=\"text-embedding-ada-002\"):\r\n        text = text.replace(\"\\n\", \" \")\r\n        return client.embeddings.create(input = [text], model=model).data[0].embedding\r\n\r\n    client = OpenAI()<\/pre>\n<p>\uc774\uac83\uc740 \uc55e\uc11c \uceec \ud638\ucd9c\uacfc \ube44\uc2b7\ud55c \uc791\uc5c5\uc744 \uc218\ud589\ud569\ub2c8\ub2e4. \ub2e4\ub9cc <strong>OPENAI_API_KEY <\/strong>\ud658\uacbd \ubcc0\uc218\ub97c \uc124\uc815\ud574\uc57c \ud074\ub77c\uc774\uc5b8\ud2b8\uac00 \uc791\ub3d9\ud569\ub2c8\ub2e4.<\/p>\n<p>\uc774\uc81c \uc0dd\uc131\ub41c \uc784\ubca0\ub529\uc744 \uc0ac\uc6a9\ud558\uc5ec JSON \ud2b8\uc717\uc5d0\uc11c Couchbase \ubb38\uc11c\ub97c \ub9cc\ub4dc\ub294 \ubc29\ubc95\uc744 \uc0b4\ud3b4\ubcf4\uaca0\uc2b5\ub2c8\ub2e4.<\/p>\n<pre class=\"lang:python decode:true\" title=\"\ud2b8\uc717\uacfc \uc5c5\uc11c\ud2b8\uac00 \ud3ec\ud568\ub41c JSON \ud30c\uc77c\uc744 Couchbase\ub85c \ud30c\uc2f1\ud569\ub2c8\ub2e4.\">    # JSON \ud30c\uc77c\uc744 \uc5f4\uace0 \ud2b8\uc717\uc744 \ub370\uc774\ud130\uc5d0 JSON \ubc30\uc5f4\ub85c \ub85c\ub4dc\ud569\ub2c8\ub2e4.\r\n    \uc5d0\uc11c open('data.json')\uc744 f\ub85c \uc0ac\uc6a9\ud569\ub2c8\ub2e4:\r\n        data = json.load(f)\r\n\r\n    # \ub8e8\ud504\ub97c \ubc18\ubcf5\ud558\uc5ec JSON\uc5d0\uc11c \uac1d\uccb4\ub97c \uc0dd\uc131\ud569\ub2c8\ub2e4.\r\n    \uc5d0\uc11c \uac1d\uccb4\ub97c \uc0dd\uc131\ud569\ub2c8\ub2e4:\r\n        text = tweet['text']\r\n        \uc804\uccb4_\ud14d\uc2a4\ud2b8 = \ud2b8\uc717['\uc804\uccb4_\ud14d\uc2a4\ud2b8']\r\n        id = tweet['id']\r\n        full_text\uac00 None\uc774 \uc544\ub2cc \uacbd\uc6b0\r\n            \uc784\ubca0\ub529 = get_embedding(full_text)\r\n            textToEmbed = \uc804\uccb4 \ud14d\uc2a4\ud2b8\r\n        else:\r\n            embedding = get_embedding(text)\r\n            textToEmbed = \ud14d\uc2a4\ud2b8\r\n        document = {\r\n            \"\uba54\ud0c0\ub370\uc774\ud130\": \ud2b8\uc717,\r\n            \"text\": textToEmbed,\r\n            \"\uc784\ubca0\ub529\": \uc784\ubca0\ub529\r\n        }\r\n        collection.upsert(\ud0a4 = id, \uac12 = \ubb38\uc11c)\r\n<\/pre>\n<p>\ubb38\uc11c\uc5d0\ub294 \uc138 \uac1c\uc758 \ud544\ub4dc\uac00 \uc788\uc2b5\ub2c8\ub2e4, <em>\uba54\ud0c0\ub370\uc774\ud130<\/em> \uc5d0\ub294 \uc804\uccb4 \ud2b8\uc717\uc774 \ud3ec\ud568\ub429\ub2c8\ub2e4, <em>\ud14d\uc2a4\ud2b8<\/em> \ub294 \ubb38\uc790\uc5f4\ub85c \ubcc0\ud658\ub41c \ud14d\uc2a4\ud2b8\uc774\uace0 <em>\uc784\ubca0\ub529<\/em> \ub294 OpenAI\ub85c \uc0dd\uc131\ub41c \uc784\ubca0\ub529\uc785\ub2c8\ub2e4. \ud575\uc2ec\uc740 \ud2b8\uc717\uc758 \uc544\uc774\ub514\uc785\ub2c8\ub2e4. \uadf8\ub9ac\uace0 <em>\uc5c5\uc11c\ud2b8<\/em> \ub294 \ubb38\uc11c\uac00 \uc5c6\ub294 \uacbd\uc6b0 \ubb38\uc11c\ub97c \uc5c5\ub370\uc774\ud2b8\ud558\uac70\ub098 \uc0bd\uc785\ud558\ub294 \ub370 \uc0ac\uc6a9\ub429\ub2c8\ub2e4.<\/p>\n<p>\uc774 \ud504\ub85c\uadf8\ub7a8\uc744 \uc2e4\ud589\ud558\uace0 Couchbase \uc11c\ubc84\uc5d0 \uc5f0\uacb0\ud558\uba74 \ubb38\uc11c\uac00 \uc0dd\uc131\ub418\ub294 \uac83\uc744 \ubcfc \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/lh7-us.googleusercontent.com\/6RRlzFaKvR5PSLLWhqjRwkpqt7EycrDiyGJkuOLH6WDJfjqoh8gnYK2k-EhamIfEQAhWdhczMByFR0Qfsr_eRjp0YvFlgjfZHs_7wrokA49GzD4meuExljzUiU0biIsyUtYyGvdMH-f4mB_b-aktxqg\" alt=\"A Screenshot of the Couchbase Capella UI showing the list of created Documents\" \/><\/p>\n<p id=\"heading-at-that-point-i-have-extracted-data-from-twitter-uploaded-it-into-couchbase-as-one-tweet-per-document-with-the-openai-embedding-generated-and-inserted-for-each-tweet-i-am-ready-to-ask-questions-query-similar-documents\">\uc774 \uc2dc\uc810\uc5d0\uc11c \uc800\ub294 \ud2b8\uc704\ud130\uc5d0\uc11c \ub370\uc774\ud130\ub97c \ucd94\ucd9c\ud558\uc5ec \ubb38\uc11c\ub2f9 \ud558\ub098\uc758 \ud2b8\uc717\uc73c\ub85c Couchbase\uc5d0 \uc5c5\ub85c\ub4dc\ud558\uace0 \uac01 \ud2b8\uc717\uc5d0 \ub300\ud574 OpenAI \uc784\ubca0\ub529\uc744 \uc0dd\uc131\ud558\uc5ec \uc0bd\uc785\ud588\uc2b5\ub2c8\ub2e4. \uc774\uc81c \uc720\uc0ac\ud55c \ubb38\uc11c\ub97c \ucffc\ub9ac\ud558\uae30 \uc704\ud574 \uc9c8\ubb38\uc744 \ud560 \uc900\ube44\uac00 \ub418\uc5c8\uc2b5\ub2c8\ub2e4.<\/p>\n<h2 id=\"heading-run-vector-search-on-tweets\">\ud2b8\uc717\uc5d0\uc11c \ubca1\ud130 \uac80\uc0c9 \uc2e4\ud589<\/h2>\n<p>\uc774\uc81c \ubca1\ud130 \uac80\uc0c9\uc5d0 \ub300\ud574 \uc774\uc57c\uae30\ud560 \ucc28\ub840\uc785\ub2c8\ub2e4. \uc8fc\uc5b4\uc9c4 \ud14d\uc2a4\ud2b8\uc640 \uc720\uc0ac\ud55c \ud2b8\uc717\uc744 \uac80\uc0c9\ud558\ub294 \ubc29\ubc95\uc740 \ubb34\uc5c7\uc778\uac00\uc694? \uac00\uc7a5 \uba3c\uc800 \ud574\uc57c \ud560 \uc77c\uc740 \ud14d\uc2a4\ud2b8\ub97c \ubca1\ud130 \ub610\ub294 \uc784\ubca0\ub529\uc73c\ub85c \ubcc0\ud658\ud558\ub294 \uac83\uc785\ub2c8\ub2e4. \uadf8\ub7fc \uc9c8\ubb38\ud574 \ubcf4\uaca0\uc2b5\ub2c8\ub2e4:<\/p>\n<pre class=\"lang:python decode:true\" title=\"\ucffc\ub9ac \uc784\ubca0\ub529 \ub9cc\ub4e4\uae30\">    query = \"\uac1c\ubc1c\uc790 \ub9c8\ucf00\ud305\uc744 \uc704\ud574 \uc218\ubc31\ub9cc \ub2ec\ub7ec\ub97c \ub4e4\uc5ec \uc591\ub9d0\uc744 \uc0ac\uc57c \ud560\uae4c\uc694?\"\r\n    \ucffc\ub9ac \uc784\ubca0\ub529 = get_embedding(\ucffc\ub9ac)\r\n<\/pre>\n<p>\uadf8\uac8c \ub2e4\uc785\ub2c8\ub2e4. The <em>\ucffc\ub9ac \uc784\ubca0\ub529<\/em> \ubcc0\uc218\uc5d0\ub294 \ucffc\ub9ac\ub97c \ub098\ud0c0\ub0b4\ub294 \ubca1\ud130\uac00 \ud3ec\ud568\ub429\ub2c8\ub2e4. \ucffc\ub9ac\ub85c \uc774\ub3d9\ud569\ub2c8\ub2e4:<\/p>\n<pre class=\"lang:python decode:true\" title=\"\ubca1\ud130\uc11c\uce58 \uc694\uccad \uc2e4\ud589\">INDEX_NAME = os.getenv(\"INDEX_NAME\") # \uc804\uccb4 \ud14d\uc2a4\ud2b8 \uc778\ub371\uc2a4 \uc774\ub984\r\n# \ubca1\ud130 \uac80\uc0c9 \ucffc\ub9ac\uc785\ub2c8\ub2e4.\r\nsearch_req = search.SearchRequest.create(\r\n    VectorSearch.from_vector_query(\r\n        VectorQuery(\r\n            \"Embedding\", \ube44\uad50\ud560 \uc784\ubca0\ub529\uc774 \ud3ec\ud568\ub41c # JSON \uc18d\uc131 \uc774\ub984\r\n            \ucffc\ub9ac \uc784\ubca0\ub529, # \uc6b0\ub9ac\uc758 \ucffc\ub9ac \uc784\ubca0\ub529\r\n            5, # \ucd5c\ub300 \uacb0\uacfc \uc218\r\n            )\r\n        )\r\n)\r\n# \uc120\ud0dd\ud55c \ubc94\uc704\uc5d0 \ub300\ud574 \ubca1\ud130 \uac80\uc0c9 \ucffc\ub9ac \uc2e4\ud589\r\nresult = scope.search(\r\n        INDEX_NAME, # \uc804\uccb4 \ud14d\uc2a4\ud2b8 \uc778\ub371\uc2a4 \uc774\ub984\r\n        SEARCH_REQ,\r\n        \uac80\uc0c9 \uc635\uc158(\r\n        show_request=True,\r\n        log_request=True\r\n    ),\r\n).rows()\r\n\r\n\uacb0\uacfc\uc758 \ud589\uc5d0 \ub300\ud574\r\n    print(\"\ud2b8\uc717\uc744 \ucc3e\uc558\uc2b5\ub2c8\ub2e4 \\\"{}\\\" \".format(row))\r\n<\/pre>\n<p>\uc81c\uac00 \ubb34\uc5c7\uc744 \ud558\uace0 \uc788\ub294\uc9c0 \ud655\uc778\ud558\uace0 \uc2f6\uae30 \ub54c\ubb38\uc5d0 \uc774 \ud658\uacbd \ubcc0\uc218\ub97c \uc124\uc815\ud558\uc5ec Couchbase SDK \ub85c\uadf8\ub97c \ud65c\uc131\ud654\ud558\uace0 \uc788\uc2b5\ub2c8\ub2e4:<\/p>\n<pre class=\"lang:sh decode:true\" title=\"\ub85c\uadf8 \uc0ac\uc6a9\">\ub0b4\ubcf4\ub0b4\uae30 PYCBC_LOG_LEVEL=\uc815\ubcf4<\/pre>\n<p>\ubaa8\ub4e0 \uac83\uc774 \uc798 \uc9c4\ud589\ub418\uc5c8\ub2e4\uba74 \uc624\ub958 \uba54\uc2dc\uc9c0\uac00 \ud45c\uc2dc\ub420 \uac83\uc785\ub2c8\ub2e4!<\/p>\n<pre class=\"lang:sh decode:true\" title=\"\uc2a4\ud06c\ub9bd\ud2b8\ub97c \uc2e4\ud589\ud558\uba74 IndexNotFound \uc624\ub958\uac00 \ubc1c\uc0dd\ud569\ub2c8\ub2e4.\">ldoguin \u279c \/workspaces\/rag-demo-x (\uba54\uc778) $ \ud30c\uc774\uc36c read_vectorize_store_query_json.py\r\n\ud2b8\ub808\uc774\uc2a4\ubc31(\uac00\uc7a5 \ucd5c\uadfc \ud638\ucd9c \ub9c8\uc9c0\ub9c9):\r\n  \ud30c\uc77c \"\/workspaces\/rag-demo-x\/read_vectorize_store_query_json.py\", 167\ud589, \uc5d0\uc11c\r\n    \ud589\uc5d0 \ub300\ud574\r\n  \ud30c\uc77c \"\/home\/vscode\/.local\/lib\/python3.11\/site-packages\/couchbase\/search.py\", 136\uc904, __next__\uc758 136\uc904\r\n    raise ex\r\n  \ud30c\uc77c \"\/home\/vscode\/.local\/lib\/python3.11\/site-packages\/couchbase\/search.py\", 130 \uc904, __next__\uc5d0\uc11c\r\n    \ubc18\ud658 self._get_next_row()\r\n           ^^^^^^^^^^^^^^^^^^^^\r\n  \ud30c\uc77c \"\/home\/vscode\/.local\/lib\/python3.11\/site-packages\/couchbase\/search.py\", 121\ud589, _get_next_row\uc5d0\uc11c\r\n    \uc5d0\ub7ec\ub9f5\ud37c.\ube4c\ub4dc_\uc608\uc678(\ud589) \ubc1c\uc0dd\r\ncouchbase.exceptions.QueryIndexNotFoundException: QueryIndexNotFoundException()\r\n<\/pre>\n<p>\uadf8\ub9ac\uace0 \uc774\uac83\uc740 \uad1c\ucc2e\uc2b5\ub2c8\ub2e4. <em>\ucffc\ub9ac \uc778\ub371\uc2a4 \ucc3e\uc744 \uc218 \uc5c6\uc74c \uc608\uc678<\/em>. \uc544\uc9c1 \uc874\uc7ac\ud558\uc9c0 \uc54a\ub294 \uc778\ub371\uc2a4\ub97c \ucc3e\uace0 \uc788\uc2b5\ub2c8\ub2e4. \uadf8\ub798\uc11c \uc6b0\ub9ac\ub294 \uadf8\uac83\uc744 \ub9cc\ub4e4\uc5b4\uc57c \ud569\ub2c8\ub2e4. Capella\uc5d0\uc11c \ud074\ub7ec\uc2a4\ud130\uc5d0 \ub85c\uadf8\uc778\ud558\uc5ec \ub530\ub77c\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4:<\/p>\n<div class=\"embed-wrapper\">\n<div class=\"webembed-wrapper\" style=\"border: solid 1px;\">\n<div style=\"width: 900px;\" class=\"wp-video\"><!--[if lt IE 9]><script>document.createElement('video');<\/script><![endif]-->\n<video class=\"wp-video-shortcode\" id=\"video-15671-1\" width=\"900\" height=\"506\" preload=\"metadata\" controls=\"controls\"><source type=\"video\/mp4\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2024\/04\/2024-04-24-16-02-17.mp4?_=1\" \/><a href=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2024\/04\/2024-04-24-16-02-17.mp4\">https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2024\/04\/2024-04-24-16-02-17.mp4<\/a><\/video><\/div>\n<\/div>\n<\/div>\n<p>\uc778\ub371\uc2a4\uac00 \uc788\uc73c\uba74 \ub2e4\uc2dc \uc2e4\ud589\ud558\uba74 \uc774 \uacb0\uacfc\ub97c \uc5bb\uc744 \uc218 \uc788\uc2b5\ub2c8\ub2e4:<\/p>\n<pre class=\"lang:sh decode:true\" title=\"\uc2a4\ud06c\ub9bd\ud2b8\ub97c \uc2e4\ud589\ud558\uace0 \uac80\uc0c9 \uacb0\uacfc \uac00\uc838\uc624\uae30\">ldoguin \u279c \/workspaces\/rag-demo-x (\uba54\uc778) $ \ud30c\uc774\uc36c read_vectorize_store_query_json.py\r\n\"SearchRow(index='default._default.my_index_6933ea565b622355_4c1c5584', id='1775920020377502191', score=0.6803812980651855, fields=None, sort=[], locations=None, fragments={}, explanation={})\" \ud2b8\uc717\uc744 \ucc3e\uc558\uc2b5\ub2c8\ub2e4.\r\n\"SearchRow(index='default._default.my_index_6933ea565b622355_4c1c5584', id='1775925931791745392', score=0.4303199052810669, fields=None, sort=[], locations=None, fragments={}, explanation={})\" \ud2b8\uc717\uc744 \ucc3e\uc558\uc2b5\ub2c8\ub2e4.\r\n\"SearchRow(index='default._default.my_index_6933ea565b622355_4c1c5584', id='1775921934645006471', score=0.3621498942375183, fields=None, sort=[], locations=None, fragments={}, explanation={})\" \ud2b8\uc717\uc744 \ucc3e\uc558\uc2b5\ub2c8\ub2e4.\r\n\"SearchRow(index='default._default.my_index_6933ea565b622355_4c1c5584', id='1776058836278727024', score=0.3274463415145874, fields=None, sort=[], locations=None, fragments={}, explanation={})\" \ud2b8\uc717\uc744 \ucc3e\uc558\uc2b5\ub2c8\ub2e4.\r\n\uac80\uc0c9\ud55c \ud2b8\uc717 \"SearchRow(index='default._default.my_index_6933ea565b622355_4c1c5584', id='1775979601862307872', score=0.32539570331573486, fields=None, sort=[], locations=None, fragments={}, explanation={}'\"\r\n<\/pre>\n<p>\uc6b0\ub9ac\ub294 \ub2e4\uc74c\uc744 \uc5bb\uc2b5\ub2c8\ub2e4. <em>\uac80\uc0c9 \ud589<\/em> \uac1d\uccb4\uc5d0\ub294 \uc0ac\uc6a9\ub41c \uc778\ub371\uc2a4, \ubb38\uc11c\uc758 \ud0a4, \uad00\ub828 \uc810\uc218, \uadf8\ub9ac\uace0 \ube48 \ud544\ub4dc\uac00 \ub9ce\uc774 \ud3ec\ud568\ub418\uc5b4 \uc788\uc2b5\ub2c8\ub2e4. \ub610\ud55c \ub2e4\uc74c\uacfc \uac19\uc740 \uc21c\uc11c\ub85c \uc815\ub82c\ub418\uc5b4 \uc788\uc74c\uc744 \uc54c \uc218 \uc788\uc2b5\ub2c8\ub2e4. <em>\uc810\uc218<\/em>\ub97c \uc785\ub825\ud558\uba74 \uac80\uc0c9\ub41c \uac80\uc0c9\uc5b4\uc640 \uac00\uc7a5 \uac00\uae4c\uc6b4 \ud2b8\uc717\uc744 \uc81c\uacf5\ud569\ub2c8\ub2e4.<\/p>\n<p>\uc131\uacf5\ud588\ub294\uc9c0 \uc5b4\ub5bb\uac8c \uc54c \uc218 \uc788\ub098\uc694? \uac00\uc7a5 \ube60\ub978 \ubc29\ubc95\uc740 IDE \ud50c\ub7ec\uadf8\uc778\uc73c\ub85c \ubb38\uc11c\ub97c \ucc3e\ub294 \uac83\uc785\ub2c8\ub2e4. \ub2e4\uc74c\uc744 \uc0ac\uc6a9\ud558\ub294 \uacbd\uc6b0 <a href=\"https:\/\/www.couchbase.com\/blog\/ko\/couchbase-visual-studio-code\/\">VSCode<\/a> \ub610\ub294 <a href=\"https:\/\/www.couchbase.com\/blog\/ko\/couchbase-jetbrains-plugin\/\">JetBrains<\/a> IDE\ub97c \uc0ac\uc6a9\ud558\uba74 \ub9e4\uc6b0 \uc26c\uc6b8 \uac83\uc785\ub2c8\ub2e4. \uce74\uc6b0\uce58\ubca0\uc774\uc2a4 \uce74\ud3a0\ub77c\uc5d0 \ub85c\uadf8\uc778\ud558\uc5ec \ucc3e\uc744 \uc218\ub3c4 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<p>\ub610\ub294 \uac80\uc0c9 \uc778\ub371\uc2a4\ub97c \uc218\uc815\ud558\uc5ec \uc5f0\uad00\ub41c \ud14d\uc2a4\ud2b8 \ud544\ub4dc\uc640 \uba54\ud0c0\ub370\uc774\ud130\ub97c \uc800\uc7a5\ud558\uace0 \ucffc\ub9ac\ub97c \ub2e4\uc2dc \uc2e4\ud589\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4:<\/p>\n<div style=\"border: solid 1px;\">\n<div style=\"width: 900px;\" class=\"wp-video\"><video class=\"wp-video-shortcode\" id=\"video-15671-2\" width=\"900\" height=\"506\" preload=\"metadata\" controls=\"controls\"><source type=\"video\/mp4\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2024\/04\/2024-04-24-16-03-17.mp4?_=2\" \/><a href=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2024\/04\/2024-04-24-16-03-17.mp4\">https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2024\/04\/2024-04-24-16-03-17.mp4<\/a><\/video><\/div>\n<\/div>\n<div>\n<div>\n<pre class=\"lang:python decode:true\" title=\"\uac80\uc0c9 \uc635\uc158 \ucd94\uac00 \">result = scope.search(\r\n        INDEX_NAME,\r\n        search_req,\r\n        \uac80\uc0c9\uc635\uc158(\r\n        fields=[\"metadata.text\"],\r\n        show_request=True,\r\n        log_request=True\r\n    ),\r\n).rows()\r\n<\/pre>\n<pre class=\"lang:sh decode:true\" title=\"\uc120\ud0dd\ud55c \ud544\ub4dc\ub85c \uacb0\uacfc \uac00\uc838\uc624\uae30\">@ldoguin \u279c \/workspaces\/rag-demo-x (main) $ python read_vectorize_store_query_json.py\r\nFound tweet \"SearchRow(index='default._default.my_index_6933ea565b622355_4c1c5584', id='1775920020377502191', score=0.6803812980651855, fields={'metadata.text': '@kelseyhightower SOCKS! I will throw millions of dollars at the first company to offer me socks!\\n\\nImportant to note here: I don\u2019t have millions of dollars! \\n\\nI think I might have a problem.'}, sort=[], locations=None, fragments={}, explanation={})\"\r\nFound tweet \"SearchRow(index='default._default.my_index_6933ea565b622355_4c1c5584', id='1775925931791745392', score=0.4303199052810669, fields={'metadata.text': \"@kelseyhightower If your t-shirt has a pleasant abstract design on it where the logo of your company isn't very obvious, I will wear that quite happily (thanks, Twilio)\\n\\nI also really like free socks\"}, sort=[], locations=None, fragments={}, explanation={})\"\r\nFound tweet \"SearchRow(index='default._default.my_index_6933ea565b622355_4c1c5584', id='1775921934645006471', score=0.3621498942375183, fields={'metadata.text': \"@kelseyhightower For some reason, devs think they aren't influenced by marketing even if they are\ud83d\ude05\\n\\nI'm influenced by social media &amp; fomo. If a lot of developers start talking about some framework or tool, I  look into it\\n\\nI also look into things that may benefit my career in the future\"}, sort=[], locations=None, fragments={}, explanation={})\"\r\nFound tweet \"SearchRow(index='default._default.my_index_6933ea565b622355_4c1c5584', id='1776058836278727024', score=0.3274463415145874, fields={'metadata.text': \"@kelseyhightower Have a good product. That's the best marketing there is!\"}, sort=[], locations=None, fragments={}, explanation={})\"\r\nFound tweet \"SearchRow(index='default._default.my_index_6933ea565b622355_4c1c5584', id='1775979601862307872', score=0.32539570331573486, fields={'metadata.text': '@kelseyhightower From a security standpoint, marketing that works on me:\\n\\nShowing strong technical expertise. If you\u2019re of the few shops that consistently puts out good research and quality writeups? When I\u2019m looking at vendors, I\u2019m looking at you. When I\u2019m not looking, I\u2019m noting it for later'}, sort=[], locations=None, fragments={}, explanation={})\"\r\n<\/pre>\n<\/div>\n<\/div>\n<h2 id=\"heading-conclusion\">\uacb0\ub860<\/h2>\n<p>\uadf8 \uacb0\uacfc, \uc591\ub9d0\uc5d0 \ub300\ud55c Josh\uc758 \ud2b8\uc717\uc774 \uac80\uc0c9 \uc0c1\ub2e8\uc5d0 \ud45c\uc2dc\ub418\uc5c8\uc2b5\ub2c8\ub2e4. \uc774\uc81c \ud2b8\uc704\ud130\ub97c \uc2a4\ud06c\ub7a9\ud558\uace0, \ud2b8\uc717\uc744 \ubca1\ud130\ub85c \ubcc0\ud658\ud558\uace0, \uc800\uc7a5\ud558\uace0, \uc0c9\uc778\ud558\uace0, Couchbase\uc5d0\uc11c \ucffc\ub9ac\ud558\ub294 \ubc29\ubc95\uc744 \uc54c\uac8c \ub418\uc5c8\uc2b5\ub2c8\ub2e4. \uc774\uac83\uc774 LLM \ubc0f AI\uc640 \uc5b4\ub5a4 \uad00\ub828\uc774 \uc788\uc744\uae4c\uc694? \ub2e4\uc74c \ud3ec\uc2a4\ud305\uc5d0\uc11c \uc790\uc138\ud788 \uc54c\uc544\ubcf4\uc138\uc694!<\/p>\n<ul>\n<li><a href=\"https:\/\/www.couchbase.com\/blog\/ko\/twitter-thread-tldr-with-ai-part-2\/\">2\ubd80\uc5d0\uc11c \uacc4\uc18d \uc77d\uae30<\/a>.<\/li>\n<\/ul>","protected":false},"excerpt":{"rendered":"<p>Because who has the time ? (also part 1 because it took me further than I expected \ud83d\ude2c) Couchbase recently introduced support for Vector Search. And I have been looking for an excuse to play with it. As it turns [&hellip;]<\/p>","protected":false},"author":49,"featured_media":15703,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[10122,2165,9139,9937],"tags":[1696],"ppma_author":[9023],"class_list":["post-15671","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-artificial-intelligence-ai","category-full-text-search","category-python","category-vector-search","tag-indexing"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v25.8 (Yoast SEO v25.8) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>How to Create a Twitter Summary with AI and Vector Search - The Couchbase Blog<\/title>\n<meta name=\"description\" content=\"Discover how Couchbase Vector Search can enable RAG architecture through a real live example: summarizing a twitter thread with a LLM\" \/>\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\/twitter-thread-tldr-with-ai-part-1\/\" \/>\n<meta property=\"og:locale\" content=\"ko_KR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Twitter Thread tl;dr With AI? Part 1\" \/>\n<meta property=\"og:description\" content=\"Discover how Couchbase Vector Search can enable RAG architecture through a real live example: summarizing a twitter thread with a LLM\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.couchbase.com\/blog\/ko\/twitter-thread-tldr-with-ai-part-1\/\" \/>\n<meta property=\"og:site_name\" content=\"The Couchbase Blog\" \/>\n<meta property=\"article:published_time\" content=\"2024-05-07T15:05:04+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-06-14T03:27:16+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2024\/05\/Designer-3.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1200\" \/>\n\t<meta property=\"og:image:height\" content=\"721\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Laurent Doguin\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@ldoguin\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"unstructured.io\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"7\ubd84\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/twitter-thread-tldr-with-ai-part-1\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/twitter-thread-tldr-with-ai-part-1\/\"},\"author\":{\"name\":\"Laurent Doguin\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/c0aa9b8f1ed51b7a9e2f7cb755994a5e\"},\"headline\":\"Twitter Thread tl;dr With AI? Part 1\",\"datePublished\":\"2024-05-07T15:05:04+00:00\",\"dateModified\":\"2025-06-14T03:27:16+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/twitter-thread-tldr-with-ai-part-1\/\"},\"wordCount\":1465,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/twitter-thread-tldr-with-ai-part-1\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2024\/05\/Designer-3.png\",\"keywords\":[\"Indexing\"],\"articleSection\":[\"Artificial Intelligence (AI)\",\"Full-Text Search\",\"Python\",\"Vector Search\"],\"inLanguage\":\"ko-KR\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/twitter-thread-tldr-with-ai-part-1\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/twitter-thread-tldr-with-ai-part-1\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/twitter-thread-tldr-with-ai-part-1\/\",\"name\":\"How to Create a Twitter Summary with AI and Vector Search - The Couchbase Blog\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/twitter-thread-tldr-with-ai-part-1\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/twitter-thread-tldr-with-ai-part-1\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2024\/05\/Designer-3.png\",\"datePublished\":\"2024-05-07T15:05:04+00:00\",\"dateModified\":\"2025-06-14T03:27:16+00:00\",\"description\":\"Discover how Couchbase Vector Search can enable RAG architecture through a real live example: summarizing a twitter thread with a LLM\",\"breadcrumb\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/twitter-thread-tldr-with-ai-part-1\/#breadcrumb\"},\"inLanguage\":\"ko-KR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/twitter-thread-tldr-with-ai-part-1\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"ko-KR\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/twitter-thread-tldr-with-ai-part-1\/#primaryimage\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2024\/05\/Designer-3.png\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2024\/05\/Designer-3.png\",\"width\":1200,\"height\":721},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/twitter-thread-tldr-with-ai-part-1\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.couchbase.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Twitter Thread tl;dr With AI? Part 1\"}]},{\"@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\/c0aa9b8f1ed51b7a9e2f7cb755994a5e\",\"name\":\"Laurent Doguin\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"ko-KR\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/12929ce99397769f362b7a90d6b85071\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/b8c466908092b46634af916b6921f30187a051e4367ded7ac9b1a3f2c5692fd2?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/b8c466908092b46634af916b6921f30187a051e4367ded7ac9b1a3f2c5692fd2?s=96&d=mm&r=g\",\"caption\":\"Laurent Doguin\"},\"description\":\"Laurent is a nerdy metal head who lives in Paris. He mostly writes code in Java and structured text in AsciiDoc, and often talks about data, reactive programming and other buzzwordy stuff. He is also a former Developer Advocate for Clever Cloud and Nuxeo where he devoted his time and expertise to helping those communities grow bigger and stronger. He now runs Developer Relations at Couchbase.\",\"sameAs\":[\"https:\/\/x.com\/ldoguin\"],\"honorificPrefix\":\"Mr\",\"birthDate\":\"1985-06-07\",\"gender\":\"male\",\"award\":[\"Devoxx Champion\",\"Couchbase Legend\"],\"knowsAbout\":[\"Java\"],\"knowsLanguage\":[\"English\",\"French\"],\"jobTitle\":\"Director Developer Relation & Strategy\",\"worksFor\":\"Couchbase\",\"url\":\"https:\/\/www.couchbase.com\/blog\/ko\/author\/laurent-doguin\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"How to Create a Twitter Summary with AI and Vector Search - The Couchbase Blog","description":"\uc2e4\uc81c \ub77c\uc774\ube0c \uc608\uc81c\uc778 \ud2b8\uc704\ud130 \uc2a4\ub808\ub4dc \uc694\uc57d(LLM\uc73c\ub85c \ud2b8\uc704\ud130 \uc2a4\ub808\ub4dc \uc694\uc57d)\uc744 \ud1b5\ud574 Couchbase Vector Search\uac00 \uc5b4\ub5bb\uac8c RAG \uc544\ud0a4\ud14d\ucc98\ub97c \uc9c0\uc6d0\ud558\ub294\uc9c0 \uc54c\uc544\ubcf4\uc138\uc694.","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\/twitter-thread-tldr-with-ai-part-1\/","og_locale":"ko_KR","og_type":"article","og_title":"Twitter Thread tl;dr With AI? Part 1","og_description":"Discover how Couchbase Vector Search can enable RAG architecture through a real live example: summarizing a twitter thread with a LLM","og_url":"https:\/\/www.couchbase.com\/blog\/ko\/twitter-thread-tldr-with-ai-part-1\/","og_site_name":"The Couchbase Blog","article_published_time":"2024-05-07T15:05:04+00:00","article_modified_time":"2025-06-14T03:27:16+00:00","og_image":[{"width":1200,"height":721,"url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2024\/05\/Designer-3.png","type":"image\/png"}],"author":"Laurent Doguin","twitter_card":"summary_large_image","twitter_creator":"@ldoguin","twitter_misc":{"Written by":"unstructured.io","Est. reading time":"7\ubd84"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.couchbase.com\/blog\/twitter-thread-tldr-with-ai-part-1\/#article","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/twitter-thread-tldr-with-ai-part-1\/"},"author":{"name":"Laurent Doguin","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/c0aa9b8f1ed51b7a9e2f7cb755994a5e"},"headline":"Twitter Thread tl;dr With AI? Part 1","datePublished":"2024-05-07T15:05:04+00:00","dateModified":"2025-06-14T03:27:16+00:00","mainEntityOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/twitter-thread-tldr-with-ai-part-1\/"},"wordCount":1465,"commentCount":0,"publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/twitter-thread-tldr-with-ai-part-1\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2024\/05\/Designer-3.png","keywords":["Indexing"],"articleSection":["Artificial Intelligence (AI)","Full-Text Search","Python","Vector Search"],"inLanguage":"ko-KR","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.couchbase.com\/blog\/twitter-thread-tldr-with-ai-part-1\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.couchbase.com\/blog\/twitter-thread-tldr-with-ai-part-1\/","url":"https:\/\/www.couchbase.com\/blog\/twitter-thread-tldr-with-ai-part-1\/","name":"How to Create a Twitter Summary with AI and Vector Search - The Couchbase Blog","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/twitter-thread-tldr-with-ai-part-1\/#primaryimage"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/twitter-thread-tldr-with-ai-part-1\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2024\/05\/Designer-3.png","datePublished":"2024-05-07T15:05:04+00:00","dateModified":"2025-06-14T03:27:16+00:00","description":"\uc2e4\uc81c \ub77c\uc774\ube0c \uc608\uc81c\uc778 \ud2b8\uc704\ud130 \uc2a4\ub808\ub4dc \uc694\uc57d(LLM\uc73c\ub85c \ud2b8\uc704\ud130 \uc2a4\ub808\ub4dc \uc694\uc57d)\uc744 \ud1b5\ud574 Couchbase Vector Search\uac00 \uc5b4\ub5bb\uac8c RAG \uc544\ud0a4\ud14d\ucc98\ub97c \uc9c0\uc6d0\ud558\ub294\uc9c0 \uc54c\uc544\ubcf4\uc138\uc694.","breadcrumb":{"@id":"https:\/\/www.couchbase.com\/blog\/twitter-thread-tldr-with-ai-part-1\/#breadcrumb"},"inLanguage":"ko-KR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/twitter-thread-tldr-with-ai-part-1\/"]}]},{"@type":"ImageObject","inLanguage":"ko-KR","@id":"https:\/\/www.couchbase.com\/blog\/twitter-thread-tldr-with-ai-part-1\/#primaryimage","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2024\/05\/Designer-3.png","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2024\/05\/Designer-3.png","width":1200,"height":721},{"@type":"BreadcrumbList","@id":"https:\/\/www.couchbase.com\/blog\/twitter-thread-tldr-with-ai-part-1\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.couchbase.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Twitter Thread tl;dr With AI? Part 1"}]},{"@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\/c0aa9b8f1ed51b7a9e2f7cb755994a5e","name":"\ub85c\ub791 \ub3c4\uadc4","image":{"@type":"ImageObject","inLanguage":"ko-KR","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/12929ce99397769f362b7a90d6b85071","url":"https:\/\/secure.gravatar.com\/avatar\/b8c466908092b46634af916b6921f30187a051e4367ded7ac9b1a3f2c5692fd2?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/b8c466908092b46634af916b6921f30187a051e4367ded7ac9b1a3f2c5692fd2?s=96&d=mm&r=g","caption":"Laurent Doguin"},"description":"Laurent\ub294 \ud30c\ub9ac\uc5d0 \uc0ac\ub294 \uad34\uc9dc \uae08\uc18d\uacf5\ud559\ub3c4\uc785\ub2c8\ub2e4. \uc8fc\ub85c Java\ub85c \ucf54\ub4dc\ub97c \uc791\uc131\ud558\uace0 AsciiDoc\uc73c\ub85c \uad6c\uc870\ud654\ub41c \ud14d\uc2a4\ud2b8\ub97c \uc791\uc131\ud558\uba70 \ub370\uc774\ud130, \ub9ac\uc561\ud2f0\ube0c \ud504\ub85c\uadf8\ub798\ubc0d \ubc0f \uae30\ud0c0 \uc720\ud589\uc5b4\uc5d0 \ub300\ud574 \uc790\uc8fc \uc774\uc57c\uae30\ud569\ub2c8\ub2e4. \ub610\ud55c Clever Cloud\uc640 Nuxeo\uc758 \uac1c\ubc1c\uc790 \uc639\ud638\uc790\ub85c \ud65c\ub3d9\ud558\uba70 \ud574\ub2f9 \ucee4\ubba4\ub2c8\ud2f0\uac00 \ub354 \ud06c\uace0 \uac15\ub825\ud558\uac8c \uc131\uc7a5\ud560 \uc218 \uc788\ub3c4\ub85d \uc790\uc2e0\uc758 \uc2dc\uac04\uacfc \uc804\ubb38\uc131\uc744 \ubc14\ucce4\uc2b5\ub2c8\ub2e4. \ud604\uc7ac Couchbase\uc5d0\uc11c \uac1c\ubc1c\uc790 \uad00\uacc4\ub97c \uc6b4\uc601\ud558\uace0 \uc788\uc2b5\ub2c8\ub2e4.","sameAs":["https:\/\/x.com\/ldoguin"],"honorificPrefix":"Mr","birthDate":"1985-06-07","gender":"male","award":["Devoxx Champion","Couchbase Legend"],"knowsAbout":["Java"],"knowsLanguage":["English","French"],"jobTitle":"Director Developer Relation & Strategy","worksFor":"Couchbase","url":"https:\/\/www.couchbase.com\/blog\/ko\/author\/laurent-doguin\/"}]}},"authors":[{"term_id":9023,"user_id":49,"is_guest":0,"slug":"laurent-doguin","display_name":"Laurent Doguin","avatar_url":"https:\/\/secure.gravatar.com\/avatar\/b8c466908092b46634af916b6921f30187a051e4367ded7ac9b1a3f2c5692fd2?s=96&d=mm&r=g","author_category":"","last_name":"Doguin","first_name":"Laurent","job_title":"","user_url":"","description":"Laurent\ub294 \ud30c\ub9ac\uc5d0 \uc0ac\ub294 \uad34\uc9dc \uae08\uc18d\uacf5\ud559\ub3c4\uc785\ub2c8\ub2e4. \uc8fc\ub85c Java\ub85c \ucf54\ub4dc\ub97c \uc791\uc131\ud558\uace0 AsciiDoc\uc73c\ub85c \uad6c\uc870\ud654\ub41c \ud14d\uc2a4\ud2b8\ub97c \uc791\uc131\ud558\uba70 \ub370\uc774\ud130, \ub9ac\uc561\ud2f0\ube0c \ud504\ub85c\uadf8\ub798\ubc0d \ubc0f \uae30\ud0c0 \uc720\ud589\uc5b4\uc5d0 \ub300\ud574 \uc790\uc8fc \uc774\uc57c\uae30\ud569\ub2c8\ub2e4. \ub610\ud55c Clever Cloud\uc640 Nuxeo\uc758 \uac1c\ubc1c\uc790 \uc639\ud638\uc790\ub85c \ud65c\ub3d9\ud558\uba70 \ud574\ub2f9 \ucee4\ubba4\ub2c8\ud2f0\uac00 \ub354 \ud06c\uace0 \uac15\ub825\ud558\uac8c \uc131\uc7a5\ud560 \uc218 \uc788\ub3c4\ub85d \uc790\uc2e0\uc758 \uc2dc\uac04\uacfc \uc804\ubb38\uc131\uc744 \ubc14\ucce4\uc2b5\ub2c8\ub2e4. \ud604\uc7ac Couchbase\uc5d0\uc11c \uac1c\ubc1c\uc790 \uad00\uacc4\ub97c \uc6b4\uc601\ud558\uace0 \uc788\uc2b5\ub2c8\ub2e4."}],"_links":{"self":[{"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/posts\/15671","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\/49"}],"replies":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/comments?post=15671"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/posts\/15671\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/media\/15703"}],"wp:attachment":[{"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/media?parent=15671"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/categories?post=15671"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/tags?post=15671"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/ppma_author?post=15671"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}