{"data":[{"id":92800,"title":"Nha Cai Z188","slug":"Nj4vg6P8J6r","url":"https:\/\/viblo.asia\/p\/nha-cai-z188-Nj4vg6P8J6r","user_id":185914,"moderation":"pending","transliterated":"nha-cai-z188","contents_short":"Nh\u1eafc \u0111\u1ebfn c\u00e1c n\u1ec1n t\u1ea3ng c\u00e1 c\u01b0\u1ee3c tr\u1ef1c tuy\u1ebfn ch\u1ea5t l\u01b0\u1ee3ng, Z188 lu\u00f4n l\u00e0 l\u1ef1a ch\u1ecdn h\u00e0ng \u0111\u1ea7u c\u1ee7a nhi\u1ec1u ng\u01b0\u1eddi ch\u01a1i. H\u1ec7 th\u1ed1ng cung c\u1ea5p \u0111\u1ea7y \u0111\u1ee7 c\u00e1c s\u1ea3n ph\u1ea9m t\u1eeb c\u00e1 c\u01b0\u1ee3c th\u1ec3 thao \u0111\u1ebfn casino tr\u1ef1c tuy\u1ebfn, \u0111\u1ea3m b\u1ea3o tr\u1ea3i nghi\u1ec7m m\u01b0\u1ee3t m\u00e0 v\u00e0 \u1ed5n \u0111\u1ecbnh. D\u1ecbch v\u1ee5 ch\u0103m s\u00f3c kh\u00e1ch h\u00e0ng ho\u1ea1t \u0111\u1ed9ng 24\/7 gi\u00fap h\u1ed7 tr\u1ee3 nhanh ch\u00f3ng m\u1ecdi v\u1ea5n \u0111\u1ec1.\n\nWebsite: https:\/\/newz188.com\/\n\n\u0110\u1ecba ch\u1ec9: 56 QL1A, Hi\u1ec7p B\u00ecnh Ph\u01b0\u1edbc, Hi\u1ec7p B\u00ecnh, H\u1ed3 Ch\u00ed Minh, ...","contents":"Nh\u1eafc \u0111\u1ebfn c\u00e1c n\u1ec1n t\u1ea3ng c\u00e1 c\u01b0\u1ee3c tr\u1ef1c tuy\u1ebfn ch\u1ea5t l\u01b0\u1ee3ng, Z188 lu\u00f4n l\u00e0 l\u1ef1a ch\u1ecdn h\u00e0ng \u0111\u1ea7u c\u1ee7a nhi\u1ec1u ng\u01b0\u1eddi ch\u01a1i. H\u1ec7 th\u1ed1ng cung c\u1ea5p \u0111\u1ea7y \u0111\u1ee7 c\u00e1c s\u1ea3n ph\u1ea9m t\u1eeb c\u00e1 c\u01b0\u1ee3c th\u1ec3 thao \u0111\u1ebfn casino tr\u1ef1c tuy\u1ebfn, \u0111\u1ea3m b\u1ea3o tr\u1ea3i nghi\u1ec7m m\u01b0\u1ee3t m\u00e0 v\u00e0 \u1ed5n \u0111\u1ecbnh. D\u1ecbch v\u1ee5 ch\u0103m s\u00f3c kh\u00e1ch h\u00e0ng ho\u1ea1t \u0111\u1ed9ng 24\/7 gi\u00fap h\u1ed7 tr\u1ee3 nhanh ch\u00f3ng m\u1ecdi v\u1ea5n \u0111\u1ec1.\n\nWebsite: https:\/\/newz188.com\/\n\n\u0110\u1ecba ch\u1ec9: 56 QL1A, Hi\u1ec7p B\u00ecnh Ph\u01b0\u1edbc, Hi\u1ec7p B\u00ecnh, H\u1ed3 Ch\u00ed Minh, Vietnam\n\nEmail: contact@newz188.com\n\nHotline: 0987362424\n\nHashtags: #Z188 #Z188Casino #Z188Bet #Z188Online #Z188UyTin #Z188Game #Z188TheThao #Z188NoHu #NhaCaiZ188 #Z188ChinhThuc\n\n\nhttps:\/\/www.facebook.com\/newz188com\/\n\nhttps:\/\/www.youtube.com\/@newz188com\n\nhttps:\/\/www.pinterest.com\/newz188com\/\n\nhttps:\/\/twitter.com\/newz188com\n\nhttps:\/\/vimeo.com\/newz188com\n\nhttps:\/\/gravatar.com\/newz188com\n\nhttps:\/\/github.com\/newz188com\n\nhttps:\/\/community.fabric.microsoft.com\/t5\/user\/viewprofilepage\/user-id\/1579409\n\nhttps:\/\/bit.ly\/m\/newz188com\n\nhttps:\/\/www.blogger.com\/profile\/12871351355537364123\n\nhttps:\/\/profile.hatena.ne.jp\/newz188com\/\n\nhttps:\/\/issuu.com\/newz188com\n\nhttps:\/\/community.hubspot.com\/t5\/user\/viewprofilepage\/user-id\/1064008\n\nhttps:\/\/gitlab.com\/newz188com\n\nhttps:\/\/pixabay.com\/users\/55437441\/\n\nhttps:\/\/disqus.com\/by\/newz188com\/about\/\n\nhttps:\/\/500px.com\/p\/newz188com?view=photos\n\nhttps:\/\/blog.sighpceducation.acm.org\/wp\/forums\/users\/newz188com\/\n\nhttps:\/\/gamblingtherapy.org\/forum\/users\/newz188com\/\n\nhttps:\/\/about.me\/newz188com\n\nhttps:\/\/video.fc2.com\/account\/97674966\n\nhttps:\/\/www.walkscore.com\/people\/102060905829\/nh%C3%A0-c%C3%A1i-z188\n\nhttps:\/\/www.reverbnation.com\/artist\/newz188com\n\nhttps:\/\/www.twitch.tv\/newz188com\/about\n\nhttps:\/\/app.readthedocs.org\/profiles\/newz188com\/\n\nhttps:\/\/www.ameba.jp\/profile\/general\/newz188com\/\n\nhttps:\/\/www.band.us\/band\/102316703\/intro\n\nhttps:\/\/qna.habr.com\/user\/newz188com\n\nhttps:\/\/www.skool.com\/@nha-cai-z-5220\n\nhttps:\/\/wakelet.com\/@newz188com\n\nhttps:\/\/anyflip.com\/homepage\/lffzo\n\nhttps:\/\/3dwarehouse.sketchup.com\/by\/newz188com\n\nhttps:\/\/instapaper.com\/p\/newz188com\n\nhttps:\/\/www.storenvy.com\/newz188com\n\nhttps:\/\/leetcode.com\/u\/newz188com\/\n\nhttps:\/\/jali.me\/newz188com\n\nhttps:\/\/www.magcloud.com\/user\/newz188com\n\nhttps:\/\/pbase.com\/newz188com\/nh_ci_z188\n\nhttps:\/\/old.bitchute.com\/channel\/l7lBZJFGsPN0\/\n\nhttps:\/\/www.bitchute.com\/channel\/l7lBZJFGsPN0\n\nhttps:\/\/forum.codeigniter.com\/member.php?action=profile&uid=232638\n\nhttps:\/\/myanimelist.net\/profile\/newz188com\n\nhttps:\/\/community.cloudera.com\/t5\/user\/viewprofilepage\/user-id\/150163\n\nhttp:\/\/www.askmap.net\/location\/7787550\/vietnam\/nh%C3%A0-c%C3%A1i-z188\n\nhttps:\/\/www.annuncigratuititalia.it\/author\/newz188com\/\n\nhttps:\/\/newz188com.freeescortsite.com\/\n\nhttps:\/\/te.legra.ph\/Nh%C3%A0-C%C3%A1i-Z188-04-14\n\nhttps:\/\/www.d-ushop.com\/forum\/topic\/124161\/nha-cai-z188\n\nhttps:\/\/hostndobezi.com\/newz188com\n\nhttps:\/\/biiut.com\/newz188com\n\nhttps:\/\/talkmarkets.com\/profile\/somratakbar4206-260414-125552\n\nhttps:\/\/newdayrp.com\/members\/newz188com.70154\/about\n\nhttps:\/\/ybrclub.com\/members\/newz188com.15313\/about\n\nhttps:\/\/www.airportcitygame.com\/members\/newz188com.35955\/about\n\nhttps:\/\/www.jk-green.com\/forum\/topic\/106667\/nha-cai-z188\n\nhttps:\/\/tlcworld.it\/forum\/members\/newz188com.36245\/about\n\nhttps:\/\/www.onetap.com\/members\/newz188com.508751\/about\n\nhttps:\/\/www.bonback.com\/forum\/topic\/383095\/nha-cai-z188\n\nhttps:\/\/www.dideadesign.com\/forum\/topic\/37927\/nha-cai-z188\n\nhttps:\/\/www.pathumratjotun.com\/forum\/topic\/173339\/nha-cai-z188\n\nhttps:\/\/upuge.com\/newz188com\n\nhttps:\/\/www.rcmx.net\/userinfo.php?uid=16197\n\nhttps:\/\/killtv.me\/user\/newz188com\/\n\nhttps:\/\/naijamatta.com\/newz188com\n\nhttps:\/\/forum-foxess.pro\/community\/profile\/newz188com\/\n\nhttps:\/\/forum.riverrise.ru\/user\/55985-newz188com\/\n\nhttps:\/\/b.hatena.ne.jp\/newz188com\/bookmark\n\nhttps:\/\/773803.8b.io\/\n\nhttps:\/\/www.fundable.com\/nha-cai-z188-8\n\nhttps:\/\/www.deafvideo.tv\/vlogger\/newz188com\n\nhttps:\/\/www.maanation.com\/newz188com\n\nhttps:\/\/theafricavoice.com\/profile\/newz188com\n\nhttps:\/\/activepages.com.au\/profile\/newz188com\n\nhttps:\/\/classificados.acheiusa.com\/profile\/L0lUVFBRMEJNNk9mWkNkalg2Y0sveFNuNSt3Ung1Y1BBUU41cnIzVDA5QT0=\n\nhttp:\/\/newdigital-world.com\/members\/newz188com.html\n\nhttps:\/\/homepage.ninja\/newz188com\n\nhttps:\/\/zeroone.art\/profile\/newz188com\n\nhttps:\/\/chyoa.com\/user\/newz188com\n\nhttps:\/\/spiderum.com\/nguoi-dung\/newz188com\n\nhttps:\/\/manga-no.com\/@newz188com\/profile\n\nhttps:\/\/artist.link\/newz188com\n\nhttps:\/\/app.brancher.ai\/user\/C7sxEZffGZgI\n\nhttp:\/\/palangshim.com\/space-uid-5098088.html\n\nhttp:\/\/forum.vodobox.com\/profile.php?section=personal&id=68012\n\nhttps:\/\/mathlog.info\/users\/5a2Nx4LWZkcM1XDUbEA8aCtlJDt1\n\nhttps:\/\/pods.link\/newz188com\n\nhttps:\/\/pictureinbottle.com\/r\/newz188com\n\nhttps:\/\/www.thetriumphforum.com\/members\/nh%C3%A0-c%C3%A1i-z188.61954\/\n\nhttps:\/\/website.informer.com\/newz188.com\n\nhttps:\/\/www.natthadon-sanengineering.com\/forum\/topic\/99377\/nh%C3%A0-c%C3%A1i-z188\n\nhttps:\/\/www.ttlxshipping.com\/forum\/topic\/383033\/nh%C3%A0-c%C3%A1i-z188\n\nhttps:\/\/gockhuat.net\/member.php?u=436317\n\nhttps:\/\/www.nongkhaempolice.com\/forum\/topic\/117291\/nh%C3%A0-c%C3%A1i-z188\n\nhttps:\/\/www.bestloveweddingstudio.com\/forum\/topic\/79530\/nh%C3%A0-c%C3%A1i-z188\n\nhttps:\/\/nogu.org.uk\/forum\/profile\/newz188com\/\n\nhttp:\/\/jobboard.piasd.org\/author\/newz188com\/\n\nhttps:\/\/www.passes.com\/newz188com\n\nhttps:\/\/divisionmidway.org\/jobs\/author\/newz188com\/\n\nhttps:\/\/idol.st\/user\/159881\/newz188com\/\n\nhttps:\/\/www.siasat.pk\/members\/newz188com.270651\/#about\n\nhttps:\/\/shhhnewcastleswingers.club\/forums\/users\/newz188com\/\n\nhttps:\/\/dentaltechnician.org.uk\/community\/profile\/newz188com\/\n\nhttps:\/\/raredirectory.com\/author\/nh%C3%A0-c%C3%A1i-z188-48689\/","published_at":"2026-04-14T17:36:42.000000Z","scheduled_publish_at":null,"is_published":true,"is_shared":false,"updated_at":"2026-04-14T17:37:02.000000Z","edited_at":"2026-04-14T17:36:24.000000Z","translation_source":null,"trend_at":null,"promoted_at":null,"reading_time":4,"points":0,"views_count":1,"clips_count":0,"comments_count":0,"rated_value":null,"promoted":false,"trending":false,"is_draft":false,"is_public":true,"locale_code":"vi","is_video":false,"thumbnail_url":"https:\/\/images.viblo.asia\/dbfd8376-1887-4116-b32d-6ad800fdfdb2.png","user":{"data":{"id":185914,"url":"https:\/\/viblo.asia\/u\/newz188com","avatar":"b78ff085-9ada-4743-bf71-ece85f3e31d6.jpeg","name":"Nha Cai","username":"newz188com","followers_count":0,"reputation":0,"posts_count":0,"banned_at":null,"level_partner":null,"following":false}},"tags":{"data":[{"slug":"vfx","name":"VFX"}]},"commentators":{"data":[]}},{"id":92799,"title":"GO888471","slug":"wd43EK0KLX9","url":"https:\/\/viblo.asia\/p\/go888471-wd43EK0KLX9","user_id":185911,"moderation":"pending","transliterated":"go888471","contents_short":"GO88 l\u00e0 n\u1ec1n t\u1ea3ng gi\u1ea3i tr\u00ed tr\u1ef1c tuy\u1ebfn \u0111\u01b0\u1ee3c thi\u1ebft k\u1ebf v\u1edbi giao di\u1ec7n hi\u1ec7n \u0111\u1ea1i, t\u1ed1i \u01b0u tr\u1ea3i nghi\u1ec7m ng\u01b0\u1eddi d\u00f9ng tr\u00ean c\u1ea3 thi\u1ebft b\u1ecb di \u0111\u1ed9ng v\u00e0 m\u00e1y t\u00ednh. H\u1ec7 th\u1ed1ng cung c\u1ea5p \u0111a d\u1ea1ng s\u1ea3n ph\u1ea9m gi\u1ea3i tr\u00ed, t\u00edch h\u1ee3p c\u00f4ng ngh\u1ec7 b\u1ea3o m\u1eadt ti\u00ean ti\u1ebfn nh\u1eb1m \u0111\u1ea3m b\u1ea3o an to\u00e0n th\u00f4ng tin v\u00e0 giao d\u1ecbch. V\u1edbi t\u1ed1c \u0111\u1ed9 x\u1eed l\u00fd nhanh ch\u00f3ng c\u00f9ng d\u1ecbch v\u1ee5 h\u1ed7 tr\u1ee3 chuy\u00ean nghi\u1ec7p, GO88 h\u01b0\u1edbng \u0111\u1ebfn vi\u1ec7c mang l\u1ea1i tr\u1ea3i nghi\u1ec7m \u1ed5n \u0111\u1ecbnh v\u00e0 ti\u1ec7n l\u1ee3i ch...","contents":"GO88 l\u00e0 n\u1ec1n t\u1ea3ng gi\u1ea3i tr\u00ed tr\u1ef1c tuy\u1ebfn \u0111\u01b0\u1ee3c thi\u1ebft k\u1ebf v\u1edbi giao di\u1ec7n hi\u1ec7n \u0111\u1ea1i, t\u1ed1i \u01b0u tr\u1ea3i nghi\u1ec7m ng\u01b0\u1eddi d\u00f9ng tr\u00ean c\u1ea3 thi\u1ebft b\u1ecb di \u0111\u1ed9ng v\u00e0 m\u00e1y t\u00ednh. H\u1ec7 th\u1ed1ng cung c\u1ea5p \u0111a d\u1ea1ng s\u1ea3n ph\u1ea9m gi\u1ea3i tr\u00ed, t\u00edch h\u1ee3p c\u00f4ng ngh\u1ec7 b\u1ea3o m\u1eadt ti\u00ean ti\u1ebfn nh\u1eb1m \u0111\u1ea3m b\u1ea3o an to\u00e0n th\u00f4ng tin v\u00e0 giao d\u1ecbch. V\u1edbi t\u1ed1c \u0111\u1ed9 x\u1eed l\u00fd nhanh ch\u00f3ng c\u00f9ng d\u1ecbch v\u1ee5 h\u1ed7 tr\u1ee3 chuy\u00ean nghi\u1ec7p, GO88 h\u01b0\u1edbng \u0111\u1ebfn vi\u1ec7c mang l\u1ea1i tr\u1ea3i nghi\u1ec7m \u1ed5n \u0111\u1ecbnh v\u00e0 ti\u1ec7n l\u1ee3i cho ng\u01b0\u1eddi d\u00f9ng.\nTh\u00f4ng tin chi ti\u1ebft:\nWebsite: https:\/\/8471.cn.com\/\n\u0110\u1ecba ch\u1ec9: 23 \u0110\u01b0\u1eddng Nguy\u1ec5n Tr\u00e3i, Qu\u1eadn Thanh Xu\u00e2n, H\u00e0 N\u1ed9i, Vi\u1ec7t Nam\nEmail: minhhoangdev92@gmail.com\nPhone: 0965351289\n#go88#go88_8471, #go88_game, #go88_cong_game,#go88_betz\nhttps:\/\/8471.cn.com\/\nhttps:\/\/www.pinterest.com\/go888471\/\nhttps:\/\/www.tumblr.com\/go888471\nhttps:\/\/gravatar.com\/go888471\nhttps:\/\/500px.com\/p\/go888471\nhttps:\/\/secondstreet.ru\/profile\/GO888471\/\nhttps:\/\/nhattao.com\/members\/go888471.6951208\/\nhttps:\/\/community.m5stack.com\/user\/go888471\nhttps:\/\/www.scener.com\/@go888471\nhttps:\/\/demo.wowonder.com\/GO888471\nhttps:\/\/volleypedia.org\/index.php?qa=user&qa_1=GO888471\nhttps:\/\/fanclove.jp\/profile\/jlJ4qQxXWR\nhttps:\/\/www.brownbook.net\/business\/55009806\/go888471\nhttps:\/\/www.plotterusati.it\/user\/go88-8471-cong-game-truc-tuyen\nhttps:\/\/www.fitlynk.com\/GO888471\nhttps:\/\/makeagif.com\/user\/GO888471?ref=XsziPN\nhttps:\/\/www.vid419.com\/home.php?mod=space&uid=3485162\nhttps:\/\/www.play56.net\/home.php?mod=space&uid=6114553\nhttps:\/\/www.circleme.com\/GO888471\nhttps:\/\/protocol.ooo\/ja\/users\/go88-8471-c-ng-game-tr-c-tuy-n\nhttps:\/\/truckymods.io\/user\/483711\nhttps:\/\/www.slmath.org\/people\/104581\nhttps:\/\/cannabis.net\/user\/224202\nhttps:\/\/odesli.co\/pwfdfvqhsjc3q\nhttps:\/\/mygamedb.com\/profile\/GO888471\nhttps:\/\/www.claimajob.com\/profiles\/8147639-go88-8471-c-ng-game-tr-c-tuy-n\nhttps:\/\/www.facekindle.com\/GO888471\nhttp:\/\/www.askmap.net\/location\/7787417\/vietnam\/go88-8471-c\u1ed5ng-game-tr\u1ef1c-tuy\u1ebfn\nhttps:\/\/pumpyoursound.com\/u\/user\/1603937\nhttps:\/\/www.dailymotion.com\/user\/dorkaszj587\nhttps:\/\/edabit.com\/user\/ZCNbEwmoak2tsYGZ8\nhttps:\/\/boldomatic.com\/view\/writer\/go888471\nhttps:\/\/ctxt.io\/2\/AAAEGKXXFw\nhttps:\/\/pastelink.net\/vbnti33w\nhttps:\/\/www.servinord.com\/phpBB2\/profile.php?mode=viewprofile&u=776556\nhttps:\/\/forum.aceinna.com\/user\/go888471\nhttps:\/\/participa.favb.cat\/profiles\/go888471\/activity\nhttps:\/\/searchengines.bg\/members\/go888471.25816\/#about","published_at":"2026-04-14T17:06:25.000000Z","scheduled_publish_at":null,"is_published":true,"is_shared":false,"updated_at":"2026-04-14T17:08:01.000000Z","edited_at":"2026-04-14T17:06:24.000000Z","translation_source":null,"trend_at":null,"promoted_at":null,"reading_time":2,"points":0,"views_count":1,"clips_count":0,"comments_count":0,"rated_value":null,"promoted":false,"trending":false,"is_draft":false,"is_public":true,"locale_code":"vi","is_video":false,"thumbnail_url":"https:\/\/images.viblo.asia\/4356524e-4848-494d-9fce-4e29be383d6b.png","user":{"data":{"id":185911,"url":"https:\/\/viblo.asia\/u\/GO888471","avatar":"49cc6c8a-939c-4ccd-88c8-c880a894eb28.jpg","name":"GO C\u1ed5ng Game Tr\u1ef1c Tuy\u1ebfn","username":"GO888471","followers_count":0,"reputation":0,"posts_count":0,"banned_at":null,"level_partner":null,"following":false}},"tags":{"data":[{"slug":"abstract-class","name":"Abstract Class"},{"slug":"androidflow","name":"AndroidFlow"},{"slug":"asdasd","name":"asdasd"},{"slug":"automation-test-with-playwright","name":"automation test with playwright"},{"slug":"sharpfutureofgaming","name":"sharpFutureOfGaming"}]},"commentators":{"data":[]}},{"id":92798,"title":"T\u1ea1o Server Node.js \u0110\u1ea7u Ti\u00ean: V\u01b0\u1ee3t Qua \"Hello World\" \u0110\u1ec3 Ch\u1ea1m T\u1edbi Chu\u1ea9n Production","slug":"y0VGwGZzVPA","url":"https:\/\/viblo.asia\/p\/tao-server-nodejs-dau-tien-vuot-qua-hello-world-de-cham-toi-chuan-production-y0VGwGZzVPA","user_id":182653,"moderation":null,"transliterated":"tao-server-nodejs-dau-tien-vuot-qua-hello-world-de-cham-toi-chuan-production","contents_short":"B\u1ea5t k\u1ef3 ai h\u1ecdc Node.js c\u0169ng b\u1eaft \u0111\u1ea7u b\u1eb1ng b\u00e0i to\u00e1n \"T\u1ea1o Server\". Ch\u1ec9 t\u1ed1n \u0111\u00fang 5 d\u00f2ng code v\u00e0 10 gi\u00e2y \u0111\u1ec3 in ra ch\u1eef \"Hello World\". Nh\u01b0ng mang 5 d\u00f2ng code \u0111\u00f3 l\u00ean m\u00f4i tr\u01b0\u1eddng Production th\u00ec ch\u1eb3ng kh\u00e1c n\u00e0o x\u00e2y nh\u00e0 l\u1ea7u tr\u00ean n\u1ec1n c\u00e1t.\n\nD\u01b0\u1edbi \u0111\u00e2y l\u00e0 b\u00e0i vi\u1ebft h\u01b0\u1edbng d\u1eabn b\u1ea1n t\u1ef1 tay \"\u0111\u1ed5 m\u00f3ng\" cho m\u1ed9t Server Node.js chu\u1ea9n Vibe Coder, s\u1eb5n s\u00e0ng ch\u1ecbu t\u1ea3i v\u00e0 kh\u00f4ng bao gi\u1edd ch\u1ebft y\u1ec3u.\n\nN\u1ebfu b\u1ea1n l\u00ean m\u1ea1ng g\u00f5 \"How to creat...","contents":"B\u1ea5t k\u1ef3 ai h\u1ecdc Node.js c\u0169ng b\u1eaft \u0111\u1ea7u b\u1eb1ng b\u00e0i to\u00e1n \"T\u1ea1o Server\". Ch\u1ec9 t\u1ed1n \u0111\u00fang 5 d\u00f2ng code v\u00e0 10 gi\u00e2y \u0111\u1ec3 in ra ch\u1eef \"Hello World\". Nh\u01b0ng mang 5 d\u00f2ng code \u0111\u00f3 l\u00ean m\u00f4i tr\u01b0\u1eddng Production th\u00ec ch\u1eb3ng kh\u00e1c n\u00e0o x\u00e2y nh\u00e0 l\u1ea7u tr\u00ean n\u1ec1n c\u00e1t.\n\nD\u01b0\u1edbi \u0111\u00e2y l\u00e0 b\u00e0i vi\u1ebft h\u01b0\u1edbng d\u1eabn b\u1ea1n t\u1ef1 tay \"\u0111\u1ed5 m\u00f3ng\" cho m\u1ed9t Server Node.js chu\u1ea9n Vibe Coder, s\u1eb5n s\u00e0ng ch\u1ecbu t\u1ea3i v\u00e0 kh\u00f4ng bao gi\u1edd ch\u1ebft y\u1ec3u.\n\nN\u1ebfu b\u1ea1n l\u00ean m\u1ea1ng g\u00f5 \"How to create Node.js server\", 99% c\u00e1c b\u00e0i tutorial s\u1ebd n\u00e9m cho b\u1ea1n \u0111o\u1ea1n code huy\u1ec1n tho\u1ea1i n\u00e0y c\u1ee7a Express:\n\n```\n\/\/ T\u01b0 duy \"Th\u1ee3 g\u00f5\" - Nhanh, g\u1ecdn, l\u1eb9 nh\u01b0ng mong manh\nconst express = require('express');\nconst app = express();\n\napp.get('\/', (req, res) => res.send('Hello World!'));\n\napp.listen(3000, () => console.log('Server ch\u1ea1y \u1edf port 3000'));\n```\n\nN\u00f3 ch\u1ea1y \u0111\u01b0\u1ee3c kh\u00f4ng? C\u00f3. Nh\u01b0ng n\u1ebfu b\u1ea1n b\u00ea nguy\u00ean file `index.js` n\u00e0y l\u00ean server th\u1eadt, b\u1ea1n s\u1ebd s\u1edbm \u0111\u1ed1i m\u1eb7t v\u1edbi nh\u1eefng c\u00e2u h\u1ecfi ch\u00ed m\u1ea1ng:\n\n* N\u1ebfu vi\u1ebft Unit Test cho API, l\u00e0m sao \u0111\u1ec3 test m\u00e0 kh\u00f4ng b\u1ecb k\u1eb9t port 3000?\n* N\u1ebfu Docker ho\u1eb7c PM2 kh\u1edfi \u0111\u1ed9ng l\u1ea1i server, c\u00e1c user \u0111ang t\u1ea3i d\u1edf file c\u00f3 b\u1ecb ng\u1eaft k\u1ebft n\u1ed1i ngang x\u01b0\u01a1ng kh\u00f4ng?\n* L\u1ed7i b\u1ea3o m\u1eadt l\u1ed9 Header c\u1ee7a Express x\u1eed l\u00fd \u1edf \u0111\u00e2u?\n\nM\u1ed9t Vibe Coder kh\u00f4ng vi\u1ebft code ch\u1ec9 \u0111\u1ec3 ch\u1ea1y. Ch\u00fang ta vi\u1ebft code \u0111\u1ec3 h\u1ec7 th\u1ed1ng s\u1ed1ng s\u00f3t v\u00e0 d\u1ec5 d\u00e0ng m\u1edf r\u1ed9ng. H\u00e3y c\u00f9ng \"\u0111\u1eadp \u0111i x\u00e2y l\u1ea1i\" c\u00e1i server n\u00e0y nh\u00e9.\n\n### 1. Nguy\u00ean T\u1eafc S\u1ed1 1: T\u00e1ch B\u1ea1ch App v\u00e0 Server\n\nSai l\u1ea7m l\u1edbn nh\u1ea5t c\u1ee7a file \"Hello World\" l\u00e0 n\u00f3 g\u1ed9p chung \u0111\u1ecbnh ngh\u0129a \u1ee9ng d\u1ee5ng (App logic) v\u00e0 b\u1ed9 l\u1eafng nghe m\u1ea1ng (Network Server) v\u00e0o c\u00f9ng m\u1ed9t ch\u1ed7.\n\nCh\u00fang ta ph\u1ea3i t\u00e1ch n\u00f3 ra l\u00e0m 2 file ri\u00eang bi\u1ec7t: `app.js` v\u00e0 `server.js`.\n\nFile `app.js`: N\u01a1i ch\u1ee9a linh h\u1ed3n c\u1ee7a \u1ee9ng d\u1ee5ng\nFile n\u00e0y KH\u00d4NG \u0110\u01af\u1ee2C PH\u00c9P ch\u1ee9a h\u00e0m `listen()`. N\u00f3 ch\u1ec9 l\u00e0m nhi\u1ec7m v\u1ee5 khai b\u00e1o router, middleware v\u00e0 logic.\n\n```\n\/\/ app.js\nconst express = require('express');\nconst app = express();\n\n\/\/ Middleware gi\u1ea3i m\u00e3 JSON body\napp.use(express.json());\n\n\/\/ Khai b\u00e1o c\u00e1c Routes\napp.get('\/api\/v1\/health', (req, res) => {\n    res.status(200).json({ status: 'OK', vibe: 'C\u1ef1c m\u01b0\u1ee3t' });\n});\n\n\/\/ Xu\u1ea5t app ra \u0111\u1ec3 n\u01a1i kh\u00e1c d\u00f9ng\nmodule.exports = app;\n```\n\nL\u1ee3i \u00edch: Khi b\u1ea1n vi\u1ebft Unit Test (b\u1eb1ng Jest\/Supertest), b\u1ea1n ch\u1ec9 c\u1ea7n `require('.\/app')`. Code test s\u1ebd gi\u1ea3 l\u1eadp g\u1eedi request th\u1eb3ng v\u00e0o App m\u00e0 kh\u00f4ng c\u1ea7n m\u1edf Port m\u1ea1ng th\u1ef1c t\u1ebf, test ch\u1ea1y nhanh nh\u01b0 ch\u1edbp v\u00e0 kh\u00f4ng b\u1ecb l\u1ed7i \"Port already in use\".\n\n### 2. Nguy\u00ean T\u1eafc S\u1ed1 2: M\u1eb7c \u00c1o Gi\u00e1p B\u1ea3o V\u1ec7 Ngay T\u1eeb C\u1eeda\n\nTr\u01b0\u1edbc khi mang App ra h\u1ee9ng traffic, b\u1ea1n ph\u1ea3i trang b\u1ecb cho n\u00f3 2 t\u1ea5m khi\u00ean c\u01a1 b\u1ea3n nh\u1ea5t: `cors` (ch\u1ed1ng l\u1ed7i Cross-Origin t\u1eeb Frontend) v\u00e0 `helmet` (gi\u1ea5u c\u00e1c th\u00f4ng tin nh\u1ea1y c\u1ea3m c\u1ee7a Express \u0111\u1ec3 ch\u1ed1ng Hacker d\u00f2 qu\u00e9t).\n\nC\u00e0i \u0111\u1eb7t: `npm install cors helmet`\n\nC\u1eadp nh\u1eadt l\u1ea1i `app.js`:\n\n```\n\/\/ app.js\nconst express = require('express');\nconst helmet = require('helmet');\nconst cors = require('cors');\n\nconst app = express();\n\n\/\/ B\u1ecdc gi\u00e1p b\u1ea3o m\u1eadt HTTP Headers\napp.use(helmet());\n\n\/\/ Cho ph\u00e9p Frontend \u1edf domain kh\u00e1c g\u1ecdi API\napp.use(cors({\n    origin: 'https:\/\/vibe-coder-frontend.com', \/\/ Ch\u1ec9 cho ph\u00e9p domain n\u00e0y g\u1ecdi\n    credentials: true\n}));\n\napp.use(express.json());\n\nmodule.exports = app;\n```\n\n### 3. File server.js: Ngh\u1ec7 Thu\u1eadt \"H\u1ea1 C\u00e1nh M\u1ec1m\" (Graceful Shutdown)\n\n\u0110\u00e2y l\u00e0 n\u01a1i \u0111\u1eb3ng c\u1ea5p Vibe Coder t\u1ecfa s\u00e1ng.\nFile `server.js` s\u1ebd import `app.js` v\u00e0 kh\u1edfi ch\u1ea1y n\u00f3. NH\u01afNG, ch\u00fang ta ph\u1ea3i d\u1ea1y cho Server c\u00e1ch \"ch\u1ebft\" m\u1ed9t c\u00e1ch thanh l\u1ecbch.\n\nKhi b\u1ea1n g\u00f5 `Ctrl + C` ho\u1eb7c khi `PM2\/Docker` ra l\u1ec7nh restart h\u1ec7 th\u1ed1ng (g\u1eedi t\u00edn hi\u1ec7u `SIGINT` ho\u1eb7c `SIGTERM`), n\u1ebfu theo c\u00e1ch code th\u00f4ng th\u01b0\u1eddng, Server s\u1ebd \"t\u1eaft \u0111i\u1ec7n\" ngay l\u1eadp t\u1ee9c. Nh\u1eefng user \u0111ang thanh to\u00e1n d\u1edf, \u0111ang upload file d\u1edf s\u1ebd b\u1ecb v\u0103ng l\u1ed7i `Connection Reset` ch\u1eedi th\u1ec1 om s\u00f2m.\n\nGraceful Shutdown l\u00e0 k\u1ef9 thu\u1eadt: \"\u00ca Server, d\u1eebng nh\u1eadn request M\u1edaI \u0111i. Ch\u1edd tao x\u1eed l\u00fd n\u1ed1t m\u1ea5y request C\u0168 \u0111ang ch\u1ea1y d\u1edf, \u0111\u00f3ng k\u1ebft n\u1ed1i Database an to\u00e0n r\u1ed3i h\u1eb5ng ch\u1ebft nh\u00e9!\".\n\n```\n\/\/ server.js\nconst http = require('http');\nconst app = require('.\/app');\nconst mongoose = require('mongoose'); \/\/ Gi\u1ea3 s\u1eed d\u00f9ng MongoDB\n\nconst PORT = process.env.PORT || 3000;\n\n\/\/ Kh\u1edfi t\u1ea1o HTTP server b\u1ecdc l\u1ea5y Express app\nconst server = http.createServer(app);\n\n\/\/ Ch\u1ea1y server\nserver.listen(PORT, () => {\n    console.log(`\ud83d\ude80 Vibe Coder Server \u0111ang l\u01b0\u1edbt tr\u00ean port ${PORT}`);\n});\n\n\/\/ --- NGH\u1ec6 THU\u1eacT H\u1ea0 C\u00c1NH M\u1ec0M (GRACEFUL SHUTDOWN) ---\n\n\/\/ B\u1eaft t\u00edn hi\u1ec7u ng\u1eaft t\u1eeb Terminal (Ctrl + C) ho\u1eb7c Docker\/PM2\nconst shutdown = () => {\n    console.log('\\n\u26a0\ufe0f Nh\u1eadn \u0111\u01b0\u1ee3c l\u1ec7nh t\u1eaft. \u0110ang h\u1ea1 c\u00e1nh m\u1ec1m...');\n\n    \/\/ 1. D\u1eebng nh\u1eadn th\u00eam request m\u1edbi v\u00e0o Port 3000\n    server.close(async (err) => {\n        if (err) {\n            console.error('L\u1ed7i khi \u0111\u00f3ng server:', err);\n            process.exit(1);\n        }\n        \n        console.log('\u2705 \u0110\u00e3 \u0111\u00f3ng c\u1ed5ng m\u1ea1ng, kh\u00f4ng nh\u1eadn request m\u1edbi.');\n\n        \/\/ 2. Ng\u1eaft k\u1ebft n\u1ed1i Database an to\u00e0n (n\u1ebfu c\u00f3)\n        try {\n            \/\/ await mongoose.connection.close(); \n            \/\/ await redis.quit();\n            console.log('\u2705 \u0110\u00e3 ng\u1eaft k\u1ebft n\u1ed1i Database.');\n            \n            console.log('\ud83d\udca4 Ch\u00fac ng\u1ee7 ngon!');\n            process.exit(0); \/\/ 3. T\u1eaft process Node.js an to\u00e0n\n        } catch (dbError) {\n            console.error('\u274c L\u1ed7i khi ng\u1eaft DB:', dbError);\n            process.exit(1);\n        }\n    });\n\n    \/\/ \u00c9p ch\u1ebft n\u1ebfu x\u1eed l\u00fd d\u1edf dang qu\u00e1 l\u00e2u (V\u00ed d\u1ee5: 10 gi\u00e2y)\n    setTimeout(() => {\n        console.error('\ud83d\udea8 Qu\u00e1 th\u1eddi gian h\u1ea1 c\u00e1nh (10s). \u00c9p bu\u1ed9c t\u1eaft!');\n        process.exit(1);\n    }, 10000);\n};\n\nprocess.on('SIGINT', shutdown);\nprocess.on('SIGTERM', shutdown);\n```\n\n### L\u1eddi k\u1ebft\n\nV\u1eady l\u00e0 xong! Kh\u00f4ng c\u00f2n l\u00e0 m\u1ed9t script \"Hello World\" ng\u00e2y ng\u00f4 n\u1eefa. Server c\u1ee7a b\u1ea1n b\u00e2y gi\u1edd \u0111\u00e3 c\u00f3 t\u00ednh module cao (t\u00e1ch app\/server), \u0111\u01b0\u1ee3c b\u1ecdc gi\u00e1p ch\u1ed1ng \u0111\u1ea1n (Helmet, CORS) v\u00e0 bi\u1ebft c\u00e1ch h\u00e0nh x\u1eed v\u00f4 c\u00f9ng chuy\u00ean nghi\u1ec7p khi b\u1ecb t\u1eaft \u0111\u1ed9t ng\u1ed9t (Graceful Shutdown). \u0110\u00e2y ch\u00ednh l\u00e0 b\u1ed9 khung chu\u1ea9n m\u1ef1c m\u00e0 b\u1ea1n c\u00f3 th\u1ec3 d\u00f9ng l\u00e0m Boilerplate cho m\u1ecdi d\u1ef1 \u00e1n Backend t\u1eeb nay v\u1ec1 sau.\n\nCh\u1ee7 \u0111\u1ec1 ti\u1ebfp theo: R\u1eebng R\u1eadm \u0110\u1ecbnh Tuy\u1ebfn (Routing) - Thi\u1ebft K\u1ebf C\u1ea5u Tr\u00fac Th\u01b0 M\u1ee5c Chu\u1ea9n Clean Architecture\n\nServer \u0111\u00e3 ch\u1ea1y, nh\u01b0ng b\u00e2y gi\u1edd b\u1ea1n s\u1ebd v\u1ee9t c\u00e1c \u0111o\u1ea1n code x\u1eed l\u00fd logic (\u0111\u0103ng nh\u1eadp, l\u1ea5y danh s\u00e1ch s\u1ea3n ph\u1ea9m, thanh to\u00e1n) v\u00e0o \u0111\u00e2u?\n\nN\u1ebfu b\u1ea1n v\u1ee9t h\u00e0ng ng\u00e0n d\u00f2ng code v\u00e0o chung m\u1ed9t file app.js ho\u1eb7c nh\u00e9t c\u1ea3 SQL query th\u1eb3ng v\u00e0o file Router, d\u1ef1 \u00e1n c\u1ee7a b\u1ea1n s\u1ebd s\u1edbm bi\u1ebfn th\u00e0nh m\u1ed9t t\u00f4 m\u00ec Spaghetti kh\u1ed5ng l\u1ed3 mang t\u00ean \"Technical Debt\" (N\u1ee3 k\u1ef9 thu\u1eadt).\n\n\u1ede b\u00e0i vi\u1ebft t\u1edbi, m\u00ecnh s\u1ebd h\u01b0\u1edbng d\u1eabn anh em c\u00e1ch \"chia \u0111\u1ec3 tr\u1ecb\". Ph\u00e2n b\u1ed5 code th\u00e0nh c\u00e1c t\u1ea7ng: Router -> Controller -> Service -> Repository. Khi\u1ebfn cho source code c\u1ee7a b\u1ea1n d\u00f9 c\u00f3 l\u00ean \u0111\u1ebfn 100 API th\u00ec vi\u1ec7c t\u00ecm ki\u1ebfm v\u00e0 s\u1eeda bug v\u1eabn d\u1ec5 nh\u01b0 l\u1ea5y k\u1eb9o trong t\u00fai. Anh em nh\u1edb follow nh\u00e9!","published_at":"2026-04-14T16:18:06.000000Z","scheduled_publish_at":null,"is_published":true,"is_shared":false,"updated_at":"2026-04-14T17:36:02.000000Z","edited_at":"2026-04-14T16:18:05.000000Z","translation_source":null,"trend_at":null,"promoted_at":null,"reading_time":5,"points":0,"views_count":8,"clips_count":0,"comments_count":1,"rated_value":null,"promoted":false,"trending":false,"is_draft":false,"is_public":true,"locale_code":"vi","is_video":false,"thumbnail_url":"https:\/\/images.viblo.asia\/9ddb68b2-e4ed-4c93-97ab-446837971c34.png","user":{"data":{"id":182653,"url":"https:\/\/viblo.asia\/u\/hhoang","avatar":"90700a59-6e71-4d6c-bff6-0223a4e007c4.jpg","name":"Nguy\u1ec5n Huy Ho\u00e0ng","username":"hhoang","followers_count":46,"reputation":2509,"posts_count":250,"banned_at":null,"level_partner":null,"following":false}},"tags":{"data":[{"slug":"android-architecture","name":"Android Architecture"},{"slug":"backend","name":"Backend"},{"slug":"cau-hoi-ve-nodejs","name":"c\u00e2u h\u1ecfi v\u1ec1 nodejs"},{"slug":"express","name":"Express"}]},"commentators":{"data":[{"id":182653,"url":"https:\/\/viblo.asia\/u\/hhoang","avatar":"90700a59-6e71-4d6c-bff6-0223a4e007c4.jpg","name":"Nguy\u1ec5n Huy Ho\u00e0ng","username":"hhoang","followers_count":0,"reputation":0,"posts_count":0,"banned_at":null,"level_partner":null}]}},{"id":92797,"title":"S\u1ef1 kh\u00e1c nhau gi\u1eefa Authentication vs Authorization l\u00e0 g\u00ec?","slug":"PoL7edke4vk","url":"https:\/\/viblo.asia\/p\/su-khac-nhau-giua-authentication-vs-authorization-la-gi-PoL7edke4vk","user_id":182653,"moderation":null,"transliterated":"su-khac-nhau-giua-authentication-vs-authorization-la-gi","contents_short":"H\u00f4m nay ch\u00fang ta s\u1ebd gi\u1ea3i quy\u1ebft m\u1ed9t \"c\u00fa l\u1eeba\" kinh \u0111i\u1ec3n trong ng\u00e0nh IT. M\u00ecnh t\u1eebng ph\u1ecfng v\u1ea5n r\u1ea5t nhi\u1ec1u b\u1ea1n fresher, th\u1eadm ch\u00ed c\u1ea3 mid-level, khi \u0111\u01b0\u1ee3c h\u1ecfi: \"Em x\u1eed l\u00fd Auth trong d\u1ef1 \u00e1n n\u00e0y th\u1ebf n\u00e0o?\", c\u00e1c b\u1ea1n th\u01b0\u1eddng g\u1ed9p chung c\u1ea3 hai kh\u00e1i ni\u1ec7m Authentication v\u00e0 Authorization l\u00e0m m\u1ed9t v\u00e0 g\u1ecdi t\u1eaft l\u00e0 \"Auth\".\n\nS\u1ef1 nh\u1ea7m l\u1eabn n\u00e0y kh\u00f4ng ch\u1ec9 cho th\u1ea5y l\u1ed7 h\u1ed5ng v\u1ec1 l\u00fd thuy\u1ebft, m\u00e0 mang l\u00ean Production, n\u00f3 s\u1ebd \u0111\u1ebb ra nh\u1eefng c...","contents":"H\u00f4m nay ch\u00fang ta s\u1ebd gi\u1ea3i quy\u1ebft m\u1ed9t \"c\u00fa l\u1eeba\" kinh \u0111i\u1ec3n trong ng\u00e0nh IT. M\u00ecnh t\u1eebng ph\u1ecfng v\u1ea5n r\u1ea5t nhi\u1ec1u b\u1ea1n fresher, th\u1eadm ch\u00ed c\u1ea3 mid-level, khi \u0111\u01b0\u1ee3c h\u1ecfi: \"Em x\u1eed l\u00fd Auth trong d\u1ef1 \u00e1n n\u00e0y th\u1ebf n\u00e0o?\", c\u00e1c b\u1ea1n th\u01b0\u1eddng g\u1ed9p chung c\u1ea3 hai kh\u00e1i ni\u1ec7m Authentication v\u00e0 Authorization l\u00e0m m\u1ed9t v\u00e0 g\u1ecdi t\u1eaft l\u00e0 \"Auth\".\n\nS\u1ef1 nh\u1ea7m l\u1eabn n\u00e0y kh\u00f4ng ch\u1ec9 cho th\u1ea5y l\u1ed7 h\u1ed5ng v\u1ec1 l\u00fd thuy\u1ebft, m\u00e0 mang l\u00ean Production, n\u00f3 s\u1ebd \u0111\u1ebb ra nh\u1eefng con bug b\u1ea3o m\u1eadt t\u00e0n kh\u1ed1c nh\u1ea5t (v\u00ed d\u1ee5: User A \u0111\u0103ng nh\u1eadp th\u00e0nh c\u00f4ng v\u00e0 x\u00f3a lu\u00f4n b\u00e0i vi\u1ebft c\u1ee7a User B).\n\nD\u01b0\u1edbi \u0111\u00e2y l\u00e0 b\u00e0i vi\u1ebft b\u00f3c t\u00e1ch t\u1eadn g\u1ed1c r\u1ec5 hai kh\u00e1i ni\u1ec7m n\u00e0y, \u0111\u1ea3m b\u1ea3o b\u1ea1n \u0111\u1ecdc xong s\u1ebd kh\u00f4ng bao gi\u1edd nh\u1ea7m l\u1eabn n\u1eefa!\n\nTrong th\u1ebf gi\u1edbi Backend, b\u1ea3o m\u1eadt l\u00e0 t\u1ea5m khi\u00ean \u0111\u1ea7u ti\u00ean v\u00e0 c\u0169ng l\u00e0 ch\u1ed1t ch\u1eb7n cu\u1ed1i c\u00f9ng. Khi thi\u1ebft k\u1ebf API, b\u1ea1n lu\u00f4n ph\u1ea3i tr\u1ea3 l\u1eddi 2 c\u00e2u h\u1ecfi t\u00e1ch bi\u1ec7t ho\u00e0n to\u00e0n: \"M\u00e0y l\u00e0 ai?\" v\u00e0 \"M\u00e0y \u0111\u01b0\u1ee3c ph\u00e9p l\u00e0m g\u00ec?\".\n\n![image.png](https:\/\/images.viblo.asia\/31453d38-c6ec-4e55-9d8b-9fa34a857365.png)\n\nS\u1ef1 nh\u1ea7m l\u1eabn gi\u1eefa Authentication (X\u00e1c th\u1ef1c) v\u00e0 Authorization (Ph\u00e2n quy\u1ec1n) \u0111\u1ebfn t\u1eeb vi\u1ec7c c\u1ea3 hai \u0111\u1ec1u b\u1eaft \u0111\u1ea7u b\u1eb1ng ch\u1eef \"Auth\". Nh\u01b0ng b\u1ea3n ch\u1ea5t c\u1ee7a ch\u00fang l\u1ea1i kh\u00e1c nhau m\u1ed9t tr\u1eddi m\u1ed9t v\u1ef1c.\n\nH\u00e3y t\u01b0\u1edfng t\u01b0\u1ee3ng h\u1ec7 th\u1ed1ng API c\u1ee7a b\u1ea1n l\u00e0 m\u1ed9t t\u00f2a nh\u00e0 v\u0103n ph\u00f2ng h\u1ea1ng A.\n\n### 1. Authentication (AuthN) - Anh B\u1ea3o V\u1ec7 C\u1eeda Nh\u00ecn M\u1eb7t \u0110\u1eb7t T\u00ean\n\n![image.png](https:\/\/images.viblo.asia\/368eb111-efa4-4425-b3a8-b0ce0df94d06.png)\n\nC\u00e2u h\u1ecfi c\u1ed1t l\u00f5i: B\u1ea1n l\u00e0 ai? (Who are you?)\n\n\u0110\u00e2y l\u00e0 b\u01b0\u1edbc \u0110\u1ea6U TI\u00caN. Khi b\u1ea1n b\u01b0\u1edbc t\u1edbi c\u1eeda t\u00f2a nh\u00e0, anh b\u1ea3o v\u1ec7 ch\u1eb7n b\u1ea1n l\u1ea1i v\u00e0 y\u00eau c\u1ea7u xu\u1ea5t tr\u00ecnh C\u0103n c\u01b0\u1edbc c\u00f4ng d\u00e2n ho\u1eb7c qu\u1eb9t th\u1ebb t\u1eeb.\n\n* N\u1ebfu th\u1ebb c\u1ee7a b\u1ea1n h\u1ee3p l\u1ec7, c\u00f3 h\u00ecnh \u1ea3nh kh\u1edbp v\u1edbi khu\u00f4n m\u1eb7t: Anh b\u1ea3o v\u1ec7 g\u1eadt \u0111\u1ea7u, ghi nh\u1eadn b\u1ea1n l\u00e0 Nguy\u1ec5n Huy Ho\u00e0ng. **Qu\u00e1 tr\u00ecnh Authentication th\u00e0nh c\u00f4ng**.\n* N\u1ebfu b\u1ea1n \u0111\u01b0a m\u1ed9t c\u00e1i th\u1ebb gi\u1ea3, th\u1ebb h\u1ebft h\u1ea1n, ho\u1eb7c kh\u00f4ng c\u00f3 th\u1ebb: Anh b\u1ea3o v\u1ec7 \u0111u\u1ed5i b\u1ea1n ra ngo\u00e0i\n\nTrong code Backend:\n\n* C\u00f4ng c\u1ee5: Form Login (Username\/Password), FaceID, OTP SMS, ho\u1eb7c ki\u1ec3m tra ch\u1eef k\u00fd c\u1ee7a chu\u1ed7i JWT (JSON Web Token).\n* M\u00e3 l\u1ed7i HTTP kinh \u0111i\u1ec3n: `401 Unauthorized.`\n(V\u00e2ng, nh\u1eefng ng\u01b0\u1eddi t\u1ea1o ra chu\u1ea9n HTTP \u0111\u00e3 \u0111\u1eb7t t\u00ean m\u00e3 l\u1ed7i 401 h\u01a1i \"ngu\" m\u1ed9t ch\u00fat. \u0110\u00e1ng l\u00fd n\u00f3 ph\u1ea3i t\u00ean l\u00e0 401 Unauthenticated m\u1edbi \u0111\u00fang. \u0110\u00e2y ch\u00ednh l\u00e0 nguy\u00ean nh\u00e2n g\u00e2y l\u00fa l\u1eabn cho h\u00e0ng v\u1ea1n anh em dev!)\n\n### 2. Authorization (AuthZ) - H\u1ec7 Th\u1ed1ng C\u1eeda T\u1eeb Ph\u00e2n C\u1ea5p\n\n![image.png](https:\/\/images.viblo.asia\/1c1027ae-ae99-41c8-8ce9-effa0185c89c.png)\n\nC\u00e2u h\u1ecfi c\u1ed1t l\u00f5i: B\u1ea1n \u0111\u01b0\u1ee3c ph\u00e9p l\u00e0m g\u00ec? (What can you do?)\n\n\u0110\u00e2y l\u00e0 b\u01b0\u1edbc TH\u1ee8 HAI, CH\u1ec8 X\u1ea2Y RA SAU KHI b\u1ea1n \u0111\u00e3 qua \u0111\u01b0\u1ee3c c\u1eeda Authentication.\nB\u00e2y gi\u1edd, t\u00f2a nh\u00e0 \u0111\u00e3 bi\u1ebft b\u1ea1n l\u00e0 Nguy\u1ec5n Huy Ho\u00e0ng. B\u1ea1n c\u1ea7m chi\u1ebfc th\u1ebb t\u1eeb tung t\u0103ng \u0111i l\u1ea1i.\n\n* B\u1ea1n qu\u1eb9t th\u1ebb v\u00e0o c\u1eeda Ph\u00f2ng v\u1ec7 sinh chung: C\u1eeda m\u1edf t\u00edt t\u00edt. (Authorization th\u00e0nh c\u00f4ng).\n* B\u1ea1n ng\u1ee9a tay c\u1ea7m th\u1ebb \u0111\u00f3 qu\u1eb9t v\u00e0o c\u1eeda Ph\u00f2ng Server trung t\u00e2m ho\u1eb7c Ph\u00f2ng K\u1ebf To\u00e1n: C\u1eeda b\u00e1o t\u00edt t\u00edt m\u00e0u \u0111\u1ecf, kh\u00f4ng m\u1edf! B\u1ea1n l\u00e0 nh\u00e2n vi\u00ean qu\u00e8n (Role: Employee), ph\u00f2ng n\u00e0y ch\u1ec9 d\u00e0nh cho Admin (Role: IT Manager).\n\nTrong code Backend:\n\n* C\u00f4ng c\u1ee5: RBAC (Role-Based Access Control - Ph\u00e2n quy\u1ec1n theo ch\u1ee9c v\u1ee5), ABAC (Attribute-Based Access Control), ki\u1ec3m tra trong Database xem user_id n\u00e0y c\u00f3 kh\u1edbp v\u1edbi owner_id c\u1ee7a b\u00e0i vi\u1ebft kh\u00f4ng (ch\u1ed1ng l\u1ed7i IDOR).\n* M\u00e3 l\u1ed7i HTTP kinh \u0111i\u1ec3n: `403 Forbidden`. (T\u00f2a nh\u00e0 bi\u1ebft r\u1ea5t r\u00f5 b\u1ea1n l\u00e0 ai, th\u1ebb b\u1ea1n x\u1ecbn 100%, nh\u01b0ng b\u1ea1n KH\u00d4NG C\u00d3 QUY\u1ec0N v\u00e0o \u0111\u00e2y. C\u1ea5m c\u1eeda!).\n\n### 3. Tr\u1ef1c quan h\u00f3a ranh gi\u1edbi AuthN v\u00e0 AuthZ\n\n\u0110\u1ec3 b\u1ea1n c\u1ea3m nh\u1eadn r\u00f5 h\u01a1n lu\u1ed3ng ch\u1ea1y \u0111\u1ed9c l\u1eadp c\u1ee7a hai h\u1ec7 th\u1ed1ng n\u00e0y, m\u00ecnh c\u00f3 t\u1ea1o m\u1ed9t Widget m\u00f4 ph\u1ecfng ngay b\u00ean d\u01b0\u1edbi. B\u1ea1n h\u00e3y th\u1eed \u0111\u00f3ng vai c\u00e1c nh\u00e2n v\u1eadt v\u1edbi c\u00e1c lo\u1ea1i th\u1ebb kh\u00e1c nhau, th\u1eed th\u1ef1c hi\u1ec7n c\u00e1c h\u00e0nh \u0111\u1ed9ng \u0111\u1ec3 xem h\u1ec7 th\u1ed1ng tr\u1ea3 v\u1ec1 m\u00e3 l\u1ed7i `401` hay `403` nh\u00e9!\n\n![](https:\/\/images.viblo.asia\/a55b3962-e6e5-45d3-8cc4-8b9603432cb1.gif)\n\n\n\n### 4. T\u01b0 Duy Vibe Coder: T\u00e1ch B\u1ea1ch Middleware\n\nNhi\u1ec1u anh em fresher th\u01b0\u1eddng vi\u1ebft code r\u1ea5t \"h\u1ed3n nhi\u00ean\" th\u1ebf n\u00e0y:\n\n```\n\/\/ T\u01af DUY CODE G\u1ed8P (R\u1ea4T T\u1ec6)\napp.post('\/api\/delete-user', (req, res) => {\n    const token = req.headers.authorization;\n    if (!token) return res.status(401).send(\"Ch\u01b0a \u0111\u0103ng nh\u1eadp\"); \/\/ AuthN\n    \n    const user = verifyToken(token);\n    if (user.role !== 'admin') return res.status(403).send(\"Kh\u00f4ng c\u00f3 quy\u1ec1n\"); \/\/ AuthZ\n    \n    \/\/ Logic x\u00f3a user...\n});\n```\n\n\u0110o\u1ea1n code tr\u00ean n\u1ebfu l\u1eb7p l\u1ea1i \u1edf 100 c\u00e1i API th\u00ec b\u1ea1n s\u1ebd ch\u1ebft ch\u00ecm trong \u0111\u1ed1ng code r\u00e1c.\n\nM\u1ed9t Vibe Coder s\u1ebd thi\u1ebft k\u1ebf h\u1ec7 th\u1ed1ng Middleware r\u1ea1ch r\u00f2i nh\u01b0 m\u1ed9t chu\u1ed7i r\u00e2y l\u1ecdc:\n\n```\n\/\/ T\u01af DUY VIBE CODER: T\u00e1ch b\u1ea1ch r\u00f5 r\u00e0ng\n\/\/ Ch\u1ec9 ki\u1ec3m tra danh t\u00ednh (AuthN)\nconst requireLogin = (req, res, next) => { ... } \n\n\/\/ Ch\u1ec9 ki\u1ec3m tra quy\u1ec1n (AuthZ) - N\u00f3 ng\u1ea7m hi\u1ec3u l\u00e0 AuthN \u0111\u00e3 pass\nconst requireRole = (role) => (req, res, next) => { ... } \n\n\/\/ G\u1eafn v\u00e0o API si\u00eau m\u01b0\u1ee3t:\napp.post('\/api\/delete-user', requireLogin, requireRole('admin'), (req, res) => {\n    \/\/ T\u1edbi \u0111\u01b0\u1ee3c \u0111\u00e2y th\u00ec an t\u00e2m 100% code logic x\u00f3a. Kh\u00f4ng b\u1eadn t\u00e2m b\u1ea3o m\u1eadt n\u1eefa!\n});\n```\n\n### L\u1eddi k\u1ebft\n\nAuthentication ch\u1ee9ng minh b\u1ea1n l\u00e0 ch\u00ednh b\u1ea1n. Authorization quy\u1ebft \u0111\u1ecbnh b\u1ea1n c\u00f3 th\u1ec3 l\u00e0m g\u00ec. Nh\u1edb n\u1eb1m l\u00f2ng hai c\u00e2u th\u1ea7n ch\u00fa n\u00e0y, v\u00e0 ph\u00e2n t\u00e1ch ch\u00fang r\u1ea1ch r\u00f2i trong ki\u1ebfn tr\u00fac code (Middleware), b\u1ea1n s\u1ebd kh\u00f4ng bao gi\u1edd t\u1ea1o ra nh\u1eefng l\u1ed7 h\u1ed5ng ng\u1edb ng\u1ea9n khi\u1ebfn h\u1ec7 th\u1ed1ng b\u1ecb hacker \"l\u00e0m c\u1ecf\".\n\nCh\u1ee7 \u0111\u1ec1 ti\u1ebfp theo: K\u1ef7 Nguy\u00ean Kh\u00f4ng Tr\u1ea1ng Th\u00e1i (Stateless) - Quy\u1ec1n N\u0103ng C\u1ee7a JWT & N\u1ed7i \u0110au H\u1ee7y Token\n\nB\u1ea1n \u0111\u00e3 bi\u1ebft c\u00e1ch x\u00e1c th\u1ef1c danh t\u00ednh. H\u1ed3i x\u01b0a, ng\u01b0\u1eddi ta d\u00f9ng Session l\u01b0u trong RAM server \u0111\u1ec3 nh\u1edb m\u1eb7t user (Stateful). Nh\u01b0ng khi h\u1ec7 th\u1ed1ng c\u00f3 10 con Server, user \u0111\u0103ng nh\u1eadp \u1edf Server A m\u00e0 g\u1ecdi API tr\u00fang Server B th\u00ec b\u1ecb b\u1eaft \u0111\u0103ng nh\u1eadp l\u1ea1i.\n\nTh\u1ebf l\u00e0 thi\u00ean h\u1ea1 \u0111\u1ed5 x\u00f4 \u0111i d\u00f9ng JWT (JSON Web Token) \u0111\u1ec3 l\u00e0m h\u1ec7 th\u1ed1ng Kh\u00f4ng tr\u1ea1ng th\u00e1i (Stateless). JWT x\u1ecbn th\u1eadt, Server kh\u00f4ng c\u1ea7n nh\u1edb g\u00ec c\u1ea3, ch\u1ec9 c\u1ea7n gi\u1ea3i m\u00e3 chu\u1ed7i JWT l\u00e0 bi\u1ebft ngay user l\u00e0 ai.\nNh\u01b0ng... n\u1ebfu User b\u1ea5m \"\u0110\u0103ng xu\u1ea5t\", ho\u1eb7c b\u1ea1n ph\u00e1t hi\u1ec7n Token b\u1ecb l\u1ed9 v\u00e0 mu\u1ed1n kh\u00f3a t\u00e0i kho\u1ea3n \u0111\u00f3 ngay l\u1eadp t\u1ee9c th\u00ec sao? JWT l\u00e0 Stateless, n\u00f3 kh\u00f4ng \u0111\u01b0\u1ee3c l\u01b0u \u1edf \u0111\u00e2u c\u1ea3, b\u1ea1n H\u1ee6Y (Revoke) n\u00f3 ki\u1ec3u g\u00ec?\n\n\u1ede b\u00e0i vi\u1ebft t\u1edbi, ch\u00fang ta s\u1ebd m\u1ed5 x\u1ebb tr\u00e1i tim c\u1ee7a chu\u1ea9n JWT v\u00e0 gi\u1ea3i quy\u1ebft b\u00e0i to\u00e1n nh\u1ee9c nh\u1ed1i b\u1eadc nh\u1ea5t c\u1ee7a n\u00f3: L\u00e0m sao \u0111\u1ec3 \u0111\u0103ng xu\u1ea5t m\u1ed9t Stateless Token? Anh em nh\u1edb \u0111\u00f3n \u0111\u1ecdc nh\u00e9!","published_at":"2026-04-14T16:02:14.000000Z","scheduled_publish_at":null,"is_published":true,"is_shared":false,"updated_at":"2026-04-14T17:14:03.000000Z","edited_at":"2026-04-14T16:05:34.000000Z","translation_source":null,"trend_at":null,"promoted_at":null,"reading_time":6,"points":0,"views_count":7,"clips_count":0,"comments_count":1,"rated_value":null,"promoted":false,"trending":false,"is_draft":false,"is_public":true,"locale_code":"vi","is_video":false,"thumbnail_url":"https:\/\/images.viblo.asia\/978b6d4d-86d0-412a-8f23-0afbe88c0e8b.png","user":{"data":{"id":182653,"url":"https:\/\/viblo.asia\/u\/hhoang","avatar":"90700a59-6e71-4d6c-bff6-0223a4e007c4.jpg","name":"Nguy\u1ec5n Huy Ho\u00e0ng","username":"hhoang","followers_count":46,"reputation":2509,"posts_count":250,"banned_at":null,"level_partner":null,"following":false}},"tags":{"data":[{"slug":"ai-security","name":"AI Security"},{"slug":"authentication","name":"Authentication"},{"slug":"authorization","name":"authorization"},{"slug":"backend","name":"Backend"}]},"commentators":{"data":[{"id":182653,"url":"https:\/\/viblo.asia\/u\/hhoang","avatar":"90700a59-6e71-4d6c-bff6-0223a4e007c4.jpg","name":"Nguy\u1ec5n Huy Ho\u00e0ng","username":"hhoang","followers_count":0,"reputation":0,"posts_count":0,"banned_at":null,"level_partner":null}]}},{"id":92796,"title":"Kh\u1ee7ng Ho\u1ea3ng HEIC: Khi Apple B\u1eaft Tr\u00ecnh Duy\u1ec7t Ph\u1ea3i \"Kh\u00f3c\" & C\u00e1ch Gi\u1ea3i C\u1ee9u B\u1eb1ng Code","slug":"13VM9qP0VY7","url":"https:\/\/viblo.asia\/p\/khung-hoang-heic-khi-apple-bat-trinh-duyet-phai-khoc-cach-giai-cuu-bang-code-13VM9qP0VY7","user_id":182653,"moderation":null,"transliterated":"khung-hoang-heic-khi-apple-bat-trinh-duyet-phai-khoc-cach-giai-cuu-bang-code","contents_short":"C\u00e2u chuy\u1ec7n mu\u00f4n thu\u1edf: M\u1ed9t bu\u1ed5i chi\u1ec1u th\u1ee9 S\u00e1u, team CSKH b\u00e1o l\u00ean: \"Anh \u01a1i, c\u00f3 kh\u00e1ch h\u00e0ng VIP d\u00f9ng iPhone 15 Pro Max ph\u00e0n n\u00e0n l\u00e0 t\u1ea3i \u1ea3nh ch\u1ee9ng minh th\u01b0 l\u00ean app to\u00e0n b\u1ecb l\u1ed7i, m\u00e0n h\u00ecnh \u0111en thui kh\u00f4ng th\u1ea5y h\u00ecnh!\"\n\nB\u1ea1n l\u1eadt \u0111\u1eadt m\u1edf Database ra check. File v\u1eabn l\u01b0u v\u00e0o server th\u00e0nh c\u00f4ng, \u0111\u01b0\u1eddng d\u1eabn URL tr\u1ea3 v\u1ec1 \u0111\u00fang chu\u1ea9n. Nh\u01b0ng khi b\u1ea1n copy c\u00e1i link \u0111\u00f3 d\u00e1n v\u00e0o Google Chrome, thay v\u00ec hi\u1ec3n th\u1ecb b\u1ee9c \u1ea3nh, Chrome...","contents":"C\u00e2u chuy\u1ec7n mu\u00f4n thu\u1edf: M\u1ed9t bu\u1ed5i chi\u1ec1u th\u1ee9 S\u00e1u, team CSKH b\u00e1o l\u00ean: \"Anh \u01a1i, c\u00f3 kh\u00e1ch h\u00e0ng VIP d\u00f9ng iPhone 15 Pro Max ph\u00e0n n\u00e0n l\u00e0 t\u1ea3i \u1ea3nh ch\u1ee9ng minh th\u01b0 l\u00ean app to\u00e0n b\u1ecb l\u1ed7i, m\u00e0n h\u00ecnh \u0111en thui kh\u00f4ng th\u1ea5y h\u00ecnh!\"\n\nB\u1ea1n l\u1eadt \u0111\u1eadt m\u1edf Database ra check. File v\u1eabn l\u01b0u v\u00e0o server th\u00e0nh c\u00f4ng, \u0111\u01b0\u1eddng d\u1eabn URL tr\u1ea3 v\u1ec1 \u0111\u00fang chu\u1ea9n. Nh\u01b0ng khi b\u1ea1n copy c\u00e1i link \u0111\u00f3 d\u00e1n v\u00e0o Google Chrome, thay v\u00ec hi\u1ec3n th\u1ecb b\u1ee9c \u1ea3nh, Chrome l\u1ea1i... t\u1ea3i lu\u00f4n c\u00e1i file \u0111\u00f3 xu\u1ed1ng m\u00e1y. Nh\u00ecn k\u1ef9 l\u1ea1i c\u00e1i \u0111u\u00f4i file: avatar.heic.\n\nV\u00e2ng, ch\u00e0o m\u1eebng b\u1ea1n \u0111\u1ebfn v\u1edbi c\u01a1n \u00e1c m\u1ed9ng mang t\u00ean **HEIC (High-Efficiency Image Container).**\n\n### 1. HEIC l\u00e0 g\u00ec v\u00e0 t\u1ea1i sao n\u00f3 l\u1ea1i l\u00e0 \"C\u1ee5c n\u1ee3\" c\u1ee7a Web Dev?\n\nT\u1eeb iOS 11, Apple quy\u1ebft \u0111\u1ecbnh chia tay JPEG v\u00e0 ch\u1ecdn HEIC l\u00e0m \u0111\u1ecbnh d\u1ea1ng \u1ea3nh m\u1eb7c \u0111\u1ecbnh tr\u00ean iPhone. L\u00fd do c\u1ee7a Tim Cook r\u1ea5t h\u1ee3p l\u00fd: HEIC gi\u1eef \u0111\u01b0\u1ee3c ch\u1ea5t l\u01b0\u1ee3ng \u1ea3nh c\u1ef1c cao nh\u01b0ng dung l\u01b0\u1ee3ng ch\u1ec9 b\u1eb1ng m\u1ed9t n\u1eeda so v\u1edbi JPEG.\n\nNh\u01b0ng Apple qu\u00ean (ho\u1eb7c kh\u00f4ng th\u00e8m) n\u00f3i v\u1edbi th\u1ebf gi\u1edbi web m\u1ed9t \u0111i\u1ec1u: H\u1ea7u h\u1ebft c\u00e1c tr\u00ecnh duy\u1ec7t ph\u1ed5 bi\u1ebfn (Chrome, Edge, Firefox) \u0111\u1ec1u KH\u00d4NG h\u1ed7 tr\u1ee3 hi\u1ec3n th\u1ecb th\u1ebb `<img src=\"image.heic\">`. (Safari th\u00ec \u0111\u01b0\u1ee3c, t\u1ea5t nhi\u00ean r\u1ed3i).\n\nK\u1ebft qu\u1ea3? Ng\u01b0\u1eddi d\u00f9ng iPhone tung t\u0103ng t\u1ea3i \u1ea3nh l\u00ean. Server c\u1ee7a b\u1ea1n ng\u00e2y th\u01a1 l\u01b0u l\u1ea1i. V\u00e0 khi Frontend g\u1ecdi xu\u1ed1ng \u0111\u1ec3 hi\u1ec3n th\u1ecb cho c\u00e1c user d\u00f9ng Windows hay Android xem, m\u1ecdi th\u1ee9 v\u1ee1 v\u1ee5n.\n\nM\u1ed9t Vibe Coder kh\u00f4ng bao gi\u1edd b\u1ea3o kh\u00e1ch h\u00e0ng: \"Ch\u1ecb \u01a1i ch\u1ecb v\u00e0o C\u00e0i \u0111\u1eb7t iPhone \u0111\u1ed5i \u0111u\u00f4i \u1ea3nh sang JPEG gi\u00fap em\". Kh\u00e1ch h\u00e0ng l\u00e0 th\u01b0\u1ee3ng \u0111\u1ebf. Ch\u00fang ta ph\u1ea3i x\u1eed l\u00fd n\u00f3 b\u1eb1ng Code!\n\n### 2. T\u01b0 Duy X\u1eed L\u00fd: \"L\u00f2 Luy\u1ec7n \u0110an\" \u0110\u1eb7t \u1ede \u0110\u00e2u?\n\n\u0110\u1ec3 bi\u1ebfn HEIC th\u00e0nh JPEG\/PNG, ch\u00fang ta c\u00f3 2 ng\u00e3 r\u1ebd ki\u1ebfn tr\u00fac. Ch\u1ecdn \u0111\u01b0\u1eddng n\u00e0o ph\u1ee5 thu\u1ed9c v\u00e0o \"Vibe\" c\u1ee7a team b\u1ea1n:\n\n* C\u00e1ch 1: X\u1eed l\u00fd t\u1ea1i Frontend (Client-side). B\u1eaft tr\u00ecnh duy\u1ec7t c\u1ee7a user t\u1ef1 chuy\u1ec3n \u0111\u1ed5i tr\u01b0\u1edbc khi upload l\u00ean Server.\n* \u01afu \u0111i\u1ec3m: C\u1ef1c k\u1ef3 ti\u1ebft ki\u1ec7m CPU cho Server Backend. Server ch\u1ec9 vi\u1ec7c nh\u1eadn file JPEG ti\u00eau chu\u1ea9n.\n* Nh\u01b0\u1ee3c \u0111i\u1ec3m: User d\u00f9ng m\u00e1y qu\u00e1 c\u0169 c\u00f3 th\u1ec3 b\u1ecb lag v\u00e0i gi\u00e2y l\u00fac convert.\n* C\u00e1ch 2: X\u1eed l\u00fd t\u1ea1i Backend (Server-side). Frontend c\u1ee9 n\u00e9m file HEIC l\u00ean, Backend s\u1ebd h\u1ee9ng v\u00e0 d\u00f9ng CPU c\u1ee7a server \u0111\u1ec3 convert.\n* \u01afu \u0111i\u1ec3m: Tr\u1ea3i nghi\u1ec7m upload c\u1ee7a user m\u01b0\u1ee3t m\u00e0, Frontend \u0111\u1ee1 vi\u1ebft code.\n* Nh\u01b0\u1ee3c \u0111i\u1ec3m: T\u1ed1n t\u00e0i nguy\u00ean Server. L\u1ee1 1000 ng\u01b0\u1eddi c\u00f9ng upload HEIC l\u00fac Flash Sale, Server gi\u1eadt tung ch\u1ea3o.\n\nD\u01b0\u1edbi \u0111\u00e2y, m\u00ecnh s\u1ebd h\u01b0\u1edbng d\u1eabn c\u1ea3 2 c\u00e1ch \u0111\u1ec3 anh em t\u00f9y c\u01a1 \u1ee9ng bi\u1ebfn.\n\n### 3. Gi\u1ea3i Ph\u00e1p 1: Ch\u1eb7n Ngay T\u1eeb C\u1eeda (Frontend x heic2any)\n\n\u0110\u00e2y l\u00e0 ph\u01b0\u01a1ng ph\u00e1p m\u00ecnh khuy\u00ean d\u00f9ng nh\u1ea5t. H\u00e3y \u0111\u1ec3 m\u00e1y c\u1ee7a user t\u1ef1 l\u00e0m vi\u1ec7c c\u1ee7a n\u00f3.\nTr\u00ean Frontend (React\/Vue\/Vanilla), th\u01b0 vi\u1ec7n th\u1ea7n th\u00e1nh nh\u1ea5t \u0111\u1ec3 l\u00e0m vi\u1ec7c n\u00e0y l\u00e0 heic2any.\n\nC\u00e0i \u0111\u1eb7t:\n\n```\nnpm install heic2any\n```\n\nCode th\u1ef1c chi\u1ebfn (B\u1eaft s\u1ef1 ki\u1ec7n l\u00fac ch\u1ecdn file):\n\n```\nimport heic2any from \"heic2any\";\n\nasync function handleFileUpload(event) {\n    let file = event.target.files[0];\n\n    \/\/ Ki\u1ec3m tra n\u1ebfu l\u00e0 file HEIC\n    if (file && (file.type === \"image\/heic\" || file.name.toLowerCase().endsWith(\".heic\"))) {\n        console.log(\"Ph\u00e1t hi\u1ec7n file HEIC, \u0111ang ti\u1ebfn h\u00e0nh '\u0111\u1ed9' l\u1ea1i...\");\n        \n        try {\n            \/\/ Chuy\u1ec3n HEIC sang Blob c\u1ee7a JPEG\n            const convertedBlob = await heic2any({\n                blob: file,\n                toType: \"image\/jpeg\",\n                quality: 0.8 \/\/ Gi\u1eef ch\u1ea5t l\u01b0\u1ee3ng 80% cho nh\u1eb9\n            });\n\n            \/\/ G\u00f3i Blob th\u00e0nh File object \u0111\u1ec3 chu\u1ea9n b\u1ecb g\u1eedi l\u00ean API\n            file = new File([convertedBlob], file.name.replace(\/\\.heic$\/i, \".jpg\"), {\n                type: \"image\/jpeg\"\n            });\n            \n            console.log(\"Convert th\u00e0nh c\u00f4ng, file m\u1edbi:\", file.name);\n        } catch (error) {\n            console.error(\"L\u1ed7i khi convert HEIC:\", error);\n            alert(\"\u1ea2nh c\u1ee7a b\u1ea1n qu\u00e1 ph\u1ee9c t\u1ea1p, vui l\u00f2ng th\u1eed \u1ea3nh kh\u00e1c!\");\n            return;\n        }\n    }\n\n    \/\/ T\u1edbi \u0111\u00e2y th\u00ec file ch\u1eafc ch\u1eafn l\u00e0 JPEG\/PNG. C\u1ee9 fetch\/axios g\u1eedi l\u00ean Backend nh\u01b0 b\u00ecnh th\u01b0\u1eddng!\n    await uploadToServer(file);\n}\n```\n\nC\u1ef1c k\u1ef3 m\u01b0\u1ee3t m\u00e0! Backend c\u1ee7a b\u1ea1n th\u1eadm ch\u00ed kh\u00f4ng bi\u1ebft s\u1ef1 t\u1ed3n t\u1ea1i c\u1ee7a file HEIC \u0111\u00f3.\n\n### 4. Gi\u1ea3i Ph\u00e1p 2: L\u00f2 Luy\u1ec7n \u0110an Tr\u00ean Backend (Node.js)\n\nN\u1ebfu b\u1ea1n l\u00e0m API Public v\u00e0 kh\u00f4ng th\u1ec3 \u00e9p client t\u1ef1 convert, Backend b\u1eaft bu\u1ed9c ph\u1ea3i ra tay.\nTrong Node.js, th\u01b0 vi\u1ec7n x\u1eed l\u00fd \u1ea3nh x\u1ecbn nh\u1ea5t l\u00e0 `sharp`. Tuy nhi\u00ean, `sharp` \u0111\u00f2i h\u1ecfi server ph\u1ea3i c\u00e0i th\u00eam th\u01b0 vi\u1ec7n C++ (libvips c\u00f3 h\u1ed7 tr\u1ee3 HEIF), c\u1ef1c k\u1ef3 \"h\u00e0nh x\u00e1c\" khi deploy qua Docker.\n\nV\u00ec v\u1eady, gi\u1ea3i ph\u00e1p \"ch\u1eefa ch\u00e1y\" an to\u00e0n v\u00e0 d\u1ec5 c\u00e0i \u0111\u1eb7t nh\u1ea5t l\u00e0 d\u00f9ng package `heic-convert` (N\u00f3 d\u00f9ng WebAssembly, ch\u1ea1y \u0111\u01b0\u1ee3c \u1edf m\u1ecdi m\u00f4i tr\u01b0\u1eddng m\u00e0 kh\u00f4ng c\u1ea7n c\u00e0i C++).\n\nC\u00e0i \u0111\u1eb7t:\n\n```\nnpm install heic-convert\n```\n\nCode th\u1ef1c chi\u1ebfn (Trong Route x\u1eed l\u00fd Upload):\n\n```\nconst heicConvert = require('heic-convert');\nconst fs = require('fs');\n\nasync function processUploadedImage(req, res) {\n    let imageBuffer = req.file.buffer; \/\/ Buffer file l\u1ea5y t\u1eeb Multer\n    let fileName = req.file.originalname;\n\n    \/\/ Ki\u1ec3m tra \u0111\u1ecbnh d\u1ea1ng\n    if (fileName.toLowerCase().endsWith('.heic')) {\n        console.log('Backend nh\u1eadn file HEIC, \u0111ang huy \u0111\u1ed9ng CPU...');\n        \n        try {\n            \/\/ Convert Buffer HEIC th\u00e0nh Buffer JPEG\n            imageBuffer = await heicConvert({\n                buffer: imageBuffer, \/\/ \u0110\u1ea7u v\u00e0o\n                format: 'JPEG',      \/\/ \u0110\u1ea7u ra\n                quality: 0.8         \/\/ Ch\u1ea5t l\u01b0\u1ee3ng\n            });\n            \n            \/\/ \u0110\u1ed5i \u0111u\u00f4i file\n            fileName = fileName.replace(\/\\.heic$\/i, '.jpg');\n            console.log('Convert th\u00e0nh JPEG tr\u00ean server th\u00e0nh c\u00f4ng!');\n        } catch (err) {\n            return res.status(500).json({ error: 'Kh\u00f4ng th\u1ec3 \u0111\u1ecdc \u0111\u01b0\u1ee3c \u1ea3nh HEIC n\u00e0y' });\n        }\n    }\n\n    \/\/ Ti\u1ebfn h\u00e0nh l\u01b0u imageBuffer v\u00e0o \u1ed5 c\u1ee9ng HDD ho\u1eb7c \u0111\u1ea9y l\u00ean AWS S3\n    fs.writeFileSync(`.\/uploads\/${fileName}`, imageBuffer);\n    \n    res.json({ message: 'Upload th\u00e0nh c\u00f4ng', url: `\/uploads\/${fileName}` });\n}\n```\n\n### L\u1eddi k\u1ebft\n\nVi\u1ec7c ph\u1ea3i ch\u1ea1y theo nh\u1eefng \"ti\u00eau chu\u1ea9n ri\u00eang\" c\u1ee7a c\u00e1c \u00f4ng l\u1edbn c\u00f4ng ngh\u1ec7 (nh\u01b0 Apple) l\u00e0 m\u1ed9t ph\u1ea7n c\u1ee7a ngh\u1ec1 Web Developer. M\u1ed9t Vibe Coder s\u1ebd kh\u00f4ng ca th\u00e1n, m\u00e0 xem \u0111\u00f3 l\u00e0 c\u01a1 h\u1ed9i \u0111\u1ec3 l\u00e0m cho tr\u1ea3i nghi\u1ec7m (UX) c\u1ee7a \u1ee9ng d\u1ee5ng tr\u1edf n\u00ean ho\u00e0n h\u1ea3o, b\u1ea5t ch\u1ea5p ng\u01b0\u1eddi d\u00f9ng \u0111ang c\u1ea7m thi\u1ebft b\u1ecb g\u00ec tr\u00ean tay.\n\nL\u1ea7n t\u1edbi th\u1ea5y file .heic, h\u00e3y m\u1ec9m c\u01b0\u1eddi v\u00e0 n\u00e9m n\u00f3 v\u00e0o l\u00f2 luy\u1ec7n \u0111an nh\u00e9!\n\n**Ch\u1ee7 \u0111\u1ec1 ti\u1ebfp theo: \u0110\u1eebng B\u1eaft Backend Ph\u1ea3i G\u00e1nh T\u1ea1 - Ki\u1ebfn Tr\u00fac Upload File Tr\u1ef1c Ti\u1ebfp L\u00ean S3 B\u1eb1ng Presigned URL**\n\nTrong \u0111o\u1ea1n code Backend \u1edf tr\u00ean, c\u00f3 m\u1ed9t v\u1ea5n \u0111\u1ec1 tr\u00ed m\u1ea1ng v\u1ec1 thi\u1ebft k\u1ebf h\u1ec7 th\u1ed1ng. D\u00f9 b\u1ea1n c\u00f3 convert file hay kh\u00f4ng, vi\u1ec7c Frontend n\u00e9m m\u1ed9t c\u1ee5c file (\u1ea2nh, Video) th\u1eb3ng v\u00e0o con server API c\u1ee7a b\u1ea1n l\u00e0 m\u1ed9t h\u00e0nh \u0111\u1ed9ng t\u1ef1 s\u00e1t n\u1ebfu h\u1ec7 th\u1ed1ng c\u00f3 traffic l\u1edbn. C\u1ee5c file \u0111\u00f3 s\u1ebd chi\u1ebfm d\u1ee5ng b\u0103ng th\u00f4ng m\u1ea1ng v\u00e0 RAM c\u1ee7a Backend, khi\u1ebfn c\u00e1c request g\u1ecdi logic API kh\u00e1c b\u1ecb ngh\u1ebdn (Block).\n\nL\u00e0m sao \u0111\u1ec3 user upload c\u00e1i Video 500MB m\u00e0 con server Node.js c\u1ee7a ch\u00fang ta kh\u00f4ng h\u1ec1 m\u1ea5t m\u1ed9t gi\u1ecdt m\u1ed3 h\u00f4i, th\u1eadm ch\u00ed b\u0103ng th\u00f4ng b\u1eb1ng 0?\n\n\u1ede b\u00e0i vi\u1ebft t\u1edbi, m\u00ecnh s\u1ebd b\u1eadt m\u00ed m\u1ed9t \"Tuy\u1ec7t k\u1ef9 ki\u1ebfn tr\u00fac \u0111\u00e1m m\u00e2y\" \u0111\u01b0\u1ee3c s\u1eed d\u1ee5ng \u1edf m\u1ecdi c\u00f4ng ty l\u1edbn: AWS S3 Presigned URL. Frontend s\u1ebd \u0111\u01b0\u1ee3c c\u1ea5p m\u1ed9t \"th\u1ebb b\u00e0i\" \u0111\u1ec3 \u0111i c\u1eeda sau, n\u00e9m file th\u1eb3ng v\u00e0o kho S3 m\u00e0 kh\u00f4ng c\u1ea7n \u0111i qua c\u1eeda ch\u00ednh Backend. Anh em nh\u1edb follow \u0111\u1ec3 thay \u0111\u1ed5i ho\u00e0n to\u00e0n t\u01b0 duy Upload nh\u00e9!","published_at":"2026-04-14T15:34:04.000000Z","scheduled_publish_at":null,"is_published":true,"is_shared":false,"updated_at":"2026-04-14T17:40:01.000000Z","edited_at":"2026-04-14T15:33:35.000000Z","translation_source":null,"trend_at":null,"promoted_at":null,"reading_time":6,"points":0,"views_count":8,"clips_count":0,"comments_count":1,"rated_value":null,"promoted":false,"trending":false,"is_draft":false,"is_public":true,"locale_code":"vi","is_video":false,"thumbnail_url":"https:\/\/images.viblo.asia\/fa54c2c0-c6af-46ef-9b6d-78cf3a86ec64.png","user":{"data":{"id":182653,"url":"https:\/\/viblo.asia\/u\/hhoang","avatar":"90700a59-6e71-4d6c-bff6-0223a4e007c4.jpg","name":"Nguy\u1ec5n Huy Ho\u00e0ng","username":"hhoang","followers_count":46,"reputation":2509,"posts_count":250,"banned_at":null,"level_partner":null,"following":false}},"tags":{"data":[{"slug":"atfrontend","name":"@frontend"},{"slug":"cau-hoi-ve-nodejs","name":"c\u00e2u h\u1ecfi v\u1ec1 nodejs"},{"slug":"webdevelopment","name":"WebDevelopment"}]},"commentators":{"data":[{"id":182653,"url":"https:\/\/viblo.asia\/u\/hhoang","avatar":"90700a59-6e71-4d6c-bff6-0223a4e007c4.jpg","name":"Nguy\u1ec5n Huy Ho\u00e0ng","username":"hhoang","followers_count":0,"reputation":0,"posts_count":0,"banned_at":null,"level_partner":null}]}},{"id":92788,"title":"Kh\u1edfi T\u1ea1o K\u1ebft N\u1ed1i Database Chu\u1ea9n v\u1edbi PDO","slug":"Nj4vg6vxJ6r","url":"https:\/\/viblo.asia\/p\/khoi-tao-ket-noi-database-chuan-voi-pdo-Nj4vg6vxJ6r","user_id":182653,"moderation":null,"transliterated":"khoi-tao-ket-noi-database-chuan-voi-pdo","contents_short":"N\u1ebfu b\u1ea1n h\u1ecfi 10 l\u1eadp tr\u00ecnh vi\u00ean PHP Senior r\u1eb1ng h\u1ecd d\u00f9ng g\u00ec \u0111\u1ec3 k\u1ebft n\u1ed1i Database (khi kh\u00f4ng d\u00f9ng Framework nh\u01b0 Laravel), 9 ng\u01b0\u1eddi s\u1ebd tr\u1ea3 l\u1eddi l\u00e0 PDO. Ng\u01b0\u1eddi c\u00f2n l\u1ea1i... c\u00f3 th\u1ec3 \u0111ang b\u1ea3o tr\u00ec m\u1ed9t h\u1ec7 th\u1ed1ng t\u1eeb n\u0103m 2010.\n\nPDO (PHP Data Objects) kh\u00f4ng ph\u1ea3i l\u00e0 m\u1ed9t lo\u1ea1i Database m\u1edbi. N\u00f3 l\u00e0 m\u1ed9t l\u1edbp tr\u1eebu t\u01b0\u1ee3ng (abstraction layer). Ngh\u0129a l\u00e0 PDO cung c\u1ea5p cho b\u1ea1n m\u1ed9t b\u1ed9 h\u00e0m chu\u1ea9n chung. Cho d\u00f9 b\u00ean d\u01b0\u1edbi b\u1ea1n \u0111ang x\u00e0i ...","contents":"N\u1ebfu b\u1ea1n h\u1ecfi 10 l\u1eadp tr\u00ecnh vi\u00ean PHP Senior r\u1eb1ng h\u1ecd d\u00f9ng g\u00ec \u0111\u1ec3 k\u1ebft n\u1ed1i Database (khi kh\u00f4ng d\u00f9ng Framework nh\u01b0 Laravel), 9 ng\u01b0\u1eddi s\u1ebd tr\u1ea3 l\u1eddi l\u00e0 `PDO`. Ng\u01b0\u1eddi c\u00f2n l\u1ea1i... c\u00f3 th\u1ec3 \u0111ang b\u1ea3o tr\u00ec m\u1ed9t h\u1ec7 th\u1ed1ng t\u1eeb n\u0103m 2010.\n\nPDO (PHP Data Objects) kh\u00f4ng ph\u1ea3i l\u00e0 m\u1ed9t lo\u1ea1i Database m\u1edbi. N\u00f3 l\u00e0 m\u1ed9t l\u1edbp tr\u1eebu t\u01b0\u1ee3ng (abstraction layer). Ngh\u0129a l\u00e0 PDO cung c\u1ea5p cho b\u1ea1n m\u1ed9t b\u1ed9 h\u00e0m chu\u1ea9n chung. Cho d\u00f9 b\u00ean d\u01b0\u1edbi b\u1ea1n \u0111ang x\u00e0i MySQL, PostgreSQL, SQLite hay Oracle, b\u1ea1n v\u1eabn ch\u1ec9 vi\u1ebft code PHP theo \u0111\u00fang m\u1ed9t ki\u1ec3u duy nh\u1ea5t.\n\nH\u00f4m nay, m\u00ecnh s\u1ebd kh\u00f4ng ch\u1ec9 cho b\u1ea1n c\u00e1ch connect PDO cho c\u00f3 b\u00e1o th\u00e0nh c\u00f4ng. M\u00ecnh s\u1ebd ch\u1ec9 cho b\u1ea1n c\u00e1ch setup m\u1ed9t k\u1ebft n\u1ed1i PDO \"b\u1ecdc gi\u00e1p\" an to\u00e0n tuy\u1ec7t \u0111\u1ed1i.\n\n### 1. 3 M\u1ea3nh Gh\u00e9p C\u1ee7a M\u1ed9t K\u1ebft N\u1ed1i PDO\n\n\u0110\u1ec3 t\u1ea1o ra m\u1ed9t Object PDO, b\u1ea1n c\u1ea7n truy\u1ec1n cho n\u00f3 3 th\u1ee9:\n\n* DSN (Data Source Name): Chu\u1ed7i ch\u1ee9a th\u00f4ng tin lo\u1ea1i Database, host, port v\u00e0 t\u00ean DB.\n* T\u00e0i kho\u1ea3n & M\u1eadt kh\u1ea9u.\n* Options (C\u1ef1c k\u1ef3 quan tr\u1ecdng): \u0110\u00e2y l\u00e0 ranh gi\u1edbi gi\u1eefa Junior v\u00e0 Senior. \u0110\u00e2y l\u00e0 n\u01a1i b\u1ea1n \u00e9p PDO ph\u1ea3i c\u01b0 x\u1eed theo \u00fd m\u00ecnh.\n\n### 2. Code Th\u1ef1c Chi\u1ebfn: C\u1ea5u H\u00ecnh K\u1ebft N\u1ed1i Ho\u00e0n H\u1ea3o\n\nD\u01b0\u1edbi \u0111\u00e2y l\u00e0 m\u1ed9t \u0111o\u1ea1n code m\u1eabu b\u1ecdc k\u1ebft n\u1ed1i PDO v\u00e0o m\u1ed9t file ri\u00eang (`database.php`). B\u1ea1n c\u00f3 th\u1ec3 copy tr\u1ef1c ti\u1ebfp \u0111o\u1ea1n n\u00e0y mang l\u00ean Production.\n\n```\n<?php\n\n$host = '127.0.0.1'; \/\/ Lu\u00f4n d\u00f9ng IP thay v\u00ec 'localhost' \u0111\u1ec3 tr\u00e1nh l\u1ed7i socket\n$db   = 'vibe_coder_db';\n$user = 'root';\n$pass = 'super_secret_password';\n$charset = 'utf8mb4'; \/\/ B\u1eaft bu\u1ed9c d\u00f9ng utf8mb4 \u0111\u1ec3 h\u1ed7 tr\u1ee3 Emoji\n\n\/\/ 1. Kh\u1edfi t\u1ea1o chu\u1ed7i DSN\n$dsn = \"mysql:host=$host;dbname=$db;charset=$charset\";\n\n\/\/ 2. Thi\u1ebft l\u1eadp c\u00e1c Options \"Sinh T\u1eed\"\n$options = [\n    \/\/ \u00c9p PDO n\u00e9m l\u1ed7i (Exception) thay v\u00ec im l\u1eb7ng ho\u1eb7c qu\u0103ng Warning m\u1eadp m\u1edd\n    PDO::ATTR_ERRMODE            => PDO::ERRMODE_EXCEPTION,\n    \n    \/\/ M\u1eb7c \u0111\u1ecbnh tr\u1ea3 v\u1ec1 m\u1ea3ng k\u1ebft h\u1ee3p (Associative Array), b\u1ecf qua m\u1ea3ng s\u1ed1 (0, 1, 2) cho \u0111\u1ee1 r\u00e1c RAM\n    PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,\n    \n    \/\/ T\u1eaft ch\u1ebf \u0111\u1ed9 m\u00f4 ph\u1ecfng Prepared Statements c\u1ee7a PDO, \u00e9p d\u00f9ng h\u00e0ng x\u1ecbn c\u1ee7a MySQL\n    PDO::ATTR_EMULATE_PREPARES   => false,\n];\n\n\/\/ 3. Ti\u1ebfn h\u00e0nh k\u1ebft n\u1ed1i v\u1edbi Try-Catch\ntry {\n    $pdo = new PDO($dsn, $user, $pass, $options);\n    \/\/ B\u1ecf comment d\u00f2ng d\u01b0\u1edbi \u0111\u1ec3 test l\u00fac m\u1edbi dev\n    \/\/ echo \"K\u1ebft n\u1ed1i Vibe Coder DB th\u00e0nh c\u00f4ng!\"; \n} catch (\\PDOException $e) {\n    \/\/ Ghi log v\u00e0o file (Kh\u00f4ng bao gi\u1edd echo th\u1eb3ng l\u1ed7i ra m\u00e0n h\u00ecnh cho user th\u1ea5y)\n    error_log(\"L\u1ed7i k\u1ebft n\u1ed1i Database: \" . $e->getMessage());\n    \n    \/\/ N\u00e9m ra trang 500 ho\u1eb7c th\u00f4ng b\u00e1o th\u00e2n thi\u1ec7n\n    die(\"H\u1ec7 th\u1ed1ng \u0111ang b\u1ea3o tr\u00ec. Vui l\u00f2ng quay l\u1ea1i sau!\");\n}\n\n\/\/ Gi\u1edd th\u00ec b\u1ea1n c\u00f3 th\u1ec3 require file n\u00e0y \u1edf m\u1ecdi n\u01a1i v\u00e0 d\u00f9ng bi\u1ebfn $pdo\n?>\n```\n\n### 3. Ph\u00e2n T\u00edch Nh\u1eefng \"Option\" L\u00e0m N\u00ean \u0110\u1eb3ng C\u1ea5p\n\nT\u1ea1i sao \u0111o\u1ea1n code tr\u00ean l\u1ea1i \u0111\u01b0\u1ee3c g\u1ecdi l\u00e0 \"Chu\u1ea9n Production\"? B\u00ed m\u1eadt n\u1eb1m \u1edf m\u1ea3ng `$options`:\n\n* `PDO::ERRMODE_EXCEPTION:` M\u1eb7c \u0111\u1ecbnh, PDO kh\u00e1 \"hi\u1ec1n\". C\u1ee9 query l\u1ed7i l\u00e0 n\u00f3 ng\u1eadm mi\u1ec7ng im l\u1eb7ng (Silent fail) ho\u1eb7c qu\u0103ng c\u00e1i Warning r\u1ed3i code v\u1eabn ch\u1ea1y ti\u1ebfp. Vi\u1ec7c n\u00e0y d\u1eabn \u0111\u1ebfn vi\u1ec7c DB kh\u00f4ng l\u01b0u m\u00e0 code v\u1eabn b\u00e1o \"Th\u00e0nh c\u00f4ng\". Khi set mode n\u00e0y, PDO s\u1ebd n\u00e9m ra Exception (ngo\u1ea1i l\u1ec7), l\u00e0m code d\u1eebng l\u1ea1i ngay l\u1eadp t\u1ee9c v\u00e0 nh\u1ea3y v\u00e0o kh\u1ed1i `catch`. R\u1ea5t d\u1ec5 debug.\n* `PDO::FETCH_ASSOC:` Khi b\u1ea1n `SELECT *`, m\u1eb7c \u0111\u1ecbnh PDO tr\u1ea3 v\u1ec1 m\u1ed9t m\u1ea3ng ch\u1ee9a c\u1ea3 Key l\u00e0 T\u00ean c\u1ed9t (`['name' => 'T\u00e8o']`) V\u00c0 Key l\u00e0 s\u1ed1 th\u1ee9 t\u1ef1 (`[0 => 'T\u00e8o']`). Data c\u1ee7a b\u1ea1n b\u1ecb nh\u00e2n \u0111\u00f4i k\u00edch th\u01b0\u1edbc tr\u00ean RAM m\u1ed9t c\u00e1ch v\u00f4 \u00edch. Set th\u00e0nh `FETCH_ASSOC` s\u1ebd ch\u1ec9 l\u1ea5y m\u1ea3ng c\u00f3 Key l\u00e0 t\u00ean c\u1ed9t.\n* `PDO::ATTR_EMULATE_PREPARES => false:` Nh\u1edb b\u00e0i vi\u1ebft ch\u1ed1ng SQL Injection tr\u01b0\u1edbc c\u1ee7a ch\u00fang ta ch\u1ee9? Prepared Statements l\u00e0 t\u1ea5m khi\u00ean t\u1ed1i th\u01b0\u1ee3ng. Nh\u01b0ng \u1edf c\u00e1c b\u1ea3n PHP c\u0169, PDO l\u1ea1i d\u00f9ng t\u00ednh n\u0103ng \"M\u00f4 ph\u1ecfng\" (Emulate) b\u1eb1ng c\u00e1ch t\u1ef1 ch\u00e8n chu\u1ed7i trong PHP r\u1ed3i m\u1edbi g\u1eedi xu\u1ed1ng MySQL. \u0110i\u1ec1u n\u00e0y v\u1eabn c\u00f3 khe h\u1edf b\u1ea3o m\u1eadt! T\u1eaft n\u00f3 \u0111i, PDO s\u1ebd b\u1eaft MySQL th\u1ef1c s\u1ef1 d\u00f9ng c\u01a1 ch\u1ebf Prepare g\u1ed1c c\u1ee7a DB. C\u1ef1c k\u1ef3 an to\u00e0n!\n\n4. L\u1eddi k\u1ebft\nKh\u1edfi t\u1ea1o k\u1ebft n\u1ed1i gi\u1ed1ng nh\u01b0 vi\u1ec7c x\u00e2y m\u00f3ng nh\u00e0. M\u1ed9t k\u1ebft n\u1ed1i l\u1ecfng l\u1ebbo s\u1ebd khi\u1ebfn b\u1ea1n ph\u1ea3i kh\u1ed5 s\u1edf \u0111i debug t\u1eebng d\u00f2ng query sau n\u00e0y. H\u00e3y copy \u0111o\u1ea1n code tr\u00ean, t\u1ea1o th\u00e0nh m\u1ed9t th\u00f3i quen, v\u00e0 b\u1ea1n s\u1ebd th\u1ea5y vi\u1ec7c l\u00e0m vi\u1ec7c v\u1edbi Database b\u1eb1ng PHP tr\u1edf n\u00ean thanh l\u1ecbch h\u01a1n bao gi\u1edd h\u1ebft.\n\n\ud83d\udd25 Ch\u1ee7 \u0111\u1ec1 ti\u1ebfp theo: Tuy\u1ec7t K\u1ef9 CRUD V\u1edbi PDO & Prepared Statements\n\nK\u1ebft n\u1ed1i \u0111\u00e3 xong, nh\u01b0ng l\u00e0m sao \u0111\u1ec3 x\u00e0i bi\u1ebfn `$pdo` \u0111\u00f3?\n\nH\u00e0ng ng\u00e0y b\u1ea1n ph\u1ea3i th\u1ef1c hi\u1ec7n c\u1ea3 tr\u0103m t\u00e1c v\u1ee5 Th\u00eam (Create) - \u0110\u1ecdc (Read) - S\u1eeda (Update) - X\u00f3a (Delete). N\u1ebfu vi\u1ebft Raw SQL kh\u00f4ng c\u1ea9n th\u1eadn, b\u1ea1n l\u1ea1i t\u1ef1 d\u00e2ng h\u1ec7 th\u1ed1ng cho Hacker qua l\u1ed7i SQL Injection.\n\n\u1ede b\u00e0i vi\u1ebft t\u1edbi, m\u00ecnh s\u1ebd h\u01b0\u1edbng d\u1eabn anh em \"b\u1ebf\" c\u00e1c chi\u00eau th\u1ee9c tinh hoa nh\u1ea5t c\u1ee7a PDO: `prepare()`, `bindValue()` v\u00e0 `execute()` \u0111\u1ec3 vi\u1ebft c\u00e1c lu\u1ed3ng CRUD b\u1ea3o m\u1eadt 100%, code ng\u1eafn g\u1ecdn, \u0111\u1ecdc v\u00e0o l\u00e0 ghi\u1ec1n. Nh\u1edb follow v\u00e0 \u0111\u00f3n \u0111\u1ecdc ph\u1ea7n th\u1ef1c h\u00e0nh \u0111\u1ec9nh cao n\u00e0y nh\u00e9!","published_at":"2026-04-14T10:58:14.000000Z","scheduled_publish_at":null,"is_published":true,"is_shared":false,"updated_at":"2026-04-14T17:00:18.000000Z","edited_at":"2026-04-14T10:58:10.000000Z","translation_source":null,"trend_at":null,"promoted_at":null,"reading_time":4,"points":1,"views_count":15,"clips_count":0,"comments_count":2,"rated_value":null,"promoted":false,"trending":false,"is_draft":false,"is_public":true,"locale_code":"vi","is_video":false,"thumbnail_url":"https:\/\/images.viblo.asia\/95658685-6277-4413-b06e-7bf65e3abec4.png","user":{"data":{"id":182653,"url":"https:\/\/viblo.asia\/u\/hhoang","avatar":"90700a59-6e71-4d6c-bff6-0223a4e007c4.jpg","name":"Nguy\u1ec5n Huy Ho\u00e0ng","username":"hhoang","followers_count":46,"reputation":2509,"posts_count":250,"banned_at":null,"level_partner":null,"following":false}},"tags":{"data":[{"slug":"avg-mysql","name":"AVG MYSQL"},{"slug":"backend","name":"Backend"},{"slug":"cau-hinh-database","name":"c\u1ea5u h\u00ecnh database"},{"slug":"doc-file-trong-php","name":"\u0111\u1ecdc file trong php"}]},"commentators":{"data":[{"id":182653,"url":"https:\/\/viblo.asia\/u\/hhoang","avatar":"90700a59-6e71-4d6c-bff6-0223a4e007c4.jpg","name":"Nguy\u1ec5n Huy Ho\u00e0ng","username":"hhoang","followers_count":0,"reputation":0,"posts_count":0,"banned_at":null,"level_partner":null},{"id":182732,"url":"https:\/\/viblo.asia\/u\/Hieumn","avatar":"b79a0c92-fb82-49df-bda1-2f51c8e45300.jpg","name":"Nguyen Hieu","username":"Hieumn","followers_count":0,"reputation":0,"posts_count":0,"banned_at":null,"level_partner":null}]}},{"id":92787,"title":"array_slice Trong PHP: Ngh\u1ec7 Thu\u1eadt \"C\u1eaft B\u00e1nh\" Kh\u00f4ng L\u00e0m V\u1ee1 Form","slug":"ymJXDEGxJkq","url":"https:\/\/viblo.asia\/p\/array-slice-trong-php-nghe-thuat-cat-banh-khong-lam-vo-form-ymJXDEGxJkq","user_id":182653,"moderation":null,"transliterated":"array-slice-trong-php-nghe-thuat-cat-banh-khong-lam-vo-form","contents_short":"C\u00e2u chuy\u1ec7n th\u1ef1c t\u1ebf: B\u1ea1n g\u1ecdi API sang h\u1ec7 th\u1ed1ng c\u1ee7a \u0111\u1ed1i t\u00e1c \u0111\u1ec3 l\u1ea5y danh s\u00e1ch 100 b\u00e0i b\u00e1o m\u1edbi nh\u1ea5t. Ng\u1eb7t n\u1ed7i, API c\u1ee7a h\u1ecd \"\u0111\u1eddi t\u1ed1ng\", kh\u00f4ng h\u1ec1 h\u1ed7 tr\u1ee3 ph\u00e2n trang (Pagination). N\u00f3 n\u00e9m th\u1eb3ng m\u1ed9t m\u1ea3ng b\u1ef1 ch\u1ea3ng 100 ph\u1ea7n t\u1eed v\u00e0o m\u1eb7t b\u1ea1n.\nNhi\u1ec7m v\u1ee5 c\u1ee7a b\u1ea1n l\u00e0 l\u1ea5y ra \u0111\u00fang 10 b\u00e0i b\u00e1o cho Trang 2 (t\u1ee9c l\u00e0 t\u1eeb b\u00e0i s\u1ed1 11 \u0111\u1ebfn 20) \u0111\u1ec3 tr\u1ea3 v\u1ec1 cho Frontend.\n\nNh\u1eefng anh em m\u1edbi h\u1ecdc code s\u1ebd h\u00ec h\u1ee5c t\u1ea1o m\u1ed9t m\u1ea3ng r\u1ed7ng i = 10;...","contents":"C\u00e2u chuy\u1ec7n th\u1ef1c t\u1ebf: B\u1ea1n g\u1ecdi API sang h\u1ec7 th\u1ed1ng c\u1ee7a \u0111\u1ed1i t\u00e1c \u0111\u1ec3 l\u1ea5y danh s\u00e1ch 100 b\u00e0i b\u00e1o m\u1edbi nh\u1ea5t. Ng\u1eb7t n\u1ed7i, API c\u1ee7a h\u1ecd \"\u0111\u1eddi t\u1ed1ng\", kh\u00f4ng h\u1ec1 h\u1ed7 tr\u1ee3 ph\u00e2n trang (Pagination). N\u00f3 n\u00e9m th\u1eb3ng m\u1ed9t m\u1ea3ng b\u1ef1 ch\u1ea3ng 100 ph\u1ea7n t\u1eed v\u00e0o m\u1eb7t b\u1ea1n.\nNhi\u1ec7m v\u1ee5 c\u1ee7a b\u1ea1n l\u00e0 l\u1ea5y ra \u0111\u00fang 10 b\u00e0i b\u00e1o cho Trang 2 (t\u1ee9c l\u00e0 t\u1eeb b\u00e0i s\u1ed1 11 \u0111\u1ebfn 20) \u0111\u1ec3 tr\u1ea3 v\u1ec1 cho Frontend.\n\nNh\u1eefng anh em m\u1edbi h\u1ecdc code s\u1ebd h\u00ec h\u1ee5c t\u1ea1o m\u1ed9t m\u1ea3ng r\u1ed7ng `$result = []`, r\u1ed3i vi\u1ebft v\u00f2ng l\u1eb7p `for ($i = 10; $i < 20; $i++)`, sau \u0111\u00f3 array_push t\u1eebng c\u00e1i v\u00e0o. Tr\u00f4ng r\u1ea5t c\u1ef1c nh\u1ecdc!\n\nM\u1ed9t Vibe Coder s\u1ebd ch\u1ec9 d\u00f9ng \u0111\u00fang 1 d\u00f2ng:\n\n`$result = array_slice($articles, 10, 10);`\n\nH\u00f4m nay ch\u00fang ta s\u1ebd gi\u1ea3i ph\u1eabu h\u00e0m c\u1eaft b\u00e1nh ngh\u1ec7 thu\u1eadt n\u00e0y.\n\n### 1. C\u1ea5u tr\u00fac c\u1ee7a l\u01b0\u1ee1i dao: array_slice\n\nH\u00e0m n\u00e0y nh\u1eadn v\u00e0o 4 tham s\u1ed1, trong \u0111\u00f3 2 tham s\u1ed1 \u0111\u1ea7u l\u00e0 b\u1eaft bu\u1ed9c:\n\n`array_slice(array $array, int $offset, ?int $length = null, bool $preserve_keys = false)`\n\n* `$array`: C\u00e1i m\u1ea3ng g\u1ed1c m\u00e0 b\u1ea1n mu\u1ed1n \u0111em ra c\u1eaft.\n* `$offset`: Nh\u00e1t dao \u0111\u1ea7u ti\u00ean. \u0110\u1eb7t dao \u1edf v\u1ecb tr\u00ed s\u1ed1 m\u1ea5y \u0111\u1ec3 b\u1eaft \u0111\u1ea7u c\u1eaft?\n* `$length`: \u0110\u1ed9 d\u00e0i mi\u1ebfng b\u00e1nh. C\u1eaft th\u00eam bao nhi\u00eau ph\u1ea7n t\u1eed k\u1ec3 t\u1eeb nh\u00e1t dao \u0111\u1ea7u?\n* `$preserve_keys`: K\u1ef9 thu\u1eadt gi\u1eef l\u1ea1i d\u0129a \u0111\u1ef1ng b\u00e1nh (S\u1ebd n\u00f3i r\u00f5 \u1edf ph\u1ea7n 3).\n\n### 2. S\u1ef1 vi di\u1ec7u c\u1ee7a s\u1ed1 \u00c2m (Negative Values)\n\nN\u1ebfu ch\u1ec9 g\u00f5 s\u1ed1 d\u01b0\u01a1ng `array_slice($arr, 2, 3)` (B\u1eaft \u0111\u1ea7u t\u1eeb index 2, l\u1ea5y 3 ph\u1ea7n t\u1eed) th\u00ec qu\u00e1 b\u00ecnh th\u01b0\u1eddng. S\u1ee9c m\u1ea1nh th\u1ef1c s\u1ef1 c\u1ee7a h\u00e0m n\u00e0y n\u1eb1m \u1edf vi\u1ec7c n\u00f3 hi\u1ec3u s\u1ed1 \u00e2m.\n\nTr\u01b0\u1eddng h\u1ee3p 1: `$offset` l\u00e0 s\u1ed1 \u00e2m (C\u1eaft t\u1eeb d\u01b0\u1edbi l\u00ean)\n\nB\u1ea1n mu\u1ed1n l\u1ea5y 3 ph\u1ea7n t\u1eed cu\u1ed1i c\u00f9ng c\u1ee7a m\u1ea3ng m\u00e0 kh\u00f4ng th\u00e8m \u0111\u1ebfm xem m\u1ea3ng d\u00e0i bao nhi\u00eau?\n\n```\n$arr = ['A', 'B', 'C', 'D', 'E'];\n\/\/ Offset -3 ngh\u0129a l\u00e0: \u0110\u1ebfm ng\u01b0\u1ee3c t\u1eeb d\u01b0\u1edbi l\u00ean 3 b\u01b0\u1edbc, r\u1ed3i l\u1ea5y h\u1ebft v\u1ec1 b\u00ean ph\u1ea3i.\n$result = array_slice($arr, -3); \n\/\/ K\u1ebft qu\u1ea3: ['C', 'D', 'E']\n```\n\nTr\u01b0\u1eddng h\u1ee3p 2: `$length` l\u00e0 s\u1ed1 \u00e2m (Ch\u1eeba l\u1ea1i ph\u1ea7n \u0111u\u00f4i)\n\nB\u1ea1n mu\u1ed1n l\u1ea5y t\u1eeb index 1, v\u00e0 b\u1ecf \u0111i 2 ph\u1ea7n t\u1eed cu\u1ed1i c\u00f9ng c\u1ee7a m\u1ea3ng?\n\n```\n$arr = ['A', 'B', 'C', 'D', 'E', 'F'];\n\/\/ C\u1eaft t\u1eeb index 1 ('B'), v\u00e0 d\u1eebng nh\u00e1t dao c\u00e1ch c\u00e1i \u0111u\u00f4i 2 ph\u1ea7n t\u1eed.\n$result = array_slice($arr, 1, -2);\n\/\/ K\u1ebft qu\u1ea3: ['B', 'C', 'D']\n```\n\n### 3. C\u1ea1m b\u1eaby \"M\u1ea5t Form\": T\u1ea1i sao index c\u1ee7a t\u00f4i l\u1ea1i b\u1ecb reset?\n\n\u0110\u00e2y l\u00e0 ch\u1ed7 nhi\u1ec1u anh em \"\u0111\u1ed5 m\u00e1u\" nh\u1ea5t. H\u00e3y nh\u00ecn \u0111o\u1ea1n code sau:\n\n```\n$users = [\n    5 => 'T\u00e8o',\n    6 => 'T\u00ed',\n    7 => 'Cu'\n];\n\n\/\/ C\u1eaft l\u1ea5y 2 ng\u01b0\u1eddi \u0111\u1ea7u ti\u00ean\n$sliced = array_slice($users, 0, 2);\n```\n\nB\u1ea1n \u0111inh ninh k\u1ebft qu\u1ea3 s\u1ebd l\u00e0 `[5 => 'T\u00e8o', 6 => 'T\u00ed']`?\n\nSAI! K\u1ebft qu\u1ea3 tr\u1ea3 v\u1ec1 s\u1ebd t\u1ef1 \u0111\u1ed9ng b\u1ecb reset index (\u0111\u00e1nh s\u1ed1 l\u1ea1i t\u1eeb 0):\n\n`[0 => 'T\u00e8o', 1 => 'T\u00ed']`\n\nM\u1eb7c \u0111\u1ecbnh, array_slice s\u1ebd x\u00f3a b\u1ecf c\u00e1c key d\u1ea1ng s\u1ed1 (Numeric keys) v\u00e0 s\u1eafp x\u1ebfp l\u1ea1i t\u1eeb 0. N\u1ebfu b\u1ea1n \u0111ang d\u00f9ng key \u0111\u00f3 l\u00e0m `User_ID` \u0111\u1ec3 update Database th\u00ec... ch\u00fac m\u1eebng b\u1ea1n \u0111\u00e3 ph\u00e1 h\u1ecfng d\u1eef li\u1ec7u!\n\nGi\u1ea3i ph\u00e1p: B\u1eadt l\u00e1 ch\u1eafn `$preserve_keys = true` (Tham s\u1ed1 th\u1ee9 4).\n\n$sliced = array_slice($users, 0, 2, true); \n\/\/ K\u1ebft qu\u1ea3 an to\u00e0n: `[5 => 'T\u00e8o', 6 => 'T\u00ed']`\n\n(L\u01b0u \u00fd: N\u1ebfu key c\u1ee7a b\u1ea1n l\u00e0 Chu\u1ed7i (String key) nh\u01b0 m\u1ea3ng k\u1ebft h\u1ee3p, th\u00ec `array_slice` lu\u00f4n lu\u00f4n gi\u1eef nguy\u00ean key, kh\u00f4ng c\u1ea7n quan t\u00e2m tham s\u1ed1 th\u1ee9 4 n\u00e0y).\n\n### 4. Tr\u1ea3i nghi\u1ec7m c\u1eaft m\u1ea3ng tr\u1ef1c quan\n\n\u0110\u1ec3 d\u1ec5 h\u00ecnh dung h\u01a1n c\u00e1ch `$offset` v\u00e0 `$length` ch\u1ea1y nh\u01b0 th\u1ebf n\u00e0o, \u0111\u1eb7c bi\u1ec7t l\u00e0 khi d\u00f9ng s\u1ed1 \u00e2m\n\n![image.png](https:\/\/images.viblo.asia\/6c9492b2-f7d0-4e22-9e81-d135567bd345.png)\n\nhttps:\/\/www.w3schools.com\/php\/phptryit.asp?filename=tryphp_func_array_slice\n\n### L\u1eddi k\u1ebft\n\n`array_slice` l\u00e0 m\u1ed9t h\u00e0m ch\u1ec9 mang t\u00ednh ch\u1ea5t \u0110\u1ecdc (Non-destructive). N\u00f3 t\u1ea1o ra m\u1ed9t m\u1ea3ng m\u1edbi v\u00e0 tr\u1ea3 v\u1ec1 cho b\u1ea1n, m\u1ea3ng g\u1ed1c ban \u0111\u1ea7u kh\u00f4ng h\u1ec1 b\u1ecb \u1ea3nh h\u01b0\u1edfng. \u0110i\u1ec1u n\u00e0y r\u1ea5t t\u1ed1t cho vi\u1ec7c gi\u1eef tr\u1ea1ng th\u00e1i an to\u00e0n trong \u1ee9ng d\u1ee5ng. H\u00e3y n\u1eafm v\u1eefng n\u00f3 \u0111\u1ec3 code Backend m\u01b0\u1ee3t m\u00e0 h\u01a1n nh\u00e9.\n\nCh\u1ee7 \u0111\u1ec1 ti\u1ebfp theo: array_splice - L\u01b0\u1ee1i Dao Ph\u1eabu Thu\u1eadt G\u00e2y Ch\u1ea3y M\u00e1u C\u1ee7a PHP\n\nN\u1ebfu array_slice hi\u1ec1n l\u00e0nh bao nhi\u00eau, th\u00ec ng\u01b0\u1eddi anh em sinh \u0111\u00f4i c\u1ee7a n\u00f3 l\u00e0 array_splice (th\u00eam ch\u1eef \"p\") l\u1ea1i b\u1ea1o l\u1ef1c b\u1ea5y nhi\u00eau.\n\nB\u1ea1n mu\u1ed1n c\u1eaft b\u1ecf 2 ph\u1ea7n t\u1eed \u1edf gi\u1eefa m\u1ea3ng, v\u00e0 L\u1eacP T\u1ee8C nh\u00e9t 3 ph\u1ea7n t\u1eed m\u1edbi v\u00e0o \u0111\u00fang ch\u1ed7 \u0111\u00f3? array_splice l\u00e0m \u0111\u01b0\u1ee3c. NH\u01afNG, n\u00f3 l\u00e0 h\u00e0m Destructive \u2013 n\u00f3 s\u1ebd thay \u0111\u1ed5i v\u00e0 t\u00e0n ph\u00e1 tr\u1ef1c ti\u1ebfp m\u1ea3ng g\u1ed1c c\u1ee7a b\u1ea1n. X\u00e0i kh\u00f4ng kh\u00e9o l\u00e0 bay lu\u00f4n data g\u1ed1c.\n\n\u1ede b\u00e0i vi\u1ebft t\u1edbi, ch\u00fang ta s\u1ebd m\u1ed5 x\u1ebb s\u1ef1 kh\u00e1c bi\u1ec7t s\u1ed1ng c\u00f2n gi\u1eefa Slice v\u00e0 Splice, c\u0169ng nh\u01b0 c\u00e1ch v\u00e1 m\u1ea3ng c\u1ef1c x\u1ecbn nh\u00e9! Anh em \u0111\u00f3n \u0111\u1ecdc!","published_at":"2026-04-14T10:48:14.000000Z","scheduled_publish_at":null,"is_published":true,"is_shared":false,"updated_at":"2026-04-14T17:00:18.000000Z","edited_at":"2026-04-14T10:48:14.000000Z","translation_source":null,"trend_at":null,"promoted_at":null,"reading_time":4,"points":1,"views_count":14,"clips_count":0,"comments_count":1,"rated_value":null,"promoted":false,"trending":false,"is_draft":false,"is_public":true,"locale_code":"vi","is_video":false,"thumbnail_url":"https:\/\/images.viblo.asia\/0ae9b73f-32fa-4830-9f88-7d15549eebf9.png","user":{"data":{"id":182653,"url":"https:\/\/viblo.asia\/u\/hhoang","avatar":"90700a59-6e71-4d6c-bff6-0223a4e007c4.jpg","name":"Nguy\u1ec5n Huy Ho\u00e0ng","username":"hhoang","followers_count":46,"reputation":2509,"posts_count":250,"banned_at":null,"level_partner":null,"following":false}},"tags":{"data":[{"slug":"array","name":"array"},{"slug":"backend","name":"Backend"},{"slug":"doc-file-trong-php","name":"\u0111\u1ecdc file trong php"}]},"commentators":{"data":[{"id":182653,"url":"https:\/\/viblo.asia\/u\/hhoang","avatar":"90700a59-6e71-4d6c-bff6-0223a4e007c4.jpg","name":"Nguy\u1ec5n Huy Ho\u00e0ng","username":"hhoang","followers_count":0,"reputation":0,"posts_count":0,"banned_at":null,"level_partner":null}]}},{"id":92786,"title":"Ng\u0103n AI n\u00f3i nh\u1ea3m: 7 c\u00e1ch \u0111\u1ec3 gi\u1ea3m thi\u1ec3u \u1ea3o gi\u00e1c c\u1ee7a LLM","slug":"1j4lQgOKJwl","url":"https:\/\/viblo.asia\/p\/ngan-ai-noi-nham-7-cach-de-giam-thieu-ao-giac-cua-llm-1j4lQgOKJwl","user_id":157927,"moderation":null,"transliterated":"ngan-ai-noi-nham-7-cach-de-giam-thieu-ao-giac-cua-llm","contents_short":"Khi AI ph\u00e1t tri\u1ec3n v\u1edbi t\u1ed1c \u0111\u1ed9 ch\u00f3ng m\u1eb7t, vi\u1ec7c t\u1ea1o ra th\u00f4ng tin sai l\u1ec7ch b\u1edfi c\u00e1c M\u00f4 h\u00ecnh Ng\u00f4n ng\u1eef L\u1edbn (LLM) \u2014 th\u01b0\u1eddng \u0111\u01b0\u1ee3c g\u1ecdi l\u00e0 \u1ea2o gi\u00e1c AI \u2014 v\u1eabn l\u00e0 m\u1ed9t r\u00e0o c\u1ea3n l\u1edbn \u0111\u1ed1i v\u1edbi c\u00e1c nh\u00e0 ph\u00e1t tri\u1ec3n v\u00e0 \u0111\u1ed9i ng\u0169 doanh nghi\u1ec7p. Hi\u1ec7n t\u01b0\u1ee3ng n\u00e0y x\u1ea3y ra khi m\u1ed9t m\u00f4 h\u00ecnh cung c\u1ea5p c\u00e1c s\u1ef1 th\u1eadt kh\u00f4ng ch\u00ednh x\u00e1c, c\u00e1c \u0111i\u1ec1u kho\u1ea3n b\u1ecba \u0111\u1eb7t ho\u1eb7c l\u1eddi khuy\u00ean phi logic v\u1edbi s\u1ef1 ch\u1eafc ch\u1eafn tuy\u1ec7t \u0111\u1ed1i. Trong c\u00e1c l\u0129nh v\u1ef1c kh\u1eaft khe n...","contents":"Khi AI ph\u00e1t tri\u1ec3n v\u1edbi t\u1ed1c \u0111\u1ed9 ch\u00f3ng m\u1eb7t, vi\u1ec7c t\u1ea1o ra th\u00f4ng tin sai l\u1ec7ch b\u1edfi c\u00e1c M\u00f4 h\u00ecnh Ng\u00f4n ng\u1eef L\u1edbn (LLM) \u2014 th\u01b0\u1eddng \u0111\u01b0\u1ee3c g\u1ecdi l\u00e0 **\u1ea2o gi\u00e1c AI** \u2014 v\u1eabn l\u00e0 m\u1ed9t r\u00e0o c\u1ea3n l\u1edbn \u0111\u1ed1i v\u1edbi c\u00e1c nh\u00e0 ph\u00e1t tri\u1ec3n v\u00e0 \u0111\u1ed9i ng\u0169 doanh nghi\u1ec7p. Hi\u1ec7n t\u01b0\u1ee3ng n\u00e0y x\u1ea3y ra khi m\u1ed9t m\u00f4 h\u00ecnh cung c\u1ea5p c\u00e1c s\u1ef1 th\u1eadt kh\u00f4ng ch\u00ednh x\u00e1c, c\u00e1c \u0111i\u1ec1u kho\u1ea3n b\u1ecba \u0111\u1eb7t ho\u1eb7c l\u1eddi khuy\u00ean phi logic v\u1edbi s\u1ef1 ch\u1eafc ch\u1eafn tuy\u1ec7t \u0111\u1ed1i. Trong c\u00e1c l\u0129nh v\u1ef1c kh\u1eaft khe nh\u01b0 y t\u1ebf, t\u00e0i ch\u00ednh ho\u1eb7c lu\u1eadt ph\u00e1p, nh\u1eefng sai s\u00f3t nh\u01b0 v\u1eady c\u00f3 th\u1ec3 d\u1eabn \u0111\u1ebfn h\u1eadu qu\u1ea3 tai h\u1ea1i.\n\n![M\u00f4 t\u1ea3 h\u00ecnh \u1ea3nh](https:\/\/dev-to-uploads.s3.amazonaws.com\/uploads\/articles\/qmdawa22g0acppkol673.png)\n\n\u0110\u1ec3 x\u00e2y d\u1ef1ng c\u00e1c h\u1ec7 th\u1ed1ng AI \u0111\u00e1ng tin c\u1eady, \u0111i\u1ec1u c\u1ea7n thi\u1ebft l\u00e0 ph\u1ea3i hi\u1ec3u nguy\u00ean nh\u00e2n g\u1ed1c r\u1ec5 c\u1ee7a \u1ea3o gi\u00e1c v\u00e0 th\u1ef1c hi\u1ec7n c\u00e1c bi\u1ec7n ph\u00e1p h\u1ea1n ch\u1ebf k\u1ef9 thu\u1eadt c\u00f3 m\u1ee5c ti\u00eau.\n\n### T\u1ea1i sao c\u00e1c m\u00f4 h\u00ecnh l\u1ea1i g\u1eb7p \u1ea3o gi\u00e1c?\n\u1ea2o gi\u00e1c b\u1eaft ngu\u1ed3n ch\u1ee7 y\u1ebfu t\u1eeb logic c\u01a1 b\u1ea3n c\u1ee7a LLM. C\u00e1c m\u00f4 h\u00ecnh hi\u1ec7n t\u1ea1i v\u1ec1 b\u1ea3n ch\u1ea5t l\u00e0 c\u00e1c c\u00f4ng c\u1ee5 d\u1ef1 \u0111o\u00e1n chu\u1ed7i x\u00e1c su\u1ea5t; ch\u00fang \u0111o\u00e1n t\u1eeb ti\u1ebfp theo d\u1ef1a tr\u00ean c\u00e1c m\u1eabu th\u1ed1ng k\u00ea t\u00ecm th\u1ea5y trong d\u1eef li\u1ec7u \u0111\u00e0o t\u1ea1o c\u1ee7a ch\u00fang. Ch\u00fang thi\u1ebfu suy lu\u1eadn logic th\u1ef1c s\u1ef1 ho\u1eb7c c\u01a1 ch\u1ebf ki\u1ec3m tra th\u1ef1c t\u1ebf \u2014 ch\u00fang ch\u1ec9 \u0111\u01a1n gi\u1ea3n l\u00e0 t\u1ea1o ra v\u0103n b\u1ea3n nghe c\u00f3 v\u1ebb h\u1ee3p l\u00fd th\u00f4ng qua x\u00e1c su\u1ea5t to\u00e1n h\u1ecdc.\n\nN\u1ebfu d\u1eef li\u1ec7u \u0111\u00e0o t\u1ea1o ch\u1ee9a c\u00e1c \u0111\u1ecbnh ki\u1ebfn, sai s\u00f3t ho\u1eb7c n\u1ed9i dung l\u1ed7i th\u1eddi, m\u00f4 h\u00ecnh s\u1ebd h\u1ea5p th\u1ee5 nh\u1eefng khuy\u1ebft \u0111i\u1ec3m n\u00e0y. H\u01a1n n\u1eefa, c\u00e1c m\u00f4 h\u00ecnh th\u01b0\u1eddng c\u00f3 xu h\u01b0\u1edbng \"mu\u1ed1n l\u00e0m h\u00e0i l\u00f2ng\". Khi \u0111\u1ed1i m\u1eb7t v\u1edbi kho\u1ea3ng c\u00e1ch tri th\u1ee9c, ch\u00fang hi\u1ebfm khi th\u1eeba nh\u1eadn l\u00e0 m\u00ecnh kh\u00f4ng bi\u1ebft, m\u00e0 ch\u1ecdn c\u00e1ch b\u1ecba \u0111\u1eb7t th\u00f4ng tin \u0111\u1ec3 l\u1ea5p \u0111\u1ea7y kho\u1ea3ng tr\u1ed1ng.\n\n![M\u00f4 t\u1ea3 h\u00ecnh \u1ea3nh](https:\/\/dev-to-uploads.s3.amazonaws.com\/uploads\/articles\/5cc87bf0sunyqhpaf4vm.png)\n\n### C\u00e1ch gi\u1ea3m thi\u1ec3u \u1ea3o gi\u00e1c AI\n\nB\u1eb1ng c\u00e1ch t\u1ed1i \u01b0u h\u00f3a ki\u1ebfn tr\u00fac h\u1ec7 th\u1ed1ng v\u00e0 k\u1ef9 thu\u1eadt prompt, b\u1ea1n c\u00f3 th\u1ec3 gi\u1ea3m \u0111\u00e1ng k\u1ec3 t\u1ea7n su\u1ea5t x\u1ea3y ra \u1ea3o gi\u00e1c.\n\n#### 1. \u00c1p d\u1ee5ng T\u1ea1o T\u0103ng c\u01b0\u1eddng Truy xu\u1ea5t (RAG)\n\u0110\u00e2y hi\u1ec7n l\u00e0 m\u1ed9t trong nh\u1eefng gi\u1ea3i ph\u00e1p hi\u1ec7u qu\u1ea3 nh\u1ea5t. V\u1edbi RAG, m\u00f4 h\u00ecnh kh\u00f4ng c\u00f2n ch\u1ec9 d\u1ef1a v\u00e0o b\u1ed9 nh\u1edb trong c\u1ee7a n\u00f3. Thay v\u00e0o \u0111\u00f3, tr\u01b0\u1edbc ti\u00ean n\u00f3 s\u1ebd truy xu\u1ea5t c\u00e1c t\u00e0i li\u1ec7u li\u00ean quan t\u1eeb m\u1ed9t c\u01a1 s\u1edf tri th\u1ee9c b\u00ean ngo\u00e0i \u0111\u00e1ng tin c\u1eady v\u00e0 sau \u0111\u00f3 tr\u1ea3 l\u1eddi d\u1ef1a tr\u00ean ng\u1eef c\u1ea3nh c\u1ee5 th\u1ec3 \u0111\u00f3. \u0110i\u1ec1u n\u00e0y chuy\u1ec3n quy tr\u00ecnh l\u00e0m vi\u1ec7c c\u1ee7a m\u00f4 h\u00ecnh t\u1eeb m\u1ed9t \"cu\u1ed9c thi c\u1eed \u0111\u00f3ng s\u00e1ch\" sang \"cu\u1ed9c thi c\u1eed m\u1edf s\u00e1ch\", \u0111\u1ea3m b\u1ea3o k\u1ebft qu\u1ea3 \u0111\u1ea7u ra d\u1ef1a tr\u00ean b\u1eb1ng ch\u1ee9ng c\u00f3 th\u1ec3 ki\u1ec3m ch\u1ee9ng.\n\n#### 2. S\u1eed d\u1ee5ng G\u1ecdi C\u00f4ng c\u1ee5 (Tool Calling)\n\u0110\u1ed1i v\u1edbi c\u00e1c truy v\u1ea5n li\u00ean quan \u0111\u1ebfn d\u1eef li\u1ec7u th\u1eddi gian th\u1ef1c, th\u00f4ng tin \u0111\u1ed9ng ho\u1eb7c c\u00e1c ph\u00e9p t\u00ednh ph\u1ee9c t\u1ea1p, nhi\u1ec7m v\u1ee5 n\u00ean \u0111\u01b0\u1ee3c b\u00e0n giao cho c\u00e1c c\u00f4ng c\u1ee5 chuy\u00ean d\u1ee5ng. Khi ki\u1ec3m tra gi\u00e1 c\u1ed5 phi\u1ebfu tr\u1ef1c ti\u1ebfp, th\u1eddi ti\u1ebft ho\u1eb7c h\u1ed3 s\u01a1 c\u01a1 s\u1edf d\u1eef li\u1ec7u, m\u00f4 h\u00ecnh s\u1ebd ng\u1eebng d\u1ef1 \u0111o\u00e1n v\u00e0 thay v\u00e0o \u0111\u00f3 k\u00edch ho\u1ea1t m\u1ed9t API \u0111\u1ec3 t\u00ecm n\u1ea1p d\u1eef li\u1ec7u x\u00e1c \u0111\u1ecbnh. T\u1ea1i \u0111\u00e2y, m\u00f4 h\u00ecnh ch\u1ec9 ch\u1ecbu tr\u00e1ch nhi\u1ec7m s\u1eafp x\u1ebfp ng\u00f4n ng\u1eef, b\u1ecf qua c\u00e1c l\u1ed7i do b\u1ed9 nh\u1edb m\u1edd nh\u1ea1t g\u00e2y ra.\n\n#### 3. Cho ph\u00e9p m\u00f4 h\u00ecnh th\u1eeba nh\u1eadn r\u00f5 r\u00e0ng l\u00e0 m\u00ecnh kh\u00f4ng bi\u1ebft\nK\u1ebft h\u1ee3p c\u00e1c h\u01b0\u1edbng d\u1eabn c\u1ee5 th\u1ec3 trong prompt c\u1ee7a b\u1ea1n \u0111\u1ec3 b\u1ea3o m\u00f4 h\u00ecnh tr\u1ea3 l\u1eddi \"T\u00f4i kh\u00f4ng ch\u1eafc\" ho\u1eb7c \"Kh\u00f4ng t\u00ecm th\u1ea5y th\u00f4ng tin\" khi \u0111\u1ed1i m\u1eb7t v\u1edbi d\u1eef li\u1ec7u kh\u00f4ng \u0111\u1ea7y \u0111\u1ee7 ho\u1eb7c kh\u00f4ng ch\u1eafc ch\u1eafn. \u0110i\u1ec1u n\u00e0y lo\u1ea1i b\u1ecf \u00e1p l\u1ef1c bu\u1ed9c m\u00f4 h\u00ecnh ph\u1ea3i b\u1ecba \u0111\u1eb7t n\u1ed9i dung ch\u1ec9 \u0111\u1ec3 ho\u00e0n th\u00e0nh nhi\u1ec7m v\u1ee5. V\u00ed d\u1ee5: khi ph\u00e2n t\u00edch m\u1ed9t b\u00e1o c\u00e1o M&A ph\u1ee9c t\u1ea1p, b\u1ea1n c\u00f3 th\u1ec3 h\u01b0\u1edbng d\u1eabn m\u00f4 h\u00ecnh n\u00eau r\u00f5 n\u1ebfu thi\u1ebfu b\u1eb1ng ch\u1ee9ng c\u1ea7n thi\u1ebft.\n\n#### 4. B\u1eaft bu\u1ed9c tr\u00edch d\u1eabn tr\u1ef1c ti\u1ebfp\nKhi x\u1eed l\u00fd c\u00e1c t\u00e0i li\u1ec7u d\u00e0i ho\u1eb7c c\u00e1c quy \u0111\u1ecbnh ph\u00e1p l\u00fd, h\u00e3y y\u00eau c\u1ea7u m\u00f4 h\u00ecnh tr\u00edch d\u1eabn nguy\u00ean v\u0103n t\u1eeb v\u0103n b\u1ea3n ngu\u1ed3n tr\u01b0\u1edbc khi th\u1ef1c hi\u1ec7n b\u1ea5t k\u1ef3 ph\u00e2n t\u00edch n\u00e0o. K\u1ef9 thu\u1eadt neo gi\u1eef n\u00e0y ng\u0103n ng\u1eeba s\u1ef1 sai l\u1ec7ch ng\u1eef ngh\u0129a trong qu\u00e1 tr\u00ecnh di\u1ec5n gi\u1ea3i. Th\u1ef1c hi\u1ec7n t\u00f3m t\u1eaft ho\u1eb7c ki\u1ec3m to\u00e1n d\u1ef1a tr\u00ean c\u00e1c tr\u00edch d\u1eabn n\u00e0y s\u1ebd gi\u00fap n\u00e2ng cao \u0111\u00e1ng k\u1ec3 t\u00ednh ch\u1eb7t ch\u1ebd c\u1ee7a k\u1ebft qu\u1ea3 \u0111\u1ea7u ra.\n\n#### 5. Thi\u1ebft l\u1eadp vi\u1ec7c ghi nh\u1eadn ngu\u1ed3n v\u00e0 ki\u1ec3m to\u00e1n\nY\u00eau c\u1ea7u m\u00f4 h\u00ecnh tr\u00edch d\u1eabn ngu\u1ed3n cho m\u1ecdi tuy\u00ean b\u1ed1 th\u1ef1c t\u1ebf. Sau khi n\u1ed9i dung \u0111\u01b0\u1ee3c t\u1ea1o, m\u1ed9t b\u01b0\u1edbc x\u00e1c minh b\u1ed5 sung c\u00f3 th\u1ec3 \u0111\u01b0\u1ee3c th\u00eam v\u00e0o \u0111\u1ec3 m\u00f4 h\u00ecnh ki\u1ec3m tra xem m\u1ed7i tuy\u00ean b\u1ed1 c\u00f3 v\u0103n b\u1ea3n g\u1ed1c t\u01b0\u01a1ng \u1ee9ng trong t\u00e0i li\u1ec7u tham kh\u1ea3o hay kh\u00f4ng. N\u1ebfu kh\u00f4ng t\u00ecm th\u1ea5y b\u1eb1ng ch\u1ee9ng h\u1ed7 tr\u1ee3, tuy\u00ean b\u1ed1 \u0111\u00f3 ph\u1ea3i \u0111\u01b0\u1ee3c r\u00fat l\u1ea1i. C\u01a1 ch\u1ebf ph\u1ea3n h\u1ed3i c\u00f3 th\u1ec3 ki\u1ec3m to\u00e1n n\u00e0y gi\u00fap t\u0103ng t\u00ednh minh b\u1ea1ch.\n\n#### 6. Tinh ch\u1ec9nh (Fine-tuning) v\u00e0 RLHF v\u1edbi d\u1eef li\u1ec7u ch\u1ea5t l\u01b0\u1ee3ng cao\nChuy\u00ean m\u00f4n c\u1ee7a m\u1ed9t m\u00f4 h\u00ecnh ph\u1ee5 thu\u1ed9c v\u00e0o ch\u1ea5t l\u01b0\u1ee3ng d\u1eef li\u1ec7u \u0111\u00e0o t\u1ea1o c\u1ee7a n\u00f3. Tinh ch\u1ec9nh tr\u00ean c\u00e1c t\u1eadp d\u1eef li\u1ec7u chuy\u00ean nghi\u1ec7p \u0111\u01b0\u1ee3c tuy\u1ec3n ch\u1ecdn, kh\u00f4ng c\u00f3 t\u1ea1p \u00e2m s\u1ebd c\u1ea3i thi\u1ec7n s\u1ef1 n\u1eafm b\u1eaft c\u1ee7a m\u00f4 h\u00ecnh \u0111\u1ed1i v\u1edbi logic c\u1ee5 th\u1ec3 c\u1ee7a ng\u00e0nh. \u0110\u1ed3ng th\u1eddi, s\u1eed d\u1ee5ng H\u1ecdc t\u0103ng c\u01b0\u1eddng t\u1eeb ph\u1ea3n h\u1ed3i c\u1ee7a con ng\u01b0\u1eddi (RLHF) cho ph\u00e9p c\u00e1c chuy\u00ean gia con ng\u01b0\u1eddi ch\u1ea5m \u0111i\u1ec3m \u0111\u1ed9 ch\u00ednh x\u00e1c c\u1ee7a k\u1ebft qu\u1ea3 \u0111\u1ea7u ra, h\u01b0\u1edbng d\u1eabn m\u00f4 h\u00ecnh tr\u00e1nh c\u00e1ch di\u1ec5n \u0111\u1ea1t d\u1ec5 d\u1eabn \u0111\u1ebfn \u1ea3o gi\u00e1c.\n\n#### 7. L\u1ecdc k\u1ebft qu\u1ea3 \u0111\u1ea7u ra v\u00e0 \u0110\u00e1nh gi\u00e1 \u0111\u1ed9 tin c\u1eady\nTh\u00eam m\u1ed9t l\u1edbp x\u00e1c th\u1ef1c x\u1eed l\u00fd h\u1eadu k\u1ef3 t\u1ef1 \u0111\u1ed9ng tr\u01b0\u1edbc khi k\u1ebft qu\u1ea3 \u0111\u01b0\u1ee3c hi\u1ec3n th\u1ecb cho ng\u01b0\u1eddi d\u00f9ng cu\u1ed1i. H\u1ec7 th\u1ed1ng c\u00f3 th\u1ec3 g\u00e1n m\u1ed9t s\u1ed1 \u0111i\u1ec3m d\u1ef1a tr\u00ean \"m\u1ee9c \u0111\u1ed9 ch\u1eafc ch\u1eafn\" c\u1ee7a m\u00f4 h\u00ecnh v\u1ec1 c\u00e2u tr\u1ea3 l\u1eddi. N\u1ebfu \u0111i\u1ec3m tin c\u1eady gi\u1ea3m xu\u1ed1ng d\u01b0\u1edbi m\u1ed9t ng\u01b0\u1ee1ng nh\u1ea5t \u0111\u1ecbnh, n\u00f3 c\u00f3 th\u1ec3 t\u1ef1 \u0111\u1ed9ng k\u00edch ho\u1ea1t qu\u00e1 tr\u00ecnh xem x\u00e9t th\u1ee7 c\u00f4ng ho\u1eb7c t\u1eeb ch\u1ed1i xu\u1ea5t c\u00e2u tr\u1ea3 l\u1eddi. C\u01a1 ch\u1ebf l\u1ecdc n\u00e0y s\u1ebd ch\u1eb7n ph\u1ea7n l\u1edbn c\u00e1c k\u1ebft qu\u1ea3 t\u1ea1o ra ch\u1ea5t l\u01b0\u1ee3ng th\u1ea5p.\n\n---\n\nTrong k\u1ef7 nguy\u00ean ph\u00e1t tri\u1ec3n AI nhanh ch\u00f3ng n\u00e0y, c\u00e1c nh\u00e0 ph\u00e1t tri\u1ec3n kh\u00f4ng n\u00ean n\u00e9 tr\u00e1nh AI ch\u1ec9 v\u00ec v\u1ea5n \u0111\u1ec1 \u1ea3o gi\u00e1c. M\u1ed9t c\u00e1ch ti\u1ebfp c\u1eadn h\u1ee3p l\u00fd h\u01a1n l\u00e0 s\u1eed d\u1ee5ng c\u00e1c ph\u01b0\u01a1ng ti\u1ec7n k\u1ef9 thu\u1eadt \u0111\u1ec3 h\u1ea1n ch\u1ebf m\u00f4 h\u00ecnh v\u00e0 gi\u1ea3m thi\u1ec3u sai s\u00f3t. Th\u1ecb tr\u01b0\u1eddng hi\u1ec7n cung c\u1ea5p v\u00f4 s\u1ed1 l\u1ef1a ch\u1ecdn, t\u1eeb c\u00e1c tr\u1ee3 l\u00fd l\u1eadp tr\u00ecnh AI t\u0103ng c\u01b0\u1eddng hi\u1ec7u qu\u1ea3 \u0111\u1ebfn c\u00e1c LLM c\u1ee5c b\u1ed9 t\u1eadp trung v\u00e0o quy\u1ec1n ri\u00eang t\u01b0.\n\nVi\u1ec7c ch\u1ea1y c\u00e1c c\u00f4ng c\u1ee5 AI n\u00e0y th\u01b0\u1eddng y\u00eau c\u1ea7u m\u00f4i tr\u01b0\u1eddng c\u1ee5c b\u1ed9 c\u1ee5 th\u1ec3. V\u00ed d\u1ee5: c\u00e1c tr\u1ee3 l\u00fd l\u1eadp tr\u00ecnh AI ph\u1ed5 bi\u1ebfn th\u01b0\u1eddng c\u1ea7n m\u00f4i tr\u01b0\u1eddng Python ho\u1eb7c Node.js \u0111\u1ec3 ho\u1ea1t \u0111\u1ed9ng b\u00ecnh th\u01b0\u1eddng. **ServBay** cung c\u1ea5p m\u1ed9t gi\u1ea3i ph\u00e1p c\u1ef1c k\u1ef3 ti\u1ec7n l\u1ee3i, h\u1ed7 tr\u1ee3 [c\u00e0i \u0111\u1eb7t Python ch\u1ec9 v\u1edbi m\u1ed9t c\u00fa nh\u1ea5p chu\u1ed9t](https:\/\/www.servbay.com\/features\/python) v\u00e0 m\u00f4i tr\u01b0\u1eddng Node.js. \u0110\u1ed1i v\u1edbi c\u00e1c nh\u00e0 ph\u00e1t tri\u1ec3n c\u1ea7n chuy\u1ec3n \u0111\u1ed5i gi\u1eefa nhi\u1ec1u d\u1ef1 \u00e1n, ServBay cho ph\u00e9p chuy\u1ec3n \u0111\u1ed5i gi\u1eefa c\u00e1c phi\u00ean b\u1ea3n m\u00f4i tr\u01b0\u1eddng kh\u00e1c nhau ch\u1ec9 v\u1edbi m\u1ed9t c\u00fa nh\u1ea5p chu\u1ed9t, lo\u1ea1i b\u1ecf ho\u00e0n to\u00e0n c\u01a1n \u0111au \u0111\u1ea7u v\u1ec1 xung \u0111\u1ed9t m\u00f4i tr\u01b0\u1eddng.\n\n![M\u00f4 t\u1ea3 h\u00ecnh \u1ea3nh](https:\/\/dev-to-uploads.s3.amazonaws.com\/uploads\/articles\/7c7fiaqesjmuoj8jdfq6.png)\n\nN\u1ebfu b\u1ea1n c\u00f3 y\u00eau c\u1ea7u c\u1ef1c k\u1ef3 cao v\u1ec1 quy\u1ec1n ri\u00eang t\u01b0 d\u1eef li\u1ec7u, ch\u1ea1y LLM c\u1ee5c b\u1ed9 l\u00e0 l\u1ef1a ch\u1ecdn \u01b0u vi\u1ec7t. ServBay t\u00edch h\u1ee3p kh\u1ea3 n\u0103ng [c\u00e0i \u0111\u1eb7t Ollama ch\u1ec9 v\u1edbi m\u1ed9t c\u00fa nh\u1ea5p chu\u1ed9t](https:\/\/www.servbay.com\/features\/ollama), cho ph\u00e9p c\u00e1c nh\u00e0 ph\u00e1t tri\u1ec3n d\u1ec5 d\u00e0ng kh\u1edfi ch\u1ea1y c\u00e1c m\u00f4 h\u00ecnh m\u00e3 ngu\u1ed3n m\u1edf ph\u1ed5 bi\u1ebfn nh\u01b0 Llama 3 v\u00e0 Qwen ngay tr\u00ean m\u00e1y c\u1ee5c b\u1ed9 c\u1ee7a h\u1ecd.\n\n![M\u00f4 t\u1ea3 h\u00ecnh \u1ea3nh](https:\/\/dev-to-uploads.s3.amazonaws.com\/uploads\/articles\/oeoszc6qs8v2pgougn8s.png)\n\n\u0110\u01b0\u1ee3c k\u1ebft h\u1ee3p v\u1edbi giao di\u1ec7n qu\u1ea3n l\u00fd t\u00edch h\u1ee3p c\u1ee7a ServBay, c\u00e1c nh\u00e0 ph\u00e1t tri\u1ec3n c\u00f3 th\u1ec3 nhanh ch\u00f3ng th\u1ef1c hi\u1ec7n g\u1ee1 l\u1ed7i RAG c\u1ee5c b\u1ed9 v\u00e0 x\u00e1c th\u1ef1c m\u00f4 h\u00ecnh, t\u1ed1i \u01b0u h\u00f3a hi\u1ec7u su\u1ea5t h\u1ec7 th\u1ed1ng m\u00e0 kh\u00f4ng l\u00e0m r\u00f2 r\u1ec9 d\u1eef li\u1ec7u nh\u1ea1y c\u1ea3m.\n\n### K\u1ebft lu\u1eadn\n\u1ea2o gi\u00e1c l\u00e0 \"t\u1ed9i l\u1ed7i nguy\u00ean th\u1ee7y\" c\u1ee7a LLM, nh\u01b0ng n\u00f3 kh\u00f4ng ph\u1ea3i l\u00e0 m\u1ed9t h\u1ed1 s\u00e2u kh\u00f4ng th\u1ec3 v\u01b0\u1ee3t qua. Trong th\u1eddi \u0111\u1ea1i AI ch\u1ecdn l\u1ecdc t\u1ef1 nhi\u00ean n\u00e0y, \u0111\u1ed9 ch\u00ednh x\u00e1c ch\u00ednh l\u00e0 huy\u1ebft m\u1ea1ch. H\u00e3y t\u1eeb ch\u1ed1i k\u1ebft qu\u1ea3 \u0111\u1ea7u ra t\u1ea7m th\u01b0\u1eddng v\u00e0 s\u1ef1 ph\u1ed3n vinh gi\u1ea3 t\u1ea1o. Ho\u1eb7c l\u00e0 gi\u1ea3i quy\u1ebft v\u1ea5n \u0111\u1ec1 \u1ea3o gi\u00e1c, ho\u1eb7c l\u00e0 b\u1ecb th\u1ecb tr\u01b0\u1eddng \u0111\u00e0o th\u1ea3i \u2014 kh\u00f4ng c\u00f3 con \u0111\u01b0\u1eddng \u1edf gi\u1eefa.","published_at":"2026-04-14T10:26:42.000000Z","scheduled_publish_at":null,"is_published":true,"is_shared":false,"updated_at":"2026-04-14T17:25:02.000000Z","edited_at":"2026-04-14T10:26:38.000000Z","translation_source":null,"trend_at":null,"promoted_at":null,"reading_time":11,"points":0,"views_count":23,"clips_count":0,"comments_count":0,"rated_value":null,"promoted":false,"trending":false,"is_draft":false,"is_public":true,"locale_code":"vi","is_video":false,"thumbnail_url":"https:\/\/images.viblo.asia\/15121672-d6e4-4aab-ad93-9d1d0e4d97a4.png","user":{"data":{"id":157927,"url":"https:\/\/viblo.asia\/u\/ServBay","avatar":"105f9e15-95a5-4bc2-b7a0-a1d93fbc75a1.png","name":"ServBay","username":"ServBay","followers_count":2,"reputation":142,"posts_count":13,"banned_at":null,"level_partner":null,"following":false}},"tags":{"data":[{"slug":"ai","name":"AI"},{"slug":"llm","name":"LLM"}]},"commentators":{"data":[]}},{"id":92783,"title":"Imperative CLI: T\u01b0 Duy \"C\u1ea7m Tay Ch\u1ec9 Vi\u1ec7c\" & S\u1ef1 Ti\u1ebfn H\u00f3a L\u00ean Declarative","slug":"XP4WEo7qL7G","url":"https:\/\/viblo.asia\/p\/imperative-cli-tu-duy-cam-tay-chi-viec-su-tien-hoa-len-declarative-XP4WEo7qL7G","user_id":182653,"moderation":null,"transliterated":"imperative-cli-tu-duy-cam-tay-chi-viec-su-tien-hoa-len-declarative","contents_short":"H\u1ed3i m\u1edbi t\u1eadp t\u00e0nh l\u00e0m DevOps ki\u00eam Backend, m\u00ecnh t\u1eebng vi\u1ebft m\u1ed9t c\u00e1i shell script (bash) c\u1ef1c k\u1ef3 t\u00e2m huy\u1ebft \u0111\u1ec3 t\u1ef1 \u0111\u1ed9ng h\u00f3a vi\u1ec7c deploy con app Node.js l\u00ean server. Lu\u1ed3ng ch\u1ea1y c\u1ee7a n\u00f3 \u0111\u1ea1i kh\u00e1i nh\u01b0 sau:\n\n1. git pull origin main (K\u00e9o code m\u1edbi)\n2. npm install (C\u00e0i th\u01b0 vi\u1ec7n)\n3. npm run build (Build code)\n4. pm2 restart app (Kh\u1edfi \u0111\u1ed9ng l\u1ea1i server)\n\nM\u1ecdi th\u1ee9 ch\u1ea1y m\u01b0\u1ee3t m\u00e0 \u0111\u01b0\u1ee3c n\u1eeda n\u0103m. Cho \u0111\u1ebfn m\u1ed9t ng\u00e0y c\u00e1 m\u1eadp c\u1eaf...","contents":"H\u1ed3i m\u1edbi t\u1eadp t\u00e0nh l\u00e0m DevOps ki\u00eam Backend, m\u00ecnh t\u1eebng vi\u1ebft m\u1ed9t c\u00e1i shell script (bash) c\u1ef1c k\u1ef3 t\u00e2m huy\u1ebft \u0111\u1ec3 t\u1ef1 \u0111\u1ed9ng h\u00f3a vi\u1ec7c deploy con app Node.js l\u00ean server. Lu\u1ed3ng ch\u1ea1y c\u1ee7a n\u00f3 \u0111\u1ea1i kh\u00e1i nh\u01b0 sau:\n\n1. `git pull origin main` (K\u00e9o code m\u1edbi)\n2. `npm install` (C\u00e0i th\u01b0 vi\u1ec7n)\n3. `npm run build` (Build code)\n4. `pm2 restart app` (Kh\u1edfi \u0111\u1ed9ng l\u1ea1i server)\n\nM\u1ecdi th\u1ee9 ch\u1ea1y m\u01b0\u1ee3t m\u00e0 \u0111\u01b0\u1ee3c n\u1eeda n\u0103m. Cho \u0111\u1ebfn m\u1ed9t ng\u00e0y c\u00e1 m\u1eadp c\u1eafn c\u00e1p, b\u01b0\u1edbc npm install b\u1ecb timeout v\u00e0 v\u0103ng l\u1ed7i. Nh\u01b0ng c\u00e1i script ng\u1ed1c ngh\u1ebfch c\u1ee7a m\u00ecnh kh\u00f4ng c\u00f3 logic x\u1eed l\u00fd l\u1ed7i (error handling) ch\u1eb7t ch\u1ebd, n\u00f3 v\u1eabn nh\u1eafm m\u1eaft ch\u1ea1y ti\u1ebfp b\u01b0\u1edbc 3 v\u00e0 b\u01b0\u1edbc 4. K\u1ebft qu\u1ea3? Con app tr\u00ean Production b\u1ecb restart v\u1edbi m\u1ed9t \u0111\u1ed1ng code l\u1ed7i, s\u1eadp to\u00e0n t\u1eadp. Kh\u00e1ch h\u00e0ng r\u00e9o t\u00ean m\u00ecnh l\u00fac 12h \u0111\u00eam.\n\n\u0110\u00f3 ch\u00ednh l\u00e0 c\u00e1i gi\u00e1 ph\u1ea3i tr\u1ea3 khi l\u1ea1m d\u1ee5ng Imperative CLI (Giao di\u1ec7n d\u00f2ng l\u1ec7nh mang t\u00ednh m\u1ec7nh l\u1ec7nh) cho nh\u1eefng t\u00e1c v\u1ee5 h\u1ec7 th\u1ed1ng ph\u1ee9c t\u1ea1p.\n\n### 1. Imperative CLI l\u00e0 g\u00ec? (T\u01b0 duy \"C\u1ea7m tay ch\u1ec9 vi\u1ec7c\")\n\nT\u1eeb \"Imperative\" trong ti\u1ebfng Anh mang ngh\u0129a l\u00e0 \"B\u1eaft bu\u1ed9c, M\u1ec7nh l\u1ec7nh\".\nM\u1ed9t c\u00f4ng c\u1ee5 Imperative CLI y\u00eau c\u1ea7u b\u1ea1n ph\u1ea3i ch\u1ec9 th\u1ecb cho n\u00f3 t\u1eebng b\u01b0\u1edbc m\u1ed9t, c\u1ef1c k\u1ef3 chi ti\u1ebft v\u1ec1 C\u00c1CH (How) \u0111\u1ec3 \u0111\u1ea1t \u0111\u01b0\u1ee3c k\u1ebft qu\u1ea3.\n\nGi\u1ed1ng nh\u01b0 vi\u1ec7c b\u1ea1n nh\u1edd c\u1eadu em \u0111i mua ly c\u00e0 ph\u00ea:\n\n1. \"B1: \u0110i ra kh\u1ecfi nh\u00e0.\"\n2. \"B2: R\u1ebd tr\u00e1i, \u0111i 500m.\"\n3. \"B3: V\u00e0o qu\u00e1n, \u0111\u01b0a 50k, b\u1ea3o nh\u00e2n vi\u00ean pha 1 ly \u0111en \u0111\u00e1.\"\n4. \"B4: Mang v\u1ec1 \u0111\u00e2y.\"\n\nTrong th\u1ebf gi\u1edbi l\u1eadp tr\u00ecnh, c\u00e1c c\u00f4ng c\u1ee5 kinh \u0111i\u1ec3n nh\u01b0 Git hay Docker (\u1edf m\u1ee9c c\u01a1 b\u1ea3n) ch\u00ednh l\u00e0 Imperative CLI.\n\n* `docker run -d -p 8080:80 nginx`\n* `docker stop my_nginx`\n* `docker rm my_nginx`\n\nB\u1ea1n vi\u1ebft ra tool b\u1eb1ng `yargs` \u1edf b\u00e0i tr\u01b0\u1edbc? Kh\u1ea3 n\u0103ng cao n\u00f3 c\u0169ng l\u00e0 Imperative. B\u1ea1n \u0111ang ra l\u1ec7nh cho m\u00e1y t\u00ednh l\u00e0m ch\u00ednh x\u00e1c nh\u1eefng g\u00ec b\u1ea1n g\u00f5\n\n### 2. N\u1ed7i \u0111au c\u1ee7a Imperative: Khi k\u1ecbch b\u1ea3n g\u00e3y g\u00e1nh\n\nTool Imperative r\u1ea5t d\u1ec5 vi\u1ebft, d\u1ec5 hi\u1ec3u, nh\u01b0ng n\u00f3 ch\u1ee9a \u0111\u1ef1ng 2 \u0111i\u1ec3m y\u1ebfu ch\u00ed m\u1ea1ng khi mang l\u00ean m\u00f4i tr\u01b0\u1eddng Production (ho\u1eb7c CI\/CD):\n\n* Kh\u00f4ng c\u00f3 t\u00ednh L\u0169y \u0111\u1eb3ng (Idempotency): Gi\u1ea3 s\u1eed b\u1ea1n g\u00f5 l\u1ec7nh `mkdir my_folder`. N\u00f3 ch\u1ea1y ngon. B\u1ea1n l\u1ee1 tay g\u00f5 l\u1ea1i l\u1ec7nh \u0111\u00f3 l\u1ea7n th\u1ee9 2, h\u1ec7 th\u1ed1ng ch\u1eedi v\u00e0o m\u1eb7t b\u1ea1n ngay: `File exists`. Imperative CLI kh\u00f4ng t\u1ef1 bi\u1ebft ki\u1ec3m tra xem k\u1ebft qu\u1ea3 \u0111\u00e3 \u0111\u1ea1t \u0111\u01b0\u1ee3c hay ch\u01b0a. B\u1ea1n ph\u1ea3i t\u1ef1 vi\u1ebft \u0111\u1ed1ng code `if (folder_not_exists) then mkdir`... c\u1ef1c k\u1ef3 m\u1ec7t m\u1ecfi.\n* B\u1ea5t l\u1ef1c khi Rollback: N\u1ebfu b\u1ea1n c\u00f3 m\u1ed9t k\u1ecbch b\u1ea3n 10 b\u01b0\u1edbc (nh\u01b0 v\u00ed d\u1ee5 deploy \u1edf \u0111\u1ea7u b\u00e0i). N\u00f3 t\u1ea1ch \u1edf b\u01b0\u1edbc 5. L\u00fac n\u00e0y h\u1ec7 th\u1ed1ng n\u1eb1m \u1edf tr\u1ea1ng th\u00e1i \"l\u1ea5p l\u1eedng\" (n\u1eeda n\u1ea1c n\u1eeda m\u1ee1). M\u00e1y m\u00f3c kh\u00f4ng bi\u1ebft l\u00e0m sao \u0111\u1ec3 l\u00f9i l\u1ea1i 4 b\u01b0\u1edbc tr\u01b0\u1edbc \u0111\u00f3. B\u1ea1n ph\u1ea3i t\u1ef1 tay SSH v\u00e0o server \u0111\u1ec3 d\u1ecdn r\u00e1c.\n\n### 3. S\u1ef1 ti\u1ebfn h\u00f3a: Declarative CLI (T\u01b0 duy \"K\u1ebft qu\u1ea3 cu\u1ed1i c\u00f9ng\")\n\n\u0110\u1ec3 gi\u1ea3i quy\u1ebft n\u1ed7i \u0111au tr\u00ean, gi\u1edbi tinh hoa c\u00f4ng ngh\u1ec7 \u0111\u00e3 t\u1ea1o ra m\u1ed9t t\u01b0 duy m\u1edbi: Declarative CLI (Khai b\u00e1o).\n\nThay v\u00ec b\u1ea3o m\u00e1y m\u00f3c C\u00c1CH l\u00e0m, b\u1ea1n ch\u1ec9 c\u1ea7n \u0111\u01b0a cho n\u00f3 m\u1ed9t b\u1ea3n thi\u1ebft k\u1ebf m\u00f4 t\u1ea3 K\u1ebeT QU\u1ea2 b\u1ea1n mu\u1ed1n (What).\n\nQuay l\u1ea1i v\u00ed d\u1ee5 mua c\u00e0 ph\u00ea, t\u01b0 duy Declarative l\u00e0: \"Tr\u00ean b\u00e0n ph\u1ea3i c\u00f3 1 ly \u0111en \u0111\u00e1, ti\u1ec1n th\u1eeba 10k\". C\u1eadu em t\u1ef1 bi\u1ebft ph\u1ea3i l\u00e0m g\u00ec, \u0111i \u0111\u01b0\u1eddng n\u00e0o, l\u1ee1 qu\u00e1n n\u00e0y \u0111\u00f3ng c\u1eeda th\u00ec sang qu\u00e1n kh\u00e1c.\n\nTrong th\u1ef1c t\u1ebf, Kubernetes (`kubectl`) v\u00e0 Terraform l\u00e0 hai tr\u00f9m cu\u1ed1i c\u1ee7a h\u1ec7 ph\u00e1i n\u00e0y.\nThay v\u00ec g\u00f5 10 l\u1ec7nh t\u1ea1o server, b\u1ea1n vi\u1ebft m\u1ed9t file `deployment.yaml`:\n\n```\n# Tao mu\u1ed1n c\u00f3 3 con server ch\u1ea1y Nginx phi\u00ean b\u1ea3n 1.21\nreplicas: 3\nimage: nginx:1.21\n```\n\nSau \u0111\u00f3 b\u1ea1n g\u00f5 m\u1ed9t l\u1ec7nh duy nh\u1ea5t:\n`kubectl apply -f deployment.yaml`\n\nL\u00fac n\u00e0y, c\u00e1i CLI engine b\u00ean d\u01b0\u1edbi s\u1ebd t\u1ef1 \u0111\u1ed9ng so s\u00e1nh tr\u1ea1ng th\u00e1i hi\u1ec7n t\u1ea1i c\u1ee7a h\u1ec7 th\u1ed1ng v\u1edbi c\u00e1i file YAML c\u1ee7a b\u1ea1n.\n\n* N\u1ebfu ch\u01b0a c\u00f3 server n\u00e0o, n\u00f3 t\u1ef1 t\u1ea1o 3 con.\n* N\u1ebfu \u0111ang c\u00f3 1 con, n\u00f3 t\u1ef1 t\u1ea1o th\u00eam 2 con.\n* N\u1ebfu \u0111ang c\u00f3 5 con, n\u00f3 t\u1ef1 \"gi\u1ebft\" b\u1edbt 2 con.\nB\u1ea1n g\u00f5 l\u1ec7nh `apply` 100 l\u1ea7n, k\u1ebft qu\u1ea3 v\u1eabn ch\u1ec9 l\u00e0 3 con server. T\u00ednh l\u0169y \u0111\u1eb3ng (Idempotency) \u0111\u01b0\u1ee3c gi\u1ea3i quy\u1ebft tri\u1ec7t \u0111\u1ec3!\n\n### 4. Vibe Coder ch\u1ecdn g\u00ec?\n\nC\u00f3 ph\u1ea3i ch\u00fang ta n\u00ean v\u1ee9t b\u1ecf h\u1ebft Imperative CLI? Kh\u00f4ng h\u1ec1.\n\n* D\u00f9ng Imperative khi: X\u1eed l\u00fd c\u00e1c t\u00e1c v\u1ee5 m\u1ed9t l\u1ea7n (ad-hoc), debug l\u1ed7i, test logic c\u1ee5c b\u1ed9, ho\u1eb7c vi\u1ebft c\u00e1c tool t\u1ef1 \u0111\u1ed9ng h\u00f3a c\u00e1 nh\u00e2n (nh\u01b0 tool d\u1ecdn r\u00e1c DB ch\u00fang ta vi\u1ebft b\u1eb1ng yargs). N\u00f3 nhanh, g\u1ecdn, l\u1eb9.\n* D\u00f9ng Declarative khi: Qu\u1ea3n l\u00fd h\u1ea1 t\u1ea7ng (Infrastructure as Code), h\u1ec7 th\u1ed1ng CI\/CD, ho\u1eb7c c\u00e1c stateful system ph\u1ee9c t\u1ea1p.\n\nM\u1ed9t Vibe Coder th\u1ef1c th\u1ee5 s\u1ebd kh\u00f4ng cu\u1ed3ng t\u00edn m\u1ed9t phe n\u00e0o c\u1ea3. H\u1ecd bi\u1ebft khi n\u00e0o c\u1ea7n \"c\u1ea7m tay ch\u1ec9 vi\u1ec7c\", v\u00e0 khi n\u00e0o c\u1ea7n giao ph\u00f3 \"b\u1ea3n thi\u1ebft k\u1ebf\" cho h\u1ec7 th\u1ed1ng t\u1ef1 lo.\n\n**Ch\u1ee7 \u0111\u1ec1 ti\u1ebfp theo: C\u01a1n \u00c1c M\u1ed9ng C\u1ee7a Node.js - X\u1eed L\u00fd File CSV 10GB M\u00e0 Kh\u00f4ng B\u1ecb OOM**\n\n\u0110\u00e3 \u0111\u1ebfn l\u00fac th\u1ef1c hi\u1ec7n l\u1eddi h\u1ee9a t\u1eeb 2 b\u00e0i vi\u1ebft tr\u01b0\u1edbc!\n\nB\u1ea1n \u0111\u00e3 bi\u1ebft c\u00e1ch vi\u1ebft CLI Tool b\u1eb1ng `yargs`, b\u1ea1n c\u0169ng bi\u1ebft c\u00e1ch thi\u1ebft k\u1ebf l\u1ec7nh sao cho m\u01b0\u1ee3t. B\u00e2y gi\u1edd, Tech Lead giao cho b\u1ea1n m\u1ed9t file B\u00e1o c\u00e1o d\u1eef li\u1ec7u th\u00f4 (CSV) n\u1eb7ng... 10GB. Y\u00eau c\u1ea7u vi\u1ebft m\u1ed9t c\u00e1i tool Node.js \u0111\u1ecdc file \u0111\u00f3 v\u00e0 insert v\u00e0o Database.\n\nN\u1ebfu b\u1ea1n d\u00f9ng l\u1ec7nh `fs.readFileSync('data.csv')` (\u0111\u00e2y l\u00e0 m\u1ed9t l\u1ec7nh Imperative c\u1ef1c \u0111oan), app Node.js c\u1ee7a b\u1ea1n s\u1ebd n\u1ed5 tung ngay l\u1eadp t\u1ee9c v\u00ec 10GB data kh\u00f4ng th\u1ec3 nh\u00e9t v\u1eeba 1.5GB RAM m\u1eb7c \u0111\u1ecbnh.\n\n\u1ede b\u00e0i vi\u1ebft t\u1edbi, m\u00ecnh s\u1ebd khai m\u1edf m\u1ed9t \"ma thu\u1eadt\" \u0111\u01b0\u1ee3c \u1ea9n gi\u1ea5u s\u00e2u b\u00ean trong ki\u1ebfn tr\u00fac Node.js: Node.js Streams. L\u00e0m sao \u0111\u1ec3 d\u00f2ng ch\u1ea3y d\u1eef li\u1ec7u m\u01b0\u1ee3t m\u00e0 \u0111i t\u1eeb File -> Node.js -> Database m\u00e0 RAM Server v\u1eabn ch\u1ec9 nh\u1ecbp nh\u00e0ng \u1edf m\u1ee9c 50MB? Anh em nh\u1edb follow \u0111\u1ec3 \u0111\u00f3n xem nh\u00e9!","published_at":"2026-04-14T10:22:08.000000Z","scheduled_publish_at":null,"is_published":true,"is_shared":false,"updated_at":"2026-04-14T17:00:18.000000Z","edited_at":"2026-04-14T10:22:08.000000Z","translation_source":null,"trend_at":null,"promoted_at":null,"reading_time":6,"points":1,"views_count":14,"clips_count":0,"comments_count":1,"rated_value":null,"promoted":false,"trending":false,"is_draft":false,"is_public":true,"locale_code":"vi","is_video":false,"thumbnail_url":"https:\/\/images.viblo.asia\/cb6245cc-b3e2-4a59-8916-924d35e47372.png","user":{"data":{"id":182653,"url":"https:\/\/viblo.asia\/u\/hhoang","avatar":"90700a59-6e71-4d6c-bff6-0223a4e007c4.jpg","name":"Nguy\u1ec5n Huy Ho\u00e0ng","username":"hhoang","followers_count":46,"reputation":2509,"posts_count":250,"banned_at":null,"level_partner":null,"following":false}},"tags":{"data":[{"slug":"android-architecture","name":"Android Architecture"},{"slug":"devops","name":"DevOps"},{"slug":"systemdesign","name":"systemdesign"}]},"commentators":{"data":[{"id":182653,"url":"https:\/\/viblo.asia\/u\/hhoang","avatar":"90700a59-6e71-4d6c-bff6-0223a4e007c4.jpg","name":"Nguy\u1ec5n Huy Ho\u00e0ng","username":"hhoang","followers_count":0,"reputation":0,"posts_count":0,"banned_at":null,"level_partner":null}]}},{"id":92785,"title":"Test th\u1eed Benchmark Hi\u1ec7u n\u0103ng 7 LLM tr\u00ean NVIDIA V100","slug":"AWVpX1eoV05","url":"https:\/\/viblo.asia\/p\/test-thu-benchmark-hieu-nang-7-llm-tren-nvidia-v100-AWVpX1eoV05","user_id":166613,"moderation":null,"transliterated":"test-thu-benchmark-hieu-nang-7-llm-tren-nvidia-v100","contents_short":"B\u00e0i vi\u1ebft n\u00e0y s\u1ebd ph\u00e2n t\u00edch chi ti\u1ebft hi\u1ec7u n\u0103ng c\u1ee7a 7 m\u00f4 h\u00ecnh ph\u1ed5 bi\u1ebfn tr\u00ean c\u1ea5u h\u00ecnh NVIDIA V100 GPU Server th\u00f4ng qua tr\u00ecnh qu\u1ea3n l\u00fd Ollama.\n\n1. Test th\u1eed c\u1ea5u h\u00ecnh M\u00e1y ch\u1ee7 GPU NVIDIA V100\nNVIDIA V100 hi\u1ec7n l\u00e0 l\u1ef1a ch\u1ecdn t\u1ed1i \u01b0u v\u1ec1 chi ph \u00edcho vi\u1ec7c train c\u00e1c m\u00f4 h\u00ecnh ng\u00f4n ng\u1eef l\u1edbn (LLM). D\u00f9 kh\u00f4ng ph\u1ea3i l\u00e0 d\u00f2ng chip m\u1edbi nh\u1ea5t, V100 v\u1eabn duy tr\u00ec s\u1ee9c h\u00fat nh\u1edd hi\u1ec7u su\u1ea5t \u1ed5n \u0111\u1ecbnh, \u0111\u1eb7c bi\u1ec7t ph\u00f9 h\u1ee3p \u0111\u1ec3 tri\u1ec3n khai c\u00e1c ...","contents":"B\u00e0i vi\u1ebft n\u00e0y s\u1ebd ph\u00e2n t\u00edch chi ti\u1ebft hi\u1ec7u n\u0103ng c\u1ee7a 7 m\u00f4 h\u00ecnh ph\u1ed5 bi\u1ebfn tr\u00ean c\u1ea5u h\u00ecnh [NVIDIA V100 GPU Server](https:\/\/www.nvidia.com\/en-gb\/data-center\/tesla-v100\/) th\u00f4ng qua tr\u00ecnh qu\u1ea3n l\u00fd Ollama.\n\n![](https:\/\/images.viblo.asia\/b083996a-a253-4472-8c23-6058ddfa31e5.png)\n\n## 1. Test th\u1eed c\u1ea5u h\u00ecnh M\u00e1y ch\u1ee7 GPU NVIDIA V100\nNVIDIA V100 hi\u1ec7n l\u00e0 l\u1ef1a ch\u1ecdn t\u1ed1i \u01b0u v\u1ec1 chi ph \u00edcho vi\u1ec7c train c\u00e1c m\u00f4 h\u00ecnh ng\u00f4n ng\u1eef l\u1edbn (LLM). D\u00f9 kh\u00f4ng ph\u1ea3i l\u00e0 d\u00f2ng chip m\u1edbi nh\u1ea5t, V100 v\u1eabn duy tr\u00ec s\u1ee9c h\u00fat nh\u1edd hi\u1ec7u su\u1ea5t \u1ed5n \u0111\u1ecbnh, \u0111\u1eb7c bi\u1ec7t ph\u00f9 h\u1ee3p \u0111\u1ec3 tri\u1ec3n khai c\u00e1c m\u00f4 h\u00ecnh ph\u1ed5 bi\u1ebfn nh\u01b0 **Llama 2, Mistral hay DeepSeek R1** m\u00e0 kh\u00f4ng \u0111\u00f2i h\u1ecfi ng\u00e2n s\u00e1ch \u0111\u1ea7u t\u01b0 ph\u1ea7n c\u1ee9ng qu\u00e1 l\u1edbn.\n\n![](https:\/\/images.viblo.asia\/d47a476e-3c2f-4cf4-bdf9-585d052afa54.png)\n\n### M\u00f4i tr\u01b0\u1eddng th\u1eed nghi\u1ec7m v\u00e0 \u0110o l\u01b0\u1eddng hi\u1ec7u n\u0103ng\n\u0110\u1ec3 \u0111\u1ea3m b\u1ea3o t\u00ednh kh\u00e1ch quan, h\u1ec7 th\u1ed1ng \u0111\u01b0\u1ee3c thi\u1ebft l\u1eadp tr\u00ean n\u1ec1n t\u1ea3ng Ollama inference engine. \u0110\u00e2y l\u00e0 c\u00f4ng c\u1ee5 t\u1ed1i \u01b0u h\u00f3a t\u00e0i nguy\u00ean GPU h\u00e0ng \u0111\u1ea7u hi\u1ec7n nay, gi\u00fap tr\u00edch xu\u1ea5t c\u00e1c d\u1eef li\u1ec7u benchmark chu\u1ea9n x\u00e1c v\u1ec1:\n\n* **T\u1ed1c \u0111\u1ed9 x\u1eed l\u00fd:** S\u1ed1 l\u01b0\u1ee3ng tokens tr\u00ean gi\u00e2y (tokens\/s).\n* **M\u1ee9c \u0111\u1ed9 ti\u00eau th\u1ee5:** T\u1ef7 l\u1ec7 chi\u1ebfm d\u1ee5ng CPU, RAM v\u00e0 hi\u1ec7u su\u1ea5t s\u1eed d\u1ee5ng GPU (GPU Utilization).\n\n![](https:\/\/images.viblo.asia\/cc6d9311-24ee-46a1-ba54-88b36ab9145d.png)\n\n\nS\u1ef1 k\u1ebft h\u1ee3p gi\u1eefa s\u1ee9c m\u1ea1nh ph\u1ea7n c\u1ee9ng c\u1ee7a V100 v\u00e0 kh\u1ea3 n\u0103ng t\u1ed1i \u01b0u c\u1ee7a Ollama t\u1ea1o ra m\u1ed9t m\u00f4i tr\u01b0\u1eddng ti\u00eau chu\u1ea9n \u0111\u1ec3 \u0111\u00e1nh gi\u00e1 n\u0103ng l\u1ef1c x\u1eed l\u00fd c\u00e1c t\u00e1c v\u1ee5 chatbot, tr\u1ee3 l\u00fd \u1ea3o v\u00e0 NLP th\u1eddi gian th\u1ef1c.\n\n*D\u01b0\u1edbi \u0111\u00e2y l\u00e0 k\u1ebft qu\u1ea3 th\u1eed nghi\u1ec7m chi ti\u1ebft tr\u00ean c\u00e1c d\u00f2ng m\u00f4 h\u00ecnh ti\u00eau bi\u1ec3u:*\n\n## 2. DeepSeek R1 tr\u00ean V100\n\n![](https:\/\/images.viblo.asia\/70a73967-be00-4287-b09c-028c2621effe.png)\n* **DeepSeek R1 7B:** \u0110\u00e2y l\u00e0 phi\u00ean b\u1ea3n nh\u1ecf nh\u1ea5t, ch\u1ec9 chi\u1ebfm 4.7 GB dung l\u01b0\u1ee3ng\n    * M\u00f4 h\u00ecnh n\u00e0y ch\u1ee7 y\u1ebfu khai th\u00e1c s\u1ee9c m\u1ea1nh t\u1eeb GPU v\u1edbi m\u1ee9c s\u1eed d\u1ee5ng CPU v\u00e0 b\u1ed9 nh\u1edb r\u1ea5t nh\u1eb9, \u0111\u1ea1t t\u1ed1c \u0111\u1ed9 x\u1eed l\u00fd \u1ea5n t\u01b0\u1ee3ng 87.10 tokens\/s\n* **DeepSeek R1 8B:** V\u1edbi k\u00edch th\u01b0\u1edbc 4.9 GB, m\u1ee9c \u0111\u1ed9 s\u1eed d\u1ee5ng GPU t\u0103ng l\u00ean 78\n    * T\u1ed1c \u0111\u1ed9 inference \u0111\u1ea1t 83.03 tokens\/s, gi\u1ea3m nh\u1eb9 so v\u1edbi b\u1ea3n 7B nh\u01b0ng v\u1eabn duy tr\u00ec \u0111\u01b0\u1ee3c hi\u1ec7u su\u1ea5t l\u00e0m vi\u1ec7c hi\u1ec7u qu\u1ea3\n* **DeepSeek R1 14B:** Khi k\u00edch th\u01b0\u1edbc t\u0103ng l\u00ean 9 GB, t\u1ea3i tr\u1ecdng t\u00ednh to\u00e1n c\u0169ng t\u0103ng \u0111\u00e1ng k\u1ec3 khi\u1ebfn m\u1ee9c s\u1eed d\u1ee5ng GPU \u0111\u1ea1t 80%\n    * T\u1ed1c \u0111\u1ed9 inference l\u00fac n\u00e0y gi\u1ea3m xu\u1ed1ng c\u00f2n 48.63 tokens\/s\n\n## 3. Benchmark d\u00f2ng Llama 2: S\u1ef1 v\u01b0\u1ee3t tr\u1ed9i v\u1ec1 hi\u1ec7u su\u1ea5t\nLlama 2 t\u1eeb Meta v\u1eabn ch\u1ee9ng t\u1ecf l\u00e0 m\u1ed9t \"t\u01b0\u1ee3ng \u0111\u00e0i\" v\u1ec1 kh\u1ea3 n\u0103ng t\u1ed1i \u01b0u h\u00f3a tr\u00ean ph\u1ea7n c\u1ee9ng NVIDIA. \n\n![](https:\/\/images.viblo.asia\/65bfebde-30d4-407c-abd4-48018e6d0280.png)\n\n* **Llama 2 7B:** L\u00e0 m\u1ed9t m\u00f4 h\u00ecnh nh\u1eb9 v\u1edbi m\u1ee9c s\u1eed d\u1ee5ng t\u00e0i nguy\u00ean h\u1ec7 th\u1ed1ng (CPU\/RAM) th\u1ea5p. T\u1ed1c \u0111\u1ed9 \u0111\u1ea1t t\u1edbi 107.49 tokens\/s, cao h\u01a1n h\u1eb3n so v\u1edbi DeepSeek R1 7B, cho th\u1ea5y hi\u1ec7u qu\u1ea3 suy lu\u1eadn c\u1ef1c k\u1ef3 xu\u1ea5t s\u1eafc.\n\n* **Llama 2 13B:** V\u1edbi k\u00edch th\u01b0\u1edbc 7.4 GB, m\u00f4 h\u00ecnh \u0111\u1ea1t t\u1ed1c \u0111\u1ed9 67.51 tokens\/s. M\u1eb7c d\u00f9 th\u1ea5p h\u01a1n b\u1ea3n 7B nh\u01b0ng n\u00f3 v\u1eabn ho\u1ea1t \u0111\u1ed9ng hi\u1ec7u qu\u1ea3 h\u01a1n c\u00e1c m\u00f4 h\u00ecnh DeepSeek c\u00f3 k\u00edch th\u01b0\u1edbc t\u01b0\u01a1ng \u0111\u01b0\u01a1ng.\n\n\n**M\u1ed9t v\u00e0i nh\u1eadn x\u00e9t nhanh:**\n\nV\u1ec1 t\u1ed1c \u0111\u1ed9: B\u1ea3n 7B nhanh h\u01a1n b\u1ea3n 13B kho\u1ea3ng 1.6 l\u1ea7n, khi\u1ebfn n\u00f3 tr\u1edf th\u00e0nh l\u1ef1a ch\u1ecdn l\u00fd t\u01b0\u1edfng cho c\u00e1c \u1ee9ng d\u1ee5ng c\u1ea7n ph\u1ea3n h\u1ed3i th\u1eddi gian th\u1ef1c.\n\nV\u1ec1 hi\u1ec7u qu\u1ea3: C\u1ea3 hai m\u00f4 h\u00ecnh \u0111\u1ec1u cho th\u1ea5y s\u1ef1 t\u1ed1i \u01b0u h\u00f3a t\u1ed1t h\u01a1n so v\u1edbi \u0111\u1ed1i th\u1ee7 DeepSeek \u1edf c\u00e1c m\u1ee9c tham s\u1ed1 t\u01b0\u01a1ng \u0111\u01b0\u01a1ng trong b\u00e0i test.\n\n## 4. Th\u1eed nghi\u1ec7m v\u1edbi Qwen 2.5 v\u00e0 Gemma 2\n\u0110\u1ed1i v\u1edbi c\u00e1c m\u00f4 h\u00ecnh c\u00f3 c\u1ea5u tr\u00fac ph\u1ee9c t\u1ea1p h\u01a1n ho\u1eb7c s\u1ed1 l\u01b0\u1ee3ng tham s\u1ed1 l\u1edbn h\u01a1n, gi\u1edbi h\u1ea1n c\u1ee7a V100 b\u1eaft \u0111\u1ea7u l\u1ed9 di\u1ec7n.\n\n![](https:\/\/images.viblo.asia\/2b3e4cd0-2718-4241-85b4-53a935232ed2.png)\n\n* **Qwen 2.5 14B:** M\u00f4 h\u00ecnh n\u00e0y c\u00f3 hi\u1ec7u n\u0103ng t\u01b0\u01a1ng \u0111\u1ed3ng v\u1edbi DeepSeek R1 c\u00f9ng k\u00edch c\u1ee1, \u0111\u1ea1t t\u1ed1c \u0111\u1ed9 49.38 tokens\/s v\u1edbi 80% GPU utilization.\n\n* **Gemma 2 27B:** \u0110\u00e2y l\u00e0 \"th\u1eed th\u00e1ch\" l\u1edbn nh\u1ea5t trong b\u00e0i ki\u1ec3m tra. T\u1ed1c \u0111\u1ed9 inference s\u1ee5t gi\u1ea3m nghi\u00eam tr\u1ecdng ch\u1ec9 c\u00f2n 8.37 tokens\/s. \u0110\u00e1ng ch\u00fa \u00fd, m\u1ee9c s\u1eed d\u1ee5ng GPU ch\u1ec9 \u0111\u1ea1t 13% - 24%, trong khi CPU l\u1ea1i b\u1ecb \u0111\u1ea9y l\u00ean r\u1ea5t cao, cho th\u1ea5y GPU V100 ch\u01b0a \u0111\u01b0\u1ee3c khai th\u00e1c hi\u1ec7u qu\u1ea3 cho m\u00f4 h\u00ecnh l\u1edbn n\u00e0y.\n\n**Ph\u00e2n t\u00edch b\u1ed5 sung:**\nS\u1ef1 ch\u00eanh l\u1ec7ch v\u1ec1 hi\u1ec7u qu\u1ea3: Trong khi Qwen 2.5 14B cho th\u1ea5y kh\u1ea3 n\u0103ng t\u01b0\u01a1ng th\u00edch t\u1ed1t v\u1edbi ph\u1ea7n c\u1ee9ng (GPU utilization \u0111\u1ea1t 80%), th\u00ec Gemma 2 27B l\u1ea1i g\u1eb7p v\u1ea5n \u0111\u1ec1 nghi\u00eam tr\u1ecdng v\u1ec1 vi\u1ec7c ph\u00e2n b\u1ed5 t\u00e0i nguy\u00ean.\n\nV\u1ea5n \u0111\u1ec1 c\u1ee7a Gemma 2 27B: V\u1edbi m\u1ee9c s\u1eed d\u1ee5ng GPU th\u1ea5p nh\u01b0ng CPU l\u1ea1i r\u1ea5t cao, c\u00f3 th\u1ec3 th\u1ea5y m\u00f4 h\u00ecnh n\u00e0y \u0111ang b\u1ecb gi\u1edbi h\u1ea1n b\u1edfi b\u0103ng th\u00f4ng b\u1ed9 nh\u1edb ho\u1eb7c thi\u1ebfu c\u00e1c k\u1ef9 thu\u1eadt t\u1ed1i \u01b0u h\u00f3a c\u1ee5 th\u1ec3 cho d\u00f2ng GPU V100 khi ch\u1ea1y \u1edf k\u00edch th\u01b0\u1edbc tham s\u1ed1 l\u1edbn.\n\n## \u0110\u00e1nh gi\u00e1: V100 v\u1eabn r\u1ea5t \"ngon\" trong t\u1ea7m gi\u00e1\nNVIDIA V100 l\u00e0 l\u1ef1a ch\u1ecdn kinh t\u1ebf n\u1ebfu b\u1ea1n c\u1ea7n gi\u1ea3i ph\u00e1p [thu\u00ea m\u00e1y ch\u1ee7 GPU train AI](https:\/\/vinahost.vn\/server\/thue-server-gpu\/) kh\u00f4ng qu\u00e1 \u0111\u1eaft \u0111\u1ecf nh\u01b0ng v\u1eabn \u0111\u1ea3m b\u1ea3o hi\u1ec7u su\u1ea5t cho c\u00e1c \u1ee9ng d\u1ee5ng th\u1ef1c t\u1ebf.\n\n**K\u1ebft qu\u1ea3 benchmark th\u1ef1c t\u1ebf:**\n* **DeepSeek R1 (7B - 8B):** Ch\u1ea1y c\u1ef1c m\u01b0\u1ee3t. B\u1ea3n 7B \u0111\u1ea1t 87.10 tokens\/s. B\u1ea3n 8B chi\u1ebfm 78% GPU, t\u1ed1c \u0111\u1ed9 kho\u1ea3ng 83 tokens\/s\n* **Llama 2 (7B - 13B):** \u0110\u00e2y l\u00e0 \"nh\u00e0 v\u00f4 \u0111\u1ecbch\" v\u1ec1 \u0111\u1ed9 \u1ed5n \u0111\u1ecbnh. B\u1ea3n 7B v\u1ecdt l\u00ean 107.49 tokens\/s. B\u1ea3n 13B v\u1eabn gi\u1eef m\u1ee9c 67.51 tokens\/s, nhanh h\u01a1n h\u1eb3n c\u00e1c \u0111\u1ed1i th\u1ee7 c\u00f9ng t\u1ea7m \n* **Qwen 2.5 & DeepSeek R1 (14B):** Khi t\u0103ng k\u00edch th\u01b0\u1edbc l\u00ean 14B, t\u1ed1c \u0111\u1ed9 gi\u1ea3m c\u00f2n kho\u1ea3ng 48-49 tokens\/s. GPU l\u00fac n\u00e0y \u0111\u00e3 load \u0111\u1ebfn 80%.\n \n**\u0110i\u1ec3m y\u1ebfu c\u1ea7n l\u01b0u \u00fd:** Gemma 2 27B\n\u0110\u1eebng c\u1ed1 ch\u1ea1y Gemma 2 27B tr\u00ean V100 n\u1ebfu b\u1ea1n c\u1ea7n t\u1ed1c \u0111\u1ed9. Tr\u1ea3i nghi\u1ec7m th\u1ef1c t\u1ebf r\u1ea5t t\u1ec7 khi ch\u1ec9 \u0111\u1ea1t 8.37 tokens\/s. GPU ch\u1ec9 s\u1eed d\u1ee5ng kho\u1ea3ng 13-24% trong khi CPU b\u1ecb \u0111\u1ea9y l\u00ean qu\u00e1 cao, cho th\u1ea5y s\u1ef1 ngh\u1ebdn c\u1ed5 chai r\u00f5 r\u1ec7t.\n \n## L\u1eddi khuy\u00ean cho b\u1ea1n\n\nN\u00ean d\u00f9ng V100 khi: Tri\u1ec3n khai Chatbot, tr\u1ee3 l\u00fd \u1ea3o ho\u1eb7c c\u00e1c \u1ee9ng d\u1ee5ng NLP th\u1eddi gian th\u1ef1c v\u1edbi c\u00e1c model t\u1eeb 7B \u0111\u1ebfn 24B. N\u00f3 c\u1ef1c k\u1ef3 t\u1ed1i \u01b0u cho Llama 2 v\u00e0 DeepSeek R1 b\u1ea3n nh\u1ecf.\n\nN\u00ean n\u00e2ng c\u1ea5p (RTX 4090 ho\u1eb7c A100) khi: B\u1ea1n b\u1eaft bu\u1ed9c ph\u1ea3i ch\u1ea1y c\u00e1c m\u00f4 h\u00ecnh l\u1edbn h\u01a1n 27B \u0111\u1ec3 \u0111\u1ea3m b\u1ea3o t\u1ed1c \u0111\u1ed9 ph\u1ea3n h\u1ed3i kh\u00f4ng b\u1ecb tr\u1ec5.","published_at":"2026-04-14T10:13:33.000000Z","scheduled_publish_at":null,"is_published":true,"is_shared":false,"updated_at":"2026-04-14T17:28:02.000000Z","edited_at":"2026-04-14T10:11:25.000000Z","translation_source":null,"trend_at":null,"promoted_at":null,"reading_time":7,"points":0,"views_count":14,"clips_count":0,"comments_count":0,"rated_value":null,"promoted":false,"trending":false,"is_draft":false,"is_public":true,"locale_code":"vi","is_video":false,"thumbnail_url":"https:\/\/images.viblo.asia\/313ccb29-1662-4907-9888-14c6a5e29a1b.png","user":{"data":{"id":166613,"url":"https:\/\/viblo.asia\/u\/duytanvinahost","avatar":"cdc3859f-b46a-4576-9cdb-c8e800589096.png","name":"Duy Tan","username":"duytanvinahost","followers_count":1,"reputation":7,"posts_count":4,"banned_at":null,"level_partner":null,"following":false}},"tags":{"data":[{"slug":"gpu","name":"GPU"},{"slug":"nvidia-gpu","name":"Nvidia GPU"},{"slug":"llms","name":"LLMs"}]},"commentators":{"data":[]}},{"id":92781,"title":"Mistral Forge: N\u1ec1n t\u1ea3ng enterprise cho ph\u00e9p x\u00e2y model AI t\u1eeb d\u1eef li\u1ec7u \u0111\u1ed9c quy\u1ec1n","slug":"AY4qQg1K4Pw","url":"https:\/\/viblo.asia\/p\/mistral-forge-nen-tang-enterprise-cho-phep-xay-model-ai-tu-du-lieu-doc-quyen-AY4qQg1K4Pw","user_id":183905,"moderation":null,"transliterated":"mistral-forge-nen-tang-enterprise-cho-phep-xay-model-ai-tu-du-lieu-doc-quyen","contents_short":"\u0110\u01b0\u1ee3c c\u00f4ng b\u1ed1 t\u1ea1i Nvidia GTC ng\u00e0y 17\/3\/2026, Forge kh\u00f4ng ph\u1ea3i m\u1ed9t model release m\u00e0 l\u00e0 chi\u1ebfn l\u01b0\u1ee3c c\u1ee7a Mistral AI nh\u1eafm v\u00e0o h\u1ea1 t\u1ea7ng AI doanh nghi\u1ec7p.\n\nT\u00f3m t\u1eaft c\u00e1c \u0111i\u1ec3m ch\u00ednh\n\n* Mistral Forge h\u1ed7 tr\u1ee3 to\u00e0n b\u1ed9 v\u00f2ng \u0111\u1eddi model: pre-training t\u1eeb \u0111\u1ea7u, supervised fine-tuning v\u00e0 reinforcement learning, thay v\u00ec ch\u1ec9 fine-tune tr\u00ean n\u1ec1n model c\u00f4ng khai\n* Chi ph\u00ed tri\u1ec3n khai th\u1ef1c t\u1ebf n\u0103m \u0111\u1ea7u dao \u0111\u1ed9ng t\u1eeb 3 \u0111\u1ebfn 7 tri\u1ec7u...","contents":"\u0110\u01b0\u1ee3c c\u00f4ng b\u1ed1 t\u1ea1i Nvidia GTC ng\u00e0y 17\/3\/2026, Forge kh\u00f4ng ph\u1ea3i m\u1ed9t model release m\u00e0 l\u00e0 chi\u1ebfn l\u01b0\u1ee3c c\u1ee7a Mistral AI nh\u1eafm v\u00e0o h\u1ea1 t\u1ea7ng AI doanh nghi\u1ec7p.\n\n## T\u00f3m t\u1eaft c\u00e1c \u0111i\u1ec3m ch\u00ednh\n\n* Mistral Forge h\u1ed7 tr\u1ee3 to\u00e0n b\u1ed9 v\u00f2ng \u0111\u1eddi model: pre-training t\u1eeb \u0111\u1ea7u, supervised fine-tuning v\u00e0 reinforcement learning, thay v\u00ec ch\u1ec9 fine-tune tr\u00ean n\u1ec1n model c\u00f4ng khai\n* Chi ph\u00ed tri\u1ec3n khai th\u1ef1c t\u1ebf n\u0103m \u0111\u1ea7u dao \u0111\u1ed9ng t\u1eeb 3 \u0111\u1ebfn 7 tri\u1ec7u USD, kh\u00f4ng ph\u1ea3i gi\u1ea3i ph\u00e1p cho \u0111a s\u1ed1 doanh nghi\u1ec7p\n* Early adopter bao g\u1ed3m ASML, Ericsson, European Space Agency v\u00e0 DSO National Laboratories Singapore, t\u1ea5t c\u1ea3 \u0111\u1ec1u l\u00e0 t\u1ed5 ch\u1ee9c ho\u1ea1t \u0111\u1ed9ng trong m\u00f4i tr\u01b0\u1eddng mission-critical\n* Model RL-trained x\u1eed l\u00fd customer escalation c\u1ee7a early adopter \u0111\u1ea1t task completion rate tr\u00ean 85%\n* Forge h\u1ed7 tr\u1ee3 on-premises deployment ho\u00e0n to\u00e0n, kh\u00f4ng c\u00f3 d\u1eef li\u1ec7u n\u00e0o r\u1eddi kh\u1ecfi m\u00f4i tr\u01b0\u1eddng c\u1ee7a doanh nghi\u1ec7p\n\n## Mistral Forge l\u00e0 g\u00ec v\u00e0 n\u00f3 kh\u00e1c g\u00ec so v\u1edbi API th\u00f4ng th\u01b0\u1eddng?\n\nMistral Forge l\u00e0 n\u1ec1n t\u1ea3ng enterprise cho ph\u00e9p x\u00e2y d\u1ef1ng model AI t\u1eeb d\u1eef li\u1ec7u \u0111\u1ed9c quy\u1ec1n c\u1ee7a t\u1ed5 ch\u1ee9c. Kh\u00e1c v\u1edbi API-based service n\u01a1i b\u1ea1n g\u1eedi prompt \u0111\u1ebfn model c\u1ee7a ng\u01b0\u1eddi kh\u00e1c, Forge trao quy\u1ec1n ki\u1ec3m so\u00e1t to\u00e0n b\u1ed9 training pipeline. S\u1ef1 kh\u00e1c bi\u1ec7t c\u1ed1t l\u00f5i n\u1eb1m \u1edf ch\u1ed7 d\u1eef li\u1ec7u c\u1ee7a b\u1ea1n tr\u1edf th\u00e0nh g\u00ec trong model: v\u1edbi OpenAI hay Anthropic API, d\u1eef li\u1ec7u c\u1ee7a b\u1ea1n kh\u00f4ng bao gi\u1edd tr\u1edf th\u00e0nh m\u1ed9t ph\u1ea7n ki\u1ebfn th\u1ee9c n\u1ec1n t\u1ea3ng c\u1ee7a model, c\u00f2n v\u1edbi Mistral Forge, ki\u1ebfn th\u1ee9c c\u1ee7a doanh nghi\u1ec7p \u0111\u01b0\u1ee3c nh\u00fang \u1edf m\u1ecdi t\u1ea7ng t\u1eeb pre-training \u0111\u1ebfn RL.\n\nV\u1ea5n \u0111\u1ec1 Infinity News th\u1ea5y l\u1eb7p \u0111i l\u1eb7p l\u1ea1i trong th\u1ef1c t\u1ebf: model generic \u0111\u01b0\u1ee3c train tr\u00ean d\u1eef li\u1ec7u web c\u00f4ng khai kh\u00f4ng hi\u1ec3u institutional knowledge c\u1ee7a doanh nghi\u1ec7p \u2014 ch\u00fang hallucinate thu\u1eadt ng\u1eef chuy\u00ean ng\u00e0nh, kh\u00f4ng bi\u1ebft ti\u00eau chu\u1ea9n k\u1ef9 thu\u1eadt, ch\u00ednh s\u00e1ch tu\u00e2n th\u1ee7 hay quy tr\u00ecnh v\u1eadn h\u00e0nh n\u1ed9i b\u1ed9 c\u1ee7a b\u1ea1n. Forge gi\u1ea3i quy\u1ebft v\u1ea5n \u0111\u1ec1 n\u00e0y b\u1eb1ng c\u00e1ch cho ph\u00e9p x\u00e2y model internalize ki\u1ebfn th\u1ee9c c\u1ee7a t\u1ed5 ch\u1ee9c t\u1eeb n\u1ec1n t\u1ea3ng.\n\n## Mistral Forge ho\u1ea1t \u0111\u1ed9ng nh\u01b0 th\u1ebf n\u00e0o t\u1eeb \u0111\u1ea7u \u0111\u1ebfn cu\u1ed1i?\n\nMistral Forge v\u1eadn h\u00e0nh theo m\u1ed9t workflow ho\u00e0n ch\u1ec9nh t\u1eeb data ingestion \u0111\u1ebfn deployment, g\u1ed3m n\u0103m giai \u0111o\u1ea1n li\u00ean ti\u1ebfp.\n\n![Workflow t\u1ed5ng quan c\u1ee7a Mistral Forge](https:\/\/infinitynews.net\/wp-content\/uploads\/2026\/04\/Anh-man-hinh-2026-04-14-luc-11.21.37.jpg)\n\n### B\u01b0\u1edbc \u0111\u1ea7u ti\u00ean l\u00e0 ch\u1ecdn ki\u1ebfn tr\u00fac model nh\u01b0 th\u1ebf n\u00e0o?\n\nB\u01b0\u1edbc \u0111\u1ea7u ti\u00ean trong Forge l\u00e0 ch\u1ecdn base architecture t\u1eeb c\u00e1c open-weight model c\u1ee7a Mistral: Mistral Large 3 cho complex reasoning, Mistral Small 4 cho faster inference v\u00e0 chi ph\u00ed th\u1ea5p h\u01a1n, ho\u1eb7c custom MoE (Mixture-of-Experts) c\u00e2n b\u1eb1ng gi\u1eefa hi\u1ec7u su\u1ea5t v\u00e0 hi\u1ec7u qu\u1ea3. S\u1ef1 l\u1ef1a ch\u1ecdn gi\u1eefa dense v\u00e0 MoE c\u00f3 t\u00e1c \u0111\u1ed9ng tr\u1ef1c ti\u1ebfp \u0111\u1ebfn chi ph\u00ed v\u1eadn h\u00e0nh \u2014 dense model cho n\u0103ng l\u1ef1c t\u1ed5ng qu\u00e1t m\u1ea1nh, trong khi MoE model c\u00f3 th\u1ec3 \u0111\u1ea1t k\u1ebft qu\u1ea3 t\u01b0\u01a1ng \u0111\u01b0\u01a1ng trong khi c\u1eaft gi\u1ea3m 40 \u0111\u1ebfn 60% chi ph\u00ed h\u1ea1 t\u1ea7ng.\n\n### Forge t\u00edch h\u1ee3p d\u1eef li\u1ec7u n\u1ed9i b\u1ed9 nh\u01b0 th\u1ebf n\u00e0o?\n\nGiai \u0111o\u1ea1n data integration l\u00e0 n\u01a1i d\u1eef li\u1ec7u \u0111\u1ed9c quy\u1ec1n c\u1ee7a doanh nghi\u1ec7p \u0111\u01b0\u1ee3c \u0111\u01b0a v\u00e0o. Forge h\u1ed7 tr\u1ee3 unstructured text (t\u00e0i li\u1ec7u, b\u00e1o c\u00e1o, email), codebase v\u1edbi c\u1ea5u tr\u00fac repository \u0111\u01b0\u1ee3c gi\u1eef nguy\u00ean, structured data (database, spreadsheet) v\u00e0 multimodal input (text k\u1ebft h\u1ee3p image khi ph\u00f9 h\u1ee3p). V\u1edbi c\u00e1c ng\u00e0nh regulated n\u01a1i d\u1eef li\u1ec7u th\u1ef1c kh\u00f4ng th\u1ec3 lu\u00f4n lu\u00f4n s\u1eed d\u1ee5ng, Forge bao g\u1ed3m synthetic data generation: b\u1ea1n c\u00f3 th\u1ec3 t\u1ea1o training example tu\u00e2n th\u1ee7 ch\u00ednh s\u00e1ch, edge-case scenario v\u00e0 long-tail situation kh\u00f4ng xu\u1ea5t hi\u1ec7n th\u01b0\u1eddng xuy\u00ean trong d\u1eef li\u1ec7u th\u1ef1c nh\u01b0ng quan tr\u1ecdng trong production.\n\n### Pre-training t\u1eeb \u0111\u1ea7u t\u1ed1n k\u00e9m \u0111\u1ebfn m\u1ee9c n\u00e0o?\n\nPre-training l\u00e0 giai \u0111o\u1ea1n \u0111\u1eaft nh\u1ea5t, n\u01a1i institutional knowledge \u0111\u01b0\u1ee3c nh\u00fang v\u00e0o neural weights. \u0110\u00e2y c\u0169ng l\u00e0 l\u00fd do \u0111a s\u1ed1 t\u1ed5 ch\u1ee9c b\u1ecf qua b\u01b0\u1edbc n\u00e0y. Pre-training tr\u00ean large internal dataset c\u00f3 th\u1ec3 m\u1ea5t nhi\u1ec1u tu\u1ea7n tr\u00ean enterprise GPU cluster \u2014 ASML v\u00e0 Ericsson ph\u00e2n b\u1ed5 timeline nhi\u1ec1u th\u00e1ng cho initial training run, v\u1edbi chi ph\u00ed l\u00ean \u0111\u1ebfn h\u00e0ng tri\u1ec7u USD t\u00f9y thu\u1ed9c v\u00e0o kh\u1ed1i l\u01b0\u1ee3ng d\u1eef li\u1ec7u v\u00e0 k\u00edch th\u01b0\u1edbc model.\n\n### Supervised fine-tuning v\u00e0 reinforcement learning \u0111\u00f3ng vai tr\u00f2 g\u00ec?\n\nSau pre-training, supervised fine-tuning (SFT) tinh ch\u1ec9nh model cho t\u00e1c v\u1ee5 c\u1ee5 th\u1ec3 th\u00f4ng qua instruction-response pair chuy\u00ean ng\u00e0nh, v\u00ed d\u1ee5 nh\u01b0 review engineering change request \u0111\u1ec3 ph\u00e1t hi\u1ec7n vi ph\u1ea1m compliance, ho\u1eb7c ph\u00e2n t\u00edch c\u00f4ng c\u1ee5 t\u00e0i ch\u00ednh theo risk taxonomy n\u1ed9i b\u1ed9. Reinforcement learning (RL) d\u00e0nh cho agentic workload \u2014 t\u1ee9c l\u00e0 nh\u1eefng model c\u1ea7n d\u00f9ng tool, ra quy\u1ebft \u0111\u1ecbnh v\u00e0 ho\u00e0n th\u00e0nh multi-step task. RL t\u1ed1i \u01b0u cho task completion th\u1ef1c s\u1ef1, kh\u00f4ng ch\u1ec9 t\u1ea1o ra v\u0103n b\u1ea3n h\u1ee3p l\u00fd. Theo b\u00e1o c\u00e1o t\u1eeb early adopter, model \u0111\u01b0\u1ee3c RL-trained x\u1eed l\u00fd customer escalation \u0111\u1ea1t task completion rate tr\u00ean 85%.\n\n### Evaluation v\u00e0 deployment \u0111\u01b0\u1ee3c qu\u1ea3n l\u00fd nh\u01b0 th\u1ebf n\u00e0o?\n\nForge bao g\u1ed3m evaluation framework g\u1eafn v\u1edbi enterprise KPI, kh\u00f4ng ch\u1ec9 l\u00e0 generic benchmark \u2014 b\u1ea1n \u0111\u1ecbnh ngh\u0129a custom metric nh\u01b0 compliance accuracy, domain vocabulary coverage v\u00e0 latency threshold. Xuy\u00ean su\u1ed1t to\u00e0n b\u1ed9 qu\u00e1 tr\u00ecnh, Forge theo d\u00f5i m\u1ecdi th\u1ee9: model, dataset, training run, config. Version control l\u00e0 first-class asset, v\u00e0 khi c\u01a1 quan qu\u1ea3n l\u00fd h\u1ecfi \"model \u0111\u01b0a ra quy\u1ebft \u0111\u1ecbnh n\u00e0y nh\u01b0 th\u1ebf n\u00e0o,\" b\u1ea1n c\u00f3 \u0111\u1ea7y \u0111\u1ee7 lineage \u0111\u1ec3 tr\u1ea3 l\u1eddi.\n\n## Mistral Forge so v\u1edbi API truy\u1ec1n th\u1ed1ng v\u00e0 RAG: n\u00ean ch\u1ecdn c\u00e1i n\u00e0o?\n\n| Ti\u00eau ch\u00ed | Mistral Forge | OpenAI\/Anthropic API | RAG + API |\n|---|---|---|---|\n| \u0110\u1ed9 s\u00e2u training | Pre-training \u0111\u1ea7y \u0111\u1ee7 tr\u00ean d\u1eef li\u1ec7u c\u1ee7a b\u1ea1n | Fine-tuning tr\u00ean n\u1ec1n model c\u00f4ng khai | Kh\u00f4ng training, ch\u1ec9 retrieval |\n| Ki\u1ebfn th\u1ee9c domain | Nh\u00fang trong model weights | L\u1edbp m\u1ecfng tr\u00ean n\u1ec1n generic | Context b\u00ean ngo\u00e0i l\u00fac inference |\n| B\u1ea3o m\u1eadt d\u1eef li\u1ec7u | On-premises, kh\u00f4ng c\u00f3 truy c\u1eadp b\u00ean ngo\u00e0i | D\u1eef li\u1ec7u g\u1eedi \u0111\u1ebfn server OpenAI\/Anthropic | Document l\u01b0u tr\u1eef b\u00ean ngo\u00e0i |\n| M\u1ee9c \u0111\u1ed9 t\u00f9y bi\u1ebfn | To\u00e0n quy\u1ec1n (ki\u1ebfn tr\u00fac, training, RL) | Gi\u1edbi h\u1ea1n (instruction pair, example) | T\u1ed1i thi\u1ec3u (ch\u1ecdn document) |\n| \u0110\u1ed9 ph\u1ee9c t\u1ea1p setup | R\u1ea5t cao (nhi\u1ec1u th\u00e1ng, c\u1ea7n ML team) | Th\u1ea5p (API key, v\u00e0i ng\u00e0y) | Trung b\u00ecnh (vector DB, v\u00e0i tu\u1ea7n) |\n| Chi ph\u00ed | 2 \u0111\u1ebfn 5 tri\u1ec7u USD tr\u1edf l\u00ean | 10 \u0111\u1ebfn 50 ngh\u00ecn USD\/th\u00e1ng th\u00f4ng th\u01b0\u1eddng | 5 \u0111\u1ebfn 20 ngh\u00ecn USD\/th\u00e1ng th\u00f4ng th\u01b0\u1eddng |\n| Vendor lock-in | Th\u1ea5p (b\u1ea1n s\u1edf h\u1eefu model weights) | Cao (ph\u1ee5 thu\u1ed9c API) | Trung b\u00ecnh (c\u00f3 th\u1ec3 \u0111\u1ed5i LLM) |\n\n## T\u1ea1i sao Mistral Forge ra \u0111\u1eddi v\u00e0 n\u00f3 gi\u1ea3i quy\u1ebft v\u1ea5n \u0111\u1ec1 g\u00ec?\n\nMistral Forge ra \u0111\u1eddi t\u1eeb m\u1ed9t pattern l\u1eb7p l\u1ea1i trong th\u1ef1c t\u1ebf enterprise: c\u00f4ng ty tri\u1ec3n khai AI, demo \u1ea5n t\u01b0\u1ee3ng, sau \u0111\u00f3 g\u1eb7p t\u01b0\u1eddng khi model \u0111\u1ee5ng thu\u1eadt ng\u1eef chuy\u00ean ng\u00e0nh ho\u1eb7c c\u1ea7n ho\u1ea1t \u0111\u1ed9ng trong r\u00e0ng bu\u1ed9c compliance nghi\u00eam ng\u1eb7t. RAG gi\u00fap \u0111\u01b0\u1ee3c. Fine-tuning gi\u00fap \u0111\u01b0\u1ee3c. Nh\u01b0ng c\u1ea3 hai \u0111\u1ec1u kh\u00f4ng gi\u1ea3i quy\u1ebft v\u1ea5n \u0111\u1ec1 n\u1ec1n t\u1ea3ng: model generic kh\u00f4ng \u0111\u01b0\u1ee3c train tr\u00ean ki\u1ebfn th\u1ee9c c\u1ee7a t\u1ed5 ch\u1ee9c b\u1ea1n. Mistral \u0111\u1eb7t c\u01b0\u1ee3c r\u1eb1ng khi AI chuy\u1ec3n t\u1eeb \"demo \u1ea5n t\u01b0\u1ee3ng\" sang \"h\u1ea1 t\u1ea7ng c\u1ed1t l\u00f5i,\" enterprise s\u1ebd c\u1ea7n model hi\u1ec3u domain c\u1ee7a h\u1ecd \u1edf c\u1ea5p n\u1ec1n t\u1ea3ng v\u00ec ba l\u00fd do c\u1ee5 th\u1ec3.\n\n**Data sovereignty** l\u00e0 l\u00fd do \u0111\u1ea7u ti\u00ean: trong ng\u00e0nh regulated nh\u01b0 pharma, qu\u1ed1c ph\u00f2ng v\u00e0 t\u00e0i ch\u00ednh, l\u01b0u d\u1eef li\u1ec7u \u0111\u1ed9c quy\u1ec1n tr\u00ean h\u1ec7 th\u1ed1ng b\u00ean th\u1ee9 ba t\u1ea1o ra c\u01a1n \u00e1c m\u1ed9ng compliance. Training tr\u00ean infrastructure n\u1ed9i b\u1ed9 gi\u1eef d\u1eef li\u1ec7u d\u01b0\u1edbi quy\u1ec1n qu\u1ea3n tr\u1ecb c\u1ee7a b\u1ea1n, \u0111\u1eb7c bi\u1ec7t quan tr\u1ecdng \u1edf ch\u00e2u \u00c2u n\u01a1i GDPR enforcement l\u00e0 th\u1ef1c t\u1ebf.\n\n**Agentic system** l\u00e0 l\u00fd do th\u1ee9 hai: enterprise agent c\u1ea7n l\u00e0m nhi\u1ec1u h\u01a1n l\u00e0 tr\u1ea3 l\u1eddi c\u00e2u h\u1ecfi \u2014 ch\u00fang \u0111i\u1ec1u h\u01b0\u1edbng h\u1ec7 th\u1ed1ng n\u1ed9i b\u1ed9, d\u00f9ng tool \u0111\u00fang c\u00e1ch v\u00e0 ra quy\u1ebft \u0111\u1ecbnh trong r\u00e0ng bu\u1ed9c t\u1ed5 ch\u1ee9c. Model generic g\u1eb7p kh\u00f3 \u1edf \u0111\u00e2y v\u00ec ch\u00fang kh\u00f4ng hi\u1ec3u m\u00f4i tr\u01b0\u1eddng. Vibe 2.0 agent c\u1ee7a Mistral ho\u1ea1t \u0111\u1ed9ng t\u1ed1t h\u01a1n khi underlying model \u0111\u01b0\u1ee3c train tr\u00ean codebase m\u00e0 agent \u0111ang l\u00e0m vi\u1ec7c trong \u0111\u00f3.\n\n**Model ownership** l\u00e0 l\u00fd do th\u1ee9 ba: API dependency t\u1ea1o r\u1ee7i ro kinh doanh th\u1ef1c s\u1ef1. N\u1ebfu OpenAI c\u1eadp nh\u1eadt GPT-5 v\u00e0 ph\u00e1 v\u1ee1 workflow c\u1ee7a b\u1ea1n, b\u1ea1n k\u1eb9t. V\u1edbi Forge, b\u1ea1n s\u1edf h\u1eefu weights, ki\u1ec3m so\u00e1t update v\u00e0 quy\u1ebft \u0111\u1ecbnh khi n\u00e0o deploy phi\u00ean b\u1ea3n m\u1edbi.\n\nTuy nhi\u00ean g\u00f3c nh\u00ecn tr\u00e1i chi\u1ec1u c\u0169ng c\u1ea7n n\u00f3i th\u1eb3ng: \u0111a s\u1ed1 c\u00f4ng ty kh\u00f4ng c\u1ea7n custom model. Customer service automation, document Q&A c\u01a1 b\u1ea3n v\u00e0 meeting summarization ho\u1ea1t \u0111\u1ed9ng t\u1ed1t v\u1edbi model \u0111a n\u0103ng v\u00e0 prompting t\u1ed1t. Forge nh\u1eafm v\u00e0o t\u1ed5 ch\u1ee9c n\u01a1i domain specificity l\u00e0 l\u1ee3i th\u1ebf c\u1ea1nh tranh th\u1ef1c s\u1ef1, kh\u00f4ng ph\u1ea3i nice-to-have.\n\n## Nh\u1eefng t\u00ednh n\u0103ng n\u1ed5i b\u1eadt nh\u1ea5t c\u1ee7a Mistral Forge l\u00e0 g\u00ec?\n\n**Agent-First Design** l\u00e0 \u0111i\u1ec3m kh\u00e1c bi\u1ec7t c\u01a1 b\u1ea3n: Forge \u0111\u01b0\u1ee3c x\u00e2y v\u1edbi autonomous agent l\u00e0 primary user, kh\u00f4ng ph\u1ea3i con ng\u01b0\u1eddi. Vibe agent c\u1ee7a Mistral c\u00f3 th\u1ec3 \u0111\u1ed9c l\u1eadp fine-tune model, t\u1ed1i \u01b0u hyperparameter, l\u1eadp l\u1ecbch training job v\u00e0 t\u1ea1o synthetic data qua l\u1ec7nh ng\u00f4n ng\u1eef t\u1ef1 nhi\u00ean.\n\n**Production-Grade Evaluation** gi\u1ea3i quy\u1ebft v\u1ea5n \u0111\u1ec1 benchmark generic kh\u00f4ng n\u00f3i l\u00ean \u0111\u01b0\u1ee3c g\u00ec v\u1ec1 use case th\u1ef1c t\u1ebf. Forge cho ph\u00e9p \u0111\u1ecbnh ngh\u0129a custom evaluation criteria g\u1eafn v\u1edbi enterprise KPI: regression suite \u0111\u1ec3 ph\u00e1t hi\u1ec7n performance drop, drift detection \u0111\u1ec3 theo d\u00f5i behavioral change theo th\u1eddi gian, v\u00e0 A\/B testing infrastructure \u0111\u1ec3 so s\u00e1nh model version trong production.\n\n**Version Control** theo d\u00f5i model, dataset, training run, config nh\u01b0 first-class asset. V\u1edbi ng\u00e0nh regulated, audit trail n\u00e0y l\u00e0 \u0111i\u1ec1u ki\u1ec7n t\u1ed1i thi\u1ec3u khi c\u01a1 quan qu\u1ea3n l\u00fd h\u1ecfi \"t\u1ea1i sao h\u1ec7 th\u1ed1ng fraud detection g\u1eafn c\u1edd giao d\u1ecbch n\u00e0y.\"\n\n**Flexible Deployment** cho ph\u00e9p ch\u1ea1y model \u0111\u00e3 train tr\u00ean managed infrastructure c\u1ee7a Mistral, tr\u00ean Mistral Compute (dedicated cluster), ho\u00e0n to\u00e0n on-premises v\u1edbi zero data r\u1eddi kh\u1ecfi m\u00f4i tr\u01b0\u1eddng, ho\u1eb7c \u1edf edge v\u1edbi quantized model cho local inference. V\u1edbi defense contractor x\u1eed l\u00fd classified data ho\u1eb7c healthcare organization c\u00f3 HIPAA requirement, on-premises deployment kh\u00f4ng ph\u1ea3i t\u00f9y ch\u1ecdn m\u00e0 l\u00e0 \u0111i\u1ec1u ki\u1ec7n b\u1eaft bu\u1ed9c.\n\n## T\u01b0\u01a1ng lai c\u1ee7a n\u1ec1n t\u1ea3ng nh\u01b0 Mistral Forge s\u1ebd \u0111i v\u1ec1 \u0111\u00e2u?\n\nPlaybook AI enterprise giai \u0111o\u1ea1n \u0111\u1ea7u l\u00e0 mua API access, thu\u00ea prompt engineer v\u00e0 layer th\u00eam RAG. \u0110i\u1ec1u n\u00e0y hi\u1ec7u qu\u1ea3 cho \u0111\u1ebfn khi kh\u00f4ng c\u00f2n hi\u1ec7u qu\u1ea3 n\u1eefa. Khi AI tr\u1edf th\u00e0nh h\u1ea1 t\u1ea7ng thay v\u00ec feature, enterprise s\u1ebd mu\u1ed1n s\u1edf h\u1eefu model c\u1ee7a h\u1ecd theo c\u00e1ch h\u1ecd s\u1edf h\u1eefu database \u2014 kh\u00f4ng ph\u1ea3i t\u1ea5t c\u1ea3, nh\u01b0ng \u0111\u1ee7 \u0111\u1ec3 bi\u1ebfn custom training th\u00e0nh th\u1ecb tr\u01b0\u1eddng kh\u1ea3 thi.\n\nCompliance requirement ng\u00e0y c\u00e0ng si\u1ebft ch\u1eb7t c\u0169ng t\u1ea1o l\u1ef1c \u0111\u1ea9y c\u01a1 c\u1ea5u. EU AI Act, GDPR, quy \u0111\u1ecbnh ng\u00e0nh trong t\u00e0i ch\u00ednh v\u00e0 healthcare l\u00e0m cho vi\u1ec7c l\u01b0u d\u1eef li\u1ec7u kinh doanh \u0111\u1ed9c quy\u1ec1n tr\u00ean h\u1ec7 th\u1ed1ng b\u00ean th\u1ee9 ba ng\u00e0y c\u00e0ng kh\u00f3 bi\u1ec7n minh. Vi\u1ec7c Mistral c\u00f4ng b\u1ed1 Forge t\u1ea1i Nvidia GTC c\u00f3 l\u00fd do r\u00f5 r\u00e0ng: NVIDIA \u0111ang x\u00e2y enterprise AI infrastructure v\u1edbi GPU r\u1ebb h\u01a1n, distributed training tool t\u1ed1t h\u01a1n v\u00e0 inference \u0111\u01b0\u1ee3c t\u1ed1i \u01b0u h\u01a1n \u2014 khi training cost gi\u1ea3m, custom model kh\u1ea3 thi v\u1edbi nhi\u1ec1u use case h\u01a1n.\n\nNh\u01b0ng counterargument c\u0169ng c\u00f3 tr\u1ecdng l\u01b0\u1ee3ng: \u0111a s\u1ed1 enterprise ch\u01b0a c\u1ea7n \u0111\u1ed9 ph\u1ee9c t\u1ea1p n\u00e0y. Th\u1ecb tr\u01b0\u1eddng s\u1ebd ph\u00e2n t\u00e1ch \u2014 ph\u1ea7n l\u1edbn c\u00f4ng ty ti\u1ebfp t\u1ee5c d\u00f9ng API, m\u1ed9t ph\u00e2n kh\u00fac nh\u1ecf h\u01a1n x\u00e2y custom infrastructure. Ph\u00e2n kh\u00fac nh\u1ecf \u0111\u00f3 bao g\u1ed3m m\u1ed9t s\u1ed1 c\u00f4ng ty l\u1edbn nh\u1ea5t v\u00e0 c\u00f3 l\u1ee3i nhu\u1eadn cao nh\u1ea5t th\u1ebf gi\u1edbi. \u0110\u00f3 l\u00e0 c\u01b0\u1ee3c c\u1ee7a Mistral.\n\n## B\u1eaft \u0111\u1ea7u v\u1edbi Mistral Forge c\u1ea7n chu\u1ea9n b\u1ecb nh\u1eefng g\u00ec?\n\n### \u0110i\u1ec1u ki\u1ec7n ti\u00ean quy\u1ebft \u0111\u1ec3 tri\u1ec3n khai Mistral Forge l\u00e0 g\u00ec?\n\nTr\u01b0\u1edbc khi li\u00ean h\u1ec7 enterprise sales team c\u1ee7a Mistral, b\u1ea1n c\u1ea7n c\u00f3 l\u01b0\u1ee3ng text ho\u1eb7c code \u0111\u1ed9c quy\u1ec1n \u0111\u00e1ng k\u1ec3 (enterprise deployment th\u00f4ng th\u01b0\u1eddng x\u1eed l\u00fd terabyte d\u1eef li\u1ec7u chuy\u00ean ng\u00e0nh), data governance framework r\u00f5 r\u00e0ng (ai c\u00f3 th\u1ec3 truy c\u1eadp g\u00ec, retention policy, PII handling), v\u00e0 ti\u00eau ch\u00ed evaluation domain-specific c\u1ee5 th\u1ec3. V\u1ec1 h\u1ea1 t\u1ea7ng c\u1ea7n GPU cluster (khuy\u1ebfn ngh\u1ecb 8 \u0111\u1ebfn 64 H100 cho training) ho\u1eb7c s\u1eb5n s\u00e0ng d\u00f9ng managed infrastructure c\u1ee7a Mistral. V\u1ec1 nh\u00e2n l\u1ef1c c\u1ea7n ML engineer quen distributed training, domain expert c\u00f3 th\u1ec3 \u0111\u00e1nh gi\u00e1 model output, v\u00e0 legal\/compliance review cho data usage.\n\n### Qu\u00e1 tr\u00ecnh setup ban \u0111\u1ea7u di\u1ec5n ra nh\u01b0 th\u1ebf n\u00e0o?\n\nForge kh\u00f4ng ph\u1ea3i self-serve \u2014 b\u1ea1n \u0111i qua enterprise team c\u1ee7a Mistral, th\u1ea3o lu\u1eadn use case, y\u00eau c\u1ea7u d\u1eef li\u1ec7u v\u00e0 deployment constraint. Khuy\u1ebfn ngh\u1ecb l\u00e0 b\u1eaft \u0111\u1ea7u h\u1eb9p: \u0111\u1eebng train tr\u00ean to\u00e0n b\u1ed9 d\u1eef li\u1ec7u ngay l\u1eadp t\u1ee9c, h\u00e3y ch\u1ecdn m\u1ed9t high-value use case nh\u01b0 compliance document analysis ho\u1eb7c code review automation. Data preparation m\u1ea5t nhi\u1ec1u th\u1eddi gian h\u01a1n b\u1ea1n ngh\u0129: l\u00e0m s\u1ea1ch, format, x\u00f3a PII, s\u1eafp x\u1ebfp theo domain \u2014 t\u00ednh 2 \u0111\u1ebfn 3 th\u00e1ng cho b\u01b0\u1edbc n\u00e0y. Tr\u01b0\u1edbc khi train b\u1ea5t k\u1ef3 th\u1ee9 g\u00ec, h\u00e3y test prompt engineering v\u1edbi Mistral Large 3 \u0111\u1ec3 \u0111\u1ea3m b\u1ea3o performance ch\u1ea5p nh\u1eadn \u0111\u01b0\u1ee3c, v\u00ec b\u1ea1n c\u00f3 th\u1ec3 kh\u00f4ng c\u1ea7n custom training.\n\n### N\u00ean b\u1eaft \u0111\u1ea7u training run \u0111\u1ea7u ti\u00ean t\u1eeb \u0111\u00e2u?\n\nB\u1eaft \u0111\u1ea7u v\u1edbi supervised fine-tuning, kh\u00f4ng ph\u1ea3i full pre-training. SFT r\u1ebb h\u01a1n v\u00e0 nhanh h\u01a1n \u2014 ki\u1ec3m tra xem task-specific tuning tr\u00ean base model c\u00f3 \u0111\u1ea1t 80% m\u1ee5c ti\u00eau kh\u00f4ng. N\u1ebfu fine-tuning kh\u00f4ng \u0111\u1ee7, chuy\u1ec3n sang pre-training, nh\u01b0ng hi\u1ec3u r\u1eb1ng b\u1ea1n \u0111ang cam k\u1ebft t\u00e0i nguy\u00ean compute v\u00e0 th\u1eddi gian \u0111\u00e1ng k\u1ec3.\n\n### Nh\u1eefng sai l\u1ea7m ph\u1ed5 bi\u1ebfn nh\u1ea5t khi d\u00f9ng Mistral Forge l\u00e0 g\u00ec?\n\nSai l\u1ea7m \u0111\u1ea7u ti\u00ean l\u00e0 ch\u1ea5t l\u01b0\u1ee3ng d\u1eef li\u1ec7u k\u00e9m: n\u1ebfu t\u00e0i li\u1ec7u n\u1ed9i b\u1ed9 kh\u00f4ng nh\u1ea5t qu\u00e1n, l\u1ed7i th\u1eddi ho\u1eb7c c\u1ea5u tr\u00fac k\u00e9m, model s\u1ebd h\u1ecdc nh\u1eefng pattern \u0111\u00f3 \u2014 custom training kh\u00f4ng k\u1ef3 di\u1ec7u gi\u1ea3i quy\u1ebft \u0111\u01b0\u1ee3c AI problems. Sai l\u1ea7m th\u1ee9 hai l\u00e0 \u00e1p d\u1ee5ng sai use case: n\u1ebfu use case c\u1ee7a b\u1ea1n kh\u00f4ng c\u1ea7n domain-specific knowledge, b\u1ea1n \u0111ang l\u00e3ng ph\u00ed ngu\u1ed3n l\u1ef1c. Sai l\u1ea7m th\u1ee9 ba l\u00e0 \u0111\u00e1nh gi\u00e1 th\u1ea5p y\u00eau c\u1ea7u k\u1ef9 thu\u1eadt: v\u1eadn h\u00e0nh training infrastructure ri\u00eang r\u1ea5t kh\u00f3, tr\u1eeb khi c\u00f3 ML engineering capacity nghi\u00eam t\u00fac, n\u00ean d\u00f9ng managed offering c\u1ee7a Mistral.\n\n## Mistral Forge \u0111\u00e3 \u0111\u01b0\u1ee3c \u1ee9ng d\u1ee5ng nh\u01b0 th\u1ebf n\u00e0o trong th\u1ef1c t\u1ebf?\n\n### T\u00e0i ch\u00ednh: ph\u00e2n t\u00edch compliance ch\u00ednh x\u00e1c 94%\n\nM\u1ed9t ng\u00e2n h\u00e0ng \u0111\u1ea7u t\u01b0 l\u1edbn c\u1ea7n model hi\u1ec3u proprietary risk framework n\u1ed9i b\u1ed9, bao g\u1ed3m h\u1ec7 th\u1ed1ng rating, quy tr\u00ecnh compliance v\u00e0 di\u1ec5n gi\u1ea3i regulatory ri\u00eang c\u1ee7a h\u1ecd \u2014 model generic kh\u00f4ng th\u1ec3 ph\u00e2n bi\u1ec7t c\u00e1c c\u00f4ng c\u1ee5 t\u00e0i ch\u00ednh nghe gi\u1ed1ng nhau nh\u01b0ng c\u00f3 risk profile r\u1ea5t kh\u00e1c nhau theo h\u1ec7 th\u1ed1ng ph\u00e2n lo\u1ea1i n\u1ed9i b\u1ed9 c\u1ee7a ng\u00e2n h\u00e0ng. H\u1ecd pre-trained tr\u00ean h\u00e0ng th\u1eadp k\u1ef7 t\u00e0i li\u1ec7u risk n\u1ed9i b\u1ed9, compliance memo v\u00e0 regulatory filing, gi\u00fap model internalize risk taxonomy c\u1ee7a ng\u00e2n h\u00e0ng. K\u1ebft qu\u1ea3: 94% accuracy tr\u00ean compliance review task, r\u00fat ng\u1eafn t\u1eeb 3 ng\u00e0y human review xu\u1ed1ng c\u00f2n 2 gi\u1edd automated analysis v\u1edbi human verification.\n\n### Semiconductor: truy v\u1ea5n t\u00e0i li\u1ec7u k\u1ef9 thu\u1eadt cho k\u1ef9 s\u01b0 ASML\n\nASML x\u00e2y d\u1ef1ng m\u00e1y m\u00f3c s\u1ea3n xu\u1ea5t chip m\u00e1y t\u00ednh v\u1edbi t\u00e0i li\u1ec7u k\u1ef9 thu\u1eadt tr\u1ea3i d\u00e0i h\u00e0ng th\u1eadp k\u1ef7, nhi\u1ec1u ng\u00f4n ng\u1eef v\u00e0 thu\u1eadt ng\u1eef c\u1ef1c k\u1ef3 chuy\u00ean bi\u1ec7t \u2014 k\u1ef9 s\u01b0 t\u1ed1n h\u00e0ng gi\u1edd t\u00ecm ki\u1ebfm t\u00e0i li\u1ec7u \u0111\u1ec3 hi\u1ec3u t\u1ea1i sao c\u00e1c quy\u1ebft \u0111\u1ecbnh thi\u1ebft k\u1ebf nh\u1ea5t \u0111\u1ecbnh \u0111\u01b0\u1ee3c \u0111\u01b0a ra. H\u1ecd train tr\u00ean proprietary design doc, CAD file, manufacturing log v\u00e0 engineering change request. Gi\u1edd k\u1ef9 s\u01b0 c\u00f3 th\u1ec3 query model b\u1eb1ng ng\u00f4n ng\u1eef t\u1ef1 nhi\u00ean v\u00e0 nh\u1eadn c\u00e2u tr\u1ea3 l\u1eddi c\u00f3 ng\u1eef c\u1ea3nh tr\u00edch d\u1eabn section t\u00e0i li\u1ec7u c\u1ee5 th\u1ec3 \u2014 \u0111\u00e2y kh\u00f4ng ph\u1ea3i ki\u1ebfn th\u1ee9c c\u00f4ng khai m\u00e0 l\u00e0 institutional intelligence t\u00edch l\u0169y qua nhi\u1ec1u th\u1eadp k\u1ef7.\n\n### Ph\u00e1t tri\u1ec3n ph\u1ea7n m\u1ec1m: migrate legacy codebase C++\n\nM\u1ed9t c\u00f4ng ty Fortune 500 c\u1ea7n migrate codebase C++ kh\u1ed5ng l\u1ed3 sang framework hi\u1ec7n \u0111\u1ea1i, v\u1edbi h\u00e0ng th\u1eadp k\u1ef7 custom library, internal abstraction v\u00e0 dependency kh\u00f4ng \u0111\u01b0\u1ee3c document \u2014 model code generic \u0111\u1ec1 xu\u1ea5t thay \u0111\u1ed5i ph\u00e1 v\u1ee1 internal convention ho\u1eb7c vi ph\u1ea1m architectural standard. H\u1ecd train tr\u00ean to\u00e0n b\u1ed9 code history c\u1ee7a c\u00f4ng ty bao g\u1ed3m commit, code review, architectural decision record v\u00e0 style guide. Model gi\u1edd t\u1ea1o refactoring suggestion t\u00f4n tr\u1ecdng internal pattern, t\u01b0\u01a1ng t\u1ef1 c\u00e1ch Mistral Vibe 2.0 ho\u1ea1t \u0111\u1ed9ng t\u1ed1t h\u01a1n khi hi\u1ec3u c\u1ea5u tr\u00fac repository c\u1ee7a b\u1ea1n.\n\n## Chi ph\u00ed tri\u1ec3n khai Mistral Forge l\u00e0 bao nhi\u00eau?\n\nForge kh\u00f4ng c\u00f3 gi\u00e1 ni\u00eam y\u1ebft c\u00f4ng khai. D\u1ef1a tr\u00ean enterprise sales conversation, c\u1ea5u tr\u00fac chi ph\u00ed g\u1ed3m platform license fee t\u1eeb 500 ngh\u00ecn \u0111\u1ebfn 2 tri\u1ec7u USD\/n\u0103m t\u00f9y quy m\u00f4, managed infrastructure t\u00ednh th\u00eam GPU hour (kho\u1ea3ng 2 \u0111\u1ebfn 3 USD per H100-hour cho training, 0,50 \u0111\u1ebfn 1,00 USD per inference hour), v\u00e0 forward-deployed scientist l\u00e0 t\u00f9y ch\u1ecdn th\u00fa v\u1ecb nh\u1ea5t: nh\u00e0 nghi\u00ean c\u1ee9u AI \u0111\u01b0\u1ee3c Mistral c\u1eed \u0111\u1ebfn l\u00e0m vi\u1ec7c c\u00f9ng team n\u1ed9i b\u1ed9 c\u1ee7a b\u1ea1n, h\u1ed7 tr\u1ee3 training recipe, hyperparameter tuning v\u00e0 evaluation design, v\u1edbi chi ph\u00ed t\u1eeb 300 ngh\u00ecn \u0111\u1ebfn 500 ngh\u00ecn USD\/nh\u00e0 khoa h\u1ecdc\/n\u0103m.\n\nM\u1ed9t v\u00ed d\u1ee5 deployment th\u1ef1c t\u1ebf: pre-training tr\u00ean d\u1eef li\u1ec7u n\u1ed9i b\u1ed9 \u0111\u00e1ng k\u1ec3, supervised fine-tuning v\u00e0 RL optimization, t\u1ed5ng chi ph\u00ed n\u0103m \u0111\u1ea7u kho\u1ea3ng 3,7 tri\u1ec7u USD \u2014 platform license 750 ngh\u00ecn USD, compute 2,5 tri\u1ec7u USD, data pipeline support 200 ngh\u00ecn USD, forward-deployed scientist 6 th\u00e1ng 250 ngh\u00ecn USD. Forge kh\u00f4ng d\u00e0nh cho t\u1ea5t c\u1ea3: b\u1ea1n c\u1ea7n use case n\u01a1i domain accuracy x\u1ee9ng \u0111\u00e1ng v\u1edbi h\u00e0ng tri\u1ec7u USD.\n\n## K\u1ebft lu\u1eadn\n\nMistral Forge \u0111\u00e1nh \u0111\u1ed5i ease of use \u0111\u1ec3 l\u1ea5y model ownership ho\u00e0n to\u00e0n v\u00e0 deep domain customization. V\u1edbi \u0111a s\u1ed1 enterprise, c\u00e2u tr\u1ea3 l\u1eddi \u0111\u01a1n gi\u1ea3n h\u01a1n v\u1eabn \u0111\u00fang: ti\u1ebfp t\u1ee5c d\u00f9ng API \u2014 model \u0111a n\u0103ng v\u1edbi prompting t\u1ed1t ho\u1eb7c RAG v\u1eabn ho\u1ea1t \u0111\u1ed9ng hi\u1ec7u qu\u1ea3 cho customer service, document processing v\u00e0 meeting summarization. Nh\u01b0ng v\u1edbi t\u1ed5 ch\u1ee9c n\u01a1i domain specificity l\u00e0 l\u1ee3i th\u1ebf c\u1ea1nh tranh th\u1ef1c s\u1ef1 \u2014 nghi\u00ean c\u1ee9u d\u01b0\u1ee3c ph\u1ea9m ph\u00e2n t\u00edch compound data \u0111\u1ed9c quy\u1ec1n, nh\u00e0 s\u1ea3n xu\u1ea5t semiconductor t\u1ed1i \u01b0u fabrication process, ho\u1eb7c t\u1ed5 ch\u1ee9c t\u00e0i ch\u00ednh v\u1edbi regulatory framework ri\u00eang \u2014 Forge c\u00f3 th\u1ec3 h\u1ee3p l\u00fd. C\u00e2u h\u1ecfi kh\u00f4ng ph\u1ea3i l\u00e0 custom training c\u00f3 t\u1ed1t h\u01a1n v\u1ec1 l\u00fd thuy\u1ebft kh\u00f4ng, m\u00e0 l\u00e0 c\u1ea3i ti\u1ebfn \u0111\u00f3 c\u00f3 x\u1ee9ng \u0111\u00e1ng v\u1edbi h\u00e0ng tri\u1ec7u USD chi ph\u00ed training kh\u00f4ng.\n\nN\u1ebfu \u0111ang \u0111\u00e1nh gi\u00e1 Forge, h\u00e3y \u0111i theo tr\u00ecnh t\u1ef1 n\u00e0y: b\u1eaft \u0111\u1ea7u v\u1edbi prompt engineering d\u00f9ng Mistral Large 3, th\u00eam RAG n\u1ebfu c\u1ea7n, th\u1eed API-based fine-tuning, v\u00e0 ch\u1ec9 c\u00e2n nh\u1eafc Mistral Forge n\u1ebfu c\u00e1c b\u01b0\u1edbc \u0111\u00f3 kh\u00f4ng \u0111\u1ee7.\n\n***\n\n*Ngu\u1ed3n: [Infinity News](https:\/\/infinitynews.net\/) \u2014 t\u1ea1p ch\u00ed tr\u1ef1c tuy\u1ebfn chuy\u00ean v\u1ec1 Khoa h\u1ecdc, C\u00f4ng ngh\u1ec7, \u0110\u1ed5i m\u1edbi v\u00e0 S\u00e1ng t\u1ea1o.*","published_at":"2026-04-14T08:41:35.000000Z","scheduled_publish_at":null,"is_published":true,"is_shared":false,"updated_at":"2026-04-14T17:00:18.000000Z","edited_at":"2026-04-14T08:40:31.000000Z","translation_source":null,"trend_at":null,"promoted_at":null,"reading_time":19,"points":0,"views_count":12,"clips_count":0,"comments_count":0,"rated_value":null,"promoted":false,"trending":false,"is_draft":false,"is_public":true,"locale_code":"vi","is_video":false,"thumbnail_url":"https:\/\/infinitynews.net\/wp-content\/uploads\/2026\/04\/mistral-forge-768x432.png","user":{"data":{"id":183905,"url":"https:\/\/viblo.asia\/u\/infinity","avatar":"4a9c3a65-0b1e-45e5-afc7-31d9cf50d971.png","name":"Infinity","username":"infinity","followers_count":13,"reputation":525,"posts_count":17,"banned_at":null,"level_partner":null,"following":false}},"tags":{"data":[{"slug":"ai-agents","name":"ai agents"}]},"commentators":{"data":[]}},{"id":92761,"title":"Step-by-Step Guide to Understanding Prediction Markets and Economic Signals","slug":"yZJZlvyEVjm","url":"https:\/\/viblo.asia\/p\/step-by-step-guide-to-understanding-prediction-markets-and-economic-signals-yZJZlvyEVjm","user_id":172693,"moderation":null,"transliterated":"step-by-step-guide-to-understanding-prediction-markets-and-economic-signals","contents_short":"Table of Contents\nUnderstanding the Basic Idea Behind Prediction Markets\nWhy Economic Signals Matter in Prediction Markets\nThe Technology Side of Prediction Platforms\nCreating Flexible and Accessible Prediction Environments\nHow Real-Time Data Shapes Collective Expectations\nThe Practical Advantages of Prediction Platform Development\nPeople Also Ask Polymarket\nThe Future of Prediction Markets in ...","contents":"Table of Contents\nUnderstanding the Basic Idea Behind Prediction Markets\nWhy Economic Signals Matter in Prediction Markets\nThe Technology Side of Prediction Platforms\nCreating Flexible and Accessible Prediction Environments\nHow Real-Time Data Shapes Collective Expectations\nThe Practical Advantages of Prediction Platform Development\nPeople Also Ask Polymarket\nThe Future of Prediction Markets in Digital Economies\n\nPolymarket clone script conversations often appear when people begin exploring how prediction markets work in digital economies. The idea is simple: people naturally try to understand and predict the future. During everyday discussions, friends may have different opinions about topics like technology, jobs, or financial trends. Usually these opinions remain scattered, with no clear way to measure them. Prediction markets organize these viewpoints into structured signals that reflect collective expectations. In modern digital economies, these platforms show how human thinking and decentralized technology work together to understand future possibilities.\nUnderstanding the Basic Idea Behind Prediction Markets\nPrediction markets are platforms where participants share expectations about future outcomes. These outcomes might involve economic trends, technology developments, political changes, or even social movements. Instead of relying on one expert opinion, prediction markets gather insights from many participants. When individuals express their expectations within a structured system, the market begins to reflect collective sentiment. Behind many of these platforms is a Polymarket script, which functions as a customizable and feature-rich software solution used to build decentralized prediction environments. It provides the technical structure that allows these platforms to operate while keeping participation transparent and organized.\nWhy Economic Signals Matter in Prediction Markets\nEconomic signals represent patterns that reveal how people interpret future possibilities. In traditional markets, these signals often appear through price movements or trading behavior. Prediction markets follow a similar principle. When participants interact within prediction platforms, their expectations create signals that reflect public sentiment. These signals can help observers understand how communities respond to emerging information or uncertain situations. For economists and researchers, prediction markets offer a unique way to study collective thinking. They show how different perspectives interact within a shared environment.\nThe Technology Side of Prediction Platforms\nPrediction platforms rely on modern digital infrastructure to organize interactions between participants. One of the most important foundations is Decentralized Architecture, which distributes processes across networks rather than concentrating control in one organization. A User-Friendly Interface also plays an important role. Even though blockchain systems can be complex, intuitive interfaces allow people to participate without deep technical knowledge. Automation is handled through Smart Contracts, which execute predefined rules when certain conditions are met. For example, once an event outcome becomes clear, the system processes results automatically according to the contract\u2019s logic.\nCreating Flexible and Accessible Prediction Environments\nPrediction markets often support Customizable Markets, which allow communities to create prediction topics related to different industries or global events. This flexibility helps platforms reflect real-world discussions. Active participation is supported through Liquidity Pools, which help maintain balanced market interactions. Liquidity ensures that predictions remain responsive and dynamic. Many platforms also include Multi-Currency Support, allowing participants from different regions to interact using various digital assets. To maintain safety, Secure Wallet Integration enables users to connect their digital wallets securely while interacting with blockchain networks.\nHow Real-Time Data Shapes Collective Expectations\nOne of the most fascinating aspects of prediction platforms is how quickly expectations can change. With Real-Time Updates, participants can observe how prediction trends evolve as new information becomes available. This dynamic environment helps people understand how collective thinking responds to news, technological developments, or economic shifts. Instead of static predictions, the market continuously reflects updated perspectives. In many ways, it feels similar to trading, where people adjust their decisions based on new information. However, in prediction markets the focus shifts from trading assets to sharing expectations about future events.\nThe Practical Advantages of Prediction Platform Development\nFrom a technological perspective, frameworks built around a Polymarket script simplify the development of decentralized prediction platforms. One important advantage is Cost-Efficient Development, which reduces the complexity involved in building large-scale systems from scratch. Developers can use structured frameworks as a starting point for experimentation. These systems often function as a Customizable Solution, allowing developers to adapt features according to the needs of their communities. With Fast Deployment, new prediction platforms can be launched quickly, encouraging innovation and experimentation.\nFAQ\nWhat is a prediction market?\nA prediction market is a digital platform where people share expectations about future events. These predictions can involve topics like technology trends, economic changes, politics, or global developments.\nWhy are prediction markets studied in digital economies?\nResearchers and developers study prediction markets because they reveal how communities interpret information and form expectations. These systems help observe patterns in collective thinking.\nThe Future of Prediction Markets in Digital Economies\nPrediction markets highlight an interesting shift in how people understand the future. Instead of depending only on expert forecasts, communities can now contribute their perspectives within transparent digital systems. As decentralized technologies continue evolving, prediction platforms may become valuable tools for observing collective intelligence. They reveal how opinions form, how expectations change, and how communities respond to uncertainty. The real strength of prediction markets is not simply predicting events correctly. Their deeper value lies in helping people understand how shared ideas and human curiosity shape our expectations about the world ahead","published_at":"2026-04-14T07:23:16.000000Z","scheduled_publish_at":null,"is_published":true,"is_shared":false,"updated_at":"2026-04-14T11:00:07.000000Z","edited_at":"2026-04-14T07:09:58.000000Z","translation_source":null,"trend_at":null,"promoted_at":null,"reading_time":4,"points":0,"views_count":13,"clips_count":0,"comments_count":0,"rated_value":null,"promoted":false,"trending":false,"is_draft":false,"is_public":true,"locale_code":"vi","is_video":false,"thumbnail_url":"https:\/\/images.viblo.asia\/65d1af5f-52ec-4c43-9ea4-84a2536d051d.jpg","user":{"data":{"id":172693,"url":"https:\/\/viblo.asia\/u\/jameshatwrick","avatar":"0d1f62fe-e81a-4e27-8211-f37931890728.jpg","name":"jameshat","username":"jameshatwrick","followers_count":0,"reputation":0,"posts_count":18,"banned_at":null,"level_partner":null,"following":false}},"tags":{"data":[{"slug":"blockchaineducation","name":"BlockchainEducation"},{"slug":"web3learning","name":"Web3Learning"},{"slug":"digitaleconomy","name":"DigitalEconomy"},{"slug":"polymarketscript","name":"PolymarketScript"},{"slug":"predictionmarkets","name":"PredictionMarkets"}]},"commentators":{"data":[]}},{"id":92757,"title":"L\u00e0m Ch\u1ee7 C\u00e1c Tham S\u1ed1 LLM: B\u00ed Quy\u1ebft \"Thu\u1ea7n Ho\u00e1\" Tr\u00ed Tu\u1ec7 Nh\u00e2n T\u1ea1o","slug":"18J2e8yl4YK","url":"https:\/\/viblo.asia\/p\/lam-chu-cac-tham-so-llm-bi-quyet-thuan-hoa-tri-tue-nhan-tao-18J2e8yl4YK","user_id":34308,"moderation":null,"transliterated":"lam-chu-cac-tham-so-llm-bi-quyet-thuan-hoa-tri-tue-nhan-tao","contents_short":"Ch\u00e0o m\u1eebng b\u1ea1n \u0111\u1ebfn v\u1edbi th\u1ebf gi\u1edbi c\u1ee7a Prompt Engineering! C\u00f3 bao gi\u1edd b\u1ea1n copy m\u1ed9t prompt y h\u1ec7t tr\u00ean m\u1ea1ng nh\u01b0ng AI c\u1ee7a b\u1ea1n l\u1ea1i tr\u1ea3 v\u1ec1 k\u1ebft qu\u1ea3 ch\u00e1n ng\u1eaft ho\u1eb7c n\u00f3i nh\u1ea3m kh\u00f4ng? V\u1ea5n \u0111\u1ec1 \u0111\u00f4i khi kh\u00f4ng n\u1eb1m \u1edf prompt, m\u00e0 n\u1eb1m \u1edf c\u00e1c \"n\u00fat v\u1eb7n\" \u1ea9n b\u00ean d\u01b0\u1edbi \u2014 ch\u00ednh l\u00e0 c\u00e1c tham s\u1ed1 c\u1ee7a m\u00f4 h\u00ecnh ng\u00f4n ng\u1eef l\u1edbn (LLM settings).\n\nVi\u1ec7c \u0111i\u1ec1u khi\u1ec3n AI c\u0169ng gi\u1ed1ng nh\u01b0 vi\u1ec7c n\u1ea5u \u0103n. B\u1ea1n c\u00f3 nguy\u00ean li\u1ec7u t\u1ed1t (Prompt), nh\u01b0ng n\u1ebfu n\u00eam...","contents":"Ch\u00e0o m\u1eebng b\u1ea1n \u0111\u1ebfn v\u1edbi th\u1ebf gi\u1edbi c\u1ee7a Prompt Engineering! C\u00f3 bao gi\u1edd b\u1ea1n copy m\u1ed9t prompt y h\u1ec7t tr\u00ean m\u1ea1ng nh\u01b0ng AI c\u1ee7a b\u1ea1n l\u1ea1i tr\u1ea3 v\u1ec1 k\u1ebft qu\u1ea3 ch\u00e1n ng\u1eaft ho\u1eb7c n\u00f3i nh\u1ea3m kh\u00f4ng? V\u1ea5n \u0111\u1ec1 \u0111\u00f4i khi kh\u00f4ng n\u1eb1m \u1edf prompt, m\u00e0 n\u1eb1m \u1edf c\u00e1c \"n\u00fat v\u1eb7n\" \u1ea9n b\u00ean d\u01b0\u1edbi \u2014 ch\u00ednh l\u00e0 c\u00e1c tham s\u1ed1 c\u1ee7a m\u00f4 h\u00ecnh ng\u00f4n ng\u1eef l\u1edbn (LLM settings).\n\nVi\u1ec7c \u0111i\u1ec1u khi\u1ec3n AI c\u0169ng gi\u1ed1ng nh\u01b0 vi\u1ec7c n\u1ea5u \u0103n. B\u1ea1n c\u00f3 nguy\u00ean li\u1ec7u t\u1ed1t (Prompt), nh\u01b0ng n\u1ebfu n\u00eam n\u1ebfm gia v\u1ecb (Settings) sai c\u00e1ch, t\u00e1c ph\u1ea9m v\u1eabn s\u1ebd m\u1ea5t ngon. D\u1ef1a tr\u00ean c\u00e1c nguy\u00ean t\u1eafc c\u01a1 b\u1ea3n c\u1ee7a vi\u1ec7c tinh ch\u1ec9nh AI, b\u00e0i vi\u1ebft n\u00e0y s\u1ebd gi\u00fap b\u1ea1n gi\u1ea3i m\u00e3 t\u1eebng tham s\u1ed1 m\u1ed9t c\u00e1ch d\u1ec5 hi\u1ec3u nh\u1ea5t k\u00e8m theo v\u00ed d\u1ee5 minh ho\u1ea1.\n\n\n## 1. Temperature (Nhi\u1ec7t \u0111\u1ed9) \u2014 N\u00fam v\u1eb7n c\u1ee7a s\u1ef1 s\u00e1ng t\u1ea1o\n\n**Temperature** l\u00e0 tham s\u1ed1 ph\u1ed5 bi\u1ebfn nh\u1ea5t, d\u00f9ng \u0111\u1ec3 ki\u1ec3m so\u00e1t m\u1ee9c \u0111\u1ed9 ng\u1eabu nhi\u00ean (randomness) trong c\u00e2u tr\u1ea3 l\u1eddi c\u1ee7a m\u00f4 h\u00ecnh. Tham s\u1ed1 n\u00e0y th\u01b0\u1eddng dao \u0111\u1ed9ng t\u1eeb 0.0 \u0111\u1ebfn 2.0.\n\n* **Temperature th\u1ea5p (0.0 - 0.3):** M\u00f4 h\u00ecnh tr\u1edf n\u00ean c\u1ea9n tr\u1ecdng, logic v\u00e0 d\u1ec5 \u0111o\u00e1n. N\u00f3 s\u1ebd lu\u00f4n \u01b0u ti\u00ean ch\u1ecdn nh\u1eefng t\u1eeb c\u00f3 x\u00e1c su\u1ea5t xu\u1ea5t hi\u1ec7n cao nh\u1ea5t. R\u1ea5t ph\u00f9 h\u1ee3p cho vi\u1ec7c l\u1eadp tr\u00ecnh, tr\u00edch xu\u1ea5t d\u1eef li\u1ec7u, ho\u1eb7c tr\u1ea3 l\u1eddi c\u00e1c c\u00e2u h\u1ecfi y\u00eau c\u1ea7u s\u1ef1 th\u1eadt.\n* **Temperature cao (0.7 - 1.0+):** M\u00f4 h\u00ecnh \"bay b\u1ed5ng\" v\u00e0 s\u00e1ng t\u1ea1o h\u01a1n. N\u00f3 s\u1eb5n s\u00e0ng m\u1ea1o hi\u1ec3m ch\u1ecdn nh\u1eefng t\u1eeb c\u00f3 x\u00e1c su\u1ea5t th\u1ea5p h\u01a1n \u0111\u1ec3 t\u1ea1o ra nh\u1eefng \u00fd t\u01b0\u1edfng m\u1edbi l\u1ea1. Ph\u00f9 h\u1ee3p cho s\u00e1ng t\u00e1c th\u01a1, k\u1ec3 chuy\u1ec7n, ho\u1eb7c brainstorming.\n\n> **V\u00ed d\u1ee5 minh ho\u1ea1:**\n> C\u00f9ng m\u1ed9t prompt: *\"H\u00e3y vi\u1ebft m\u1ed9t c\u00e2u m\u1edf \u0111\u1ea7u cho c\u00e2u chuy\u1ec7n v\u1ec1 m\u1ed9t ch\u00fa ch\u00f3.\"*\n> * **Temperature = 0.0:** \"Ch\u00fa ch\u00f3 m\u1ef1c t\u00ean l\u00e0 C\u1eadu V\u00e0ng \u0111ang n\u1eb1m s\u01b0\u1edfi n\u1eafng tr\u01b0\u1edbc hi\u00ean nh\u00e0.\" *(R\u1ea5t an to\u00e0n, c\u01a1 b\u1ea3n)*\n> * **Temperature = 1.0:** \"V\u01b0\u1ee3t qua d\u1ea3i ng\u00e2n h\u00e0 ng\u1eadp tr\u00e0n m\u00f9i x\u01b0\u01a1ng h\u1ea7m, \u0110\u1ea1i \u00fay G\u00e2u G\u00e2u v\u1eeba h\u1ea1 c\u00e1nh chi\u1ebfc phi thuy\u1ec1n h\u00ecnh \u0111\u0129a x\u00edch \u0111u xu\u1ed1ng h\u00e0nh tinh M\u00e8o.\" *(C\u1ef1c k\u1ef3 s\u00e1ng t\u1ea1o, b\u1ea5t ng\u1edd)*\n\n\n## 2. Top-P (Nucleus Sampling) \u2014 V\u00f9ng an to\u00e0n c\u1ee7a t\u1eeb v\u1ef1ng\n\nT\u01b0\u01a1ng t\u1ef1 nh\u01b0 Temperature, **Top-P** c\u0169ng d\u00f9ng \u0111\u1ec3 ki\u1ec3m so\u00e1t t\u00ednh s\u00e1ng t\u1ea1o, nh\u01b0ng ho\u1ea1t \u0111\u1ed9ng theo m\u1ed9t c\u01a1 ch\u1ebf l\u1ecdc x\u00e1c su\u1ea5t c\u1ed9ng d\u1ed3n. Top-P s\u1ebd gi\u1edbi h\u1ea1n nh\u00f3m t\u1eeb m\u00e0 m\u00f4 h\u00ecnh \u0111\u01b0\u1ee3c ph\u00e9p ch\u1ecdn sao cho t\u1ed5ng x\u00e1c su\u1ea5t c\u1ee7a nh\u00f3m t\u1eeb \u0111\u00f3 v\u1eeba b\u1eb1ng ng\u01b0\u1ee1ng `P`.\n\nV\u00ed d\u1ee5, n\u1ebfu b\u1ea1n \u0111\u1eb7t `Top-P = 0.90`, m\u00f4 h\u00ecnh s\u1ebd gom c\u00e1c t\u1eeb c\u00f3 kh\u1ea3 n\u0103ng xu\u1ea5t hi\u1ec7n cao nh\u1ea5t l\u1ea1i sao cho t\u1ed5ng x\u00e1c su\u1ea5t c\u1ee7a ch\u00fang c\u1ed9ng l\u1ea1i b\u1eb1ng 90%, v\u00e0 ch\u1ec9 \u0111\u01b0\u1ee3c ph\u00e9p ch\u1ecdn ng\u1eabu nhi\u00ean 1 t\u1eeb trong nh\u00f3m \u0111\u00f3. Nh\u00f3m 10% nh\u1eefng t\u1eeb v\u00f4 l\u00fd nh\u1ea5t s\u1ebd b\u1ecb g\u1ea1ch b\u1ecf ho\u00e0n to\u00e0n kh\u1ecfi s\u1ef1 l\u1ef1a ch\u1ecdn.\n\n> **V\u00ed d\u1ee5 minh ho\u1ea1:**\n> Prompt: *\"M\u00f3n \u0103n s\u00e1ng y\u00eau th\u00edch c\u1ee7a t\u00f4i l\u00e0...\"*\n> C\u00e1c t\u1eeb ti\u1ebfp theo m\u00e0 AI d\u1ef1 \u0111o\u00e1n: B\u00e1nh m\u00ec (50%), Ph\u1edf (25%), X\u00f4i (15%), B\u00ea t\u00f4ng (8%), B\u00f3ng \u0111\u00e8n (2%).\n> * N\u1ebfu **Top-P = 0.90**: AI ch\u1ec9 \u0111\u01b0\u1ee3c ph\u00e9p ch\u1ecdn gi\u1eefa *B\u00e1nh m\u00ec, Ph\u1edf,* v\u00e0 *X\u00f4i* (50 + 25 + 15 = 90%). \"B\u00ea t\u00f4ng\" v\u00e0 \"B\u00f3ng \u0111\u00e8n\" b\u1ecb lo\u1ea1i \u0111\u1ec3 \u0111\u1ea3m b\u1ea3o c\u00e2u v\u0103n kh\u00f4ng b\u1ecb v\u00f4 ngh\u0129a.\n> \n> *M\u1eb9o nh\u1ecf: C\u00e1c chuy\u00ean gia th\u01b0\u1eddng khuy\u00ean ch\u1ec9 n\u00ean thay \u0111\u1ed5i Temperature HO\u1eb6C Top-P. Hi\u1ebfm khi b\u1ea1n n\u00ean thay \u0111\u1ed5i c\u1ea3 hai c\u00f9ng l\u00fac \u0111\u1ec3 tr\u00e1nh l\u00e0m m\u00f4 h\u00ecnh b\u1ecb nhi\u1ec5u.*\n\n\n## 3. Top-K \u2014 S\u00e0ng l\u1ecdc \"Top Trending\"\n\nN\u1ebfu Top-P l\u1ea5y theo ph\u1ea7n tr\u0103m, th\u00ec **Top-K** c\u1eaft t\u1ec9a t\u1eeb v\u1ef1ng theo s\u1ed1 l\u01b0\u1ee3ng c\u1ed1 \u0111\u1ecbnh. Tham s\u1ed1 n\u00e0y bu\u1ed9c m\u00f4 h\u00ecnh ch\u1ec9 \u0111\u01b0\u1ee3c ph\u00e9p xem x\u00e9t \u0111\u00fang `K` t\u1eeb c\u00f3 x\u00e1c su\u1ea5t cao nh\u1ea5t cho b\u01b0\u1edbc ti\u1ebfp theo. \n\n> **V\u00ed d\u1ee5 minh ho\u1ea1:**\n> N\u1ebfu b\u1ea1n \u0111\u1eb7t `Top-K = 50`, \u1edf m\u1ed7i b\u01b0\u1edbc vi\u1ebft t\u1eeb m\u1edbi, m\u00f4 h\u00ecnh s\u1ebd t\u00ednh to\u00e1n h\u00e0ng ng\u00e0n t\u1eeb trong t\u1eeb \u0111i\u1ec3n nh\u01b0ng s\u1ebd g\u1ea1ch b\u1ecf t\u1ea5t c\u1ea3, ch\u1ec9 gi\u1eef l\u1ea1i \u0111\u00fang 50 t\u1eeb c\u00f3 \u0111i\u1ec3m s\u1ed1 cao nh\u1ea5t \u0111\u1ec3 b\u1ed1c th\u0103m. Vi\u1ec7c n\u00e0y gi\u00fap AI kh\u00f4ng bao gi\u1edd \u0111i ch\u1ec7ch h\u01b0\u1edbng v\u00e0 th\u1ed1t ra m\u1ed9t t\u1eeb ho\u00e0n to\u00e0n xa l\u1ea1 v\u1edbi ng\u1eef c\u1ea3nh.\n\n\n## 4. Max Length \/ Max Tokens (\u0110\u1ed9 d\u00e0i t\u1ed1i \u0111a)\n\n\u0110\u00e2y l\u00e0 ranh gi\u1edbi c\u1ee9ng \u0111\u1ec3 ng\u0103n AI n\u00f3i qu\u00e1 nhi\u1ec1u, b\u1ecb lan man ho\u1eb7c ti\u00eau t\u1ed1n qu\u00e1 nhi\u1ec1u t\u00e0i nguy\u00ean API. **Max Tokens** x\u00e1c \u0111\u1ecbnh s\u1ed1 l\u01b0\u1ee3ng token (\u0111\u01a1n v\u1ecb t\u1eeb\/k\u00fd t\u1ef1) t\u1ed1i \u0111a m\u00e0 AI c\u00f3 th\u1ec3 sinh ra trong c\u00e2u tr\u1ea3 l\u1eddi.\n\n> **V\u00ed d\u1ee5 minh ho\u1ea1:**\n> B\u1ea1n y\u00eau c\u1ea7u AI t\u00f3m t\u1eaft m\u1ed9t b\u00e0i b\u00e1o d\u00e0i nh\u01b0ng ch\u1ec9 c\u1ea7n n\u1eafm \u00fd ch\u00ednh nhanh g\u1ecdn. B\u1ea1n c\u00f3 th\u1ec3 c\u00e0i \u0111\u1eb7t `Max Tokens = 150`. M\u00f4 h\u00ecnh s\u1ebd b\u1ecb \u00e9p ph\u1ea3i g\u00f3i g\u1ecdn \u00fd t\u01b0\u1edfng, ho\u1eb7c s\u1ebd d\u1eebng ngay l\u1eadp t\u1ee9c khi ch\u1ea1m m\u1ed1c 150 tokens. *(L\u01b0u \u00fd: N\u1ebfu \u0111\u1eb7t qu\u00e1 th\u1ea5p, c\u00e2u v\u0103n c\u00f3 th\u1ec3 b\u1ecb c\u1eaft \u0111\u1ee9t gi\u1eefa ch\u1eebng, ch\u01b0a c\u00f3 d\u1ea5u ch\u1ea5m c\u00e2u).*\n\n\n## 5. Stop Sequences (Chu\u1ed7i d\u1eebng)\n\n\u0110\u00e2y l\u00e0 m\u1ed9t t\u00ednh n\u0103ng v\u00f4 c\u00f9ng quy\u1ec1n l\u1ef1c khi b\u1ea1n mu\u1ed1n ki\u1ec3m so\u00e1t ch\u1eb7t ch\u1ebd c\u1ea5u tr\u00fac v\u0103n b\u1ea3n. **Stop Sequence** l\u00e0 m\u1ed9t chu\u1ed7i k\u00fd t\u1ef1 (ho\u1eb7c m\u1ed9t t\u1eeb) m\u00e0 khi m\u00f4 h\u00ecnh chu\u1ea9n b\u1ecb vi\u1ebft ra n\u00f3, qu\u00e1 tr\u00ecnh t\u1ea1o v\u0103n b\u1ea3n s\u1ebd l\u1eadp t\u1ee9c k\u1ebft th\u00fac.\n\n> **V\u00ed d\u1ee5 minh ho\u1ea1:**\n> B\u1ea1n d\u00f9ng AI \u0111\u1ec3 so\u1ea1n h\u00e0ng lo\u1ea1t email c\u00f4ng vi\u1ec7c nh\u01b0ng kh\u00f4ng mu\u1ed1n AI t\u1ef1 \u0111\u1ed9ng b\u1ecba ra m\u1ed9t c\u00e1i t\u00ean gi\u1ea3 m\u1ea1o \u1edf ph\u1ea7n k\u00fd t\u00ean. B\u1ea1n thi\u1ebft l\u1eadp Stop Sequence l\u00e0: `Tr\u00e2n tr\u1ecdng,`. \n> L\u00fac n\u00e0y, AI s\u1ebd vi\u1ebft xong n\u1ed9i dung ch\u00ednh, v\u00e0 ngay khi n\u00f3 \u0111\u1ecbnh g\u00f5 c\u1ee5m t\u1eeb \"Tr\u00e2n tr\u1ecdng,\", n\u00f3 s\u1ebd d\u1eebng l\u1ea1i ngay l\u1eadp t\u1ee9c, tr\u1ea3 l\u1ea1i cho b\u1ea1n m\u1ed9t v\u0103n b\u1ea3n ho\u00e0n h\u1ea3o \u0111\u1ec3 b\u1ea1n t\u1ef1 ch\u00e8n ch\u1eef k\u00fd c\u1ee7a ch\u00ednh m\u00ecnh v\u00e0o.\n\n\n## 6. Frequency Penalty & Presence Penalty (H\u00ecnh ph\u1ea1t ch\u1ed1ng l\u1eb7p t\u1eeb)\n\nN\u1ebfu AI c\u1ee7a b\u1ea1n thi tho\u1ea3ng b\u1eaft \u0111\u1ea7u n\u00f3i l\u1eb7p \u0111i l\u1eb7p l\u1ea1i m\u1ed9t t\u1eeb nh\u01b0 m\u1ed9t con v\u1eb9t, \u0111\u00e2y l\u00e0 l\u00fac b\u1ea1n c\u1ea7n tinh ch\u1ec9nh hai \"m\u1ee9c ph\u1ea1t\" n\u00e0y:\n\n* **Frequency Penalty (Ph\u1ea1t t\u1ea7n su\u1ea5t):** Ph\u1ea1t d\u1ef1a tr\u00ean *s\u1ed1 l\u1ea7n* m\u1ed9t t\u1eeb \u0111\u00e3 xu\u1ea5t hi\u1ec7n. C\u00e0ng l\u1eb7p l\u1ea1i nhi\u1ec1u l\u1ea7n, x\u00e1c su\u1ea5t t\u1eeb \u0111\u00f3 \u0111\u01b0\u1ee3c d\u00f9ng l\u1ea1i c\u00e0ng th\u1ea5p. Tham s\u1ed1 n\u00e0y gi\u00fap c\u00e2u v\u0103n m\u01b0\u1ee3t m\u00e0 v\u00e0 \u0111a d\u1ea1ng t\u1eeb v\u1ef1ng h\u01a1n.\n* **Presence Penalty (Ph\u1ea1t hi\u1ec7n di\u1ec7n):** Ph\u1ea1t ch\u1ec9 c\u1ea7n t\u1eeb \u0111\u00f3 *\u0111\u00e3 t\u1eebng xu\u1ea5t hi\u1ec7n* trong v\u0103n b\u1ea3n, d\u00f9 ch\u1ec9 m\u1ed9t l\u1ea7n. Tham s\u1ed1 n\u00e0y khuy\u1ebfn kh\u00edch AI ch\u1ee7 \u0111\u1ed9ng chuy\u1ec3n sang ch\u1ee7 \u0111\u1ec1 m\u1edbi thay v\u00ec c\u1ee9 xoay quanh m\u1ed9t \u00fd t\u01b0\u1edfng c\u0169.\n\n> **V\u00ed d\u1ee5 minh ho\u1ea1:**\n> Khi vi\u1ebft m\u1ed9t b\u00e0i lu\u1eadn v\u1ec1 \"M\u00f4i tr\u01b0\u1eddng\", m\u00f4 h\u00ecnh c\u00f3 th\u1ec3 l\u1eb7p l\u1ea1i t\u1eeb \"\u00f4 nhi\u1ec5m\" trong m\u1ecdi c\u00e2u. B\u1eb1ng c\u00e1ch t\u0103ng *Frequency Penalty*, b\u1ea1n \u00e9p AI ph\u1ea3i l\u1ee5c l\u1ecdi t\u1eeb \u0111i\u1ec3n \u0111\u1ec3 t\u00ecm c\u00e1c t\u1eeb \u0111\u1ed3ng ngh\u0129a nh\u01b0 \"suy tho\u00e1i\", \"v\u1ea5y b\u1ea9n\", \"h\u1ee7y ho\u1ea1i\" \u0111\u1ec3 thay th\u1ebf.\n\n\n## T\u00f3m l\u1ea1i: N\u00ean c\u00e0i \u0111\u1eb7t th\u00f4ng s\u1ed1 th\u1ebf n\u00e0o cho chu\u1ea9n?\n\nD\u00f9 kh\u00f4ng c\u00f3 b\u1ed9 th\u00f4ng s\u1ed1 n\u00e0o l\u00e0 ho\u00e0n h\u1ea3o tuy\u1ec7t \u0111\u1ed1i cho m\u1ecdi t\u00ecnh hu\u1ed1ng, b\u1ea1n c\u00f3 th\u1ec3 tham kh\u1ea3o \"c\u00f4ng th\u1ee9c\" kh\u1edfi \u0111\u1ea7u sau \u0111\u00e2y:\n\n| M\u1ee5c \u0111\u00edch s\u1eed d\u1ee5ng | Temperature | Top-P | L\u00fd do |\n| :--- | :--- | :--- | :--- |\n| **L\u1eadp tr\u00ecnh \/ D\u1eef ki\u1ec7n th\u1ef1c t\u1ebf** | `0.0 - 0.2` | `1.0` | C\u1ea7n s\u1ef1 ch\u00ednh x\u00e1c tuy\u1ec7t \u0111\u1ed1i, kh\u00f4ng c\u00f3 ch\u1ed7 cho s\u1ef1 \"s\u00e1ng t\u1ea1o\" sai l\u1ec7ch (hallucination). |\n| **Vi\u1ebft Blog \/ Chatbot th\u00f4ng th\u01b0\u1eddng** | `0.5 - 0.7` | `0.9` | T\u1ea1o ra s\u1ef1 c\u00e2n b\u1eb1ng ho\u00e0n h\u1ea3o gi\u1eefa logic m\u1ea1ch l\u1ea1c v\u00e0 v\u0103n phong t\u1ef1 nhi\u00ean, c\u00f3 \u0111i\u1ec3m nh\u1ea5n. |\n| **S\u00e1ng t\u00e1c th\u01a1 \/ Nh\u1eadp vai (Roleplay)** | `0.8 - 1.2` | `0.95` | Khuy\u1ebfn kh\u00edch AI b\u1ee9t ph\u00e1 kh\u1ecfi c\u00e1c khu\u00f4n m\u1eabu th\u00f4ng th\u01b0\u1eddng, mang l\u1ea1i s\u1ef1 ng\u1ea1c nhi\u00ean. |\n\nVi\u1ec7c n\u1eafm v\u1eefng c\u00e1c tham s\u1ed1 n\u00e0y s\u1ebd chuy\u1ec3n b\u1ea1n t\u1eeb m\u1ed9t ng\u01b0\u1eddi \"d\u00f9ng AI\" th\u00e0nh m\u1ed9t ng\u01b0\u1eddi \"\u0111i\u1ec1u khi\u1ec3n AI\". H\u00e3y th\u1eed tinh ch\u1ec9nh c\u00e1c n\u00fat v\u1eb7n n\u00e0y trong l\u1ea7n prompt ti\u1ebfp theo, b\u1ea1n s\u1ebd b\u1ea5t ng\u1edd v\u1edbi s\u1ee9c m\u1ea1nh m\u00e0 ch\u00fang mang l\u1ea1i!","published_at":"2026-04-14T07:06:18.000000Z","scheduled_publish_at":null,"is_published":true,"is_shared":false,"updated_at":"2026-04-14T17:00:18.000000Z","edited_at":"2026-04-14T07:04:23.000000Z","translation_source":null,"trend_at":null,"promoted_at":null,"reading_time":8,"points":0,"views_count":34,"clips_count":0,"comments_count":0,"rated_value":null,"promoted":false,"trending":false,"is_draft":false,"is_public":true,"locale_code":"vi","is_video":false,"thumbnail_url":"https:\/\/images.viblo.asia\/4a643044-329c-45f3-a29d-8eaba277618b.png","user":{"data":{"id":34308,"url":"https:\/\/viblo.asia\/u\/QBee","avatar":"3f389b8b-6628-4f17-8b1c-df558e0b36bf.jpg","name":"Tung Nguyen","username":"QBee","followers_count":5,"reputation":137,"posts_count":3,"banned_at":null,"level_partner":null,"following":false}},"tags":{"data":[{"slug":"llm","name":"LLM"},{"slug":"prompt-engineering","name":"Prompt Engineering"}]},"commentators":{"data":[]}},{"id":92744,"title":"Khi VS Code \u0110\u00ecnh C\u00f4ng: \"\u00c9p\" IDE Format File Kh\u1ed5ng L\u1ed3 & Ranh Gi\u1edbi Ch\u1ecbu \u0110\u1ef1ng","slug":"Nj4vg6bxJ6r","url":"https:\/\/viblo.asia\/p\/khi-vs-code-dinh-cong-ep-ide-format-file-khong-lo-ranh-gioi-chiu-dung-Nj4vg6bxJ6r","user_id":182653,"moderation":null,"transliterated":"khi-vs-code-dinh-cong-ep-ide-format-file-khong-lo-ranh-gioi-chiu-dung","contents_short":"M\u1ed9t ng\u00e0y \u0111\u1eb9p tr\u1eddi, b\u1ea1n vi\u1ebft m\u1ed9t \u0111o\u1ea1n script crawl data ho\u1eb7c query Database v\u00e0 xu\u1ea5t ra m\u1ed9t file dump_data.json n\u1eb7ng c\u1ee1 50MB. Theo th\u00f3i quen, b\u1ea1n click \u0111\u00fap v\u00e0o file \u0111\u00f3 trong VS Code, \u0111\u1ecbnh b\u1ee5ng b\u1ea5m t\u1ed5 h\u1ee3p ph\u00edm th\u1ea7n th\u00e1nh Alt + Shift + F \u0111\u1ec3 format n\u00f3 cho \u0111\u1eb9p, d\u1ec5 b\u1ec1 soi x\u00e9t.\n\nNh\u01b0ng... m\u00e0n h\u00ecnh b\u1ed7ng kh\u1ef1ng l\u1ea1i. Qu\u1ea1t t\u1ea3n nhi\u1ec7t laptop b\u1eaft \u0111\u1ea7u r\u00fa l\u00ean nh\u01b0 \u0111\u1ed9ng c\u01a1 ph\u1ea3n l\u1ef1c. VS Code hi\u1ec7n d\u00f2ng th\u00f4ng b\u00e1o l\u1ea1nh...","contents":"M\u1ed9t ng\u00e0y \u0111\u1eb9p tr\u1eddi, b\u1ea1n vi\u1ebft m\u1ed9t \u0111o\u1ea1n script crawl data ho\u1eb7c query Database v\u00e0 xu\u1ea5t ra m\u1ed9t file `dump_data.json` n\u1eb7ng c\u1ee1 50MB. Theo th\u00f3i quen, b\u1ea1n click \u0111\u00fap v\u00e0o file \u0111\u00f3 trong VS Code, \u0111\u1ecbnh b\u1ee5ng b\u1ea5m t\u1ed5 h\u1ee3p ph\u00edm th\u1ea7n th\u00e1nh `Alt + Shift + F` \u0111\u1ec3 format n\u00f3 cho \u0111\u1eb9p, d\u1ec5 b\u1ec1 soi x\u00e9t.\n\nNh\u01b0ng... m\u00e0n h\u00ecnh b\u1ed7ng kh\u1ef1ng l\u1ea1i. Qu\u1ea1t t\u1ea3n nhi\u1ec7t laptop b\u1eaft \u0111\u1ea7u r\u00fa l\u00ean nh\u01b0 \u0111\u1ed9ng c\u01a1 ph\u1ea3n l\u1ef1c. VS Code hi\u1ec7n d\u00f2ng th\u00f4ng b\u00e1o l\u1ea1nh l\u00f9ng: \"Tokenization is skipped for long lines for performance reasons\" (\u0110\u00e3 b\u1ecf qua highlight \u0111\u1ec3 gi\u1eef hi\u1ec7u n\u0103ng). T\u1ec7 h\u01a1n, khi b\u1ea1n c\u1ed1 \u00e9p n\u00f3 format, IDE l\u0103n ra ch\u1ebft l\u00e2m s\u00e0ng (Window is not responding).\n\nC\u00e1i \"vibe\" code m\u01b0\u1ee3t m\u00e0 b\u1ed7ng ch\u1ed1c v\u1ee1 v\u1ee5n.\n\nTh\u1ef1c ch\u1ea5t, VS Code \u0111\u01b0\u1ee3c x\u00e2y d\u1ef1ng tr\u00ean n\u1ec1n t\u1ea3ng Electron (b\u1ea3n ch\u1ea5t l\u00e0 m\u1ed9t tr\u00ecnh duy\u1ec7t Chrome thu nh\u1ecf). Vi\u1ec7c b\u1eaft n\u00f3 render v\u00e0 ph\u00e2n t\u00edch c\u00fa ph\u00e1p (parse) h\u00e0ng tri\u1ec7u d\u00f2ng text trong m\u1ed9t file l\u00e0 m\u1ed9t c\u1ef1c h\u00ecnh \u0111\u1ed1i v\u1edbi b\u1ed9 nh\u1edb RAM. \u0110\u1ec3 t\u1ef1 b\u1ea3o v\u1ec7, VS Code sinh ra nh\u1eefng gi\u1edbi h\u1ea1n ng\u1ea7m.\n\nNh\u01b0ng n\u1ebfu b\u1ea1n l\u00e0 m\u1ed9t Vibe Coder \u0111ang \u1edf th\u1ebf \"c\u1ee9ng \u0111\u1ea7u\", b\u1eaft bu\u1ed9c ph\u1ea3i soi file n\u00e0y ngay trong IDE th\u00ec sao? H\u00f4m nay, m\u00ecnh s\u1ebd ch\u1ec9 anh em c\u00e1ch \"m\u1edf \u1ea5n phong \u1ea5n\" s\u1ee9c m\u1ea1nh c\u1ee7a VS Code, \u00e9p n\u00f3 ph\u1ea3i l\u00e0m vi\u1ec7c.\n\n### 1. Ph\u00e1 V\u1ee1 Gi\u1edbi H\u1ea1n: \u00c9p VS Code Format File L\u1edbn\n\n\u0110\u1ec3 bu\u1ed9c VS Code ph\u1ee5c t\u00f9ng v\u00e0 format nh\u1eefng file JSON kh\u1ed5ng l\u1ed3, ch\u00fang ta c\u1ea7n can thi\u1ec7p s\u00e2u v\u00e0o Settings. Qu\u00e1 tr\u00ecnh n\u00e0y g\u1ed3m 2 b\u01b0\u1edbc:\n\n**B\u01b0\u1edbc 1: B\u1eadt khi\u00ean b\u1ea3o v\u1ec7 (Large File Optimizations)**\n\nD\u00f9 \u00e9p n\u00f3 l\u00e0m vi\u1ec7c, ta v\u1eabn ph\u1ea3i gi\u00fap n\u00f3 l\u01b0\u1ee3c b\u1ecf nh\u1eefng g\u00e1nh n\u1eb7ng kh\u00f4ng c\u1ea7n thi\u1ebft (nh\u01b0 t\u00ednh to\u00e1n word-wrap hay soi l\u1ed7i typo).\n\n1. M\u1edf Settings (B\u1ea5m ph\u00edm t\u1eaft `Ctrl +` , tr\u00ean Windows ho\u1eb7c `Cmd + ,` tr\u00ean Mac).\n2. G\u00f5 v\u00e0o \u00f4 t\u00ecm ki\u1ebfm: `Editor: Large File Optimizations.`\n3. \u0110\u1ea3m b\u1ea3o \u00f4 tick n\u00e0y \u0111\u00e3 \u0111\u01b0\u1ee3c b\u1eadt. (Khi b\u1eadt, VS Code s\u1ebd t\u1ef1 \u0111\u1ed9ng t\u1eaft b\u1edbt c\u00e1c t\u00ednh n\u0103ng n\u1eb7ng khi ph\u00e1t hi\u1ec7n file qu\u00e1 to).\n\n**B\u01b0\u1edbc 2: T\u0103ng gi\u1edbi h\u1ea1n t\u00ednh to\u00e1n cho JSON**\n\nM\u1eb7c \u0111\u1ecbnh, VS Code ch\u1ec9 ph\u00e2n t\u00edch m\u1ed9t s\u1ed1 l\u01b0\u1ee3ng object\/m\u1ea3ng nh\u1ea5t \u0111\u1ecbnh trong file JSON. V\u01b0\u1ee3t qua s\u1ed1 \u0111\u00f3, n\u00f3 s\u1ebd t\u1eeb ch\u1ed1i format. Ta c\u1ea7n n\u1edbi l\u1ecfng con s\u1ed1 n\u00e0y:\n\n1. V\u1eabn \u1edf m\u00e0n h\u00ecnh Settings, g\u00f5 t\u00ecm ki\u1ebfm: `json.maxItemsComputed.`\n2. M\u1eb7c \u0111\u1ecbnh gi\u00e1 tr\u1ecb n\u00e0y th\u01b0\u1eddng l\u00e0 `5000`. H\u00e3y m\u1ea1nh d\u1ea1n s\u1eeda n\u00f3 l\u00ean 20000 (ho\u1eb7c cao h\u01a1n t\u00f9y v\u00e0o \u0111\u1ed9 \"tr\u00e2u\" c\u1ee7a l\u01b0\u1ee3ng RAM tr\u00ean m\u00e1y b\u1ea1n).\n\nSau khi setup xong, quay l\u1ea1i file JSON v\u00e0 b\u1ea5m Format. VS Code s\u1ebd ngoan ngo\u00e3n c\u0103n d\u00f2ng cho b\u1ea1n.\n\n### 2. Trade-offs (S\u1ef1 \u0111\u00e1nh \u0111\u1ed5i) & C\u1ea3nh b\u00e1o t\u1eeb Vibe Coder\n\nM\u00ecnh \u0111\u00e3 chia s\u1ebb c\u00e1ch b\u1ebb kh\u00f3a, nh\u01b0ng v\u1edbi t\u01b0 c\u00e1ch l\u00e0 m\u1ed9t ng\u01b0\u1eddi t\u1eebng l\u00e0m ch\u00e1y v\u00e0i thanh RAM, m\u00ecnh khuy\u00ean anh em: Ch\u1ec9 d\u00f9ng c\u00e1ch n\u00e0y nh\u01b0 m\u1ed9t gi\u1ea3i ph\u00e1p t\u1ea1m th\u1eddi (Workaround).\n\nVi\u1ec7c t\u0103ng `maxItemsComputed` l\u00ean qu\u00e1 cao s\u1ebd mang l\u1ea1i nh\u1eefng h\u1ec7 l\u1ee5y nh\u00e3n ti\u1ec1n:\n\n* Lag c\u1ee5c b\u1ed9: Trong l\u00fac VS Code \u0111ang h\u00ec h\u1ee5c format, b\u1ea1n g\u1ea7n nh\u01b0 kh\u00f4ng th\u1ec3 g\u00f5 code \u1edf c\u00e1c tab kh\u00e1c. To\u00e0n b\u1ed9 thao t\u00e1c s\u1ebd b\u1ecb delay (\u0111\u1ed9 tr\u1ec5) v\u00e0i gi\u00e2y.\n* Ng\u1ed1n RAM v\u00f4 t\u1ed9i v\u1ea1: M\u1ed9t file JSON 50MB khi \u0111\u01b0\u1ee3c bung ra th\u00e0nh c\u1ea5u tr\u00fac c\u00e2y DOM trong Electron c\u00f3 th\u1ec3 nu\u1ed1t g\u1ecdn 1-2GB RAM c\u1ee7a b\u1ea1n.\n\n### 3. L\u1ed1i \u0111i n\u00e0o thanh l\u1ecbch h\u01a1n?\n\nM\u1ed9t Vibe Coder th\u1ef1c th\u1ee5 s\u1ebd lu\u00f4n bi\u1ebft ranh gi\u1edbi c\u1ee7a c\u00f4ng c\u1ee5. VS Code l\u00e0 Editor \u0111\u1ec3 g\u00f5 code, kh\u00f4ng ph\u1ea3i c\u00f4ng c\u1ee5 x\u1eed l\u00fd Big Data.\n\nN\u1ebfu b\u1ea1n th\u01b0\u1eddng xuy\u00ean ph\u1ea3i l\u00e0m vi\u1ec7c v\u1edbi c\u00e1c file JSON\/Log t\u1eeb v\u00e0i ch\u1ee5c MB \u0111\u1ebfn h\u00e0ng GB, h\u00e3y c\u1ea5t VS Code \u0111i v\u00e0 s\u1eed d\u1ee5ng nh\u1eefng th\u1ee9 sinh ra \u0111\u1ec3 l\u00e0m vi\u1ec7c \u0111\u00f3:\n\n* D\u00f9ng Terminal v\u1edbi `jq`: V\u0169 kh\u00ed t\u1ed1i th\u01b0\u1ee3ng c\u1ee7a Backend Dev. Ch\u1ec9 v\u1edbi m\u1ed9t l\u1ec7nh `cat data.json | jq '.' > formatted.json`, b\u1ea1n c\u00f3 m\u1ed9t file format \u0111\u1eb9p \u0111\u1ebd trong t\u00edch t\u1eafc m\u00e0 kh\u00f4ng t\u1ed1n m\u1ed9t gi\u1ecdt m\u1ed3 h\u00f4i c\u1ee7a IDE.\n* D\u00f9ng c\u00e1c Text Editor chuy\u00ean d\u1ee5ng: Sublime Text ho\u1eb7c Notepad++ (tr\u00ean Windows) \u0111\u01b0\u1ee3c vi\u1ebft b\u1eb1ng C++, qu\u1ea3n l\u00fd memory t\u1ed1t h\u01a1n Electron h\u00e0ng ch\u1ee5c l\u1ea7n. Ch\u00fang c\u00f3 th\u1ec3 m\u1edf file 1GB nh\u1eb9 t\u1ef1a l\u00f4ng h\u1ed3ng.\n\n### L\u1eddi k\u1ebft\n\nVi\u1ebft code l\u00e0 ngh\u1ec7 thu\u1eadt, v\u00e0 hi\u1ec3u r\u00f5 c\u00f4ng c\u1ee5 m\u00ecnh \u0111ang x\u00e0i l\u00e0 n\u1ec1n t\u1ea3ng c\u1ee7a ngh\u1ec7 thu\u1eadt \u0111\u00f3. B\u1ea1n ho\u00e0n to\u00e0n c\u00f3 th\u1ec3 \u00e9p VS Code v\u01b0\u1ee3t qu\u00e1 gi\u1edbi h\u1ea1n c\u1ee7a n\u00f3, mi\u1ec5n l\u00e0 b\u1ea1n ch\u1ea5p nh\u1eadn \"c\u1ed1ng n\u1ea1p\" RAM v\u00e0 ch\u1ecbu \u0111\u1ef1ng ti\u1ebfng qu\u1ea1t t\u1ea3n nhi\u1ec7t. H\u00e3y t\u00f9y c\u01a1 \u1ee9ng bi\u1ebfn nh\u00e9!","published_at":"2026-04-14T06:07:04.000000Z","scheduled_publish_at":null,"is_published":true,"is_shared":false,"updated_at":"2026-04-14T17:00:18.000000Z","edited_at":"2026-04-14T06:06:09.000000Z","translation_source":null,"trend_at":null,"promoted_at":null,"reading_time":5,"points":1,"views_count":41,"clips_count":0,"comments_count":1,"rated_value":null,"promoted":false,"trending":false,"is_draft":false,"is_public":true,"locale_code":"vi","is_video":false,"thumbnail_url":"https:\/\/images.viblo.asia\/9f9cf458-3d91-49f9-9e87-28a1e84a80ae.png","user":{"data":{"id":182653,"url":"https:\/\/viblo.asia\/u\/hhoang","avatar":"90700a59-6e71-4d6c-bff6-0223a4e007c4.jpg","name":"Nguy\u1ec5n Huy Ho\u00e0ng","username":"hhoang","followers_count":46,"reputation":2509,"posts_count":250,"banned_at":null,"level_partner":null,"following":false}},"tags":{"data":[{"slug":"productivity","name":"Productivity"},{"slug":"tipsandtricks","name":"TipsandTricks"},{"slug":"vscode","name":"vscode"}]},"commentators":{"data":[{"id":182653,"url":"https:\/\/viblo.asia\/u\/hhoang","avatar":"90700a59-6e71-4d6c-bff6-0223a4e007c4.jpg","name":"Nguy\u1ec5n Huy Ho\u00e0ng","username":"hhoang","followers_count":0,"reputation":0,"posts_count":0,"banned_at":null,"level_partner":null}]}},{"id":92741,"title":"\u0110\u00e1nh gi\u00e1 ch\u1ea5t l\u01b0\u1ee3ng OCR MinerU","slug":"AWVpX1MoV05","url":"https:\/\/viblo.asia\/p\/danh-gia-chat-luong-ocr-mineru-AWVpX1MoV05","user_id":185779,"moderation":null,"transliterated":"danh-gia-chat-luong-ocr-mineru","contents_short":"Ch\u1ee9c n\u0103ng OCR & Ph\u00e2n t\u00edch t\u00e0i li\u1ec7u c\u1ee7a MinerU\n\n- Ph\u00e1t hi\u1ec7n v\u00e0 x\u1eed l\u00fd OCR t\u1ef1 \u0111\u1ed9ng cho c\u00e1c PDF b\u1ecb scan ho\u1eb7c v\u0103n b\u1ea3n kh\u00f4ng th\u1ec3 sao ch\u00e9p; h\u1ed7 tr\u1ee3 84 ng\u00f4n ng\u1eef kh\u00e1c nhau trong nh\u1eadn di\u1ec7n v\u0103n b\u1ea3n GitHub] https:\/\/github.com\/opendatalab\/MinerU[opendatalab.github.io\u9ad8\u6548\u7801\u519c .\n- Ph\u00e1t hi\u1ec7n v\u00e0 lo\u1ea1i b\u1ecf c\u00e1c y\u1ebfu t\u1ed1 kh\u00f4ng c\u1ea7n thi\u1ebft nh\u01b0 ti\u00eau \u0111\u1ec1, ch\u00e2n trang, ch\u00fa th\u00edch ch\u00e2n trang, s\u1ed1 trang \u2013 gi\u00fap n\u1ed9i dung r\u00f5 r\u00e0ng h\u01a1n\n- G...","contents":"## Ch\u1ee9c n\u0103ng OCR & Ph\u00e2n t\u00edch t\u00e0i li\u1ec7u c\u1ee7a MinerU\n\n- **Ph\u00e1t hi\u1ec7n v\u00e0 x\u1eed l\u00fd OCR t\u1ef1 \u0111\u1ed9ng** cho c\u00e1c PDF b\u1ecb scan ho\u1eb7c v\u0103n b\u1ea3n kh\u00f4ng th\u1ec3 sao ch\u00e9p; h\u1ed7 tr\u1ee3 84 ng\u00f4n ng\u1eef kh\u00e1c nhau trong nh\u1eadn di\u1ec7n v\u0103n b\u1ea3n [GitHub] https:\/\/github.com\/opendatalab\/MinerU[opendatalab.github.io](https:\/\/opendatalab.github.io\/MinerU\/?utm_source=chatgpt.com)[\u9ad8\u6548\u7801\u519c](https:\/\/www.xugj520.cn\/en\/archives\/mineru-document-parsing-tool-pdf-markdown-conversion.html) .\n- **Ph\u00e1t hi\u1ec7n v\u00e0 lo\u1ea1i b\u1ecf c\u00e1c y\u1ebfu t\u1ed1 kh\u00f4ng c\u1ea7n thi\u1ebft** nh\u01b0 ti\u00eau \u0111\u1ec1, ch\u00e2n trang, ch\u00fa th\u00edch ch\u00e2n trang, s\u1ed1 trang \u2013 gi\u00fap n\u1ed9i dung r\u00f5 r\u00e0ng h\u01a1n \n- **Gi\u1eef c\u1ea5u tr\u00fac t\u00e0i li\u1ec7u nguy\u00ean b\u1ea3n**: bao g\u1ed3m ti\u00eau \u0111\u1ec1, \u0111o\u1ea1n v\u0103n, danh s\u00e1ch, th\u1ee9 t\u1ef1 \u0111\u1ecdc, \u0111a c\u1ed9t, layout ph\u1ee9c t\u1ea1p\n- **Nh\u1eadn di\u1ec7n v\u00e0 tr\u00edch xu\u1ea5t c\u00e1c th\u00e0nh ph\u1ea7n \u0111\u1eb7c bi\u1ec7t**:\n    - **Bi\u1ec3u th\u1ee9c to\u00e1n h\u1ecdc**: t\u1ef1 \u0111\u1ed9ng chuy\u1ec3n \u0111\u1ed5i sang LaTeX.\n    - **B\u1ea3ng bi\u1ec3u**: tr\u00edch xu\u1ea5t th\u00e0nh HTML ho\u1eb7c \u0111\u1ecbnh d\u1ea1ng t\u01b0\u01a1ng \u1ee9ng.\n    - **H\u00ecnh \u1ea3nh v\u00e0 ch\u00fa th\u00edch**: \u0111\u01b0\u1ee3c gi\u1eef l\u1ea1i v\u00e0 x\u1eed l\u00fd ph\u00f9 h\u1ee3p\n- **X\u00e1c \u0111\u1ecbnh PDF d\u1ea1ng scan ho\u1eb7c l\u1ed7i m\u00e3 h\u00f3a (garbled)** \u0111\u1ec3 ch\u1ecdn x\u1eed l\u00fd ph\u00f9 h\u1ee3p (OCR ho\u1eb7c tr\u00edch xu\u1ea5t v\u0103n b\u1ea3n tr\u1ef1c ti\u1ebfp) [ar5iv](https:\/\/ar5iv.labs.arxiv.org\/html\/2409.18839).\n- **Chuy\u1ec3n \u0111\u1ed5i \u0111\u1ea7u ra \u0111a d\u1ea1ng**: h\u1ed7 tr\u1ee3 xu\u1ea5t k\u1ebft qu\u1ea3 d\u01b0\u1edbi d\u1ea1ng Markdown (k\u1ec3 c\u1ea3 markdown \u0111a ph\u01b0\u01a1ng ti\u1ec7n\/NLP), JSON theo th\u1ee9 t\u1ef1 \u0111\u1ecdc v\u00e0 c\u00e1c \u0111\u1ecbnh d\u1ea1ng trung gian gi\u00e0u th\u00f4ng tin \n- **T\u0103ng t\u1ed1c ph\u1ea7n c\u1ee9ng**: ho\u1ea1t \u0111\u1ed9ng tr\u00ean CPU v\u00e0 h\u1ed7 tr\u1ee3 t\u0103ng t\u1ed1c GPU (CUDA), NPU (CANN), MPS tr\u00ean macOS\n- **H\u1ed7 tr\u1ee3 \u0111a n\u1ec1n t\u1ea3ng**: t\u01b0\u01a1ng th\u00edch Windows, Linux v\u00e0 macOS\n\n| \u0110i\u1ec1u kho\u1ea3n | Chi ti\u1ebft |\n| --- | --- |\n| **Chi ph\u00ed s\u1eed d\u1ee5ng** | Ho\u00e0n to\u00e0n mi\u1ec5n ph\u00ed trong giai \u0111o\u1ea1n beta, kh\u00f4ng b\u1eaft bu\u1ed9c tr\u1ea3 ti\u1ec1n ho\u1eb7c t\u1ea1o t\u00e0i kho\u1ea3n. |\n| **Gi\u1edbi h\u1ea1n s\u1eed d\u1ee5ng** | \u01afu ti\u00ean x\u1eed l\u00fd 2,000 trang m\u1ed7i ng\u00e0y, v\u01b0\u1ee3t \u0111\u00f3 s\u1ebd gi\u1ea3m \u0111\u1ed9 \u01b0u ti\u00ean; ch\u01b0a c\u00f3 quy \u0111\u1ecbnh gi\u1edbi h\u1ea1n v\u1ec1 s\u1ed1 trang hay chi ph\u00ed kh\u00e1c. |\n| **Beta testing** | MinerU \u0111ang trong giai \u0111o\u1ea1n th\u1eed nghi\u1ec7m, c\u00f3 th\u1ec3 \u0111i\u1ec1u ch\u1ec9nh gi\u1edbi h\u1ea1n theo t\u1ea3i h\u1ec7 th\u1ed1ng. |\n| **Kh\u00f4ng c\u00f3 g\u00f3i gi\u00e1** | Kh\u00f4ng c\u00f3 th\u00f4ng tin v\u1ec1 g\u00f3i tr\u1ea3 ph\u00ed ho\u1eb7c b\u1ea3n tr\u1ea3 ph\u00ed\u2014c\u00f3 th\u1ec3 l\u00e0 m\u00e3 ngu\u1ed3n m\u1edf v\u00e0 mi\u1ec5n ph\u00ed t\u1ea1i hi\u1ec7n t\u1ea1i. |\n\n# Model VLM:\n\n### Ti\u1ebfng vi\u1ec7t:\n\n![Screenshot_2025-08-12_at_09.54.54.png](https:\/\/images.viblo.asia\/7175741e-14e4-4d50-8214-db6f751729fb.png)\n\nTi\u1ebfng vi\u1ec7t b\u1ecb thi\u1ebfu d\u1ea5u\n\n![Screenshot_2025-08-12_at_09.56.32.png](https:\/\/images.viblo.asia\/761e20aa-a829-4cc0-a5ac-31252ad1eceb.png)\n\ndetect \u1ea3nh v\u1edbi text l\u1ed9n x\u1ed9n, kh\u00f4ng ch\u00ednh x\u00e1c\n\n### Ti\u1ebfng Nh\u1eadt:\n\n\n![Screenshot_2025-08-12_at_10.14.06.png](https:\/\/images.viblo.asia\/f4645801-2eda-4c0f-84ab-5cb8783df49c.png)\ntext b\u1ecb \u0111\u1ea3o v\u1ecb tr\u00ed\n\n![Screenshot_2025-08-12_at_10.17.50.png](https:\/\/images.viblo.asia\/f1bdf8ea-5a85-4cc9-b666-a955880ad692.png)\n\nmiss text\n\n![Screenshot_2025-08-12_at_10.20.04.png](https:\/\/images.viblo.asia\/dc19eda3-cdb6-4b49-89a1-9298bb9c3a2d.png)\n\n\n### Ti\u1ebfng anh:\n\n![Screenshot_2025-08-12_at_11.16.44.png](https:\/\/images.viblo.asia\/b205c568-45b0-41c8-b535-d86f77bea603.png)\n\n|  |  |  |  |  |\n| --- | --- | --- | --- | --- |\n| Adoption, entry into force & date of taking effect of Special Areas |  |  |  |  |\n| Special Areas | Adopted \\# | Date of Entry into Force | In Effect From |  |\n| Annex I: Oil |  |  |  |  |\n| Mediterranean Sea | 2 Nov 1973 | 2 Oct 1983 | 2 Oct 1983 |  |\n| Baltic Sea | 2 Nov 1973 | 2 Oct 1983 | 2 Oct 1983 |  |\n| Black Sea | 2 Nov 1973 | 2 Oct 1983 | 2 Oct 1983 |  |\n| Red Sea | 2 Nov 1973 | 2 Oct 1983 | \\* |  |\n| \"Gulfs\" area | 2 Nov 1973 | 2 Oct 1983 | 1 Aug 2008 |  |\n| Gulf of Aden | 1 Dec 1987 | 1 Apr 1989 | \\* |  |\n| Antarctic area | 16 Nov 1990 | 17 Mar 1992 | 17 Mar 1992 |  |\n| North West European Waters | 25 Sept 1997 | 1 Feb 1999 | 1 Aug 1999 |  |\n| Oman area of the Arabian Sea | 15 Oct 2004 | 1 Jan 2007 | \\* |  |\n| Southern South African waters | 13 Oct 2006 | 1 Mar 2008 \\*\\* | 1 Aug 2008 |  |\n| Annex II: Noxious Liquid Substances |  |  |  |  |\n| Antarctic area | 30 Oct 1992 | 1 Jul 1994 | 1 Jul 1994 |  |\n| Annex V: Garbage |  |  |  |  |\n| Mediterranean Sea | 2 Nov 1973 | 31 Dec 1988 | \\* |  |\n| Baltic Sea | 2 Nov 1973 | 31 Dec 1988 | 1 Oct 1989 |  |\n| Black Sea | 2 Nov 1973 | 31 Dec 1988 | \\* |  |\n| Red Sea | 2 Nov 1973 | 31 Dec 1988 | \\* |  |\n| \"Gulfs\" area | 2 Nov 1973 | 31 Dec 1988 | 1 Aug 2008 |  |\n| North Sea | 17 Oct 1989 | 18 Feb 1991 | 18 Feb 1991 |  |\n| Antarctic area (south of latitude 60 degrees south) | 16 Nov 1990 | 17 Mar 1992 | 17 Mar 1992 |  |\n| Wider Caribbean region including the Gulf of Mexico and the Caribbean Sea | 4 July 1991 | 4 Apr 1993 | \\* |  |\n| Annex VI: Prevention of air pollution by ships (SOx Emission Control Areas) |  |  |  |  |\n| Baltic Sea | 26 Sept 1997 | 19 May 2005 | 19 May 2006 |  |\n| North Sea | 22 July 2005 | 22 Nov 2006 | 22 Nov 2007 |  |\n|  |  |  |  |  |\n\nX\u1eed l\u00fd d\u1eef li\u1ec7u b\u1ea3ng  \u0111\u01a1n gi\u1ea3n kh\u00e1 t\u1ed1t\n\n![93f12c07b9fb94f4641020fe1bc0d4fac51c7750befe8a563ce74ff573c8ca09.jpg](https:\/\/images.viblo.asia\/6de06b1c-7010-48d1-a03d-bf31b374f75f.jpg)\n\n|  |  |  |\n| --- | --- | --- |\n| Type of garbage | Ships outside special areas | Ships within special areas |\n| Food waste comminuted or ground | Discharge permitted \u2265 3 nm from the nearest land, en route and as far as practicable | Discharge permitted \u2265 12 nm from the nearest land, en route and as far as practicable |\n| Food waste not comminuted or ground | Discharge permitted \u2265 12 nm from the nearest land, en route and as far as practicable | Discharge Prohibited |\n| Cargo residues\\* not contained in wash water | Discharge permitted \u2265 12 nm from the nearest land, en route and as far as practicable | Discharge Prohibited |\n| Cargo residues\\* contained in wash water |  |  |\n| Cargo residues\\* contained in wash water |  |  |\n| Cleaning agents and additives\\*\\* contained in cargo hold wash water | Discharge permitted | Discharge permitted \u2265 12 nm from the nearest land, en route and as far as practicable and subject to two additional conditions |\n| Cleaning agents and additives\\*\\* in deck and external surfaces wash water |  | Discharge permitted |\n| All other garbage including plastics, synthetic ropes, fishing gear, plastic garbage bags, incinerator ashes, clinkers, cooking oil, floating dummage, lining and packing materials, paper, rags, glass, metal, bottles, crockery and similar refuse | Discharge Prohibited | Discharge Prohibited |\n| Mixed garbage | Discharge Prohibited |  |\n![table_fe0a5bcc-0e4a-404c-ad26-2b8266ae0863.png](https:\/\/images.viblo.asia\/cfd708a2-9823-4c82-8a72-b80a449755ca.png)\n|  |  |  |\n| --- | --- | --- |\n| Ship area (this should be completed for areas particularly susceptible to biofouling) | Planned management action (i.e.g., inspections, cleaning, repairs and maintenance) | Management action if ship Operates outside its usual operating profile (like Hot, Cold layup, longwaiting) |\n| External hull surfaces: |  |  |\n| Vertical sides | 1)Inspection by Ship-every 6 Months\\* 2)Inwater or Drydocking cleaning \\*\\* | 1)Inspection at shorter intervals, not less then 2 months 2)Inwater or drydocking cleaning \\*\\* |\n| Flats | 1)Inwater or Drydocking cleaning \\*\\* | 1)Inwater or Drydocking cleaning \\*\\* |\n| Boottop | 1)Inspection by Ship-every 6 Months\\* 2)Inwater or Drydocking cleaning | 1)Inspection at shorter intervals, not less then 3 months 2)Inwater or drydocking cleaning |\n| Bow | 1)Inspection by Ship-every 6 Months 2)Cleaning by Fresh water\/scrapping 3)Cleaning in drydocking | 1)Inspection at shorter intervals, not less then 3 months 2)Cleaning by Fresh water\/scrapping 3)Cleaning in drydocking |\n| Transom | 1)Inspection by Ship-every 6 Months 2)Cleaning by Fresh water\/scrapping 3)Cleaning in drydocking | 1)Inspection at shorter intervals, not less then 3 months 2)Cleaning by Fresh water\/scrapping 3)Cleaning in drydocking |\n| Underwater Hull parts and fittings: |  |  |\n| Bilge keels | 1)Cleaning Inwater(if found necessary) 2)Cleaning in drydocking | 1)Inwater Inspection when found necessary 2)Cleaning Inwater when found necessary 3)Cleaning in drydocking |\n| CP anodes | 1)Inspection and replacement in Drydocking | 1)Inspection and replacement in Drydocking |\n| Docking keel blocks stripes on flat bottom | Apply alternative block arrangement every docking, for treatment of stripes from previous dock | After long cold layup, apply full treatment of block stripes by shifting the blocks. |\n\n![Screenshot_2025-08-12_at_13.52.28.png](https:\/\/images.viblo.asia\/6be9d4e0-b84a-44fc-82ea-2121439cd882.png)\n\nX\u1eed l\u00fd c\u00f4ng th\u1ee9c t\u1ed1t\n\n### Ti\u1ebfng \u0110\u00e0i loan: \n\n![Screenshot_2025-08-12_at_10.45.29.png](https:\/\/images.viblo.asia\/6ec7b26f-6614-4fc2-9acb-c8f44c8996e4.png)\n\nmiss text\n\n### Ti\u1ebfng H\u00e0n : \n\n![Screenshot_2025-08-12_at_11.23.42.png](https:\/\/images.viblo.asia\/076e31ba-3724-4006-a946-63e9024035af.png)\n\n|  |  |  |  |  |  |  |\n| --- | --- | --- | --- | --- | --- | --- |\n| Bai | Ch\u00f9 d\u00e9\/Thinh hu\u1ed1ng | K\u1ef3 n\u00fang | Ng\u1eef ph\u00e1p | T\u1eeb v\u00f9ng | Ph\u00e1t \u00e2m | V\u00e1n ho\u00e1 |\n| 09 | \uc9d1 Nh\u00e0 c\u1ee7a | Moi kh\u00e1ch v\u00e0 ho\u00e0ng \u0111\u00e0i \u0111\u01b0\u1eddng \u0111i | (\uc73c)\ub85c -(ph\u01b0\u01a1ng hu\u1ed1ng), -(\uc73c)\uadfc\ub798\uc694, \ub3c4 | T\u1eeb chi phuong hu\u1ed1ng, nh\u00e0 c\u1ee7a v\u00e0 \u0111\u00f3 gia d\u1ee5ng, n\u01a1i ch\u1ed1n(2) | Ph\u00e1t \u00e2m e | Nh\u00e0 c\u1ee7a \u1edf H\u00e0n Qu\u1ed1c |\n| 10 | \uac00\uc871 Gia \u0111\u00ecnh | Gi\u1edbi thi\u1ec7u gia \u0111\u00ecnh, c\u00f9ng c\u1ea5p th\u00f4ng tin, nh\u1eadn th\u00f4ng tin | \u0110\u1ecbnh t\u1eeb s\u1ed1(2), \uc81c\uc11c, -(\uc73c)\uc2dc-, gi\u00e1n l\u01b0\u1ee3c \u314b | Gia \u0111\u00ecnh, ngh\u1ec7 nghi\u1ec7p(2), t\u1eeb v\u00f9ng li\u00ean quan \u0111\u1ebfn ngh\u1ec7 nghi\u1ec7p | Ph\u1ee5 \u00e2m(2) | Xung h\u00f4 trong gia \u0111\u00ecnh ng\u01b0\u1eddi H\u00e0n Qu\u1ed1c |\n| 11 | \ub0a8\uc11c Th\u00f3i ti\u1ebft | C\u00e1c bi\u1ec3u hi\u1ec7n th\u00f3i ti\u1ebft, n\u01a1i s\u1ebd k\u1ebf ho\u1ea1ch c\u1ee7a m\u00ecnh | -\uace0, \ubd80\ud130 ~\uae4c\uc9c0, -(\uc73c)\uadfc \uac70\uc608\uc694, b\u1ea5t quy t\u1eafc c\u1ee7a \u3142 | Mua, th\u00f3i ti\u1ebft, t\u1eeb v\u00f9ng li\u00ean quan \u0111\u1ebfn th\u00f3i ti\u1ebft, nhi\u1ec7t \u0111\u1ed9 kh\u00f4ng kh\u00ed | Am thanh m\u00f4n(3) | B\u1ed1n m\u00f9a \u1edf H\u00e0n Qu\u1ed1c |\n| 12 | \uc804\ud654(1) \u0110i\u1ec7n tho\u1ea1i(1) | Goi \u0111\u1ebfn tho\u1ea1i, n\u00f3i m\u1ee5c \u0111\u00edch | \uc5d0\uac8c\u00b7\ud55c\ud14c\u00b7\uc81c, -\uc9c0\ub9cc, -(\uc73c)\ub77c\uace0 \ud558\ub2e4 | T\u1eeb li\u00ean quan \u0111\u1ebfn \u0111i\u1ec7n tho\u1ea1i, bi\u1ec3u hi\u1ec7n li\u00ean quan \u0111\u1ebfn \u0111i\u1ec7n tho\u1ea1i, g\u1ecdi \u0111i\u1ec7n tho\u1ea1i | Ph\u1ee5 \u00e2m(3): Am l\u01b0\u1edbt | S\u1ed1 \u0111i\u1ec7n tho\u1ea1i th\u00fa v\u1ecb |\n| 13 | \uc601\uc5ed Sinh nh\u1eadt | Ch\u00fac m\u1eebng, gi\u1ea3i th\u00edch l\u00fd do | -\uc544\/\uc5b4\uc11c, -(\uc73c)\uadfc\uae4c\uc694, \ubabb | T\u1eeb v\u00f9ng v\u1ebf sinh nh\u1eadt, t\u1eeb v\u00f9ng v\u1ebf qu\u1ea3 c\u00e1p | Am thanh v\u00f2m | Ti\u1ec7c sinh nh\u1eadt \u0111\u1eb7c bi\u1ec7t c\u1ee7a ng\u01b0\u1eddi H\u00e0n-Th\u00f3i n\u00f3i-(sinh nh\u1eadt \u0111\u1ea5y n\u0103m) |\n| 14 | \uc704\ubbf8 S\u00f4 th\u00edch | N\u00f3i v\u00e9 c\u00e1i m\u00ecnh c\u00f3 th\u1ec3 l\u00e0m \u0111\u01b0\u1ee3c n\u00f3i v\u00e9 s\u1edf th\u00edch | -(\uc73c)\ub85c \uc218 \uc788\ub2e4 \/\uc5c6\ub2e4, -\uae30\/--\ub294 \uac83, b\u1ea5t quy t\u1eafc c\u1ee7a \u3137 | M\u00f3n th\u1ec3 thao, s\u1edf th\u00edch, t\u1ea5n su\u1ea5t, bi\u1ec3u hi\u1ec7n kh\u1ea3 n\u0103ng | Ph\u1ee5 \u00e2m(4): Am m\u0169i | Th\u00fa vui c\u1ee7a ng\u01b0\u1eddi H\u00e0n Qu\u1ed1c |\n| 15 | \uad50\ud1b5(1) Giao th\u00f4ng(1) | N\u00f3i v\u00e9 sinh ho\u1ea1t h\u00e0ng ng\u00e0y, s\u1eed d\u1ee5ng c\u00e1c ph\u01b0\u01a1ng ti\u1ec7n giao th\u00f4ng c\u00f4ng c\u1ed9ng | \uc5d0\uc11c ~\uae4c\uc9c0, (\uc73c)\ub85c -(\uc73c)\ub9ac \uac00\ub2e4 | Ph\u01b0\u01a1ng ti\u1ec7n giao th\u00f4ng(1), ph\u00f3 t\u1eeb nghi v\u1ea5n, t\u1eeb v\u00f9ng li\u00ean quan \u0111\u1ebfn giao th\u00f4ng | Am b\u1eaft h\u01a1i(2) | Ph\u01b0\u01a1ng ti\u1ec7n giao th\u00f4ng c\u00f4ng c\u1ed9ng c\u1ee7a H\u00e0n Qu\u1ed1c |\n\n![Screenshot_2025-08-12_at_11.48.46.png](https:\/\/images.viblo.asia\/fc0f8e0f-e0c2-4465-8e17-b913612f7be5.png)\n\n|  |  |  |  |  |\n| --- | --- | --- | --- | --- |\n| No. | \ud55c\uae00 | English | \uc608\ubb38 | Example |\n| 1 | \uc774\/\uac00 | is \\[subject particle\\] | \uc774\ub984\uc774 \ubb50\uc608\uc694? | What is your name? |\n|  |  |  | \ub0a0\uc528\uac00 \uc88b\uc544\uc694. | The weather is good. |\n| 2 | \uc740\/\ub294 | is \/ am \\[topic particle\\] | \uc120\uc0dd\ub2d8\uc740 \uc9c0\uae08 \uc548 \uacc4\uc138\uc694. | The teacher is not here now. |\n|  |  |  | \uc800\ub294 \ubbf8\uad6d\uc0ac\ub78c\uc774\uc5d0\uc694. | I am an American. |\n| 3 | \uc744\/\ub97c | \\[object particle\\] | \ucc45\uc744 \uc788\uc5b4\uc694. | I am reading a book. |\n|  |  |  | \ud0dd\uc2dc\ub97c \ubd88\ub7ec \uc8fc\uc138\uc694. | Please, call a taxi. |\n| 4 | \uc640\/\uacfc | and | \ud1a0\ubbf8 \uc528\uc640 \uce5c\uad6c\uc608\uc694. | Tommy and I are friends. |\n|  |  |  | \uc18c\uc124\ucc45\uacfc \uad50\uacfc\uc11c\ub97c \uac00\uc838\uc654\uc5b4\uc694. | I brought a novel and a textbook. |\n| 5 | (\uc774)\ub791 | and | \uc124\ub801\ud0d5\uc774\ub791 \uae40\ubc25 \uc8fc\uc138\uc694. | Please, give me seoulleongtang and kimbap. |\n| 6 | (\uc774)\ub791 | with | \uce5c\uad6c\ub791 \uac19\uc774 \uc654\uc5b4\uc694. | I came with a friend. |\n| 7 | \ud558\uace0 | and | \uc591\ub150 \uce58\ud0a8\ud558\uace0 \ub9e5\uc8fc \uc8fc\uc138\uc694. | Please, give me yangnyeom chicken and beer. |\n| 8 | \ub3c4 | also \/ as well | \ub0b4\uc77c\ub3c4 \uc624\ub298\ub3c4 \ube44\uac00 \uc640\uc694. | It is raining also today and tomorrow. |\n| 9 | \uc5d0 | to | \ub0a8\ub300\ubb38 \uc9c0\uc815\uc5d0 \uac00\uace0 \uc2f6\uc5b4\uc694. | I want to go to Namaaemun market. |\n| 10 | \uc5d0\uc11c | from | \uacf5\ud56d\uc5d0\uc11c \uc9c0\ud558\ucca0 \ud0c0\uace0 \uc654\uc5b4\uc694. | I came by subway from the airport. |\n| 11 | \uae4c\uc9c0 | until | \uac15\ub0a8\uae4c\uc9c0 \uac00\uace0 \uc2f6\uc5b4\uc694. | I want to go until Gangnam. |\n| 12 | \ubd80\ud130 | from | \uc9c0\ud558\ucca0\uc740 \uc544\uce68 5\uc2dc\ubd80\ud130 \uc6b4\uc601\ud574\uc694. | The subway operates from 5 am in the morning. |\n| 13 | (\uc73c)\ub85c | to | \uc800\ub294 \ud559\uad50\ub85c \uac00\ub294 \uae38\uc774\uc5d0\uc694. | I am on my way to school. |\n|  |  |  | \uc800\ub294 \ubd80\uc0b0\uc73c\ub85c \uac00\uc694. | I am going to Busan. |\n\n### Ti\u1ebfng Th\u00e1i : \n\n![Screenshot_2025-08-12_at_11.51.09.png](https:\/\/images.viblo.asia\/d76b28a6-d676-41b6-8b3c-45d73930d341.png)![Screenshot_2025-08-12_at_11.51.59.png](https:\/\/images.viblo.asia\/1f72825a-034a-4ea7-bead-3fda0624a480.png)\n![Screenshot_2025-08-12_at_11.51.59.png](https:\/\/images.viblo.asia\/962f62a7-3c23-4ed4-89b0-26cfe50443b1.png)\n\n|  |  |  |  |\n| --- | --- | --- | --- |\n| English | Thai | English | Thai |\n| Essentials |  | Conversation |  |\n| 39 - Happy New Year! | \\- \u0e24\u0e0a\u0e0a\u0e31\u0e48\u0e19\u0e19\u0e34\u0e42\u0e02\u0e30\u0e1e\u0e31\u0e19\u0e18\u0e4c \\[ Suk San Wan Pimai Kha \\] | 47 - Hello. How are you? | \\- \u0e24\u0e0a\u0e0a\u0e31\u0e48\u0e19\u0e19\u0e34\u0e42\u0e02\u0e30\u0e1e\u0e31\u0e19\u0e18\u0e4c \\[ Sawatdi Kha , Sabai Di Mai Kha \\] |\n| 40 - Happy New Year! | \\- \u0e24\u0e0a\u0e0a\u0e31\u0e48\u0e19\u0e19\u0e34\u0e42\u0e02\u0e30\u0e1e\u0e31\u0e19\u0e18\u0e4c \\[ Sut San Wan Pimai Khrap \\] | 48 - Hello. How are you? | \\- \u0e24\u0e0a\u0e0a\u0e31\u0e48\u0e19\u0e19\u0e34\u0e42\u0e02\u0e30\u0e1e\u0e31\u0e19\u0e18\u0e4c \\[ Sawatdi Khrap , Sabai Di Mai Khrap \\] |\n| 41 - Happy birthday! | \\- \u0e24\u0e0a\u0e0a\u0e31\u0e48\u0e19\u0e19\u0e34\u0e42\u0e02\u0e30\u0e1e\u0e31\u0e19\u0e18\u0e4c \\[ Suk San Wan Koet Kha \\] | 49 - Hello. I'm fine, thank you | \\- \u0e24\u0e0a\u0e0a\u0e31\u0e48\u0e19\u0e19\u0e34\u0e42\u0e02\u0e30\u0e1e\u0e31\u0e19\u0e18\u0e4c \\[ Sawatdi Khrap , Phom Sabai Di Khrap \\] |\n| 42 - Happy birthday! | \\- \u0e24\u0e0a\u0e0a\u0e31\u0e48\u0e19\u0e19\u0e34\u0e42\u0e02\u0e30\u0e1e\u0e31\u0e19\u0e18\u0e4c \\[ Suk San Wan Koet Khrap \\] | 50 - Hello. I'm fine, thank you | \\- \u0e24\u0e0a\u0e0a\u0e31\u0e48\u0e19\u0e19\u0e34\u0e42\u0e02\u0e30\u0e1e\u0e31\u0e19\u0e18\u0e4c \\[ Sawatdi Kha, Dichan Sabai Di Kha \\] |\n| 43 - Happy holiday! | \\- \u0e02\u0e22\u0e44\u0e2b\u0e0a\u0e0d\u0e32\u0e19\u0e38\u0e01\u0e30 \\[ Kho Hai Sanuk na Kha \\] | 51 - Do you speak Thai? | \\- \u0e24\u0e0a\u0e0a\u0e0a\u0e38\u0e01\u0e30\u0e1e\u0e31\u0e19\u0e18\u0e4c \\[ Khun Phut Phasa Thai Mai Kha \\] |\n| 44 - Happy holiday! | \\- \u0e02\u0e22\u0e44\u0e2b\u0e0a\u0e0d\u0e30\u0e1e\u0e31\u0e19\u0e18\u0e4c \\[ Kho Hai Sanuk na Khrap \\] | 52 - No, I don't speak Thai | \\- \u0e02\u0e22\u0e44\u0e2b\u0e0a\u0e38\u0e01\u0e30\u0e1e\u0e31\u0e19\u0e18\u0e4c \\[ Mai Khrap, Phom Mai Phut Phasa Thai \\] |\n| 45 - Congratulations! | \\- \u0e02\u0e32\u0e19\u0e28\u0e34\u0e29\u0e22\u0e4c\u0e02\u0e32\u0e19\u0e30 \\[ Yindi Dual na Kha \\] | 53 - No, I don't speak Thai | \\- \u0e02\u0e32\u0e19\u0e28\u0e34\u0e29\u0e22\u0e4c\u0e02\u0e32\u0e19\u0e30 \\[ Mai Kha, Dichan Mai Phut Phasa Thai \\] |\n| 46 - Congratulations! | \\- \u0e02\u0e32\u0e19\u0e28\u0e34\u0e29\u0e22\u0e4c\u0e02\u0e32\u0e19\u0e30 \\[ Yindi Dual na Khrap \\] | 54 - Only a little bit | \\- \u0e02\u0e32\u0e19\u0e28\u0e34\u0e29\u0e22\u0e4c\u0e02\u0e32\u0e19\u0e30 \\[ Nitnoi Korpor Khrap \\] |\n| 55 - Only a little bit | \\- \u0e02\u0e32\u0e19\u0e28\u0e34\u0e29\u0e22\u0e4c\u0e02\u0e32\u0e19\u0e30 \\[ Nitnoi Korpor Kha \\] | 56 - Which country are you from? | \\- \u0e02\u0e32\u0e19\u0e28\u0e34\u0e29\u0e22\u0e4c\u0e02\u0e32\u0e19\u0e30 \\[ Khun Ma Chak Prathet Nai Kha \\] |\n\n### Ti\u1ebfng Trung : \n\n![table_aa1195f2-5869-48fe-a4cb-ec158ce58f29 1.png](https:\/\/images.viblo.asia\/e52f0c09-a950-450b-96f5-510d89140133.png)\n\n|  |  |  |\n| --- | --- | --- |\n| \u5f20\u4e1c | \u79bb\u8d77\u98de\u8fd8\u65e9\u5462! L\u00ed q\u01d0f\u0113i h\u00e1i z\u0101o ne! | C\u00f2n l\u00e2u n\u1eefa m\u00e1y bay m\u1edbi c\u1eaft c\u00e1nh. |\n| \u739b\u4e3d | \u6211\u4eec\u53bb\u5019\u673a\u5ba4\u5750\u4e00\u4f1a\u513f\u3002 W\u01d2men q\u00f9 h\u00f2u j\u012b sh\u00ec zu\u00f2 y\u012bhu\u012bf\u00e8r. | Ch\u00fang m\u00ecnh \u0111\u1ebfn ph\u00f2ng ch\u1edd ng\u1ed3i ngh\u1ec9 ch\u00fat \u0111i. |\n| \u5c0f\u5170 | \u5f20\u4e3d\u82f1\u8fd8\u6ca1\u6765\u3002 Zh\u0101ngliy\u012bng h\u00e1i m\u00e9i l\u00e1i | Tr\u01b0\u01a1ng L\u1ec7 Anh v\u1eabn ch\u01b0a \u0111\u1ebfn. |\n| \u5f20\u4e1c | \u4f60\u770b\uff01\u5979\u8dd1\u6765\u4e86\u3002\u563f\uff0c\u5728\u8fd9\u513f\u5462\u3002 N\u01d0 k\u00e0n! T\u0101 p\u01ceo l\u00e1ile. H\u0113i, z\u00e0i zh\u00e8r ne. | Nhin kia, c\u1eadu \u1ea5y \u0111\u1ebfn r\u1ed3i. Hey, ch\u00fang m\u00ecnh \u1edf \u0111\u00e2y. |\n| \u5f20\u4e3d\u82f1 | \u8f66\u592a\u6324\uff0c\u803d\u8bef\u4e86\u65f6\u95f4\u3002\u6211\u6765\u665a\u4e86\u3002 Ch\u0113 t\u00e0i j\u01d0, d\u0101nw\u00f9le sh\u00edji\u0101n. W\u01d2 l\u00e1i w\u01cenle. | Xe \u0111\u00f4ng qu\u00e1, th\u1eadt m\u1eaft th\u1eddi gian, m\u00ecnh \u0111\u1ebfn mu\u1ed9n. |\n| \u5f20\u4e1c | \u4e0d\u665a\uff0c\u4f60\u6765\u7684\u6b63\u5408\u9002\u3002 B\u00f9 w\u01cen, n\u01d0 l\u00e1i de zh\u00e8ng h\u00e9sh\u00ec. | Kh\u00f4ng mu\u1ed9n, c\u1eadu \u0111\u1ebfn \u0111\u00fang l\u00fac m\u00e0! |\n| \u5c0f\u5170 | \u8d70\u5427\uff01\u54ce\u5440\uff0c\u4f60\u8dd1\u5f97\u90fd\u51fa\u6c57\u4e86\u3002 Z\u01d2u ba! \u0101iy\u0101, n\u01d0 p\u01ceo de d\u014du ch\u012b h\u00e0nle | \u0110i th\u00f4i! \u00d3i, c\u1eadu ch\u1ea1y \u0111\u1ebfn n\u1ed7i to\u00e1t h\u00e9t m\u1ecf h\u00f4i r\u1ed3i n\u00e0y. |\n| \u739b\u4e3d | \u5feb\u5750\u4e0b\u3002\u559d\u70b9\u513f\u51b7\u996e\u5427! Ku\u00e0i zu\u00f2 xi\u00e0. H\u0113 di\u01cenr l\u011bngy\u01d0n ba! | Ng\u00f2i xu\u1ed1ng \u0111\u1ea7y. U\u1ed5ng ch\u00fat n\u01b0\u1edbc m\u00e1t nh\u00e9! |\n| \u5f20\u4e1c | \u4f60\u6ca1\u628a\u62a4\u7167\u653e\u5728\u7bb1\u5b50\u91cc\u5427\u3002 N\u01d0 m\u00e9i b\u01ce h\u00f9zh\u00e0o f\u00e0ng z\u00e0i xi\u0101ngzi l\u01d0 ba. | C\u1eadu kh\u00f4ng d\u1ec5 h\u1ed9 chi\u1ebfu trong vali \u0111\u00e2y ch\u1ee9? |\n| \u739b\u4e3d | \u6211\u968f\u8eab\u5e26\u7740\u5462\u3002 W\u01d2 su\u00edsh\u0113n d\u00e0i zhe ne. | M\u00ecnh l\u00fac n\u00e0o c\u0169ng mang b\u00ean ng\u01b0\u1eddi \u0111\u00e2y. |\n\n\n\n## K\u1ebft lu\u1eadn\n\n- **X\u00e1c \u0111\u1ecbnh nh\u1ea7m gi\u1eefa \u201ctext\u201d v\u00e0 \u201c\u1ea3nh\u201d**: C\u00f3 tr\u01b0\u1eddng h\u1ee3p h\u1ec7 th\u1ed1ng nh\u1ea7m h\u00ecnh \u1ea3nh th\u00e0nh v\u0103n b\u1ea3n (v\u00e0 ng\u01b0\u1ee3c l\u1ea1i), d\u1eabn \u0111\u1ebfn l\u1ed7i nh\u1eadn di\u1ec7n c\u1ea5u tr\u00fac t\u00e0i li\u1ec7u.\n- **Nh\u1eadn di\u1ec7n kh\u00f4ng ch\u00ednh x\u00e1c \u1edf m\u1ed9t s\u1ed1 ng\u00f4n ng\u1eef**:\n    - **Ti\u1ebfng Th\u00e1i**: K\u1ebft qu\u1ea3 kh\u00f4ng t\u1ed1t, nhi\u1ec1u l\u1ed7i k\u00fd t\u1ef1 v\u00e0 kh\u00f4ng \u0111\u00fang ng\u1eef ngh\u0129a.\n    - **Ti\u1ebfng Vi\u1ec7t**: C\u00f3 hi\u1ec7n t\u01b0\u1ee3ng **thi\u1ebfu d\u1ea5u**, m\u1ed9t s\u1ed1 ch\u1eef b\u1ecb sai.\n    - **Ti\u1ebfng Nh\u1eadt**: Text b\u1ecb **\u0111\u1ea3o v\u1ecb tr\u00ed**, c\u00f3 ph\u1ea7n b\u1ecb **b\u1ecf s\u00f3t**.\n    - **B\u1ea3ng bi\u1ec3u**: Trong m\u1ed9t s\u1ed1 tr\u01b0\u1eddng h\u1ee3p, b\u1ea3ng b\u1ecb nh\u1eadn di\u1ec7n nh\u1ea7m th\u00e0nh h\u00ecnh \u1ea3nh .\n    - **T\u00e1i c\u1ea5u tr\u00fac**:form , c\u00f4ng th\u1ee9c, b\u1ea3ng bi\u1ec3u ph\u1ee9c t\u1ea1p t\u01b0\u01a1ng \u0111\u1ed1i t\u1ed1t","published_at":"2026-04-14T05:55:18.000000Z","scheduled_publish_at":null,"is_published":true,"is_shared":false,"updated_at":"2026-04-14T16:15:02.000000Z","edited_at":"2026-04-14T06:40:48.000000Z","translation_source":null,"trend_at":null,"promoted_at":null,"reading_time":3,"points":0,"views_count":24,"clips_count":0,"comments_count":0,"rated_value":null,"promoted":false,"trending":false,"is_draft":false,"is_public":true,"locale_code":"vi","is_video":false,"thumbnail_url":"https:\/\/images.viblo.asia\/325666c3-22cd-4b91-b6c1-636e9e3a9f0e.png","user":{"data":{"id":185779,"url":"https:\/\/viblo.asia\/u\/quynhvuong","avatar":"007a6df0-0b43-4b1e-a63c-8adc8321d8df.png","name":"Quynh Vuong","username":"quynhvuong","followers_count":0,"reputation":4,"posts_count":-1,"banned_at":null,"level_partner":null,"following":false}},"tags":{"data":[{"slug":"ocr","name":"ocr"},{"slug":"mineru","name":"MinerU"}]},"commentators":{"data":[]}},{"id":92730,"title":"Elasticsearch l\u00e0 g\u00ec","slug":"1XVOWObpVMz","url":"https:\/\/viblo.asia\/p\/elasticsearch-la-gi-1XVOWObpVMz","user_id":2943,"moderation":null,"transliterated":"elasticsearch-la-gi","contents_short":"Elasticsearch l\u00e0 m\u1ed9t c\u00f4ng c\u1ee5 t\u00ecm ki\u1ebfm v\u00e0 ph\u00e2n t\u00edch d\u1eef li\u1ec7u ph\u00e2n t\u00e1n, m\u00e3 ngu\u1ed3n m\u1edf, \u0111\u01b0\u1ee3c x\u00e2y d\u1ef1ng tr\u00ean n\u1ec1n t\u1ea3ng Apache Lucene. N\u00f3 \u0111\u01b0\u1ee3c thi\u1ebft k\u1ebf \u0111\u1ec3 ho\u1ea1t \u0111\u1ed9ng theo th\u1eddi gian th\u1ef1c (near real-time), cho ph\u00e9p b\u1ea1n l\u01b0u tr\u1eef, t\u00ecm ki\u1ebfm v\u00e0 ph\u00e2n t\u00edch c\u00e1c t\u1eadp d\u1eef li\u1ec7u kh\u1ed5ng l\u1ed3 m\u1ed9t c\u00e1ch c\u1ef1c k\u1ef3 nhanh ch\u00f3ng.\n\nD\u01b0\u1edbi \u0111\u00e2y l\u00e0 nh\u1eefng \u0111\u1eb7c \u0111i\u1ec3m c\u1ed1t l\u00f5i gi\u00fap b\u1ea1n h\u00ecnh dung v\u1ec1 s\u1ee9c m\u1ea1nh c\u1ee7a c\u00f4ng c\u1ee5 n\u00e0y:\n\n1. C\u01a1 ch\u1ebf ho\u1ea1t \u0111\u1ed9ng: ...","contents":"Elasticsearch l\u00e0 m\u1ed9t c\u00f4ng c\u1ee5 t\u00ecm ki\u1ebfm v\u00e0 ph\u00e2n t\u00edch d\u1eef li\u1ec7u ph\u00e2n t\u00e1n, m\u00e3 ngu\u1ed3n m\u1edf, \u0111\u01b0\u1ee3c x\u00e2y d\u1ef1ng tr\u00ean n\u1ec1n t\u1ea3ng Apache Lucene. N\u00f3 \u0111\u01b0\u1ee3c thi\u1ebft k\u1ebf \u0111\u1ec3 ho\u1ea1t \u0111\u1ed9ng theo th\u1eddi gian th\u1ef1c (near real-time), cho ph\u00e9p b\u1ea1n l\u01b0u tr\u1eef, t\u00ecm ki\u1ebfm v\u00e0 ph\u00e2n t\u00edch c\u00e1c t\u1eadp d\u1eef li\u1ec7u kh\u1ed5ng l\u1ed3 m\u1ed9t c\u00e1ch c\u1ef1c k\u1ef3 nhanh ch\u00f3ng.\n\nD\u01b0\u1edbi \u0111\u00e2y l\u00e0 nh\u1eefng \u0111\u1eb7c \u0111i\u1ec3m c\u1ed1t l\u00f5i gi\u00fap b\u1ea1n h\u00ecnh dung v\u1ec1 s\u1ee9c m\u1ea1nh c\u1ee7a c\u00f4ng c\u1ee5 n\u00e0y:\n\n1. C\u01a1 ch\u1ebf ho\u1ea1t \u0111\u1ed9ng: T\u1ed1c \u0111\u1ed9 nh\u1edd \"Inverted Index\"\nThay v\u00ec t\u00ecm ki\u1ebfm t\u1eebng d\u00f2ng v\u0103n b\u1ea3n nh\u01b0 c\u00e1c c\u01a1 s\u1edf d\u1eef li\u1ec7u truy\u1ec1n th\u1ed1ng (SQL), Elasticsearch s\u1eed d\u1ee5ng c\u1ea5u tr\u00fac d\u1eef li\u1ec7u g\u1ecdi l\u00e0 Inverted Index (Ch\u1ec9 m\u1ee5c \u0111\u1ea3o ng\u01b0\u1ee3c).\n\nH\u00e3y t\u01b0\u1edfng t\u01b0\u1ee3ng n\u00f3 gi\u1ed1ng nh\u01b0 m\u1ee5c l\u1ee5c \u1edf cu\u1ed1i m\u1ed9t cu\u1ed1n s\u00e1ch: Thay v\u00ec \u0111\u1ecdc h\u1ebft cu\u1ed1n s\u00e1ch \u0111\u1ec3 t\u00ecm m\u1ed9t t\u1eeb, b\u1ea1n ch\u1ec9 c\u1ea7n tra m\u1ee5c l\u1ee5c \u0111\u1ec3 bi\u1ebft t\u1eeb \u0111\u00f3 n\u1eb1m \u1edf trang n\u00e0o. \u0110i\u1ec1u n\u00e0y gi\u00fap vi\u1ec7c t\u00ecm ki\u1ebfm to\u00e0n v\u0103n (Full-text search) tr\u1edf n\u00ean si\u00eau t\u1ed1c.\n\n2. C\u00e1c kh\u00e1i ni\u1ec7m c\u01a1 b\u1ea3n (So s\u00e1nh v\u1edbi SQL)\n\u0110\u1ec3 d\u1ec5 hi\u1ec3u h\u01a1n, b\u1ea1n c\u00f3 th\u1ec3 so s\u00e1nh c\u00e1c th\u00e0nh ph\u1ea7n c\u1ee7a Elasticsearch v\u1edbi c\u00e1c kh\u00e1i ni\u1ec7m trong c\u01a1 s\u1edf d\u1eef li\u1ec7u quan h\u1ec7 truy\u1ec1n th\u1ed1ng:\n\nElasticsearch\tRelational DB (SQL)\tM\u00f4 t\u1ea3\nIndex\tDatabase\tN\u01a1i l\u01b0u tr\u1eef c\u00e1c t\u00e0i li\u1ec7u c\u00f3 \u0111\u1eb7c \u0111i\u1ec3m chung.\nDocument\tRow (D\u00f2ng)\t\u0110\u01a1n v\u1ecb th\u00f4ng tin c\u01a1 b\u1ea3n, \u0111\u01b0\u1ee3c l\u01b0u d\u01b0\u1edbi d\u1ea1ng JSON.\nField\tColumn (C\u1ed9t)\tC\u00e1c thu\u1ed9c t\u00ednh c\u1ee7a t\u00e0i li\u1ec7u (v\u00ed d\u1ee5: t\u00ean, ng\u00e0y th\u00e1ng).\nMapping\tSchema\t\u0110\u1ecbnh ngh\u0129a ki\u1ec3u d\u1eef li\u1ec7u cho c\u00e1c Field.\n3. T\u1ea1i sao n\u00ean d\u00f9ng Elasticsearch?\nT\u1ed1c \u0111\u1ed9 ph\u1ea3n h\u1ed3i c\u1ef1c nhanh: Kh\u1ea3 n\u0103ng t\u00ecm ki\u1ebfm g\u1ea7n nh\u01b0 t\u1ee9c th\u00ec ngay c\u1ea3 khi d\u1eef li\u1ec7u l\u00ean \u0111\u1ebfn h\u00e0ng t\u1ef7 b\u1ea3n ghi.\n\nKh\u1ea3 n\u0103ng m\u1edf r\u1ed9ng (Scalability): Elasticsearch ch\u1ea1y tr\u00ean m\u1ed9t c\u1ee5m (Cluster) g\u1ed3m nhi\u1ec1u m\u00e1y ch\u1ee7 (Nodes). Khi d\u1eef li\u1ec7u t\u0103ng l\u00ean, b\u1ea1n ch\u1ec9 c\u1ea7n th\u00eam m\u00e1y ch\u1ee7 v\u00e0o c\u1ee5m m\u00e0 kh\u00f4ng l\u00e0m gi\u00e1n \u0111o\u1ea1n h\u1ec7 th\u1ed1ng.\n\nH\u1ed7 tr\u1ee3 t\u00ecm ki\u1ebfm m\u1edd (Fuzzy Search): N\u00f3 c\u00f3 th\u1ec3 hi\u1ec3u v\u00e0 tr\u1ea3 v\u1ec1 k\u1ebft qu\u1ea3 ngay c\u1ea3 khi ng\u01b0\u1eddi d\u00f9ng g\u00f5 sai ch\u00ednh t\u1ea3 ho\u1eb7c t\u00ecm ki\u1ebfm theo ng\u1eef ngh\u0129a.\n\nRESTful API: B\u1ea1n c\u00f3 th\u1ec3 t\u01b0\u01a1ng t\u00e1c v\u1edbi Elasticsearch th\u00f4ng qua c\u00e1c c\u00e2u l\u1ec7nh HTTP (GET, POST, PUT, DELETE), gi\u00fap vi\u1ec7c t\u00edch h\u1ee3p v\u00e0o c\u00e1c \u1ee9ng d\u1ee5ng .NET, Java hay PHP tr\u1edf n\u00ean r\u1ea5t \u0111\u01a1n gi\u1ea3n.\n\n4. H\u1ec7 sinh th\u00e1i ELK Stack\nElasticsearch th\u01b0\u1eddng kh\u00f4ng \u0111\u1ee9ng m\u1ed9t m\u00ecnh m\u00e0 n\u1eb1m trong b\u1ed9 ba ELK Stack, gi\u1ea3i ph\u00e1p h\u00e0ng \u0111\u1ea7u \u0111\u1ec3 qu\u1ea3n l\u00fd v\u00e0 ph\u00e2n t\u00edch log:\n\nLogstash\/Beats: Thu th\u1eadp v\u00e0 x\u1eed l\u00fd d\u1eef li\u1ec7u t\u1eeb nhi\u1ec1u ngu\u1ed3n.\n\nElasticsearch: L\u01b0u tr\u1eef v\u00e0 l\u1eadp ch\u1ec9 m\u1ee5c d\u1eef li\u1ec7u.\n\nKibana: Giao di\u1ec7n \u0111\u1ed3 h\u1ecda \u0111\u1ec3 tr\u1ef1c quan h\u00f3a d\u1eef li\u1ec7u (bi\u1ec3u \u0111\u1ed3, b\u1ea3n \u0111\u1ed3, dashboard).\n\n5. \u1ee8ng d\u1ee5ng th\u1ef1c t\u1ebf\nT\u00ecm ki\u1ebfm tr\u00ean trang th\u01b0\u01a1ng m\u1ea1i \u0111i\u1ec7n t\u1eed: G\u1ee3i \u00fd s\u1ea3n ph\u1ea9m, l\u1ecdc theo thu\u1ed9c t\u00ednh (m\u00e0u s\u1eafc, gi\u00e1 c\u1ea3).\nPh\u00e2n t\u00edch Log h\u1ec7 th\u1ed1ng: Theo d\u00f5i l\u1ed7i (Error logs) ho\u1eb7c l\u01b0u l\u01b0\u1ee3ng truy c\u1eadp theo th\u1eddi gian th\u1ef1c.\nGi\u00e1m s\u00e1t h\u1ea1 t\u1ea7ng: Theo d\u00f5i hi\u1ec7u n\u0103ng c\u1ee7a c\u00e1c server trong h\u1ec7 th\u1ed1ng ph\u1ea7n m\u1ec1m l\u1edbn.\n\nChi ti\u1ebft b\u1ea1n [xem \u1edf \u0111\u00e2y nh\u00e9.](https:\/\/laptrinhvacuocsong.com\/tro-chuyen\/27\/260414112000000206\/elasticsearch-la-gi)","published_at":"2026-04-14T04:22:14.000000Z","scheduled_publish_at":null,"is_published":true,"is_shared":false,"updated_at":"2026-04-14T16:16:01.000000Z","edited_at":"2026-04-14T04:21:53.000000Z","translation_source":null,"trend_at":null,"promoted_at":null,"reading_time":3,"points":0,"views_count":27,"clips_count":0,"comments_count":0,"rated_value":null,"promoted":false,"trending":false,"is_draft":false,"is_public":true,"locale_code":"vi","is_video":false,"thumbnail_url":"https:\/\/images.viblo.asia\/8a7da788-b209-414a-aff9-7b1cd1a04b6a.png","user":{"data":{"id":2943,"url":"https:\/\/viblo.asia\/u\/tieudoan208","avatar":"b095e4ca-b686-447b-a8e8-4093b283f055.webp","name":"laptrinhvacuocsong","username":"tieudoan208","followers_count":0,"reputation":4,"posts_count":1,"banned_at":null,"level_partner":null,"following":false}},"tags":{"data":[{"slug":"aspnetcore","name":"aspnetcore"},{"slug":"elasticsearch","name":"Elasticsearch"}]},"commentators":{"data":[]}},{"id":92725,"title":"Ngh\u1ec7 Thu\u1eadt Vi\u1ebft Tool CLI: T\u1ea1m Bi\u1ec7t M\u1edb H\u1ed7n \u0110\u1ed9n process.argv C\u00f9ng yargs","slug":"ZoJje1rE4Y7","url":"https:\/\/viblo.asia\/p\/nghe-thuat-viet-tool-cli-tam-biet-mo-hon-don-processargv-cung-yargs-ZoJje1rE4Y7","user_id":182653,"moderation":null,"transliterated":"nghe-thuat-viet-tool-cli-tam-biet-mo-hon-don-processargv-cung-yargs","contents_short":"Chuy\u1ec7n k\u1ec3 r\u1eb1ng, c\u00f3 m\u1ed9t ng\u00e0y \u0111\u1eb9p tr\u1eddi, Tech Lead giao cho m\u00ecnh vi\u1ebft m\u1ed9t c\u00e1i script Node.js \u0111\u1ec3 d\u1ecdn d\u1eb9p data r\u00e1c trong Database. Y\u00eau c\u1ea7u l\u00e0 script ph\u1ea3i nh\u1eadn v\u00e0o c\u00e1c tham s\u1ed1 \u0111\u1ec3 bi\u1ebft n\u00ean d\u1ecdn d\u1eb9p \u1edf m\u00f4i tr\u01b0\u1eddng n\u00e0o, v\u00e0 c\u00f3 b\u1eadt ch\u1ebf \u0111\u1ed9 \"x\u00f3a th\u1eadt\" hay kh\u00f4ng.\n\nM\u00ecnh h\u1ed3n nhi\u00ean g\u00f5 l\u1ec7nh ch\u1ea1y:\n\nnode cleanup.js --env=production --force\n\nSau \u0111\u00f3, \u1edf trong code, m\u00ecnh vi\u1ebft m\u1ed9t \u0111o\u1ea1n logic \u0111\u1ea7y \"m\u1ed3 h\u00f4i n\u01b0\u1edbc m\u1eaft\" nh\u01b0 th\u1ebf ...","contents":"Chuy\u1ec7n k\u1ec3 r\u1eb1ng, c\u00f3 m\u1ed9t ng\u00e0y \u0111\u1eb9p tr\u1eddi, Tech Lead giao cho m\u00ecnh vi\u1ebft m\u1ed9t c\u00e1i script Node.js \u0111\u1ec3 d\u1ecdn d\u1eb9p data r\u00e1c trong Database. Y\u00eau c\u1ea7u l\u00e0 script ph\u1ea3i nh\u1eadn v\u00e0o c\u00e1c tham s\u1ed1 \u0111\u1ec3 bi\u1ebft n\u00ean d\u1ecdn d\u1eb9p \u1edf m\u00f4i tr\u01b0\u1eddng n\u00e0o, v\u00e0 c\u00f3 b\u1eadt ch\u1ebf \u0111\u1ed9 \"x\u00f3a th\u1eadt\" hay kh\u00f4ng.\n\nM\u00ecnh h\u1ed3n nhi\u00ean g\u00f5 l\u1ec7nh ch\u1ea1y:\n\n`node cleanup.js --env=production --force`\n\nSau \u0111\u00f3, \u1edf trong code, m\u00ecnh vi\u1ebft m\u1ed9t \u0111o\u1ea1n logic \u0111\u1ea7y \"m\u1ed3 h\u00f4i n\u01b0\u1edbc m\u1eaft\" nh\u01b0 th\u1ebf n\u00e0y \u0111\u1ec3 h\u1ee9ng tham s\u1ed1:\n\n```\n\/\/ T\u01b0 duy \"th\u1ee3 g\u00f5\" - Kh\u1ed5 d\u00e2m v\u1edbi process.argv\nconst args = process.argv.slice(2);\nlet env = 'development'; \/\/ default\nlet isForce = false;\n\nargs.forEach(arg => {\n    if (arg.startsWith('--env=')) {\n        env = arg.split('=')[1];\n    }\n    if (arg === '--force') {\n        isForce = true;\n    }\n});\n\nconsole.log(`\u0110ang ch\u1ea1y d\u1ecdn d\u1eb9p \u1edf m\u00f4i tr\u01b0\u1eddng: ${env}, force: ${isForce}`);\n```\n\n\u0110o\u1ea1n code ch\u1ea1y \u0111\u01b0\u1ee3c. Nh\u01b0ng c\u00e1i \"vibe\" c\u1ee7a n\u00f3 th\u1ef1c s\u1ef1 r\u1ea5t... ph\u00e8n!\nL\u1ee1 ng\u01b0\u1eddi d\u00f9ng nh\u1eadp thi\u1ebfu d\u1ea5u `=`, hay h\u1ecd nh\u1eadp `-e prod` thay v\u00ec `--env=production,` ho\u1eb7c h\u1ecd nh\u1eadp sai t\u00ean bi\u1ebfn th\u00ec sao? Code c\u1ee7a m\u00ecnh s\u1ebd l\u1ee7ng l\u1ed7 ch\u1ed7 ngay l\u1eadp t\u1ee9c. Ch\u01b0a k\u1ec3, n\u1ebfu sau n\u00e0y tool c\u00f3 th\u00eam 10 tham s\u1ed1 n\u1eefa, `\u0111o\u1ea1n if...else` tr\u00ean s\u1ebd bi\u1ebfn th\u00e0nh m\u1ed9t b\u00e3i r\u00e1c th\u1ef1c s\u1ef1.\n\n\u0110\u00f3 l\u00e0 l\u00fac m\u1ed9t Vibe Coder ph\u1ea3i t\u00ecm \u0111\u1ebfn \"ch\u00e2n \u00e1i\": Th\u01b0 vi\u1ec7n `yargs`.\n\n### 1. yargs l\u00e0 g\u00ec? K\u1ebb gom r\u00e1c si\u00eau vi\u1ec7t\n\nTrong Node.js, `process.argv` ch\u1ec9 tr\u1ea3 v\u1ec1 cho b\u1ea1n m\u1ed9t m\u1ea3ng chu\u1ed7i (Array of Strings) th\u00f4 k\u1ec7ch. yargs l\u00e0 m\u1ed9t th\u01b0 vi\u1ec7n sinh ra ch\u1ec9 \u0111\u1ec3 l\u00e0m m\u1ed9t vi\u1ec7c duy nh\u1ea5t: Nu\u1ed1t tr\u1ecdn c\u00e1i m\u1ea3ng chu\u1ed7i \u0111\u00f3, ph\u00e2n t\u00edch ng\u1eef ngh\u0129a (Parse) v\u00e0 tr\u1ea3 ra cho b\u1ea1n m\u1ed9t Object Javascript th\u01a1m tho, s\u1ea1ch s\u1ebd.\n\nC\u00e0i \u0111\u1eb7t c\u1ef1c k\u1ef3 nhanh g\u1ecdn:\n\n```\nnpm i yargs\n```\n\nH\u00e3y xem `yargs` th\u1ed5i bay \u0111o\u1ea1n code c\u1ef1c nh\u1ecdc ph\u00eda tr\u00ean nh\u01b0 th\u1ebf n\u00e0o:\n\n```\n\/\/ T\u01b0 duy Vibe Coder - Giao vi\u1ec7c cho yargs\nconst yargs = require('yargs\/yargs');\nconst { hideBin } = require('yargs\/helpers');\n\n\/\/ hideBin s\u1ebd t\u1ef1 \u0111\u1ed9ng c\u1eaft b\u1ecf 2 ph\u1ea7n t\u1eed th\u1eeba \u0111\u1ea7u ti\u00ean c\u1ee7a process.argv (l\u00e0 \u0111\u01b0\u1eddng d\u1eabn node v\u00e0 t\u00ean file)\nconst argv = yargs(hideBin(process.argv)).argv;\n\nconsole.log(argv);\n```\n\nGi\u1edd th\u1eed ch\u1ea1y l\u1ea1i l\u1ec7nh: `node cleanup.js --env=production --force --retries 3`\nK\u1ebft qu\u1ea3 argv in ra s\u1ebd l\u00e0 m\u1ed9t object ho\u00e0n h\u1ea3o:\n\n```\n{\n  _: [],\n  env: 'production',\n  force: true,\n  retries: 3,\n  '$0': 'cleanup.js'\n}\n```\n\nB\u1ea1n kh\u00f4ng c\u1ea7n ph\u1ea3i t\u1ef1 `split('=')`, kh\u00f4ng c\u1ea7n t\u1ef1 \u00e9p ki\u1ec3u sang s\u1ed1 cho `--retries 3`, v\u00e0 `--force` t\u1ef1 \u0111\u1ed9ng hi\u1ec3u l\u00e0 bi\u1ebfn `Boolean` mang gi\u00e1 tr\u1ecb `true`. M\u1ecdi th\u1ee9 m\u01b0\u1ee3t m\u00e0 nh\u01b0 m\u1ed9t ph\u00e9p m\u00e0u!\n\n### 2. S\u1ee9c m\u1ea1nh th\u1ef1c s\u1ef1: T\u1ea1o t\u00e0i li\u1ec7u (Documentation) t\u1ef1 \u0111\u1ed9ng\n\nM\u1ed9t Tool CLI \"chu\u1ea9n ch\u1ec9\" kh\u00f4ng ch\u1ec9 nh\u1eadn bi\u1ebfn \u0111\u00fang, m\u00e0 c\u00f2n ph\u1ea3i bi\u1ebft H\u01b0\u1edbng d\u1eabn s\u1eed d\u1ee5ng cho ng\u01b0\u1eddi kh\u00e1c (ho\u1eb7c cho ch\u00ednh b\u1ea1n 6 th\u00e1ng sau \u0111\u1ecdc l\u1ea1i). B\u1ea1n \u0111\u00e3 bao gi\u1edd g\u00f5 `git --help` ch\u01b0a? `yargs` cho ph\u00e9p b\u1ea1n l\u00e0m \u0111i\u1ec1u y h\u1ec7t ch\u1ec9 v\u1edbi v\u00e0i d\u00f2ng c\u1ea5u h\u00ecnh:\n\n```\nconst yargs = require('yargs\/yargs');\nconst { hideBin } = require('yargs\/helpers');\n\nconst argv = yargs(hideBin(process.argv))\n  .usage('S\u1eed d\u1ee5ng: $0 <command> [options]')\n  .option('e', {\n    alias: 'env',\n    describe: 'M\u00f4i tr\u01b0\u1eddng c\u1ea7n ch\u1ea1y (dev, staging, production)',\n    type: 'string',\n    choices: ['dev', 'staging', 'production'], \/\/ Ch\u1ec9 cho ph\u00e9p nh\u1eadp 3 ch\u1eef n\u00e0y\n    default: 'dev' \/\/ Kh\u00f4ng nh\u1eadp th\u00ec m\u1eb7c \u0111\u1ecbnh l\u00e0 dev\n  })\n  .option('f', {\n    alias: 'force',\n    describe: 'B\u1eadt ch\u1ebf \u0111\u1ed9 x\u00f3a th\u1eadt kh\u1ecfi Database',\n    type: 'boolean',\n    default: false\n  })\n  .demandOption(['env'], 'B\u1ea1n b\u1eaft bu\u1ed9c ph\u1ea3i cung c\u1ea5p m\u00f4i tr\u01b0\u1eddng \u0111\u1ec3 ch\u1ea1y script!') \/\/ \u00c9p bu\u1ed9c ph\u1ea3i c\u00f3\n  .help('h')\n  .alias('h', 'help')\n  .epilog('Copyright 2026 - Vibe Coder Series')\n  .argv;\n\nconsole.log(`Ti\u1ebfn h\u00e0nh d\u1ecdn d\u1eb9p t\u1ea1i: ${argv.env}`);\n```\n\nB\u00e2y gi\u1edd, n\u1ebfu c\u00f3 ai \u0111\u00f3 ng\u01a1 ng\u00e1c kh\u00f4ng bi\u1ebft d\u00f9ng tool c\u1ee7a b\u1ea1n v\u00e0 g\u00f5 `node cleanup.js --help`, `yargs` s\u1ebd t\u1ef1 \u0111\u1ed9ng in ra m\u00e0n h\u00ecnh terminal m\u1ed9t b\u1ea3ng h\u01b0\u1edbng d\u1eabn si\u00eau ng\u1ea7u:\n\n```\nS\u1eed d\u1ee5ng: cleanup.js <command> [options]\n\nOptions:\n  --version       Hi\u1ec3n th\u1ecb phi\u00ean b\u1ea3n                              [boolean]\n  -e, --env       M\u00f4i tr\u01b0\u1eddng c\u1ea7n ch\u1ea1y (dev, staging, production)  \n                  [string] [choices: \"dev\", \"staging\", \"production\"] [default: \"dev\"]\n  -f, --force     B\u1eadt ch\u1ebf \u0111\u1ed9 x\u00f3a th\u1eadt kh\u1ecfi Database              \n                  [boolean] [default: false]\n  -h, --help      Hi\u1ec3n th\u1ecb h\u01b0\u1edbng d\u1eabn s\u1eed d\u1ee5ng                      [boolean]\n\nCopyright 2026 - Vibe Coder Series\n```\n\n### 3. Chia \u0111\u1ec3 tr\u1ecb v\u1edbi .command()\n\nN\u1ebfu tool c\u1ee7a b\u1ea1n qu\u00e1 to, v\u00ed d\u1ee5 m\u1ed9t tool v\u1eeba c\u00f3 th\u1ec3 `migrate` (ch\u1ea1y script DB) v\u1eeba c\u00f3 th\u1ec3 `seed` (t\u1ea1o data gi\u1ea3). Vi\u1ec7c d\u1ed3n h\u1ebft tham s\u1ed1 v\u00e0o m\u1ed9t file l\u00e0 sai l\u1ea7m. `yargs` h\u1ed7 tr\u1ee3 thi\u1ebft k\u1ebf theo Command y nh\u01b0 c\u00e1c c\u00f4ng c\u1ee5 chuy\u00ean nghi\u1ec7p (Docker, AWS CLI...).\n\n```\nyargs(hideBin(process.argv))\n  .command(\n    'migrate [table]', \/\/ T\u00ean l\u1ec7nh\n    'Ch\u1ea1y migration cho database', \/\/ M\u00f4 t\u1ea3\n    (yargs) => { \/\/ C\u1ea5u h\u00ecnh tham s\u1ed1 ri\u00eang cho l\u1ec7nh n\u00e0y\n      yargs.positional('table', {\n        describe: 'T\u00ean b\u1ea3ng c\u1ea7n migrate',\n        default: 'all'\n      });\n    }, \n    (argv) => { \/\/ Logic th\u1ef1c thi khi g\u1ecdi l\u1ec7nh\n      console.log(`\u0110ang ch\u1ea1y migrate cho b\u1ea3ng: ${argv.table}`);\n    }\n  )\n  .demandCommand(1, 'B\u1ea1n ph\u1ea3i cung c\u1ea5p \u00edt nh\u1ea5t 1 l\u1ec7nh \u0111\u1ec3 ch\u1ea1y')\n  .parse();\n```\n\nCh\u1ea1y `node tool.js migrate users`, lu\u1ed3ng logic s\u1ebd t\u1ef1 \u0111\u1ed9ng chui \u0111\u00fang v\u00e0o h\u00e0m c\u1ee7a command `migrate`. Ki\u1ebfn tr\u00fac v\u00f4 c\u00f9ng g\u1ecdn g\u00e0ng!\n\n### L\u1eddi k\u1ebft\n\nVi\u1ebft code logic th\u00ec d\u1ec5, nh\u01b0ng vi\u1ebft m\u1ed9t c\u00e1i tool \u0111\u1ec3 nh\u1eefng ng\u01b0\u1eddi anh em Dev kh\u00e1c t\u1ea3i v\u1ec1, g\u00f5 g\u00f5 v\u00e0i ph\u00edm tr\u00ean Terminal l\u00e0 ch\u1ea1y m\u01b0\u1ee3t m\u00e0, c\u00f3 b\u00e1o l\u1ed7i khi nh\u1eadp sai, c\u00f3 h\u01b0\u1edbng d\u1eabn chi ti\u1ebft... \u0111\u00f3 m\u1edbi l\u00e0 \u0111\u1eb3ng c\u1ea5p c\u1ee7a s\u1ef1 tinh t\u1ebf. L\u1ea7n t\u1edbi, h\u00e3y qu\u0103ng `process.argv` v\u00e0o s\u1ecdt r\u00e1c v\u00e0 \u0111\u01b0a `yargs` v\u00e0o b\u1ed9 \u0111\u1ed3 ngh\u1ec1 m\u1eb7c \u0111\u1ecbnh c\u1ee7a b\u1ea1n nh\u00e9!\n\n**Ch\u1ee7 \u0111\u1ec1 ti\u1ebfp theo: C\u01a1n \u00c1c M\u1ed9ng C\u1ee7a Node.js - X\u1eed L\u00fd File CSV 10GB M\u00e0 Kh\u00f4ng B\u1ecb OOM (Out Of Memory)**\n\nCLI tool c\u1ee7a b\u1ea1n \u0111\u00e3 ngon l\u00e0nh, b\u1ea1n vi\u1ebft m\u1ed9t c\u00e1i script \u0111\u1ec3 \u0111\u1ecdc file b\u00e1o c\u00e1o doanh thu (.csv) v\u00e0 insert v\u00e0o Database. Ch\u1ea1y test v\u1edbi file 10MB, m\u01b0\u1ee3t. Mai kh\u00e1ch h\u00e0ng g\u1eedi cho m\u1ed9t file data th\u00f4 n\u1eb7ng... 10GB.\n\nB\u1ea1n d\u00f9ng fs.readFileSync('data.csv'). B\u00d9M! Terminal hi\u1ec7n d\u00f2ng ch\u1eef \u0111\u1ecf ch\u00f3t kinh \u0111i\u1ec3n: JavaScript heap out of memory. C\u1ea3 c\u00e1i tool v\u1ee1 v\u1ee5n v\u00ec Node.js kh\u00f4ng th\u1ec3 nh\u00e9t 10GB data v\u00e0o 1.5GB RAM m\u1eb7c \u0111\u1ecbnh c\u1ee7a n\u00f3 \u0111\u01b0\u1ee3c.\n\nV\u1eady m\u1ed9t Vibe Coder s\u1ebd l\u00e0m g\u00ec \u0111\u1ec3 x\u1eed l\u00fd c\u1ee5c data kh\u1ed5ng l\u1ed3 n\u00e0y m\u00e0 RAM v\u1eabn ch\u1ec9 nh\u1ecbp nh\u00e0ng \u1edf m\u1ee9c 50MB? \u1ede b\u00e0i vi\u1ebft t\u1edbi, m\u00ecnh s\u1ebd khai m\u1edf m\u1ed9t \"ma thu\u1eadt\" \u0111\u01b0\u1ee3c \u1ea9n gi\u1ea5u s\u00e2u b\u00ean trong Node.js: Node.js Streams. Anh em nh\u1edb follow \u0111\u1ec3 \u0111\u00f3n xem c\u00e1ch l\u00e0m d\u00f2ng ch\u1ea3y d\u1eef li\u1ec7u (Data Flow) m\u01b0\u1ee3t m\u00e0 nh\u01b0 n\u01b0\u1edbc c\u1ea5t nh\u00e9!","published_at":"2026-04-14T03:57:16.000000Z","scheduled_publish_at":null,"is_published":true,"is_shared":false,"updated_at":"2026-04-14T17:00:18.000000Z","edited_at":"2026-04-14T03:57:16.000000Z","translation_source":null,"trend_at":null,"promoted_at":null,"reading_time":5,"points":1,"views_count":23,"clips_count":0,"comments_count":1,"rated_value":null,"promoted":false,"trending":false,"is_draft":false,"is_public":true,"locale_code":"vi","is_video":false,"thumbnail_url":"https:\/\/images.viblo.asia\/00807384-7763-4571-ab87-2293862dc241.png","user":{"data":{"id":182653,"url":"https:\/\/viblo.asia\/u\/hhoang","avatar":"90700a59-6e71-4d6c-bff6-0223a4e007c4.jpg","name":"Nguy\u1ec5n Huy Ho\u00e0ng","username":"hhoang","followers_count":46,"reputation":2509,"posts_count":250,"banned_at":null,"level_partner":null,"following":false}},"tags":{"data":[{"slug":"javascript-nodejs","name":"javascript (nodejs)"},{"slug":"tooling","name":"tooling"},{"slug":"yargs","name":"yargs"}]},"commentators":{"data":[{"id":182653,"url":"https:\/\/viblo.asia\/u\/hhoang","avatar":"90700a59-6e71-4d6c-bff6-0223a4e007c4.jpg","name":"Nguy\u1ec5n Huy Ho\u00e0ng","username":"hhoang","followers_count":0,"reputation":0,"posts_count":0,"banned_at":null,"level_partner":null}]}},{"id":92722,"title":"L\u1eddi Nguy\u1ec1n Ph\u00e2n Trang: Khi OFFSET B\u00f3p Ngh\u1eb9t Database 10 Tri\u1ec7u B\u1ea3n Ghi","slug":"ZjJYWoKOVOE","url":"https:\/\/viblo.asia\/p\/loi-nguyen-phan-trang-khi-offset-bop-nghet-database-10-trieu-ban-ghi-ZjJYWoKOVOE","user_id":182653,"moderation":null,"transliterated":"loi-nguyen-phan-trang-khi-offset-bop-nghet-database-10-trieu-ban-ghi","contents_short":"M\u1ed9t bu\u1ed5i t\u1ed1i cu\u1ed1i tu\u1ea7n, h\u1ec7 th\u1ed1ng n\u1ed9i b\u1ed9 c\u1ee7a c\u00f4ng ty b\u1ed7ng d\u01b0ng gi\u1eadt lag tung ch\u1ea3o. Check Grafana, m\u00ecnh th\u1ea5y CPU c\u1ee7a con MySQL nh\u1ea3y v\u1ecdt l\u00ean 100%. L\u1ea7n theo slow query log, th\u1ee7 ph\u1ea1m hi\u1ec7n nguy\u00ean h\u00ecnh l\u00e0 m\u1ed9t c\u00e2u SQL ng\u1eafn c\u1ee7n:\n\nH\u1ecfi ra m\u1edbi bi\u1ebft, m\u1ed9t ch\u1ecb k\u1ebf to\u00e1n \u0111ang r\u1ea3nh r\u1ed7i n\u00ean ng\u1ed3i b\u1ea5m \"Next Page\" li\u00ean t\u1ee5c tr\u00ean trang qu\u1ea3n l\u00fd \u0111\u01a1n h\u00e0ng \u0111\u1ec3 l\u00f9i v\u1ec1 xem d\u1eef li\u1ec7u c\u1ee7a... 2 n\u0103m tr\u01b0\u1edbc. Ch\u1ecb \u1ea5y \u0111ang \u1edf trang th\u1ee9 2...","contents":"M\u1ed9t bu\u1ed5i t\u1ed1i cu\u1ed1i tu\u1ea7n, h\u1ec7 th\u1ed1ng n\u1ed9i b\u1ed9 c\u1ee7a c\u00f4ng ty b\u1ed7ng d\u01b0ng gi\u1eadt lag tung ch\u1ea3o. Check Grafana, m\u00ecnh th\u1ea5y CPU c\u1ee7a con MySQL nh\u1ea3y v\u1ecdt l\u00ean 100%. L\u1ea7n theo slow query log, th\u1ee7 ph\u1ea1m hi\u1ec7n nguy\u00ean h\u00ecnh l\u00e0 m\u1ed9t c\u00e2u SQL ng\u1eafn c\u1ee7n:\n\n```\nSELECT * FROM orders ORDER BY created_at DESC LIMIT 20 OFFSET 500000;\n```\n\n\nH\u1ecfi ra m\u1edbi bi\u1ebft, m\u1ed9t ch\u1ecb k\u1ebf to\u00e1n \u0111ang r\u1ea3nh r\u1ed7i n\u00ean ng\u1ed3i b\u1ea5m \"Next Page\" li\u00ean t\u1ee5c tr\u00ean trang qu\u1ea3n l\u00fd \u0111\u01a1n h\u00e0ng \u0111\u1ec3 l\u00f9i v\u1ec1 xem d\u1eef li\u1ec7u c\u1ee7a... 2 n\u0103m tr\u01b0\u1edbc. Ch\u1ecb \u1ea5y \u0111ang \u1edf trang th\u1ee9 25.000.\n\nTrong \u0111\u1ea7u anh em dev ch\u00fang ta t\u1eeb x\u01b0a \u0111\u1ebfn nay, c\u00f4ng th\u1ee9c ph\u00e2n trang (Pagination) m\u1eb7c \u0111\u1ecbnh lu\u00f4n l\u00e0:\n\n* C\u00f4ng th\u1ee9c: `OFFSET = (Page_Number - 1) * Limit`\n* V\u00ed d\u1ee5: Trang 3, m\u1ed7i trang 20 items -> `LIMIT 20 OFFSET 40`.\n\nN\u00f3 ch\u1ea1y c\u1ef1c k\u1ef3 m\u01b0\u1ee3t m\u00e0 \u1edf 100 trang \u0111\u1ea7u ti\u00ean. Nh\u01b0ng v\u1edbi t\u01b0 duy c\u1ee7a m\u1ed9t Vibe Coder, b\u1ea1n ph\u1ea3i hi\u1ec3u \u0111\u01b0\u1ee3c b\u1ea3n ch\u1ea5t v\u1eadt l\u00fd b\u00ean d\u01b0\u1edbi c\u00e2u l\u1ec7nh \u0111\u00f3 \u0111\u1ec3 th\u1ea5y n\u00f3 t\u00e0n ph\u00e1 Database kh\u1ee7ng khi\u1ebfp \u0111\u1ebfn m\u1ee9c n\u00e0o.\n\n### 1. S\u1ef1 th\u1eadt t\u00e0n kh\u1ed1c v\u1ec1 `LIMIT ... OFFSET`\n\nKhi b\u1ea1n ra l\u1ec7nh: **LIMIT 20 OFFSET 500000.**\n\nB\u1ea1n ngh\u0129 Database s\u1ebd th\u00f4ng minh nh\u1ea3y m\u1ed9t ph\u00e1t \u0111\u1ebfn d\u00f2ng th\u1ee9 500.000 v\u00e0 l\u1ea5y 20 d\u00f2ng ti\u1ebfp theo?\n\n**KH\u00d4NG! Database kh\u00f4ng h\u1ec1 bi\u1ebft bay!** B\u1ea3n ch\u1ea5t c\u1ee7a c\u00e1c h\u1ec7 qu\u1ea3n tr\u1ecb CSDL (nh\u01b0 MySQL, Postgres) khi g\u1eb7p l\u1ec7nh OFFSET l\u00e0 n\u00f3 ph\u1ea3i:\n\n1. \u0110\u1ecdc t\u1eeb d\u00f2ng \u0111\u1ea7u ti\u00ean.\n2. Qu\u00e9t qua \u0111\u1ee7 500.020 d\u00f2ng d\u1eef li\u1ec7u (ho\u1eb7c index).\n3. Sau \u0111\u00f3, n\u00f3 V\u1ee8T B\u1ece 500.000 d\u00f2ng \u0111\u1ea7u ti\u00ean.\n4. V\u00e0 tr\u1ea3 v\u1ec1 cho b\u1ea1n 20 d\u00f2ng cu\u1ed1i c\u00f9ng.\n\nC\u00e0ng b\u1ea5m sang c\u00e1c trang v\u1ec1 sau, \u0111\u1ed9 s\u00e2u c\u1ee7a OFFSET c\u00e0ng l\u1edbn, Database c\u00e0ng ph\u1ea3i \u0111\u1ecdc v\u00e0 v\u1ee9t \u0111i m\u1ed9t l\u01b0\u1ee3ng r\u00e1c kh\u1ed5ng l\u1ed3. Vi\u1ec7c n\u00e0y ti\u00eau t\u1ed1n CPU, ch\u1ecdc th\u1ee7ng Cache v\u00e0 l\u00e0m k\u1eb9t \u1ed5 c\u1ee9ng (Disk I\/O). \u0110\u00e2y g\u1ecdi l\u00e0 \u0111\u1ed9 ph\u1ee9c t\u1ea1p O(N).\n\n### 2. S\u1ef1 C\u1ee9u R\u1ed7i: Keyset Pagination (Ph\u00e2n Trang B\u1eb1ng Con Tr\u1ecf)\n\n\u0110\u1ec3 g\u1ee1 b\u1ecf l\u1eddi nguy\u1ec1n n\u00e0y, c\u00e1c \u00f4ng l\u1edbn nh\u01b0 Facebook, Twitter hay Google t\u1eeb l\u00e2u \u0111\u00e3 lo\u1ea1i b\u1ecf ki\u1ec3u ph\u00e2n trang b\u1eb1ng s\u1ed1 trang (Page 1, 2, 3...) \u1edf c\u00e1c danh s\u00e1ch d\u00e0i. H\u1ecd chuy\u1ec3n sang Infinite Scroll (Cu\u1ed9n v\u00f4 t\u1eadn) ho\u1eb7c n\u00fat \"T\u1ea3i th\u00eam\" (Load More).\n\nB\u00ean d\u01b0\u1edbi l\u1edbp v\u1ecf UI \u0111\u00f3 ch\u00ednh l\u00e0 k\u1ef9 thu\u1eadt `Keyset Pagination` (hay Cursor-based Pagination).\n\nThay v\u00ec n\u00f3i v\u1edbi Database: \"H\u00e3y b\u1ecf qua 500.000 d\u00f2ng\".\n\nCh\u00fang ta n\u00f3i: \"H\u00e3y l\u1ea5y cho tao 20 d\u00f2ng, b\u1eaft \u0111\u1ea7u T\u1eea C\u00c1I \u0110\u01a0N H\u00c0NG C\u00d3 ID N\u00c0Y tr\u1edf v\u1ec1 tr\u01b0\u1edbc\".\n\nC\u00e2u l\u1ec7nh SQL chu\u1ea9n Vibe Coder:\n\n```\nSELECT * FROM orders \nWHERE id < 8921503 -- \u0110\u00e2y ch\u00ednh l\u00e0 \"Cursor\" (ID c\u1ee7a item cu\u1ed1i c\u00f9ng \u1edf trang tr\u01b0\u1edbc)\nORDER BY id DESC \nLIMIT 20;\n```\n\n### 3. Ph\u00e9p M\u00e0u C\u1ee7a B-Tree Index\n\nT\u1ea1i sao c\u00e2u query tr\u00ean l\u1ea1i nhanh nh\u01b0 \u0111i\u1ec7n x\u1eb9t, d\u00f9 cho Database c\u00f3 100 tri\u1ec7u d\u00f2ng?\n\nV\u00ec l\u00fac n\u00e0y, m\u1ec7nh \u0111\u1ec1 `WHERE id < 8921503` \u0111\u00e3 t\u1eadn d\u1ee5ng t\u1ed1i \u0111a s\u1ee9c m\u1ea1nh c\u1ee7a B-Tree Index (nh\u01b0 m\u00ecnh \u0111\u00e3 gi\u1ea3i th\u00edch \u1edf b\u00e0i Exact Match).\n\n1. Database kh\u00f4ng c\u1ea7n \u0111\u1ecdc t\u1eeb \u0111\u1ea7u n\u1eefa.\n2. N\u00f3 d\u00f9ng Index \u0111\u1ec3 nh\u1ea3y d\u00f9 \u0111\u00e1nh b\u1ee5p m\u1ed9t ph\u00e1t ngay \u0111\u00fang c\u00e1i Node c\u00f3 ID 8921503 (\u0111\u1ed9 ph\u1ee9c t\u1ea1p `O(log N)` - m\u1ea5t ch\u01b0a t\u1edbi 1 mili-gi\u00e2y).\n3. T\u1eeb v\u1ecb tr\u00ed \u0111\u00f3, n\u00f3 nh\u1eb7t \u0111\u00fang 20 d\u00f2ng ti\u1ebfp theo v\u00e0 tr\u1ea3 v\u1ec1 ngay l\u1eadp t\u1ee9c. KH\u00d4NG C\u00d3 M\u1ed8T D\u00d2NG D\u1eee LI\u1ec6U N\u00c0O B\u1eca \u0110\u1eccC TH\u1eeaA V\u00c0 V\u1ee8T \u0110I!\n\n### 4. \u0110\u00e1nh \u0110\u1ed5i (Trade-offs) C\u1ee7a Keyset Pagination\n\nL\u00e0 m\u1ed9t Engineer, kh\u00f4ng c\u00f3 gi\u1ea3i ph\u00e1p n\u00e0o l\u00e0 vi\u00ean \u0111\u1ea1n b\u1ea1c (Silver bullet). Keyset Pagination tuy mang l\u1ea1i t\u1ed1c \u0111\u1ed9 b\u00e0n th\u1edd, nh\u01b0ng b\u1ea1n ph\u1ea3i ch\u1ea5p nh\u1eadn \u0111\u00e1nh \u0111\u1ed5i 2 th\u1ee9 \u1edf m\u1eb7t UI\/UX:\n\n* Kh\u00f4ng th\u1ec3 nh\u1ea3y c\u00f3c trang (Jump to Page): B\u1ea1n kh\u00f4ng th\u1ec3 cho ng\u01b0\u1eddi d\u00f9ng g\u00f5 s\u1ed1 \"Trang 50\" r\u1ed3i Enter \u0111\u01b0\u1ee3c n\u1eefa. B\u1eaft bu\u1ed9c ph\u1ea3i \u0111i tu\u1ea7n t\u1ef1 t\u1eebng trang b\u1eb1ng n\u00fat Next \/ Prev (v\u00ec ph\u1ea3i c\u00f3 ID c\u1ee7a trang tr\u01b0\u1edbc l\u00e0m \u0111i\u1ec3m t\u1ef1a).\n* C\u1ea7n m\u1ed9t c\u1ed9t Sort tu\u1ea7n t\u1ef1 (Sequential Sort Column): B\u1ea1n c\u1ea7n m\u1ed9t c\u1ed9t kh\u00f4ng bao gi\u1edd tr\u00f9ng l\u1eb7p v\u00e0 c\u00f3 t\u00ednh tu\u1ea7n t\u1ef1 \u0111\u1ec3 l\u00e0m Cursor. Th\u01b0\u1eddng l\u00e0 c\u1ed9t `id` (Auto Increment \/ Snowflake ID) ho\u1eb7c `created_at` (n\u1ebfu \u0111\u1ea3m b\u1ea3o kh\u00f4ng c\u00f3 2 record tr\u00f9ng t\u1eebng mili-gi\u00e2y).\n\n### L\u1eddi k\u1ebft\n\nN\u1ebfu d\u1ef1 \u00e1n c\u1ee7a b\u1ea1n ch\u1ec9 c\u00f3 v\u00e0i ng\u00e0n b\u1ea3n ghi (nh\u01b0 danh m\u1ee5c s\u1ea3n ph\u1ea9m, danh s\u00e1ch nh\u00e2n vi\u00ean), c\u1ee9 x\u00e0i LIMIT OFFSET cho nh\u00e0n, \u0111\u1ec3 Frontend l\u00e0m UI ph\u00e2n trang 1, 2, 3 cho \u0111\u1eb9p.\n\nNh\u01b0ng n\u1ebfu b\u1ea1n \u0111ang l\u00e0m vi\u1ec7c v\u1edbi B\u1ea3ng Log, B\u1ea3ng Giao D\u1ecbch, B\u1ea3ng Tin nh\u1eafn (Chat), hay News Feed... n\u01a1i d\u1eef li\u1ec7u sinh ra h\u00e0ng tri\u1ec7u d\u00f2ng m\u1ed7i ng\u00e0y, th\u00ec Keyset Pagination l\u00e0 con \u0111\u01b0\u1eddng b\u1eaft bu\u1ed9c. H\u00e3y b\u1ea3o v\u1ec7 Database c\u1ee7a b\u1ea1n tr\u01b0\u1edbc khi n\u00f3 b\u1ecb nh\u1eefng c\u00fa click \"Next Page\" v\u00f4 t\u1ed9i v\u1ea1 b\u00f3p ngh\u1eb9t nh\u00e9!\n\n**Ch\u1ee7 \u0111\u1ec1 ti\u1ebfp theo: Race Condition - Ma Thu\u1eadt \u0110en Khi 2 Ng\u01b0\u1eddi C\u00f9ng Mua 1 M\u00f3n \u0110\u1ed3 Cu\u1ed1i C\u00f9ng**\n\nTrong b\u00e0i n\u00e0y, Database c\u1ee7a b\u1ea1n \u0111\u00e3 an to\u00e0n tr\u01b0\u1edbc r\u1ee7i ro b\u1ecb qu\u00e1 t\u1ea3i do \u0111\u1ecdc (Read). Nh\u01b0ng \u1edf m\u1eb7t ghi (Write) th\u00ec sao?\n\nGi\u1ea3 s\u1eed kho c\u1ee7a b\u1ea1n ch\u1ec9 c\u00f2n \u0111\u00fang 1 chi\u1ebfc iPhone 15 Pro Max b\u1ea3n gi\u1edbi h\u1ea1n. V\u00e0o l\u00fac 12:00:00, c\u1ea3 2 kh\u00e1ch h\u00e0ng A v\u00e0 B c\u00f9ng b\u1ea5m \"Thanh to\u00e1n\" v\u00e0o \u0111\u00fang 1 mili-gi\u00e2y.\nC\u1ea3 hai lu\u1ed3ng code (Thread) c\u00f9ng ch\u1ea1y l\u1ec7nh: `SELECT stock FROM products`. C\u1ea3 hai \u0111\u1ec1u th\u1ea5y kho c\u00f2n 1 chi\u1ebfc. C\u1ea3 hai c\u00f9ng v\u01b0\u1ee3t qua v\u00f2ng `if (stock > 0)`, v\u00e0 c\u00f9ng tr\u1eeb kho.\nK\u1ebft qu\u1ea3: Kho b\u1ecb \u00e2m (-1), h\u1ec7 th\u1ed1ng n\u1ed5 tung, b\u1ed9 ph\u1eadn CSKH l\u1ea1i b\u1ecb \u0103n ch\u1eedi v\u00ec ph\u1ea3i \u0111i xin l\u1ed7i kh\u00e1ch.\n\n\u0110\u00e2y l\u00e0 l\u1ed7 h\u1ed5ng kinh \u0111i\u1ec3n mang t\u00ean Race Condition (T\u00ecnh tr\u1ea1ng t\u01b0\u01a1ng tranh). \u1ede b\u00e0i vi\u1ebft t\u1edbi, m\u00ecnh s\u1ebd \u0111\u1eadp tan con qu\u00e1i v\u1eadt n\u00e0y b\u1eb1ng ngh\u1ec7 thu\u1eadt s\u1eed d\u1ee5ng Database Locks (Pessimistic Lock & Optimistic Lock). C\u00f9ng \u0111\u00f3n \u0111\u1ecdc c\u00e1ch l\u00e0m sao \u0111\u1ec3 \u00e9p c\u00e1c lu\u1ed3ng code ph\u1ea3i x\u1ebfp h\u00e0ng ngay ng\u1eafn nh\u00e9!","published_at":"2026-04-14T02:42:03.000000Z","scheduled_publish_at":null,"is_published":true,"is_shared":false,"updated_at":"2026-04-14T17:00:18.000000Z","edited_at":"2026-04-14T02:42:03.000000Z","translation_source":null,"trend_at":null,"promoted_at":null,"reading_time":6,"points":2,"views_count":60,"clips_count":0,"comments_count":1,"rated_value":null,"promoted":false,"trending":false,"is_draft":false,"is_public":true,"locale_code":"vi","is_video":false,"thumbnail_url":"https:\/\/images.viblo.asia\/344bf4df-1a7f-4097-a5eb-d353adda1f05.png","user":{"data":{"id":182653,"url":"https:\/\/viblo.asia\/u\/hhoang","avatar":"90700a59-6e71-4d6c-bff6-0223a4e007c4.jpg","name":"Nguy\u1ec5n Huy Ho\u00e0ng","username":"hhoang","followers_count":46,"reputation":2509,"posts_count":250,"banned_at":null,"level_partner":null,"following":false}},"tags":{"data":[{"slug":"access-database","name":"access database"},{"slug":"pagination","name":"Pagination"},{"slug":"sqlperformancetuning","name":"SQLPerformanceTuning"}]},"commentators":{"data":[{"id":182653,"url":"https:\/\/viblo.asia\/u\/hhoang","avatar":"90700a59-6e71-4d6c-bff6-0223a4e007c4.jpg","name":"Nguy\u1ec5n Huy Ho\u00e0ng","username":"hhoang","followers_count":0,"reputation":0,"posts_count":0,"banned_at":null,"level_partner":null}]}},{"id":92720,"title":"Cache Stampede: Khi Redis \"Ph\u1ea3n L\u01b0\u1edbi Nh\u00e0\" & Hi\u1ec7u \u1ee8ng B\u1ea7y \u0110\u00e0n D\u1eabm \u0110\u1ea1p Database","slug":"G24B89kWLz3","url":"https:\/\/viblo.asia\/p\/cache-stampede-khi-redis-phan-luoi-nha-hieu-ung-bay-dan-dam-dap-database-G24B89kWLz3","user_id":182653,"moderation":null,"transliterated":"cache-stampede-khi-redis-phan-luoi-nha-hieu-ung-bay-dan-dam-dap-database","contents_short":"H\u00e3y t\u01b0\u1edfng t\u01b0\u1ee3ng h\u1ec7 th\u1ed1ng c\u1ee7a b\u1ea1n \u0111ang ch\u1ea1y m\u1ed9t chi\u1ebfn d\u1ecbch Flash Sale c\u1ef1c l\u1edbn. \u0110\u1ec3 b\u1ea3o v\u1ec7 con MySQL gi\u00e0 c\u1ed7i, b\u1ea1n \u00e1p d\u1ee5ng chi\u1ebfn thu\u1eadt chu\u1ea9n s\u00e1ch gi\u00e1o khoa: Cache to\u00e0n b\u1ed9 danh s\u00e1ch \"Top 100 S\u1ea3n ph\u1ea9m Sale\" v\u00e0o Redis v\u00e0 set TTL (h\u1ea1n s\u1eed d\u1ee5ng) l\u00e0 5 ph\u00fat.\nTrong 4 ph\u00fat 59 gi\u00e2y \u0111\u1ea7u ti\u00ean, h\u1ec7 th\u1ed1ng ch\u1ea1y m\u01b0\u1ee3t nh\u01b0 l\u1ee5a. Redis g\u00e1nh 10.000 requests m\u1ed7i gi\u00e2y (RPS), MySQL nh\u1ecbp tim \u1ed5n \u0111\u1ecbnh \u1edf m\u1ee9c 1%. B\u1ea1n t\u1ef1a l\u01b0ng v\u00e0...","contents":"H\u00e3y t\u01b0\u1edfng t\u01b0\u1ee3ng h\u1ec7 th\u1ed1ng c\u1ee7a b\u1ea1n \u0111ang ch\u1ea1y m\u1ed9t chi\u1ebfn d\u1ecbch Flash Sale c\u1ef1c l\u1edbn. \u0110\u1ec3 b\u1ea3o v\u1ec7 con MySQL gi\u00e0 c\u1ed7i, b\u1ea1n \u00e1p d\u1ee5ng chi\u1ebfn thu\u1eadt chu\u1ea9n s\u00e1ch gi\u00e1o khoa: Cache to\u00e0n b\u1ed9 danh s\u00e1ch \"Top 100 S\u1ea3n ph\u1ea9m Sale\" v\u00e0o Redis v\u00e0 set TTL (h\u1ea1n s\u1eed d\u1ee5ng) l\u00e0 5 ph\u00fat.\nTrong 4 ph\u00fat 59 gi\u00e2y \u0111\u1ea7u ti\u00ean, h\u1ec7 th\u1ed1ng ch\u1ea1y m\u01b0\u1ee3t nh\u01b0 l\u1ee5a. Redis g\u00e1nh 10.000 requests m\u1ed7i gi\u00e2y (RPS), MySQL nh\u1ecbp tim \u1ed5n \u0111\u1ecbnh \u1edf m\u1ee9c 1%. B\u1ea1n t\u1ef1a l\u01b0ng v\u00e0o gh\u1ebf, nh\u1ea5p m\u1ed9t ng\u1ee5m c\u00e0 ph\u00ea, t\u1eadn h\u01b0\u1edfng c\u00e1i \"vibe\" c\u1ee7a m\u1ed9t Senior Developer.\n\nNh\u01b0ng \u0111\u00fang v\u00e0o kho\u1ea3nh kh\u1eafc \u0111\u1ed3ng h\u1ed3 \u0111i\u1ec3m ph\u00fat th\u1ee9 5, Gi\u00e2y th\u1ee9 01... B\u00d9M!\n\nMySQL gi\u1eadt CPU l\u00ean 100%, Connection Pool c\u1ea1n ki\u1ec7t, Server b\u00e1o l\u1ed7i 500 `Internal Server Error` h\u00e0ng lo\u1ea1t.\n\nChuy\u1ec7n qu\u00e1i qu\u1ef7 g\u00ec v\u1eeba x\u1ea3y ra v\u1eady? Ch\u00e0o m\u1eebng b\u1ea1n \u0111\u1ebfn v\u1edbi th\u1ea3m h\u1ecda mang t\u00ean `Cache Stampede (Hi\u1ec7u \u1ee9ng b\u1ea7y \u0111\u00e0n)`, hay c\u00f2n g\u1ecdi l\u00e0 **Thundering Herd Problem (V\u1ea5n \u0111\u1ec1 \u0111\u00e0n tr\u00e2u s\u1ea5m s\u00e9t)**.\n\n### 1. Gi\u1ea3i ph\u1eabu m\u1ed9t v\u1ee5 d\u1eabm \u0111\u1ea1p\n\n\u0110\u1ec3 hi\u1ec3u t\u1ea1i sao h\u1ec7 th\u1ed1ng s\u1eadp, ch\u00fang ta soi k\u1ef9 v\u00e0o gi\u00e2y th\u1ee9 `01` \u0111\u00f3:\n\n1. \u0110\u00fang ph\u00fat th\u1ee9 5, TTL c\u1ee7a key `top_100_products` trong Redis h\u1ebft h\u1ea1n. Redis x\u00f3a key n\u00e0y \u0111i.\n2. Ngay mili-gi\u00e2y ti\u1ebfp theo, c\u00f3 5.000 user c\u00f9ng l\u00fac F5 trang web.\n3. 5.000 requests \u0111\u1eadp v\u00e0o Redis. C\u1ea3 5.000 requests \u0111\u1ec1u nh\u1eadn \u0111\u01b0\u1ee3c k\u1ebft qu\u1ea3 `Cache Miss` (Kh\u00f4ng t\u00ecm th\u1ea5y data).\n4. Theo logic th\u00f4ng th\u01b0\u1eddng: \"N\u1ebfu kh\u00f4ng th\u1ea5y trong Cache, h\u00e3y ch\u1ecdc xu\u1ed1ng Database l\u1ea5y data, r\u1ed3i l\u01b0u ng\u01b0\u1ee3c l\u1ea1i v\u00e0o Cache\".\n5. Th\u1ebf l\u00e0 5.000 requests \u0111\u00f3 \"n\u1eafm tay nhau\" lao th\u1eb3ng v\u00e0o MySQL c\u00f9ng m\u1ed9t mili-gi\u00e2y \u0111\u1ec3 ch\u1ea1y c\u00e2u query c\u1ef1c n\u1eb7ng.\n6. Database b\u1ecb \u0111\u1ea5m b\u1ea5t ng\u1edd v\u1edbi l\u1ef1c s\u00e1t th\u01b0\u01a1ng x5000. N\u00f3 s\u1eadp ngay l\u1eadp t\u1ee9c tr\u01b0\u1edbc khi k\u1ecbp tr\u1ea3 v\u1ec1 k\u1ebft qu\u1ea3 cho request \u0111\u1ea7u ti\u00ean \u0111\u1ec3 l\u01b0u v\u00e0o Redis.\n\nRedis l\u00fac n\u00e0y kh\u00f4ng nh\u1eefng kh\u00f4ng gi\u00fap b\u1ea3o v\u1ec7 DB, m\u00e0 c\u01a1 ch\u1ebf Expire (h\u1ebft h\u1ea1n) \u0111\u1ed3ng lo\u1ea1t c\u1ee7a n\u00f3 l\u1ea1i tr\u1edf th\u00e0nh m\u1ed3i l\u1eeda k\u00edch ho\u1ea1t qu\u1ea3 bom.\n\n### 2. Ngh\u1ec7 thu\u1eadt Ph\u00f2ng th\u1ee7 c\u1ee7a Vibe Coder: \"Kh\u00f3a Ph\u00e2n T\u00e1n\" (Distributed Lock)\n\nM\u1ed9t Vibe Coder kh\u00f4ng bao gi\u1edd \u0111\u1ec3 h\u1ec7 th\u1ed1ng ch\u1ea1y theo b\u1ea3n n\u0103ng. \u0110\u1ec3 tr\u1ecb \u0111\u00e1m \u0111\u00f4ng ho\u1ea3ng lo\u1ea1n, ch\u00fang ta c\u1ea7n m\u1ed9t \"Anh b\u1ea3o v\u1ec7\" ch\u1eb7n \u1edf c\u1eeda Database. K\u1ef9 thu\u1eadt n\u00e0y g\u1ecdi l\u00e0 **Mutex Lock (Kh\u00f3a \u0111\u1ed9c quy\u1ec1n)**.\n\n\u00dd t\u01b0\u1edfng r\u1ea5t \u0111\u01a1n gi\u1ea3n: Khi 5.000 requests c\u00f9ng nh\u1eadn \u0111\u01b0\u1ee3c `Cache Miss`, ta kh\u00f4ng cho c\u1ea3 5.000 th\u1eb1ng ch\u1ea1y xu\u1ed1ng DB. Ta ch\u1ec9 cho \u0111\u00fang 1 th\u1eb1ng xu\u1ed1ng DB th\u00f4i. 4.999 th\u1eb1ng c\u00f2n l\u1ea1i b\u1eaft bu\u1ed9c ph\u1ea3i \u0111\u1ee9ng ngo\u00e0i c\u1eeda ch\u1edd!\n\nTrong Redis, ch\u00fang ta d\u00f9ng l\u1ec7nh `SETNX` (Set if Not eXists) \u0111\u1ec3 t\u1ea1o kh\u00f3a:\n\n```\n\/\/ Pseudo-code minh h\u1ecda logic\n\nasync function getTopProducts() {\n    let data = await redis.get(\"top_100\");\n    if (data) return data; \/\/ Cache Hit -> Tr\u1ea3 v\u1ec1 ngay\n\n    \/\/ Cache Miss -> C\u1ed1 g\u1eafng gi\u00e0nh l\u1ea5y \"Kh\u00f3a b\u1ea3o v\u1ec7\"\n    const isLocked = await redis.setnx(\"lock_top_100\", \"locked\", \"EX\", 10); \/\/ Kh\u00f3a trong 10 gi\u00e2y\n    \n    if (isLocked) {\n        \/\/ M\u00ccNH L\u00c0 TH\u1eb0NG \u0110\u1ea6U TI\u00caN! \u0110\u01af\u1ee2C PH\u00c9P XU\u1ed0NG DB\n        data = await db.query(\"SELECT ...\");\n        await redis.set(\"top_100\", data, \"EX\", 300); \/\/ L\u01b0u l\u1ea1i cache 5 ph\u00fat\n        await redis.del(\"lock_top_100\"); \/\/ M\u1edf kh\u00f3a cho anh em kh\u00e1c\n        return data;\n    } else {\n        \/\/ 4999 TH\u1eb0NG \u0110\u1ebeN SAU -> KH\u00d4NG C\u00d3 KH\u00d3A\n        \/\/ \u0110\u1ee9ng ch\u1edd 50ms r\u1ed3i th\u1eed \u0111\u1ecdc l\u1ea1i Cache xem th\u1eb1ng \u0111\u1ea7u ti\u00ean l\u00e0m xong ch\u01b0a\n        await sleep(50);\n        return getTopProducts(); \/\/ \u0110\u1ec7 quy th\u1eed l\u1ea1i\n    }\n}\n```\n\nNh\u1edd \u1ed5 kh\u00f3a `SETNX` n\u00e0y, MySQL c\u1ee7a b\u1ea1n ch\u1ec9 ph\u1ea3i ch\u1ecbu \u0111\u00fang 1 query, trong khi 4.999 request kia ch\u1ec9 \u0111ang `sleep` nh\u1eb9 nh\u00e0ng tr\u00ean RAM c\u1ee7a Backend.\n\n### 3. C\u1ea5p \u0111\u1ed9 cao h\u01a1n: Stale-While-Revalidate (Cho kh\u00e1ch x\u00e0i \u0111\u1ed3 c\u0169)\n\nVi\u1ec7c b\u1eaft 4.999 ng\u01b0\u1eddi ch\u1edd \u0111\u1ee3i (d\u00f9 ch\u1ec9 l\u00e0 50ms) v\u1eabn l\u00e0m gi\u1ea3m UX (Tr\u1ea3i nghi\u1ec7m ng\u01b0\u1eddi d\u00f9ng). M\u1ed9t chi\u1ebfn thu\u1eadt th\u00f4ng minh h\u01a1n l\u00e0: Ch\u1ea5p nh\u1eadn tr\u1ea3 v\u1ec1 d\u1eef li\u1ec7u c\u0169 (Stale Data) trong l\u00fac \u00e2m th\u1ea7m c\u1eadp nh\u1eadt d\u1eef li\u1ec7u m\u1edbi.\n\n* Ta kh\u00f4ng set TTL t\u1ef1 \u0111\u1ed9ng x\u00f3a trong Redis n\u1eefa.\n* Ta g\u1eafn th\u00eam m\u1ed9t tr\u01b0\u1eddng `expire_at` v\u00e0o data. (V\u00ed d\u1ee5: `expire_at = 12:05:00`).\n* L\u00fac 12:05:01, 5.000 user bay v\u00e0o. App th\u1ea5y th\u1eddi gian hi\u1ec7n t\u1ea1i \u0111\u00e3 v\u01b0\u1ee3t qua `expire_at`.\n* App v\u1eabn tr\u1ea3 v\u1ec1 data c\u0169 cho c\u1ea3 5.000 user (Response time 2ms, m\u01b0\u1ee3t m\u00e0).\n* NH\u01afNG, App \u00e2m th\u1ea7m d\u00f9ng Mutex Lock, b\u1eafn \u0111\u00fang 1 Background Job (Worker) \u0111i xu\u1ed1ng DB t\u00ednh to\u00e1n l\u1ea1i Top 100, v\u00e0 c\u1eadp nh\u1eadt c\u00e1i cache m\u1edbi cho t\u01b0\u01a1ng lai. Kh\u00e1ch h\u00e0ng kh\u00f4ng h\u1ec1 c\u1ea3m nh\u1eadn \u0111\u01b0\u1ee3c s\u1ef1 ch\u1eadm tr\u1ec5 n\u00e0o!\n\n### 4. Background Cronjob (G\u1ed1c r\u1ec5 c\u1ee7a s\u1ef1 nh\u00e0n nh\u00e3)\n\nC\u00e1ch cu\u1ed1i c\u00f9ng v\u00e0 c\u0169ng l\u00e0 c\u00e1ch \"nh\u00e0n\" nh\u1ea5t: \u0110\u1eebng cho ph\u00e9p API tr\u1ef1c ti\u1ebfp \u0111\u1ee5ng v\u00e0o vi\u1ec7c c\u1eadp nh\u1eadt Cache.\nH\u00e3y vi\u1ebft m\u1ed9t con Worker (Cronjob) ch\u1ea1y ng\u1ea7m \u0111\u1ed9c l\u1eadp. C\u1ee9 \u0111\u00fang 4 ph\u00fat 50 gi\u00e2y, con Worker n\u00e0y t\u1ef1 \u0111\u1ed9ng chui xu\u1ed1ng MySQL l\u1ea5y data v\u00e0 \u0111\u00e8 l\u00ean c\u00e1i Cache c\u0169.\n\nL\u00fac n\u00e0y, User API ch\u1ec9 c\u00f3 m\u1ed9t nhi\u1ec7m v\u1ee5 duy nh\u1ea5t: \u0110\u1ecdc t\u1eeb Redis. Kh\u00f4ng bao gi\u1edd c\u00f3 chuy\u1ec7n Cache b\u1ecb r\u1ed7ng, v\u00e0 c\u0169ng ch\u1eb3ng bao gi\u1edd c\u00f3 c\u00e1i request n\u00e0o b\u1ecb \u0111\u1ea9y xu\u1ed1ng DB. T\u00e1ch bi\u1ec7t ho\u00e0n to\u00e0n lu\u1ed3ng \u0110\u1ecdc (Read) v\u00e0 Ghi (Write).\n\n### L\u1eddi k\u1ebft\n\nDatabase l\u00e0 tr\u00e1i tim c\u1ee7a h\u1ec7 th\u1ed1ng, v\u00e0 n\u00f3 v\u00f4 c\u00f9ng mong manh. Khi b\u1ea1n b\u1eaft \u0111\u1ea7u ch\u01a1i v\u1edbi Traffic l\u1edbn (High Availability), vi\u1ec7c code \u0111\u00fang logic th\u00f4i l\u00e0 ch\u01b0a \u0111\u1ee7. B\u1ea1n ph\u1ea3i h\u1ecdc c\u00e1ch ki\u1ec3m so\u00e1t d\u00f2ng ch\u1ea3y c\u1ee7a d\u1eef li\u1ec7u, bi\u1ebft ch\u1eb7n c\u1eeda, bi\u1ebft ph\u00e2n lu\u1ed3ng. \u0110\u00f3 m\u1edbi l\u00e0 tr\u1ea1ng th\u00e1i th\u0103ng hoa nh\u1ea5t c\u1ee7a The Vibe Coder Mindset.\n\n**Ch\u1ee7 \u0111\u1ec1 ti\u1ebfp theo: K\u1ebb Th\u00f9 S\u1ed1 1 C\u1ee7a Public API - Bot C\u00e0o Data & \u0110\u00f2n Tr\u1eebng Ph\u1ea1t T\u1eeb Rate Limiting**\n\nH\u1ec7 th\u1ed1ng c\u1ee7a ch\u00fang ta gi\u1edd \u0111\u00e3 \"m\u00ecnh \u0111\u1ed3ng da s\u1eaft\", Cache ch\u1ea1y m\u01b0\u1ee3t m\u00e0, DB an to\u00e0n. Nh\u01b0ng n\u1ebfu \u0111\u1ed1i th\u1ee7 c\u1ea1nh tranh kh\u00f4ng th\u00e8m \u0111\u00e1nh s\u1eadp b\u1ea1n, m\u00e0 h\u1ecd d\u00f9ng Bot g\u1ecdi API t\u00ecm ki\u1ebfm c\u1ee7a b\u1ea1n 2.000 l\u1ea7n\/gi\u00e2y ch\u1ec9 \u0111\u1ec3... c\u00e0o tr\u1ed9m s\u1ea1ch s\u1ebd data s\u1ea3n ph\u1ea9m v\u00e0 gi\u00e1 b\u00e1n th\u00ec sao?\n\nChi ph\u00ed Server t\u0103ng phi m\u00e3 \u0111\u1ec3 ph\u1ee5c v\u1ee5 cho l\u0169 Bot n\u00e0y! \u1ede b\u00e0i vi\u1ebft t\u1edbi, ch\u00fang ta s\u1ebd ti\u1ebfp t\u1ee5c t\u1eadn d\u1ee5ng s\u1ee9c m\u1ea1nh c\u1ee7a Redis \u0111\u1ec3 x\u00e2y d\u1ef1ng Rate Limiting (Gi\u1edbi h\u1ea1n t\u1ef7 l\u1ec7). L\u00e0m sao \u0111\u1ec3 nh\u1eadn di\u1ec7n m\u1ed9t IP \u0111ang spam v\u00e0 \"kh\u00f3a m\u00f5m\" n\u00f3 b\u1eb1ng l\u1ed7i `HTTP 429 Too Many Requests` m\u1ed9t c\u00e1ch thanh l\u1ecbch nh\u1ea5t? C\u00f9ng \u0111\u00f3n \u0111\u1ecdc nh\u00e9!","published_at":"2026-04-14T00:20:54.000000Z","scheduled_publish_at":null,"is_published":true,"is_shared":false,"updated_at":"2026-04-14T17:00:18.000000Z","edited_at":"2026-04-14T00:20:26.000000Z","translation_source":null,"trend_at":null,"promoted_at":null,"reading_time":6,"points":4,"views_count":55,"clips_count":1,"comments_count":2,"rated_value":null,"promoted":false,"trending":false,"is_draft":false,"is_public":true,"locale_code":"vi","is_video":false,"thumbnail_url":"https:\/\/images.viblo.asia\/b585503b-35dc-4b83-bfad-2abe57ae37d4.png","user":{"data":{"id":182653,"url":"https:\/\/viblo.asia\/u\/hhoang","avatar":"90700a59-6e71-4d6c-bff6-0223a4e007c4.jpg","name":"Nguy\u1ec5n Huy Ho\u00e0ng","username":"hhoang","followers_count":46,"reputation":2509,"posts_count":250,"banned_at":null,"level_partner":null,"following":false}},"tags":{"data":[{"slug":"redis","name":"Redis"},{"slug":"backend","name":"Backend"},{"slug":"systemdesign","name":"systemdesign"}]},"commentators":{"data":[{"id":182653,"url":"https:\/\/viblo.asia\/u\/hhoang","avatar":"90700a59-6e71-4d6c-bff6-0223a4e007c4.jpg","name":"Nguy\u1ec5n Huy Ho\u00e0ng","username":"hhoang","followers_count":0,"reputation":0,"posts_count":0,"banned_at":null,"level_partner":null},{"id":182732,"url":"https:\/\/viblo.asia\/u\/Hieumn","avatar":"b79a0c92-fb82-49df-bda1-2f51c8e45300.jpg","name":"Nguyen Hieu","username":"Hieumn","followers_count":0,"reputation":0,"posts_count":0,"banned_at":null,"level_partner":null}]}},{"id":92719,"title":"T\u1ea1i sao Slay the Spire 2 ch\u1ecdn Godot thay v\u00ec Unity (v\u00e0 d\u1eef li\u1ec7u doanh thu th\u1ef1c t\u1ebf)","slug":"RlL5e8gPLbB","url":"https:\/\/viblo.asia\/p\/tai-sao-slay-the-spire-2-chon-godot-thay-vi-unity-va-du-lieu-doanh-thu-thuc-te-RlL5e8gPLbB","user_id":185054,"moderation":null,"transliterated":"tai-sao-slay-the-spire-2-chon-godot-thay-vi-unity-va-du-lieu-doanh-thu-thuc-te","contents_short":"Th\u00e1ng 3 n\u0103m 2026, Slay the Spire 2 ra m\u1eaft Early Access tr\u00ean Steam v\u00e0 \u0111\u1ea1t 574.638 ng\u01b0\u1eddi ch\u01a1i \u0111\u1ed3ng th\u1eddi. Con s\u1ed1 n\u00e0y g\u1ea7n ph\u00e1 k\u1ef7 l\u1ee5c m\u1ecdi th\u1eddi \u0111\u1ea1i c\u1ee7a Steam. Game \u0111\u01b0\u1ee3c x\u00e2y d\u1ef1ng ho\u00e0n to\u00e0n b\u1eb1ng Godot Engine, kh\u00f4ng ph\u1ea3i Unity hay Unreal.\n\nC\u00e2u chuy\u1ec7n \u0111\u1eb1ng sau\n\nMega Crit \u0111\u00e3 ph\u00e1t tri\u1ec3n Slay the Spire 2 b\u1eb1ng Unity h\u01a1n 2 n\u0103m. Th\u00e1ng 9\/2023, Unity c\u00f4ng b\u1ed1 ch\u00ednh s\u00e1ch ph\u00ed c\u00e0i \u0111\u1eb7t g\u00e2y ph\u1eabn n\u1ed9 trong c\u1ed9ng \u0111\u1ed3ng. Me...","contents":"Th\u00e1ng 3 n\u0103m 2026, Slay the Spire 2 ra m\u1eaft Early Access tr\u00ean Steam v\u00e0 \u0111\u1ea1t [574.638 ng\u01b0\u1eddi ch\u01a1i \u0111\u1ed3ng th\u1eddi](https:\/\/steamdb.info\/app\/2868840\/charts\/). Con s\u1ed1 n\u00e0y g\u1ea7n ph\u00e1 k\u1ef7 l\u1ee5c m\u1ecdi th\u1eddi \u0111\u1ea1i c\u1ee7a Steam. Game \u0111\u01b0\u1ee3c x\u00e2y d\u1ef1ng ho\u00e0n to\u00e0n b\u1eb1ng Godot Engine, kh\u00f4ng ph\u1ea3i Unity hay Unreal.\n\n## C\u00e2u chuy\u1ec7n \u0111\u1eb1ng sau\n\nMega Crit \u0111\u00e3 ph\u00e1t tri\u1ec3n Slay the Spire 2 b\u1eb1ng Unity h\u01a1n 2 n\u0103m. Th\u00e1ng 9\/2023, Unity [c\u00f4ng b\u1ed1 ch\u00ednh s\u00e1ch ph\u00ed c\u00e0i \u0111\u1eb7t](https:\/\/www.pcgamer.com\/games\/card-games\/slay-the-spire-2-ditched-unity-for-open-source-engine-godot-after-2-years-of-development\/) g\u00e2y ph\u1eabn n\u1ed9 trong c\u1ed9ng \u0111\u1ed3ng. Mega Crit quy\u1ebft \u0111\u1ecbnh b\u1ecf to\u00e0n b\u1ed9 code Unity v\u00e0 x\u00e2y d\u1ef1ng l\u1ea1i t\u1eeb \u0111\u1ea7u tr\u00ean Godot.\n\nUnity \u0111\u00e3 r\u00fat l\u1ea1i ch\u00ednh s\u00e1ch v\u00e0 CEO t\u1eeb ch\u1ee9c. Nh\u01b0ng Mega Crit v\u1eabn chuy\u1ec3n sang Godot. K\u1ebft qu\u1ea3: game Godot l\u1edbn nh\u1ea5t l\u1ecbch s\u1eed. Mega Crit hi\u1ec7n l\u00e0 [nh\u00e0 t\u00e0i tr\u1ee3 Platinum c\u1ee7a Godot Foundation](https:\/\/www.gamingonlinux.com\/2026\/04\/godot-gets-a-funding-boost-from-slay-the-spire-2-devs-mega-crit\/) v\u1edbi 36.000 EUR\/n\u0103m.\n\n## Doanh thu c\u1ee7a c\u00e1c game Godot\n\nTop 10 game Godot c\u00f3 [t\u1ed5ng doanh thu \u01b0\u1edbc t\u00ednh h\u01a1n 48 tri\u1ec7u USD](https:\/\/ziva.sh\/blogs\/godot-engine-games):\n\n| Game | Doanh thu \u01b0\u1edbc t\u00ednh | Reviews | \u0110\u00e1nh gi\u00e1 |\n|------|-------------------|---------|----------|\n| Brotato | $10.7M | 102,051 | 96.6% |\n| Buckshot Roulette | $6.9M | 102,849 | 95.7% |\n| Dome Keeper | $6.1M | 17,173 | 92.3% |\n| Backpack Battles | $5.2M | 17,455 | 91.1% |\n| Cassette Beasts | $4.1M | 9,772 | 94.7% |\n\nT\u1ea5t c\u1ea3 \u0111\u1ec1u c\u00f3 \u0111\u00e1nh gi\u00e1 tr\u00ean 91%.\n\n## T\u1ed1c \u0111\u1ed9 t\u0103ng tr\u01b0\u1edfng c\u1ee7a Godot\n\nS\u1ed1 game Godot tr\u00ean Steam m\u1ed7i n\u0103m:\n\n- 2020: 47\n- 2021: 97\n- 2022: 195\n- 2023: 389\n- 2024: 618\n- 2025: h\u01a1n 1.500\n\n[T\u0103ng g\u1ea5p \u0111\u00f4i m\u1ed7i n\u0103m](https:\/\/ziva.sh\/blogs\/godot-growth-stats). 5% t\u1ed5ng s\u1ed1 game ph\u00e1t h\u00e0nh tr\u00ean Steam n\u0103m 2024 s\u1eed d\u1ee5ng Godot.\n\n## T\u1ea1i sao Godot ph\u00f9 h\u1ee3p v\u1edbi developer Vi\u1ec7t Nam\n\n**Gi\u1ea5y ph\u00e9p MIT mi\u1ec5n ph\u00ed ho\u00e0n to\u00e0n.** Kh\u00f4ng ph\u00ed runtime, kh\u00f4ng chia s\u1ebb doanh thu. Cho d\u00f9 game b\u1ea1n th\u00e0nh c\u00f4ng \u0111\u1ebfn \u0111\u00e2u, Godot v\u1eabn mi\u1ec5n ph\u00ed.\n\n**K\u00edch th\u01b0\u1edbc 120MB.** Kh\u00f4ng c\u1ea7n t\u1ea1o t\u00e0i kho\u1ea3n, kh\u00f4ng c\u1ea7n k\u1ebft n\u1ed1i internet. So v\u1edbi Unity (10GB+) hay Unreal (30GB+), Godot nh\u1eb9 h\u01a1n \u0111\u00e1ng k\u1ec3. \u0110i\u1ec1u n\u00e0y quan tr\u1ecdng v\u1edbi developer \u1edf nh\u1eefng n\u01a1i c\u00f3 internet ch\u1eadm.\n\n**File scene d\u1ea1ng text.** File .tscn c\u1ee7a Godot l\u00e0 plain text. Git diff ho\u1ea1t \u0111\u1ed9ng b\u00ecnh th\u01b0\u1eddng, AI tool c\u00f3 th\u1ec3 \u0111\u1ecdc v\u00e0 t\u1ea1o scene tr\u1ef1c ti\u1ebfp.\n\n**GDScript d\u1ec5 h\u1ecdc.** C\u00fa ph\u00e1p gi\u1ed1ng Python, script game th\u00f4ng th\u01b0\u1eddng ch\u1ec9 30-80 d\u00f2ng. So v\u1edbi C# trong Unity, GDScript ng\u1eafn g\u1ecdn h\u01a1n nhi\u1ec1u.\n\n## K\u1ebft lu\u1eadn\n\n574.638 ng\u01b0\u1eddi ch\u01a1i \u0111\u1ed3ng th\u1eddi \u0111\u00e3 thay \u0111\u1ed5i nh\u1eadn th\u1ee9c \"Godot ch\u1ec9 l\u00e0 engine cho hobby\". N\u1ebfu b\u1ea1n \u0111ang t\u00ecm m\u1ed9t game engine mi\u1ec5n ph\u00ed, open source v\u00e0 \u0111\u00e3 \u0111\u01b0\u1ee3c ch\u1ee9ng minh th\u01b0\u01a1ng m\u1ea1i, Godot \u0111\u00e1ng \u0111\u1ec3 th\u1eed.","published_at":"2026-04-13T21:55:35.000000Z","scheduled_publish_at":null,"is_published":true,"is_shared":false,"updated_at":"2026-04-14T13:12:01.000000Z","edited_at":"2026-04-13T21:55:00.000000Z","translation_source":null,"trend_at":null,"promoted_at":null,"reading_time":2,"points":0,"views_count":21,"clips_count":0,"comments_count":0,"rated_value":null,"promoted":false,"trending":false,"is_draft":false,"is_public":true,"locale_code":"vi","is_video":false,"thumbnail_url":"https:\/\/images.viblo.asia\/3c7c903c-ca84-459f-8150-0f6cc7108bc6.png","user":{"data":{"id":185054,"url":"https:\/\/viblo.asia\/u\/zivaengine","avatar":"4a1a59e8-53db-4bcc-a18a-164a77220c2b.png","name":"Ziva Engine","username":"zivaengine","followers_count":0,"reputation":4,"posts_count":5,"banned_at":null,"level_partner":null,"following":false}},"tags":{"data":[{"slug":"game-development","name":"Game Development"}]},"commentators":{"data":[]}}],"meta":{"pagination":{"total":44137,"count":20,"per_page":20,"current_page":1,"total_pages":2207,"links":{"next":"http:\/\/api.viblo.asia\/posts?page=2"}}}}