I Built an AI Content Studio with 5 Hermes Agents (Step-by-Step Guide)
สรุปย่อ
ประเด็นสำคัญจากวิดีโอ
- **ช่อง:** Komputer Mechanic · **ความยาว:** ~115 นาที · **ลิงก์:** https://www.youtube.com/watch?v=TTSPDNUinek
# สรุป: I Built an AI Content Studio with 5 Hermes Agents (Step-by-Step Guide) - **ช่อง:** Komputer Mechanic · **ความยาว:** ~115 นาที · **ลิงก์:** https://www.youtube.com/watch?v=TTSPDNUinek ## ประเด็นหลัก - ลาร์รี (Larry) จากช่อง Komputer Mechanic สร้าง "Cadence" ซึ่งเป็นระบบอัตโนมัติจัดการงานคอนเทนต์ครบวงจร (content operations autopilot) บน Hermes Agents โดยมีเอเจนต์ 5 ตัวทำงานร่วมกัน - เอเจนต์ทั้ง 5 ตัว ได้แก่ **orchestrator** (ผู้ประสานงานหลัก รับคำสั่งผ่าน Telegram) **Atlas/Scout** (นักวิจัยและเสนอไอเดีย) **Vera/Scribe** (นักเขียนสไลด์ แคปชัน แฮชแท็ก) **Kite/Dev** (นักออกแบบ + นักพัฒนา สร้างแดชบอร์ด) และ **Orion/Rich** (นักเผยแพร่โพสต์) - ผู้ชมสามารถสร้างตามได้จริงตั้งแต่ศูนย์: เช่า VPS (แนะนำ Racknerd ~$35/ปี หรือ Contabo ~$8/เดือน) ติดตั้ง Ubuntu แล้วติดตั้ง Hermes พร้อมผูกบัญชี Nous Research และเลือกโมเดล AI (เช่น OpenAI Codex ผ่านแผน ChatGPT Plus/Pro, Grok ผ่านบัญชี X, หรือ OpenRouter) - สร้าง Telegram group พร้อม topics แยกช่องต่อเอเจนต์ (orchestrator / Kite / studio) สร้างบอทผ่าน BotFather ใช้ User Info Bot หา user ID และตั้งค่าการผูกช่องกับเอเจนต์ (topic-lane binding) เพื่อให้แต่ละเอเจนต์ฟังเฉพาะช่องของตัวเอง - สร้างโปรไฟล์เอเจนต์แบบ persistent พร้อมไฟล์ soul.md กำหนดบทบาท หน่วยความจำเฉพาะ (dedicated memory) และขอบเขตบทบาท (role boundaries) เพื่อป้องกันไม่ให้เอเจนต์ก้าวก่ายงานกัน - สร้างฐานข้อมูลบันทึกการทำงานของเอเจนต์ด้วย **SQLite** — เอเจนต์ทุกตัวบันทึกชื่อ งานที่ทำ โมเดล AI และ timestamp ลงตาราง cadence runs ก่อนตอบกลับทุกครั้ง เพื่อให้แดชบอร์ดแสดงเมตริกจริง ไม่ใช่ค่าฮาร์ดโค้ด - จุดเด่นของระบบคือสไลด์ carousel ถูกสร้างเป็นไฟล์ **HTML** แล้วเรนเดอร์เป็นภาพผ่าน headless browser (Chromium) ทำให้แก้ไขข้อความ ดีไซน์ ได้ไม่จำกัดโดยไม่เสียค่าใช้จ่ายต่อสไลด์ (ต่างจากโมเดลสร้างภาพที่คิดเงินทุก API call) - เชื่อมต่อ API keys สามตัว: **Perplexity** (วิจัยเชิงลึก), **ImgBB** (พื้นที่เก็บภาพตัวกลาง) และ **Buffer** (ส่งโพสต์ไปยังโซเชียลมีเดีย) — ขั้นตอนการโพสต์: Cadence → ImgBB → Buffer → Instagram พร้อมระบบยืนยันก่อนโพสต์ทุกครั้ง - รักษาความปลอดภัยด้วย **SSH tunneling** ในการเข้าถึงแดชบอร์ดช่วงแรก จากนั้นติดตั้ง **Tailscale** เพื่อเข้าถึงแดชบอร์ดจากอุปกรณ์ใดก็ได้ที่ผูกบัญชี โดยไม่เปิดให้อินเทอร์เน็ตสาธารณะ - แดชบอร์ดมีแท็บครบ: ideas (สร้าง/โปรโมตไอเดีย), studio (fine-tune สไลด์, แปลง carousel เป็น reel), publish, templates (เทมเพลต HTML 50+ แบบ), agents (heat map + workload), calendar, configuration และ docs — พร้อมรีโมตคอนโทรลผ่าน Telegram (คำสั่ง /ideas, /promote) - ระหว่างทางมีการแก้ปัญหาจริงที่พบ เช่น error "failed to connect to bus" ตอนรีสตาร์ท gateway, เซิร์ฟเวอร์ทดสอบลบข้อมูลในฐานข้อมูลโปรดักชัน, ชื่อเทมเพลตไม่ตรงกันระหว่างแดชบอร์ดกับ Telegram และมีตัวติดตั้งอัตโนมัติ (auto installer) สำหรับสมาชิกที่ไม่อยาก build เอง 4-5 ชั่วโมง ## ความเห็นสรุป วิดีโอนี้เป็นบทช่วยสอนแบบ step-by-step ที่ละเอียดมาก ครอบคลุมทั้งฮาร์ดแวร์ (VPS) ซอฟต์แวร์ (Hermes, Telegram, SQLite, Python) และการออกแบบระบบ multi-agent จริง เนื้อหาเน้นการปฏิบัติจริง มีการโชว์เดโม่สดและแก้ไขข้อผิดพลาดระหว่าง build ทำให้เห็นกระบวนการคิดและแนวทางแก้ปัญหาที่นำไปใช้ต่อได้จริง จุดที่คุ้มค่าที่สุดคือแนวคิด "สไลด์เป็น HTML แล้วเรนเดอร์ด้วย headless browser" ซึ่งช่วยประหยัดต้นทุนได้มาก และการแยกบทบาท/หน่วยความจำของเอเจนต์อย่างเป็นระบบ
คำแปลเต็ม
แปลตามบทสนทนาต้นฉบับ ปรับเป็นภาษาไทยธรรมชาติ
นี่คือเครื่องจักรผลิตคอนเทนต์โซเชียลมีเดียแบบครบวงจร มีเอเจนต์ AI สี่ตัวที่จะช่วยค้นคว้า เขียน ออกแบบ และเผยแพร่โพสต์ให้คุณ มาดูมันทำงานจริงกันเลย ไอเดียคอนเทนต์นี้ "ห้าสัญญาณว่าสแต็กเอเจนต์ของคุณซับซ้อนเกินไป" (five signs your agent stack is overengineered) กำลังกลายเป็น Instagram carousel (โพสต์หลายภาพแบบเลื่อนดู) ที่เสร็จสมบูรณ์ Atlas หามุมมองให้ Vera กำลังเขียนสไลด์ และภายในประมาณ 2 นาที Kite ก็เรนเดอร์สไลด์ทั้งหมดเสร็จด้วยการคลิกเพียงไม่กี่ครั้ง และที่สำคัญที่สุดคือ จะไม่มีอะไรถูกโพสต์ออนไลน์โดยไม่ผ่านการอนุมัติจากคุณ คุณตรวจคำพูดก่อนแล้วค่อยอนุมัติโพสต์สุดท้าย เอเจนต์ทำงานให้ ส่วนคุณยังคงควบคุมทุกอย่าง วันนี้เราจะสร้างทุกอย่างขึ้นมาจากศูนย์ทั้งหมด พรอมป์ต์และเทมเพลตทุกอันมีลิงก์ไว้ด้านล่าง ถ้าใครไม่อยากใช้เวลากับการ build กว่า 4 ชั่วโมง ก็มีตัวติดตั้งอัตโนมัติ (auto installer) ที่เซ็ตอัพทุกอย่างให้คุณภายในไม่กี่นาที
สวัสดีครับ ผมลาร์รี ยินดีต้อนรับสู่ช่องของเรา วันนี้เราจะสร้าง Cadence กัน ซึ่งเป็นระบบอัตโนมัติจัดการงานคอนเทนต์ (content operations autopilot) ที่ขับเคลื่อนโดยผู้เชี่ยวชาญสี่คนที่คุณเพิ่งเห็นไป ภายในมีเทมเพลตที่ออกแบบอย่างสวยงามกว่า 50 แบบ Atlas จะค้นคว้าและเสนอไอเดียให้คุณ Vera เขียนสไลด์ แคปชัน และแฮชแท็กให้ทุกอย่าง จากนั้น Kite จะทำดีไซน์ให้เสร็จสมบูรณ์ พอเสร็จแล้ว Orion จะส่งโพสต์เหล่านั้นไปยังแพลตฟอร์มโซเชียลมีเดียของคุณ และเหนือเอเจนต์ทั้งหมดนั้นยังมีเอเจนต์ผู้ควบคุม (orchestrator agent) ที่คอยรับคำสั่งจากคุณในแชท Telegram แล้วจัดส่งงานลงไปตามสายงาน ถ้าคุณโพสต์คอนเทนต์เป็นประจำ คุณจะรู้ดีว่ามันยุ่งยากแค่ไหน คุณจ้องหน้ากระดานว่างเปล่าเพื่อหามุมมองสักไอเดีย พอได้ไอเดียมาแล้วก็ต้องไปค้นคว้า ต่อด้วยการเขียนสไลด์ทีละหน้า ทำสไลด์ให้ดูดีในเทมเพลต ตามด้วยแคปชัน แฮชแท็ก และอื่นๆ อีกมากมาย แต่ตอนนี้ Cadence จะจัดการและรวบรวมทั้งสายงานให้เสร็จภายในไม่กี่นาที คุณแค่บอกเอเจนต์ครั้งเดียวว่าบร্যান্ডของคุณเกี่ยวกับอะไร ตั้งแต่นั้นมา แค่คลิกเดียวก็จะได้ไอเดียโพสต์ใหม่ๆ หรือถ้าคุณพิมพ์ความคิดคร่าวๆ ของตัวเองลงไป พวกมันก็จะสร้างเรื่องราวทั้งหมดให้คุณ ตั้งแต่ไอเดียจนถึงโพสต์ที่เผยแพร่เสร็จ ทุกอย่างจัดการได้ด้วยการคลิกไม่กี่ครั้ง แล้วโพสต์ของคุณก็จะขึ้นออนไลน์
และนี่คือจุดที่งาน build ชิ้นนี้เหนือกว่าเครื่องมือสร้างสไลด์ด้วย AI ทั่วไป โดยปกติคุณต้องสร้างสไลด์ด้วยโมเดลสร้างภาพ และจ่ายเงินทุกครั้งต่อหนึ่งสไลด์ แถมแม้แต่การแก้คำเพียงคำเดียวยังต้องจ่ายเงินเพื่อสร้างภาพใหม่ทั้งใบ แต่ Cadence ไม่แตะโมเดลสร้างภาพเลยแม้แต่นิดเดียว สไลด์ทุกใบสร้างจากเทมเพลต HTML ที่ออกแบบอย่างสวยงามด้วยโค้ดจริง ไม่ใช่พิกเซลจาก AI ดังนั้นการแก้ไขทุกครั้งจึงฟรี คุณสามารถลากองค์ประกอบใดก็ได้ เปลี่ยนข้อความ ขนาด ตำแหน่ง แล้วมันจะเรนเดอร์ใหม่ภายในไม่กี่วินาที หมายความว่าคุณแก้ไขได้ไม่จำกัดโดยไม่มีค่าใช้จ่ายต่อสไลด์ เงินของคุณจึงไปอยู่ที่เนื้อหา ไม่ใช่ที่รูปภาพ
แดชบอร์ดแสดงภาพรวมการทำงานทั้งหมดในพริบตาเดียว ตัวเลขทุกตัวดึงมาจากฐานข้อมูลของเอเจนต์ของคุณเอง ซึ่งเอเจนต์ทุกตัวจะบันทึกชื่อตัวเอง งานที่ทำ โมเดล AI ที่ใช้ และเวลาที่ทำงานนั้นอย่างละเอียด ดังนั้นจึงไม่มีเมตริกปลอมใดๆ เลย ส่วนที่ผมชอบที่สุดคือสตูดิโอ (studio) คุณสามารถแก้ไขข้อความทุกชิ้นหรือลากองค์ประกอบเดี่ยวๆ ย้ายมัน ปรับขนาด เขียนใหม่ได้หมด แถมยังมีตัวอย่างบนโทรศัพท์ (phone preview) คลังเทมเพลต และฟีเจอร์แปลง carousel เป็นวิดีโอด้วย เราจะสร้างคลังโพสต์ที่เผยแพร่แล้ว (published archive) ไว้ดูโพสต์ทั้งหมดที่เคยสร้างและเผยแพร่ รวมถึงแท็บปฏิทิน (calendar) ที่แสดงคอนเทนต์ที่กำหนดเวลาไว้ทั้งหมด และยังมีหน้า configurations สำหรับเก็บชื่อบรานด์ แฮนเดิล น้ำเสียง ซึ่งจะไหลไปสู่ทุกคำที่เอเจนต์เขียน
ต่อไปขอโชว์เดโม่สดและพาเดินชมสิ่งที่เราจะสร้างในวันนี้ ในแดชบอร์ดคุณจะเห็นจำนวนครั้งทั้งหมดที่เอเจนต์ทำงาน (total runs) จำนวนไอเดียที่สร้างขึ้นในการตั้งค่านี้ จำนวนโพสต์ที่เผยแพร่แล้ว ซึ่งในกรณีของผมมีแค่หนึ่งอันเพราะผมใช้มันทดสอบสำหรับบทช่วยสอนนี้ และเปอร์เซ็นต์ของงานที่สำเร็จ ตรงนี้เรามีเอเจนต์แอคทิวิตี้ (agent activity) ที่ดึงมาจากฐานข้อมูลกิจกรรมของเอเจนต์ คุณจะเห็นว่าวันศุกร์ผมใช้เอเจนต์เยอะมากเพราะกำลัง build การตั้งค่านี้อยู่ กราฟเลยพุ่งขึ้น และทางด้านขวาคุณยังเห็นได้ว่าเอเจนต์ตัวไหนรับงานหนักที่สุดตอนนี้ ในกรณีของผมก็คือ Vera นักเขียนคอนเทนต์ และ Kite นักพัฒนา เพราะสองตัวนี้ทำงานหนักที่สุดจนถึงตอนนี้ พอเลื่อนลงมาด้านล่าง คุณจะเห็นสรุปสิ่งที่เอเจนต์ทำทั้งหมด ซึ่งดึงมาจากฐานข้อมูลบันทึกการทำงานของเอเจนต์เช่นกัน
ความมหัศจรรย์เกิดขึ้นที่แท็บ ideas ตรงนี้คุณจะเห็นไอเดียสองสามอันที่เอเจนต์สร้างให้ผม เพราะผมกำลังทำงานเกี่ยวกับ AI ผมเลยให้พวกมันสร้างไอเดียเกี่ยวกับระบบอัตโนมัติด้วย AI (AI automation) และอะไรประมาณนั้น ตรงนี้คุณสามารถใส่ไอเดียของคุณเองได้ ไม่ว่าไอเดียไหนก็ตาม หรือถ้าคุณยังไม่มีไอเดียเลย คุณก็บอกเอเจนต์ได้ว่า "ช่วยสร้างไอเดียให้หน่อยสิ" ขอผมคลิกที่ generate some ideas แล้วดูว่าไอเดียอะไรจะถูกสร้างขึ้นมา ตรงนี้คุณจะเห็นว่า Atlas นักวิจัยของเราคือตัวที่จะไปค้นหาไอเดียเกี่ยวกับสิ่งที่เรากำลังสร้าง และสิ่งที่เรายังไม่เคยโพสต์มาก่อน มันจะไปค้นหาไอเดียที่เราสามารถโพสต์ได้ โดยอ้างอิงจากสิ่งที่เอเจนต์เรียนรู้มาเกี่ยวกับสิ่งที่ผมกำลังสร้าง จากนั้นคุณจะเห็นว่าพวกมันสร้างไอเดียมาห้าไอเดีย ไอเดียแรกคือ "ระบบอัตโนมัติล้มเหลวตรงจุดส่งต่องาน" (automation fails at the handoff) และยังมีไอเดียอย่าง "เอเจนต์ของคุณควรทดสอบสิ่งที่มันอ้างว่าแก้ไข" (your agent should run the test it claims to fix) ซึ่งน่าจะเป็นไอเดียที่ดี เพราะเอเจนต์ชอบหลอน (hallucinate) เยอะมาก
เพื่อสาธิตเป็นตัวอย่าง สมมติว่าผมอยากเขียนสไลด์เกี่ยวกับไอเดียนี้ ผมแค่คลิก promote แล้วตรงนี้ก็สามารถกรอกจำนวนสไลด์ที่ต้องการได้ เช่น ผมอยากได้แปดสไลด์ สิบสไลด์ หรือเท่าไหร่ก็ได้ตามที่ต้องการ สิ่งที่ต้องจำไว้คือ สไลด์แรกจะเป็นฮุก (hook) เสมอ และสไลด์สุดท้ายจะเป็น CTA (คำกระตุ้นให้ทำตาม) ดังนั้นเนื้อหาหลักจะอยู่ระหว่างฮุกกับ CTA ถ้าผมเลือกสิบสไลด์หรือแปดสไลด์ นั่นหมายความว่าผมจะมีสไลด์เนื้อหาหกสไลด์ โดยหนึ่งเป็นฮุกและหนึ่งเป็น CTA จากนั้นผมสามารถตัดสินใจได้ว่าให้เอเจนต์ทำการวิจัยเชิงลึกหรือไม่ เช่น ถ้าผมคลิก research with perplexity เอเจนต์จะไปค้นคว้าเชิงลึกผ่าน Perplexity เพื่อหาคอนเทนต์ที่เหมาะสมจริงๆ สำหรับงานนี้ และตรงนี้ผมยังทำโหมดพิเศษแบบ "สเตียรอยด์" ไว้ด้วย โดยเอเจนต์จะเขียนสไลด์ที่กระแทกใจ (punchy) มากขึ้น พอเสร็จแล้วก็แค่คลิก write eight slides
สิ่งที่เกิดขึ้นต่อจากนี้คือ Atlas ทำงานของมันเสร็จแล้ว Atlas วิจัยเสร็จเรียบร้อย ตอนนี้ Vera จะเข้ามารับช่วงต่อ Vera คือเอเจนต์ AI ที่ทำหน้าที่เขียนคอนเทนต์ เรามารอให้ Vera วิจัยเสร็จและเตรียมคอนเทนต์ให้พร้อมกันดีกว่า เอาล่ะ Vera วิจัยเสร็จแล้ว จำไว้ว่าเราขอแปดสไลด์ และ Vera กำลังให้ภาพรวมว่าเนื้อหาบนแต่ละสไลด์จะเป็นอะไร คุณจะเห็นคอนเทนต์ที่จะลงบนทุกสไลด์ได้เลย ถ้าผมไม่ชอบสไลด์ไหนและอยากปรับปรุง ผมก็คลิก refine copy แล้วเอเจนต์จะปรับปรุงตามที่ผมบอก ถ้าผมพอใจและอยากดำเนินการต่อ ผมก็คลิก approve แล้วเลือกเทมเพลต จำไว้ว่าคอนเทนต์ที่เอเจนต์ทำคือไอเดียคร่าวๆ ว่าคอนเทนต์ควรมีหน้าตาแบบไหน แต่ตรงนี้ผมมีเทมเพลตที่ออกแบบอย่างสวยงามกองใหญ่
ซึ่งผมจะแจกให้ทุกคนได้คัดลอกไปใช้ โดยไม่ต้องออกแบบเองทั้งหมด สิ่งที่เราต้องทำก็แค่เลือกเทมเพลตที่อยากจะใช้ในการสร้าง เนื่องจากบรานด์ของผมเป็นสีส้ม ขอเลือกเทมเพลตอันนี้ตรงนี้ แบบสิบสไลด์ แล้วสิ่งที่เกิดขึ้นคือผมจะคลิก fit copy to this ทำไมต้องทำขั้นตอนนี้? เพราะทุกเทมเพลตมีจำนวนตัวอักษรที่รองรับได้ ถ้าจำนวนตัวอักษรเกินกว่าที่เทมเพลตรองรับ ดีไซน์ก็จะดูไม่สวย ดังนั้นสิ่งที่ Vera จะทำคือดูเทมเพลตที่เราเลือก แล้วปรับข้อความที่จะลงบนสไลด์ให้เข้ากับเทมเพลตนั้นๆ จากนั้น Vera ก็ปรับข้อความสไลด์ให้เข้ากับเทมเพลตที่เราเลือกเสร็จเรียบร้อย ตรงนี้ผมแค่คลิก render this จากนั้นก็จะเรียกเอเจนต์อีกตัวชื่อ Kite ซึ่งทำหน้าที่ด้านดีไซน์ พอมาที่นี่จะเห็นว่าสไลด์พร้อมแล้ว ผมสามารถคลิกเปิดในสตูดิโอได้ หรือจะมาที่แท็บสตูดิโอก็ได้ แล้วมันจะโชว์สไลด์ให้ดู พอคลิก open in studio คุณจะเห็นสไลด์ที่เอเจนต์สร้างขึ้นมา จะเห็นว่าผมมีแปดสไลด์ที่ปรับแต่งให้เข้ากับสิ่งที่เราทำเป๊ะๆ
ความสวยงามของการสร้างสไลด์แบบนี้คือ โดยปกติเวลาคนสร้างสไลด์ Instagram คุณต้องใช้เอเจนต์สร้างภาพหรือโมเดลสร้างภาพ ซึ่งจะคิดเงินคุณทุกครั้งที่สร้างสไลด์ และส่วนที่เจ็บปวดที่สุดคือ ทุกครั้งที่อยากแก้ข้อความ คุณต้องจ่ายเงินทุกครั้งต่อ API call แต่ความเจ๋งของสิ่งที่เราสร้างตรงนี้คือ สไลด์ทุกใบเรนเดอร์เป็นไฟล์ HTML หมายความว่าเมื่อคุณมาที่นี่แล้วคลิก fine-tune the slide แล้วเลือกสไลด์ใดก็ได้ ผมสามารถแก้ไขและเพิ่มชื่อผม Larry ตรงนี้ได้ ทำอะไรก็ได้ตามต้องการโดยไม่ต้องจ่ายเงินอะไรเลย อีกอย่างที่ผมเพิ่มให้คือ คุณสามารถปรับสไลด์ให้ชิดซ้าย ขวา บน ล่าง ย่อขนาดสไลด์ เปลี่ยนขนาดฟอนต์ได้ทุกอย่าง แล้วพอเสร็จก็แค่คลิก save เท่านั้นเอง สมมติว่าคุณพอใจกับคอนเทนต์ทั้งหมดแล้ว คุณก็สามารถโปรโมตมันต่อได้ คุณยังแปลงมันเป็น reel ได้ด้วยการคลิก animate this carousel คุณสามารถทำให้สไลด์ทั้งหมดเคลื่อนไหวต่อกันแบบ reel ด้วยอัตราส่วน 4:5 หรือจะสร้าง reel เต็มรูปแบบด้วยอัตราส่วน 9:16 ก็ได้
สมมติว่าผมเสร็จและพอใจกับสิ่งที่สร้างมา ผมก็แค่มาคลิก post now และในกรณีของผม ผมตั้งค่า Instagram ไว้แล้ว ผมจึงคลิก post to Instagram ได้เลย จากนั้นเอเจนต์จะเตือนว่า "เฮ้ แน่ใจนะว่าจะโพสต์ภาพนี้?" ผมก็จะตอบว่า "ใช่ โพสต์เลย" แล้วภาพก็จะถูกส่งผ่านแพลตฟอร์มที่เราจะใช้กันชื่อว่า Buffer ซึ่งเชื่อมต่อกับทุกแพลตฟอร์มโซเชียล แล้วมันจะถูกส่งตรงไปยัง Instagram ให้เรา จากนั้นผมจะได้รับการแจ้งเตือนจาก Orion ซึ่งเป็นนักเผยแพร่ (publisher) ของเราว่าโพสต์ถูกส่งไปที่ Buffer แล้ว ดังนั้นภายในไม่กี่นาที เราควรเห็นมันบน Instagram โดยตรง และตรงนั้นคุณก็เห็นเลย นี่คือบัญชีทดสอบที่ผมสร้างไว้เพื่อทดสอบสิ่งที่ผมกำลังสร้าง พอมาที่นี่คุณจะเห็นว่าโพสต์ที่เราเพิ่งสร้างขึ้นออนไลน์บน Instagram แล้ว หน้าตาตรงกับที่เรารีเอนเดอร์เป๊ะ และนี่คือสิ่งที่ผมจะสร้างร่วมกับทุกคนในวันนี้
นอกจากนี้เรายังมีแท็บ dedicated agents ที่ให้ข้อมูลเชิงลึกเกี่ยวกับสถาปัตยกรรมเอเจนต์ของเรา คุณจะเห็นว่าเอเจนต์ลูกแต่ละตัวมีการ์ดของตัวเอง ซึ่งคุณสามารถดูโมเดล AI ที่เอเจนต์ใช้ จำนวนครั้งที่เอเจนต์ตัวนั้นทำงาน จำนวนงานที่สำเร็จ รวมถึงงานล่าสุดบางส่วนที่เอเจนต์ทำ เหนือเอเจนต์ทั้งสี่ตัวนี้ขึ้นไป เรามี orchestrator ซึ่งเป็นเหมือนเจ้านายของเอเจนต์ทั้งหมด ด้านล่างเรามีแผนที่ความร้อนของกิจกรรม (activity heat map) ที่แสดงว่าในกรอบเวลา 24 ชั่วโมง เอเจนต์ตัวไหนทำงานบ้าง ยิ่งสีสว่างมากก็หมายความว่าเอเจนต์ทำงานหนักในช่วงเวลานั้น ส่วนพื้นที่สีเข้มหมายความว่าเอเจนต์ไม่ได้ทำงานในช่วงเวลานั้น
การ build ทั้งหมดจะใช้เวลาประมาณ 4-5 ชั่วโมงถ้าคุณมีพรอมป์ต์และเทมเพลตครบ ผมจึงสร้างตัวติดตั้งอัตโนมัติ (auto installer) ที่ทำทุกอย่างให้คุณภายในไม่กี่นาที ถ้าสนใจตัวติดตั้งอัตโนมัติ มันก็จะอยู่ในส่วนคำอธิบาย (description) เช่นกัน เอาล่ะ เข้าเรื่องการ build กันเลย เริ่มแรกเราจะติดตั้ง Hermes ก่อน Hermes Agents ช่วยให้คุณสร้างโครงสร้างพื้นฐานของเอเจนต์หลายตัว (multi-agent infrastructure) ที่คุณสามารถคุยกับเอเจนต์ AI ของคุณผ่านแอปพลิเคชันยอดนิยมต่างๆ เช่น Telegram, Discord, Slack, WhatsApp และแอปส่งข้อความยอดนิยมอื่นๆ นอกจากนี้ แทนที่จะถูกจำกัดให้ใช้โมเดล AI ตัวเดียว คุณสามารถใช้โมเดล AI ตัวไหนก็ได้ที่ต้องการ ไม่ว่าจะเป็นจาก OpenAI, Anthropic หรือโมเดลยอดนิยมอื่นๆ
การติดตั้ง Hermes มีหลายทางเลือกให้คุณ คุณสามารถติดตั้งบน Windows PC ได้ถ้ามีเครื่องเฉพาะที่อยากให้มันรัน หรือจะติดตั้งผ่านระบบปฏิบัติการ Linux ก็ได้ สำหรับการตั้งค่านี้ผมจะใช้วิธีแบบ Linux ผมรู้ว่า Linux ฟังดูน่ากลัว แต่ไม่ต้องกังวล ผมจะพาคุณไปทีละขั้นตอนทั้งหมด และเมื่อเราตั้งค่าเสร็จ ซึ่งใช้เวลาไม่กี่นาที ทุกอย่างที่คุณต้องทำจะอยู่บนแดชบอร์ดที่เรากำลังจะสร้าง หรือจากแอปพลิเคชัน Telegram คุณไม่ต้องเข้ามาในเทอร์มินัลเพื่อพิมพ์คำสั่งอะไรให้ยุ่งยาก แต่ผมจะพาคุณผ่านกระบวนการทั้งหมดตั้งแต่ A ถึง Z เพื่อให้คุณเข้าใจภาพรวมว่ากระแสงานนี้ทำงานอย่างไร
ถ้าคุณมี PC ที่สามารถรันสิ่งนี้ได้ ก็ใช้ได้เลย แต่ในกรณีของผม ผมไม่มี PC เฉพาะ คุณจึงสามารถเช่าเซิร์ฟเวอร์ที่ไหนสักแห่งมารันได้ ซึ่งผมเองก็ชอบตัวเลือกนี้ แต่ก็แล้วแต่คุณนะครับ ข้อดีของการใช้เซิร์ฟเวอร์ส่วนตัวคือ คุณเช่าเซิร์ฟเวอร์จากบริษัทอื่น จ่ายประมาณ 4 ดอลลาร์ต่อเดือน แล้วเซิร์ฟเวอร์นี้จะเปิดตลอด 24/7 คุณไม่ต้องกังวลเรื่องการดูแลรักษา ไม่ต้องกังวลเรื่องการเชื่อมต่ออินเทอร์เน็ตอะไรแบบนั้น แต่แน่นอนว่ามันก็มีค่าใช้จ่าย คุณจึงต้องตัดสินใจว่าจะรันบน PC ส่วนตัวที่บ้านหรือจะเช่าเซิร์ฟเวอร์
สำหรับผู้ให้บริการ VPS ที่ผมแนะนำส่วนตัวคือ Racknerd และ Contabo ตัวอย่างเช่นกับ Racknerd คุณจะได้เซิร์ฟเวอร์ที่มี CPU สองคอร์ พื้นที่เก็บข้อมูล 35 GB, RAM 2 GB ในราคาประมาณ 35 ดอลลาร์ต่อปี คิดเป็นประมาณ 2.9 ดอลลาร์ต่อเดือน ซึ่งถือว่าคุ้มมากสำหรับเซิร์ฟเวอร์ เพราะคุณไม่ต้องกังวลเรื่องการเปิดเครื่องตลอด 24/7 กิจกรรมอินเทอร์เน็ต การบำรุงรักษา และอื่นๆ กับ Racknerd คุณจ่ายปีละครั้งก็จบ ไม่ต้องกังวลเรื่องการจ่ายรายเดือนอะไรทั้งนั้น ส่วนตัวเลือกที่สองคือ Contabo ซึ่งก็มีเซิร์ฟเวอร์ที่เชื่อถือได้พอสมควร และราคาก็ค่อนข้างย่อมเยาสำหรับสเปกของ VPS ที่คุณได้รับ
ตัวอย่างเช่นกับ Contabo คุณจะได้เซิร์ฟเวอร์ที่มี CPU สี่คอร์, RAM 8 GB และพื้นที่ SSD ประมาณ 100 GB ในราคาประมาณ 8 ดอลลาร์ต่อเดือน ตัวนี้จะมากเกินพอสำหรับสิ่งที่เราจะสร้างแน่นอน คุณจึงเลือกได้ระหว่าง Racknerd หรือ Contabo ผมจะใส่ลิงก์อ้างอิง (referral link) ไว้ในส่วนคำอธิบาย ถ้าอยากได้บริการเหล่านี้ และขอบอกว่า วิดีโอนี้ไม่ได้ถูกสปอนเซอร์โดยบริษัทเหล่านี้ ผมแค่แนะนำสิ่งที่ผมใช้เป็นประจำเวลาตั้งค่าโครงสร้างพื้นฐานพวกนี้ ถ้าอยากเลือก Racknerd ก็เข้ามาที่นี่ อย่างที่บอก ตัวเลือกที่ผมแนะนำคือตัวนี้ คลิก order now แล้วคุณจะถูกพาไปยังหน้าที่แสดงสรุปสเปกฮาร์ดแวร์ของ VPS ที่คุณเลือก พอเลื่อนลงมาก็จะเห็นป้ายชื่อเซิร์ฟเวอร์ (server label) ซึ่งสามารถเปลี่ยนทีหลังได้ สำหรับตัวเลือกการกำหนดค่า (configuration options) ผมแนะนำให้ปล่อยเป็นค่าเริ่มต้นไว้ ระบบปฏิบัติการเราจะใช้ Ubuntu 22.04 ส่วน RAM ปล่อยเป็นค่าเริ่มต้นทั้งหมด เพราะถ้าเพิ่ม RAM ทันทีก็จะเสียค่าใช้จ่ายเพิ่ม ผมเลยแนะนำให้ใช้ตัวเลือกเริ่มต้นที่มีให้ ส่วนตำแหน่งที่ตั้ง (location) คุณเลือกที่อยู่ใกล้ตัวคุณที่สุดก็ได้ แต่สิ่งที่เราจะสร้างนั้น latency ไม่ใช่ปัญหาใหญ่ ผมเลยไม่กังวลเรื่องความใกล้ไกลมากนัก ค่าใช้จ่ายปล่อยเป็นค่าเริ่มต้น ถ้าเลือกตัวสูงกว่าก็จะจ่ายมากขึ้น จากนั้นคลิก continue แล้วคุณจะได้รับอีเมลที่มีข้อมูลรับรอง (credentials) ทั้งหมดที่จำเป็นต่อการเชื่อมต่อกับเซิร์ฟเวอร์ VPS ซึ่งผมจะพาคุณผ่านกระบวนการนั้นด้วย
ถ้าอยากเลือกตัวเลือก Contabo อย่างที่บอก ตัวเลือกที่เรามีตรงนี้คือ Cloud VPS 4 หรือตัวเลือกต่ำสุดที่มี จะทรงพลังเกินพอสำหรับสิ่งที่เราจะสร้าง ตรงนี้คลิก get started ระวังหน่อยนะครับ เพราะค่าเริ่มต้นบางทีเป็น 24 เดือน หมายความว่าคุณจะถูกผูกกับ VPS ตัวนี้เป็นเวลา 2 ปี และแน่นอนว่ายิ่งสัญญายาวก็ยิ่งถูกลง แต่ระวังไว้ว่า ถ้าเลือก 2 ปี คุณจะต้องจ่ายเงินจำนวนนี้เป็นเวลา 2 ปี ถ้าต้องการความยืดหยุ่นยกเลิกได้ทุกเดือน ก็เลือกตัวเลือกหนึ่งเดือน ซึ่งในกรณีของผมจะจ่ายประมาณ 5.5 ดอลลาร์ต่อเดือน ส่วนภูมิภาค (region) ปล่อยเป็น European Union ตามค่าเริ่มต้นได้เลย เพราะ Contabo อยู่ในสหภาพยุโรป และทันทีที่คุณเลือกตำแหน่งอื่นก็จะมีค่าใช้จ่ายเพิ่ม แต่อย่างที่บอกไปก่อนหน้านี้ สิ่งที่เราจะสร้าง latency ไม่ค่อยเป็นปัญหา คุณปล่อยเป็น European Union ไว้เลยก็ได้ พอเลื่อนลงมาส่วนพื้นที่จัดเก็บ (storage) เลือก SSD 100 GB ซึ่งฟรีและมากเกินพอสำหรับสิ่งที่เราจะสร้าง ระบบปฏิบัติการปล่อยเป็น Ubuntu ตามค่าเริ่มต้น
สำหรับการปกป้องข้อมูล (data protection) ผมแนะนำให้เลือกตัวเลือก auto backup บ่อยครั้งที่ผมทำงานกับเอเจนต์แล้วมีอะไรบางอย่างพังไปหมด แล้วด้วย auto backup มันจะถ่าย snapshot ของ VPS ทุกวัน หมายความว่าถ้ามีอะไรผิดพลาด คุณสามารถย้อนกลับไปได้ประมาณ 10 วัน และกู้คืนอิมเมจที่คุณมีบน VPS ในวันนั้นๆ ได้เสมอ อันนี้เป็นตัวเลือกเสริม แต่อย่างที่บอก แนะนำอย่างยิ่ง เพราะลองนึกดู ถ้าคุณสร้างระบบจัดการคอนเทนต์มานานกว่าหนึ่งปีแล้วเกิดความผิดพลาดขึ้นมา คุณจะเสียมันไปทั้งหมด เพื่อเซฟตัวเอง คุณยังสามารถตั้งค่า auto backup ของตัวเองซึ่งจะถ่าย snapshot ของ VPS ทุกวันได้ด้วย เช่นสร้างด้วย cron ก็ได้ แต่ถ้าไม่อยากทำเองและอยากใช้ตัวเลือก auto backup เริ่มต้นของ Contabo ก็เลือกอันนี้ได้ ซึ่งจะเสียประมาณ 1.65 ดอลลาร์ต่อเดือน ส่วน additional features ปล่อยเป็นค่าเริ่มต้นทั้งหมด ในส่วนนี้คุณต้องใส่รหัสผ่านสำหรับเชื่อมต่อกับเซิร์ฟเวอร์ VPS ตรงนี้คุณสามารถสร้างรหัสผ่านใหม่หรือใส่รหัสผ่านอะไรก็ได้ตามต้องการ ซึ่งเป็นรหัสผ่านที่คุณต้องจำไว้ เพราะเป็นรหัสที่ใช้เชื่อมต่อกับเซิร์ฟเวอร์ VPS ถ้าลืมรหัสผ่าน คุณสามารถเข้าไปในคอนโซลแผงควบคุม (control panel) แล้วรีเซ็ตรหัสผ่านได้ แต่จะไปยุ่งยากทำไม หลังจากนั้นก็คลิก next ชำระเงิน แล้วผมจะพาคุณผ่านขั้นตอนถัดไป
ถ้าคุณเลือกตัวเลือก Racknerd หลังจากชำระเงินแล้ว คุณจะได้รับอีเมลแบบนี้จาก Racknerd จากอีเมลนี้เราจะต้องใช้สามอย่าง สิ่งแรกคือ IP address ของเซิร์ฟเวอร์ VPS ซึ่งทุกเซิร์ฟเวอร์ VPS มี IP address เฉพาะตัว และพวกเขาจะให้ IP นี้มา สิ่งที่สองคือชื่อผู้ใช้ (username) ของบัญชีที่ใช้เชื่อมต่อกับเซิร์ฟเวอร์ VPS ซึ่งกับ Racknerd ส่วนใหญ่ชื่อจะเป็น root เสมอ และอย่างที่สามคือรหัสผ่าน ซึ่งพวกเขาก็จะให้มาในนี้เรียกว่า root password ทั้งสามข้อมูลนี้จะอยู่ในอีเมลของคุณ ส่วน SSH port ไม่ต้องกังวล เพราะแอปพลิเคชันส่วนใหญ่ที่ใช้เชื่อมต่อกับเซิร์ฟเวอร์ VPS จะตั้งค่าเริ่มต้นเป็นพอร์ต SSH 22 เสมอ ด้วย IP address, username และรหัสผ่าน คุณจะสามารถเชื่อมต่อกับเซิร์ฟเวอร์ VPS ได้ ซึ่งผมจะพาคุณทำในขั้นตอนถัดไป
ถ้าคุณเลือกตัวเลือก Contabo คุณจะได้รับอีเมลแบบนี้จาก Contabo อีเมลของผมเป็นภาษาเยอรมัน แต่รูปแบบจะเหมือนกันไม่ว่าคุณจะอยู่ประเทศไหนหรือใช้ภาษาอะไร ในอีเมลจาก Contabo เราจะใช้สองอย่าง ทางด้านซ้ายนี้คือ IP address ซึ่งเป็น IP เฉพาะของเซิร์ฟเวอร์ VPS และเรายังต้องใช้ username ซึ่งกับ Contabo ก็เหมือนกัน ส่วนใหญ่ username จะเป็น root ส่วนรหัสผ่าน พวกเขาจะไม่ให้ในอีเมล แต่จะเป็นรหัสที่คุณตั้งตอนซื้อ VPS ดังนั้นด้วย IP address, username และรหัสผ่านที่คุณตั้งตอนซื้อ VPS เราจะสามารถเชื่อมต่อกับเซิร์ฟเวอร์ได้ และการเชื่อมต่อกับเซิร์ฟเวอร์ VPS มีแอปพลิเคชันหลายตัวให้เลือก ข่าวดีคือ ไม่ว่าคุณจะใช้ Windows หรือ Mac ทั้งคู่มาพร้อมแอปพลิเคชันในตัวที่ใช้เชื่อมต่อกับ VPS ได้ ถ้าใช้ Windows ก็แค่คลิกที่แถบค้นหาแล้วหาแอปชื่อ Windows PowerShell แล้วพอคลิกเปิด มันก็จะมีหน้าตาแบบนี้ ถ้าคุณใช้ Mac แอปพลิเคชันที่ใช้จะเรียกว่า Terminal คำสั่งที่เราจะใช้ใน PowerShell ที่นี่จะเหมือนกับที่ใช้ในเทอร์มินัลของ Mac ทุกประการ ไม่ต้องกังวลเรื่องความแตกต่างของคำสั่ง ในการเชื่อมต่อกับเซิร์ฟเวอร์ VPS แค่พิมพ์คำสั่ง ssh เว้นวรรค แล้วตามด้วย root โดย root คือ username ของเซิร์ฟเวอร์ VPS ซึ่งเหมือนกัน
สำหรับทั้ง Contabo และ Racknerd หลังจากนั้นก็ใส่ IP address ของเซิร์ฟเวอร์ VPS ของคุณ เคล็ดลับใน PowerShell คือ เมื่อไหร่ก็ตามที่คุณมีอะไรอยู่ในคลิปบอร์ด แล้วคลิกขวาที่เมาส์ มันจะวางสิ่งที่อยู่ในคลิปบอร์ดออกมา ซึ่งมีประโยชน์มาก โดยเฉพาะตอนพิมพ์รหัสผ่าน หลังจากนั้นก็กด enter ถ้าเป็นการเชื่อมต่อเซิร์ฟเวอร์ครั้งแรก มันจะถามว่าคุณต้องการเพิ่มฟิงเกอร์พรินต์ (fingerprint) ของเซิร์ฟเวอร์นี้ลงใน PC ของคุณหรือไม่ ถ้าคุณแน่ใจว่ากำลังเชื่อมต่อกับเซิร์ฟเวอร์ที่ถูกต้อง ก็พิมพ์ yes แล้วมันก็จะเรียบร้อย จากนั้นมันจะถามรหัสผ่านของ VPS ถ้ารหัสผ่านคุณซับซ้อน ก็พิมพ์มันไว้ที่ไหนสักแห่งก่อน แล้วเข้ามาที่นี่ คลิกขวา มันจะวางรหัสผ่านจากคลิปบอร์ด แล้วกด enter จากนั้นคุณจะเห็นว่าในกรณีของผม ผมเชื่อมต่อกับเซิร์ฟเวอร์ VPS ของผมแล้ว ผมจะล้างหน้าจอด้วยการพิมพ์ clear แล้วเราก็เริ่มขั้นตอนการตั้งค่าได้
ตอนนี้เราเชื่อมต่อกับ VPS โดยใช้ชื่อ root ซึ่งโดยทั่วไปคือผู้มีอำนาจสูงสุดบนเซิร์ฟเวอร์ Linux คำแนะนำของผมคือ อย่าติดตั้ง Hermes บน user root แต่ให้สร้างโปรไฟล์หรือ user ใหม่เพื่อรันมัน คำแนะนำนี้มีประโยชน์มาก เพราะคุณจะไม่ให้ Hermes เป็นผู้มีอำนาจสูงสุดบน VPS ของคุณ ในวิดีโอก่อนๆ ของผม เรามักทำบน root ซึ่งก็ไม่ผิดอะไร แต่ผมพยายามพัฒนาและนำทิปด้านความปลอดภัยที่ดีที่สุดมาให้เสมอ นี่คือเหตุผลที่รอบนี้เราจะไม่ติดตั้ง Hermes บน root เราจะสร้าง user เฉพาะเพื่อติดตั้งแอปพลิเคชัน Hermes ทั้งหมดบนนั้น
การสร้าง user ใหม่บน Linux ใช้คำสั่ง useradd เว้นวรรค แล้วตามด้วยชื่อ user ที่อยากสร้าง ในกรณีของผมจะตั้งชื่อว่า Larry พิมพ์ adduser Larry หลังจากนั้นมันจะถามรหัสผ่านสำหรับ user นี้ ผมก็จะใส่รหัสผ่านของผม แล้วกด enter มันจะให้พิมพ์รหัสผ่านอีกครั้ง แล้วกด enter จากนั้นจะถามว่าต้องการใส่ชื่อเต็ม (full name) หรือไม่ ข้ามได้โดยกด enter ส่วน room number กด enter, phone กด enter ข้ามไปเลย, home phone ข้ามได้เช่นกัน แล้วมันจะถามว่าข้อมูลที่กรอกถูกต้องหรือไม่ พิมพ์ Y แทน yes แล้วกด enter ตอนนี้คุณจะเห็นว่า Larry ถูกเพิ่มเป็น user แล้ว ต่อไปเราจะให้สิทธิ์ sudo แก่ user Larry เพื่อให้มันสามารถรันคำสั่งบางอย่างและติดตั้งแอปพลิเคชัน Hermes ได้ โดยใช้คำสั่งนี้: usermod -aG sudo larry ตรงนี้ให้แทนที่ Larry ด้วย username ของคุณ แล้วกด enter ยังไงก็ตาม ผมจะให้คำสั่งพวกนี้กับคุณด้วย คุณไม่จำเป็นต้องพิมพ์หรือจำมัน หลังจากนั้นกด enter เราก็จะได้ Larry เป็น user ที่มีสิทธิ์ sudo แล้ว
ผมจะล้างหน้าจอเพื่อให้ดูสะอาดขึ้น จากนั้นเราจะสลับจาก root user ไปเป็น Larry user เพื่อเข้าสู่ระบบในฐานะ Larry ที่เพิ่งสร้าง โดยใช้คำสั่ง su - แล้วตามด้วย Larry จะเห็นว่าสัญลักษณ์เปลี่ยนจาก root เป็น Larry นั่นหมายความว่าตอนนี้ผมไม่ได้อยู่บน root ซึ่งมีอำนาจสูงสุดแล้ว ผมเข้าสู่ระบบเป็น Larry ซึ่งมีอำนาจระดับนี้แล้ว ตอนที่เราเชื่อมต่อ VPS เราใช้คำสั่ง ssh root@IP address แต่ถ้าอยากเชื่อมต่อโดยไม่ใช้ root ก็สามารถใช้ user ใหม่ที่เราสร้าง ซึ่งในกรณีของผมคือ Larry แล้วใส่ IP address ของ VPS กด enter ใส่รหัสผ่านที่สร้างไว้ แล้วจะเห็นว่าผมเชื่อมต่อกับ VPS ได้เช่นกัน คุณจึงเชื่อมต่อ VPS ได้สองทาง คือใช้ root แล้วสลับเป็น Larry ด้วยคำสั่ง su - Larry หรือจะ ssh เข้าไปที่ Larry โดยตรงก็ได้ ผมจะยึดวิธีเดิมที่ตั้งค่าไว้แล้ว ผมพิมพ์ clear เพื่อล้างหน้าจอ แล้วเราก็เริ่มติดตั้ง Hermes ได้เลย
การติดตั้ง Hermes เราจะไปที่เว็บไซต์หลักของ Hermes เมื่อมาถึงหน้านี้ ให้เลื่อนลงมาตรงส่วน install via terminal เราจะใช้ native application และตรงนี้คำสั่งจะเริ่มต้นด้วย curl เสมอ เพื่อให้แน่ใจว่าคุณใช้คำสั่งที่ถูกต้อง คลิกเพื่อคัดลอก one-line installer ข้อดีคือ ตัวติดตั้งแบบบรรทัดเดียวนี้จะติดตั้ง dependencies ทั้งหมดที่จำเป็นสำหรับการติดตั้งหรือรัน Hermes โดยที่คุณไม่ต้องลงแอป A แอป B อะไรต่อมิอะไร หลังจากนั้นกด enter แล้วการติดตั้งก็จะรัน มันตรวจพบว่าผมใช้ Linux และจะรันสิ่งอื่นๆ ที่ขาดหายไปบนเซิร์ฟเวอร์ด้วย ตรงนี้มันถามว่าต้องการติดตั้ง ripgrep สำหรับค้นหาไฟล์ที่เร็วขึ้น และ TTS สำหรับข้อความเสียงไหม อันนี้ดีครับ เราก็พิมพ์ yes ว่าต้องการติดตั้ง แล้วกด enter จากนั้นผมจะใส่รหัสผ่านแล้วกด enter แล้วการติดตั้งก็จะดำเนินต่อไป ผมจะรอให้การติดตั้งเสร็จ แล้วเราค่อยไปต่อกัน
เอาล่ะ การติดตั้งส่วนที่ต้องมีก่อน (prerequisite) เสร็จแล้ว ตอนนี้เราสามารถเริ่มการตั้งค่าได้ ที่นี่เราต้องเลือกวิธีการตั้งค่า Hermes ผมแนะนำให้เลือก quick setup เพราะ full setup จะถามอะไรหลายอย่างที่เราต้องกำหนดค่า ทั้งที่เราไม่จำเป็นต้องใช้ และอันนี้ก็เป็นตัวเลือกที่แนะนำอยู่แล้ว แค่ทำให้แน่ใจว่าเลือกตัวเลือกนี้อยู่ ถ้าไม่ ก็ใช้ปุ่มลูกศรขึ้นลงบนคีย์บอร์ด ให้แน่ใจว่าเคอร์เซอร์อยู่ที่ตัวเลือกนี้ แล้วกด space bar หรือ enter ขั้นตอนถัดไปเราจะต้องสร้างบัญชีกับ Nous Research ถ้าคุณมีบัญชีอยู่แล้วก็ไม่ต้องสร้างใหม่ โดยพื้นฐานแล้ว ขั้นตอนนี้คือการผูก VPS หรือเซิร์ฟเวอร์ หรือการติดตั้ง Hermes นี้เข้ากับบัญชี Nous Research ของคุณ ตรงนี้คุณเลือกแผนฟรี (free subscription) ได้ Nous Research มีแผนเสียเงินบางแผนที่ให้คุณใช้กลุ่มโมเดล AI ของพวกเขาได้ แต่ในกรณีของผม ผมจะนำโมเดล AI ของตัวเองมาใช้ ดังนั้นผมจะเลือกตัวเลือกฟรี กด ctrl บนคีย์บอร์ดแล้วคลิกที่ URL นี้ ถ้ายังไม่มีบัญชี คุณจะเห็นตัวเลือกให้สร้างบัญชี แต่ในกรณีของผม ผมมีบัญชีอยู่แล้วและล็อกอินอยู่ มันจึงพาไปที่หน้าจอที่ผูกบัญชีกับการตั้งค่าได้โดยตรง ตรงนี้คลิก connect พอสำเร็จคุณจะได้รับการแจ้งเตือนว่าเชื่อมต่อแล้ว เมื่อกลับมาที่หน้าจอตัวติดตั้ง Hermes คุณจะเห็นว่ามันพาไปที่ขั้นตอนการเลือกโมเดล อย่างที่บอก ในกรณีของผม ผมจะไม่ใช้โมเดลใดๆ ที่ Nous Research ให้มา ผมจะนำโมเดลของตัวเองเข้ามา
ตรงนี้คุณสามารถกด enter เพื่อข้ามขั้นตอนการเลือกโมเดลได้ ขั้นตอนถัดไปเราจะเลือกเครื่องมือ (tools) สองสามอย่างที่ใช้กับ Hermes Agent ได้ เช่น คุณสามารถให้ตัวเลือกแก่เอเจนต์ในการค้นหาบนอินเทอร์เน็ตและดึงข้อมูลจากเว็บไซต์เฉพาะบางแห่ง ซึ่งตรงนี้คุณสามารถใช้เครื่องมือที่เรียกว่า Firecrawl และก็เช่นเดียวกัน ยังมีเครื่องมืออื่นๆ สำหรับการสร้างภาพ การแปลงข้อความเป็นเสียง (text to speech) การแปลงเสียงเป็นข้อความ (speech to text) และอื่นๆ ตรงนี้คุณสามารถกด enter เพื่อใช้ทั้งหมด หรือจะยกเลิกการเลือกบางอันที่ไม่ต้องการก็ได้ ขั้นตอนถัดไปเราจะเลือกเทอร์มินัลแบ็กเอนด์ (terminal back end) ปล่อยเป็นค่าเริ่มต้นคือ local ได้เลย โดยกด space bar ขั้นตอนถัดไปเราจะเชื่อมต่อแพลตฟอร์มส่งข้อความที่ใช้คุยกับเอเจนต์ AI ทั้งหมดของเรา และตรงนี้แนะนำให้ตั้งค่า เพราะเราไม่อยากคุยกับเอเจนต์ AI ผ่านเทอร์มินัลบน VPS ทุกครั้ง เราอยากมีอินเทอร์เฟซที่ง่ายและเป็นมิตรกว่าสำหรับคุยกับเอเจนต์ AI ดังนั้นตรงนี้เราจะเลือก set up messaging ซึ่งก็เป็นตัวเลือกที่แนะนำอยู่แล้ว กด space bar บนคีย์บอร์ด แล้วมันจะแสดงรายการแพลตฟอร์มส่งข้อความทั้งหมดที่ตั้งค่ากับ Hermes อยู่ และอย่างที่เห็น มีให้เลือกเยอะมาก แต่ในการตั้งค่านี้เราจะใช้ Telegram ให้กดลูกศรลงบนคีย์บอร์ด แล้วตรงนี้อย่ากด enter เพราะถ้ากด enter มันจะข้ามส่วนนี้ไป ให้กด space bar เพื่อให้แน่ใจว่ามันถูกติ๊กเลือก แล้วค่อยกด enter
ต่อไปเราจะสร้าง Telegram bot ซึ่งจะเป็นบอทที่เราใช้คุยกับเอเจนต์ที่จะสร้าง ในการตั้งค่า Telegram bot คุณเลือกได้ระหว่างการตั้งค่าอัตโนมัติ (automatic) หรือแบบ manual ในกรณีของผม ผมจะเลือกตัวเลือกกลางๆ คือ manual เพื่อโชว์ให้คุณเห็นว่าทำอย่างไร เผื่อภายหลังคุณต้องใช้กับแอปพลิเคชันอื่น สำหรับ manual ให้กด 2 แล้วกด enter แล้ว Hermes จะถามว่า Telegram bot token คืออะไร ในการหามัน ให้ไปที่ Telegram แล้วค้นหาบอทชื่อ BotFather คุณจะเห็นว่าบอท BotFather ตัวจริงมีผู้ใช้ต่อเดือนกว่า 7 ล้านคน เพื่อให้แน่ใจว่าคุณใช้บอทที่ถูกต้อง ระวังหน่อยนะครับ อย่างที่เห็น มี BotFather อยู่หลายตัว แต่ตัวที่คุณต้องใช้คือตัวที่มีเครื่องหมายถูกตรงนี้ และมียอดผู้ใช้กว่า 7 ล้านคนต่อเดือน ในการสร้างบอทใหม่ ใช้คำสั่ง /newbot แล้วกด enter หรือคลิกที่คำแนะนำที่มีให้ตรงนี้ ต่อไปเราต้องตั้งชื่อให้บอท ผมจะเรียกมันว่า KM ในกรณีของผม ย่อจาก Komputer Mechanic content creation OS พอตั้งชื่อเสร็จก็กด enter แล้วมันจะให้ใส่ username ของบอท ที่สำคัญมากคือ username ต้องลงท้ายด้วยคำว่า bot ผมเลยคัดลอกมาเพราะอยากให้ชื่อเดียวกันแต่เติมคำว่า bot ต่อท้าย แล้วกด enter บอทก็จะถูกสร้างให้คุณ
เมื่อบอทถูกสร้าง BotFather จะให้คีย์เฉพาะตัวที่ยืนยันว่าคุณเป็นผู้สร้างหรือเจ้าของบอทนั้น ผมจะคลิกที่นี่เพื่อคัดลอกคีย์ เพราะนั่นคือสิ่งที่ตัวติดตั้ง Hermes กำลังถาม และผมจะวางคีย์ลงตรงนี้ แล้วกด enter ขั้นตอนนี้เป็นขั้นตอนที่แนะนำอย่างยิ่ง Hermes ถามว่า คุณต้องการกำหนดผู้ใช้บางคนที่เป็นคนเดียวที่ได้รับอนุญาตให้คุยกับบอทไหม? อันนี้สำคัญมากๆ เพราะถ้ามีคนรู้ username ของบอทคุณ คุณคงไม่อยากให้พวกเขาคุยกับบอทได้ เราจึงจะบอก Hermes ว่า "เฮ้ ให้ผมเป็นคนเดียวที่คุยกับบอทนี้ได้" และวิธีเดียวที่ Hermes จะรู้ว่าคุณคือใครคือการให้ Hermes รู้ user ID ของคุณใน Telegram ในการหา Telegram user ID เราจะใช้บอทที่ชื่อว่า User Info Bot ซึ่งมีผู้ใช้กว่า 400,000 คน มีบอทอื่นๆ อีกเยอะ ดังนั้นต้องแน่ใจว่าใช้ตัวที่ถูกต้อง ในการหา user ID คุณแค่ส่งข้อความอะไรก็ได้ไปให้บอท เช่น "hi" แล้วบอทจะตอบกลับด้วย user ID ของคุณ ผมจะคลิกที่นี่เพื่อคัดลอก user ID กลับมาที่เทอร์มินัลการติดตั้ง Hermes วาง user ID แล้วกด enter จากนั้น Hermes จะถามว่าต้องการตั้ง user ID นี้เป็น home channel ไหม นั่นหมายความว่าในแชทที่คุณคุยกับบอท เมื่อไหร่ก็ตามที่ Hermes gateway รีสตาร์ทหรือมีอะไรเกี่ยวกับระบบเกิดขึ้น คุณจะได้รับการแจ้งเตือนในหน้าต่างแชทนี้ พิมพ์ Y แทน yes แล้วกด enter
จากนั้นจะถามว่าต้องการติดตั้ง Hermes gateway เป็น system service ไหม อันนี้สำคัญมาก เพราะเมื่อไหร่ก็ตามที่เซิร์ฟเวอร์ VPS รีสตาร์ทเพราะการอัปเดตระบบหรืออะไรก็ตาม Hermes gateway จะเริ่มทำงานโดยอัตโนมัติ ซึ่งมีประโยชน์มาก คุณจะได้ไม่ต้องเริ่มมันด้วยตัวเองทุกครั้ง กด Y แทน yes แล้วกด enter แล้วตรงนี้จะถามว่าต้องการรัน gateway แบบไหน ในกรณีของเราเราจะใช้ system service กด enter จากนั้นจะถามอีกครั้งว่าต้องการรันและติดตั้ง gateway เป็น background system service ไหม กด Y แทน yes แล้วกด enter แล้วการติดตั้ง Hermes ก็เสร็จสมบูรณ์
สำคัญมากตรงนี้ เราจะต้องโหลดเชลล์ใหม่เพื่อที่เราจะได้พิมพ์ hermes แล้วมันจะเปิดแอปพลิเคชัน Hermes ในการทำอย่างนั้น ให้คัดลอกคำสั่งที่เขาให้ไว้ตรงนี้ วางกลับเข้าไปในเทอร์มินัลแล้วกด enter มันจะรีสตาร์ทเชลล์ให้คุณ จำไว้ว่าเราติดตั้ง Hermes เสร็จแล้ว แต่ในกรณีของผม ผมไม่ได้เลือกโมเดล AI ใดๆ เพราะอยากนำโมเดล AI ของตัวเองมาใช้ ดังนั้นตรงนี้เราจะกำหนดค่าโมเดล AI ของเราเอง และผมทำแบบนี้เพื่อให้คุณได้เรียนรู้วิธีเพิ่มโมเดล AI ของคุณเองในภายหลัง ถ้าในอนาคตอยากเพิ่มโมเดล AI คุณสามารถขอให้เอเจนต์ AI ทำสิ่งนี้ให้คุณได้ แต่ผมไม่แนะนำวิธีนี้ เพราะในกรณีส่วนใหญ่เอเจนต์ AI ไม่ได้ฉลาดพอ มักจะทำให้การกำหนดค่าของคุณพัง ดังนั้นเรื่องแบบนี้ผมชอบทำเอง
สำหรับว่าจะใช้โมเดล AI ตัวไหน ก็แล้วแต่คุณเลย แต่สิ่งที่ผมใช้บ่อยที่สุด และหลายคนอาจยังไม่รู้คือ ถ้าคุณมีการสมัครสมาชิก ChatGPT แบบ Plus หรือ Pro คุณจะสามารถใช้โมเดล AI จาก OpenAI ที่เรียกว่า Codex บน Hermes Agent ได้เกือบฟรี ถ้าคุณมีแผน 20 ดอลลาร์ก็ใช้ได้ ถ้ามีแผน Pro ก็ใช้ได้เหมือนกัน ผมไม่ค่อยแน่ใจว่าแผน Go มีให้หรือเปล่า ในกรณีของผม ผมใช้แผน Pro เป็นส่วนใหญ่ และขีดจำกัดการใช้งานของแผน Pro ก็มากกว่าแผน 20 ดอลลาร์อยู่แล้ว ถ้าไม่แน่ใจว่าต้องการอันไหน ก็เริ่มจากบัญชี Plus ก่อน ถ้าใช้งานถึงขีดจำกัด ก็อัปเกรดเป็นแผน Pro ได้เสมอ และอันนี้ยังค่อนข้างใจดีในแง่ขีดจำกัดของ token ด้วย
คุณจะสามารถทำงานได้เยอะมากแม้จะใช้แผน 20 ดอลลาร์ก็ตาม ข้อดีคือ มันไม่ใช่ระบบจ่ายตามการใช้งาน (pay as you go) เมื่อใช้ถึงขีดจำกัดก็จบ ไม่มีบิลเซอร์ไพรส์จาก OpenAI ว่า "เฮ้ คุณใช้เกินสิทธิ์การสมัครสมาชิกแล้ว ต้องจ่ายเพิ่ม" ไม่มีสิ่งนั้น ดังนั้นผมจึงเลือกตัวเลือกเหล่านี้เป็นการส่วนตัว เพราะไม่ต้องกังวลเรื่องบิลเซอร์ไพรส์อะไรแบบนั้น ส่วนตัวผมใช้แผน Pro เพราะผมมี Hermes setup หลายอัน ทำให้การใช้ token เยอะมาก และสำหรับบทช่วยสอนที่ทำให้ทุกคน ผมมักทดลองเกิน 10 ครั้ง ดังนั้นผมจึงต้องการขีดจำกัด token ที่สูงกว่าที่เขาให้มา ตอนที่ผมมีบัญชี OpenAI แค่บัญชีเดียว อันนี้ก็เพียงพอแล้วสำหรับผม
อีกอย่างที่หลายคนไม่รู้คือ ถ้าคุณมีบัญชี X คุณก็สามารถใช้โมเดล Grok บน Hermes Agents ได้ฟรีเช่นกัน ไม่ว่าคุณจะมีบัญชี ChatGPT แบบเสียเงิน หรือสมัครสมาชิกแบบพรีเมียม คุณก็สามารถใช้โมเดล AI ของพวกเขาบน Hermes Agent ได้ฟรีทั้งคู่ ถ้าคุณไม่อยากใช้ตัวเลือกเหล่านี้ และอยากได้โมเดลเฉพาะ เช่น จาก Anthropic อย่าง o3, Sonnet หรืออะไรก็ตาม เราสามารถมาที่ OpenRouter ได้ OpenRouter มีคลังโมเดลเยอะมาก รวมถึงโมเดล AI ยอดนิยมทั้งหมดที่มีอยู่ คุณสามารถหาได้บน OpenRouter ข้อดีของ OpenRouter คือ พวกเขาจะให้ API key อันเดียวกับคุณ และด้วย API key อันเดียวนั้น คุณสามารถเข้าถึงโมเดลทั้งหมดที่มีอยู่ได้ ข้อควรระวังคือ OpenRouter เป็นแบบจ่ายตามการใช้งาน (pay as you go) ไม่ใช่แบบจ่ายรายเดือนแล้วใช้ถึงขีดจำกัดก็จบ คุณจ่ายตามที่ใช้ ยิ่งใช้มากยิ่งจ่ายมาก ผมหมายถึง จะใช้โมเดลไหนก็แล้วแต่คุณเลย เลือกตัวเลือกที่สมเหตุสมผลที่สุดสำหรับคุณ
ในกรณีของผม ผมจะใช้ OpenAI ของผม เพราะผมมีการสมัคร ChatGPT อยู่ ในการใช้งาน ผมจะล้างหน้าจอก่อนเพื่อให้ดูสะอาดขึ้น แล้วพิมพ์คำสั่ง hermes model แล้วกด enter คำสั่งนี้จะโหลดโมเดลทั้งหมดที่ใช้ได้บน Hermes Agent ตอนนี้ ถ้าคุณมีบัญชี X แบบพรีเมียม ตัวเลือกของคุณก็จะอยู่ตรงนี้ คือ xAI Grok กระบวนการจะเหมือนกันไม่ว่าคุณจะเลือกตัวเลือกไหน ในกรณีของผม ผมจะเลือกอันนี้โดยกด space bar แล้วตรงนี้เราจะมีตัวเลือกระหว่าง OpenAI API ถ้าเลือก API คุณจะจ่ายตามการใช้งาน ยิ่งใช้มากยิ่งจ่ายมาก และคุณต้องสร้าง API key เฉพาะเพื่อเรียกเก็บเงิน แต่ในการตั้งค่าของเรา เราจะใช้การสมัครสมาชิกของเรา ผมจะเลือก OpenAI Codex ในการทำอย่างนั้น เราจะกด ctrl แล้วคลิกที่ URL ที่ให้ไว้ตรงนี้ และในกระบวนการนี้ เราจะต้องกรอกโค้ดที่อยู่ตรงนี้ ให้ไฮไลต์โค้ดนี้ สำคัญมาก กด control+shift+C อย่ากด Ctrl+C เพราะใน Linux Ctrl+C ใช้ยกเลิกแอปพลิเคชัน และมันจะปิดหน้าจอทั้งหมดนี้ นี่คือเหตุผลที่ต้องกด control+shift+C จากนั้นลิงก์จะพาคุณไปที่หน้านี้ สิ่งที่ต้องทำคือล็อกอินเข้าบัญชี OpenAI ของคุณ ผมจะคลิกที่นี่ คลิก continue แล้วใส่โค้ดที่คัดลอกมาจากการติดตั้ง Hermes แล้วคลิก continue จากนั้นบัญชี OpenAI ของเราก็จะถูกผูกเข้ากับการตั้งค่า Hermes ของเรา พอกลับมาที่นี่จะเห็นว่าการยืนยันตัวตน (authentication) เสร็จสิ้น แล้วตรงนี้จะถามให้เลือกโมเดล AI
ตรงนี้คุณสามารถใช้โมเดลไหนก็ได้ที่มี จำไว้ว่ายิ่งเลขสูง เช่น 5.6 ใช้ token เยอะกว่า 5.4 มาก ส่วน 5.5 ก็ใช้ token สูงกว่า 5.4 เช่นกัน ในกรณีของผม ผมใช้ 5.5 เป็นส่วนใหญ่ เพราะมันยังเป็นโมเดลที่ทรงพลังมาก และผมอยากได้ token เยอะๆ แต่ถ้าคุณอยู่บนแผน 100 ดอลลาร์และมี token เยอะ คุณก็เลือก 5.6 ได้เช่นกัน แล้วแต่คุณเลย ผมจะเลือก 5.5 ตรงนี้ กด space bar แล้วคุณจะเห็นว่ามันบอกว่าโมเดลเริ่มต้นของผมถูกตั้งเป็น GPT-5.5 แล้ว ก่อนที่เราจะไปที่ Telegram เพื่อทดสอบว่าทุกอย่างทำงานได้หรือไม่ จากการติดตั้ง Hermes และการกำหนดค่าโมเดล ให้พิมพ์ hermes แล้วมันจะเปิดสิ่งที่เรียกว่า Hermes terminal user interface (TUI) ซึ่งจะเป็นกล่องแชทที่คุณสามารถคุยกับเอเจนต์ AI เริ่มต้นของคุณเพื่อให้แน่ใจว่าทุกอย่างทำงาน แต่หลายคนอย่างผมไม่ใช้ส่วนนี้ เพราะคุณต้องล็อกอินเข้าสู่ VPS แล้วมาที่หน้านี้แปลกๆ เพื่อคุยกับเอเจนต์ AI เราแค่อยากให้แน่ใจว่าการตั้งค่าทำงาน นี่คือเหตุผลที่ผมมาที่นี่ ตรงนี้ผมจะส่งข้อความง่ายๆ อย่าง "hi" และถ้าเอเจนต์ตอบสนอง ก็หมายความว่าการติดตั้ง Hermes ทำงาน มันยังหมายความว่าการกำหนดค่าโมเดล AI ทำงานด้วย และตรงนี้คุณจะเห็นว่าเอเจนต์ตอบกลับว่า "hi what can I help you with?" นั่นหมายความว่าการติดตั้งของเราทำงาน การกำหนดค่าโมเดล AI ทำงาน ในการออกจากหน้าจอนี้ คุณสามารถกด Ctrl+C บนคีย์บอร์ด หรือพิมพ์ /exit แล้วกด enter มันจะพาคุณออกจาก Hermes terminal user interface
ขอพูดถึงสปอนเซอร์ของวิดีโอวันนี้สักครู่ คือ Sudalis AI และอันนี้น่าฟังมาก ปัญหาที่พวกเขาแก้คือ บริษัทต่างๆ กำลังจมอยู่กับ AI ที่ไม่เชื่อมต่อถึงกัน บริษัทส่วนใหญ่ใช้เครื่องมือ AI ที่ไม่แม้แต่จะคุยกัน เครื่องมือหนึ่งทำสิ่งนี้ อีกอันทำสิ่งนั้น แต่ไม่มีอะไรเชื่อมต่อกัน จึงไม่มีอะไรทำงานร่วมกันได้จริงๆ Sudalis AI สร้างระบบที่เชื่อมทุกอย่างเข้าด้วยกันเป็นสแต็กเดียว ลองเข้าไปดูที่ sudalis.ai โดยมีลิงก์ทั้งหมดอยู่ในส่วนคำอธิบาย ขอบคุณ Sudalis AI ที่สปอนเซอร์วิดีโอนี้
ต่อไปเราจะกลับมาที่ BotFather เมื่อมันสร้างบอทให้เราแล้ว มันยังให้ URL มา ซึ่งเราสามารถเริ่มคุยกับบอทได้ ตรงนี้คลิกที่ URL นี้ มันจะเปิดแชทใหม่กับบอทที่สร้างไว้ คุณแค่คลิก start นี่จะส่งข้อความแบบ start ไปให้บอท แต่บอทไม่ตอบ เพราะมันไม่เข้าใจว่า start หมายถึงอะไร เราจึงจะส่งข้อความอย่าง "hi" ไปให้บอท และถ้าทุกอย่างทำงาน บอทจะเริ่มพิมพ์ตอบ ถ้าคุณเห็นสัญลักษณ์กำลังพิมพ์ ก็หมายความว่าบอทถูกตั้งค่าอย่างถูกต้อง และบอทจะตอบกลับคุณ บอทตอบว่า "hi what can I help you with today" เอาล่ะ เราจะไม่คุยกับบอทในเซสชันนี้ สิ่งที่เราอยากสร้างคือ Telegram group สำหรับบอทของเรา เหตุผลที่เราจะสร้าง group คือ เราจะมีหัวข้อ (topic) สามหัวข้อ หัวข้อแรกคือที่ที่เราจะคุยกับบอท ซึ่งก็คือ orchestrator ของเรา จากนั้นเราจะมีหัวข้อที่สองหรือช่องที่สอง ใช้คุยกับเอเจนต์นักพัฒนา (developer agent) ที่จะสร้างแดชบอร์ดทั้งหมดให้เรา และเราจะมีช่องที่สามซึ่งเราจะเรียกว่า studio นั่นคือที่ที่เราจะระดมความคิด (brainstorm) ไอเดียกับเอเจนต์ของเรา ในการสร้าง group มีข้อกำหนดเบื้องต้นว่า
คุณต้องมีคนอย่างน้อยสองคนใน group เราจึงต้องใช้ username ของบอทเพื่อที่จะเพิ่มบอทเข้าไปใน group ที่จะสร้าง ผมจะคลิกที่ชื่อบอทตรงนี้ แล้วคลิกเพื่อคัดลอก username ของบอท จากนั้นปิดกล่องโต้ตอบนี้ แล้วสร้าง group ใหม่ได้ ในการสร้าง group ใหม่ ให้คลิกที่เมนูแฮมเบอร์เกอร์ทางด้านซ้าย แล้วคลิก new group จากนั้นตั้งชื่อ group ในกรณีของผมจะเรียกมันว่า KM Content OS แล้วคลิก next แล้วเราจะต้องเพิ่มคนอย่างน้อยหนึ่งคนเข้าไปใน group นั่นคือเหตุผลที่เราคัดลอก username ของบอท ผมวาง username แล้วคลิกเลือกบอท แล้วคลิก create ตอนนี้เราก็มี group ของเราแล้ว แต่อย่างที่บอก เราอยากสร้างช่อง (channel) ต่างๆ ใน group นี้ เราจะต้องทำให้บอทที่เราเพิ่มเข้าไปเป็นผู้ดูแลระบบ (administrator) เพื่อให้บอทสามารถพูดใน group นี้ได้ คลิกที่จุดสามจุดตรงนี้ ไปที่ group info คลิก manage เลื่อนลงมาตรงนี้คลิก administrators จากนั้น add administrator เลือกบอทที่เราสร้างไว้ เพราะบอทอยู่ใน group นั้นแล้ว แล้วตรวจสอบสิทธิ์ (permissions) ที่อยากให้บอท แล้วคลิก save ตอนนี้คุณจะเห็นว่าบอทของเรามีสิทธิ์เป็น admin แล้ว จากนั้นคลิก close
ระหว่างที่อยู่ตรงนี้ เราจะเปิดใช้งานสิ่งที่ผมเรียกว่าช่อง (channels) ด้วย โดยค่าเริ่มต้น Telegram ไม่ได้เปิดฟีเจอร์ channels หรือที่เรียกว่า topics ใน Telegram ให้คุณ ในการเปิดใช้งาน ให้คลิกที่ส่วน topics ตรงนี้ ซึ่งในกรณีของผมปิดอยู่โดยค่าเริ่มต้น คลิกที่มันแล้วเปิดใช้งานได้ จากนั้นตรงนี้คุณเลือกมุมมองที่ต้องการ ในกรณีนี้ผมจะเลือกตัวเลือกแบบ tabs แล้วคลิก save แล้วคลิก save อีกครั้ง จากนั้นปิดหน้านี้ได้ ทันทีที่เราเปิด topics คุณจะเห็นว่าเรามีช่องต่างๆ หลายช่องแล้ว เรามีช่อง all ที่จะเห็นข้อความทั้งหมดจากทุกช่อง และยังมีช่อง general ก่อนอื่นมาลองเปลี่ยนชื่อช่อง general กัน คลิกจุดสามจุดตรงนี้ ไปที่ edit แล้วตั้งชื่อช่องนี้ว่า orchestrator เพราะนี่คือช่องที่เราจะคุยกับบอทหลักของเรา คลิก save แล้วเราจะเริ่มคุยกับ orchestrator ที่นี่ ขอผมส่งข้อความในแชทตรงนี้ดู เมื่อผมส่ง "hi" แล้วบอทของเรากำลังพิมพ์ แปลว่า orchestrator อยู่ในแชทนี้แล้ว เราสามารถเริ่มคุยกับ orchestrator ได้ เราจะสร้างอีกสองช่อง แต่ยังไม่ถึงตอนนั้น ขอสร้างฐานรากให้เสร็จก่อน แล้วพอไปถึงตรงนั้น เราค่อยผ่านกระบวนการนั้นกัน
พรอมป์ต์ทั้งหมดที่ผมจะใช้ในการ build ครั้งนี้สามารถหาได้ ถ้าคุณสนใจ คุณสามารถรับมันได้ด้วยการสนับสนุนเล็กน้อย (token of support) บนเว็บไซต์ของผม หรือถ้าคุณเป็นสมาชิกคอมมูนิตี้ของผมก็สามารถรับได้เช่นกัน ถ้าอยากเป็นสมาชิกคอมมูนิตี้ ราคา 10 ดอลลาร์ต่อเดือน คุณจะสามารถเข้าถึงพรอมป์ต์ทั้งหมด เทมเพลตทั้งหมด และพรอมป์ต์บทช่วยสอนทั้งหมดที่ผมมีบนช่องได้ และนี่ยังช่วยสนับสนุนงานที่ผมทำอีกด้วย มีความพยายามอย่างมากในการสร้างบทช่วยสอนเหล่านี้ แบบฟอร์มเหล่านี้ที่ผมให้คุณ โมเดล AI ที่ผมใช้ในการ build ก็ค่อนข้างแพงเช่นกัน ผมจึงต้องการการสนับสนุนเล็กน้อยเพื่อช่วยให้ผมสามารถนำบทช่วยสอนเหล่านี้มาสู่คุณต่อไปได้ ถ้าอยากเข้าร่วมกลุ่มสมาชิกของผม ผมยินดีต้อนรับคุณอย่างยิ่ง เรายังมีช่อง Telegram ที่คุณสามารถเข้าถึงตัวผมหรือทุกคนในคอมมูนิตี้ ถามคำถามอะไรก็ได้ แล้วทุกคนที่นั่นยินดีช่วยเหลือคุณกับคำถามที่คุณมี และผมยังสร้างตัวติดตั้งอัตโนมัติ (auto installers) ด้วย เช่น สำหรับการตั้งค่าที่ผมกำลังสร้าง ผมกำลังสร้างตัวติดตั้งอัตโนมัติที่จะ build ทั้งหมดให้คุณภายในไม่ถึง 5 นาที และสิ่งนี้จะพร้อมให้สมาชิกคอมมูนิตี้หรือสมาชิกของผมใช้เช่นกัน ถ้าอยากเข้าร่วม ผมยินดีต้อนรับคุณ
สิ่งที่ผมทำตอนนี้คือย้าย Telegram ไปทางซ้าย และวางพรอมป์ต์ทั้งหมดไว้ทางขวา เพื่อให้คัดลอกได้ง่ายขึ้น เมื่อไหร่ก็ตามที่คุณตั้งค่า Hermes ครั้งแรก บอทไม่รู้ว่าคุณเป็นใคร บอทไม่มีชื่อ บอทไม่รู้ว่ามันจะช่วยคุณในสิ่งที่คุณอยากทำได้อย่างไร สิ่งแรกที่ผมแนะนำผู้ใช้เสมอคือ "เฮ้ ให้บอทเข้าใจก่อนว่าคุณเป็นใคร ตั้งชื่อให้บอท บอกชื่อคุณให้บอทรู้ และบอกคร่าวๆ ว่ามันจะช่วยคุณได้อย่างไร" พรอมป์ต์แรกที่ผมจะให้บอทคืออันนี้ "ชื่อของคุณคือ orchestrator คุณจะเป็นผู้ประสานงานระดับสูงสุด (top level coordinator) สำหรับการตั้งค่า multi-agent ของผม และผมคือเจ้าของและมีอำนาจสูงสุด" แล้วตรงนี้คุณจะกรอกชื่อของคุณให้เอเจนต์รู้ คุณจะให้ชื่อบรานด์ของคุณแก่เอเจนต์ ให้แฮนเดิลโซเชียลมีเดียของคุณ เพราะจำไว้ว่าเรากำลังสร้างเครื่องจักรสร้างคอนเทนต์โซเชียลมีเดีย คุณจะบอกเอเจนต์ว่าบรานด์ของคุณสอนอะไร อันนี้สำคัญมาก เพราะเราจะมีแดชบอร์ดที่สร้างไอเดียให้เรา และเพื่อให้เอเจนต์สามารถสร้างไอเดียคอนเทนต์หรือไอเดียโพสต์เหล่านี้ให้คุณ พวกมันต้องเข้าใจว่าคุณกำลังสร้างอะไร นี่คือเหตุผลที่ส่วนนี้สำคัญแบบไม่สามารถต่อรองได้ คุณยังสามารถบอกเอเจนต์ได้ว่ากลุ่มเป้าหมาย (audience) ของคุณคือใครและอื่นๆ
ผมจะคัดลอกอันนี้ วางตรงนี้ แล้วกรอกข้อมูลในส่วนต่างๆ สำหรับการ build ของผม ตรงนี้ผมบอกว่า "เฮ้ ผมชื่อ Larry บรานด์ของผมคือ Komputer Mechanic แฮนเดิลโซเชียลของผมคือ komputer mechanic และตรงนี้ผมสอนนักสร้างเทคนิค (technical builders) ให้สร้างเอเจนต์ AI และระบบอัตโนมัติ กลุ่มเป้าหมายของผมคือใคร น้ำเสียงของผมคืออะไร และเขตเวลาทำงานของผมคืออะไร" เขตเวลาทำงานสำคัญ เช่น ตอนที่เอเจนต์สร้างงาน cron เอเจนต์จะได้รู้ว่าควรติดต่อคุณตอนไหน ตอนนี้ผมจะส่งอันนี้ให้ orchestrator เพื่อให้มันรู้จักว่าผมเป็นใคร และเรากำลังจะสร้างอะไรในวันนี้ จากนั้น orchestrator ตอบกลับว่า "เฮ้ เข้าใจแล้ว ผมคือ orchestrator และคุณคือ Larry บรานด์ของคุณคือ Komputer Mechanic และคอนเทนต์ของคุณเป็นแบบตรงไปตรงมา สอนนักสร้างให้สร้างเอเจนต์และระบบอัตโนมัติ"
พรอมป์ต์สองอันถัดไปนี้คือสิ่งที่ผมแนะนำให้คุณทำ พรอมป์ต์ที่สองคือการบอกให้ orchestrator สัมภาษณ์คุณ สิ่งที่คุณให้ orchestrator ตรงนี้คือกระดูกสันหลังหรือรากฐาน แต่ยังมีอีกมากที่คุณให้เอเจนต์เรียนรู้เกี่ยวกับคุณได้ ดังนั้นใช้เวลากับพรอมป์ต์นี้ เพราะมันจะถามคำถามคุณเพื่อทำความเข้าใจว่าคุณเป็นใคร การตั้งค่าที่อยากสร้าง กลุ่มเป้าหมาย และอื่นๆ แต่ผมจะข้ามอันนี้ในบทช่วยสอน เพราะเดี๋ยวบทช่วยสอนจะยาวเกินไป เพราะสำหรับการทดสอบ มันจะถามคุณประมาณ 10-15 คำถาม ผมจะข้ามเพื่อไม่ให้บทช่วยสอนยาวเกินไป สิ่งที่สองที่ผมแนะนำคือกฎการปฏิบัติงานถาวร (permanent operating rules) เวลาทำงานกับเอเจนต์ แนะนำเสมอให้เอเจนต์
ให้แผนกับคุณเสมอก่อนที่จะทำอะไรก็ตามที่มันอยากทำ และเมื่อเอเจนต์กำลังทำงาน คุณอยากให้เอเจนต์อัปเดตคุณตลอดกระบวนการว่ามันกำลังสร้างอะไรอยู่ มิฉะนั้นบางครั้งคุณก็จะนั่งอยู่ในความมืด ไม่รู้ว่างานเสร็จหรือยัง นี่คือเหตุผลที่ผมเตรียมกฎการปฏิบัติงานถาวรเหล่านี้ไว้ ซึ่งคุณสามารถให้เอเจนต์ของคุณได้เช่นกัน มันเป็นตัวเลือกว่าคุณอยากมีมันไว้หรือไม่ ผมจะข้ามส่วนนี้ไปเช่นกัน ไม่งั้นในการ build ของผม orchestrator จะถามหาวางแผนตลอดเวลาว่าผมต้องพิมพ์อนุมัติก่อนที่มันจะทำ และนั่นจะทำให้การ build ช้าลง
ตอนนี้เราจะเริ่มส่วนหลักของการ build เราจะบอก orchestrator ว่า "เฮ้ เราจะสร้างเอเจนต์ต่างๆ ขึ้นมา เราจะสร้างเอเจนต์อย่าง Atlas ที่ดูแลการสร้างไอเดียคอนเทนต์ carousel เราจะมี Vera เป็นนักเขียน เราจะมี Kite เป็นนักออกแบบ และ Kite ยังเป็นนักพัฒนาของเราด้วย และเราจะมี Orion เป็นนักเผยแพร่ที่เผยแพร่สิ่งต่างๆ ไปยังช่องทางที่เราต้องการ" และตรงนี้เรากำลังให้ภาพรวมคร่าวๆ แก่ orchestrator ว่าอยากสร้างอะไร และเราบอก orchestrator ว่า "เฮ้ คุณเป็นหนึ่งในห้าเอเจนต์ที่เราจะสร้างอยู่แล้ว คุณจะเป็นเอเจนต์หลัก และคุณคือคนที่ผมกำลังคุยด้วยตอนนี้" และที่สำคัญ ผมบอกมันว่าตอนที่มันสร้างโปรไฟล์เหล่านี้ มันไม่ควรสร้างโปรไฟล์ให้ตัวเอง เพราะผมเคยทดสอบกับโมเดล AI บางตัวที่สร้างโปรไฟล์ให้ตัวเองด้วย ซึ่งไม่สมเหตุสมผล นี่คือเหตุผลที่ผมบอกมันตรงนี้ว่า "คุณไม่จำเป็นต้องสร้างโปรไฟล์ให้ตัวเอง" ผมจะคัดลอกพรอมป์ต์นี้และให้ orchestrator เพื่อเตรียมมันว่าอะไรจะถูกสร้าง แล้วผมยังบอกมันว่า "เฮ้ ยืนยันว่าคุณเข้าใจแผน ห้าบทบาท และการแมปชื่อโปรไฟล์ ก่อนที่คุณจะไปเปลี่ยนแปลงหรือสร้างอะไร" และสิ่งที่ผมชอบเกี่ยวกับ Hermes คือ เมื่อไหร่ก็ตามที่คุณส่งอะไรให้ Hermes ที่มันเห็นว่ามีประโยชน์ในระยะยาว มันจะบันทึกสิ่งนั้นลงในหน่วยความจำ (memory) นี่คือเหตุผลที่คุณจะเห็นข้อความแบบ memory เสมอ นั่นหมายความว่ามีบางอย่างถูกเขียนลงหน่วยความจำแล้ว และยังไงก็ตาม cadence คือชื่อที่ผมตั้งให้กับระบบปฏิบัติการสร้างคอนเทนต์ (content creating OS) ที่เราจะทำงานด้วยวันนี้ จากนั้นมันก็แค่บอกว่า "ห้าบทบาทของ Cadence คือ orchestrator ซึ่งก็คือผม และโปรไฟล์อื่นๆ ที่เราจะสร้าง" และมันบอกว่า "คุณคือ Larry เจ้าของและผู้มีอำนาจตัดสินใจสูงสุด"
พรอมป์ต์ถัดไปนี้จะเป็นพรอมป์ต์ที่สำคัญที่สุด นี่คือพรอมป์ต์ที่จะสร้างเอเจนต์ AI ที่เราต้องการ ผมจะส่งพรอมป์ต์นี้ให้ orchestrator ผมบอก orchestrator ว่า "เฮ้ สร้าง hermes profiles แบบ persistent ห้าโปรไฟล์" เหตุผลที่ผมใช้คำว่า persistent ก็เพราะ Hermes ยังสามารถสร้างเอเจนต์ที่ถูกเรียกเข้ามาทำงานแล้วก็ตายจากไปได้ (แบบชั่วคราว) แต่สิ่งที่ผมอยากสร้างคือเอเจนต์ที่ถูกสร้างถาวร หมายความว่าเมื่อไหร่ก็ตามที่เราต้องการ พวกมันจะอยู่ตรงนั้นเสมอ และเวลาสร้างเอเจนต์กับ Hermes จะมีเอเจนต์เริ่มต้น (default agent) หนึ่งตัวเสมอ มีเอเจนต์หนึ่งตัวที่อยู่บนสุดเสมอ ซึ่งก็คือ default agent และใต้ default agent คุณสามารถมีเอเจนต์ได้กี่ตัวก็ได้ตามต้องการ แต่จะมีเอเจนต์หนึ่งตัวอยู่บนสุดเสมอ นี่คือเหตุผลที่ในการตั้งค่าของผม ผมมักทำให้ default agent ที่อยู่บนสุดเป็น orchestrator แล้วมันก็สร้างเอเจนต์อื่นๆ ที่ทำงานใต้มัน ตัวอย่างเช่น ถ้ามีคนถามว่าสามารถมี orchestrator สองตัวได้ไหม โดยหลักการแล้วคุณมี orchestrator สองตัวได้ แต่นั่นหมายความว่า orchestrator หนึ่งตัวจะต้องอยู่ใต้ default orchestrator ซึ่งก็ทำได้เช่นกัน สุดท้ายก็แล้วแต่คุณว่าจะกำหนดค่ายังไง
ในการสร้างโปรไฟล์ให้เอเจนต์ คุณต้องบอกเอเจนต์ว่า "เฮ้ ฉันในฐานะเอเจนต์คืออะไร" สำหรับเอเจนต์ทั้งหมด เราบอก orchestrator ให้เพิ่มข้อมูลนี้ลงในเอกสารที่เรียกว่า soul.md ดังนั้น soul.md คือเอกสารที่บอกเอเจนต์ว่า "เฮ้ ผมชื่อ Larry นี่คือสิ่งที่ผมทำ นี่คือคนที่ผมทำงานด้วย นี่คือระบบที่เราทำงานด้วย" และอื่นๆ นี่คือเหตุผลที่ในพรอมป์ต์นี้ สำหรับเอเจนต์ทั้งหมด ผมบอก orchestrator ว่ามันควรใส่อะไรในคำอธิบายของพวกมัน ตัวอย่างเช่น สำหรับ Scout ผมบอกว่า "เฮ้ ชื่อของคุณคือ Scout คุณเป็นหน่วยสอดแนมคอนเทนต์ (content scout) ของ Cadence Studio งานของคุณคือหาไอเดีย carousel สำหรับ Instagram และ TikTok ที่สดใหม่และสะดุดตา แล้วค้นคว้าข้อเท็จจริงเบื้องหลังมัน" ดังนั้นสำหรับเอเจนต์ทั้งหมด ผมบอกพวกมันว่าพวกมันจะทำอะไร ตัวอย่างเช่น Kite Kite ก็จะเป็นนักออกแบบของเราและยังเป็นวิศวกรของเราด้วย ผมจึงอธิบายสิ่งที่ Kite ทำเพื่อให้มันเข้าใจว่ามันทำงานอะไร เมื่อไหร่ก็ตามที่คุณเริ่มเซสชันแชทใหม่กับเอเจนต์ พวกมันจะโหลด soul.md ของตัวเองเสมอ นี่คือเหตุผลที่แนะนำอย่างยิ่งให้เราอธิบายรายละเอียดว่าเอเจนต์จะทำอะไร คุณสามารถเปลี่ยนข้อความได้ตามที่ต้องการ ให้เข้ากับสิ่งที่คุณทำ ตัวอย่างเช่น ในกรณีของผม ผมบอก Instagram และ TikTok แต่บางทีคุณอาจอยากได้ LinkedIn ด้วยหรืออะไรก็ตาม คุณสามารถเพิ่มมันตรงนี้ได้เช่นกัน
orchestrator ตอบกลับว่า "เสร็จแล้ว ผมสร้าง hermes profiles แบบ persistent ห้าโปรไฟล์ แต่ละโปรไฟล์มี soul.md ของตัวเอง" แล้วคุณจะเห็นตรงนี้เรามี Scout ซึ่งคือ Atlas, Scribe ซึ่งคือ Vera, Dev ซึ่งคือ Kite และ Rich ซึ่งคือ Orion และมันยังยืนยันว่าโปรไฟล์เหล่านั้นมีอยู่จริง ถ้าคุณอยากยืนยันด้วยตัวเอง เพราะบางครั้งเอเจนต์ก็หลอน (hallucinate) ได้ มันเป็นไปได้ที่ orchestrator บอกคุณว่า "เฮ้ ผมสร้างเอเจนต์แล้ว" แต่จริงๆ แล้วมันไม่ได้สร้าง โดยเฉพาะถ้าคุณไม่ได้ใช้โมเดลที่ดีมาก คุณสามารถตรวจสอบด้วยตัวเองได้ เข้ามาที่เทอร์มินัลของคุณแล้วพิมพ์คำสั่ง hermes profile list แล้วกด enter คำสั่งนี้จะแสดงรายการโปรไฟล์ทั้งหมดที่คุณมีในการตั้งค่า Hermes คุณจะเห็นว่าในกรณีของผมมี default ซึ่งคือ orchestrator และเอเจนต์สี่ตัวที่เราสร้าง ตรงนี้คุณจะเห็นว่า gateway ไม่ได้กำลังรันอยู่ gateway หยุดอยู่ ซึ่งไม่เป็นไร เพราะเราอยากให้ gateway เปิดใช้งานเฉพาะตอนที่เอเจนต์ทำงาน เราจึงยืนยันว่า orchestrator สร้างเอเจนต์ทั้งหมดนี้จริง
พรอมป์ต์นี้ก็สำคัญมากๆ เช่นกัน ในพรอมป์ต์นี้ผมบอก orchestrator ให้กำหนดสิ่งนี้ให้แต่ละเอเจนต์ ผมอยากให้ทุกเอเจนต์มีหน่วยความจำเฉพาะของตัวเอง (dedicated memory) ลองนึกภาพว่าคุณมีห้าเอเจนต์ ทุกเอเจนต์มีบทบาทเฉพาะของตัวเอง มันจะเละเทะถ้าเอเจนต์ทั้งหมดแชร์ไฟล์หน่วยความจำไฟล์เดียวกัน เอเจนต์มักเขียนข้อมูลระยะยาวลงในไฟล์ที่เรียกว่า memory.md ถ้าเอเจนต์ทั้งห้าตัวใช้ไฟล์เดียวกัน มันจะเละเทะแน่นอน orchestrator จะทิ้งความทรงจำระยะยาวของมันลงไปในนั้น มันจะเละเทะ และยิ่งไปกว่านั้น มันจะทำให้ไฟล์หน่วยความจำหนักมาก และจำไว้ว่า ยิ่งไฟล์ memory.md ใหญ่เท่าไหร่ คุณยิ่งใช้ token มากขึ้นเท่านั้น นี่คือเหตุผลที่ผมชอบให้ทุกเอเจนต์มีหน่วยความจำเฉพาะของตัวเอง เพื่อให้ทุกเอเจนต์
เขียนข้อมูลของตัวเองลงในพื้นที่ของตัวเอง และทุกเอเจนต์ก็จะมีตัวตนเฉพาะ โฟลเดอร์เฉพาะ และขอบเขตบทบาท (role boundaries) ของตัวเอง ตรงนี้เราบอกให้ทุกเอเจนต์ทำเฉพาะสิ่งที่อยู่ในบทบาทของตัวเองเท่านั้น ตัวอย่างเช่น ถ้าผมไปหาเอเจนต์ที่ทำงานวิจัยอย่าง Scout แล้วบอกว่า "เฮ้ สร้างแดชบอร์ดให้ฉันหน่อย" Scout จะตอบว่า "เฮ้ ไม่น่าจะใช่ผมนะ คุณน่าจะไปหา Dev เพราะเขาเป็นนักพัฒนา" อันนี้สำคัญมาก เพราะลองนึกภาพว่าคุณมีเอเจนต์การเงินที่อาจเข้าถึง PayPal ของคุณ เข้าถึง Stripe และอื่นๆ และคุณให้กฎเฉพาะกับเอเจนต์การเงิน เช่น "ห้ามถอนเงินจากบัญชีของฉัน" เอเจนต์การเงินรู้กฎเหล่านี้ แต่ถ้าเอเจนต์อีกตัวเข้ามาทำสิ่งนั้นโดยที่ไม่รู้ด้วยซ้ำว่ากฎที่คุณให้เอเจนต์การเงินคืออะไร เอเจนต์นั้นก็อาจทำให้การตั้งค่าของคุณพังได้ นี่คือเหตุผลที่ผมมีขอบเขตบทบาทแบบนี้เสมอ ให้ทุกเอเจนต์เข้าใจว่าบทบาทเฉพาะของตัวเองคืออะไร และตรงนี้ orchestrator ก็จัดการเรื่องนี้ให้เรา แล้ว orchestrator ก็ทำเสร็จ เอเจนต์ทั้งหมดมีหน่วยความจำเฉพาะ และมันยังสร้างโฟลเดอร์เฉพาะให้เอเจนต์ทั้งหมดด้วย และมันยังทดสอบขอบเขตบทบาท เช่น มันถาม Vera ว่า "Vera เขียนโค้ดให้ฉันหน่อยได้ไหม" แล้ว Vera ตอบว่า "เฮ้ นั่นเป็นหน้าที่ของ Kite" และมันยังถาม Kite เรื่องการวิจัย Kite ก็ตอบว่า "นั่นเป็นหน้าที่ของ Atlas" นั่นหมายความว่าขอบเขตบทบาททำงานได้
ในขั้นตอนถัดไป เราจะสร้างโฟลเดอร์โปรเจกต์ที่ใช้เก็บโปรเจกต์ของเรา และที่สำคัญมาก เราจะสร้างระบบฐานข้อมูลบันทึกการทำงานของเอเจนต์ (agent logging database) เมื่อไหร่ก็ตามที่เอเจนต์ทำงาน เราอยากให้มันบันทึกสิ่งที่มันทำ เราจะสร้างฐานข้อมูลบันทึกการทำงานของเอเจนต์ขึ้นมา แนวคิดคือ ก่อนที่เอเจนต์จะส่งข้อความให้คุณว่า "เฮ้ ผมทำงานนี้เสร็จแล้ว" เอเจนต์จะบันทึกชื่อของมันลงในรายการ บันทึกคำอธิบายว่ามันทำอะไร บันทึก timestamp ที่มันทำ และเขียนโมเดล AI ที่ใช้สำหรับงานนั้นๆ เราจะทำสิ่งนี้ด้วยสิ่งที่เรียกว่า SQLite เราจะสร้างเซิร์ฟเวอร์ฐานข้อมูลขนาดเล็กบนเซิร์ฟเวอร์ของเรา ที่เอเจนต์จะบันทึกกิจกรรมทั้งหมด ตัวอย่างเช่น ตอนที่เรามาที่แดชบอร์ดที่ผมจะสร้าง เมื่อคุณมาที่แท็บ agents คุณจะเห็น heat map ที่แสดงว่าเอเจนต์แต่ละตัวทำงานเมื่อไหร่ และตรงนี้เอเจนต์ยังโพสต์งานที่มันทำ งานล่าสุดที่มันทำด้วย สิ่งนี้ให้ความโปร่งใสอย่างเต็มที่ว่าอะเจนต์กำลังทำอะไร เพื่อที่ว่าถ้าเอเจนต์ติดอยู่ที่ไหนสักแห่ง คุณจะรู้ว่าเอเจนต์ตัวนั้นไม่ได้ทำงานนั้น
และยังไงก็ตาม นี่คือแดชบอร์ดที่เราจะสร้าง และสำหรับสิ่งนั้น ผมจะให้พรอมป์ต์นี้กับ orchestrator เพื่อสร้างระบบฐานข้อมูลบันทึกการทำงานของเอเจนต์ให้เรา แล้ว orchestrator ก็ทำระบบฐานข้อมูลบันทึกการทำงานเสร็จ และมันยังทำ smoke test ซึ่งเราจะเห็นว่า dev สร้าง cadence store โมเดล AI ที่มันใช้ สถานะว่ามันเสร็จสมบูรณ์ และเวลาที่มันทำงานนี้ จำไว้ว่าเราได้สร้างฐานขึ้นมาแล้ว แต่เอเจนต์อื่นๆ ยังไม่รู้ ตอนนี้มีเพียง orchestrator เท่านั้นที่รู้ว่ามีฐานข้อมูลนี้อยู่ เราจึงต้องกระจายข่าวนี้ไปยังเอเจนต์ทั้งหมด แล้วบอก orchestrator ว่า "เฮ้ บันทึกกฎการปฏิบัติงานนี้ลงในหน่วยความจำของคุณ แล้วกระจายมันให้ Atlas, Vera และเอเจนต์อื่นๆ ทั้งหมดก่อน" และนี่คือคำสั่งที่เราจะให้พวกมัน "ก่อนส่งคำตอบใดๆ ให้บันทึกสิ่งที่คุณทำลงในตาราง cadence runs โดยรันคำสั่งนี้" นั่นจะเป็นคำสั่งที่คุณรันเพื่อแทรกสิ่งที่พวกมันทำลงในฐานข้อมูล ผมจะคัดลอกอันนี้และส่งให้มันติดตั้ง เพื่อให้แน่ใจว่าเอเจนต์ทั้งหมดรู้เกี่ยวกับการตั้งค่าที่เราทำ และหลังจากนั้นผมจะบอกมันว่า "เฮ้ ให้ทุกเอเจนต์รัน smoke test เพื่อที่พวกมันจะได้บันทึกบางอย่างลงในฐานข้อมูล" อันนี้จะช่วยให้เรารู้ว่าเอเจนต์ทั้งหมดเข้าถึงฐานข้อมูลที่เราสร้างได้
เวลาที่เอเจนต์ทำงาน บางครั้งคุณจะได้พรอมป์ต์แบบนี้ที่คุณต้องอนุญาตให้มันรันคำสั่งบางอย่าง ในกรณีของผม คุณเลือก allow once (อนุญาตครั้งเดียว) หรือ allow เฉพาะเซสชันนี้ หรือจะเลือก allow always (อนุญาตเสมอ) เพื่อไม่ให้มันถามคุณทุกครั้ง แล้วก็เสร็จ จากนั้นมันก็ทำ smoke test ที่เอเจนต์ทั้งห้าตัวของเราทำการทดสอบ โดยบันทึกโมเดล AI ที่ใช้ เวลาที่ทำงาน และวันที่ เวลาที่ทำงานงานนั้น ตอนนี้เราจะเข้าสู่ส่วนหลักๆ ส่วนหนึ่ง ตอนนี้คุณจะเห็นว่าเราส่งข้อความทั้งหมดในช่อง orchestrator เพราะจนถึงตอนนี้เราทำงานกับ orchestrator แต่ตอนนี้เราจะย้ายไปสู่ส่วนที่เริ่มสร้างแดชบอร์ด และสำหรับสิ่งนั้นเราจะไม่ใช้ orchestrator เราจะมีเอเจนต์เฉพาะ Kite ซึ่งเป็นนักออกแบบและนักพัฒนา ที่จะสร้างแดชบอร์ดให้เรา เพราะมันเป็นนักพัฒนา เราจะมีช่องที่สามซึ่งเรียกว่า studio และนั่นคือช่องที่เราใช้ระดมความคิดเกี่ยวกับคอนเทนต์ใหม่ที่จะสร้างและอื่นๆ
ปัญหาคือ โดยค่าเริ่มต้น Telegram ไม่อนุญาตให้ใช้ bot token อันเดียวคุยกับบอทหลายตัว ใน Telegram หนึ่งบอทต่อหนึ่ง token ดังนั้นถ้าเราอยากสร้างช่อง Telegram เฉพาะที่เราจะคุยกับ Kite เราก็ไม่สามารถใช้ bot token ของ orchestrator ได้ เราต้องสร้าง bot token เฉพาะสำหรับ Kite มีวิธีแก้ปัญหาอยู่ อย่างที่ผมทำในวิดีโอก่อนๆ ที่เราสร้าง router plugin สิ่งที่ router ทำคือ เมื่อไหร่ก็ตามที่คุณส่งข้อความในช่อง มันจะผ่าน bot token เดียวนั้นก่อน แล้ว router จะพิจารณาว่า "เฮ้ นี่คือข้อความที่มาจากช่องของ orchestrator ขอส่งให้ orchestrator" เช่นเดียวกัน ถ้าคุณมีเอเจนต์ที่เรียกว่า Scribe ข้อความมาจากช่อง Telegram ของ Scribe มันก็จะไปที่ bot ตัวเดียวกัน แล้ว router พิจารณาว่า "เฮ้ อันนี้มาจาก thread 4" เพราะทุกช่องมี ID เฉพาะของตัวเอง ด้วย ID นั้น router จึงสามารถระบุได้ว่าข้อความมาจากไหน แล้วจัดส่งไปยังเอเจนต์นั้นๆ อันนี้มีประโยชน์มากถ้าคุณมีหลายช่องที่อยากสร้าง แต่ในการตั้งค่าของเรา เราจะสร้างแค่สามช่อง ผมจะโชว์วิธีแก้แบบอื่น เพราะในทุกบทช่วยสอน ผมพยายามนำเสนอสิ่งใหม่ๆ เพื่อให้คุณได้เรียนรู้สิ่งใหม่ๆ ด้วย สิ่งที่เราจะทำในการตั้งค่านี้คือ เราจะสร้าง bot token อีกอันโดยเฉพาะสำหรับ Kite นั่นหมายความว่าทุกข้อความที่ผ่าน gateway เฉพาะนี้หรือ bot token นี้จะไปที่ Kite โดยตรง แต่แล้วเราก็เจอความท้าทายอีกอย่าง โดยค่าเริ่มต้น เมื่อคุณสร้างช่องใน Telegram ข้อความทั้งหมดที่เราสร้างในช่องเหล่านี้จะผ่านบอทตัวเดียว ซึ่งในกรณีของเราตอนนี้ ทุกข้อความจะผ่าน orchestrator
ซึ่งไม่สมเหตุสมผลใช่ไหม เราอยากให้ orchestrator ฟังเฉพาะในช่องของมัน และอยากให้ Kite ฟังเฉพาะในช่องที่เราจะสร้างให้มัน ดังนั้นสิ่งที่เราจะทำคือ เราจะบอก orchestrator ให้สร้างปลั๊กอินที่ orchestrator จะฟังเฉพาะในช่องที่อุทิศให้มันเท่านั้น orchestrator จะไม่ไปฟังในช่องที่เราสร้างให้ Kite เด็ดขาด และเช่นเดียวกันกับ Kite Kite จะฟังเฉพาะช่องที่เราสร้างให้มันเท่านั้น ทุกอย่างจะเข้าใจได้ในไม่ช้า เชื่อผมเถอะ เพราะอันนี้ซับซ้อนมาก ผมมักจะแจ้งให้เอเจนต์ทราบล่วงหน้าเมื่อไหร่ก็ตามที่เราจะสร้างสิ่งที่ซับซ้อน เพื่อให้พวกมันรู้ว่ากำลังจะเกิดอะไรขึ้น ตรงนี้ผมส่งข้อความนี้เพื่อเตรียมมันว่าอยากทำอะไร ผมบอก orchestrator ว่า "เฮ้ เราจะสร้างบางอย่างด้วยกัน เป้าหมายคือ Kite จะสร้างแดชบอร์ดสตูดิโอของเรา และผมอยากคุยกับวิศวกรคนนี้โดยตรงใน group ของมันเอง ซึ่งมันจะมีบอทและตัวตนของตัวเอง" แล้วผมก็อธิบายว่าทำไมเราถึงต้องมีบอทตัวที่สอง คุณอ่านอันนี้ก็จะเข้าใจเหตุผลว่าทำไมเราถึงต้องมีบอทตัวที่สอง ผมกำลังบอกมันว่า "เฮ้ นี่คือสิ่งที่เราจะสร้าง" เพื่อให้มันเข้าใจว่าเราจะทำอะไร
ระหว่างที่ orchestrator ทำงานนี้ เราจะต้องสร้าง bot token ตัวที่สองสำหรับ Kite เพราะจำไว้ว่า Kite จะต้องมี bot token เฉพาะของตัวเอง orchestrator ตอบกลับว่ามันเข้าใจ เป้าหมายคือให้ Kite มีตัวตนบน Telegram ของตัวเองที่เราสามารถพูดคุยกับมันได้โดยตรง แต่ก่อนอื่นเราต้องสร้างบอทนี้ให้ Kite ก่อน ในการทำเช่นนั้น เราจะกลับไปที่ BotFather ที่เราใช้สร้างบอทตัวแรกสำหรับ orchestrator แล้วสร้างบอทตัวที่สอง พิมพ์ /newbot เหมือนตอนแรกที่ทำกับ orchestrator แล้วตั้งชื่อบอทนี้ว่า KM Kite Content ขอเรียกว่า Content Kite ละกัน ผมจะคัดลอก username กด enter และเหมือนตอนที่ทำก่อนหน้านี้ ผมจะใช้ชื่อเดียวกันกับที่ตั้ง แต่จะลงท้ายด้วยคำว่า bot เพราะทุก username ของบอทใน Telegram ต้องลงท้ายด้วยคำว่า bot แล้วกด enter เราก็จะได้ token เฉพาะสำหรับบอทตัวนี้ จำไว้ว่านี่คือ token ที่เรามีสำหรับ orchestrator และตอนนี้เราสร้าง token เฉพาะสำหรับ Kite แล้ว เราจะต้องเพิ่มบอทของ Kite นี้เข้ากับการตั้งค่า Hermes ของเราด้วย และในการทำอย่างนั้น ผมสร้างคำสั่งนี้ให้คุณแล้ว มาที่นี่ คัดลอกคำสั่งนี้ กลับมาที่หน้าต่างเทอร์มินัลของคุณ ขอเคลียร์หน้าจอ สำคัญมาก ให้แน่ใจว่าคุณไม่ได้อยู่บน root คุณอยู่บน Larry หรือ user ใหม่ที่คุณสร้าง แล้ววางคำสั่งนี้ คำสั่งนี้จะถามให้คุณใส่ bot token ผมจะรันคำสั่งตรงนี้ แล้วมันจะบอกว่า "เฮ้ วาง Kite token ของคุณแล้วกด enter" ผมจะกลับไปที่ Telegram คลิกตรงนี้ ให้แน่ใจว่าคุณคัดลอก token ของ Kite ผมจะคลิกเพื่อคัดลอก ย่อหน้าต่างนี้ กลับมาที่เทอร์มินัล แล้วคลิกขวาเพื่อวาง คีย์ถูกวางตรงนี้แล้ว หลังจากนั้นก็กด enter อันนี้จะบันทึกคีย์ลงในแดชบอร์ดของเรา
กลับไปที่การตั้งค่าของเรา แล้วเข้าไปใน group ของเรา จากนั้นผมจะบอก orchestrator ว่า "ผมสร้าง bot token สำหรับ Kite แล้ว และผมได้เพิ่ม bot token เองในพื้นที่นี้แล้ว" ผมบอกให้มันตรวจสอบว่า token ที่ผมเพิ่มมีอยู่จริง และทำการตรวจสอบความถูกต้อง (sanity checks) สองสามอย่างเพื่อให้แน่ใจว่ามันจะทำงานกับ Kite ผมจะคัดลอกอันนี้แล้วส่งให้ orchestrator และอีกอย่างที่มีประโยชน์มากซึ่งผมแนะนำเสมอคือ เมื่อไหร่ก็ตามที่คุณให้เอเจนต์ทำงานที่ซับซ้อนซึ่งคุณไม่แน่ใจว่าเอเจนต์จะทำสำเร็จหรือไม่ คุณสามารถให้ข้อมูลอ้างอิงถึงเอกสาร Hermes แก่เอเจนต์ได้เสมอ เช่น ถ้าผมบอกว่า "เฮ้ ถ้าคุณไม่แน่ใจ ให้ไปดูเอกสาร Hermes ในส่วนนี้" เพื่อให้เอเจนต์เข้าใจว่ามันควรจะ build สิ่งนี้อย่างไร จากนั้นผมได้รับการอนุมัติคำสั่งจาก orchestrator ผมคลิก always แล้ว orchestrator บอกว่า "เฮ้ ขั้นตอนที่หนึ่งเสร็จสมบูรณ์ มันยืนยันแล้วว่า token ที่เราเพิ่มมีอยู่จริง และมันยังบอกว่า "เฮ้ บอทออนไลน์อยู่ เราสามารถส่งข้อความหา Kite โดยตรงได้"
สิ่งที่เราจะทำตอนนี้คือสร้างช่องที่เราต้องการ เราจะสร้างช่องหนึ่งสำหรับ Kite และสร้างช่องหนึ่งสำหรับ studio ซึ่งเราใช้สำหรับระดมความคิดก่อนที่จะพา Kite เข้ามาในแชทนั้น ในการทำอย่างนั้น เราจะคลิกที่จุดสามจุดตรงนี้ แต่คุณจะไม่เห็นตัวเลือกสร้าง group เราจะกลับมาที่ all แล้วคลิกจุดสามจุดตรงนี้ จากนั้นคลิก create topic แล้วต้องตั้งชื่อ topic ในกรณีของเรา จะเรียกว่า Kite และเพราะ Kite จะเป็นนักพัฒนา ขอใส่อิโมจิแล็ปท็อปให้มัน แล้วคลิก create เมื่อไหร่ก็ตามที่คุณสร้าง topic ใหม่ ก่อนที่ topic จะถูกเปิดใช้งาน คุณต้องส่งข้อความใน topic นั้นก่อน สำหรับ topic ที่เรากำลังสร้างนี้ เราจะต้องใช้ thread ID ของ topic นี้ เพราะด้วย ID นี้ orchestrator จะผูก topic นี้กับ Kite โดยเฉพาะ ในการเริ่มต้น group นี้ ผมจะคัดลอกพรอมป์ต์นี้แล้วส่งให้ orchestrator ทันทีว่า "เฮ้ thread ID ของ topic นี้คืออะไร?" คุณสามารถส่งข้อความอะไรก็ได้ เราอาจส่ง "hi" เพื่อสร้างช่องก่อน แล้วตามด้วยข้อความอย่าง "thread ID ของ topic นี้คืออะไร" ผมจะโชว์วิธีนั้นให้ดูด้วย
ตอนนี้ Kite ถูกสร้างแล้ว เรามี Telegram topic ID เรามี thread ID กลับมาที่ all แล้วคลิก create topic เราจะสร้าง topic ถัดไปซึ่งก็คือ studio จำไว้ว่า studio คือที่ที่เราจะระดมความคิดเกี่ยวกับคอนเทนต์ใหม่ โปรโมชัน ไอเดีย และอื่นๆ ผมจะเรียกมันว่า Ideas พร้อมไอคอนนี้ แล้วคลิก create และเพื่อกระตุ้นการสร้างมัน ผมจะใช้ข้อความต้อนรับอย่าง "เฮ้ topic ID ของ group นี้คืออะไร" แล้วตรงนี้เราก็จะได้คำตอบ จำไว้ว่าเราสร้าง Kite แล้ว แต่ยังเป็น orchestrator ที่เราคุยด้วยอยู่ เพราะ Kite ยังไม่ถูกเพิ่มเข้าไปใน group นี้เลย ข้อความทั้งหมดที่คุณเห็นตรงนี้ ทั้งคำตอบ thread ID ของ Kite และคำตอบ ID ของ studio ยังมาจาก orchestrator ทั้งหมด ตอนนี้เรามี thread ID แล้ว เราจะส่งข้อความไปที่ orchestrator ว่า "เฮ้ ตอนนี้เรามี thread IDs แล้ว เราอยากให้คุณเดินสาย (wire) Telegram group ของเรา" ผมจะให้ Telegram group ID ของ group ปัจจุบันแก่ orchestrator และให้ thread IDs ของทุกช่องด้วย เพื่อที่มันจะมี thread ID ของที่ที่ผมคุยกับมัน มี thread ID ของ Kite และ thread ID ของ group studio จากนั้นด้วยสิ่งนี้เท่านั้นมันถึงจะผูกช่องต่างๆ เข้ากับเอเจนต์เฉพาะได้ orchestrator จะเข้าถึงช่องที่เราคุยกับมัน และ orchestrator ก็จะเข้าถึงช่อง studio ด้วย เพราะนั่นคือสิ่งที่เราจะ
ใช้ระดมความคิดกับมันในช่อง studio เพราะมันเป็นเจ้านาย แต่ Kite จะฟังเฉพาะในช่องนี้ และ Kite จะไม่เข้าถึงช่อง orchestrator และช่อง Kite ผมจะเปิด notepad แล้ววางพรอมป์ต์นี้ลงไป เพราะเราจะเปลี่ยนบางอย่างในนั้น สิ่งแรกที่เราจะต้องใช้คือ Telegram group ID ในการหา Telegram group ID ของคุณ เราจะใช้บอทตัวเดียวกับที่ใช้หา Telegram ID ของเราคือ User Info Bot เมื่อมันเปิดขึ้นมา คลิกที่ forum ด้านล่าง แล้วเลือก group ที่คุณเพิ่งสร้าง ในกรณีของผมคือ KM Content จากนั้นคลิกที่มัน แล้วกด send บอทจะส่ง ID ของ Telegram group มาให้คุณ คุณสามารถคลิกตรงนี้เพื่อคัดลอก แล้วผมจะแทนที่ด้วยส่วนนี้ที่เรียกว่า Telegram ID ขั้นตอนถัดไป เราจะกรอก thread ID สำหรับสามช่อง และสำหรับสิ่งนั้น ผมจะกลับเข้ามาใน Telegram group ของเรา แต่ในกรณีส่วนใหญ่ ช่องแรกที่คุณสร้างมักจะมี thread ID เป็น 1 ดังนั้น orchestrator น่าจะตอบว่าเป็น 1 แต่เพื่อความแน่ใจ ขอถามมันอีกที เอาล่ะ มันตอบว่า thread ID ของมันคือ 1 เพราะมันถูกสร้างก่อน ผมจะใส่ 1 ตรงนี้ ไปที่ Kite Kite คือ 36 ขอใส่ 36 แล้วมาที่ studio ซึ่งคือ 40 แล้วก็เสร็จ แค่สี่พารามิเตอร์นี้เท่านั้นที่คุณต้องกรอกในพรอมป์ต์นี้ หลังจากนั้นคัดลอกข้อความ สำคัญมาก อย่าทำในช่อง studio หรือ Kite ให้ทำในช่องของ orchestrator แล้ววางข้อความนี้ ส่งให้ orchestrator เพื่อให้มัน implement การผูกช่องกับเอเจนต์ (topic-lane agent binding)
orchestrator ตอบว่า "เฮ้ ผมบันทึกข้อมูล lane ทั้งสี่ลงในหน่วยความจำแล้ว และทำส่วนบันทึกเสร็จ" แต่มันมีปัญหาอยู่อย่างหนึ่ง มันไม่สามารถรันคำสั่งนี้เพื่อรีสตาร์ท gateway ได้ มันเลยบอกให้เรารันให้มัน ผมจะคัดลอกคำสั่งตรงนี้ กลับมาที่เทอร์มินัล ขอเคลียร์หน้าจอเพื่อให้ดูสะอาดขึ้น แล้ววางคำสั่งนี้ สำคัญมากอีกครั้ง ให้แน่ใจว่าถ้าคุณสร้าง user ใหม่ คุณอยู่บน user ใหม่ ไม่ใช่บัญชี root แล้วกด enter และมันก็เกิดแบบนี้ตอนที่ผมทดสอบด้วย คุณจะได้คำตอบว่า failed to connect to bus ให้คัดลอกทุกอย่างตรงนี้ แล้วมาที่ Telegram บอก orchestrator ว่า "เฮ้ ผมเจอ error นี้" แล้ววางมัน อุ๊ย ผมคิดว่าผมไม่ได้คัดลอก กลับไปที่ PowerShell กด control+shift+C เพื่อคัดลอก กลับมาที่ Telegram แล้ววาง จากนั้นมันจะแก้ไขให้และให้คำสั่งอื่นที่เราใช้แก้ปัญหานี้ และผมควรจะหาเจอ มันบอกว่า error นี้หมายความว่าเชลล์ของคุณไม่ได้ใช้ bus environment มันเลยให้คำสั่งอื่นมารัน ผมจะคัดลอกอันนี้ ล้างหน้าจออีกครั้ง วางคำสั่งใหม่นี้ กด enter แล้วคุณจะเห็นว่าผมได้รับการแจ้งเตือนทันทีว่า gateway ของผมกำลังรีสตาร์ท นั่นหมายความว่าคำสั่งได้ผล ใช้เวลาไม่กี่วินาทีกว่าทุกอย่างจะเสร็จ ให้อดทนอีกนิดเมื่อเห็นแบบนี้ ผมจะคัดลอกตรงนี้ กด control+shift+C แล้วส่งให้ orchestrator ว่า "มันทำงานแล้ว นี่คือข้อความที่ผมได้รับ" คุณจะเห็นว่าตอนที่ผมส่งให้ orchestrator ทันที มันไม่ตอบ เพราะผมว่า gateway ยังบูตเอเจนต์ทั้งหมดอยู่ บางครั้งเมื่อคุณรีสตาร์ท gateway มันต้องใช้เวลาสักพักกว่า gateway ทั้งหมดของเอเจนต์จะรีสตาร์ทเสร็จ ดังนั้นเมื่อคุณส่งข้อความนี้ทันทีแล้วไม่เห็นคำตอบ ให้อดทนอีกนิด
และนี่คือทิป เมื่อคุณกลับมาที่เทอร์มินัลแล้วพิมพ์ hermes profile list แล้วกด enter คุณจะเห็นว่าตอนนี้เรามี gateway สองตัวที่กำลังรันอยู่ ตอนแรกเรามีแค่ default gateway ที่รันอยู่ และ gateway ของ dev หยุดอยู่ แต่ตอนนี้คุณจะเห็นว่าเรามี gateway อีกตัวที่สร้างให้ Kite ซึ่งกำลังรันอยู่ สิ่งที่เราจะทำตอนนี้คือเพิ่ม Kite เข้าไปใน group ที่เราสร้าง ในการทำอย่างนั้น ไปที่ BotFather คลิกที่ URL ที่มันให้ไว้เพื่อดึง ID ของ Kite คลิกที่ชื่อ แล้วคลิกเพื่อคัดลอก username ของ Kite แล้วกลับมาใน group ของเรา ผมจะไปที่ all คลิกจุดสามจุดตรงนี้ ไปที่ view group info จากนั้นคลิก manage ลงมาที่ members คลิก add members แล้วใส่ username ของ Kite bot เลือกมันแล้วคลิก add ตอนนี้ Kite ถูกเพิ่มเข้าไปใน group แล้ว เรายังต้องทำให้ Kite เป็น administrator เพื่อให้มันทำงานที่นี่ได้ ยังอยู่บนแท็บ all ผมจะคลิกจุดสามจุด ไปที่ manage group จากนั้นไปที่ administrator แล้วคลิก add administrator เพิ่ม Kite ลงไป ตรวจสอบสิทธิ์ ถ้าพอใจก็คลิก save แล้วปิดได้ ตอนนี้เราเพิ่ม Kite เข้าไปใน group แล้ว
สิ่งที่เราจะทำตอนนี้คือ เข้ามาในช่องของ Kite แล้วส่งข้อความอย่าง "คุณคือใคร?" และนี่คือส่วนที่ทำให้ผมประหม่าทุกครั้ง เพราะนี่คือจุดที่คุณจะเห็นว่าการผูกเอเจนต์กับช่องทำงานหรือไม่ ถ้าทุกอย่างทำงาน เราควรเห็นข้อความจาก Kite ว่า "ผมคือ Kite" มาดูกันว่ามันจะทำงานไหม สมบูรณ์แบบ ผมโล่งใจไปที ตรงนี้ Kite ตอบว่า "ผมคือ Kite นักออกแบบและวิศวกรของ Cadence ของ Larry" เพื่อให้แน่ใจว่าส่วนอื่นๆ ทำงาน ผมจะส่งแบบเดียวกันนี้ไปให้ orchestrator และถ้ามันตอบว่ามันคือ orchestrator ก็ดี แต่ถ้า Kite ตอบในช่อง orchestrator เราก็มีปัญหา ขอทำแบบเดียวกันกับ studio เพื่อความปลอดภัยว่าเรามีเอเจนต์ที่ถูกต้องอยู่เบื้องหลังช่องเหล่านี้ เยี่ยม ในช่องของ orchestrator มันยังตอบว่า "ผมคือ orchestrator" ซึ่งหมายความว่าสิ่งนี้ทำงานได้ดีมาก Kite ถ้าจำได้ก็ตอบว่ามันคือ Kite เช่นกัน และเมื่อผมไปที่ studio orchestrator ก็ตอบว่า orchestrator อยู่ที่นั่น นั่นหมายความว่าการผูกช่อง Telegram กับเอเจนต์ทำงาน Kite จะไม่ไปฟังในช่องของ orchestrator และ orchestrator ก็จะไม่ฟังในช่องของ Kite ซึ่งเป็นสิ่งที่เราต้องการเป๊ะ
ตอนนี้เรามีส่วนหลักทั้งหมดของเฟรมเวิร์กที่เราต้องการพร้อมแล้ว Hermes Agent พร้อมแล้ว orchestrator ตั้งค่าเสร็จสมบูรณ์ Kite นักพัฒนาของเราก็ตั้งค่าเสร็จ group พร้อมแล้ว เราสามารถเริ่ม build แดชบอร์ดได้เลย ตลอดการ build แดชบอร์ดทั้งหมด เราจะใช้ Kite ซึ่งรับบทเป็นทั้งนักออกแบบและนักพัฒนา และก่อนที่เราจะให้ Kite เริ่ม build แดชบอร์ด เราจะต้องแจ้งรายละเอียด (brief) ให้ Kite ทราบเกี่ยวกับทั้งหมดที่เราอยากสร้าง ตั้งแต่ต้นจนจบ และแนวคิด (concept) ที่เรามีสำหรับสิ่งที่เรากำลังสร้าง และสำหรับสิ่งนั้น ผมจะให้พรอมป์ต์นี้กับ Kite เป็นการสรุปรายละเอียดเพื่อให้มันรู้ว่าเราอยากทำอะไร ผมเพิ่งส่งอันนี้ให้ Kite และระหว่างนี้ผมจะอธิบายให้คุณฟังว่าผมส่งอะไรให้ Kite ผมบอก Kite ว่า "เฮ้ ก่อนที่เราจะเขียนโค้ดแม้แต่บรรทัดเดียว นี่คือภาพรวมทั้งหมดของสิ่งที่เรากำลังสร้าง" ผมกำลังบอก Kite
เรากำลังสร้างสตูดิโอระบบอัตโนมัติคอนเทนต์ระดับพรีเมียมพร้อมแดชบอร์ดเว็บที่สวยงาม ผมบอก Kite ว่ากระบวนการทั้งหมดจะทำงานอย่างไร เราจะมี Atlas นักวิจัยของเราที่ไปเสนอไอเดีย แล้วเราจะโปรโมตไอเดียหนึ่งในฐานะผู้ใช้ จากนั้น Vera จะเขียนเนื้อหาของสไลด์ พอเสร็จแล้ว Kite ซึ่งเป็นทั้งนักพัฒนาและนักออกแบบของเราจะนำคอนเทนต์นั้นใส่ลงในเทมเพลตหนึ่งที่เราเลือก แล้วเรนเดอร์เทมเพลตนั้นจากเอกสาร HTML เป็นภาพขนาดประมาณ 1080x1350 พิกเซล จากนั้น Orion นักเผยแพร่ของเราจะเผยแพร่สิ่งนี้ไปยังเครือข่ายใดก็ตามที่เราอยากสร้าง และผมยังบอก Kite ด้วยว่าเราจะรันสิ่งนี้บนเซิร์ฟเวอร์ Python ขนาดเล็กซึ่งจะอยู่บนแดชบอร์ด และที่สำคัญมาก ผมบอก Kite ว่าเราจะให้เทมเพลตที่เราจะทำงานด้วย และผมอยากให้เทมเพลตนี้เป็นแหล่งอ้างอิงความจริงของดีไซน์ (design source of truth) เพราะผมไม่อยากให้มันเปลี่ยนอะไรก็ตามที่เราจะใส่ลงในเทมเพลต และยังมีอีกสองสามอย่างที่ผมให้มัน คืออยากให้มีโปรโตคอลสำรองข้อมูล (backup protocol) และหลักการบางอย่างว่าการ build ทั้งหมดจะเป็นอย่างไร
Kite ตอบว่า "เฮ้ เข้าใจแล้ว นี่คือแผนในคำพูดของผมเอง Cadence เป็นสตูดิโอระบบอัตโนมัติคอนเทนต์ที่สมบูรณ์พร้อมแดชบอร์ดเว็บที่ขัดเกลาเป็นอินเทอร์เฟซควบคุม" และมันก็แค่พูดซ้ำทุกอย่างที่เราบอก Kite ตามลำดับว่ากระแสงานทั้งหมดจะทำงานอย่างไร Kite พร้อมที่จะเริ่ม build แดชบอร์ดกับเราแล้ว ในขั้นตอนถัดไป เราจะบอก Kite ให้สร้างแบ็กเอนด์ Python ที่แดชบอร์ดเว็บนี้จะรันอยู่ ผมจะให้พรอมป์ต์นี้เพื่อเตรียมสิ่งนั้น ผมบอก Kite ว่า "เฮ้ เราจะสร้างแดชบอร์ดนี้ในแบบที่ปลอดภัยมาก" สำหรับส่วนแรก เราจะตั้งค่าสิ่งนี้บนสิ่งที่เรียกว่า SSH tunneling นั่นหมายความว่าเมื่อไหร่ก็ตามที่คุณอยากเชื่อมต่อกับแดชบอร์ด คุณจะใช้คำสั่งอย่าง ssh -N -L พอร์ตนี้ แล้วตอนท้ายคุณจะใส่ username และ IP address ของคุณ แต่ผมจะโชว์ให้ดูว่ามันทำงานอย่างไร เหตุผลที่เราใช้วิธีนี้ตั้งแต่แรกคือ แดชบอร์ดเว็บจะไม่เปิดให้อินเทอร์เน็ตสาธารณะ มีเพียงคนที่รู้รหัสผ่านของเซิร์ฟเวอร์ VPS ของคุณเท่านั้นที่จะเชื่อมต่อกับแดชบอร์ดได้ นั่นคือสิ่งที่ทำให้มันปลอดภัยมาก แต่แม้หลังจากที่เราสร้างเสร็จ เราจะติดตั้ง Tailscale ซึ่งจะโฮสต์แดชบอร์ดให้เรา Tailscale เป็นหนึ่งในการตั้งค่าความปลอดภัยที่แข็งแกร่งที่สุดที่เราสามารถใช้เพื่อนำแดชบอร์ดของเราขึ้นออนไลน์ ดังนั้นครั้งแรกเราจะใช้ SSH tunneling เพื่อเข้าถึงแดชบอร์ด แต่เมื่อเสร็จแล้ว เราจะติดตั้ง Tailscale ซึ่งจะโฮสต์ทุกอย่างให้เรา และสิ่งที่ดีที่สุดเกี่ยวกับ Tailscale คือ เราจะสามารถเข้าถึงแดชบอร์ดบน PC ใดก็ตามที่รันบัญชี Tailscale ของเรา หรือแม้แต่บนโทรศัพท์มือถือของคุณ
เอาล่ะ Kite เสร็จแล้ว มันตั้งค่าแบ็กเอนด์ที่เราใช้รันแดชบอร์ด และมันยังให้คำสั่ง SSH tunnel ที่เราจะใช้เข้าถึงแดชบอร์ด สิ่งที่เราต้องทำคือคัดลอกคำสั่งที่ Kite ให้ไว้ตรงนี้ กลับไปที่ PowerShell แล้วใส่คำสั่งนี้ ssh -L พอร์ตนี้คือพอร์ตที่เราใช้เซฟแดชบอร์ด นี่คือฝั่งความปลอดภัย และนี่คือ username ของคุณ ซึ่งในกรณีของผม ผมสร้าง username ใหม่ถ้าจำได้ชื่อ Larry และนี่คือ IP address ของเซิร์ฟเวอร์ VPS ตรงนี้ผมจะใส่รหัสผ่านแล้วกด enter มันจะพาคุณมาถึงจุดนี้ จะเป็นแค่เคอร์เซอร์กระพริบ นั่นหมายความว่าคุณเชื่อมต่อกับแบ็กเอนด์ของเซิร์ฟเวอร์ VPS แล้ว สิ่งที่เราจะทำตอนนี้คือเปิดเบราว์เซอร์ แล้วอย่างที่ Kite ให้ไว้ มันบอกว่าเราควรเปิด URL นี้บนเบราว์เซอร์ เราจะคัดลอก URL นี้ วางตรงนี้ แล้วกด enter แล้วคุณจะเห็นว่าเราเชื่อมต่อกับแดชบอร์ดแล้ว แต่เพราะเรายังไม่มีอะไรอยู่ตรงนั้น เราจึงเจอ error response แบบนี้ แต่โดยหลักการแล้ว เราเชื่อมต่อกับแบ็กเอนด์ของเซิร์ฟเวอร์ Python แล้ว
สิ่งที่เราจะทำต่อไปคือ ต้องใส่อะไรบางอย่างบนแดชบอร์ดเพื่อให้เราเห็นสิ่งที่เรากำลังสร้าง และสำหรับสิ่งนั้น เราจะบอก Kite ให้สร้างหน้าเว็บอัปโหลด (web upload page) ในหน้านี้เราจะอัปโหลดไฟล์ทั้งหมดที่จะใช้เป็นเทมเพลตของสิ่งที่เราอยากสร้าง ผมจะคัดลอกพรอมป์ต์นี้ให้ Kite แล้วส่งให้มันสร้างจุดอัปโหลดที่เราสามารถอัปโหลดสิ่งต่างๆ ของแดชบอร์ดที่เราต้องการได้ ซึ่งจะประกอบด้วยเทมเพลต HTML ของแดชบอร์ด และสไลด์ทั้งหมดที่เราจะใช้ตอนสร้างสไลด์ carousel เหล่านี้ ระหว่างที่ Kite กำลังสร้าง ขอโชว์ให้ดูว่าเทมเพลตหน้าตาเป็นอย่างไร นี่คือเทมเพลตเปล่าที่เราจะให้ Kite อัปโหลดบนแดชบอร์ดให้เรา เราจะเห็นว่าเรามีแท็บ content ซึ่งมีการเติมข้อมูลเล็กน้อย แท็บ ideas ดูว่างเปล่า แท็บ studio ก็ดูว่างเปล่า ทุกอย่างดูว่างเปล่า แต่พอมันเสร็จ มันจะเพิ่มสิ่งนี้ลงในแบ็กเอนด์ แล้วเราจะค่อยๆ เติมแดชบอร์ดเทมเพลตนี้ในขณะที่เราสร้าง
เอาล่ะ Kite เสร็จแล้ว มันสร้างแบ็กเอนด์ที่เราใช้สำหรับอัปโหลดไฟล์ทั้งหมดที่มันต้องใช้ในการ build แดชบอร์ด และมันให้ URL นี้มา ฉันจะคัดลอก URL เปิดเบราว์เซอร์ แล้ววาง URL นี้ หวังว่าเราจะมีแดชบอร์ดอัปโหลดเว็บ โอเค อันนี้ทำงานได้ดีมาก มันสร้างแบ็กเอนด์อัปโหลด Cadence ขึ้นมา และมันบอกเราว่ามันคาดหวังไฟล์สี่ไฟล์ นั่นคือเทมเพลต HTML และไฟล์ JSON สามไฟล์ซึ่งจะเป็นเทมเพลตของสไลด์ carousel และสำหรับ reel ผมจึงอัปโหลดไฟล์ทั้งสี่ที่จำเป็น และนี่ก็ได้รับการยืนยันบนแดชบอร์ดว่าไฟล์ทั้งสี่ถูกบันทึกแล้ว ขั้นตอนถัดไป ผมจะบอก Kite ว่า "เฮ้ ผมอัปโหลดไฟล์ทั้งสี่ที่จำเป็นต่อการสร้างเทมเพลตเพื่อ build แดชบอร์ดแล้ว ผมอยากให้คุณเสิร์ฟไฟล์เหล่านี้บนเซิร์ฟเวอร์ Python เพื่อที่เราจะได้เห็นว่ามันทำงานจริง" สิ่งที่เราบอก Kite ในพรอมป์ต์นี้คือ ไฟล์เทมเพลตที่เราอัปโหลดเรียกว่า cadence_dashboard_template.html แต่ผมอยากให้มันเปลี่ยนชื่อเป็น index.html ในโฟลเดอร์เฉพาะที่เราสร้างสำหรับแดชบอร์ดที่เราจะ build และที่สำคัญมาก อย่างน้อยในกรณีของผม ถ้าคุณอยากเปลี่ยนเทมเพลต คุณไม่จำเป็นต้องให้คำสั่งนี้กับ Kite แต่สิ่งที่ผมบอก Kite คือ "เฮ้ นี่จะเป็นแหล่งอ้างอิงความจริงของดีไซน์ เมื่อไหร่ก็ตามที่มันสร้างอะไร มันควรตรวจสอบเทมเพลตเสมอเพื่อให้แน่ใจว่ามันไม่ได้เปลี่ยนแปลงดีไซน์ของเทมเพลตไป เพื่อให้สิ่งที่มันสร้างออกมาเหมือนกับที่เรามีในเทมเพลตเป๊ะ" ผมบอกมันว่า "เทมเพลตมีค่าม็อก (mock values) แบบฮาร์ดโค้ดไว้เพื่อให้ไม่มีอะไรดูว่างเปล่า แต่ตัวเลขเหล่านั้นบนเทมเพลตจะถูกแทนที่ด้วยเมตริกจริงเมื่อเราเริ่มสร้างแดชบอร์ด" และนี่คือหนึ่งในสิ่งที่ผมชอบเกี่ยวกับ Hermes
สิ่งที่คุณเห็นตรงนี้ตัวอย่างเช่น มันทำงานที่เราให้เสร็จแล้ว และคุณจะเห็นว่ามันใช้เบราว์เซอร์ในตัว (inbuilt browser) เพื่อตรวจสอบว่าทุกอย่างที่อยู่ตรงนั้นถูกต้อง มันคลิกและถ่ายภาพหน้าจอของเบราว์เซอร์ (browser snapshots) มันคลิกส่วนต่างๆ แล้วถ่ายภาพหน้าจอของแต่ละส่วน เพื่อให้แน่ใจว่าสิ่งที่มันทำเหมือนกับในเทมเพลตเป๊ะ และนี่คือหนึ่งในเหตุผลหลักที่ผมชอบทำงานกับ Hermes มาก เพราะผมสร้างแดชบอร์ดบ่อย ถ้าเอเจนต์หรือ Hermes อนุญาตให้เอเจนต์ทำงานกับเบราว์เซอร์แบบไม่มีหัว (headless browser) เพื่อให้เห็นสิ่งที่มันกำลังสร้าง นี่มันเจ๋งมาก
เอาล่ะ Kite บอกว่ามันเสร็จแล้ว มันบอกว่าเทมเพลตถูกล็อกอินแล้วแต่สมบูรณ์เพียงบางส่วน เพราะมีไฟล์หนึ่งที่หายไป พอผมดูตรงนี้ มันบอกว่ามันไม่พบ templates_pack เพราะมันเป็น false zero ขอดูว่าเป็นเพราะอะไร เป็นไปได้ว่าการอัปโหลดของเราไม่ทำงาน มันบอกว่าเราควรอัปโหลดไฟล์นี้อีกครั้งผ่านจุดอัปโหลด ผมจะใส่อันนี้ตรงนี้อีกครั้งแล้วอัปโหลด templates pack ใหม่ ผมจะบอก Kite ว่า "ผมอัปโหลด templates_pack.json ใหม่แล้ว ช่วยยืนยันหน่อย" สมบูรณ์แบบ ดูเหมือนมีบางอย่างเกิดขึ้นตอนที่อัปโหลดครั้งแรก มันบอกว่า "ใช่ ตอนนี้ผมเห็นมันแล้ว" มันตรวจสอบไฟล์แล้ว และไฟล์ต้นฉบับที่อัปโหลดทั้งหมดตอนนี้อยู่ในโฟลเดอร์ที่เราต้องการให้มันอยู่ ซึ่งสมบูรณ์แบบ ต่อไปไปที่แดชบอร์ดแล้วดูว่าแดชบอร์ดเรนเดอร์บนเซิร์ฟเวอร์ Python จริงหรือไม่ ในการทำอย่างนั้น เราจะใช้ localhost:8892 เลข 8892 คือพอร์ตของเซิร์ฟเวอร์ และ localhost คือพื้นที่ภายในเครื่องบนเซิร์ฟเวอร์ของเราที่ใช้เข้าถึงแดชบอร์ด แล้วพอเปิด หวังว่าสวยงาม คุณจะเห็นว่าเรามีแดชบอร์ดโหลดขึ้นมาเหมือนในเทมเพลต ขอเปิดเทมเพลตเพื่อเปรียบเทียบแบบหนึ่งต่อหนึ่ง นี่คือสิ่งที่เรามีในเทมเพลต และนี่คือสิ่งที่ถูกเสิร์ฟบนแดชบอร์ดของเรา ทุกหน้าเหมือนกับในเทมเพลตเป๊ะ Kite ทำงานได้ดีมาก
ในขั้นตอนถัดไป นี่คือหนึ่งในสิ่งที่ผมแนะนำเสมอเวลาสร้างอะไรกับเอเจนต์ ให้เอเจนต์สร้างสำเนา (copy) ของแดชบอร์ดก่อนที่จะเปลี่ยนแปลงอะไรเสมอ ผมพูดแบบนี้ในทุกวิดีโอ เพราะผมเคยทำงานบนแดชบอร์ดมาหลายวัน แล้วเอเจนต์ของผมทำผิดพลาด และผมเสียทุกอย่างไป นี่คือเหตุผลที่สำคัญมากที่คุณต้องบอกเอเจนต์ว่า "เฮ้ ก่อนที่คุณจะเปลี่ยนอะไรบนแดชบอร์ด กรุณาสร้างสำเนาของแดชบอร์ดและบันทึกไว้ที่ไหนสักแห่ง" และบนแดชบอร์ด เรามีส่วนนี้ที่เป็นเลขเวอร์ชัน (version number) ผมอยากให้มันอัปเดตเลขเวอร์ชันทุกครั้งที่มันเปลี่ยนแปลงแดชบอร์ด ผมจะคัดลอกพรอมป์ต์นี้แล้วส่งให้ Kite เพื่อ implement สิ่งนี้ และ Kite ก็ทำเสร็จแล้ว เมื่อเรามาที่แดชบอร์ดและรีโหลดเทมเพลต เราควรเห็นว่ามันเปลี่ยนไปแล้ว เดิมเรามี version 0.1 editorial ขอเปิดเทมเพลตให้ดูว่าก่อนหน้านี้หน้าตาเป็นอย่างไร ในเทมเพลตตรงส่วนล่างนี้ เดิมเรามี version 0.1 editorial และตอนนี้คุณจะเห็นว่ามันถูกอัปเดตเป็น version 0.1 ในแดชบอร์ดของเรา หมายความว่า Kite จะคอยอัปเดตเวอร์ชันให้ตลอดเวลาเมื่อเราเดินหน้าต่อไป
ตอนนี้เราจะเริ่ม build กัน พารามิเตอร์ทั้งหมดที่คุณเห็นในแท็บ content เป็นค่าฮาร์ดโค้ดจากเทมเพลตที่ผมสร้าง และทุกอย่างที่เรามีในแท็บ agents, heat map ทุกอย่างเป็นฮาร์ดโค้ด เราจะให้พรอมป์ต์ Kite เพื่ออัปเดตเมตริกแดชบอร์ดที่เรามีตรงนี้ รวมถึงแท็บ agents เพื่อให้มีข้อมูลจริงจาก Hermes setup ของเรา ไม่ใช่จากค่าฮาร์ดโค้ดในเทมเพลต และผมบอกมันว่า "เฮ้ เมื่อคุณเสร็จ ยืนยันว่าแท็บทั้งสองแสดงข้อมูลจริง และ heat map ตรงกับตาราง runs" สำหรับ heat map ข้อมูลทั้งหมดจะถูกดึงมาจากฐานข้อมูลบันทึกการทำงานของเอเจนต์ที่เราสร้าง ถ้าจำได้ เราสร้างสิ่งที่เอเจนต์ทุกตัวจะบันทึกกิจกรรมเมื่อไหร่ก็ตามที่มันทำอะไรหรือปฏิบัติการใดๆ
เอาล่ะ Kite ทำเสร็จแล้ว มาดูสิ่งที่ Kite สร้างกัน รีโหลดแดชบอร์ด ตรงนี้คุณจะเห็นว่ามันดึงเมตริกจริงจากฐานข้อมูลเอเจนต์ของเราที่เราสร้าง คุณจะเห็นว่า Kite พยายามดึงเมตริกจริงจากฐานข้อมูลบันทึกการทำงานของเอเจนต์ คุณจะเห็นว่าตอนนี้ในส่วน workload ของเอเจนต์ เพราะไม่มีเอเจนต์ตัวไหนทำงานอะไรในวันนี้ ทุกอย่างจึงเป็นศูนย์สำหรับ Atlas, Vera และ Orion และ Kite เป็นตัวเดียวที่จะทำงานกับเราวันนี้ Kite จึงอยู่ที่ประมาณ 100% และเช่นเดียวกันเมื่อคุณมาที่ฐานข้อมูลเอเจนต์ คุณจะเห็นว่าทุกอย่างเกือบเป็นศูนย์สำหรับเอเจนต์ทั้งหมด เพราะพวกมันยังไม่ได้ทำอะไรในวันนี้ ผมกำลังอัดวิดีโอในวันที่สอง ดังนั้นผมคาดว่าจะมีเมตริกบางอย่างจากวันก่อนหน้า ผมจะบอก Kite ว่า "เฮ้ ดูเหมือนว่าเมตริกที่ถูกดึงมานั้นดึงมาจากวันนี้เท่านั้น แต่ควรมีกิจกรรมจากเอเจนต์ในวันก่อนหน้าด้วย มันควรทำให้แน่ใจว่าแดชบอร์ดไม่เพียงสะท้อนวันนี้ แต่สะท้อนข้อมูลทั้งหมดที่เรามีในฐานข้อมูลบันทึกการทำงานของเอเจนต์" ผมบอก Kite ว่า "เฮ้ อันนี้ดูเจ๋งมาก ขอบคุณ อย่างไรก็ตาม ดูเหมือนว่าเมตริกเอเจนต์ที่แสดงเป็นของวันนี้เท่านั้น ผมไม่เห็นข้อมูลจากเมื่อวานเลย แม้ว่าฐานข้อมูลควรจะมีข้อมูลนี้" มันควรตรวจสอบว่าอะไรผิดปกติ และทำให้แน่ใจว่าเราเสิร์ฟข้อมูลทั้งหมดที่มีอยู่ในฐานข้อมูลบันทึกการทำงานของเอเจนต์
เอาล่ะ Kite บอกว่ามันเสร็จแล้ว ดูเหมือนมีปัญหาเกิดขึ้น มันบอกว่าปัญหาที่แท้จริงคือมีปัญหากับเซิร์ฟเวอร์ทดสอบ (test server) ของ Python ที่ลบสิ่งต่างๆ ออกจากฐานข้อมูลโปรดักชัน มันจึงแก้ไขสิ่งนี้ด้วย มันบอกว่าการแก้ไขเสร็จสิ้น เซิร์ฟเวอร์ทดสอบไม่แตะฐานข้อมูลโปรดักชันอีกต่อไป และมันเพิ่มมาตรการบางอย่างเพื่อให้แน่ใจว่าสิ่งนี้จะไม่เกิดขึ้นอีก แต่สิ่งที่ผมอยากให้ Kite ทำก่อนที่เราจะเดินหน้าต่อไป ผมอยากแน่ใจว่าปัญหานี้แก้ไขแล้วจริง ผมจะบอก Kite ว่า "เฮ้ ทำการทดสอบแบบ end-to-end smoke test กับเอเจนต์ทั้งหมด กระตุ้นกิจกรรมทดสอบสองสามอย่าง แล้วตรวจสอบว่าข้อมูลที่ได้ถูกบันทึกในฐานข้อมูลและสะท้อนบนแดชบอร์ดอย่างถูกต้อง ถ้ามีอะไรที่ขาดหายไป ก็แก้ไขมันด้วย" เพราะฐานข้อมูลบันทึกการทำงานของเอเจนต์จะเป็นส่วนสำคัญของสิ่งที่เราจะสร้าง ผมจึงอยากแน่ใจร้อยเปอร์เซ็นต์ว่าเอเจนต์บันทึกการทำงาน และทุกสิ่งที่พวกมันทำสะท้อนบนแดชบอร์ดนี้ และยังไงก็ตาม พรอมป์ต์เชิงลึกทั้งหมดที่ผมเพิ่มเข้าไปนี้ ผมจะทำให้คุณเข้าถึงได้ ถ้าคุณเจอสถานการณ์เดียวกัน คุณก็แค่คัดลอกวางพรอมป์ต์แล้วให้เอเจนต์หรือ Kite แก้ไขให้คุณ
เอาล่ะ Kite บอกว่ามันทำ smoke test เสร็จแล้ว มันทำซ้ำกับเอเจนต์ทั้งหมด และตอนนี้คุณจะเห็นว่าเอเจนต์ทั้งหมดทำเสร็จแล้ว เมื่อเรากลับมาที่แดชบอร์ด คุณจะเห็นว่าตอนนี้เราไม่มีค่าศูนย์ที่เราเคยมี เรามีเมตริกจากเอเจนต์ทั้งหมด
ที่ถูกดึงมาจากฐานข้อมูลบันทึกการทำงานของเอเจนต์อย่างถูกต้อง และเช่นเดียวกันกับ heat map และเมื่อเรามาที่แดชบอร์ด เรายังเห็นว่าจำนวน runs ทั้งหมดของเอเจนต์ก็ถูกต้องด้วย ยังมีอีกอย่างหนึ่งที่ไม่ถูกต้องตรงนี้ ซึ่งเกี่ยวกับการกระจายภาระงานของเอเจนต์ (agent workload distribution) อันนี้ควรรวมกันได้ 100 เสมอ เพื่อที่เราจะได้เห็นว่าเอเจนต์ตัวไหนมีภาระงานมากที่สุด ผมจะบอก Kite ให้แก้ไขอันนี้ด้วย แล้วเราค่อยไปต่อกับการ build ผมบอก Kite ว่า "เฮ้ บนหน้าแรกของแดชบอร์ด การกระจายส่วนแบ่งภาระงานของเอเจนต์ไม่สมเหตุสมผล" ผมบอกมันว่าทุกอย่างควรรวมกันได้ 100% แต่ตอนนี้ทุกอย่างรวมกันได้ 350 แนวคิดคือ เมื่อไหร่ก็ตามที่ผมดูอันนี้ ผมควรจะเห็นว่าเอเจนต์ตัวไหนทำงานมากกว่า มันควรแก้ไขอันนี้ให้เรา Kite ก็ทำเสร็จแล้ว ตอนนี้เมื่อผมดูแดชบอร์ด คุณจะเห็นว่าการกระจายสมเหตุสมผลแล้ว มันรวมกันได้ 100% และผมเห็นชัดเจนว่า Kite เป็นเอเจนต์ที่แอคทีฟที่สุด เพราะมันเป็นคนสร้างแดชบอร์ดอยู่แล้ว
ตอนนี้ฐานข้อมูลบันทึกการทำงานของเอเจนต์ทำงานถูกต้องแล้ว เมตริกทั้งหมดที่วางบนแท็บ agents ก็สมเหตุสมผล เราจึงเริ่ม build คอมโพเนนต์อื่นๆ ของแดชบอร์ดได้ ผมจะอธิบายแนวคิดว่าพรอมป์ต์ทั้งหมดจะทำอะไร และผมจะใส่พรอมป์ต์ทั้งหมดนี้ในครั้งเดียว เพื่อที่คุณจะได้ไม่ต้องนั่งดูผมใส่ทีละอัน ในพรอมป์ต์ถัดไปเราจะสร้าง exporter และขออธิบายว่าทำไมเราถึงต้องมีมัน เดิมที เมื่อไหร่ก็ตามที่คุณอยากสร้างภาพ carousel หรือสไลด์ คุณต้องออกแบบทุกอย่างในโปรแกรมแก้ไขภาพ (photo editor) เสมอ แล้วบันทึก ส่งออกเป็นรูปภาพ แล้วคุณก็ได้ภาพ carousel ของคุณ แต่เคล็ดลับที่เราจะใช้ตรงนี้คือ เราจะเรนเดอร์ทุกสไลด์ เราจะสร้างทุกสไลด์เป็น HTML ถ้าคุณสร้างสไลด์เป็นภาพ คุณจะจ่ายเงินทุกครั้งต่อภาพที่สร้าง ถ้าอยากเปลี่ยนข้อความในภาพ นั่นหมายความว่าคุณต้องจ่ายเงินสำหรับ API call ทุกครั้ง ซึ่งทำให้การทำงานกับสไลด์ไม่สนุกอีกต่อไป เราจะสร้างมันด้วยวิธีที่ฉลาดกว่านี้ เราจะสร้างทุก carousel เป็นไฟล์ HTML เพราะมันจะเป็นไฟล์ HTML เราจะแก้ไขข้อความใดก็ตามที่อยากแก้ได้ง่ายมาก
ขอเข้าไปในเซ็ตอัปของผมเพื่ออธิบายให้คุณเห็นแนวคิดว่าเราจะสร้างสไลด์อย่างไร ขอยกอันนี้เป็นตัวอย่าง ทุกอย่างที่คุณเห็นตรงนี้ดูเหมือนภาพ แต่จริงๆ แล้วมันไม่ใช่ภาพ มันเป็นเอกสาร HTML ที่เรนเดอร์ไฟล์แบบนี้ เมื่อไหร่ก็ตามที่ผมอยากส่งออกเป็นภาพ ผมจะใช้สิ่งที่เรียกว่า headless browser (เบราว์เซอร์ไร้หน้าต่าง) headless browser ไม่จำเป็นต้องมีเดสก์ท็อปในการรัน มันจะเรนเดอร์ไฟล์นี้ซึ่งเป็นไฟล์ HTML แล้วถ่ายภาพหน้าจอของสิ่งที่มันเห็น ดังนั้นทุกสิ่งที่เราเห็นตรงนี้ซึ่งเรนเดอร์เป็นโค้ด จะถูกส่งออกเป็น JPEG ในที่สุด แล้วคุณก็สามารถอัปโหลดมันไปยัง Instagram, TikTok หรือที่ไหนก็ตามที่อยากสร้าง เหตุผลที่เราทำด้วยวิธีที่ฉลาดนี้คือ เดิมทีเมื่อไหร่ก็ตามที่คุณอยากสร้างสไลด์ carousel คุณต้องใช้เครื่องสร้างภาพ บางทีคุณอาจใช้ Leonardo หรือโมเดล AI ทั้งหลายที่มีอยู่เพื่อสร้างภาพ แต่เมื่อคุณอยากเปลี่ยนข้อความแม้แต่คำเดียว คุณต้องบอกโมเดล AI อีกครั้งว่า "เฮ้ ผมอยากเปลี่ยนข้อความ" เช่น ผมอยากเปลี่ยนจาก most people เป็น most users ผมต้องบอกโมเดล AI อีกครั้งว่า "เฮ้ ผมอยากเปลี่ยนข้อความจาก most people เป็น most users" แล้วคุณก็จ่ายเงินทุกครั้งที่แก้ไข ซึ่งอาจไม่ใช่วิธีที่ฉลาดที่สุด
วิธีที่ผมสร้างและที่ผู้ใช้ส่วนใหญ่ใช้คือ คุณสร้างสไลด์ทั้งใบเป็นไฟล์ HTML และด้วยวิธีนั้น คุณสามารถเปลี่ยนทุกอย่างที่อยากเปลี่ยนในไฟล์ได้โดยไม่ต้องสร้างพรอมป์ต์ใหม่หรือสร้าง API keys ใหม่ ตัวอย่างเช่น นี่คือสิ่งที่แดชบอร์ดของเราจะทำด้วย เมื่อผมคลิก fine-tune แล้วเลือกองค์ประกอบนี้ ผมก็เปลี่ยนข้อความตรงนี้จาก people เป็น most builders ได้เลย และคุณจะเห็นว่ามันทำได้ ผมสามารถบันทึกและเรนเดอร์ใหม่ แล้วผมก็ได้สไลด์ใหม่โดยไม่ต้องเรียก API เลย เช่นเดียวกัน ผมเปลี่ยนคอนเทนต์ทั้งหมดได้ นี่คือเหตุผลที่ผมชอบสิ่งที่เราสร้างตรงนี้มาก ผมเปลี่ยนเลย์เอาต์ได้ ย้ายคอนเทนต์ทุกชิ้นตรงนี้ เปลี่ยนขนาด ใส่ในรูปแบบไหนก็ได้ตามที่ต้องการ โดยไม่ต้องจ่ายค่า API call เลย ดังนั้นสิ่งที่เราสร้างคือ เราสร้างสไลด์ carousel ทุกใบเป็นไฟล์ HTML แล้วเมื่อเราพร้อม เราก็ใช้ headless browser ที่ดูไฟล์ HTML ที่เราสร้างและสร้างภาพหน้าจอเป็นรูปภาพที่เราสามารถอัปโหลดไปยังแพลตฟอร์มโซเชียลมีเดียใดก็ได้ เราจึงหลีกเลี่ยงการทำให้การออกแบบภาพ carousel ซับซ้อน ที่คุณต้องเรียก API ทุกครั้งที่แก้ไขและจ่ายเงินทุกครั้งที่แก้ไข เรากำลังเรนเดอร์ทุกอย่างเป็นไฟล์ HTML ที่แก้ไขได้อย่างอิสระ
ค่อนข้างบ้ามากที่คุณสามารถทำได้กับ HTML มาตรฐาน อย่างที่คุณเห็นเทมเพลตทั้งหมดตรงนี้ ไม่มีสักอันที่เป็นรูปภาพ ทุกอย่างสร้างด้วย HTML มาตรฐาน ซึ่งบางคนอาจไม่เชื่อด้วยซ้ำว่าสิ่งนี้สร้างด้วย HTML โดยพื้นฐานแล้ว พรอมป์ต์นี้จะสร้างการตั้งค่าของ headless browser ที่จะเรนเดอร์สิ่งที่เราสร้างจากไฟล์ HTML ให้เป็นภาพที่สามารถอัปโหลดบนแพลตฟอร์มโซเชียลมีเดียใดก็ตามที่เรามี เราไม่ได้สร้างภาพตรงๆ เราสร้างไฟล์ HTML ที่มีโครงสร้างที่เราต้องการ แล้วพอเราพอใจกับมัน เราก็ส่งออกเป็นภาพ และสำหรับสิ่งนี้เราใช้ headless browser ที่เรียกว่า Chromium และโดยค่าเริ่มต้น Hermes setup ส่วนใหญ่มาพร้อมกับ Chromium เราจึงอาจไม่ต้องติดตั้งมันเองด้วยซ้ำ เราแค่ใช้ประโยชน์จากสิ่งที่ Hermes มีอยู่แล้ว แล้วใช้มันสร้างสิ่งที่อยากสร้าง ถ้าจำได้ ตอนที่เราสร้างแดชบอร์ด มีส่วนที่ผมบอกว่าเอเจนต์ใช้เบราว์เซอร์ ตัวอย่างเช่น คุณจะเห็นว่า Kite เรนเดอร์เบราว์เซอร์ที่มันไปที่แดชบอร์ดและตรวจสอบว่าทุกอย่างทำงาน นั่นคือแนวคิดเดียวกันที่ผมจะใช้ เราจะให้นักออกแบบซึ่งในกรณีนี้ก็คือ Kite ใช้ headless browser ตัวเดียวกัน แต่ตอนนี้มันจะไม่ใช้เพื่อตรวจสอบแดชบอร์ด แต่จะใช้เพื่อแปลงสิ่งที่ไฟล์ HTML มีอยู่ มันทำให้การสร้างสไลด์ง่ายมากโดยไม่ต้องจ่ายค่า API call ทุกครั้ง และ Kite ก็ทำเสร็จแล้ว มันทำ smoke test และยืนยันว่าภาพถูกเรนเดอร์จากเบราว์เซอร์เป็นไฟล์ PNG จริง
ในขั้นตอนถัดไป เราจะสร้างทุกอย่างที่จะรันจากแบ็กเอนด์ ผมจะอธิบายพรอมป์ต์แบ็กเอนด์ทั้งหมดเหล่านี้ แล้วให้ Kite แต่ผมจะอธิบายพรอมป์ต์ทั้งหมดเหล่านี้จนถึงจุดที่เราไปถึงพรอมป์ต์ที่กระตุ้นการออกแบบฟรอนต์เอนด์ เมื่อคุณใช้พรอมป์ต์ ทุกอย่างที่ผมพูดว่า backend ผมจะพยายามเพิ่มคำนี้ เพื่อให้คุณรู้ว่าจะคาดหวังอะไร ถ้าเป็นพรอมป์ต์แบ็กเอนด์ มันจะไม่แสดงอะไรบนแดชบอร์ด
มันกำลังสร้างรากฐานที่เราจะใช้เพื่อแสดงบางอย่างบนแดชบอร์ด เมื่อเราไปถึงจุดที่ผมเขียนว่า design นั่นหมายความว่าสิ่งที่คุณจะทำคือจะแสดงดีไซน์ แต่ถ้าผมไปถึงจุดที่ผมรู้สึกว่ามีประโยชน์ที่จะอธิบาย ผมก็จะอธิบายให้คุณฟังด้วย เพื่อที่คุณจะเข้าใจว่าพรอมป์ต์เหล่านี้หน้าตาเป็นอย่างไร และในทุกกรณีผมมักใส่คำอธิบายสั้นๆ เพื่ออธิบายว่าพรอมป์ต์จะทำอะไรและคุณควรคาดหวังอะไร
ตอนนี้เราทำพรอมป์ต์ exporter เสร็จแล้ว พรอมป์ต์ถัดไปคือ template packs auto fit เมื่อไหร่ก็ตามที่เราสร้างไอเดีย ขอใช้เซ็ตอัปของผมเพื่อให้คุณเห็นแนวคิดว่าผมกำลังทำอะไร เมื่อผมคลิก generate ideas มาดูกัน ผมมีไอเดียที่ถูกสร้างไว้แล้วตรงนี้ ขอดูตัวอย่างอย่าง "building a one person AI operation team" เมื่อผมชอบไอเดียนี้และคลิก promote โดยพื้นฐานแล้วผมสามารถตัดสินใจจำนวนสไลด์ที่ต้องการสร้าง สมมติว่าผมอยากสร้างหกสไลด์แล้วกด write slides สิ่งที่จะเกิดขึ้นคือ Vera นักเขียนของเราจะเขียนสไลด์สำหรับ carousel หรือคอนเทนต์หรือข้อความสำหรับ carousel ที่เราอยากสร้าง อย่างที่บอก ทุกอย่างที่ Vera ให้เรามาเป็นเพียงข้อความดิบ (raw text) แต่เราต้องสามารถแทรกข้อความเหล่านี้ลงในเทมเพลตได้ พรอมป์ต์ที่เราจะสร้างตรงนี้จะสร้างส่วนที่นำคอนเทนต์ที่ Vera สร้างขึ้นมาแทรกลงในเทมเพลต HTML ที่เรามี เทมเพลตทั้งหมดที่คุณเห็นตรงนี้อย่างที่บอก เป็นเทมเพลต HTML โดยพื้นฐาน ตัวอย่างเช่น เมื่อผมดูตัวอย่างนี้ คุณจะเห็นว่าบางอันมีตัวอักษรยาวกว่าบางอัน อันนี้มีตัวอักษรยาวกว่า อันนี้มีเลย์เอาต์ต่างกันและอื่นๆ สิ่งที่จะเกิดขึ้นคือ แบ็กเอนด์ที่เราจะสร้างจะดูเทมเพลตที่คุณเลือก แล้วปรับข้อความที่ Vera สร้างให้เข้ากับเทมเพลตนั้น และนี่คือสิ่งที่ผมเรียกว่าฟีเจอร์ auto fit
เพื่อให้สิ่งนี้ทำงาน เราต้องสร้างเรนเดอร์เอนจิน (render engine) ที่จะดูคอนเทนต์ที่ Vera สร้าง แล้วดูเทมเพลตปลายทาง ตัวอย่างเช่น ถ้าผมบอกว่า "เฮ้ ผมชอบคอนเทนต์นี้" เมื่อผมมาที่ approve และเลือกเทมเพลต มันจะถามว่าผมอยากใช้เทมเพลตไหน เมื่อไหร่ก็ตามที่ผมเลือกเทมเพลตที่อยากใช้ แบ็กเอนด์ที่เราจะสร้างตรงนี้จะดูเทมเพลตที่เราเลือก ดูจำนวนคำและตัวอักษรที่มี แล้วปรับข้อความที่ Vera สร้างให้เข้ากับเทมเพลตนั้น ลองนึกภาพว่าถ้าคำที่ Vera สร้างยาวเกินกว่าที่เทมเพลตรองรับ carousel ก็จะดูน่าเกลียด นี่คือเหตุผลที่เราสร้างเรนเดอร์เอนจินนี้เพื่อจัดการสิ่งนั้นให้เรา และหลังจากนั้นเราจะสร้างไปป์ไลน์ (pipeline) เพื่อคุยกับทีมเอเจนต์ ตอนนี้เวลาผมคุยกับทีม ผมแชทกับ Kite ได้ แชทกับ Vera ได้ แต่ยังแชทกับนักเผยแพร่ของเราไม่ได้ แต่เราอยากคุยกับพวกมันจากแดชบอร์ดได้ และคำว่า "คุย" ที่ผมหมายถึงคือ เมื่อผมมาที่แท็บ ideas แล้วคลิก generate ideas นี่จะส่งข้อความไปที่ Atlas นักวิจัยของเราเพื่อหาไอเดียว่าเราสามารถสร้างอะไรได้ ผมกำลังคุยกับ Atlas ผ่านโค้ดที่ผมส่งทริกเกอร์ไปที่ Atlas ว่า "เฮ้ สร้างไอเดียให้หน่อย" และเช่นเดียวกันกับเอเจนต์อื่นๆ ทั้งหมด เมื่อไหร่ก็ตามที่เราอยากเผยแพร่อะไร เราไม่ต้องมาที่ Telegram แล้วบอกให้มันเผยแพร่ เราอยากกดปุ่มบนแดชบอร์ดที่จะทริกเกอร์เอเจนต์ให้เผยแพร่คอนเทนต์ และนี่คือสิ่งที่พรอมป์ต์ 17 จะทำ มันจะสร้างอินเทอร์เฟซที่เมื่อไหร่ก็ตามที่เราคลิกปุ่มบนแดชบอร์ด มันจะส่งและทริกเกอร์เอเจนต์ให้ทำงานนั้นให้เรา
จากนั้นเราจะมีพรอมป์ต์ 18 พรอมป์ต์ 18 จะเป็นของ Atlas โดยเฉพาะ ซึ่งเป็นคนดูแลไอเดียและนักวิจัยของเรา และผมก็แค่บอก Atlas ว่าผมอยากให้ carousel ออกแบบมาแบบไหน ตรงนี้เป็นแค่ตัวอย่างที่ผมใส่ลงไป ผมบอก Atlas ว่า "เฮ้ เมื่อไหร่ก็ตามที่คุณเขียนสไลด์ carousel ผมอยากให้เขียนด้วยภาษาธรรมดา ง่ายๆ คำสั้นๆ ประโยคสั้นๆ ไม่มีการโอเวอร์ ไม่มี buzz words อะไรแบบนั้น" ดังนั้นพรอมป์ต์นี้จึงให้แนวทางแก่ Atlas ว่าเราอยากให้คอนเทนต์เป็นแบบไหน รวมถึง Vera นักเขียนคอนเทนต์ของเราว่าเราอยากให้คอนเทนต์ของสไลด์หน้าตาเป็นอย่างไร และตรงนี้เรายังให้แนวทางกับมันเกี่ยวกับการสร้างไอเดีย มันควรสร้างสี่ไอเดีย และแนวทางว่าเราอยากให้สไลด์ carousel ทั้งหมดหน้าตาเป็นอย่างไร จากนั้นเราจะมีพรอมป์ต์สุดท้ายตรงนี้ ซึ่งสำหรับนักเผยแพร่ของเราเมื่อไหร่ก็ตามที่เราอยากเผยแพร่ ตัวอย่างเช่น เมื่อเรามาที่แดชบอร์ดและมาที่แท็บ studio ถ้าผมอยากเผยแพร่อะไรตรงนี้ ผมก็แค่คลิก post แล้วมันก็สามารถเผยแพร่ตรงไปยัง Instagram, TikTok หรือที่ไหนก็ตามที่คุณอยากใช้ แต่สำหรับสิ่งนั้นเราก็ต้องสร้างแบ็กเอนด์ และนั่นคือสิ่งที่พรอมป์ต์นี้จะทำ พรอมป์ต์นี้จะสร้างแบ็กเอนด์ที่เมื่อไหร่ก็ตามที่เราทริกเกอร์การอัปโหลด การอัปโหลดนั้นก็สามารถถูกส่งตรงไปยังแพลตฟอร์มโซเชียลมีเดียที่เราอยากส่งได้
ผมจะรันพรอมป์ต์ทั้งหมดนี้ พรอมป์ต์แรกคือตัวที่จะนำข้อความที่ถูกสร้างมาปรับให้เข้ากับเทมเพลต พรอมป์ต์ถัดไปคือตัวที่ดูแลให้เราใช้ปุ่มทั้งหมดบนแดชบอร์ดเพื่อทริกเกอร์แอ็กชันไปที่เอเจนต์ พรอมป์ต์ 18 ซึ่งจะดูแลว่าเราอยากให้ไอเดียถูกสร้างแบบไหน จำนวนไอเดียที่อยากให้สร้าง อยากให้แคปชันแบบไหน อยากให้สไลด์ carousel คอนเทนต์หน้าตาแบบไหน และเราจะมีพรอมป์ต์สุดท้ายที่ดูแลการเผยแพร่ไปยังเซิร์ฟเวอร์หรือแพลตฟอร์มโซเชียลมีเดียที่เราอยากเผยแพร่ ผมจะรันพรอมป์ต์ทั้งหมดนี้ ถ้าเจอปัญหาอะไร ผมจะหยุดและอธิบายให้คุณฟัง เพื่อให้คุณตามสิ่งที่เราจะทำตรงนั้นได้ เอาล่ะ Kite ประมวลผลพรอมป์ต์ทั้งหมดนั้นเสร็จแล้ว อย่างที่บอก ผมไม่ต้องตอบอะไรเลย ผมแค่คัดลอกวางพรอมป์ต์ทั้งหมดให้ Kite แล้วมันก็ประมวลผลแบ็กเอนด์ทั้งหมด
ในขั้นตอนถัดไป เราจะหา API keys มาบางอัน และผมจะอธิบายทุก API key ว่าคืออะไรและทำไมเราถึงต้องใช้มัน API key แรกที่เราจะหาคือสำหรับ Perplexity Perplexity เป็นหนึ่งในโมเดล AI ที่แข็งแกร่งมากในด้านการวิจัย ผมจึงเพิ่มฟีเจอร์นี้ เพื่อที่ว่าเมื่อคุณเขียน carousel และอยากให้เอเจนต์ใช้ข้อมูลล่าสุดจริงๆ ตัวอย่างเช่น คุณสามารถใช้ Perplexity เป็นโมเดลวิจัย โดย Atlas จะสอบถาม Perplexity เพื่อทำการวิจัยก่อนที่คอนเทนต์ของสไลด์จะถูกเขียน ขอยกตัวอย่างว่าเราจะใช้มันตรงไหน ตัวอย่างเช่น เมื่อผมมาที่แดชบอร์ดและคลิก generate ideas คุณจะเห็นว่าผมมีไอเดียสองสามอันที่ถูกสร้างให้ผม ตัวอย่างเช่น ลองเลือก "builder AI automation map" เมื่อผมอยากโปรโมตบทความนี้หรือโปรโมตไอเดียนี้เป็นสไลด์ ผมมีตัวเลือกนี้คือ research with Perplexity ถ้าคุณเลือก research with Perplexity แล้ว
เอเจนต์จะใช้ Perplexity เป็นเครื่องมือวิจัยเพื่อรวบรวมข้อมูลเกี่ยวกับไอเดียใหม่นี้ ถ้าคุณไม่เลือกอันนี้ เอเจนต์ก็จะทำการค้นหาเว็บแบบมาตรฐานเพื่อหาไอเดียสำหรับคอนเทนต์นี้ หรืออาจใช้สิ่งที่เอเจนต์ถูกฝึกมาแล้ว แต่ถ้าคุณอยากได้คอนเทนต์ที่อิงงานวิจัยจริงๆ คุณก็เปิด research with Perplexity แล้วเอเจนต์จะสร้างคอนเทนต์ที่อิงการวิจัยสำหรับบทความหรือไอเดียที่คุณอยากสร้าง นั่นจะเป็นคีย์แรกที่เราจะได้มา ในการหามัน คุณสามารถมาที่ console.perplexity.ai ผมจะใส่ลิงก์ไว้ในส่วนคำอธิบายด้วย เมื่อมาถึงตรงนี้ แค่สร้างบัญชีหรือล็อกอินถ้ามีอยู่แล้ว เมื่อคุณล็อกอินเข้าคอนโซลแล้ว คุณไม่ต้องทำอะไรมากตรงนี้ แค่มาที่ส่วนด้านซ้ายแล้วคลิก API keys จากนั้นใต้ API keys ให้มาที่มุมขวาบน คลิก generate API key คุณสามารถตั้งชื่อคีย์ได้ตามต้องการ สำหรับบทช่วยสอนนี้ ผมจะเรียกมันว่า Komputer Mechanic tutorial test แล้วคลิก create a key หลังจากนั้น คุณจะเห็นว่า API key ถูกสร้างให้คุณ คัดลอก API key นี้ เก็บไว้ในที่ปลอดภัย แล้วเราจะใช้ API key นี้
ขั้นตอนถัดไป เราจะได้ API key จาก ImgBB แต่ขออธิบายว่าทำไมเราถึงต้องใช้มัน สิ่งที่เราอยากทำกับการตั้งค่าของเราคือ เรามี Cadence และอยากส่งภาพจากตรงนี้ไปยัง Instagram เป็นตัวอย่าง ปัญหาคือ ถ้าเราอยากส่งสไลด์ของเราตรงๆ จาก Cadence ไปยัง Instagram เราต้องได้ Instagram API key ถ้าอยากทำสำหรับ TikTok คุณต้องสร้าง TikTok flow ของคุณเอง ถ้าอยากทำสำหรับ Facebook คุณต้องสร้างคีย์ของคุณเอง flow ของคุณเองและอื่นๆ และนี่ซับซ้อนมาก เราจะใช้เวลากับการสร้างการเชื่อมต่อเหล่านั้นมากกว่าที่จะโฟกัสกับแดชบอร์ดที่อยากสร้าง ดังนั้นสิ่งที่เราจะทำคือ มีบางแพลตฟอร์มอย่าง Buffer หรือ Metricool และสิ่งที่แพลตฟอร์มเหล่านี้ทำคือ พวกมันมีการเข้าถึงแพลตฟอร์มโซเชียลมีเดียทั้งหมด และพวกมันจัดการแบ็กเอนด์ทั้งหมดนั้นให้คุณแล้ว สิ่งที่เราต้องทำคือส่งสไลด์ของเราผ่านแพลตฟอร์มอย่าง Metricool หรือ Buffer แล้วพวกมันก็จะส่งสไลด์ไปยังแพลตฟอร์มโซเชียลมีเดียที่เราอยากไป
มีข้อแม้หนึ่งข้อ อย่างน้อยจากการทดสอบของผม Buffer ไม่อนุญาตให้เราส่งภาพตรงๆ ไปยังแพลตฟอร์มนั้น เราจึงต้องมีพื้นที่เก็บข้อมูลตัวกลาง (intermediate storage) ที่ภาพที่เราสร้างจะถูกส่งไป แล้วจากนั้นภาพก็จะไปที่ Buffer และสำหรับสิ่งนั้นเราจะต้องใช้แพลตฟอร์มที่เรียกว่า ImgBB ซึ่ง ImgBB นี้ฟรี สิ่งที่จะเกิดขึ้นคือ เมื่อไหร่ก็ตามที่คุณส่งภาพหรือส่ง story หรือ carousel จาก Cadence ของเรา มันจะถูกส่งไปที่ ImgBB ก่อน แล้วจาก ImgBB ภาพก็จะไปที่ Instagram ฟังดูซับซ้อนจากการตั้งค่าที่ผมกำลังอธิบาย แต่เราจะเดินสาย (wire) สิ่งนี้เข้าไป และเมื่อคุณคลิก post เช่น เมื่อผมมาที่แดชบอร์ดแล้วคลิก post แล้วเลือก เช่น ผมอยากโพสต์ไปที่ Instagram นี่คือสิ่งที่จะเกิดขึ้น การโอนย้ายทั้งหมดนี้จะเกิดขึ้นโดยอัตโนมัติ คุณไม่ต้องไปส่งจากที่นี่ไปที่นี่ ส่งจากที่นี่ไปที่นี่ เราจะเดินสายการเชื่อมต่อทั้งหมดนั้น ในการทำอย่างนั้น เราจะมาที่ ImgBB ซึ่งฟรีโดยสิ้นเชิง คุณสามารถสร้างบัญชีฟรีได้ เมื่อสร้างบัญชีแล้ว มาที่ส่วนด้านซ้ายแล้วคลิก API นี่จะพาคุณไปที่หน้า API เมื่ออยู่ตรงนี้ คลิก add API key สร้าง API key เก็บ API key แล้วเราก็ไปต่อยัง API key ถัดไปที่เราต้องการ
API key ถัดไปที่เราต้องการคือแพลตฟอร์มที่จะส่งสไลด์ของเราไปยังแพลตฟอร์มโซเชียลมีเดียที่เราอยากไป ตรงนี้มีหลายแพลตฟอร์ม ตัวอย่างเช่น เรามี Buffer ที่ทำสิ่งนี้ให้เราได้ และเราก็มี Metricool ที่ทำได้เช่นกัน ทั้งคู่ทำงานได้ ผมรู้ว่าหลายคนใช้ Metricool เพราะพวกเขามีแดชบอร์ดที่ทรงพลังมาก แต่จากการทดสอบของผม ผมพบว่าเพื่อให้คุณสามารถส่งสไลด์จาก Cadence OS ไปยัง Instagram หรือ TikTok ได้ ถ้าอยากใช้ Metricool เราต้องเลือกแผนที่แพงขึ้น มีเพียงตัวเลือกขั้นสูง (advanced) ที่คุณจ่าย 43 ดอลลาร์ต่อเดือนในกรณีของผมเท่านั้นที่จะมาพร้อม Metricool API อันนี้ค่อนข้างแพงสำหรับผม เพราะถ้าคุณอยากให้ Metricool ทำงานกับ Cadence จริงๆ คุณต้องเลือกแผน advance ที่จ่ายเป็นดอลลาร์ต่อเดือนเพื่อเข้าถึง API ของพวกเขา จำไว้ว่า API คืออินเทอร์เฟซที่ให้เราสื่อสารกับแพลตฟอร์มได้ และในกรณีของผม ผมมีบัญชีโซเชียลมีเดียแค่สองบัญชีที่ใช้ทดสอบ ผมไม่อยากจ่าย 43 ดอลลาร์ต่อเดือนเพื่อแพลตฟอร์มโซเชียลมีเดียแค่สองแพลตฟอร์ม
แต่ข้อดีของ Metricool คือ คุณสามารถเลือกแผนเริ่มต้น (starter plan) ที่จ่าย 16 ดอลลาร์ต่อเดือน แล้วคุณสามารถเพิ่มแพลตฟอร์มโซเชียลมีเดียได้มากเท่าที่ต้องการโดยไม่ต้องเพิ่มราคา ตัวอย่างเช่น ถ้าคุณมีสี่แพลตฟอร์มโซเชียลมีเดีย TikTok, Facebook, LinkedIn ฯลฯ คุณก็ยังจ่าย 16 ดอลลาร์ต่อเดือน ซึ่งผมว่าค่อนข้างเจ๋ง และผมจะโชว์ให้ดูตอนที่ผมเลือก Metricool เรามีอีกแพลตฟอร์มที่เรียกว่า Buffer และนั่นคือสิ่งที่ผมใช้ในสิ่งที่เรากำลังสร้างกับ Hermes ข้อดีของ Buffer คือ พวกเขาอนุญาตให้เราใช้ API assets ของพวกเขาได้แม้กับแผนมาตรฐาน และผมคิดว่าในกรณีของผม ผมเลือกแผน 5 ดอลลาร์ซึ่งเป็นแบบ essential ถึงแม้กับแผนนี้คุณก็มี API keys สามอันและใช้มันได้ แต่กับ Metricool คุณจะเข้าถึง API key ได้ก็ต่อเมื่อมีแผน 43 ดอลลาร์ ข้อแม้ของ Buffer คือ ทุกแพลตฟอร์มโซเชียลมีเดียที่คุณเพิ่ม คุณจ่ายเพิ่มอีก 5 ดอลลาร์ ถ้าคุณมี TikTok, Facebook, Instagram ก็เป็น 15 ดอลลาร์ ถ้าเพิ่ม LinkedIn ก็เป็น 20 ดอลลาร์ มันอาจแพงขึ้นเรื่อยๆ
ในกรณีนั้น ถ้าคุณไม่สนใจเรื่องการส่งตรงจาก Cadence ไปยังแพลตฟอร์มโซเชียลมีเดีย ผมก็เพิ่มตัวเลือกบนแดชบอร์ดที่คุณสามารถดาวน์โหลดสไลด์ทั้งหมดได้ ขอทำตัวอย่างให้ดู เมื่อผมคลิก slides คุณจะเห็นว่าสไลด์ถูกดาวน์โหลดมาที่นี่ เมื่อผมคลิกอันนี้ คุณจะเห็นว่าผมมีสไลด์ทั้งหมดดาวน์โหลดมาที่นี่ ขอไปที่ thumbnails แล้วคุณจะเห็นว่าผมมีภาพทั้งหมด และสิ่งที่ผมเพิ่มให้คุณอีกอย่างคือ คุณสามารถคลิก caption แล้วคุณจะเห็นแคปชันที่จำเป็นสำหรับการโพสต์ แล้วคุณก็โพสต์ด้วยตัวเองได้ และในกรณีนั้น Metricool น่าจะเป็นตัวเลือกที่ดีที่สุด เพราะพวกเขามี เช่น สำหรับแผน 16 ดอลลาร์ คุณจะเพิ่มโซเชียลมีเดียได้มากขึ้น คุณเห็นตรงนี้ได้ถึง 10 แบรนด์ ซึ่งเจ๋งมาก แต่ถ้าคุณอยากใช้ประโยชน์จากการส่งจาก Cadence ตรงๆ ไปยังแพลตฟอร์มโซเชียลมีเดียของคุณจริงๆ Buffer อาจเป็นตัวเลือกที่ถูกกว่า ผมแค่พยายามอธิบายว่าคุณจะตัดสินใจเลือกแพลตฟอร์มที่อยากใช้อย่างไร สำหรับตัวอย่างนี้เราจะใช้ Buffer เพราะอย่างที่บอก ผมมีบัญชีโซเชียลมีเดียแค่สองบัญชี และผมไม่อยากจ่าย 43 ดอลลาร์ตรงนี้เพื่อการทดสอบของผม คุณจึงสามารถสร้างบัญชีกับแพลตฟอร์มใดก็ได้ที่อยากใช้ แล้วล็อกอินเข้าบัญชีของคุณ เมื่อคุณล็อกอินเข้าบัญชี Buffer ของคุณแล้ว
แดชบอร์ดของ Buffer ให้มาที่ส่วนล่างตรงนี้ที่คุณมี my organization แล้วคลิก API จากนั้นคลิก new key แล้วคุณก็สามารถสร้าง API key ได้ ด้วย API keys สามอันนี้จาก Perplexity, ImgBB และ Buffer เราจะสามารถเดินสายมันเข้ากับ Cadence และ build ต่อไปได้
เมื่อเรารวบรวม API keys เหล่านี้แล้ว เราต้องเก็บ API keys ลงบนเซิร์ฟเวอร์ของเรา ในการทำอย่างนั้น เราจะกลับมาที่ PowerShell ผมจะล็อกอินกลับเข้าสู่เทอร์มินัล กลับมาแล้ววางคำสั่งนี้ คำสั่งนี้จะถามหา API keys ทั้งหมด และมันจะถูกเก็บอย่างลับๆ โดยหลักการแล้วคุณสามารถให้ API keys ตรงๆ กับ Kite ได้ แต่นี่ไม่ใช่วิธีที่แนะนำ เพราะถ้ามันถูกบุกรุก ใครบางคนจะเข้าถึง API keys ของคุณ นี่คือเหตุผลที่เมื่อไหร่ก็ตามที่ผมเพิ่ม API keys หรือความลับ (secrets) ผมชอบทำจากเทอร์มินัล มากกว่าที่จะให้ Kite หรือ Telegram โดยตรง กด enter แล้วมันจะถามหา Buffer access token ของคุณ ตรงนี้ผมจะวาง Buffer key ของผม วางลงไป แล้วกด enter จากนั้นมันจะถามหา ImgBB API key ผมจะคัดลอกอันนี้เช่นกัน วางลงไป กด enter แล้วอันสุดท้ายจะถามหา Perplexity ของคุณ อุ๊ย ผมรู้ตัวว่าผมทำผิด อันแรกที่ผมใส่ไม่ใช่ของ Buffer แต่เป็นของ Perplexity ผมจะยกเลิกอันนี้แล้วรันใหม่อีกครั้ง หวังว่ามันจะไม่เละ ผมจะบอก Kite ระหว่างทางว่าผมทำผิดพลาด ผมจะเรียกคำสั่งเดิมที่ใช้ กด enter แล้วคัดลอก Buffer key ที่ถูกต้อง จากนั้นคัดลอก ImgBB key จากนั้นคัดลอก Perplexity API key วางลงไป แล้วคุณจะเห็นว่าข้อมูลทั้งหมดถูกบันทึก และเราได้รับการแจ้งเตือนว่าทุกอย่างเสร็จสิ้น
สิ่งที่ผมจะทำตอนนี้คือ มาที่ Kite แล้วบอก Kite ว่า "เฮ้ เราเก็บ API keys สามอันนี้แล้ว มันควรทำ smoke test เพื่อให้แน่ใจว่าคีย์ทั้งหมดทำงาน" ผมจะคัดลอกอันนี้และให้ Kite แต่เพราะผมทำผิดและใส่มันสองครั้ง ผมจะเขียนบอกมันว่า "ผมทำผิดและเพิ่มมันสองครั้ง คุณเพิกเฉยรายการนี้ได้" จากนั้นบอกให้มันทำ smoke test ผมหวังว่าความผิดพลาดครั้งแรกที่ผมทำ มันจะแก้ไขให้และเห็นว่าคีย์ทั้งหมดทำงาน เฮ้ ถ้าคุณเห็นคุณค่าในคอนเทนต์ที่ผมสร้าง กดปุ่ม subscribe สมัครสมาชิกช่องของผม และกดปุ่ม like เพื่อให้อัลกอริทึมของ YouTube ผลักวิดีโอนี้ไปยังคนอื่นๆ ที่อยู่ข้างนอก มันไม่เสียเงินคุณเลย แต่มันสนับสนุนการเติบโตของช่องผมจริงๆ มีงานจำนวนมากที่ใส่ลงไปในการสร้างบทช่วยสอนเหล่านี้ การสร้างพรอมป์ต์ นี่คือเหตุผลที่ผมไม่สามารถอัปโหลดวิดีโอทุกสัปดาห์ได้ เพราะผมทดสอบทุกอย่างประมาณ 20 ครั้งก่อนที่จะปล่อยออกไป นี่คือเหตุผลที่ผมต้องอัปโหลดวิดีโอตามกำหนดการรายปักษ์ (bi-weekly) เพราะมีงานจำนวนมากที่ใส่ลงไปในการสร้างสิ่งเหล่านี้
Kite ก็ทำเสร็จเช่นกัน มันทำ smoke test มันยืนยันว่า Buffer ทำงาน ImgBB ทำงาน และ Perplexity ทำงาน เอาล่ะ ในขั้นตอนถัดไป เราจะใส่พรอมป์ต์ 20 พรอมป์ต์ 20 จะให้ทริกเกอร์ที่เราสามารถเผยแพร่ไอเดีย สร้างไอเดีย เรนเดอร์คอนเทนต์ เรนเดอร์ carousel และอื่นๆ แค่คัดลอกพรอมป์ต์นี้แล้วให้ Kite เช่นกัน เอาล่ะ Kite ก็ทำเสร็จแล้ว พรอมป์ต์สามอันถัดไปจะเป็นพรอมป์ต์การออกแบบ (design prompts) อันนี้จะเดินสายแท็บ ideas แท็บ promotes และแท็บ studio และหลังจากนั้นเราจะทดสอบทั้งระบบ ตอนนี้เรามีแท็บ ideas ที่ไม่มีอะไรอยู่ แท็บ studio ที่ไม่มีอะไรอยู่ แท็บ publish ที่ไม่มีอะไรอยู่ และแท็บ templates ด้วย สิ่งที่เราจะทำคือให้พรอมป์ต์เหล่านี้กับ Kite เพื่อเดินสายพวกมัน หลังจากนั้นเราสามารถทดสอบฟังก์ชันบางอย่าง เพื่อให้คุณเห็นสิ่งที่เรากำลังสร้าง ผมจะให้พรอมป์ต์ทั้งหมดนี้กับ Kite ตามลำดับ แล้วเราก็ไปดูการทดสอบกัน
เอาล่ะ Kite ประมวลผลพรอมป์ต์ทั้งหมดนั้นเสร็จแล้ว ผมรู้ว่าเราสร้างกันมาระยะหนึ่งแล้ว มาดูเดโม่จริงแบบ end-to-end เพื่อให้แน่ใจว่าทุกอย่างทำงาน ผมจะกลับมาที่แดชบอร์ด รีโหลดแดชบอร์ด แล้วไปที่แท็บ ideas ตอนนี้ผมเห็นว่า Kite ทำ smoke test โดยทดสอบเอเจนต์หนึ่งตัวก่อนที่จะไว้ใจ มันแค่ทำ smoke test เพื่อให้แน่ใจว่าไอเดียทำงาน มาคลิก generate ideas เพื่อดูว่ากระแส end-to-end ที่ Atlas ทำงานวิจัยและให้ไอเดียเราจะทำงานหรือไม่ ผมเห็นการแจ้งเตือนว่ามันกำลังทำวิจัย ขอรอจนกว่าผลลัพธ์จะออกมา และอันนี้ทำงานได้ดีมาก คุณจะเห็นว่าเรามีสี่ไอเดียที่ถูกสร้างโดย Atlas "Browser agents should verify, not just click" "Your agent needs a sandbox before it needs more tokens" สมมติว่าเราอยากโปรโมตหนึ่งในไอเดียเหล่านี้ ลองเลือก "stop giving agents your whole app" แล้วคลิก promote ตรงนี้สมมติว่าเราอยากสร้างสไลด์ carousel สิบสไลด์ และผมจะเลือก research with Perplexity ตรงนี้ Perplexity ถูกเปิดใช้งาน เพราะเราอยากทดสอบว่า API key ทำงาน และผมยังเพิ่มตัวเลือกนี้ steroid mode ซึ่งจะสร้างคำที่ทรงพลังกว่าสำหรับสไลด์ carousel ขอเปิดทั้งสองอันนี้ แล้วไปที่ write 10 slides อันนี้กำลังทำงาน Vera ถูกทริกเกอร์ Vera คือเอเจนต์ที่เขียนคอนเทนต์ มันกำลังอ่านไอเดียและทำวิจัยเพื่อให้แน่ใจว่าทุกอย่างทำงาน ทำวิจัยเพื่อให้แน่ใจว่ามันได้ข้อมูลทั้งหมดที่เราต้องการสำหรับการเขียนคอนเทนต์นั้น
เอาล่ะ Vera สร้างคอนเทนต์แล้ว คุณจะเห็นว่าเรามีสไลด์ทั้งสิบอันถูกสร้าง เรามีข้อความปก (cover text) ที่บอกว่า "your agent is not dumb, your prompt is bloated" จากนั้นมันก็เขียนคอนเทนต์ทั้งหมดที่จะอยู่บนทุกสไลด์ที่เรามี สมมติว่าเราอยากอนุมัติอันนี้และโปรโมตมันลงในเทมเพลต คลิก approve แล้วเลือกเทมเพลตในขั้นตอนถัดไป ตรงนี้เราจะสร้าง Instagram carousel เราจึงต้องมีอัตราส่วน 4:5 สมมติว่าสำหรับตัวอย่างนี้ ผมจะเลือกอันสีม่วงที่เรามีตรงนี้ ผมจะเลือกอันนั้นแล้วคลิก fit copy to this สิ่งที่จะเกิดขึ้นคือ Vera จะตรวจสอบว่าคอนเทนต์หรือข้อความที่มันสร้างเข้ากับจำนวนตัวอักษรในเทมเพลตนั้นหรือไม่ เพราะถ้าคำยาวเกินกว่าที่เทมเพลตรองรับ ดีไซน์ทั้งหมดจะดูน่าเกลียด สิ่งที่ Vera จะทำคือ Vera จะอ่านข้อความฮาร์ดโค้ดทั้งหมดในเทมเพลต แล้วพยายามปรับและใส่คอนเทนต์ที่มันสร้างให้เข้ากับเทมเพลตนั้น และ Vera ก็ปรับคอนเทนต์ที่มันสร้างเพื่อให้เข้ากับเทมเพลตที่เรามีแล้ว เพราะเทมเพลตที่เราเลือกมีคำในส่วนปกน้อยกว่า มันจึงเขียนปกใหม่จาก "your package is bloated" เป็น "agent fat" แล้วเขียนคอนเทนต์ทั้งหมดที่
จะอยู่บนสไลด์ ตอนนี้ผมจะคลิก render now เพื่อส่งสิ่งนี้ไปยังแท็บ studio เพื่อที่เราจะได้เห็นว่ามันจะดูเป็นอย่างไรบนเทมเพลตที่เราเลือก ตอนนี้คุณเห็นการแจ้งเตือน open in studio เราสามารถคลิก open in studio ตรงนี้ได้ และมันจะเปิดสไลด์ที่เราเพิ่งสร้างในสตูดิโอ มาคลิกที่อันนี้ แล้วคุณจะเห็นว่า อย่างที่ Vera เขียน "agent okay, package fat, package fat, bad agent, run starts with too much context, whole ripple noise, guesses" แล้วเมื่อคุณคลิกที่อันนี้ คุณจะเห็นข้อความทั้งหมดที่ถูกสร้าง สมมติว่าเราไม่อยากใช้ข้อความนี้สำหรับปก เราอยาก fine-tune คุณสามารถคลิก fine-tune the slide ตรงนี้ แล้วมันจะโหลดสไลด์ขึ้นมา และเมื่อเราคลิกที่อันนี้ ตัวอย่างเช่น ผมสามารถเขียน "agents not the problem, prompt fat" แล้วคุณยังสามารถเลื่อนสไลด์ขึ้นลงได้ตามที่ต้องการ ทั้งหมดนี้เป็นไปได้ในแท็บ fine-tune ผมจะปิดอันนี้ ทิ้งการเปลี่ยนแปลง แล้วสมมติว่าเราอยากส่งสิ่งนี้ไปยัง Instagram และนี่คือส่วนที่ทำให้ผมประหม่า ผมสร้างบัญชี Instagram ทดลองชื่อ content vibe เพื่อที่เมื่อเราส่งตรงจาก Cadence นี้ มันจะผ่าน Buffer แล้วมาที่บัญชี Instagram นี้ ขอเปิดแพ็กเกจอีกครั้ง คลิกที่มัน แล้วยังไงก็ตาม คุณสามารถเปลี่ยนเทมเพลตได้เสมอเมื่อไหร่ก็ตามที่คุณอยากเลือกเทมเพลตอื่น คุณเลือกเทมเพลตอะไรก็ได้ แล้ว Cadence จะเขียนคอนเทนต์ใหม่ให้เข้ากับเทมเพลตนั้น
ตอนนี้ขอมาที่นี่ คลิก post now แล้วตรงนี้ เพราะผมตั้งค่าแค่ Instagram มันจะโชว์แค่ Instagram ผมจะคลิก Instagram only แล้วมันจะเตือนผม และผมจะได้รับการแจ้งเตือน "เฮ้ แน่ใจนะว่าจะโพสต์อันนี้?" ผมจะตอบว่า "ใช่ โพสต์เลย" แล้วอันนี้จะถูกส่งไปที่ Buffer และหวังว่าถ้ากระแส end-to-end ทำงาน เราควรเห็นโพสต์มาถึง Instagram โดยตรง และเราได้รับการแจ้งเตือนว่าอันนี้ถูกส่งไปที่ Buffer แล้ว คลิก okay แล้วอันนี้จะถูกย้ายจากแท็บ studio ไปยังแท็บ publish เมื่อมันถูกส่งไปที่ Buffer แล้ว ต่อไปไปที่ Instagram แล้วดูว่าเราจะเห็นโพสต์นี้ไหม ผมจะมาที่ Instagram ของผม แล้วเฮ้ คุณเห็นไหม มันโพสต์ตรงไปที่ Instagram แล้ว คุณเห็นโพสต์นี้ที่เราสร้างใน Cadence เป๊ะ ซึ่งเป็นโพสต์แรกที่ผมทดสอบกับบัญชีนี้ และคุณจะเห็นว่าข้อความทั้งหมดออกมาเหมือนที่เราเรนเดอร์บนเว็บไซต์ Cadence และตรงนี้เราก็มีข้อความที่ถูกสร้างโดย AI สำหรับส่วนคำอธิบายด้วย อันนี้ทำงานได้ดีมาก
เมื่อผมกลับมาที่แท็บ studio และไปที่ published ผมควรจะเห็น โอ้ อันนี้ไม่ทำงาน มันแสดงว่าเรามีหนึ่งอัน แต่ผมไม่เห็นสไลด์ที่ถูกสร้าง ผมจึงบอก Kite ว่า "เฮ้ แท็บ publish ไม่แสดงคอนเทนต์ที่เผยแพร่เลย ผมเห็นจำนวนหนึ่งซึ่งบ่งบอกว่ารายการมีอยู่ แต่หน้านั้นว่างเปล่าโดยสิ้นเชิง" ให้ Kite แก้ไขอันนี้ให้เรา และหวังว่าหลังจากนั้นเราจะเห็นคอนเทนต์โผล่ขึ้นมาตรงนี้ อีกสองอย่างที่เราจะทำ ผมจะโชว์ว่าแท็บ configuration ทำงานอย่างไร บนแท็บ configuration คุณจะมีโอกาสแก้ไขชื่อบรานด์ของคุณ แก้ไขแฮนเดิล เขียนเล็กน้อยเกี่ยวกับคอนเทนต์ที่คุณกำลังสร้าง เพื่อที่เอเจนต์จะได้อ่านสิ่งนี้เสมอเพื่อหาไอเดียและสร้างคอนเทนต์ให้คุณ และคุณยังสามารถเลือกค่าเริ่มต้นการสร้าง (generation defaults) ที่ต้องการได้ และสำหรับสิ่งนั้น เราจะให้พรอมป์ต์นี้กับ Cadence เพื่อเดินสายแท็บ configuration แต่ผมจะรอให้มันทำแบ็กเอนด์ของแท็บ publish เสร็จก่อน หลังจากนั้นเราจะเข้าไปที่แท็บ configuration แล้วเดินสายมันเช่นกัน และระหว่างที่อยู่ตรงนี้ เราก็มีแท็บ calendar ที่เมื่อไหร่ก็ตามที่คุณกำหนดเวลาโพสต์ บางทีคุณไม่อยากเผยแพร่ทันที อยากกำหนดเวลาเป็นวันที่เฉพาะ เมื่อคุณเข้ามาที่ปฏิทิน คุณจะเห็นจำนวนโพสต์ที่คุณได้กำหนดเวลาไว้ ตัวอย่างเช่น คุณจะเห็นว่าโพสต์ที่เราโพสต์วันนี้ 24 กรกฎาคม แสดงอยู่ในแท็บ calendar แล้ว
เอาล่ะ Kite ทำเสร็จแล้ว รีโหลดแดชบอร์ด แล้วมาที่แท็บ publish สมบูรณ์แบบ ตอนนี้คุณจะเห็นว่าโพสต์ที่ถูกเผยแพร่มาอยู่ที่นี่แล้ว สองสิ่งที่เราจะทำต่อไปอย่างที่บอกคือแท็บ configuration ที่คุณสามารถแก้ไขการตั้งค่าต่างๆ ได้ แล้วเอเจนต์จะรับการอัปเดตใหม่ที่คุณมี และสำหรับสิ่งนั้น ผมจะส่งพรอมป์ต์นี้ให้ Kite เพื่อเดินสายแท็บ configuration เอาล่ะ นั่นหมายความว่าเมื่อเรามาที่แท็บ configuration ขอรีโหลดอันนี้ คุณสามารถเปลี่ยนชื่อบรานด์ แฮนเดิล จำนวนสไลด์ที่คุณอยากให้เป็นค่าเริ่มต้น ถ้าอยากให้ Perplexity เป็นค่าเริ่มต้น ตัวอย่างเช่น เมื่อผมปิดอันนี้แล้วบันทึกการตั้งค่า และผมกำลังสร้างไอเดีย มันก็จะไม่ใช้ Perplexity เป็นค่าเริ่มต้น และหลังจากนั้น เราก็เสร็จสิ้นส่วนหลักของการ build แล้ว ผมยังมีพรอมป์ต์อื่นๆ ที่ให้คุณเป็นตัวเลือกเสริมที่คุณสามารถเพิ่มในการตั้งค่าเพื่อให้ทรงพลังยิ่งขึ้น
สิ่งที่เราจะสร้างตอนนี้คือรีโมตคอนโทรล Telegram (telegram remote control) ถ้าจำได้ เรามีแท็บ studio ที่เราสร้าง ซึ่งเราอยากใช้สร้างไอเดียโดยไม่ต้องมาที่แดชบอร์ด แนวคิดคือ เมื่อไหร่ก็ตามที่คุณอยากสร้างไอเดีย คุณก็แค่มาที่แท็บ studio ใน Telegram สร้างไอเดีย โปรโมต และอื่นๆ สำหรับสิ่งนั้น เราจะให้พรอมป์ต์นี้กับ Kite เพื่อตั้งค่ารีโมตคอนโทรล Telegram เอาล่ะ Kite บอกว่ามันเสร็จแล้ว มันสร้างและตรวจสอบรีโมต Telegram เท่าที่มันทำได้ มันยังบอกว่ามันทำ smoke test มาที่แท็บ studio แล้วเราจะเห็นว่ามันทดสอบโดยทริกเกอร์สิ่งต่างๆ บนแท็บ studio แต่ผมต้องบอกว่ามันพูดถึงบางอย่างที่มันรันไม่ได้ ขอเลื่อนลงไปด้านล่างสุด มันบอกว่ามันมีอุปสรรค (blocker) มันไม่สามารถรีสตาร์ท Hermes gateway เองได้ มันบอกให้เราจากเชลล์แยกต่างหากบนเครื่อง รันคำสั่งนี้ แล้วบอกมันว่า gateway รีสตาร์ทแล้ว ขอคัดลอกอันนี้ มาที่ PowerShell ขอเคลียร์หน้าจอ วางคำสั่งนี้ เชื่อมต่อกับเซิร์ฟเวอร์อีกครั้ง แล้วรันคำสั่งที่มันให้เรา เอาล่ะ gateway นี้รีสตาร์ทแล้ว ผมจะรอสักครู่ให้ gateway บูตสมบูรณ์ หลังจากนั้นผมจะส่งข้อความไปหา Kite ว่า "restarted" จากนั้นผมจะส่งข้อความ "restarted" ไปให้ Kite แล้วหวังว่ามันจะไปต่อกับสิ่งที่มันทำอยู่ได้ เอาล่ะ มันบอกว่ามันเสร็จแล้ว ทุกอย่างถูกเดินสายแล้ว ไปที่แท็บ studio แล้วเขียนอะไรบางอย่าง เช่น สแลชคำสั่ง ขอตรวจก่อนว่าคำสั่งสแลชคืออะไร ผมจำไม่ได้ว่ามันเป็น ideas หรือ idea ใช่ มันคือ ideas ส่ง /ideas แล้วหวังว่ามันจะทริกเกอร์แท็บ ideas ในสตูดิโอตรงนี้ และมันก็ทำงาน เรามีไอเดียใหม่ "stop asking one agent to do the whole job" เมื่อผมมาที่แท็บ studio ผมก็เห็นแบบเดียวกัน
นี่คือการสะท้อน (mirror) ทุกอย่างที่เรามีบนแดชบอร์ด เหตุผลที่เราทำสิ่งนี้คือ ผมอยากให้คุณสร้างไอเดียและอื่นๆ ได้โดยไม่ต้องมาที่แดชบอร์ดตลอดเวลา สมมติว่าเราอยากโปรโมตไอเดียนี้ พิมพ์ /promote แล้วใส่จำนวนไอเดียนั้น 11 อุ๊ย ผมทำผิด ผมตั้งใจจะพิมพ์ 11 และมันก็ถูกต้องเป๊ะ มันบอกว่า "idea 1 not found" ขอทำใหม่ /promote แล้วส่ง 11 นั่นคือสิ่งที่ผมตั้งใจจะส่ง แล้วคุณจะเห็นว่าเราทริกเกอร์สิ่งนี้ทันที อันนี้ก็แสดงบนแดชบอร์ดด้วย เราเห็นว่า Vera ถูกโปรโมตแล้ว คุณเห็นว่าไอเดียถูกโปรโมต และ Vera กำลังเขียนไอเดียที่เรามี และเราเห็นสิ่งเดียวกันตรงนี้ เกิดการโปรโมตไอเดียขึ้นจริง มันทำงานบนแดชบอร์ด เราเห็นว่าไอเดียถูกสร้าง แต่บน Telegram เราได้รับข้อความ "promotes field list attributes no get" ผมจะบอก Kite ให้แก้ไขอันนี้ให้เรา ผมให้พรอมป์ต์นี้กับ Kite "ผมทดสอบคำสั่ง /ideas ใน Telegram ทำงานอย่างสมบูรณ์แบบ อย่างไรก็ตาม เมื่อผมโปรโมตไอเดียด้วยคำสั่ง /promote หมายเลขไอเดีย ไอเดียถูกโปรโมตอย่างถูกต้องบนแดชบอร์ด แต่ Telegram ส่งข้อความนี้มาให้เรา คุณเห็นปัญหาคืออะไรแล้วแก้ไขให้เราหน่อย"
เอาล่ะ Kite บอกว่ามันเสร็จแล้ว ลองอีกครั้ง ผมจะกลับมาที่แอปนี้แล้วทริกเกอร์ ideas สิ่งที่คุณทำได้เพื่อให้ง่ายขึ้นตอนโปรโมตไอเดียคือ คุณสามารถเพิ่มเทมเพลตที่อยากใช้ได้โดยตรง และสิ่งที่ผมแนะนำคือ ใช้ Telegram เพื่อระดมความคิดไอเดียแล้วโปรโมตมันเข้ามาที่แท็บ studio แล้วพอคุณอยู่ในแท็บ studio คุณก็ทำทุกอย่างเกี่ยวกับเทมเพลตว่าจะใช้เทมเพลตไหน แก้ไขอะไร และอื่นๆ แต่จะดีกว่าถ้าใช้ Telegram สำหรับการสร้างไอเดียและอะไรแบบนั้น หรือบางทีเมื่อไหร่ก็ตามที่อยากได้ไอเดีย คุณก็แค่มาที่นี่แล้วบอกเอเจนต์ว่า "เฮ้ ให้ไอเดียเกี่ยวกับระบบอัตโนมัติหน่อย" สมมติว่าตรงนี้เราอยากโปรโมตเป็นตัวอย่าง ขอไปที่ /promote แล้วใส่อุ๊ย 18 ขอโทษที พิมพ์ผิด /promote 18 แล้วใส่เทมเพลต ขอไปที่แท็บ templates เพื่อดูตัวอย่าง สมมติว่าผมอยากใช้เทมเพลต statement พิมพ์ statement แล้ว enter แล้วหวังว่ามันจะถูกสร้างให้เรา แต่แปลกที่มันบอกว่า template not found ขอดูว่าทำไมถึงเป็นแบบนี้ พิมพ์ templates เพื่อดูว่าผมจะได้รายการเทมเพลตไหม ดูเหมือนว่าชื่อของเทมเพลตต่างจากที่ผมเห็นตรงนี้ ขอหาตัวอย่าง สมมติว่าผมอยากใช้เทมเพลตที่เรียกว่า isometric กลับมาโปรโมตอีกครั้ง แล้วไปที่ isometric
สิ่งที่คุณสามารถบอก Kite ให้ทำเพื่อคุณทีหลังคือ ทำให้แน่ใจว่าชื่อที่คุณเห็นสำหรับเทมเพลตตรงกับชื่อบนแดชบอร์ด เพื่อให้ทำงานกับมันง่ายขึ้น ผมคิดว่าเหตุผลที่ชื่อต่างกันคือ ตัวอย่างเช่น tip deck มีสองคำ และเพื่อให้คุณใช้มันได้ คุณต้องพิมพ์ tip-deck แต่เป็นเพียงพรอมป์ต์ เราสามารถบอก Kite ให้ทำสิ่งนี้ แล้วมันจะแก้ไขให้คุณได้เช่นกัน แล้วโดยพื้นฐานแล้วคุณจะเห็นว่าสไลด์ถูกสร้าง เมื่อผมมาที่ตรงนี้ คุณจะเห็นว่าเทมเพลตที่เราเลือกอยู่ที่นี่ แล้วเราเห็นสไลด์ทั้งหมดที่ถูกสร้าง สิ่งที่ผมคิดว่าผมทำเพื่อคุณได้คือ ผมจะให้พรอมป์ต์เพื่อแก้ไขความไม่สอดคล้องนี้ ที่ชื่อเทมเพลตต่างจากเทมเพลตที่เราใช้ใน Telegram และผมจะให้พรอมป์ต์นี้ที่เราสามารถให้ Kite แก้ไขให้เราได้ เราจะบอก Kite ว่า "เฮ้ ชื่อเทมเพลตที่แสดงบนแดชบอร์ดไม่ตรงกับชื่อที่คำสั่ง /promote ยอมรับ ตัวอย่างเช่น บนแดชบอร์ดเมื่อผมพิมพ์ statement มันบอกว่า template not found" มันควรแก้ไขสิ่งนี้ ผมจะให้พรอมป์ต์ทั้งหมดนี้กับคุณ เพื่อที่ว่าถ้าคุณมีปัญหาเดียวกัน คุณก็คัดลอกวางพรอมป์ต์ แล้วเอเจนต์ของคุณควรจะแก้ไขให้คุณได้
ระหว่างที่ Kite กำลังสร้างและแก้ไขปัญหาชื่อเทมเพลตที่ไม่ตรงกับ Telegram มีอีกอย่างหนึ่งที่เราอยากทำ ผมอยากใช้เวลาให้เป็นประโยชน์ระหว่างรอ Kite เสร็จ ตอนนี้ถ้าจำได้ เมื่อไหร่ก็ตามที่เราอยากเข้าถึงแดชบอร์ด เราทำผ่านสิ่งที่เรียกว่า SSH tunneling โดยใส่คำสั่งนี้ ssh -N -L และชื่อและอื่นๆ กด enter แล้วใส่รหัสผ่านของบัญชีผู้ใช้ของเรา แล้ว SSH tunnel จึงจะถูกเปิดใช้งานที่ทำให้เราเข้าถึงแดชบอร์ดได้ แต่สิ่งที่คุณทำได้ซึ่งเป็นวิธีที่ดีกว่าในการเข้าถึงแดชบอร์ดคือการใช้ Tailscale สิ่งที่ Tailscale ทำคือ มันให้คุณเข้าถึงแดชบอร์ดโดยไม่ต้องผ่าน SSH tunneling และอื่นๆ แนวคิดคือ คุณดาวน์โหลดแอปพลิเคชัน Tailscale เชื่อมต่อบัญชีของคุณ แล้วตรงนั้นคุณจะได้ URL เฉพาะที่คุณสามารถเชื่อมต่อกับแดชบอร์ดได้ง่ายมาก โดยไม่ต้องใส่รหัสผ่านทุกครั้ง
ส่วนที่ดีที่สุดของ Tailscale ในการตั้งค่านี้คือ บนทุก PC ตัวอย่างเช่นในกรณีของผม ผมมีเดสก์ท็อปที่ทำงานด้วย มี MacBook มีโทรศัพท์มือถือ และอุปกรณ์อีกมากมายที่ผมทำงานด้วย บนอุปกรณ์ใดก็ตามที่ผมติดตั้ง Tailscale และเชื่อมต่อบัญชีของผมแล้ว ผมก็สามารถเข้าถึงแดชบอร์ดได้โดยไม่ต้องผ่านเทอร์มินัลทุกครั้ง โดยเฉพาะบนโทรศัพท์มือถือของคุณ ไม่ว่าคุณจะอยู่ที่ไหน คุณก็สามารถทำงานกับแดชบอร์ดบนโทรศัพท์มือถือได้ ตราบใดที่คุณติดตั้งแอป Tailscale และเชื่อมต่อบัญชีของคุณ ในการทำสิ่งนี้ เราจะดาวน์โหลดแอปพลิเคชันที่เรียกว่า Tailscale ซึ่งฟรีโดยสิ้นเชิง ตอนนี้ผมมีเซิร์ฟเวอร์เจ็ดตัวที่รันบน Tailscale และผมไม่จ่ายอะไรเลย เมื่อคุณมาที่นี่ แค่คลิก get started แล้วคุณสามารถสมัครสมาชิก สร้างบัญชี ทุกอย่างฟรี คุณไม่ต้องจ่ายอะไรเลย เมื่อการติดตั้งเสร็จสมบูรณ์ คุณก็มาที่นี่และดาวน์โหลด Tailscale บนหน้าแรกของพวกเขา คลิกปุ่มดาวน์โหลดตรงนี้ แล้วมันจะดาวน์โหลดแอปพลิเคชัน Tailscale ตรงนี้ เลือกระบบปฏิบัติการที่คุณใช้ ในกรณีของผม ผมใช้ Windows ผมจะคลิกที่ Windows และดาวน์โหลดแอปพลิเคชัน Windows สำหรับ Tailscale ถ้าคุณใช้อินเทอร์เฟซสำหรับ Mac OS มันดียิ่งกว่าอินเทอร์เฟซของ Windows เสียอีก
ผมจะเปิดตัวติดตั้ง ยอมรับข้อกำหนดและเงื่อนไข แล้วคลิก install แล้วแอปพลิเคชัน Tailscale ก็จะติดตั้งเสร็จ ดูเหมือนว่างานที่ผมให้ Kite ทำเพื่อให้แน่ใจว่าเทมเพลตตรงกันนั้นเป็นงานที่หนักพอสมควร มันทำงานมาเกือบ 15 นาทีแล้ว และยังไม่เสร็จ เมื่อการติดตั้ง Tailscale เสร็จสมบูรณ์ในฝั่งของผม ผมก็คลิก close ได้ แล้วเมื่อผมลงมาที่ตรงนี้
บน Windows คุณจะเห็นสัญลักษณ์เล็กๆ ตรงนี้ อันนี้สำหรับ Tailscale ที่มีจุดประมาณเจ็ดแปดจุด เมื่อคุณคลิกขวาที่มัน คุณจะต้องล็อกอินเข้าบัญชี Tailscale ของคุณ เมื่อคุณล็อกอินเข้าบัญชี Tailscale แล้ว คุณก็เสร็จสิ้นการติดตั้ง Tailscale โดยพื้นฐานแล้ว เมื่อคุณล็อกอินเข้าบัญชี Tailscale คุณจะเห็นอุปกรณ์ทั้งหมดที่เชื่อมต่อกับบัญชี Tailscale ของคุณอยู่ และด้วยอุปกรณ์ทั้งหมดเหล่านี้ คุณจะได้ URL เฉพาะที่คุณสามารถใช้เข้าถึงเซิร์ฟเวอร์ที่เรากำลังสร้างได้ ตอนนี้แอปพลิเคชัน Tailscale ติดตั้งแล้ว เราสร้างบัญชี Tailscale แล้ว หรือถ้าคุณมีบัญชีอยู่แล้วก็สมบูรณ์แบบ สิ่งที่เราต้องทำต่อคือ บอก Kite ให้ติดตั้ง Tailscale ให้เรา และผูกแดชบอร์ดหรือแดชบอร์ด Cadence ที่เราสร้างเข้ากับเซิร์ฟเวอร์ Tailscale ของเรา และด้วยสิ่งนั้น เราจะสามารถเข้าถึงแดชบอร์ดได้โดยตรงจาก URL บนเบราว์เซอร์ โดยไม่ต้องผ่านส่วน SSH tunneling
ขอรอให้ Kite ทำงานที่มันทำเสร็จก่อน ผมว่ามันเกือบเสร็จแล้ว ตอนนี้คุณจะเห็นว่ามันกำลังท่องเว็บเพื่อให้แน่ใจว่าการเปลี่ยนแปลงทั้งหมดที่มันทำทำงาน แล้วพอมันเสร็จ เราก็ให้คำสั่ง Kite ทำการเดินสาย Tailscale ให้เรา แล้วเราก็จะจบบทช่วยสอนนี้ และเฮ้ ผมกำลังทำงานกับตัวติดตั้งอัตโนมัติ (auto installer) ที่จะติดตั้งทั้งหมดนี้ให้คุณภายในไม่กี่นาที สมัครสมาชิกคอมมูนิตี้ของผม คุณจะได้รับคีย์เฉพาะที่คุณสามารถใช้ตัวติดตั้งได้ และผมจะสร้างบทช่วยสอนวิธีใช้ตัวติดตั้งให้คุณด้วยเมื่อมันพร้อม และในที่สุด Kite ก็ทำงานใหญ่เสร็จแล้ว ชื่อเทมเพลตที่เราเห็นบนแดชบอร์ดตรงนี้จะตรงกับชื่อที่เราเห็นบน Telegram กลับมาที่ประเด็น Tailscale Kite ทำงานเสร็จแล้ว เราสามารถให้พรอมป์ต์ Kite ทำงานการเชื่อมต่อ Tailscale ให้เราได้ และสำหรับสิ่งนั้น ผมจะให้พรอมป์ต์นี้กับ Kite ผมบอก Kite ว่า "เฮ้ ตั้งค่าการเข้าถึงแดชบอร์ดผ่าน Tailscale เพื่อที่ผมจะเข้าถึงมันอย่างปลอดภัยจากอุปกรณ์ของผมเองโดยไม่ต้องใช้ SSH tunnel" และผมก็ให้แนวทางว่าผมอยากให้มันเป็นแบบไหน แล้วพอมันเสร็จ มันจะให้ลิงก์ที่เราจะใช้คลิกเพื่อผูกเซิร์ฟเวอร์เฉพาะนี้เข้ากับบัญชี Tailscale ของเรา ขอให้แน่ใจว่าผมอยู่บนแท็บ Kite แล้วส่งพรอมป์ต์นี้ให้ Kite เพื่อทำสิ่งนี้ แล้วพอเราทำเสร็จ เราก็จะอยู่ที่จุดจบของบทช่วยสอน ผมเหนื่อยแล้ว ผมอัดวิดีโอมานานกว่า 10 ชั่วโมง ผมเริ่มเหนื่อยแล้ว เอาล่ะ Kite เสร็จแล้ว มันให้ลิงก์ล็อกอินนี้ที่เราจะใช้ยืนยันตัวตนบัญชีของเรากับเซิร์ฟเวอร์เฉพาะที่เราสร้าง ผมจะเปิดแท็บใหม่แล้วใส่ URL ที่ Kite ให้มา หลังจากนั้นสิ่งที่คุณต้องทำคือเชื่อมต่อและล็อกอินเข้าบัญชี Tailscale ของคุณ อันนี้จะพาคุณไปที่หน้าที่ Tailscale ถามว่า "เฮ้ ผมอยากเชื่อมต่ออุปกรณ์ cadence dashboard กับคอมพิวเตอร์ของคุณ" ในกรณีของผม komputer-mechanic.com tailnet ผมจะคลิก connect แล้วการล็อกอินก็เข้าถึงได้ อุปกรณ์ของเราถูกผูกกับบัญชี Tailscale ของเราแล้ว
ผมจะมาที่นี่แล้วบอก Kite ว่า "done" เพราะมันบอกว่าเมื่อผมยืนยันตัวตนเสร็จ ผมควรตอบว่า "เราทำเสร็จแล้ว" Kite ก็ทำเสร็จแล้วเช่นกัน มันยังบอกว่ามันทดสอบ IP สาธารณะและทั้งหมดล้มเหลวในการเชื่อมต่อ ซึ่งหมายความว่าแดชบอร์ดสามารถเข้าถึงได้ผ่าน IP ของ Tailscale เท่านั้น ขอให้แน่ใจว่าอันนี้ทำงาน รีโหลดแดชบอร์ด ตรงนี้เรามี SSH tunneling ที่ทำงานอยู่ซึ่งเป็นไปตามคาด ผมจะมาที่ PowerShell และฆ่าการเชื่อมต่อ SSH แล้วกลับมาที่แดชบอร์ด และพยายามเข้าถึงแดชบอร์ดผ่าน SSH tunnel แล้วคุณจะเห็นว่าผมได้รับข้อความ "site cannot be reached" เมื่อไหร่ก็ตามที่ผมอยากเชื่อมต่อกับแดชบอร์ด ผมก็แค่ใช้ URL ที่ Kite ให้มา ขอคัดลอก URL ของแดชบอร์ด วาง URL นี้ แล้วไชโย คุณจะเห็นว่าเราสามารถเข้าถึงแดชบอร์ดได้โดยไม่ต้องผ่านความยุ่งยากของ SSH tunnel
Tailscale ทำงานโดยตั้งค่า VPN ในเครื่อง (local VPN) บน PC ที่ติดตั้งมัน ดังนั้นถ้าคุณมีบริการ VPN อื่นรันอยู่ คุณต้องหยุด VPN นั้นก่อนที่ Tailscale จะทำงานได้ เพราะถ้าคุณมีสองบริการรันขนานกัน Tailscale จะไม่สามารถทำงานได้ ดังนั้นให้แน่ใจว่าคุณหยุดบริการอื่นที่รันอยู่เสมอ เพื่อให้ Tailscale สามารถปรับใช้เซิร์ฟเวอร์ให้คุณได้ นี่จึงนำเรามาถึงจุดจบของบทช่วยสอน ขอสรุปสั้นๆ ว่าเราสร้างอะไรบ้าง เรามีแท็บแดชบอร์ดที่เราเห็นทุกอย่างที่เอเจนต์กำลังทำ บันทึกกิจกรรมทั้งหมดดึงมาจากฐานข้อมูลเอเจนต์ เมื่อคุณมาที่แท็บ ideas เราสามารถสร้างไอเดียใหม่ได้เสมอโดยเลือกไอเดียของคุณ แล้วเอเจนต์อย่าง Atlas จะรับไอเดียนั้นและสร้างเป็นคอนเทนต์ให้คุณ และเมื่อไหร่ก็ตามที่คุณไม่มีไอเดีย คุณก็แค่มาคลิก generate ideas แล้วไอเดียก็จะถูกสร้างให้คุณ เมื่อไหร่ก็ตามที่เราอยากโปรโมตไอเดีย เราก็แค่คลิก promote แล้วมันจะถูกโปรโมตให้เราเข้าสู่แท็บ studio และเมื่อไหร่ก็ตามที่เราอยากส่งโพสต์ใดๆ ไปยัง Instagram, TikTok หรืออะไรก็ตามที่อยากทำ เมื่อเราคลิก post now อันนี้จะถูกส่งตรงไปยังแพลตฟอร์มโซเชียลมีเดียที่เราอยากใช้ และเมื่อเสร็จแล้ว อันนี้จะนำโพสต์ไปยังแท็บ publish เพื่อที่คุณจะได้อ้างอิงมันได้เสมอเมื่อไหร่ก็ตามที่อยากทำอะไรกับมัน
เรายังมีแท็บ templates ที่เต็มไปด้วยเทมเพลตมากมายในการตั้งค่าปัจจุบัน ที่คุณสามารถเลือกใช้และพัฒนาสไลด์ carousel ใดก็ตามที่อยากพัฒนา จากนั้นเรามีแท็บ dedicated agents ที่เราเห็นเอเจนต์ทั้งหมดที่มี heat map ของพวกมัน คุณมีปฏิทิน (calendar) ที่คุณเห็นโพสต์ที่กำหนดเวลาไว้ โพสต์ที่เผยแพร่แล้ว และโพสต์ที่จะมาถึง แท็บ configuration ที่คุณกำหนดค่าชื่อบรานด์ สิ่งที่คุณอยากให้เอเจนต์ทำงานเมื่อพวกมันสร้าง และแท็บ docs ที่คุณสามารถทำความเข้าใจแดชบอร์ดได้
ผมยังมีพรอมป์ต์อีกมากมายที่จะให้คุณใช้ ซึ่งผมแนะนำอย่างยิ่งให้ใช้ ตัวอย่างเช่น สำหรับบันทึกกิจกรรมของเอเจนต์ เอเจนต์จะบันทึกลงในฐานข้อมูลเมื่อไหร่ก็ตามที่มันทำงาน แต่ถ้าคุณรันสิ่งนี้เป็นเวลาทั้งปี ฐานข้อมูลของคุณจะรกมาก คุณจึงสามารถตั้งค่าการทำความสะอาดรายสัปดาห์ (weekly cleanup) ที่เอเจนต์จะมองหากิจกรรมที่เก่ากว่า 7 วันแล้วล้างทิ้งทั้งหมด และผมยังรวมพรอมป์ต์เพิ่มเติมบางอันที่คุณสามารถใช้เพื่อขยายการตั้งค่าที่คุณมี ผมรู้ว่ามันเป็นบทช่วยสอนที่ยาว แต่ผมอยากผ่านทุกอย่างที่เรากำลังสร้าง กระบวนการคิดที่ผมมีเวลาสร้างอะไรแบบนี้ และคุณยังเห็นผมแก้ไขปัญหาทั้งหมดที่เราเจอ เพื่อที่ว่าเมื่อคุณเจอสถานการณ์คล้ายกัน คุณก็ทำแบบเดียวกันได้ ถ้าคุณพบว่าวิดีโอนี้มีประโยชน์ กรุณากดปุ่ม like สมัครสมาชิกช่องของผมเพื่อดูเนื้อหาแบบนี้เพิ่มเติม
หมายเหตุการแปล
ความโปร่งใสเกี่ยวกับความไม่แน่นอนในต้นฉบับ
- ส่วนที่ฟังไม่ชัด (`[ฟังไม่ชัด]`):** ไม่มี — ไม่พบเครื่องหมาย `[ฟังไม่ชัด]` ในคำแปลแต่อย่างใด
อภิธานศัพท์เทคนิค
คำศัพท์และชื่อผลิตภัณฑ์ที่คงรูปภาษาอังกฤษ
| ศัพท์ | คำแปล / คำอธิบาย |
|---|---|
| --- | --- |
| Hermes / Hermes Agents | เฟรมเวิร์กเอเจนต์ AI แบบ multi-agent ที่คุยกับเอเจนต์ผ่านแอปส่งข้อความ (Telegram, Discord, Slack ฯลฯ) และใช้โมเดล AI ได้หลากหลาย |
| orchestrator | เอเจนต์ผู้ประสานงานหลัก (top-level coordinator) ที่คอยรับคำสั่งจากผู้ใช้แล้วจัดส่งงานให้เอเจนต์ลูก |
| Atlas (Scout) | เอเจนต์นักวิจัยและสร้างไอเดียคอนเทนต์ (content scout) ของ Cadence |
| Vera (Scribe) | เอเจนต์นักเขียนคอนเทนต์ — เขียนสไลด์ แคปชัน และแฮชแท็ก |
| Kite (Dev) | เอเจนต์นักออกแบบและนักพัฒนา — เรนเดอร์สไลด์ และสร้างแดชบอร์ด |
| Orion (Rich) | เอเจนต์นักเผยแพร่ (publisher) — ส่งโพสต์ไปยังแพลตฟอร์มโซเชียลมีเดีย |
| Cadence | ชื่อระบบ/สตูดิโอระบบอัตโนมัติคอนเทนต์ที่สร้างในวิดีโอนี้ |
| soul.md | เอกสารประจำตัวของเอเจนต์ ระบุว่าเอเจนต์คือใคร ทำงานอะไร — โหลดทุกครั้งที่เริ่มเซสชันใหม่ |
| memory.md | ไฟล์หน่วยความจำระยะยาวของเอเจนต์ (แนะนำให้แยกไฟล์ต่อเอเจนต์เพื่อไม่ให้ปนกัน) |
| persistent profile | โปรไฟล์เอเจนต์แบบถาวร ต่างจากเอเจนต์ชั่วคราวที่ถูกเรียกใช้แล้วหายไป |
| role boundaries | ขอบเขตบทบาท — กฎให้เอเจนต์แต่ละตัวทำงานเฉพาะในหน้าที่ของตัวเองเท่านั้น |
| Telegram | แอปส่งข้อความที่ใช้เป็นอินเทอร์เฟซคุยกับเอเจนต์ในบทช่วยสอนนี้ |
| BotFather | บอทอย่างเป็นทางการของ Telegram ใช้สร้างบอทใหม่และรับ bot token |
| User Info Bot | บอทที่ใช้ค้นหา Telegram user ID ของผู้ใช้ |
| bot token | คีย์เฉพาะของบอท Telegram หนึ่งบอทต่อหนึ่ง token |
| topic / thread ID | ช่องย่อย (topics) ใน Telegram group และ ID ประจำช่อง ใช้ผูกช่องกับเอเจนต์แต่ละตัว |
| gateway | บริการของ Hermes ที่เชื่อมต่อเอเจนต์กับแพลตฟอร์มส่งข้อความ |
| VPS | เซิร์ฟเวอร์เสมือนส่วนตัว (Virtual Private Server) — เช่าแบบ 24/7 |
| Racknerd | ผู้ให้บริการ VPS ราคาประหยัด (~$35/ปี) ที่ผู้สร้างแนะนำ |
| Contabo | ผู้ให้บริการ VPS อีกราย (~$8/เดือน, CPU 4 คอร์, RAM 8 GB, SSD 100 GB) |
| Ubuntu 22.04 | ระบบปฏิบัติการ Linux ที่ใช้บน VPS ในการตั้งค่านี้ |
| SSH | Secure Shell — โปรโตคอลเชื่อมต่อกับเซิร์ฟเวอร์ระยะไกลอย่างปลอดภัย |
| SSH tunneling | วิธีเข้าถึงแดชบอร์ดผ่านช่องทาง SSH ที่ปลอดภัย ไม่เปิดสู่สาธารณะ |
| root | ผู้ใช้ที่มีสิทธิ์สูงสุดบน Linux — แนะนำไม่ให้ติดตั้ง Hermes บน root |
| useradd / usermod -aG sudo | คำสั่ง Linux สร้าง user ใหม่และให้สิทธิ์ sudo |
| Tailscale | บริการ VPN ส่วนตัว (mesh VPN) ที่ให้เข้าถึงแดชบอร์ดจากอุปกรณ์ใดก็ได้อย่างปลอดภัยโดยไม่ต้อง SSH |
| SQLite | ฐานข้อมูลขนาดเล็กที่ใช้สร้างระบบบันทึกการทำงานของเอเจนต์ (ตาราง cadence runs) |
| agent logging database | ฐานข้อมูลบันทึกกิจกรรมของเอเจนต์ — ชื่อเอเจนต์ งาน โมเดล AI เวลาที่ทำงาน |
| Perplexity | โมเดล AI ด้านการวิจัย ใช้เป็นเครื่องมือวิจัยเชิงลึก (research with Perplexity) |
| ImgBB | แพลตฟอร์มโฮสต์ภาพฟรี ใช้เป็นพื้นที่เก็บภาพตัวกลางก่อนส่งไปยัง Buffer |
| Buffer | แพลตฟอร์มจัดการโซเชียลมีเดียที่ใช้ส่งสไลด์ไปยัง Instagram/TikTok ฯลฯ (มี API ในแผนราคาถูก) |
| Metricool | แพลตฟอร์มจัดการโซเชียลมีเดียทางเลือก — ต้องใช้แผน advanced (~$43/เดือน) ถึงจะได้ API |
| API key | คีย์สำหรับเข้าถึงบริการ/API ต่าง ๆ (Perplexity, ImgBB, Buffer) |
| OpenRouter | บริการรวมโมเดล AI หลายตัว ใช้ API key เดียวเข้าถึงโมเดลทั้งหมด (จ่ายตามการใช้งาน) |
| Codex (OpenAI Codex) | โมเดล AI จาก OpenAI ที่ใช้กับ Hermes ได้เกือบฟรีหากมีแผน ChatGPT Plus/Pro |
| Grok (xAI) | โมเดล AI ที่ใช้กับ Hermes ได้ฟรีหากมีบัญชี X แบบพรีเมียม |
| Nous Research | บริษัทผู้พัฒนา Hermes — ต้องผูกบัญชีระหว่างติดตั้ง (มีแผนฟรี) |
| Firecrawl | เครื่องมือค้นเว็บและดึงข้อมูลจากเว็บไซต์ที่ใช้กับ Hermes ได้ |
| TUI (terminal user interface) | อินเทอร์เฟซแชทในเทอร์มินัลของ Hermes (พิมพ์คำสั่ง hermes) |
| headless browser | เบราว์เซอร์ไร้หน้าต่าง (เช่น Chromium) ใช้เรนเดอร์ไฟล์ HTML เป็นภาพ PNG/JPEG |
| HTML template | เทมเพลตสไลด์ที่เขียนด้วย HTML — แก้ไขได้ฟรีไม่จำกัด ต่างจากโมเดลสร้างภาพ |
| carousel | โพสต์ Instagram หลายภาพแบบเลื่อนดู |
| reel | วิดีโอสั้นแนวตั้ง (อัตราส่วน 4:5 หรือ 9:16) |
| hook / CTA | สไลด์แรกที่ดึงดูดความสนใจ / สไลด์สุดท้ายที่กระตุ้นให้ทำตาม (call to action) |
| fine-tune | การปรับแต่งสไลด์ (แก้ข้อความ ขนาด ตำแหน่ง) ในสตูดิโอ |
| auto fit | ฟีเจอร์ปรับข้อความจาก Vera ให้เข้ากับเทมเพลตที่เลือก |
| steroid mode | โหมดพิเศษให้เอเจนต์เขียนสไลด์ที่กระแทกใจ (punchy) มากขึ้น |
| smoke test | การทดสอบเบื้องต้นเพื่อยืนยันว่าระบบ/คีย์/เอเจนต์ทำงาน |
| heat map | แผนที่ความร้อนแสดงช่วงเวลาที่เอเจนต์แต่ละตัวทำงาน |
| cron | ระบบตั้งเวลารันงานอัตโนมัติใน Linux (เช่น auto backup รายวัน) |
| auto installer | ตัวติดตั้งอัตโนมัติที่เซ็ตอัพทั้งระบบภายในไม่กี่นาที |
ซับไตเติ้ลภาษาไทย
ดาวน์โหลดหรือดูซับทั้งหมด
1 00:00:00,000 --> 00:00:03,349 นี่คือเครื่องจักรผลิตคอนเทนต์โซเชียลมีเดียแบบครบวงจร 2 00:00:03,349 --> 00:00:06,440 มีเอเจนต์ AI สี่ตัวที่จะช่วยค้นคว้า เขียน ออกแบบ 3 00:00:06,440 --> 00:00:10,433 และเผยแพร่โพสต์ให้คุณ มาดูมันทำงานจริงกันเลย ไอเดียคอนเทนต์นี้ 4 00:00:10,433 --> 00:00:13,718 "ห้าสัญญาณว่าสแต็กเอเจนต์ของคุณซับซ้อนเกินไป" (five
เปิดดูซับไตเติ้ลทั้งหมด (1766 segments)
1 00:00:00,000 --> 00:00:03,349 นี่คือเครื่องจักรผลิตคอนเทนต์โซเชียลมีเดียแบบครบวงจร 2 00:00:03,349 --> 00:00:06,440 มีเอเจนต์ AI สี่ตัวที่จะช่วยค้นคว้า เขียน ออกแบบ 3 00:00:06,440 --> 00:00:10,433 และเผยแพร่โพสต์ให้คุณ มาดูมันทำงานจริงกันเลย ไอเดียคอนเทนต์นี้ 4 00:00:10,433 --> 00:00:13,718 "ห้าสัญญาณว่าสแต็กเอเจนต์ของคุณซับซ้อนเกินไป" (five 5 00:00:13,718 --> 00:00:17,260 signs your agent stack is overengineered) กำลังกลายเป็น 6 00:00:17,260 --> 00:00:21,124 Instagram carousel (โพสต์หลายภาพแบบเลื่อนดู) ที่เสร็จสมบูรณ์ 7 00:00:21,124 --> 00:00:24,537 Atlas หามุมมองให้ Vera กำลังเขียนสไลด์ และภายในประมาณ 8 00:00:24,537 --> 00:00:28,788 2 นาที Kite ก็เรนเดอร์สไลด์ทั้งหมดเสร็จด้วยการคลิกเพียงไม่กี่ครั้ง 9 00:00:28,788 --> 00:00:33,489 และที่สำคัญที่สุดคือ จะไม่มีอะไรถูกโพสต์ออนไลน์โดยไม่ผ่านการอนุมัติจากคุณ 10 00:00:33,489 --> 00:00:37,289 คุณตรวจคำพูดก่อนแล้วค่อยอนุมัติโพสต์สุดท้าย เอเจนต์ทำงานให้ 11 00:00:37,289 --> 00:00:41,926 ส่วนคุณยังคงควบคุมทุกอย่าง วันนี้เราจะสร้างทุกอย่างขึ้นมาจากศูนย์ทั้งหมด 12 00:00:41,926 --> 00:00:46,370 พรอมป์ต์และเทมเพลตทุกอันมีลิงก์ไว้ด้านล่าง ถ้าใครไม่อยากใช้เวลากับการ 13 00:00:46,370 --> 00:00:49,590 build กว่า 4 ชั่วโมง ก็มีตัวติดตั้งอัตโนมัติ (auto 14 00:00:49,590 --> 00:00:52,810 installer) ที่เซ็ตอัพทุกอย่างให้คุณภายในไม่กี่นาที 15 00:00:52,810 --> 00:00:56,803 สวัสดีครับ ผมลาร์รี ยินดีต้อนรับสู่ช่องของเรา วันนี้เราจะสร้าง 16 00:00:56,803 --> 00:01:00,023 Cadence กัน ซึ่งเป็นระบบอัตโนมัติจัดการงานคอนเทนต์ 17 00:01:00,023 --> 00:01:05,240 (content operations autopilot) ที่ขับเคลื่อนโดยผู้เชี่ยวชาญสี่คนที่คุณเพิ่งเห็นไป 18 00:01:05,240 --> 00:01:08,524 ภายในมีเทมเพลตที่ออกแบบอย่างสวยงามกว่า 50 แบบ Atlas 19 00:01:08,524 --> 00:01:11,809 จะค้นคว้าและเสนอไอเดียให้คุณ Vera เขียนสไลด์ แคปชัน 20 00:01:11,809 --> 00:01:15,673 และแฮชแท็กให้ทุกอย่าง จากนั้น Kite จะทำดีไซน์ให้เสร็จสมบูรณ์ 21 00:01:15,673 --> 00:01:20,181 พอเสร็จแล้ว Orion จะส่งโพสต์เหล่านั้นไปยังแพลตฟอร์มโซเชียลมีเดียของคุณ 22 00:01:20,181 --> 00:01:23,208 และเหนือเอเจนต์ทั้งหมดนั้นยังมีเอเจนต์ผู้ควบคุม 23 00:01:23,208 --> 00:01:26,235 (orchestrator agent) ที่คอยรับคำสั่งจากคุณในแชท 24 00:01:26,235 --> 00:01:30,357 Telegram แล้วจัดส่งงานลงไปตามสายงาน ถ้าคุณโพสต์คอนเทนต์เป็นประจำ 25 00:01:30,357 --> 00:01:35,380 คุณจะรู้ดีว่ามันยุ่งยากแค่ไหน คุณจ้องหน้ากระดานว่างเปล่าเพื่อหามุมมองสักไอเดีย 26 00:01:35,380 --> 00:01:39,309 พอได้ไอเดียมาแล้วก็ต้องไปค้นคว้า ต่อด้วยการเขียนสไลด์ทีละหน้า 27 00:01:39,309 --> 00:01:42,787 ทำสไลด์ให้ดูดีในเทมเพลต ตามด้วยแคปชัน แฮชแท็ก และอื่นๆ 28 00:01:42,787 --> 00:01:47,810 อีกมากมาย แต่ตอนนี้ Cadence จะจัดการและรวบรวมทั้งสายงานให้เสร็จภายในไม่กี่นาที 29 00:01:47,810 --> 00:01:51,417 คุณแค่บอกเอเจนต์ครั้งเดียวว่าบร্যান্ডของคุณเกี่ยวกับอะไร 30 00:01:51,417 --> 00:01:54,572 ตั้งแต่นั้นมา แค่คลิกเดียวก็จะได้ไอเดียโพสต์ใหม่ๆ 31 00:01:54,572 --> 00:01:59,725 หรือถ้าคุณพิมพ์ความคิดคร่าวๆ ของตัวเองลงไป พวกมันก็จะสร้างเรื่องราวทั้งหมดให้คุณ 32 00:01:59,725 --> 00:02:04,748 ตั้งแต่ไอเดียจนถึงโพสต์ที่เผยแพร่เสร็จ ทุกอย่างจัดการได้ด้วยการคลิกไม่กี่ครั้ง 33 00:02:04,748 --> 00:02:07,904 แล้วโพสต์ของคุณก็จะขึ้นออนไลน์ และนี่คือจุดที่งาน 34 00:02:07,904 --> 00:02:11,059 build ชิ้นนี้เหนือกว่าเครื่องมือสร้างสไลด์ด้วย AI 35 00:02:11,059 --> 00:02:14,151 ทั่วไป โดยปกติคุณต้องสร้างสไลด์ด้วยโมเดลสร้างภาพ 36 00:02:14,151 --> 00:02:20,591 และจ่ายเงินทุกครั้งต่อหนึ่งสไลด์ แถมแม้แต่การแก้คำเพียงคำเดียวยังต้องจ่ายเงินเพื่อสร้างภาพใหม่ทั้งใบ 37 00:02:20,591 --> 00:02:23,682 แต่ Cadence ไม่แตะโมเดลสร้างภาพเลยแม้แต่นิดเดียว 38 00:02:23,682 --> 00:02:27,740 สไลด์ทุกใบสร้างจากเทมเพลต HTML ที่ออกแบบอย่างสวยงามด้วยโค้ดจริง 39 00:02:27,740 --> 00:02:30,831 ไม่ใช่พิกเซลจาก AI ดังนั้นการแก้ไขทุกครั้งจึงฟรี 40 00:02:30,831 --> 00:02:33,987 คุณสามารถลากองค์ประกอบใดก็ได้ เปลี่ยนข้อความ ขนาด 41 00:02:33,987 --> 00:02:40,620 ตำแหน่ง แล้วมันจะเรนเดอร์ใหม่ภายในไม่กี่วินาที หมายความว่าคุณแก้ไขได้ไม่จำกัดโดยไม่มีค่าใช้จ่ายต่อสไลด์ 42 00:02:40,620 --> 00:02:46,545 เงินของคุณจึงไปอยู่ที่เนื้อหา ไม่ใช่ที่รูปภาพ แดชบอร์ดแสดงภาพรวมการทำงานทั้งหมดในพริบตาเดียว 43 00:02:46,545 --> 00:02:49,637 ตัวเลขทุกตัวดึงมาจากฐานข้อมูลของเอเจนต์ของคุณเอง 44 00:02:49,637 --> 00:02:52,857 ซึ่งเอเจนต์ทุกตัวจะบันทึกชื่อตัวเอง งานที่ทำ โมเดล 45 00:02:52,857 --> 00:02:57,365 AI ที่ใช้ และเวลาที่ทำงานนั้นอย่างละเอียด ดังนั้นจึงไม่มีเมตริกปลอมใดๆ 46 00:02:57,365 --> 00:03:03,419 เลย ส่วนที่ผมชอบที่สุดคือสตูดิโอ (studio) คุณสามารถแก้ไขข้อความทุกชิ้นหรือลากองค์ประกอบเดี่ยวๆ 47 00:03:03,419 --> 00:03:07,219 ย้ายมัน ปรับขนาด เขียนใหม่ได้หมด แถมยังมีตัวอย่างบนโทรศัพท์ 48 00:03:07,219 --> 00:03:10,503 (phone preview) คลังเทมเพลต และฟีเจอร์แปลง carousel 49 00:03:10,503 --> 00:03:13,594 เป็นวิดีโอด้วย เราจะสร้างคลังโพสต์ที่เผยแพร่แล้ว 50 00:03:13,594 --> 00:03:17,330 (published archive) ไว้ดูโพสต์ทั้งหมดที่เคยสร้างและเผยแพร่ 51 00:03:17,330 --> 00:03:21,516 รวมถึงแท็บปฏิทิน (calendar) ที่แสดงคอนเทนต์ที่กำหนดเวลาไว้ทั้งหมด 52 00:03:21,516 --> 00:03:24,607 และยังมีหน้า configurations สำหรับเก็บชื่อบรานด์ 53 00:03:24,607 --> 00:03:27,892 แฮนเดิล น้ำเสียง ซึ่งจะไหลไปสู่ทุกคำที่เอเจนต์เขียน 54 00:03:27,892 --> 00:03:31,370 ต่อไปขอโชว์เดโม่สดและพาเดินชมสิ่งที่เราจะสร้างในวันนี้ 55 00:03:31,370 --> 00:03:34,654 ในแดชบอร์ดคุณจะเห็นจำนวนครั้งทั้งหมดที่เอเจนต์ทำงาน 56 00:03:34,654 --> 00:03:37,939 (total runs) จำนวนไอเดียที่สร้างขึ้นในการตั้งค่านี้ 57 00:03:37,939 --> 00:03:43,671 จำนวนโพสต์ที่เผยแพร่แล้ว ซึ่งในกรณีของผมมีแค่หนึ่งอันเพราะผมใช้มันทดสอบสำหรับบทช่วยสอนนี้ 58 00:03:43,671 --> 00:03:47,406 และเปอร์เซ็นต์ของงานที่สำเร็จ ตรงนี้เรามีเอเจนต์แอคทิวิตี้ 59 00:03:47,406 --> 00:03:50,884 (agent activity) ที่ดึงมาจากฐานข้อมูลกิจกรรมของเอเจนต์ 60 00:03:50,884 --> 00:03:54,039 คุณจะเห็นว่าวันศุกร์ผมใช้เอเจนต์เยอะมากเพราะกำลัง 61 00:03:54,039 --> 00:04:00,737 build การตั้งค่านี้อยู่ กราฟเลยพุ่งขึ้น และทางด้านขวาคุณยังเห็นได้ว่าเอเจนต์ตัวไหนรับงานหนักที่สุดตอนนี้ 62 00:04:00,737 --> 00:04:03,764 ในกรณีของผมก็คือ Vera นักเขียนคอนเทนต์ และ Kite 63 00:04:03,764 --> 00:04:06,920 นักพัฒนา เพราะสองตัวนี้ทำงานหนักที่สุดจนถึงตอนนี้ 64 00:04:06,920 --> 00:04:10,591 พอเลื่อนลงมาด้านล่าง คุณจะเห็นสรุปสิ่งที่เอเจนต์ทำทั้งหมด 65 00:04:10,591 --> 00:04:13,940 ซึ่งดึงมาจากฐานข้อมูลบันทึกการทำงานของเอเจนต์เช่นกัน 66 00:04:13,940 --> 00:04:19,414 ความมหัศจรรย์เกิดขึ้นที่แท็บ ideas ตรงนี้คุณจะเห็นไอเดียสองสามอันที่เอเจนต์สร้างให้ผม 67 00:04:19,414 --> 00:04:24,631 เพราะผมกำลังทำงานเกี่ยวกับ AI ผมเลยให้พวกมันสร้างไอเดียเกี่ยวกับระบบอัตโนมัติด้วย 68 00:04:24,631 --> 00:04:29,332 AI (AI automation) และอะไรประมาณนั้น ตรงนี้คุณสามารถใส่ไอเดียของคุณเองได้ 69 00:04:29,332 --> 00:04:32,423 ไม่ว่าไอเดียไหนก็ตาม หรือถ้าคุณยังไม่มีไอเดียเลย 70 00:04:32,423 --> 00:04:35,579 คุณก็บอกเอเจนต์ได้ว่า "ช่วยสร้างไอเดียให้หน่อยสิ" 71 00:04:35,579 --> 00:04:39,894 ขอผมคลิกที่ generate some ideas แล้วดูว่าไอเดียอะไรจะถูกสร้างขึ้นมา 72 00:04:39,894 --> 00:04:45,819 ตรงนี้คุณจะเห็นว่า Atlas นักวิจัยของเราคือตัวที่จะไปค้นหาไอเดียเกี่ยวกับสิ่งที่เรากำลังสร้าง 73 00:04:45,819 --> 00:04:50,456 และสิ่งที่เรายังไม่เคยโพสต์มาก่อน มันจะไปค้นหาไอเดียที่เราสามารถโพสต์ได้ 74 00:04:50,456 --> 00:04:54,642 โดยอ้างอิงจากสิ่งที่เอเจนต์เรียนรู้มาเกี่ยวกับสิ่งที่ผมกำลังสร้าง 75 00:04:54,642 --> 00:04:57,669 จากนั้นคุณจะเห็นว่าพวกมันสร้างไอเดียมาห้าไอเดีย 76 00:04:57,669 --> 00:05:00,889 ไอเดียแรกคือ "ระบบอัตโนมัติล้มเหลวตรงจุดส่งต่องาน" 77 00:05:00,889 --> 00:05:04,303 (automation fails at the handoff) และยังมีไอเดียอย่าง 78 00:05:04,303 --> 00:05:07,587 "เอเจนต์ของคุณควรทดสอบสิ่งที่มันอ้างว่าแก้ไข" (your 79 00:05:07,587 --> 00:05:11,967 agent should run the test it claims to fix) ซึ่งน่าจะเป็นไอเดียที่ดี 80 00:05:11,967 --> 00:05:16,088 เพราะเอเจนต์ชอบหลอน (hallucinate) เยอะมาก เพื่อสาธิตเป็นตัวอย่าง 81 00:05:16,088 --> 00:05:19,437 สมมติว่าผมอยากเขียนสไลด์เกี่ยวกับไอเดียนี้ ผมแค่คลิก 82 00:05:19,437 --> 00:05:22,851 promote แล้วตรงนี้ก็สามารถกรอกจำนวนสไลด์ที่ต้องการได้ 83 00:05:22,851 --> 00:05:26,844 เช่น ผมอยากได้แปดสไลด์ สิบสไลด์ หรือเท่าไหร่ก็ได้ตามที่ต้องการ 84 00:05:26,844 --> 00:05:29,999 สิ่งที่ต้องจำไว้คือ สไลด์แรกจะเป็นฮุก (hook) เสมอ 85 00:05:29,999 --> 00:05:35,345 และสไลด์สุดท้ายจะเป็น CTA (คำกระตุ้นให้ทำตาม) ดังนั้นเนื้อหาหลักจะอยู่ระหว่างฮุกกับ 86 00:05:35,345 --> 00:05:40,175 CTA ถ้าผมเลือกสิบสไลด์หรือแปดสไลด์ นั่นหมายความว่าผมจะมีสไลด์เนื้อหาหกสไลด์ 87 00:05:40,175 --> 00:05:46,293 โดยหนึ่งเป็นฮุกและหนึ่งเป็น CTA จากนั้นผมสามารถตัดสินใจได้ว่าให้เอเจนต์ทำการวิจัยเชิงลึกหรือไม่ 88 00:05:46,293 --> 00:05:50,737 เช่น ถ้าผมคลิก research with perplexity เอเจนต์จะไปค้นคว้าเชิงลึกผ่าน 89 00:05:50,737 --> 00:05:54,215 Perplexity เพื่อหาคอนเทนต์ที่เหมาะสมจริงๆ สำหรับงานนี้ 90 00:05:54,215 --> 00:05:57,371 และตรงนี้ผมยังทำโหมดพิเศษแบบ "สเตียรอยด์" ไว้ด้วย 91 00:05:57,371 --> 00:06:00,591 โดยเอเจนต์จะเขียนสไลด์ที่กระแทกใจ (punchy) มากขึ้น 92 00:06:00,591 --> 00:06:04,906 พอเสร็จแล้วก็แค่คลิก write eight slides สิ่งที่เกิดขึ้นต่อจากนี้คือ 93 00:06:04,906 --> 00:06:08,255 Atlas ทำงานของมันเสร็จแล้ว Atlas วิจัยเสร็จเรียบร้อย 94 00:06:08,255 --> 00:06:11,410 ตอนนี้ Vera จะเข้ามารับช่วงต่อ Vera คือเอเจนต์ AI 95 00:06:11,410 --> 00:06:16,949 ที่ทำหน้าที่เขียนคอนเทนต์ เรามารอให้ Vera วิจัยเสร็จและเตรียมคอนเทนต์ให้พร้อมกันดีกว่า 96 00:06:16,949 --> 00:06:20,040 เอาล่ะ Vera วิจัยเสร็จแล้ว จำไว้ว่าเราขอแปดสไลด์ 97 00:06:20,040 --> 00:06:23,582 และ Vera กำลังให้ภาพรวมว่าเนื้อหาบนแต่ละสไลด์จะเป็นอะไร 98 00:06:23,582 --> 00:06:28,413 คุณจะเห็นคอนเทนต์ที่จะลงบนทุกสไลด์ได้เลย ถ้าผมไม่ชอบสไลด์ไหนและอยากปรับปรุง 99 00:06:28,413 --> 00:06:31,826 ผมก็คลิก refine copy แล้วเอเจนต์จะปรับปรุงตามที่ผมบอก 100 00:06:31,826 --> 00:06:35,819 ถ้าผมพอใจและอยากดำเนินการต่อ ผมก็คลิก approve แล้วเลือกเทมเพลต 101 00:06:35,819 --> 00:06:40,456 จำไว้ว่าคอนเทนต์ที่เอเจนต์ทำคือไอเดียคร่าวๆ ว่าคอนเทนต์ควรมีหน้าตาแบบไหน 102 00:06:40,456 --> 00:06:43,483 แต่ตรงนี้ผมมีเทมเพลตที่ออกแบบอย่างสวยงามกองใหญ่ 103 00:06:43,483 --> 00:06:47,347 ซึ่งผมจะแจกให้ทุกคนได้คัดลอกไปใช้ โดยไม่ต้องออกแบบเองทั้งหมด 104 00:06:47,347 --> 00:06:50,889 สิ่งที่เราต้องทำก็แค่เลือกเทมเพลตที่อยากจะใช้ในการสร้าง 105 00:06:50,889 --> 00:06:54,496 เนื่องจากบรานด์ของผมเป็นสีส้ม ขอเลือกเทมเพลตอันนี้ตรงนี้ 106 00:06:54,496 --> 00:06:57,780 แบบสิบสไลด์ แล้วสิ่งที่เกิดขึ้นคือผมจะคลิก fit copy 107 00:06:57,780 --> 00:07:02,417 to this ทำไมต้องทำขั้นตอนนี้? เพราะทุกเทมเพลตมีจำนวนตัวอักษรที่รองรับได้ 108 00:07:02,417 --> 00:07:06,217 ถ้าจำนวนตัวอักษรเกินกว่าที่เทมเพลตรองรับ ดีไซน์ก็จะดูไม่สวย 109 00:07:06,217 --> 00:07:09,244 ดังนั้นสิ่งที่ Vera จะทำคือดูเทมเพลตที่เราเลือก 110 00:07:09,244 --> 00:07:12,528 แล้วปรับข้อความที่จะลงบนสไลด์ให้เข้ากับเทมเพลตนั้นๆ 111 00:07:12,528 --> 00:07:17,230 จากนั้น Vera ก็ปรับข้อความสไลด์ให้เข้ากับเทมเพลตที่เราเลือกเสร็จเรียบร้อย 112 00:07:17,230 --> 00:07:21,158 ตรงนี้ผมแค่คลิก render this จากนั้นก็จะเรียกเอเจนต์อีกตัวชื่อ 113 00:07:21,158 --> 00:07:25,151 Kite ซึ่งทำหน้าที่ด้านดีไซน์ พอมาที่นี่จะเห็นว่าสไลด์พร้อมแล้ว 114 00:07:25,151 --> 00:07:28,758 ผมสามารถคลิกเปิดในสตูดิโอได้ หรือจะมาที่แท็บสตูดิโอก็ได้ 115 00:07:28,758 --> 00:07:33,975 แล้วมันจะโชว์สไลด์ให้ดู พอคลิก open in studio คุณจะเห็นสไลด์ที่เอเจนต์สร้างขึ้นมา 116 00:07:33,975 --> 00:07:37,774 จะเห็นว่าผมมีแปดสไลด์ที่ปรับแต่งให้เข้ากับสิ่งที่เราทำเป๊ะๆ 117 00:07:37,774 --> 00:07:41,574 ความสวยงามของการสร้างสไลด์แบบนี้คือ โดยปกติเวลาคนสร้างสไลด์ 118 00:07:41,574 --> 00:07:44,923 Instagram คุณต้องใช้เอเจนต์สร้างภาพหรือโมเดลสร้างภาพ 119 00:07:44,923 --> 00:07:49,045 ซึ่งจะคิดเงินคุณทุกครั้งที่สร้างสไลด์ และส่วนที่เจ็บปวดที่สุดคือ 120 00:07:49,045 --> 00:07:52,394 ทุกครั้งที่อยากแก้ข้อความ คุณต้องจ่ายเงินทุกครั้งต่อ 121 00:07:52,394 --> 00:07:55,421 API call แต่ความเจ๋งของสิ่งที่เราสร้างตรงนี้คือ 122 00:07:55,421 --> 00:07:59,736 สไลด์ทุกใบเรนเดอร์เป็นไฟล์ HTML หมายความว่าเมื่อคุณมาที่นี่แล้วคลิก 123 00:07:59,736 --> 00:08:04,179 fine-tune the slide แล้วเลือกสไลด์ใดก็ได้ ผมสามารถแก้ไขและเพิ่มชื่อผม 124 00:08:04,179 --> 00:08:08,172 Larry ตรงนี้ได้ ทำอะไรก็ได้ตามต้องการโดยไม่ต้องจ่ายเงินอะไรเลย 125 00:08:08,172 --> 00:08:11,586 อีกอย่างที่ผมเพิ่มให้คือ คุณสามารถปรับสไลด์ให้ชิดซ้าย 126 00:08:11,586 --> 00:08:14,935 ขวา บน ล่าง ย่อขนาดสไลด์ เปลี่ยนขนาดฟอนต์ได้ทุกอย่าง 127 00:08:14,935 --> 00:08:19,765 แล้วพอเสร็จก็แค่คลิก save เท่านั้นเอง สมมติว่าคุณพอใจกับคอนเทนต์ทั้งหมดแล้ว 128 00:08:19,765 --> 00:08:22,921 คุณก็สามารถโปรโมตมันต่อได้ คุณยังแปลงมันเป็น reel 129 00:08:22,921 --> 00:08:28,202 ได้ด้วยการคลิก animate this carousel คุณสามารถทำให้สไลด์ทั้งหมดเคลื่อนไหวต่อกันแบบ 130 00:08:28,202 --> 00:08:32,259 reel ด้วยอัตราส่วน 4:5 หรือจะสร้าง reel เต็มรูปแบบด้วยอัตราส่วน 131 00:08:32,259 --> 00:08:35,479 9:16 ก็ได้ สมมติว่าผมเสร็จและพอใจกับสิ่งที่สร้างมา 132 00:08:35,479 --> 00:08:38,506 ผมก็แค่มาคลิก post now และในกรณีของผม ผมตั้งค่า 133 00:08:38,506 --> 00:08:41,855 Instagram ไว้แล้ว ผมจึงคลิก post to Instagram ได้เลย 134 00:08:41,855 --> 00:08:45,397 จากนั้นเอเจนต์จะเตือนว่า "เฮ้ แน่ใจนะว่าจะโพสต์ภาพนี้?" 135 00:08:45,397 --> 00:08:50,485 ผมก็จะตอบว่า "ใช่ โพสต์เลย" แล้วภาพก็จะถูกส่งผ่านแพลตฟอร์มที่เราจะใช้กันชื่อว่า 136 00:08:50,485 --> 00:08:54,735 Buffer ซึ่งเชื่อมต่อกับทุกแพลตฟอร์มโซเชียล แล้วมันจะถูกส่งตรงไปยัง 137 00:08:54,735 --> 00:08:57,891 Instagram ให้เรา จากนั้นผมจะได้รับการแจ้งเตือนจาก 138 00:08:57,891 --> 00:09:01,884 Orion ซึ่งเป็นนักเผยแพร่ (publisher) ของเราว่าโพสต์ถูกส่งไปที่ 139 00:09:01,884 --> 00:09:05,104 Buffer แล้ว ดังนั้นภายในไม่กี่นาที เราควรเห็นมันบน 140 00:09:05,104 --> 00:09:11,416 Instagram โดยตรง และตรงนั้นคุณก็เห็นเลย นี่คือบัญชีทดสอบที่ผมสร้างไว้เพื่อทดสอบสิ่งที่ผมกำลังสร้าง 141 00:09:11,416 --> 00:09:15,022 พอมาที่นี่คุณจะเห็นว่าโพสต์ที่เราเพิ่งสร้างขึ้นออนไลน์บน 142 00:09:15,022 --> 00:09:18,049 Instagram แล้ว หน้าตาตรงกับที่เรารีเอนเดอร์เป๊ะ 143 00:09:18,049 --> 00:09:22,364 และนี่คือสิ่งที่ผมจะสร้างร่วมกับทุกคนในวันนี้ นอกจากนี้เรายังมีแท็บ 144 00:09:22,364 --> 00:09:26,808 dedicated agents ที่ให้ข้อมูลเชิงลึกเกี่ยวกับสถาปัตยกรรมเอเจนต์ของเรา 145 00:09:26,808 --> 00:09:31,123 คุณจะเห็นว่าเอเจนต์ลูกแต่ละตัวมีการ์ดของตัวเอง ซึ่งคุณสามารถดูโมเดล 146 00:09:31,123 --> 00:09:34,279 AI ที่เอเจนต์ใช้ จำนวนครั้งที่เอเจนต์ตัวนั้นทำงาน 147 00:09:34,279 --> 00:09:37,628 จำนวนงานที่สำเร็จ รวมถึงงานล่าสุดบางส่วนที่เอเจนต์ทำ 148 00:09:37,628 --> 00:09:40,848 เหนือเอเจนต์ทั้งสี่ตัวนี้ขึ้นไป เรามี orchestrator 149 00:09:40,848 --> 00:09:45,742 ซึ่งเป็นเหมือนเจ้านายของเอเจนต์ทั้งหมด ด้านล่างเรามีแผนที่ความร้อนของกิจกรรม 150 00:09:45,742 --> 00:09:49,027 (activity heat map) ที่แสดงว่าในกรอบเวลา 24 ชั่วโมง 151 00:09:49,027 --> 00:09:54,179 เอเจนต์ตัวไหนทำงานบ้าง ยิ่งสีสว่างมากก็หมายความว่าเอเจนต์ทำงานหนักในช่วงเวลานั้น 152 00:09:54,179 --> 00:09:58,043 ส่วนพื้นที่สีเข้มหมายความว่าเอเจนต์ไม่ได้ทำงานในช่วงเวลานั้น 153 00:09:58,043 --> 00:10:02,745 การ build ทั้งหมดจะใช้เวลาประมาณ 4-5 ชั่วโมงถ้าคุณมีพรอมป์ต์และเทมเพลตครบ 154 00:10:02,745 --> 00:10:07,961 ผมจึงสร้างตัวติดตั้งอัตโนมัติ (auto installer) ที่ทำทุกอย่างให้คุณภายในไม่กี่นาที 155 00:10:07,961 --> 00:10:11,310 ถ้าสนใจตัวติดตั้งอัตโนมัติ มันก็จะอยู่ในส่วนคำอธิบาย 156 00:10:11,310 --> 00:10:14,402 (description) เช่นกัน เอาล่ะ เข้าเรื่องการ build 157 00:10:14,402 --> 00:10:17,815 กันเลย เริ่มแรกเราจะติดตั้ง Hermes ก่อน Hermes Agents 158 00:10:17,815 --> 00:10:20,906 ช่วยให้คุณสร้างโครงสร้างพื้นฐานของเอเจนต์หลายตัว 159 00:10:20,906 --> 00:10:24,384 (multi-agent infrastructure) ที่คุณสามารถคุยกับเอเจนต์ 160 00:10:24,384 --> 00:10:27,669 AI ของคุณผ่านแอปพลิเคชันยอดนิยมต่างๆ เช่น Telegram, 161 00:10:27,669 --> 00:10:31,082 Discord, Slack, WhatsApp และแอปส่งข้อความยอดนิยมอื่นๆ 162 00:10:31,082 --> 00:10:34,238 นอกจากนี้ แทนที่จะถูกจำกัดให้ใช้โมเดล AI ตัวเดียว 163 00:10:34,238 --> 00:10:37,973 คุณสามารถใช้โมเดล AI ตัวไหนก็ได้ที่ต้องการ ไม่ว่าจะเป็นจาก 164 00:10:37,973 --> 00:10:41,193 OpenAI, Anthropic หรือโมเดลยอดนิยมอื่นๆ การติดตั้ง 165 00:10:41,193 --> 00:10:44,671 Hermes มีหลายทางเลือกให้คุณ คุณสามารถติดตั้งบน Windows 166 00:10:44,671 --> 00:10:49,243 PC ได้ถ้ามีเครื่องเฉพาะที่อยากให้มันรัน หรือจะติดตั้งผ่านระบบปฏิบัติการ 167 00:10:49,243 --> 00:10:52,528 Linux ก็ได้ สำหรับการตั้งค่านี้ผมจะใช้วิธีแบบ Linux 168 00:10:52,528 --> 00:10:57,229 ผมรู้ว่า Linux ฟังดูน่ากลัว แต่ไม่ต้องกังวล ผมจะพาคุณไปทีละขั้นตอนทั้งหมด 169 00:10:57,229 --> 00:11:03,670 และเมื่อเราตั้งค่าเสร็จ ซึ่งใช้เวลาไม่กี่นาที ทุกอย่างที่คุณต้องทำจะอยู่บนแดชบอร์ดที่เรากำลังจะสร้าง 170 00:11:03,670 --> 00:11:09,208 หรือจากแอปพลิเคชัน Telegram คุณไม่ต้องเข้ามาในเทอร์มินัลเพื่อพิมพ์คำสั่งอะไรให้ยุ่งยาก 171 00:11:09,208 --> 00:11:12,235 แต่ผมจะพาคุณผ่านกระบวนการทั้งหมดตั้งแต่ A ถึง Z 172 00:11:12,235 --> 00:11:15,391 เพื่อให้คุณเข้าใจภาพรวมว่ากระแสงานนี้ทำงานอย่างไร 173 00:11:15,391 --> 00:11:19,320 ถ้าคุณมี PC ที่สามารถรันสิ่งนี้ได้ ก็ใช้ได้เลย แต่ในกรณีของผม 174 00:11:19,320 --> 00:11:23,506 ผมไม่มี PC เฉพาะ คุณจึงสามารถเช่าเซิร์ฟเวอร์ที่ไหนสักแห่งมารันได้ 175 00:11:23,506 --> 00:11:26,533 ซึ่งผมเองก็ชอบตัวเลือกนี้ แต่ก็แล้วแต่คุณนะครับ 176 00:11:26,533 --> 00:11:30,848 ข้อดีของการใช้เซิร์ฟเวอร์ส่วนตัวคือ คุณเช่าเซิร์ฟเวอร์จากบริษัทอื่น 177 00:11:30,848 --> 00:11:34,519 จ่ายประมาณ 4 ดอลลาร์ต่อเดือน แล้วเซิร์ฟเวอร์นี้จะเปิดตลอด 178 00:11:34,519 --> 00:11:40,444 24/7 คุณไม่ต้องกังวลเรื่องการดูแลรักษา ไม่ต้องกังวลเรื่องการเชื่อมต่ออินเทอร์เน็ตอะไรแบบนั้น 179 00:11:40,444 --> 00:11:44,179 แต่แน่นอนว่ามันก็มีค่าใช้จ่าย คุณจึงต้องตัดสินใจว่าจะรันบน 180 00:11:44,179 --> 00:11:47,850 PC ส่วนตัวที่บ้านหรือจะเช่าเซิร์ฟเวอร์ สำหรับผู้ให้บริการ 181 00:11:47,850 --> 00:11:51,778 VPS ที่ผมแนะนำส่วนตัวคือ Racknerd และ Contabo ตัวอย่างเช่นกับ 182 00:11:51,778 --> 00:11:55,836 Racknerd คุณจะได้เซิร์ฟเวอร์ที่มี CPU สองคอร์ พื้นที่เก็บข้อมูล 183 00:11:55,836 --> 00:11:59,571 35 GB, RAM 2 GB ในราคาประมาณ 35 ดอลลาร์ต่อปี คิดเป็นประมาณ 184 00:11:59,571 --> 00:12:03,049 2.9 ดอลลาร์ต่อเดือน ซึ่งถือว่าคุ้มมากสำหรับเซิร์ฟเวอร์ 185 00:12:03,049 --> 00:12:06,205 เพราะคุณไม่ต้องกังวลเรื่องการเปิดเครื่องตลอด 24/7 186 00:12:06,205 --> 00:12:09,747 กิจกรรมอินเทอร์เน็ต การบำรุงรักษา และอื่นๆ กับ Racknerd 187 00:12:09,747 --> 00:12:13,997 คุณจ่ายปีละครั้งก็จบ ไม่ต้องกังวลเรื่องการจ่ายรายเดือนอะไรทั้งนั้น 188 00:12:13,997 --> 00:12:18,506 ส่วนตัวเลือกที่สองคือ Contabo ซึ่งก็มีเซิร์ฟเวอร์ที่เชื่อถือได้พอสมควร 189 00:12:18,506 --> 00:12:21,983 และราคาก็ค่อนข้างย่อมเยาสำหรับสเปกของ VPS ที่คุณได้รับ 190 00:12:21,983 --> 00:12:25,075 ตัวอย่างเช่นกับ Contabo คุณจะได้เซิร์ฟเวอร์ที่มี 191 00:12:25,075 --> 00:12:28,102 CPU สี่คอร์, RAM 8 GB และพื้นที่ SSD ประมาณ 100 192 00:12:28,102 --> 00:12:33,254 GB ในราคาประมาณ 8 ดอลลาร์ต่อเดือน ตัวนี้จะมากเกินพอสำหรับสิ่งที่เราจะสร้างแน่นอน 193 00:12:33,254 --> 00:12:37,311 คุณจึงเลือกได้ระหว่าง Racknerd หรือ Contabo ผมจะใส่ลิงก์อ้างอิง 194 00:12:37,311 --> 00:12:41,047 (referral link) ไว้ในส่วนคำอธิบาย ถ้าอยากได้บริการเหล่านี้ 195 00:12:41,047 --> 00:12:44,653 และขอบอกว่า วิดีโอนี้ไม่ได้ถูกสปอนเซอร์โดยบริษัทเหล่านี้ 196 00:12:44,653 --> 00:12:48,775 ผมแค่แนะนำสิ่งที่ผมใช้เป็นประจำเวลาตั้งค่าโครงสร้างพื้นฐานพวกนี้ 197 00:12:48,775 --> 00:12:51,866 ถ้าอยากเลือก Racknerd ก็เข้ามาที่นี่ อย่างที่บอก 198 00:12:51,866 --> 00:12:57,856 ตัวเลือกที่ผมแนะนำคือตัวนี้ คลิก order now แล้วคุณจะถูกพาไปยังหน้าที่แสดงสรุปสเปกฮาร์ดแวร์ของ 199 00:12:57,856 --> 00:13:01,398 VPS ที่คุณเลือก พอเลื่อนลงมาก็จะเห็นป้ายชื่อเซิร์ฟเวอร์ 200 00:13:01,398 --> 00:13:05,713 (server label) ซึ่งสามารถเปลี่ยนทีหลังได้ สำหรับตัวเลือกการกำหนดค่า 201 00:13:05,713 --> 00:13:09,384 (configuration options) ผมแนะนำให้ปล่อยเป็นค่าเริ่มต้นไว้ 202 00:13:09,384 --> 00:13:14,021 ระบบปฏิบัติการเราจะใช้ Ubuntu 22.04 ส่วน RAM ปล่อยเป็นค่าเริ่มต้นทั้งหมด 203 00:13:14,021 --> 00:13:19,624 เพราะถ้าเพิ่ม RAM ทันทีก็จะเสียค่าใช้จ่ายเพิ่ม ผมเลยแนะนำให้ใช้ตัวเลือกเริ่มต้นที่มีให้ 204 00:13:19,624 --> 00:13:23,874 ส่วนตำแหน่งที่ตั้ง (location) คุณเลือกที่อยู่ใกล้ตัวคุณที่สุดก็ได้ 205 00:13:23,874 --> 00:13:26,966 แต่สิ่งที่เราจะสร้างนั้น latency ไม่ใช่ปัญหาใหญ่ 206 00:13:26,966 --> 00:13:31,281 ผมเลยไม่กังวลเรื่องความใกล้ไกลมากนัก ค่าใช้จ่ายปล่อยเป็นค่าเริ่มต้น 207 00:13:31,281 --> 00:13:34,758 ถ้าเลือกตัวสูงกว่าก็จะจ่ายมากขึ้น จากนั้นคลิก continue 208 00:13:34,758 --> 00:13:38,043 แล้วคุณจะได้รับอีเมลที่มีข้อมูลรับรอง (credentials) 209 00:13:38,043 --> 00:13:41,199 ทั้งหมดที่จำเป็นต่อการเชื่อมต่อกับเซิร์ฟเวอร์ VPS 210 00:13:41,199 --> 00:13:44,741 ซึ่งผมจะพาคุณผ่านกระบวนการนั้นด้วย ถ้าอยากเลือกตัวเลือก 211 00:13:44,741 --> 00:13:48,025 Contabo อย่างที่บอก ตัวเลือกที่เรามีตรงนี้คือ Cloud 212 00:13:48,025 --> 00:13:52,405 VPS 4 หรือตัวเลือกต่ำสุดที่มี จะทรงพลังเกินพอสำหรับสิ่งที่เราจะสร้าง 213 00:13:52,405 --> 00:13:56,591 ตรงนี้คลิก get started ระวังหน่อยนะครับ เพราะค่าเริ่มต้นบางทีเป็น 214 00:13:56,591 --> 00:14:00,004 24 เดือน หมายความว่าคุณจะถูกผูกกับ VPS ตัวนี้เป็นเวลา 215 00:14:00,004 --> 00:14:03,546 2 ปี และแน่นอนว่ายิ่งสัญญายาวก็ยิ่งถูกลง แต่ระวังไว้ว่า 216 00:14:03,546 --> 00:14:06,573 ถ้าเลือก 2 ปี คุณจะต้องจ่ายเงินจำนวนนี้เป็นเวลา 217 00:14:06,573 --> 00:14:11,081 2 ปี ถ้าต้องการความยืดหยุ่นยกเลิกได้ทุกเดือน ก็เลือกตัวเลือกหนึ่งเดือน 218 00:14:11,081 --> 00:14:14,108 ซึ่งในกรณีของผมจะจ่ายประมาณ 5.5 ดอลลาร์ต่อเดือน 219 00:14:14,108 --> 00:14:18,359 ส่วนภูมิภาค (region) ปล่อยเป็น European Union ตามค่าเริ่มต้นได้เลย 220 00:14:18,359 --> 00:14:23,640 เพราะ Contabo อยู่ในสหภาพยุโรป และทันทีที่คุณเลือกตำแหน่งอื่นก็จะมีค่าใช้จ่ายเพิ่ม 221 00:14:23,640 --> 00:14:27,053 แต่อย่างที่บอกไปก่อนหน้านี้ สิ่งที่เราจะสร้าง latency 222 00:14:27,053 --> 00:14:30,660 ไม่ค่อยเป็นปัญหา คุณปล่อยเป็น European Union ไว้เลยก็ได้ 223 00:14:30,660 --> 00:14:33,880 พอเลื่อนลงมาส่วนพื้นที่จัดเก็บ (storage) เลือก SSD 224 00:14:33,880 --> 00:14:37,036 100 GB ซึ่งฟรีและมากเกินพอสำหรับสิ่งที่เราจะสร้าง 225 00:14:37,036 --> 00:14:41,351 ระบบปฏิบัติการปล่อยเป็น Ubuntu ตามค่าเริ่มต้น สำหรับการปกป้องข้อมูล 226 00:14:41,351 --> 00:14:44,764 (data protection) ผมแนะนำให้เลือกตัวเลือก auto backup 227 00:14:44,764 --> 00:14:48,306 บ่อยครั้งที่ผมทำงานกับเอเจนต์แล้วมีอะไรบางอย่างพังไปหมด 228 00:14:48,306 --> 00:14:51,333 แล้วด้วย auto backup มันจะถ่าย snapshot ของ VPS 229 00:14:51,333 --> 00:14:55,391 ทุกวัน หมายความว่าถ้ามีอะไรผิดพลาด คุณสามารถย้อนกลับไปได้ประมาณ 230 00:14:55,391 --> 00:14:58,417 10 วัน และกู้คืนอิมเมจที่คุณมีบน VPS ในวันนั้นๆ 231 00:14:58,417 --> 00:15:02,346 ได้เสมอ อันนี้เป็นตัวเลือกเสริม แต่อย่างที่บอก แนะนำอย่างยิ่ง 232 00:15:02,346 --> 00:15:07,756 เพราะลองนึกดู ถ้าคุณสร้างระบบจัดการคอนเทนต์มานานกว่าหนึ่งปีแล้วเกิดความผิดพลาดขึ้นมา 233 00:15:07,756 --> 00:15:11,362 คุณจะเสียมันไปทั้งหมด เพื่อเซฟตัวเอง คุณยังสามารถตั้งค่า 234 00:15:11,362 --> 00:15:14,454 auto backup ของตัวเองซึ่งจะถ่าย snapshot ของ VPS 235 00:15:14,454 --> 00:15:19,284 ทุกวันได้ด้วย เช่นสร้างด้วย cron ก็ได้ แต่ถ้าไม่อยากทำเองและอยากใช้ตัวเลือก 236 00:15:19,284 --> 00:15:22,375 auto backup เริ่มต้นของ Contabo ก็เลือกอันนี้ได้ 237 00:15:22,375 --> 00:15:25,789 ซึ่งจะเสียประมาณ 1.65 ดอลลาร์ต่อเดือน ส่วน additional 238 00:15:25,789 --> 00:15:31,778 features ปล่อยเป็นค่าเริ่มต้นทั้งหมด ในส่วนนี้คุณต้องใส่รหัสผ่านสำหรับเชื่อมต่อกับเซิร์ฟเวอร์ 239 00:15:31,778 --> 00:15:36,286 VPS ตรงนี้คุณสามารถสร้างรหัสผ่านใหม่หรือใส่รหัสผ่านอะไรก็ได้ตามต้องการ 240 00:15:36,286 --> 00:15:41,052 ซึ่งเป็นรหัสผ่านที่คุณต้องจำไว้ เพราะเป็นรหัสที่ใช้เชื่อมต่อกับเซิร์ฟเวอร์ 241 00:15:41,052 --> 00:15:44,337 VPS ถ้าลืมรหัสผ่าน คุณสามารถเข้าไปในคอนโซลแผงควบคุม 242 00:15:44,337 --> 00:15:47,943 (control panel) แล้วรีเซ็ตรหัสผ่านได้ แต่จะไปยุ่งยากทำไม 243 00:15:47,943 --> 00:15:51,872 หลังจากนั้นก็คลิก next ชำระเงิน แล้วผมจะพาคุณผ่านขั้นตอนถัดไป 244 00:15:51,872 --> 00:15:54,963 ถ้าคุณเลือกตัวเลือก Racknerd หลังจากชำระเงินแล้ว 245 00:15:54,963 --> 00:15:59,214 คุณจะได้รับอีเมลแบบนี้จาก Racknerd จากอีเมลนี้เราจะต้องใช้สามอย่าง 246 00:15:59,214 --> 00:16:03,013 สิ่งแรกคือ IP address ของเซิร์ฟเวอร์ VPS ซึ่งทุกเซิร์ฟเวอร์ 247 00:16:03,013 --> 00:16:06,233 VPS มี IP address เฉพาะตัว และพวกเขาจะให้ IP นี้มา 248 00:16:06,233 --> 00:16:10,870 สิ่งที่สองคือชื่อผู้ใช้ (username) ของบัญชีที่ใช้เชื่อมต่อกับเซิร์ฟเวอร์ 249 00:16:10,870 --> 00:16:14,026 VPS ซึ่งกับ Racknerd ส่วนใหญ่ชื่อจะเป็น root เสมอ 250 00:16:14,026 --> 00:16:17,762 และอย่างที่สามคือรหัสผ่าน ซึ่งพวกเขาก็จะให้มาในนี้เรียกว่า 251 00:16:17,762 --> 00:16:20,917 root password ทั้งสามข้อมูลนี้จะอยู่ในอีเมลของคุณ 252 00:16:20,917 --> 00:16:26,070 ส่วน SSH port ไม่ต้องกังวล เพราะแอปพลิเคชันส่วนใหญ่ที่ใช้เชื่อมต่อกับเซิร์ฟเวอร์ 253 00:16:26,070 --> 00:16:29,096 VPS จะตั้งค่าเริ่มต้นเป็นพอร์ต SSH 22 เสมอ ด้วย 254 00:16:29,096 --> 00:16:33,411 IP address, username และรหัสผ่าน คุณจะสามารถเชื่อมต่อกับเซิร์ฟเวอร์ 255 00:16:33,411 --> 00:16:37,082 VPS ได้ ซึ่งผมจะพาคุณทำในขั้นตอนถัดไป ถ้าคุณเลือกตัวเลือก 256 00:16:37,082 --> 00:16:41,397 Contabo คุณจะได้รับอีเมลแบบนี้จาก Contabo อีเมลของผมเป็นภาษาเยอรมัน 257 00:16:41,397 --> 00:16:45,197 แต่รูปแบบจะเหมือนกันไม่ว่าคุณจะอยู่ประเทศไหนหรือใช้ภาษาอะไร 258 00:16:45,197 --> 00:16:48,610 ในอีเมลจาก Contabo เราจะใช้สองอย่าง ทางด้านซ้ายนี้คือ 259 00:16:48,610 --> 00:16:52,668 IP address ซึ่งเป็น IP เฉพาะของเซิร์ฟเวอร์ VPS และเรายังต้องใช้ 260 00:16:52,668 --> 00:16:56,146 username ซึ่งกับ Contabo ก็เหมือนกัน ส่วนใหญ่ username 261 00:16:56,146 --> 00:17:01,105 จะเป็น root ส่วนรหัสผ่าน พวกเขาจะไม่ให้ในอีเมล แต่จะเป็นรหัสที่คุณตั้งตอนซื้อ 262 00:17:01,105 --> 00:17:05,291 VPS ดังนั้นด้วย IP address, username และรหัสผ่านที่คุณตั้งตอนซื้อ 263 00:17:05,291 --> 00:17:09,863 VPS เราจะสามารถเชื่อมต่อกับเซิร์ฟเวอร์ได้ และการเชื่อมต่อกับเซิร์ฟเวอร์ 264 00:17:09,863 --> 00:17:13,534 VPS มีแอปพลิเคชันหลายตัวให้เลือก ข่าวดีคือ ไม่ว่าคุณจะใช้ 265 00:17:13,534 --> 00:17:17,720 Windows หรือ Mac ทั้งคู่มาพร้อมแอปพลิเคชันในตัวที่ใช้เชื่อมต่อกับ 266 00:17:17,720 --> 00:17:21,327 VPS ได้ ถ้าใช้ Windows ก็แค่คลิกที่แถบค้นหาแล้วหาแอปชื่อ 267 00:17:21,327 --> 00:17:24,869 Windows PowerShell แล้วพอคลิกเปิด มันก็จะมีหน้าตาแบบนี้ 268 00:17:24,869 --> 00:17:28,089 ถ้าคุณใช้ Mac แอปพลิเคชันที่ใช้จะเรียกว่า Terminal 269 00:17:28,089 --> 00:17:32,533 คำสั่งที่เราจะใช้ใน PowerShell ที่นี่จะเหมือนกับที่ใช้ในเทอร์มินัลของ 270 00:17:32,533 --> 00:17:35,882 Mac ทุกประการ ไม่ต้องกังวลเรื่องความแตกต่างของคำสั่ง 271 00:17:35,882 --> 00:17:38,909 ในการเชื่อมต่อกับเซิร์ฟเวอร์ VPS แค่พิมพ์คำสั่ง 272 00:17:38,909 --> 00:17:42,193 ssh เว้นวรรค แล้วตามด้วย root โดย root คือ username 273 00:17:42,193 --> 00:17:45,478 ของเซิร์ฟเวอร์ VPS ซึ่งเหมือนกัน สำหรับทั้ง Contabo 274 00:17:45,478 --> 00:17:49,020 และ Racknerd หลังจากนั้นก็ใส่ IP address ของเซิร์ฟเวอร์ 275 00:17:49,020 --> 00:17:54,044 VPS ของคุณ เคล็ดลับใน PowerShell คือ เมื่อไหร่ก็ตามที่คุณมีอะไรอยู่ในคลิปบอร์ด 276 00:17:54,044 --> 00:17:57,586 แล้วคลิกขวาที่เมาส์ มันจะวางสิ่งที่อยู่ในคลิปบอร์ดออกมา 277 00:17:57,586 --> 00:18:01,321 ซึ่งมีประโยชน์มาก โดยเฉพาะตอนพิมพ์รหัสผ่าน หลังจากนั้นก็กด 278 00:18:01,321 --> 00:18:06,795 enter ถ้าเป็นการเชื่อมต่อเซิร์ฟเวอร์ครั้งแรก มันจะถามว่าคุณต้องการเพิ่มฟิงเกอร์พรินต์ 279 00:18:06,795 --> 00:18:10,144 (fingerprint) ของเซิร์ฟเวอร์นี้ลงใน PC ของคุณหรือไม่ 280 00:18:10,144 --> 00:18:13,493 ถ้าคุณแน่ใจว่ากำลังเชื่อมต่อกับเซิร์ฟเวอร์ที่ถูกต้อง 281 00:18:13,493 --> 00:18:17,293 ก็พิมพ์ yes แล้วมันก็จะเรียบร้อย จากนั้นมันจะถามรหัสผ่านของ 282 00:18:17,293 --> 00:18:20,900 VPS ถ้ารหัสผ่านคุณซับซ้อน ก็พิมพ์มันไว้ที่ไหนสักแห่งก่อน 283 00:18:20,900 --> 00:18:24,313 แล้วเข้ามาที่นี่ คลิกขวา มันจะวางรหัสผ่านจากคลิปบอร์ด 284 00:18:24,313 --> 00:18:28,757 แล้วกด enter จากนั้นคุณจะเห็นว่าในกรณีของผม ผมเชื่อมต่อกับเซิร์ฟเวอร์ 285 00:18:28,757 --> 00:18:33,973 VPS ของผมแล้ว ผมจะล้างหน้าจอด้วยการพิมพ์ clear แล้วเราก็เริ่มขั้นตอนการตั้งค่าได้ 286 00:18:33,973 --> 00:18:39,576 ตอนนี้เราเชื่อมต่อกับ VPS โดยใช้ชื่อ root ซึ่งโดยทั่วไปคือผู้มีอำนาจสูงสุดบนเซิร์ฟเวอร์ 287 00:18:39,576 --> 00:18:42,668 Linux คำแนะนำของผมคือ อย่าติดตั้ง Hermes บน user 288 00:18:42,668 --> 00:18:45,759 root แต่ให้สร้างโปรไฟล์หรือ user ใหม่เพื่อรันมัน 289 00:18:45,759 --> 00:18:48,786 คำแนะนำนี้มีประโยชน์มาก เพราะคุณจะไม่ให้ Hermes 290 00:18:48,786 --> 00:18:51,813 เป็นผู้มีอำนาจสูงสุดบน VPS ของคุณ ในวิดีโอก่อนๆ 291 00:18:51,813 --> 00:18:58,124 ของผม เรามักทำบน root ซึ่งก็ไม่ผิดอะไร แต่ผมพยายามพัฒนาและนำทิปด้านความปลอดภัยที่ดีที่สุดมาให้เสมอ 292 00:18:58,124 --> 00:19:01,409 นี่คือเหตุผลที่รอบนี้เราจะไม่ติดตั้ง Hermes บน root 293 00:19:01,409 --> 00:19:04,693 เราจะสร้าง user เฉพาะเพื่อติดตั้งแอปพลิเคชัน Hermes 294 00:19:04,693 --> 00:19:07,913 ทั้งหมดบนนั้น การสร้าง user ใหม่บน Linux ใช้คำสั่ง 295 00:19:07,913 --> 00:19:11,134 useradd เว้นวรรค แล้วตามด้วยชื่อ user ที่อยากสร้าง 296 00:19:11,134 --> 00:19:14,354 ในกรณีของผมจะตั้งชื่อว่า Larry พิมพ์ adduser Larry 297 00:19:14,354 --> 00:19:18,540 หลังจากนั้นมันจะถามรหัสผ่านสำหรับ user นี้ ผมก็จะใส่รหัสผ่านของผม 298 00:19:18,540 --> 00:19:21,696 แล้วกด enter มันจะให้พิมพ์รหัสผ่านอีกครั้ง แล้วกด 299 00:19:21,696 --> 00:19:24,980 enter จากนั้นจะถามว่าต้องการใส่ชื่อเต็ม (full name) 300 00:19:24,980 --> 00:19:28,394 หรือไม่ ข้ามได้โดยกด enter ส่วน room number กด enter, 301 00:19:28,394 --> 00:19:31,678 phone กด enter ข้ามไปเลย, home phone ข้ามได้เช่นกัน 302 00:19:31,678 --> 00:19:34,769 แล้วมันจะถามว่าข้อมูลที่กรอกถูกต้องหรือไม่ พิมพ์ 303 00:19:34,769 --> 00:19:37,796 Y แทน yes แล้วกด enter ตอนนี้คุณจะเห็นว่า Larry 304 00:19:37,796 --> 00:19:40,823 ถูกเพิ่มเป็น user แล้ว ต่อไปเราจะให้สิทธิ์ sudo 305 00:19:40,823 --> 00:19:45,331 แก่ user Larry เพื่อให้มันสามารถรันคำสั่งบางอย่างและติดตั้งแอปพลิเคชัน 306 00:19:45,331 --> 00:19:48,552 Hermes ได้ โดยใช้คำสั่งนี้: usermod -aG sudo larry 307 00:19:48,552 --> 00:19:51,707 ตรงนี้ให้แทนที่ Larry ด้วย username ของคุณ แล้วกด 308 00:19:51,707 --> 00:19:56,666 enter ยังไงก็ตาม ผมจะให้คำสั่งพวกนี้กับคุณด้วย คุณไม่จำเป็นต้องพิมพ์หรือจำมัน 309 00:19:56,666 --> 00:20:00,402 หลังจากนั้นกด enter เราก็จะได้ Larry เป็น user ที่มีสิทธิ์ 310 00:20:00,402 --> 00:20:04,459 sudo แล้ว ผมจะล้างหน้าจอเพื่อให้ดูสะอาดขึ้น จากนั้นเราจะสลับจาก 311 00:20:04,459 --> 00:20:07,679 root user ไปเป็น Larry user เพื่อเข้าสู่ระบบในฐานะ 312 00:20:07,679 --> 00:20:10,835 Larry ที่เพิ่งสร้าง โดยใช้คำสั่ง su - แล้วตามด้วย 313 00:20:10,835 --> 00:20:14,055 Larry จะเห็นว่าสัญลักษณ์เปลี่ยนจาก root เป็น Larry 314 00:20:14,055 --> 00:20:18,048 นั่นหมายความว่าตอนนี้ผมไม่ได้อยู่บน root ซึ่งมีอำนาจสูงสุดแล้ว 315 00:20:18,048 --> 00:20:21,075 ผมเข้าสู่ระบบเป็น Larry ซึ่งมีอำนาจระดับนี้แล้ว 316 00:20:21,075 --> 00:20:24,102 ตอนที่เราเชื่อมต่อ VPS เราใช้คำสั่ง ssh root@IP 317 00:20:24,102 --> 00:20:27,515 address แต่ถ้าอยากเชื่อมต่อโดยไม่ใช้ root ก็สามารถใช้ 318 00:20:27,515 --> 00:20:30,929 user ใหม่ที่เราสร้าง ซึ่งในกรณีของผมคือ Larry แล้วใส่ 319 00:20:30,929 --> 00:20:34,149 IP address ของ VPS กด enter ใส่รหัสผ่านที่สร้างไว้ 320 00:20:34,149 --> 00:20:37,884 แล้วจะเห็นว่าผมเชื่อมต่อกับ VPS ได้เช่นกัน คุณจึงเชื่อมต่อ 321 00:20:37,884 --> 00:20:41,426 VPS ได้สองทาง คือใช้ root แล้วสลับเป็น Larry ด้วยคำสั่ง 322 00:20:41,426 --> 00:20:44,582 su - Larry หรือจะ ssh เข้าไปที่ Larry โดยตรงก็ได้ 323 00:20:44,582 --> 00:20:48,575 ผมจะยึดวิธีเดิมที่ตั้งค่าไว้แล้ว ผมพิมพ์ clear เพื่อล้างหน้าจอ 324 00:20:48,575 --> 00:20:51,988 แล้วเราก็เริ่มติดตั้ง Hermes ได้เลย การติดตั้ง Hermes 325 00:20:51,988 --> 00:20:55,208 เราจะไปที่เว็บไซต์หลักของ Hermes เมื่อมาถึงหน้านี้ 326 00:20:55,208 --> 00:20:58,428 ให้เลื่อนลงมาตรงส่วน install via terminal เราจะใช้ 327 00:20:58,428 --> 00:21:01,520 native application และตรงนี้คำสั่งจะเริ่มต้นด้วย 328 00:21:01,520 --> 00:21:04,611 curl เสมอ เพื่อให้แน่ใจว่าคุณใช้คำสั่งที่ถูกต้อง 329 00:21:04,611 --> 00:21:09,763 คลิกเพื่อคัดลอก one-line installer ข้อดีคือ ตัวติดตั้งแบบบรรทัดเดียวนี้จะติดตั้ง 330 00:21:09,763 --> 00:21:13,112 dependencies ทั้งหมดที่จำเป็นสำหรับการติดตั้งหรือรัน 331 00:21:13,112 --> 00:21:16,332 Hermes โดยที่คุณไม่ต้องลงแอป A แอป B อะไรต่อมิอะไร 332 00:21:16,332 --> 00:21:20,132 หลังจากนั้นกด enter แล้วการติดตั้งก็จะรัน มันตรวจพบว่าผมใช้ 333 00:21:20,132 --> 00:21:23,481 Linux และจะรันสิ่งอื่นๆ ที่ขาดหายไปบนเซิร์ฟเวอร์ด้วย 334 00:21:23,481 --> 00:21:27,603 ตรงนี้มันถามว่าต้องการติดตั้ง ripgrep สำหรับค้นหาไฟล์ที่เร็วขึ้น 335 00:21:27,603 --> 00:21:31,016 และ TTS สำหรับข้อความเสียงไหม อันนี้ดีครับ เราก็พิมพ์ 336 00:21:31,016 --> 00:21:35,074 yes ว่าต้องการติดตั้ง แล้วกด enter จากนั้นผมจะใส่รหัสผ่านแล้วกด 337 00:21:35,074 --> 00:21:38,938 enter แล้วการติดตั้งก็จะดำเนินต่อไป ผมจะรอให้การติดตั้งเสร็จ 338 00:21:38,938 --> 00:21:42,416 แล้วเราค่อยไปต่อกัน เอาล่ะ การติดตั้งส่วนที่ต้องมีก่อน 339 00:21:42,416 --> 00:21:46,151 (prerequisite) เสร็จแล้ว ตอนนี้เราสามารถเริ่มการตั้งค่าได้ 340 00:21:46,151 --> 00:21:49,693 ที่นี่เราต้องเลือกวิธีการตั้งค่า Hermes ผมแนะนำให้เลือก 341 00:21:49,693 --> 00:21:53,879 quick setup เพราะ full setup จะถามอะไรหลายอย่างที่เราต้องกำหนดค่า 342 00:21:53,879 --> 00:21:58,130 ทั้งที่เราไม่จำเป็นต้องใช้ และอันนี้ก็เป็นตัวเลือกที่แนะนำอยู่แล้ว 343 00:21:58,130 --> 00:22:02,960 แค่ทำให้แน่ใจว่าเลือกตัวเลือกนี้อยู่ ถ้าไม่ ก็ใช้ปุ่มลูกศรขึ้นลงบนคีย์บอร์ด 344 00:22:02,960 --> 00:22:06,309 ให้แน่ใจว่าเคอร์เซอร์อยู่ที่ตัวเลือกนี้ แล้วกด space 345 00:22:06,309 --> 00:22:09,465 bar หรือ enter ขั้นตอนถัดไปเราจะต้องสร้างบัญชีกับ 346 00:22:09,465 --> 00:22:12,878 Nous Research ถ้าคุณมีบัญชีอยู่แล้วก็ไม่ต้องสร้างใหม่ 347 00:22:12,878 --> 00:22:16,356 โดยพื้นฐานแล้ว ขั้นตอนนี้คือการผูก VPS หรือเซิร์ฟเวอร์ 348 00:22:16,356 --> 00:22:19,640 หรือการติดตั้ง Hermes นี้เข้ากับบัญชี Nous Research 349 00:22:19,640 --> 00:22:22,667 ของคุณ ตรงนี้คุณเลือกแผนฟรี (free subscription) 350 00:22:22,667 --> 00:22:26,467 ได้ Nous Research มีแผนเสียเงินบางแผนที่ให้คุณใช้กลุ่มโมเดล 351 00:22:26,467 --> 00:22:30,331 AI ของพวกเขาได้ แต่ในกรณีของผม ผมจะนำโมเดล AI ของตัวเองมาใช้ 352 00:22:30,331 --> 00:22:34,066 ดังนั้นผมจะเลือกตัวเลือกฟรี กด ctrl บนคีย์บอร์ดแล้วคลิกที่ 353 00:22:34,066 --> 00:22:37,609 URL นี้ ถ้ายังไม่มีบัญชี คุณจะเห็นตัวเลือกให้สร้างบัญชี 354 00:22:37,609 --> 00:22:43,984 แต่ในกรณีของผม ผมมีบัญชีอยู่แล้วและล็อกอินอยู่ มันจึงพาไปที่หน้าจอที่ผูกบัญชีกับการตั้งค่าได้โดยตรง 355 00:22:43,984 --> 00:22:48,235 ตรงนี้คลิก connect พอสำเร็จคุณจะได้รับการแจ้งเตือนว่าเชื่อมต่อแล้ว 356 00:22:48,235 --> 00:22:53,387 เมื่อกลับมาที่หน้าจอตัวติดตั้ง Hermes คุณจะเห็นว่ามันพาไปที่ขั้นตอนการเลือกโมเดล 357 00:22:53,387 --> 00:22:56,672 อย่างที่บอก ในกรณีของผม ผมจะไม่ใช้โมเดลใดๆ ที่ Nous 358 00:22:56,672 --> 00:23:00,472 Research ให้มา ผมจะนำโมเดลของตัวเองเข้ามา ตรงนี้คุณสามารถกด 359 00:23:00,472 --> 00:23:05,044 enter เพื่อข้ามขั้นตอนการเลือกโมเดลได้ ขั้นตอนถัดไปเราจะเลือกเครื่องมือ 360 00:23:05,044 --> 00:23:08,264 (tools) สองสามอย่างที่ใช้กับ Hermes Agent ได้ เช่น 361 00:23:08,264 --> 00:23:13,996 คุณสามารถให้ตัวเลือกแก่เอเจนต์ในการค้นหาบนอินเทอร์เน็ตและดึงข้อมูลจากเว็บไซต์เฉพาะบางแห่ง 362 00:23:13,996 --> 00:23:17,409 ซึ่งตรงนี้คุณสามารถใช้เครื่องมือที่เรียกว่า Firecrawl 363 00:23:17,409 --> 00:23:21,016 และก็เช่นเดียวกัน ยังมีเครื่องมืออื่นๆ สำหรับการสร้างภาพ 364 00:23:21,016 --> 00:23:25,138 การแปลงข้อความเป็นเสียง (text to speech) การแปลงเสียงเป็นข้อความ 365 00:23:25,138 --> 00:23:28,294 (speech to text) และอื่นๆ ตรงนี้คุณสามารถกด enter 366 00:23:28,294 --> 00:23:32,158 เพื่อใช้ทั้งหมด หรือจะยกเลิกการเลือกบางอันที่ไม่ต้องการก็ได้ 367 00:23:32,158 --> 00:23:35,442 ขั้นตอนถัดไปเราจะเลือกเทอร์มินัลแบ็กเอนด์ (terminal 368 00:23:35,442 --> 00:23:38,791 back end) ปล่อยเป็นค่าเริ่มต้นคือ local ได้เลย โดยกด 369 00:23:38,791 --> 00:23:43,557 space bar ขั้นตอนถัดไปเราจะเชื่อมต่อแพลตฟอร์มส่งข้อความที่ใช้คุยกับเอเจนต์ 370 00:23:43,557 --> 00:23:48,065 AI ทั้งหมดของเรา และตรงนี้แนะนำให้ตั้งค่า เพราะเราไม่อยากคุยกับเอเจนต์ 371 00:23:48,065 --> 00:23:54,119 AI ผ่านเทอร์มินัลบน VPS ทุกครั้ง เราอยากมีอินเทอร์เฟซที่ง่ายและเป็นมิตรกว่าสำหรับคุยกับเอเจนต์ 372 00:23:54,119 --> 00:23:59,142 AI ดังนั้นตรงนี้เราจะเลือก set up messaging ซึ่งก็เป็นตัวเลือกที่แนะนำอยู่แล้ว 373 00:23:59,142 --> 00:24:04,488 กด space bar บนคีย์บอร์ด แล้วมันจะแสดงรายการแพลตฟอร์มส่งข้อความทั้งหมดที่ตั้งค่ากับ 374 00:24:04,488 --> 00:24:09,125 Hermes อยู่ และอย่างที่เห็น มีให้เลือกเยอะมาก แต่ในการตั้งค่านี้เราจะใช้ 375 00:24:09,125 --> 00:24:12,281 Telegram ให้กดลูกศรลงบนคีย์บอร์ด แล้วตรงนี้อย่ากด 376 00:24:12,281 --> 00:24:15,307 enter เพราะถ้ากด enter มันจะข้ามส่วนนี้ไป ให้กด 377 00:24:15,307 --> 00:24:18,656 space bar เพื่อให้แน่ใจว่ามันถูกติ๊กเลือก แล้วค่อยกด 378 00:24:18,656 --> 00:24:23,809 enter ต่อไปเราจะสร้าง Telegram bot ซึ่งจะเป็นบอทที่เราใช้คุยกับเอเจนต์ที่จะสร้าง 379 00:24:23,809 --> 00:24:27,866 ในการตั้งค่า Telegram bot คุณเลือกได้ระหว่างการตั้งค่าอัตโนมัติ 380 00:24:27,866 --> 00:24:31,795 (automatic) หรือแบบ manual ในกรณีของผม ผมจะเลือกตัวเลือกกลางๆ 381 00:24:31,795 --> 00:24:37,140 คือ manual เพื่อโชว์ให้คุณเห็นว่าทำอย่างไร เผื่อภายหลังคุณต้องใช้กับแอปพลิเคชันอื่น 382 00:24:37,140 --> 00:24:40,682 สำหรับ manual ให้กด 2 แล้วกด enter แล้ว Hermes จะถามว่า 383 00:24:40,682 --> 00:24:44,224 Telegram bot token คืออะไร ในการหามัน ให้ไปที่ Telegram 384 00:24:44,224 --> 00:24:47,573 แล้วค้นหาบอทชื่อ BotFather คุณจะเห็นว่าบอท BotFather 385 00:24:47,573 --> 00:24:52,210 ตัวจริงมีผู้ใช้ต่อเดือนกว่า 7 ล้านคน เพื่อให้แน่ใจว่าคุณใช้บอทที่ถูกต้อง 386 00:24:52,210 --> 00:24:55,688 ระวังหน่อยนะครับ อย่างที่เห็น มี BotFather อยู่หลายตัว 387 00:24:55,688 --> 00:24:58,908 แต่ตัวที่คุณต้องใช้คือตัวที่มีเครื่องหมายถูกตรงนี้ 388 00:24:58,908 --> 00:25:02,321 และมียอดผู้ใช้กว่า 7 ล้านคนต่อเดือน ในการสร้างบอทใหม่ 389 00:25:02,321 --> 00:25:06,379 ใช้คำสั่ง /newbot แล้วกด enter หรือคลิกที่คำแนะนำที่มีให้ตรงนี้ 390 00:25:06,379 --> 00:25:10,050 ต่อไปเราต้องตั้งชื่อให้บอท ผมจะเรียกมันว่า KM ในกรณีของผม 391 00:25:10,050 --> 00:25:14,172 ย่อจาก Komputer Mechanic content creation OS พอตั้งชื่อเสร็จก็กด 392 00:25:14,172 --> 00:25:17,520 enter แล้วมันจะให้ใส่ username ของบอท ที่สำคัญมากคือ 393 00:25:17,520 --> 00:25:22,801 username ต้องลงท้ายด้วยคำว่า bot ผมเลยคัดลอกมาเพราะอยากให้ชื่อเดียวกันแต่เติมคำว่า 394 00:25:22,801 --> 00:25:26,859 bot ต่อท้าย แล้วกด enter บอทก็จะถูกสร้างให้คุณ เมื่อบอทถูกสร้าง 395 00:25:26,859 --> 00:25:31,496 BotFather จะให้คีย์เฉพาะตัวที่ยืนยันว่าคุณเป็นผู้สร้างหรือเจ้าของบอทนั้น 396 00:25:31,496 --> 00:25:35,296 ผมจะคลิกที่นี่เพื่อคัดลอกคีย์ เพราะนั่นคือสิ่งที่ตัวติดตั้ง 397 00:25:35,296 --> 00:25:38,580 Hermes กำลังถาม และผมจะวางคีย์ลงตรงนี้ แล้วกด enter 398 00:25:38,580 --> 00:25:41,929 ขั้นตอนนี้เป็นขั้นตอนที่แนะนำอย่างยิ่ง Hermes ถามว่า 399 00:25:41,929 --> 00:25:46,502 คุณต้องการกำหนดผู้ใช้บางคนที่เป็นคนเดียวที่ได้รับอนุญาตให้คุยกับบอทไหม? 400 00:25:46,502 --> 00:25:49,722 อันนี้สำคัญมากๆ เพราะถ้ามีคนรู้ username ของบอทคุณ 401 00:25:49,722 --> 00:25:53,071 คุณคงไม่อยากให้พวกเขาคุยกับบอทได้ เราจึงจะบอก Hermes 402 00:25:53,071 --> 00:25:56,935 ว่า "เฮ้ ให้ผมเป็นคนเดียวที่คุยกับบอทนี้ได้" และวิธีเดียวที่ 403 00:25:56,935 --> 00:26:00,091 Hermes จะรู้ว่าคุณคือใครคือการให้ Hermes รู้ user 404 00:26:00,091 --> 00:26:04,406 ID ของคุณใน Telegram ในการหา Telegram user ID เราจะใช้บอทที่ชื่อว่า 405 00:26:04,406 --> 00:26:07,755 User Info Bot ซึ่งมีผู้ใช้กว่า 400,000 คน มีบอทอื่นๆ 406 00:26:07,755 --> 00:26:11,039 อีกเยอะ ดังนั้นต้องแน่ใจว่าใช้ตัวที่ถูกต้อง ในการหา 407 00:26:11,039 --> 00:26:14,324 user ID คุณแค่ส่งข้อความอะไรก็ได้ไปให้บอท เช่น "hi" 408 00:26:14,324 --> 00:26:18,252 แล้วบอทจะตอบกลับด้วย user ID ของคุณ ผมจะคลิกที่นี่เพื่อคัดลอก 409 00:26:18,252 --> 00:26:21,344 user ID กลับมาที่เทอร์มินัลการติดตั้ง Hermes วาง 410 00:26:21,344 --> 00:26:24,886 user ID แล้วกด enter จากนั้น Hermes จะถามว่าต้องการตั้ง 411 00:26:24,886 --> 00:26:29,265 user ID นี้เป็น home channel ไหม นั่นหมายความว่าในแชทที่คุณคุยกับบอท 412 00:26:29,265 --> 00:26:33,902 เมื่อไหร่ก็ตามที่ Hermes gateway รีสตาร์ทหรือมีอะไรเกี่ยวกับระบบเกิดขึ้น 413 00:26:33,902 --> 00:26:36,929 คุณจะได้รับการแจ้งเตือนในหน้าต่างแชทนี้ พิมพ์ Y 414 00:26:36,929 --> 00:26:40,149 แทน yes แล้วกด enter จากนั้นจะถามว่าต้องการติดตั้ง 415 00:26:40,149 --> 00:26:43,562 Hermes gateway เป็น system service ไหม อันนี้สำคัญมาก 416 00:26:43,562 --> 00:26:48,521 เพราะเมื่อไหร่ก็ตามที่เซิร์ฟเวอร์ VPS รีสตาร์ทเพราะการอัปเดตระบบหรืออะไรก็ตาม 417 00:26:48,521 --> 00:26:52,192 Hermes gateway จะเริ่มทำงานโดยอัตโนมัติ ซึ่งมีประโยชน์มาก 418 00:26:52,192 --> 00:26:55,413 คุณจะได้ไม่ต้องเริ่มมันด้วยตัวเองทุกครั้ง กด Y แทน 419 00:26:55,413 --> 00:26:58,826 yes แล้วกด enter แล้วตรงนี้จะถามว่าต้องการรัน gateway 420 00:26:58,826 --> 00:27:02,110 แบบไหน ในกรณีของเราเราจะใช้ system service กด enter 421 00:27:02,110 --> 00:27:05,395 จากนั้นจะถามอีกครั้งว่าต้องการรันและติดตั้ง gateway 422 00:27:05,395 --> 00:27:08,422 เป็น background system service ไหม กด Y แทน yes 423 00:27:08,422 --> 00:27:11,578 แล้วกด enter แล้วการติดตั้ง Hermes ก็เสร็จสมบูรณ์ 424 00:27:11,578 --> 00:27:15,313 สำคัญมากตรงนี้ เราจะต้องโหลดเชลล์ใหม่เพื่อที่เราจะได้พิมพ์ 425 00:27:15,313 --> 00:27:18,855 hermes แล้วมันจะเปิดแอปพลิเคชัน Hermes ในการทำอย่างนั้น 426 00:27:18,855 --> 00:27:23,041 ให้คัดลอกคำสั่งที่เขาให้ไว้ตรงนี้ วางกลับเข้าไปในเทอร์มินัลแล้วกด 427 00:27:23,041 --> 00:27:26,197 enter มันจะรีสตาร์ทเชลล์ให้คุณ จำไว้ว่าเราติดตั้ง 428 00:27:26,197 --> 00:27:29,417 Hermes เสร็จแล้ว แต่ในกรณีของผม ผมไม่ได้เลือกโมเดล 429 00:27:29,417 --> 00:27:34,119 AI ใดๆ เพราะอยากนำโมเดล AI ของตัวเองมาใช้ ดังนั้นตรงนี้เราจะกำหนดค่าโมเดล 430 00:27:34,119 --> 00:27:38,112 AI ของเราเอง และผมทำแบบนี้เพื่อให้คุณได้เรียนรู้วิธีเพิ่มโมเดล 431 00:27:38,112 --> 00:27:41,267 AI ของคุณเองในภายหลัง ถ้าในอนาคตอยากเพิ่มโมเดล AI 432 00:27:41,267 --> 00:27:45,389 คุณสามารถขอให้เอเจนต์ AI ทำสิ่งนี้ให้คุณได้ แต่ผมไม่แนะนำวิธีนี้ 433 00:27:45,389 --> 00:27:50,090 เพราะในกรณีส่วนใหญ่เอเจนต์ AI ไม่ได้ฉลาดพอ มักจะทำให้การกำหนดค่าของคุณพัง 434 00:27:50,090 --> 00:27:53,246 ดังนั้นเรื่องแบบนี้ผมชอบทำเอง สำหรับว่าจะใช้โมเดล 435 00:27:53,246 --> 00:27:56,531 AI ตัวไหน ก็แล้วแต่คุณเลย แต่สิ่งที่ผมใช้บ่อยที่สุด 436 00:27:56,531 --> 00:27:59,558 และหลายคนอาจยังไม่รู้คือ ถ้าคุณมีการสมัครสมาชิก 437 00:27:59,558 --> 00:28:02,649 ChatGPT แบบ Plus หรือ Pro คุณจะสามารถใช้โมเดล AI 438 00:28:02,649 --> 00:28:06,256 จาก OpenAI ที่เรียกว่า Codex บน Hermes Agent ได้เกือบฟรี 439 00:28:06,256 --> 00:28:10,184 ถ้าคุณมีแผน 20 ดอลลาร์ก็ใช้ได้ ถ้ามีแผน Pro ก็ใช้ได้เหมือนกัน 440 00:28:10,184 --> 00:28:13,404 ผมไม่ค่อยแน่ใจว่าแผน Go มีให้หรือเปล่า ในกรณีของผม 441 00:28:13,404 --> 00:28:16,753 ผมใช้แผน Pro เป็นส่วนใหญ่ และขีดจำกัดการใช้งานของแผน 442 00:28:16,753 --> 00:28:20,811 Pro ก็มากกว่าแผน 20 ดอลลาร์อยู่แล้ว ถ้าไม่แน่ใจว่าต้องการอันไหน 443 00:28:20,811 --> 00:28:24,868 ก็เริ่มจากบัญชี Plus ก่อน ถ้าใช้งานถึงขีดจำกัด ก็อัปเกรดเป็นแผน 444 00:28:24,868 --> 00:28:28,217 Pro ได้เสมอ และอันนี้ยังค่อนข้างใจดีในแง่ขีดจำกัดของ 445 00:28:28,217 --> 00:28:31,308 token ด้วย คุณจะสามารถทำงานได้เยอะมากแม้จะใช้แผน 446 00:28:31,308 --> 00:28:34,786 20 ดอลลาร์ก็ตาม ข้อดีคือ มันไม่ใช่ระบบจ่ายตามการใช้งาน 447 00:28:34,786 --> 00:28:38,714 (pay as you go) เมื่อใช้ถึงขีดจำกัดก็จบ ไม่มีบิลเซอร์ไพรส์จาก 448 00:28:38,714 --> 00:28:41,935 OpenAI ว่า "เฮ้ คุณใช้เกินสิทธิ์การสมัครสมาชิกแล้ว 449 00:28:41,935 --> 00:28:46,829 ต้องจ่ายเพิ่ม" ไม่มีสิ่งนั้น ดังนั้นผมจึงเลือกตัวเลือกเหล่านี้เป็นการส่วนตัว 450 00:28:46,829 --> 00:28:49,856 เพราะไม่ต้องกังวลเรื่องบิลเซอร์ไพรส์อะไรแบบนั้น 451 00:28:49,856 --> 00:28:53,076 ส่วนตัวผมใช้แผน Pro เพราะผมมี Hermes setup หลายอัน 452 00:28:53,076 --> 00:28:56,747 ทำให้การใช้ token เยอะมาก และสำหรับบทช่วยสอนที่ทำให้ทุกคน 453 00:28:56,747 --> 00:29:00,032 ผมมักทดลองเกิน 10 ครั้ง ดังนั้นผมจึงต้องการขีดจำกัด 454 00:29:00,032 --> 00:29:03,252 token ที่สูงกว่าที่เขาให้มา ตอนที่ผมมีบัญชี OpenAI 455 00:29:03,252 --> 00:29:07,631 แค่บัญชีเดียว อันนี้ก็เพียงพอแล้วสำหรับผม อีกอย่างที่หลายคนไม่รู้คือ 456 00:29:07,631 --> 00:29:10,851 ถ้าคุณมีบัญชี X คุณก็สามารถใช้โมเดล Grok บน Hermes 457 00:29:10,851 --> 00:29:13,878 Agents ได้ฟรีเช่นกัน ไม่ว่าคุณจะมีบัญชี ChatGPT 458 00:29:13,878 --> 00:29:17,614 แบบเสียเงิน หรือสมัครสมาชิกแบบพรีเมียม คุณก็สามารถใช้โมเดล 459 00:29:17,614 --> 00:29:22,379 AI ของพวกเขาบน Hermes Agent ได้ฟรีทั้งคู่ ถ้าคุณไม่อยากใช้ตัวเลือกเหล่านี้ 460 00:29:22,379 --> 00:29:25,535 และอยากได้โมเดลเฉพาะ เช่น จาก Anthropic อย่าง o3, 461 00:29:25,535 --> 00:29:28,755 Sonnet หรืออะไรก็ตาม เราสามารถมาที่ OpenRouter ได้ 462 00:29:28,755 --> 00:29:33,135 OpenRouter มีคลังโมเดลเยอะมาก รวมถึงโมเดล AI ยอดนิยมทั้งหมดที่มีอยู่ 463 00:29:33,135 --> 00:29:36,162 คุณสามารถหาได้บน OpenRouter ข้อดีของ OpenRouter 464 00:29:36,162 --> 00:29:39,382 คือ พวกเขาจะให้ API key อันเดียวกับคุณ และด้วย API 465 00:29:39,382 --> 00:29:43,053 key อันเดียวนั้น คุณสามารถเข้าถึงโมเดลทั้งหมดที่มีอยู่ได้ 466 00:29:43,053 --> 00:29:46,208 ข้อควรระวังคือ OpenRouter เป็นแบบจ่ายตามการใช้งาน 467 00:29:46,208 --> 00:29:50,008 (pay as you go) ไม่ใช่แบบจ่ายรายเดือนแล้วใช้ถึงขีดจำกัดก็จบ 468 00:29:50,008 --> 00:29:53,100 คุณจ่ายตามที่ใช้ ยิ่งใช้มากยิ่งจ่ายมาก ผมหมายถึง 469 00:29:53,100 --> 00:29:57,608 จะใช้โมเดลไหนก็แล้วแต่คุณเลย เลือกตัวเลือกที่สมเหตุสมผลที่สุดสำหรับคุณ 470 00:29:57,608 --> 00:30:00,828 ในกรณีของผม ผมจะใช้ OpenAI ของผม เพราะผมมีการสมัคร 471 00:30:00,828 --> 00:30:04,821 ChatGPT อยู่ ในการใช้งาน ผมจะล้างหน้าจอก่อนเพื่อให้ดูสะอาดขึ้น 472 00:30:04,821 --> 00:30:09,973 แล้วพิมพ์คำสั่ง hermes model แล้วกด enter คำสั่งนี้จะโหลดโมเดลทั้งหมดที่ใช้ได้บน 473 00:30:09,973 --> 00:30:13,000 Hermes Agent ตอนนี้ ถ้าคุณมีบัญชี X แบบพรีเมียม 474 00:30:13,000 --> 00:30:18,732 ตัวเลือกของคุณก็จะอยู่ตรงนี้ คือ xAI Grok กระบวนการจะเหมือนกันไม่ว่าคุณจะเลือกตัวเลือกไหน 475 00:30:18,732 --> 00:30:23,562 ในกรณีของผม ผมจะเลือกอันนี้โดยกด space bar แล้วตรงนี้เราจะมีตัวเลือกระหว่าง 476 00:30:23,562 --> 00:30:27,877 OpenAI API ถ้าเลือก API คุณจะจ่ายตามการใช้งาน ยิ่งใช้มากยิ่งจ่ายมาก 477 00:30:27,877 --> 00:30:30,904 และคุณต้องสร้าง API key เฉพาะเพื่อเรียกเก็บเงิน 478 00:30:30,904 --> 00:30:34,124 แต่ในการตั้งค่าของเรา เราจะใช้การสมัครสมาชิกของเรา 479 00:30:34,124 --> 00:30:37,151 ผมจะเลือก OpenAI Codex ในการทำอย่างนั้น เราจะกด 480 00:30:37,151 --> 00:30:40,629 ctrl แล้วคลิกที่ URL ที่ให้ไว้ตรงนี้ และในกระบวนการนี้ 481 00:30:40,629 --> 00:30:43,656 เราจะต้องกรอกโค้ดที่อยู่ตรงนี้ ให้ไฮไลต์โค้ดนี้ 482 00:30:43,656 --> 00:30:46,811 สำคัญมาก กด control+shift+C อย่ากด Ctrl+C เพราะใน 483 00:30:46,811 --> 00:30:50,740 Linux Ctrl+C ใช้ยกเลิกแอปพลิเคชัน และมันจะปิดหน้าจอทั้งหมดนี้ 484 00:30:50,740 --> 00:30:55,184 นี่คือเหตุผลที่ต้องกด control+shift+C จากนั้นลิงก์จะพาคุณไปที่หน้านี้ 485 00:30:55,184 --> 00:30:59,112 สิ่งที่ต้องทำคือล็อกอินเข้าบัญชี OpenAI ของคุณ ผมจะคลิกที่นี่ 486 00:30:59,112 --> 00:31:02,268 คลิก continue แล้วใส่โค้ดที่คัดลอกมาจากการติดตั้ง 487 00:31:02,268 --> 00:31:07,291 Hermes แล้วคลิก continue จากนั้นบัญชี OpenAI ของเราก็จะถูกผูกเข้ากับการตั้งค่า 488 00:31:07,291 --> 00:31:10,576 Hermes ของเรา พอกลับมาที่นี่จะเห็นว่าการยืนยันตัวตน 489 00:31:10,576 --> 00:31:14,118 (authentication) เสร็จสิ้น แล้วตรงนี้จะถามให้เลือกโมเดล 490 00:31:14,118 --> 00:31:17,854 AI ตรงนี้คุณสามารถใช้โมเดลไหนก็ได้ที่มี จำไว้ว่ายิ่งเลขสูง 491 00:31:17,854 --> 00:31:21,074 เช่น 5.6 ใช้ token เยอะกว่า 5.4 มาก ส่วน 5.5 ก็ใช้ 492 00:31:21,074 --> 00:31:24,101 token สูงกว่า 5.4 เช่นกัน ในกรณีของผม ผมใช้ 5.5 493 00:31:24,101 --> 00:31:27,900 เป็นส่วนใหญ่ เพราะมันยังเป็นโมเดลที่ทรงพลังมาก และผมอยากได้ 494 00:31:27,900 --> 00:31:30,927 token เยอะๆ แต่ถ้าคุณอยู่บนแผน 100 ดอลลาร์และมี 495 00:31:30,927 --> 00:31:34,147 token เยอะ คุณก็เลือก 5.6 ได้เช่นกัน แล้วแต่คุณเลย 496 00:31:34,147 --> 00:31:39,815 ผมจะเลือก 5.5 ตรงนี้ กด space bar แล้วคุณจะเห็นว่ามันบอกว่าโมเดลเริ่มต้นของผมถูกตั้งเป็น 497 00:31:39,815 --> 00:31:44,709 GPT-5.5 แล้ว ก่อนที่เราจะไปที่ Telegram เพื่อทดสอบว่าทุกอย่างทำงานได้หรือไม่ 498 00:31:44,709 --> 00:31:47,865 จากการติดตั้ง Hermes และการกำหนดค่าโมเดล ให้พิมพ์ 499 00:31:47,865 --> 00:31:51,150 hermes แล้วมันจะเปิดสิ่งที่เรียกว่า Hermes terminal 500 00:31:51,150 --> 00:31:55,271 user interface (TUI) ซึ่งจะเป็นกล่องแชทที่คุณสามารถคุยกับเอเจนต์ 501 00:31:55,271 --> 00:32:00,166 AI เริ่มต้นของคุณเพื่อให้แน่ใจว่าทุกอย่างทำงาน แต่หลายคนอย่างผมไม่ใช้ส่วนนี้ 502 00:32:00,166 --> 00:32:03,515 เพราะคุณต้องล็อกอินเข้าสู่ VPS แล้วมาที่หน้านี้แปลกๆ 503 00:32:03,515 --> 00:32:07,250 เพื่อคุยกับเอเจนต์ AI เราแค่อยากให้แน่ใจว่าการตั้งค่าทำงาน 504 00:32:07,250 --> 00:32:10,535 นี่คือเหตุผลที่ผมมาที่นี่ ตรงนี้ผมจะส่งข้อความง่ายๆ 505 00:32:10,535 --> 00:32:14,077 อย่าง "hi" และถ้าเอเจนต์ตอบสนอง ก็หมายความว่าการติดตั้ง 506 00:32:14,077 --> 00:32:17,233 Hermes ทำงาน มันยังหมายความว่าการกำหนดค่าโมเดล AI 507 00:32:17,233 --> 00:32:20,324 ทำงานด้วย และตรงนี้คุณจะเห็นว่าเอเจนต์ตอบกลับว่า 508 00:32:20,324 --> 00:32:24,639 "hi what can I help you with?" นั่นหมายความว่าการติดตั้งของเราทำงาน 509 00:32:24,639 --> 00:32:28,374 การกำหนดค่าโมเดล AI ทำงาน ในการออกจากหน้าจอนี้ คุณสามารถกด 510 00:32:28,374 --> 00:32:31,401 Ctrl+C บนคีย์บอร์ด หรือพิมพ์ /exit แล้วกด enter 511 00:32:31,401 --> 00:32:34,428 มันจะพาคุณออกจาก Hermes terminal user interface 512 00:32:34,428 --> 00:32:37,713 ขอพูดถึงสปอนเซอร์ของวิดีโอวันนี้สักครู่ คือ Sudalis 513 00:32:37,713 --> 00:32:41,191 AI และอันนี้น่าฟังมาก ปัญหาที่พวกเขาแก้คือ บริษัทต่างๆ 514 00:32:41,191 --> 00:32:45,506 กำลังจมอยู่กับ AI ที่ไม่เชื่อมต่อถึงกัน บริษัทส่วนใหญ่ใช้เครื่องมือ 515 00:32:45,506 --> 00:32:48,597 AI ที่ไม่แม้แต่จะคุยกัน เครื่องมือหนึ่งทำสิ่งนี้ 516 00:32:48,597 --> 00:32:53,363 อีกอันทำสิ่งนั้น แต่ไม่มีอะไรเชื่อมต่อกัน จึงไม่มีอะไรทำงานร่วมกันได้จริงๆ 517 00:32:53,363 --> 00:32:57,356 Sudalis AI สร้างระบบที่เชื่อมทุกอย่างเข้าด้วยกันเป็นสแต็กเดียว 518 00:32:57,356 --> 00:33:01,284 ลองเข้าไปดูที่ sudalis.ai โดยมีลิงก์ทั้งหมดอยู่ในส่วนคำอธิบาย 519 00:33:01,284 --> 00:33:05,084 ขอบคุณ Sudalis AI ที่สปอนเซอร์วิดีโอนี้ ต่อไปเราจะกลับมาที่ 520 00:33:05,084 --> 00:33:08,304 BotFather เมื่อมันสร้างบอทให้เราแล้ว มันยังให้ URL 521 00:33:08,304 --> 00:33:11,331 มา ซึ่งเราสามารถเริ่มคุยกับบอทได้ ตรงนี้คลิกที่ 522 00:33:11,331 --> 00:33:14,680 URL นี้ มันจะเปิดแชทใหม่กับบอทที่สร้างไว้ คุณแค่คลิก 523 00:33:14,680 --> 00:33:18,029 start นี่จะส่งข้อความแบบ start ไปให้บอท แต่บอทไม่ตอบ 524 00:33:18,029 --> 00:33:22,022 เพราะมันไม่เข้าใจว่า start หมายถึงอะไร เราจึงจะส่งข้อความอย่าง 525 00:33:22,022 --> 00:33:25,371 "hi" ไปให้บอท และถ้าทุกอย่างทำงาน บอทจะเริ่มพิมพ์ตอบ 526 00:33:25,371 --> 00:33:29,750 ถ้าคุณเห็นสัญลักษณ์กำลังพิมพ์ ก็หมายความว่าบอทถูกตั้งค่าอย่างถูกต้อง 527 00:33:29,750 --> 00:33:32,842 และบอทจะตอบกลับคุณ บอทตอบว่า "hi what can I help 528 00:33:32,842 --> 00:33:36,126 you with today" เอาล่ะ เราจะไม่คุยกับบอทในเซสชันนี้ 529 00:33:36,126 --> 00:33:39,539 สิ่งที่เราอยากสร้างคือ Telegram group สำหรับบอทของเรา 530 00:33:39,539 --> 00:33:42,824 เหตุผลที่เราจะสร้าง group คือ เราจะมีหัวข้อ (topic) 531 00:33:42,824 --> 00:33:46,173 สามหัวข้อ หัวข้อแรกคือที่ที่เราจะคุยกับบอท ซึ่งก็คือ 532 00:33:46,173 --> 00:33:50,037 orchestrator ของเรา จากนั้นเราจะมีหัวข้อที่สองหรือช่องที่สอง 533 00:33:50,037 --> 00:33:54,803 ใช้คุยกับเอเจนต์นักพัฒนา (developer agent) ที่จะสร้างแดชบอร์ดทั้งหมดให้เรา 534 00:33:54,803 --> 00:33:59,569 และเราจะมีช่องที่สามซึ่งเราจะเรียกว่า studio นั่นคือที่ที่เราจะระดมความคิด 535 00:33:59,569 --> 00:34:02,918 (brainstorm) ไอเดียกับเอเจนต์ของเรา ในการสร้าง group 536 00:34:02,918 --> 00:34:06,138 มีข้อกำหนดเบื้องต้นว่า คุณต้องมีคนอย่างน้อยสองคนใน 537 00:34:06,138 --> 00:34:10,066 group เราจึงต้องใช้ username ของบอทเพื่อที่จะเพิ่มบอทเข้าไปใน 538 00:34:10,066 --> 00:34:13,995 group ที่จะสร้าง ผมจะคลิกที่ชื่อบอทตรงนี้ แล้วคลิกเพื่อคัดลอก 539 00:34:13,995 --> 00:34:17,215 username ของบอท จากนั้นปิดกล่องโต้ตอบนี้ แล้วสร้าง 540 00:34:17,215 --> 00:34:21,981 group ใหม่ได้ ในการสร้าง group ใหม่ ให้คลิกที่เมนูแฮมเบอร์เกอร์ทางด้านซ้าย 541 00:34:21,981 --> 00:34:26,167 แล้วคลิก new group จากนั้นตั้งชื่อ group ในกรณีของผมจะเรียกมันว่า 542 00:34:26,167 --> 00:34:30,804 KM Content OS แล้วคลิก next แล้วเราจะต้องเพิ่มคนอย่างน้อยหนึ่งคนเข้าไปใน 543 00:34:30,804 --> 00:34:33,831 group นั่นคือเหตุผลที่เราคัดลอก username ของบอท 544 00:34:33,831 --> 00:34:36,858 ผมวาง username แล้วคลิกเลือกบอท แล้วคลิก create 545 00:34:36,858 --> 00:34:40,851 ตอนนี้เราก็มี group ของเราแล้ว แต่อย่างที่บอก เราอยากสร้างช่อง 546 00:34:40,851 --> 00:34:45,874 (channel) ต่างๆ ใน group นี้ เราจะต้องทำให้บอทที่เราเพิ่มเข้าไปเป็นผู้ดูแลระบบ 547 00:34:45,874 --> 00:34:49,159 (administrator) เพื่อให้บอทสามารถพูดใน group นี้ได้ 548 00:34:49,159 --> 00:34:52,443 คลิกที่จุดสามจุดตรงนี้ ไปที่ group info คลิก manage 549 00:34:52,443 --> 00:34:55,470 เลื่อนลงมาตรงนี้คลิก administrators จากนั้น add 550 00:34:55,470 --> 00:34:58,755 administrator เลือกบอทที่เราสร้างไว้ เพราะบอทอยู่ใน 551 00:34:58,755 --> 00:35:02,619 group นั้นแล้ว แล้วตรวจสอบสิทธิ์ (permissions) ที่อยากให้บอท 552 00:35:02,619 --> 00:35:06,032 แล้วคลิก save ตอนนี้คุณจะเห็นว่าบอทของเรามีสิทธิ์เป็น 553 00:35:06,032 --> 00:35:09,188 admin แล้ว จากนั้นคลิก close ระหว่างที่อยู่ตรงนี้ 554 00:35:09,188 --> 00:35:12,215 เราจะเปิดใช้งานสิ่งที่ผมเรียกว่าช่อง (channels) 555 00:35:12,215 --> 00:35:15,757 ด้วย โดยค่าเริ่มต้น Telegram ไม่ได้เปิดฟีเจอร์ channels 556 00:35:15,757 --> 00:35:19,428 หรือที่เรียกว่า topics ใน Telegram ให้คุณ ในการเปิดใช้งาน 557 00:35:19,428 --> 00:35:23,614 ให้คลิกที่ส่วน topics ตรงนี้ ซึ่งในกรณีของผมปิดอยู่โดยค่าเริ่มต้น 558 00:35:23,614 --> 00:35:27,800 คลิกที่มันแล้วเปิดใช้งานได้ จากนั้นตรงนี้คุณเลือกมุมมองที่ต้องการ 559 00:35:27,800 --> 00:35:30,892 ในกรณีนี้ผมจะเลือกตัวเลือกแบบ tabs แล้วคลิก save 560 00:35:30,892 --> 00:35:34,691 แล้วคลิก save อีกครั้ง จากนั้นปิดหน้านี้ได้ ทันทีที่เราเปิด 561 00:35:34,691 --> 00:35:38,298 topics คุณจะเห็นว่าเรามีช่องต่างๆ หลายช่องแล้ว เรามีช่อง 562 00:35:38,298 --> 00:35:41,518 all ที่จะเห็นข้อความทั้งหมดจากทุกช่อง และยังมีช่อง 563 00:35:41,518 --> 00:35:44,609 general ก่อนอื่นมาลองเปลี่ยนชื่อช่อง general กัน 564 00:35:44,609 --> 00:35:48,023 คลิกจุดสามจุดตรงนี้ ไปที่ edit แล้วตั้งชื่อช่องนี้ว่า 565 00:35:48,023 --> 00:35:51,565 orchestrator เพราะนี่คือช่องที่เราจะคุยกับบอทหลักของเรา 566 00:35:51,565 --> 00:35:54,785 คลิก save แล้วเราจะเริ่มคุยกับ orchestrator ที่นี่ 567 00:35:54,785 --> 00:35:59,100 ขอผมส่งข้อความในแชทตรงนี้ดู เมื่อผมส่ง "hi" แล้วบอทของเรากำลังพิมพ์ 568 00:35:59,100 --> 00:36:02,771 แปลว่า orchestrator อยู่ในแชทนี้แล้ว เราสามารถเริ่มคุยกับ 569 00:36:02,771 --> 00:36:06,442 orchestrator ได้ เราจะสร้างอีกสองช่อง แต่ยังไม่ถึงตอนนั้น 570 00:36:06,442 --> 00:36:11,079 ขอสร้างฐานรากให้เสร็จก่อน แล้วพอไปถึงตรงนั้น เราค่อยผ่านกระบวนการนั้นกัน 571 00:36:11,079 --> 00:36:14,685 พรอมป์ต์ทั้งหมดที่ผมจะใช้ในการ build ครั้งนี้สามารถหาได้ 572 00:36:14,685 --> 00:36:18,034 ถ้าคุณสนใจ คุณสามารถรับมันได้ด้วยการสนับสนุนเล็กน้อย 573 00:36:18,034 --> 00:36:23,895 (token of support) บนเว็บไซต์ของผม หรือถ้าคุณเป็นสมาชิกคอมมูนิตี้ของผมก็สามารถรับได้เช่นกัน 574 00:36:23,895 --> 00:36:27,180 ถ้าอยากเป็นสมาชิกคอมมูนิตี้ ราคา 10 ดอลลาร์ต่อเดือน 575 00:36:27,180 --> 00:36:30,271 คุณจะสามารถเข้าถึงพรอมป์ต์ทั้งหมด เทมเพลตทั้งหมด 576 00:36:30,271 --> 00:36:35,552 และพรอมป์ต์บทช่วยสอนทั้งหมดที่ผมมีบนช่องได้ และนี่ยังช่วยสนับสนุนงานที่ผมทำอีกด้วย 577 00:36:35,552 --> 00:36:38,579 มีความพยายามอย่างมากในการสร้างบทช่วยสอนเหล่านี้ 578 00:36:38,579 --> 00:36:41,799 แบบฟอร์มเหล่านี้ที่ผมให้คุณ โมเดล AI ที่ผมใช้ในการ 579 00:36:41,799 --> 00:36:49,077 build ก็ค่อนข้างแพงเช่นกัน ผมจึงต้องการการสนับสนุนเล็กน้อยเพื่อช่วยให้ผมสามารถนำบทช่วยสอนเหล่านี้มาสู่คุณต่อไปได้ 580 00:36:49,077 --> 00:36:52,812 ถ้าอยากเข้าร่วมกลุ่มสมาชิกของผม ผมยินดีต้อนรับคุณอย่างยิ่ง 581 00:36:52,812 --> 00:36:57,127 เรายังมีช่อง Telegram ที่คุณสามารถเข้าถึงตัวผมหรือทุกคนในคอมมูนิตี้ 582 00:36:57,127 --> 00:37:01,442 ถามคำถามอะไรก็ได้ แล้วทุกคนที่นั่นยินดีช่วยเหลือคุณกับคำถามที่คุณมี 583 00:37:01,442 --> 00:37:04,662 และผมยังสร้างตัวติดตั้งอัตโนมัติ (auto installers) 584 00:37:04,662 --> 00:37:09,685 ด้วย เช่น สำหรับการตั้งค่าที่ผมกำลังสร้าง ผมกำลังสร้างตัวติดตั้งอัตโนมัติที่จะ 585 00:37:09,685 --> 00:37:16,061 build ทั้งหมดให้คุณภายในไม่ถึง 5 นาที และสิ่งนี้จะพร้อมให้สมาชิกคอมมูนิตี้หรือสมาชิกของผมใช้เช่นกัน 586 00:37:16,061 --> 00:37:19,797 ถ้าอยากเข้าร่วม ผมยินดีต้อนรับคุณ สิ่งที่ผมทำตอนนี้คือย้าย 587 00:37:19,797 --> 00:37:22,952 Telegram ไปทางซ้าย และวางพรอมป์ต์ทั้งหมดไว้ทางขวา 588 00:37:22,952 --> 00:37:26,366 เพื่อให้คัดลอกได้ง่ายขึ้น เมื่อไหร่ก็ตามที่คุณตั้งค่า 589 00:37:26,366 --> 00:37:29,650 Hermes ครั้งแรก บอทไม่รู้ว่าคุณเป็นใคร บอทไม่มีชื่อ 590 00:37:29,650 --> 00:37:32,999 บอทไม่รู้ว่ามันจะช่วยคุณในสิ่งที่คุณอยากทำได้อย่างไร 591 00:37:32,999 --> 00:37:37,185 สิ่งแรกที่ผมแนะนำผู้ใช้เสมอคือ "เฮ้ ให้บอทเข้าใจก่อนว่าคุณเป็นใคร 592 00:37:37,185 --> 00:37:40,212 ตั้งชื่อให้บอท บอกชื่อคุณให้บอทรู้ และบอกคร่าวๆ 593 00:37:40,212 --> 00:37:44,076 ว่ามันจะช่วยคุณได้อย่างไร" พรอมป์ต์แรกที่ผมจะให้บอทคืออันนี้ 594 00:37:44,076 --> 00:37:47,941 "ชื่อของคุณคือ orchestrator คุณจะเป็นผู้ประสานงานระดับสูงสุด 595 00:37:47,941 --> 00:37:51,290 (top level coordinator) สำหรับการตั้งค่า multi-agent 596 00:37:51,290 --> 00:37:56,506 ของผม และผมคือเจ้าของและมีอำนาจสูงสุด" แล้วตรงนี้คุณจะกรอกชื่อของคุณให้เอเจนต์รู้ 597 00:37:56,506 --> 00:38:00,628 คุณจะให้ชื่อบรานด์ของคุณแก่เอเจนต์ ให้แฮนเดิลโซเชียลมีเดียของคุณ 598 00:38:00,628 --> 00:38:04,685 เพราะจำไว้ว่าเรากำลังสร้างเครื่องจักรสร้างคอนเทนต์โซเชียลมีเดีย 599 00:38:04,685 --> 00:38:08,034 คุณจะบอกเอเจนต์ว่าบรานด์ของคุณสอนอะไร อันนี้สำคัญมาก 600 00:38:08,034 --> 00:38:15,312 เพราะเราจะมีแดชบอร์ดที่สร้างไอเดียให้เรา และเพื่อให้เอเจนต์สามารถสร้างไอเดียคอนเทนต์หรือไอเดียโพสต์เหล่านี้ให้คุณ 601 00:38:15,312 --> 00:38:20,786 พวกมันต้องเข้าใจว่าคุณกำลังสร้างอะไร นี่คือเหตุผลที่ส่วนนี้สำคัญแบบไม่สามารถต่อรองได้ 602 00:38:20,786 --> 00:38:24,135 คุณยังสามารถบอกเอเจนต์ได้ว่ากลุ่มเป้าหมาย (audience) 603 00:38:24,135 --> 00:38:27,162 ของคุณคือใครและอื่นๆ ผมจะคัดลอกอันนี้ วางตรงนี้ 604 00:38:27,162 --> 00:38:30,189 แล้วกรอกข้อมูลในส่วนต่างๆ สำหรับการ build ของผม 605 00:38:30,189 --> 00:38:33,216 ตรงนี้ผมบอกว่า "เฮ้ ผมชื่อ Larry บรานด์ของผมคือ 606 00:38:33,216 --> 00:38:36,371 Komputer Mechanic แฮนเดิลโซเชียลของผมคือ komputer 607 00:38:36,371 --> 00:38:39,463 mechanic และตรงนี้ผมสอนนักสร้างเทคนิค (technical 608 00:38:39,463 --> 00:38:43,971 builders) ให้สร้างเอเจนต์ AI และระบบอัตโนมัติ กลุ่มเป้าหมายของผมคือใคร 609 00:38:43,971 --> 00:38:47,127 น้ำเสียงของผมคืออะไร และเขตเวลาทำงานของผมคืออะไร" 610 00:38:47,127 --> 00:38:50,282 เขตเวลาทำงานสำคัญ เช่น ตอนที่เอเจนต์สร้างงาน cron 611 00:38:50,282 --> 00:38:54,082 เอเจนต์จะได้รู้ว่าควรติดต่อคุณตอนไหน ตอนนี้ผมจะส่งอันนี้ให้ 612 00:38:54,082 --> 00:38:58,784 orchestrator เพื่อให้มันรู้จักว่าผมเป็นใคร และเรากำลังจะสร้างอะไรในวันนี้ 613 00:38:58,784 --> 00:39:01,810 จากนั้น orchestrator ตอบกลับว่า "เฮ้ เข้าใจแล้ว 614 00:39:01,810 --> 00:39:05,031 ผมคือ orchestrator และคุณคือ Larry บรานด์ของคุณคือ 615 00:39:05,031 --> 00:39:08,380 Komputer Mechanic และคอนเทนต์ของคุณเป็นแบบตรงไปตรงมา 616 00:39:08,380 --> 00:39:14,240 สอนนักสร้างให้สร้างเอเจนต์และระบบอัตโนมัติ" พรอมป์ต์สองอันถัดไปนี้คือสิ่งที่ผมแนะนำให้คุณทำ 617 00:39:14,240 --> 00:39:17,525 พรอมป์ต์ที่สองคือการบอกให้ orchestrator สัมภาษณ์คุณ 618 00:39:17,525 --> 00:39:21,324 สิ่งที่คุณให้ orchestrator ตรงนี้คือกระดูกสันหลังหรือรากฐาน 619 00:39:21,324 --> 00:39:24,738 แต่ยังมีอีกมากที่คุณให้เอเจนต์เรียนรู้เกี่ยวกับคุณได้ 620 00:39:24,738 --> 00:39:29,890 ดังนั้นใช้เวลากับพรอมป์ต์นี้ เพราะมันจะถามคำถามคุณเพื่อทำความเข้าใจว่าคุณเป็นใคร 621 00:39:29,890 --> 00:39:34,656 การตั้งค่าที่อยากสร้าง กลุ่มเป้าหมาย และอื่นๆ แต่ผมจะข้ามอันนี้ในบทช่วยสอน 622 00:39:34,656 --> 00:39:37,940 เพราะเดี๋ยวบทช่วยสอนจะยาวเกินไป เพราะสำหรับการทดสอบ 623 00:39:37,940 --> 00:39:42,255 มันจะถามคุณประมาณ 10-15 คำถาม ผมจะข้ามเพื่อไม่ให้บทช่วยสอนยาวเกินไป 624 00:39:42,255 --> 00:39:45,669 สิ่งที่สองที่ผมแนะนำคือกฎการปฏิบัติงานถาวร (permanent 625 00:39:45,669 --> 00:39:49,275 operating rules) เวลาทำงานกับเอเจนต์ แนะนำเสมอให้เอเจนต์ 626 00:39:49,275 --> 00:39:52,367 ให้แผนกับคุณเสมอก่อนที่จะทำอะไรก็ตามที่มันอยากทำ 627 00:39:52,367 --> 00:39:58,098 และเมื่อเอเจนต์กำลังทำงาน คุณอยากให้เอเจนต์อัปเดตคุณตลอดกระบวนการว่ามันกำลังสร้างอะไรอยู่ 628 00:39:58,098 --> 00:40:02,285 มิฉะนั้นบางครั้งคุณก็จะนั่งอยู่ในความมืด ไม่รู้ว่างานเสร็จหรือยัง 629 00:40:02,285 --> 00:40:05,698 นี่คือเหตุผลที่ผมเตรียมกฎการปฏิบัติงานถาวรเหล่านี้ไว้ 630 00:40:05,698 --> 00:40:10,850 ซึ่งคุณสามารถให้เอเจนต์ของคุณได้เช่นกัน มันเป็นตัวเลือกว่าคุณอยากมีมันไว้หรือไม่ 631 00:40:10,850 --> 00:40:14,006 ผมจะข้ามส่วนนี้ไปเช่นกัน ไม่งั้นในการ build ของผม 632 00:40:14,006 --> 00:40:18,450 orchestrator จะถามหาวางแผนตลอดเวลาว่าผมต้องพิมพ์อนุมัติก่อนที่มันจะทำ 633 00:40:18,450 --> 00:40:22,314 และนั่นจะทำให้การ build ช้าลง ตอนนี้เราจะเริ่มส่วนหลักของการ 634 00:40:22,314 --> 00:40:26,114 build เราจะบอก orchestrator ว่า "เฮ้ เราจะสร้างเอเจนต์ต่างๆ 635 00:40:26,114 --> 00:40:30,300 ขึ้นมา เราจะสร้างเอเจนต์อย่าง Atlas ที่ดูแลการสร้างไอเดียคอนเทนต์ 636 00:40:30,300 --> 00:40:33,327 carousel เราจะมี Vera เป็นนักเขียน เราจะมี Kite 637 00:40:33,327 --> 00:40:36,418 เป็นนักออกแบบ และ Kite ยังเป็นนักพัฒนาของเราด้วย 638 00:40:36,418 --> 00:40:39,638 และเราจะมี Orion เป็นนักเผยแพร่ที่เผยแพร่สิ่งต่างๆ 639 00:40:39,638 --> 00:40:43,438 ไปยังช่องทางที่เราต้องการ" และตรงนี้เรากำลังให้ภาพรวมคร่าวๆ 640 00:40:43,438 --> 00:40:47,044 แก่ orchestrator ว่าอยากสร้างอะไร และเราบอก orchestrator 641 00:40:47,044 --> 00:40:50,522 ว่า "เฮ้ คุณเป็นหนึ่งในห้าเอเจนต์ที่เราจะสร้างอยู่แล้ว 642 00:40:50,522 --> 00:40:54,129 คุณจะเป็นเอเจนต์หลัก และคุณคือคนที่ผมกำลังคุยด้วยตอนนี้" 643 00:40:54,129 --> 00:40:57,478 และที่สำคัญ ผมบอกมันว่าตอนที่มันสร้างโปรไฟล์เหล่านี้ 644 00:40:57,478 --> 00:41:00,955 มันไม่ควรสร้างโปรไฟล์ให้ตัวเอง เพราะผมเคยทดสอบกับโมเดล 645 00:41:00,955 --> 00:41:04,498 AI บางตัวที่สร้างโปรไฟล์ให้ตัวเองด้วย ซึ่งไม่สมเหตุสมผล 646 00:41:04,498 --> 00:41:09,135 นี่คือเหตุผลที่ผมบอกมันตรงนี้ว่า "คุณไม่จำเป็นต้องสร้างโปรไฟล์ให้ตัวเอง" 647 00:41:09,135 --> 00:41:13,772 ผมจะคัดลอกพรอมป์ต์นี้และให้ orchestrator เพื่อเตรียมมันว่าอะไรจะถูกสร้าง 648 00:41:13,772 --> 00:41:17,249 แล้วผมยังบอกมันว่า "เฮ้ ยืนยันว่าคุณเข้าใจแผน ห้าบทบาท 649 00:41:17,249 --> 00:41:21,113 และการแมปชื่อโปรไฟล์ ก่อนที่คุณจะไปเปลี่ยนแปลงหรือสร้างอะไร" 650 00:41:21,113 --> 00:41:25,364 และสิ่งที่ผมชอบเกี่ยวกับ Hermes คือ เมื่อไหร่ก็ตามที่คุณส่งอะไรให้ 651 00:41:25,364 --> 00:41:30,130 Hermes ที่มันเห็นว่ามีประโยชน์ในระยะยาว มันจะบันทึกสิ่งนั้นลงในหน่วยความจำ 652 00:41:30,130 --> 00:41:33,350 (memory) นี่คือเหตุผลที่คุณจะเห็นข้อความแบบ memory 653 00:41:33,350 --> 00:41:36,892 เสมอ นั่นหมายความว่ามีบางอย่างถูกเขียนลงหน่วยความจำแล้ว 654 00:41:36,892 --> 00:41:41,465 และยังไงก็ตาม cadence คือชื่อที่ผมตั้งให้กับระบบปฏิบัติการสร้างคอนเทนต์ 655 00:41:41,465 --> 00:41:45,780 (content creating OS) ที่เราจะทำงานด้วยวันนี้ จากนั้นมันก็แค่บอกว่า 656 00:41:45,780 --> 00:41:48,935 "ห้าบทบาทของ Cadence คือ orchestrator ซึ่งก็คือผม 657 00:41:48,935 --> 00:41:52,220 และโปรไฟล์อื่นๆ ที่เราจะสร้าง" และมันบอกว่า "คุณคือ 658 00:41:52,220 --> 00:41:57,759 Larry เจ้าของและผู้มีอำนาจตัดสินใจสูงสุด" พรอมป์ต์ถัดไปนี้จะเป็นพรอมป์ต์ที่สำคัญที่สุด 659 00:41:57,759 --> 00:42:00,850 นี่คือพรอมป์ต์ที่จะสร้างเอเจนต์ AI ที่เราต้องการ 660 00:42:00,850 --> 00:42:04,263 ผมจะส่งพรอมป์ต์นี้ให้ orchestrator ผมบอก orchestrator 661 00:42:04,263 --> 00:42:07,934 ว่า "เฮ้ สร้าง hermes profiles แบบ persistent ห้าโปรไฟล์" 662 00:42:07,934 --> 00:42:14,761 เหตุผลที่ผมใช้คำว่า persistent ก็เพราะ Hermes ยังสามารถสร้างเอเจนต์ที่ถูกเรียกเข้ามาทำงานแล้วก็ตายจากไปได้ 663 00:42:14,761 --> 00:42:18,625 (แบบชั่วคราว) แต่สิ่งที่ผมอยากสร้างคือเอเจนต์ที่ถูกสร้างถาวร 664 00:42:18,625 --> 00:42:22,618 หมายความว่าเมื่อไหร่ก็ตามที่เราต้องการ พวกมันจะอยู่ตรงนั้นเสมอ 665 00:42:22,618 --> 00:42:25,774 และเวลาสร้างเอเจนต์กับ Hermes จะมีเอเจนต์เริ่มต้น 666 00:42:25,774 --> 00:42:29,767 (default agent) หนึ่งตัวเสมอ มีเอเจนต์หนึ่งตัวที่อยู่บนสุดเสมอ 667 00:42:29,767 --> 00:42:35,370 ซึ่งก็คือ default agent และใต้ default agent คุณสามารถมีเอเจนต์ได้กี่ตัวก็ได้ตามต้องการ 668 00:42:35,370 --> 00:42:39,749 แต่จะมีเอเจนต์หนึ่งตัวอยู่บนสุดเสมอ นี่คือเหตุผลที่ในการตั้งค่าของผม 669 00:42:39,749 --> 00:42:43,227 ผมมักทำให้ default agent ที่อยู่บนสุดเป็น orchestrator 670 00:42:43,227 --> 00:42:46,705 แล้วมันก็สร้างเอเจนต์อื่นๆ ที่ทำงานใต้มัน ตัวอย่างเช่น 671 00:42:46,705 --> 00:42:49,732 ถ้ามีคนถามว่าสามารถมี orchestrator สองตัวได้ไหม 672 00:42:49,732 --> 00:42:53,660 โดยหลักการแล้วคุณมี orchestrator สองตัวได้ แต่นั่นหมายความว่า 673 00:42:53,660 --> 00:42:57,202 orchestrator หนึ่งตัวจะต้องอยู่ใต้ default orchestrator 674 00:42:57,202 --> 00:43:00,809 ซึ่งก็ทำได้เช่นกัน สุดท้ายก็แล้วแต่คุณว่าจะกำหนดค่ายังไง 675 00:43:00,809 --> 00:43:03,900 ในการสร้างโปรไฟล์ให้เอเจนต์ คุณต้องบอกเอเจนต์ว่า 676 00:43:03,900 --> 00:43:07,120 "เฮ้ ฉันในฐานะเอเจนต์คืออะไร" สำหรับเอเจนต์ทั้งหมด 677 00:43:07,120 --> 00:43:10,856 เราบอก orchestrator ให้เพิ่มข้อมูลนี้ลงในเอกสารที่เรียกว่า 678 00:43:10,856 --> 00:43:14,011 soul.md ดังนั้น soul.md คือเอกสารที่บอกเอเจนต์ว่า 679 00:43:14,011 --> 00:43:17,747 "เฮ้ ผมชื่อ Larry นี่คือสิ่งที่ผมทำ นี่คือคนที่ผมทำงานด้วย 680 00:43:17,747 --> 00:43:21,868 นี่คือระบบที่เราทำงานด้วย" และอื่นๆ นี่คือเหตุผลที่ในพรอมป์ต์นี้ 681 00:43:21,868 --> 00:43:26,699 สำหรับเอเจนต์ทั้งหมด ผมบอก orchestrator ว่ามันควรใส่อะไรในคำอธิบายของพวกมัน 682 00:43:26,699 --> 00:43:30,112 ตัวอย่างเช่น สำหรับ Scout ผมบอกว่า "เฮ้ ชื่อของคุณคือ 683 00:43:30,112 --> 00:43:33,203 Scout คุณเป็นหน่วยสอดแนมคอนเทนต์ (content scout) 684 00:43:33,203 --> 00:43:36,295 ของ Cadence Studio งานของคุณคือหาไอเดีย carousel 685 00:43:36,295 --> 00:43:39,322 สำหรับ Instagram และ TikTok ที่สดใหม่และสะดุดตา 686 00:43:39,322 --> 00:43:43,443 แล้วค้นคว้าข้อเท็จจริงเบื้องหลังมัน" ดังนั้นสำหรับเอเจนต์ทั้งหมด 687 00:43:43,443 --> 00:43:46,728 ผมบอกพวกมันว่าพวกมันจะทำอะไร ตัวอย่างเช่น Kite Kite 688 00:43:46,728 --> 00:43:49,884 ก็จะเป็นนักออกแบบของเราและยังเป็นวิศวกรของเราด้วย 689 00:43:49,884 --> 00:43:53,619 ผมจึงอธิบายสิ่งที่ Kite ทำเพื่อให้มันเข้าใจว่ามันทำงานอะไร 690 00:43:53,619 --> 00:43:56,710 เมื่อไหร่ก็ตามที่คุณเริ่มเซสชันแชทใหม่กับเอเจนต์ 691 00:43:56,710 --> 00:44:03,408 พวกมันจะโหลด soul.md ของตัวเองเสมอ นี่คือเหตุผลที่แนะนำอย่างยิ่งให้เราอธิบายรายละเอียดว่าเอเจนต์จะทำอะไร 692 00:44:03,408 --> 00:44:07,401 คุณสามารถเปลี่ยนข้อความได้ตามที่ต้องการ ให้เข้ากับสิ่งที่คุณทำ 693 00:44:07,401 --> 00:44:10,686 ตัวอย่างเช่น ในกรณีของผม ผมบอก Instagram และ TikTok 694 00:44:10,686 --> 00:44:13,777 แต่บางทีคุณอาจอยากได้ LinkedIn ด้วยหรืออะไรก็ตาม 695 00:44:13,777 --> 00:44:17,448 คุณสามารถเพิ่มมันตรงนี้ได้เช่นกัน orchestrator ตอบกลับว่า 696 00:44:17,448 --> 00:44:20,604 "เสร็จแล้ว ผมสร้าง hermes profiles แบบ persistent 697 00:44:20,604 --> 00:44:25,048 ห้าโปรไฟล์ แต่ละโปรไฟล์มี soul.md ของตัวเอง" แล้วคุณจะเห็นตรงนี้เรามี 698 00:44:25,048 --> 00:44:28,461 Scout ซึ่งคือ Atlas, Scribe ซึ่งคือ Vera, Dev ซึ่งคือ 699 00:44:28,461 --> 00:44:33,098 Kite และ Rich ซึ่งคือ Orion และมันยังยืนยันว่าโปรไฟล์เหล่านั้นมีอยู่จริง 700 00:44:33,098 --> 00:44:36,511 ถ้าคุณอยากยืนยันด้วยตัวเอง เพราะบางครั้งเอเจนต์ก็หลอน 701 00:44:36,511 --> 00:44:40,118 (hallucinate) ได้ มันเป็นไปได้ที่ orchestrator บอกคุณว่า 702 00:44:40,118 --> 00:44:43,467 "เฮ้ ผมสร้างเอเจนต์แล้ว" แต่จริงๆ แล้วมันไม่ได้สร้าง 703 00:44:43,467 --> 00:44:47,717 โดยเฉพาะถ้าคุณไม่ได้ใช้โมเดลที่ดีมาก คุณสามารถตรวจสอบด้วยตัวเองได้ 704 00:44:47,717 --> 00:44:50,744 เข้ามาที่เทอร์มินัลของคุณแล้วพิมพ์คำสั่ง hermes 705 00:44:50,744 --> 00:44:55,961 profile list แล้วกด enter คำสั่งนี้จะแสดงรายการโปรไฟล์ทั้งหมดที่คุณมีในการตั้งค่า 706 00:44:55,961 --> 00:44:59,052 Hermes คุณจะเห็นว่าในกรณีของผมมี default ซึ่งคือ 707 00:44:59,052 --> 00:45:02,852 orchestrator และเอเจนต์สี่ตัวที่เราสร้าง ตรงนี้คุณจะเห็นว่า 708 00:45:02,852 --> 00:45:06,523 gateway ไม่ได้กำลังรันอยู่ gateway หยุดอยู่ ซึ่งไม่เป็นไร 709 00:45:06,523 --> 00:45:10,194 เพราะเราอยากให้ gateway เปิดใช้งานเฉพาะตอนที่เอเจนต์ทำงาน 710 00:45:10,194 --> 00:45:13,736 เราจึงยืนยันว่า orchestrator สร้างเอเจนต์ทั้งหมดนี้จริง 711 00:45:13,736 --> 00:45:16,892 พรอมป์ต์นี้ก็สำคัญมากๆ เช่นกัน ในพรอมป์ต์นี้ผมบอก 712 00:45:16,892 --> 00:45:22,688 orchestrator ให้กำหนดสิ่งนี้ให้แต่ละเอเจนต์ ผมอยากให้ทุกเอเจนต์มีหน่วยความจำเฉพาะของตัวเอง 713 00:45:22,688 --> 00:45:27,711 (dedicated memory) ลองนึกภาพว่าคุณมีห้าเอเจนต์ ทุกเอเจนต์มีบทบาทเฉพาะของตัวเอง 714 00:45:27,711 --> 00:45:31,511 มันจะเละเทะถ้าเอเจนต์ทั้งหมดแชร์ไฟล์หน่วยความจำไฟล์เดียวกัน 715 00:45:31,511 --> 00:45:34,538 เอเจนต์มักเขียนข้อมูลระยะยาวลงในไฟล์ที่เรียกว่า 716 00:45:34,538 --> 00:45:38,595 memory.md ถ้าเอเจนต์ทั้งห้าตัวใช้ไฟล์เดียวกัน มันจะเละเทะแน่นอน 717 00:45:38,595 --> 00:45:41,880 orchestrator จะทิ้งความทรงจำระยะยาวของมันลงไปในนั้น 718 00:45:41,880 --> 00:45:45,873 มันจะเละเทะ และยิ่งไปกว่านั้น มันจะทำให้ไฟล์หน่วยความจำหนักมาก 719 00:45:45,873 --> 00:45:49,351 และจำไว้ว่า ยิ่งไฟล์ memory.md ใหญ่เท่าไหร่ คุณยิ่งใช้ 720 00:45:49,351 --> 00:45:54,632 token มากขึ้นเท่านั้น นี่คือเหตุผลที่ผมชอบให้ทุกเอเจนต์มีหน่วยความจำเฉพาะของตัวเอง 721 00:45:54,632 --> 00:45:58,431 เพื่อให้ทุกเอเจนต์ เขียนข้อมูลของตัวเองลงในพื้นที่ของตัวเอง 722 00:45:58,431 --> 00:46:02,167 และทุกเอเจนต์ก็จะมีตัวตนเฉพาะ โฟลเดอร์เฉพาะ และขอบเขตบทบาท 723 00:46:02,167 --> 00:46:08,285 (role boundaries) ของตัวเอง ตรงนี้เราบอกให้ทุกเอเจนต์ทำเฉพาะสิ่งที่อยู่ในบทบาทของตัวเองเท่านั้น 724 00:46:08,285 --> 00:46:11,312 ตัวอย่างเช่น ถ้าผมไปหาเอเจนต์ที่ทำงานวิจัยอย่าง 725 00:46:11,312 --> 00:46:14,339 Scout แล้วบอกว่า "เฮ้ สร้างแดชบอร์ดให้ฉันหน่อย" 726 00:46:14,339 --> 00:46:17,430 Scout จะตอบว่า "เฮ้ ไม่น่าจะใช่ผมนะ คุณน่าจะไปหา 727 00:46:17,430 --> 00:46:23,226 Dev เพราะเขาเป็นนักพัฒนา" อันนี้สำคัญมาก เพราะลองนึกภาพว่าคุณมีเอเจนต์การเงินที่อาจเข้าถึง 728 00:46:23,226 --> 00:46:27,799 PayPal ของคุณ เข้าถึง Stripe และอื่นๆ และคุณให้กฎเฉพาะกับเอเจนต์การเงิน 729 00:46:27,799 --> 00:46:31,663 เช่น "ห้ามถอนเงินจากบัญชีของฉัน" เอเจนต์การเงินรู้กฎเหล่านี้ 730 00:46:31,663 --> 00:46:37,395 แต่ถ้าเอเจนต์อีกตัวเข้ามาทำสิ่งนั้นโดยที่ไม่รู้ด้วยซ้ำว่ากฎที่คุณให้เอเจนต์การเงินคืออะไร 731 00:46:37,395 --> 00:46:42,805 เอเจนต์นั้นก็อาจทำให้การตั้งค่าของคุณพังได้ นี่คือเหตุผลที่ผมมีขอบเขตบทบาทแบบนี้เสมอ 732 00:46:42,805 --> 00:46:45,896 ให้ทุกเอเจนต์เข้าใจว่าบทบาทเฉพาะของตัวเองคืออะไร 733 00:46:45,896 --> 00:46:49,181 และตรงนี้ orchestrator ก็จัดการเรื่องนี้ให้เรา แล้ว 734 00:46:49,181 --> 00:46:52,723 orchestrator ก็ทำเสร็จ เอเจนต์ทั้งหมดมีหน่วยความจำเฉพาะ 735 00:46:52,723 --> 00:46:55,814 และมันยังสร้างโฟลเดอร์เฉพาะให้เอเจนต์ทั้งหมดด้วย 736 00:46:55,814 --> 00:46:59,163 และมันยังทดสอบขอบเขตบทบาท เช่น มันถาม Vera ว่า "Vera 737 00:46:59,163 --> 00:47:02,319 เขียนโค้ดให้ฉันหน่อยได้ไหม" แล้ว Vera ตอบว่า "เฮ้ 738 00:47:02,319 --> 00:47:05,990 นั่นเป็นหน้าที่ของ Kite" และมันยังถาม Kite เรื่องการวิจัย 739 00:47:05,990 --> 00:47:10,820 Kite ก็ตอบว่า "นั่นเป็นหน้าที่ของ Atlas" นั่นหมายความว่าขอบเขตบทบาททำงานได้ 740 00:47:10,820 --> 00:47:15,006 ในขั้นตอนถัดไป เราจะสร้างโฟลเดอร์โปรเจกต์ที่ใช้เก็บโปรเจกต์ของเรา 741 00:47:15,006 --> 00:47:18,999 และที่สำคัญมาก เราจะสร้างระบบฐานข้อมูลบันทึกการทำงานของเอเจนต์ 742 00:47:18,999 --> 00:47:22,477 (agent logging database) เมื่อไหร่ก็ตามที่เอเจนต์ทำงาน 743 00:47:22,477 --> 00:47:27,694 เราอยากให้มันบันทึกสิ่งที่มันทำ เราจะสร้างฐานข้อมูลบันทึกการทำงานของเอเจนต์ขึ้นมา 744 00:47:27,694 --> 00:47:30,914 แนวคิดคือ ก่อนที่เอเจนต์จะส่งข้อความให้คุณว่า "เฮ้ 745 00:47:30,914 --> 00:47:34,520 ผมทำงานนี้เสร็จแล้ว" เอเจนต์จะบันทึกชื่อของมันลงในรายการ 746 00:47:34,520 --> 00:47:37,869 บันทึกคำอธิบายว่ามันทำอะไร บันทึก timestamp ที่มันทำ 747 00:47:37,869 --> 00:47:42,442 และเขียนโมเดล AI ที่ใช้สำหรับงานนั้นๆ เราจะทำสิ่งนี้ด้วยสิ่งที่เรียกว่า 748 00:47:42,442 --> 00:47:46,564 SQLite เราจะสร้างเซิร์ฟเวอร์ฐานข้อมูลขนาดเล็กบนเซิร์ฟเวอร์ของเรา 749 00:47:46,564 --> 00:47:51,716 ที่เอเจนต์จะบันทึกกิจกรรมทั้งหมด ตัวอย่างเช่น ตอนที่เรามาที่แดชบอร์ดที่ผมจะสร้าง 750 00:47:51,716 --> 00:47:57,061 เมื่อคุณมาที่แท็บ agents คุณจะเห็น heat map ที่แสดงว่าเอเจนต์แต่ละตัวทำงานเมื่อไหร่ 751 00:47:57,061 --> 00:48:00,732 และตรงนี้เอเจนต์ยังโพสต์งานที่มันทำ งานล่าสุดที่มันทำด้วย 752 00:48:00,732 --> 00:48:04,210 สิ่งนี้ให้ความโปร่งใสอย่างเต็มที่ว่าอะเจนต์กำลังทำอะไร 753 00:48:04,210 --> 00:48:09,491 เพื่อที่ว่าถ้าเอเจนต์ติดอยู่ที่ไหนสักแห่ง คุณจะรู้ว่าเอเจนต์ตัวนั้นไม่ได้ทำงานนั้น 754 00:48:09,491 --> 00:48:13,291 และยังไงก็ตาม นี่คือแดชบอร์ดที่เราจะสร้าง และสำหรับสิ่งนั้น 755 00:48:13,291 --> 00:48:18,958 ผมจะให้พรอมป์ต์นี้กับ orchestrator เพื่อสร้างระบบฐานข้อมูลบันทึกการทำงานของเอเจนต์ให้เรา 756 00:48:18,958 --> 00:48:22,436 แล้ว orchestrator ก็ทำระบบฐานข้อมูลบันทึกการทำงานเสร็จ 757 00:48:22,436 --> 00:48:25,592 และมันยังทำ smoke test ซึ่งเราจะเห็นว่า dev สร้าง 758 00:48:25,592 --> 00:48:29,198 cadence store โมเดล AI ที่มันใช้ สถานะว่ามันเสร็จสมบูรณ์ 759 00:48:29,198 --> 00:48:32,676 และเวลาที่มันทำงานนี้ จำไว้ว่าเราได้สร้างฐานขึ้นมาแล้ว 760 00:48:32,676 --> 00:48:36,025 แต่เอเจนต์อื่นๆ ยังไม่รู้ ตอนนี้มีเพียง orchestrator 761 00:48:36,025 --> 00:48:41,048 เท่านั้นที่รู้ว่ามีฐานข้อมูลนี้อยู่ เราจึงต้องกระจายข่าวนี้ไปยังเอเจนต์ทั้งหมด 762 00:48:41,048 --> 00:48:45,878 แล้วบอก orchestrator ว่า "เฮ้ บันทึกกฎการปฏิบัติงานนี้ลงในหน่วยความจำของคุณ 763 00:48:45,878 --> 00:48:49,549 แล้วกระจายมันให้ Atlas, Vera และเอเจนต์อื่นๆ ทั้งหมดก่อน" 764 00:48:49,549 --> 00:48:52,705 และนี่คือคำสั่งที่เราจะให้พวกมัน "ก่อนส่งคำตอบใดๆ 765 00:48:52,705 --> 00:48:56,569 ให้บันทึกสิ่งที่คุณทำลงในตาราง cadence runs โดยรันคำสั่งนี้" 766 00:48:56,569 --> 00:49:00,562 นั่นจะเป็นคำสั่งที่คุณรันเพื่อแทรกสิ่งที่พวกมันทำลงในฐานข้อมูล 767 00:49:00,562 --> 00:49:06,745 ผมจะคัดลอกอันนี้และส่งให้มันติดตั้ง เพื่อให้แน่ใจว่าเอเจนต์ทั้งหมดรู้เกี่ยวกับการตั้งค่าที่เราทำ 768 00:49:06,745 --> 00:49:09,901 และหลังจากนั้นผมจะบอกมันว่า "เฮ้ ให้ทุกเอเจนต์รัน 769 00:49:09,901 --> 00:49:13,636 smoke test เพื่อที่พวกมันจะได้บันทึกบางอย่างลงในฐานข้อมูล" 770 00:49:13,636 --> 00:49:18,015 อันนี้จะช่วยให้เรารู้ว่าเอเจนต์ทั้งหมดเข้าถึงฐานข้อมูลที่เราสร้างได้ 771 00:49:18,015 --> 00:49:23,747 เวลาที่เอเจนต์ทำงาน บางครั้งคุณจะได้พรอมป์ต์แบบนี้ที่คุณต้องอนุญาตให้มันรันคำสั่งบางอย่าง 772 00:49:23,747 --> 00:49:26,967 ในกรณีของผม คุณเลือก allow once (อนุญาตครั้งเดียว) 773 00:49:26,967 --> 00:49:30,187 หรือ allow เฉพาะเซสชันนี้ หรือจะเลือก allow always 774 00:49:30,187 --> 00:49:33,601 (อนุญาตเสมอ) เพื่อไม่ให้มันถามคุณทุกครั้ง แล้วก็เสร็จ 775 00:49:33,601 --> 00:49:37,594 จากนั้นมันก็ทำ smoke test ที่เอเจนต์ทั้งห้าตัวของเราทำการทดสอบ 776 00:49:37,594 --> 00:49:40,621 โดยบันทึกโมเดล AI ที่ใช้ เวลาที่ทำงาน และวันที่ 777 00:49:40,621 --> 00:49:43,648 เวลาที่ทำงานงานนั้น ตอนนี้เราจะเข้าสู่ส่วนหลักๆ 778 00:49:43,648 --> 00:49:47,125 ส่วนหนึ่ง ตอนนี้คุณจะเห็นว่าเราส่งข้อความทั้งหมดในช่อง 779 00:49:47,125 --> 00:49:50,539 orchestrator เพราะจนถึงตอนนี้เราทำงานกับ orchestrator 780 00:49:50,539 --> 00:49:53,630 แต่ตอนนี้เราจะย้ายไปสู่ส่วนที่เริ่มสร้างแดชบอร์ด 781 00:49:53,630 --> 00:49:57,559 และสำหรับสิ่งนั้นเราจะไม่ใช้ orchestrator เราจะมีเอเจนต์เฉพาะ 782 00:49:57,559 --> 00:50:01,294 Kite ซึ่งเป็นนักออกแบบและนักพัฒนา ที่จะสร้างแดชบอร์ดให้เรา 783 00:50:01,294 --> 00:50:04,514 เพราะมันเป็นนักพัฒนา เราจะมีช่องที่สามซึ่งเรียกว่า 784 00:50:04,514 --> 00:50:09,666 studio และนั่นคือช่องที่เราใช้ระดมความคิดเกี่ยวกับคอนเทนต์ใหม่ที่จะสร้างและอื่นๆ 785 00:50:09,666 --> 00:50:12,758 ปัญหาคือ โดยค่าเริ่มต้น Telegram ไม่อนุญาตให้ใช้ 786 00:50:12,758 --> 00:50:16,815 bot token อันเดียวคุยกับบอทหลายตัว ใน Telegram หนึ่งบอทต่อหนึ่ง 787 00:50:16,815 --> 00:50:20,744 token ดังนั้นถ้าเราอยากสร้างช่อง Telegram เฉพาะที่เราจะคุยกับ 788 00:50:20,744 --> 00:50:23,899 Kite เราก็ไม่สามารถใช้ bot token ของ orchestrator 789 00:50:23,899 --> 00:50:27,892 ได้ เราต้องสร้าง bot token เฉพาะสำหรับ Kite มีวิธีแก้ปัญหาอยู่ 790 00:50:27,892 --> 00:50:31,177 อย่างที่ผมทำในวิดีโอก่อนๆ ที่เราสร้าง router plugin 791 00:50:31,177 --> 00:50:34,848 สิ่งที่ router ทำคือ เมื่อไหร่ก็ตามที่คุณส่งข้อความในช่อง 792 00:50:34,848 --> 00:50:38,583 มันจะผ่าน bot token เดียวนั้นก่อน แล้ว router จะพิจารณาว่า 793 00:50:38,583 --> 00:50:42,125 "เฮ้ นี่คือข้อความที่มาจากช่องของ orchestrator ขอส่งให้ 794 00:50:42,125 --> 00:50:45,539 orchestrator" เช่นเดียวกัน ถ้าคุณมีเอเจนต์ที่เรียกว่า 795 00:50:45,539 --> 00:50:49,145 Scribe ข้อความมาจากช่อง Telegram ของ Scribe มันก็จะไปที่ 796 00:50:49,145 --> 00:50:52,687 bot ตัวเดียวกัน แล้ว router พิจารณาว่า "เฮ้ อันนี้มาจาก 797 00:50:52,687 --> 00:50:55,714 thread 4" เพราะทุกช่องมี ID เฉพาะของตัวเอง ด้วย 798 00:50:55,714 --> 00:50:58,870 ID นั้น router จึงสามารถระบุได้ว่าข้อความมาจากไหน 799 00:50:58,870 --> 00:51:03,700 แล้วจัดส่งไปยังเอเจนต์นั้นๆ อันนี้มีประโยชน์มากถ้าคุณมีหลายช่องที่อยากสร้าง 800 00:51:03,700 --> 00:51:07,886 แต่ในการตั้งค่าของเรา เราจะสร้างแค่สามช่อง ผมจะโชว์วิธีแก้แบบอื่น 801 00:51:07,886 --> 00:51:12,717 เพราะในทุกบทช่วยสอน ผมพยายามนำเสนอสิ่งใหม่ๆ เพื่อให้คุณได้เรียนรู้สิ่งใหม่ๆ 802 00:51:12,717 --> 00:51:15,808 ด้วย สิ่งที่เราจะทำในการตั้งค่านี้คือ เราจะสร้าง 803 00:51:15,808 --> 00:51:20,187 bot token อีกอันโดยเฉพาะสำหรับ Kite นั่นหมายความว่าทุกข้อความที่ผ่าน 804 00:51:20,187 --> 00:51:23,601 gateway เฉพาะนี้หรือ bot token นี้จะไปที่ Kite โดยตรง 805 00:51:23,601 --> 00:51:26,692 แต่แล้วเราก็เจอความท้าทายอีกอย่าง โดยค่าเริ่มต้น 806 00:51:26,692 --> 00:51:32,166 เมื่อคุณสร้างช่องใน Telegram ข้อความทั้งหมดที่เราสร้างในช่องเหล่านี้จะผ่านบอทตัวเดียว 807 00:51:32,166 --> 00:51:35,515 ซึ่งในกรณีของเราตอนนี้ ทุกข้อความจะผ่าน orchestrator 808 00:51:35,515 --> 00:51:38,542 ซึ่งไม่สมเหตุสมผลใช่ไหม เราอยากให้ orchestrator 809 00:51:38,542 --> 00:51:43,050 ฟังเฉพาะในช่องของมัน และอยากให้ Kite ฟังเฉพาะในช่องที่เราจะสร้างให้มัน 810 00:51:43,050 --> 00:51:47,301 ดังนั้นสิ่งที่เราจะทำคือ เราจะบอก orchestrator ให้สร้างปลั๊กอินที่ 811 00:51:47,301 --> 00:51:50,585 orchestrator จะฟังเฉพาะในช่องที่อุทิศให้มันเท่านั้น 812 00:51:50,585 --> 00:51:53,677 orchestrator จะไม่ไปฟังในช่องที่เราสร้างให้ Kite 813 00:51:53,677 --> 00:51:58,571 เด็ดขาด และเช่นเดียวกันกับ Kite Kite จะฟังเฉพาะช่องที่เราสร้างให้มันเท่านั้น 814 00:51:58,571 --> 00:52:02,500 ทุกอย่างจะเข้าใจได้ในไม่ช้า เชื่อผมเถอะ เพราะอันนี้ซับซ้อนมาก 815 00:52:02,500 --> 00:52:07,266 ผมมักจะแจ้งให้เอเจนต์ทราบล่วงหน้าเมื่อไหร่ก็ตามที่เราจะสร้างสิ่งที่ซับซ้อน 816 00:52:07,266 --> 00:52:12,933 เพื่อให้พวกมันรู้ว่ากำลังจะเกิดอะไรขึ้น ตรงนี้ผมส่งข้อความนี้เพื่อเตรียมมันว่าอยากทำอะไร 817 00:52:12,933 --> 00:52:16,346 ผมบอก orchestrator ว่า "เฮ้ เราจะสร้างบางอย่างด้วยกัน 818 00:52:16,346 --> 00:52:21,499 เป้าหมายคือ Kite จะสร้างแดชบอร์ดสตูดิโอของเรา และผมอยากคุยกับวิศวกรคนนี้โดยตรงใน 819 00:52:21,499 --> 00:52:24,590 group ของมันเอง ซึ่งมันจะมีบอทและตัวตนของตัวเอง" 820 00:52:24,590 --> 00:52:31,417 แล้วผมก็อธิบายว่าทำไมเราถึงต้องมีบอทตัวที่สอง คุณอ่านอันนี้ก็จะเข้าใจเหตุผลว่าทำไมเราถึงต้องมีบอทตัวที่สอง 821 00:52:31,417 --> 00:52:36,440 ผมกำลังบอกมันว่า "เฮ้ นี่คือสิ่งที่เราจะสร้าง" เพื่อให้มันเข้าใจว่าเราจะทำอะไร 822 00:52:36,440 --> 00:52:39,467 ระหว่างที่ orchestrator ทำงานนี้ เราจะต้องสร้าง 823 00:52:39,467 --> 00:52:42,623 bot token ตัวที่สองสำหรับ Kite เพราะจำไว้ว่า Kite 824 00:52:42,623 --> 00:52:46,873 จะต้องมี bot token เฉพาะของตัวเอง orchestrator ตอบกลับว่ามันเข้าใจ 825 00:52:46,873 --> 00:52:52,090 เป้าหมายคือให้ Kite มีตัวตนบน Telegram ของตัวเองที่เราสามารถพูดคุยกับมันได้โดยตรง 826 00:52:52,090 --> 00:52:55,825 แต่ก่อนอื่นเราต้องสร้างบอทนี้ให้ Kite ก่อน ในการทำเช่นนั้น 827 00:52:55,825 --> 00:52:59,303 เราจะกลับไปที่ BotFather ที่เราใช้สร้างบอทตัวแรกสำหรับ 828 00:52:59,303 --> 00:53:02,394 orchestrator แล้วสร้างบอทตัวที่สอง พิมพ์ /newbot 829 00:53:02,394 --> 00:53:05,936 เหมือนตอนแรกที่ทำกับ orchestrator แล้วตั้งชื่อบอทนี้ว่า 830 00:53:05,936 --> 00:53:09,543 KM Kite Content ขอเรียกว่า Content Kite ละกัน ผมจะคัดลอก 831 00:53:09,543 --> 00:53:14,438 username กด enter และเหมือนตอนที่ทำก่อนหน้านี้ ผมจะใช้ชื่อเดียวกันกับที่ตั้ง 832 00:53:14,438 --> 00:53:17,722 แต่จะลงท้ายด้วยคำว่า bot เพราะทุก username ของบอทใน 833 00:53:17,722 --> 00:53:21,329 Telegram ต้องลงท้ายด้วยคำว่า bot แล้วกด enter เราก็จะได้ 834 00:53:21,329 --> 00:53:24,356 token เฉพาะสำหรับบอทตัวนี้ จำไว้ว่านี่คือ token 835 00:53:24,356 --> 00:53:27,640 ที่เรามีสำหรับ orchestrator และตอนนี้เราสร้าง token 836 00:53:27,640 --> 00:53:30,667 เฉพาะสำหรับ Kite แล้ว เราจะต้องเพิ่มบอทของ Kite 837 00:53:30,667 --> 00:53:34,402 นี้เข้ากับการตั้งค่า Hermes ของเราด้วย และในการทำอย่างนั้น 838 00:53:34,402 --> 00:53:37,687 ผมสร้างคำสั่งนี้ให้คุณแล้ว มาที่นี่ คัดลอกคำสั่งนี้ 839 00:53:37,687 --> 00:53:40,843 กลับมาที่หน้าต่างเทอร์มินัลของคุณ ขอเคลียร์หน้าจอ 840 00:53:40,843 --> 00:53:44,063 สำคัญมาก ให้แน่ใจว่าคุณไม่ได้อยู่บน root คุณอยู่บน 841 00:53:44,063 --> 00:53:47,154 Larry หรือ user ใหม่ที่คุณสร้าง แล้ววางคำสั่งนี้ 842 00:53:47,154 --> 00:53:50,568 คำสั่งนี้จะถามให้คุณใส่ bot token ผมจะรันคำสั่งตรงนี้ 843 00:53:50,568 --> 00:53:53,659 แล้วมันจะบอกว่า "เฮ้ วาง Kite token ของคุณแล้วกด 844 00:53:53,659 --> 00:53:57,587 enter" ผมจะกลับไปที่ Telegram คลิกตรงนี้ ให้แน่ใจว่าคุณคัดลอก 845 00:53:57,587 --> 00:54:00,743 token ของ Kite ผมจะคลิกเพื่อคัดลอก ย่อหน้าต่างนี้ 846 00:54:00,743 --> 00:54:04,607 กลับมาที่เทอร์มินัล แล้วคลิกขวาเพื่อวาง คีย์ถูกวางตรงนี้แล้ว 847 00:54:04,607 --> 00:54:08,343 หลังจากนั้นก็กด enter อันนี้จะบันทึกคีย์ลงในแดชบอร์ดของเรา 848 00:54:08,343 --> 00:54:11,627 กลับไปที่การตั้งค่าของเรา แล้วเข้าไปใน group ของเรา 849 00:54:11,627 --> 00:54:14,847 จากนั้นผมจะบอก orchestrator ว่า "ผมสร้าง bot token 850 00:54:14,847 --> 00:54:18,776 สำหรับ Kite แล้ว และผมได้เพิ่ม bot token เองในพื้นที่นี้แล้ว" 851 00:54:18,776 --> 00:54:21,867 ผมบอกให้มันตรวจสอบว่า token ที่ผมเพิ่มมีอยู่จริง 852 00:54:21,867 --> 00:54:27,213 และทำการตรวจสอบความถูกต้อง (sanity checks) สองสามอย่างเพื่อให้แน่ใจว่ามันจะทำงานกับ 853 00:54:27,213 --> 00:54:33,009 Kite ผมจะคัดลอกอันนี้แล้วส่งให้ orchestrator และอีกอย่างที่มีประโยชน์มากซึ่งผมแนะนำเสมอคือ 854 00:54:33,009 --> 00:54:38,612 เมื่อไหร่ก็ตามที่คุณให้เอเจนต์ทำงานที่ซับซ้อนซึ่งคุณไม่แน่ใจว่าเอเจนต์จะทำสำเร็จหรือไม่ 855 00:54:38,612 --> 00:54:42,412 คุณสามารถให้ข้อมูลอ้างอิงถึงเอกสาร Hermes แก่เอเจนต์ได้เสมอ 856 00:54:42,412 --> 00:54:45,632 เช่น ถ้าผมบอกว่า "เฮ้ ถ้าคุณไม่แน่ใจ ให้ไปดูเอกสาร 857 00:54:45,632 --> 00:54:48,852 Hermes ในส่วนนี้" เพื่อให้เอเจนต์เข้าใจว่ามันควรจะ 858 00:54:48,852 --> 00:54:52,394 build สิ่งนี้อย่างไร จากนั้นผมได้รับการอนุมัติคำสั่งจาก 859 00:54:52,394 --> 00:54:55,679 orchestrator ผมคลิก always แล้ว orchestrator บอกว่า 860 00:54:55,679 --> 00:54:58,834 "เฮ้ ขั้นตอนที่หนึ่งเสร็จสมบูรณ์ มันยืนยันแล้วว่า 861 00:54:58,834 --> 00:55:01,926 token ที่เราเพิ่มมีอยู่จริง และมันยังบอกว่า "เฮ้ 862 00:55:01,926 --> 00:55:05,275 บอทออนไลน์อยู่ เราสามารถส่งข้อความหา Kite โดยตรงได้" 863 00:55:05,275 --> 00:55:09,847 สิ่งที่เราจะทำตอนนี้คือสร้างช่องที่เราต้องการ เราจะสร้างช่องหนึ่งสำหรับ 864 00:55:09,847 --> 00:55:14,613 Kite และสร้างช่องหนึ่งสำหรับ studio ซึ่งเราใช้สำหรับระดมความคิดก่อนที่จะพา 865 00:55:14,613 --> 00:55:18,799 Kite เข้ามาในแชทนั้น ในการทำอย่างนั้น เราจะคลิกที่จุดสามจุดตรงนี้ 866 00:55:18,799 --> 00:55:21,955 แต่คุณจะไม่เห็นตัวเลือกสร้าง group เราจะกลับมาที่ 867 00:55:21,955 --> 00:55:25,304 all แล้วคลิกจุดสามจุดตรงนี้ จากนั้นคลิก create topic 868 00:55:25,304 --> 00:55:28,588 แล้วต้องตั้งชื่อ topic ในกรณีของเรา จะเรียกว่า Kite 869 00:55:28,588 --> 00:55:32,066 และเพราะ Kite จะเป็นนักพัฒนา ขอใส่อิโมจิแล็ปท็อปให้มัน 870 00:55:32,066 --> 00:55:35,093 แล้วคลิก create เมื่อไหร่ก็ตามที่คุณสร้าง topic 871 00:55:35,093 --> 00:55:38,571 ใหม่ ก่อนที่ topic จะถูกเปิดใช้งาน คุณต้องส่งข้อความใน 872 00:55:38,571 --> 00:55:41,598 topic นั้นก่อน สำหรับ topic ที่เรากำลังสร้างนี้ 873 00:55:41,598 --> 00:55:44,753 เราจะต้องใช้ thread ID ของ topic นี้ เพราะด้วย ID 874 00:55:44,753 --> 00:55:47,909 นี้ orchestrator จะผูก topic นี้กับ Kite โดยเฉพาะ 875 00:55:47,909 --> 00:55:51,451 ในการเริ่มต้น group นี้ ผมจะคัดลอกพรอมป์ต์นี้แล้วส่งให้ 876 00:55:51,451 --> 00:55:55,251 orchestrator ทันทีว่า "เฮ้ thread ID ของ topic นี้คืออะไร?" 877 00:55:55,251 --> 00:55:59,244 คุณสามารถส่งข้อความอะไรก็ได้ เราอาจส่ง "hi" เพื่อสร้างช่องก่อน 878 00:55:59,244 --> 00:56:02,851 แล้วตามด้วยข้อความอย่าง "thread ID ของ topic นี้คืออะไร" 879 00:56:02,851 --> 00:56:06,071 ผมจะโชว์วิธีนั้นให้ดูด้วย ตอนนี้ Kite ถูกสร้างแล้ว 880 00:56:06,071 --> 00:56:09,226 เรามี Telegram topic ID เรามี thread ID กลับมาที่ 881 00:56:09,226 --> 00:56:12,897 all แล้วคลิก create topic เราจะสร้าง topic ถัดไปซึ่งก็คือ 882 00:56:12,897 --> 00:56:17,341 studio จำไว้ว่า studio คือที่ที่เราจะระดมความคิดเกี่ยวกับคอนเทนต์ใหม่ 883 00:56:17,341 --> 00:56:21,205 โปรโมชัน ไอเดีย และอื่นๆ ผมจะเรียกมันว่า Ideas พร้อมไอคอนนี้ 884 00:56:21,205 --> 00:56:25,649 แล้วคลิก create และเพื่อกระตุ้นการสร้างมัน ผมจะใช้ข้อความต้อนรับอย่าง 885 00:56:25,649 --> 00:56:29,578 "เฮ้ topic ID ของ group นี้คืออะไร" แล้วตรงนี้เราก็จะได้คำตอบ 886 00:56:29,578 --> 00:56:32,798 จำไว้ว่าเราสร้าง Kite แล้ว แต่ยังเป็น orchestrator 887 00:56:32,798 --> 00:56:36,082 ที่เราคุยด้วยอยู่ เพราะ Kite ยังไม่ถูกเพิ่มเข้าไปใน 888 00:56:36,082 --> 00:56:39,496 group นี้เลย ข้อความทั้งหมดที่คุณเห็นตรงนี้ ทั้งคำตอบ 889 00:56:39,496 --> 00:56:42,716 thread ID ของ Kite และคำตอบ ID ของ studio ยังมาจาก 890 00:56:42,716 --> 00:56:45,743 orchestrator ทั้งหมด ตอนนี้เรามี thread ID แล้ว 891 00:56:45,743 --> 00:56:49,221 เราจะส่งข้อความไปที่ orchestrator ว่า "เฮ้ ตอนนี้เรามี 892 00:56:49,221 --> 00:56:52,569 thread IDs แล้ว เราอยากให้คุณเดินสาย (wire) Telegram 893 00:56:52,569 --> 00:56:55,725 group ของเรา" ผมจะให้ Telegram group ID ของ group 894 00:56:55,725 --> 00:56:59,396 ปัจจุบันแก่ orchestrator และให้ thread IDs ของทุกช่องด้วย 895 00:56:59,396 --> 00:57:02,552 เพื่อที่มันจะมี thread ID ของที่ที่ผมคุยกับมัน มี 896 00:57:02,552 --> 00:57:05,708 thread ID ของ Kite และ thread ID ของ group studio 897 00:57:05,708 --> 00:57:10,151 จากนั้นด้วยสิ่งนี้เท่านั้นมันถึงจะผูกช่องต่างๆ เข้ากับเอเจนต์เฉพาะได้ 898 00:57:10,151 --> 00:57:13,887 orchestrator จะเข้าถึงช่องที่เราคุยกับมัน และ orchestrator 899 00:57:13,887 --> 00:57:17,236 ก็จะเข้าถึงช่อง studio ด้วย เพราะนั่นคือสิ่งที่เราจะ 900 00:57:17,236 --> 00:57:20,649 ใช้ระดมความคิดกับมันในช่อง studio เพราะมันเป็นเจ้านาย 901 00:57:20,649 --> 00:57:24,127 แต่ Kite จะฟังเฉพาะในช่องนี้ และ Kite จะไม่เข้าถึงช่อง 902 00:57:24,127 --> 00:57:28,313 orchestrator และช่อง Kite ผมจะเปิด notepad แล้ววางพรอมป์ต์นี้ลงไป 903 00:57:28,313 --> 00:57:31,984 เพราะเราจะเปลี่ยนบางอย่างในนั้น สิ่งแรกที่เราจะต้องใช้คือ 904 00:57:31,984 --> 00:57:35,204 Telegram group ID ในการหา Telegram group ID ของคุณ 905 00:57:35,204 --> 00:57:38,553 เราจะใช้บอทตัวเดียวกับที่ใช้หา Telegram ID ของเราคือ 906 00:57:38,553 --> 00:57:42,095 User Info Bot เมื่อมันเปิดขึ้นมา คลิกที่ forum ด้านล่าง 907 00:57:42,095 --> 00:57:45,122 แล้วเลือก group ที่คุณเพิ่งสร้าง ในกรณีของผมคือ 908 00:57:45,122 --> 00:57:48,278 KM Content จากนั้นคลิกที่มัน แล้วกด send บอทจะส่ง 909 00:57:48,278 --> 00:57:52,206 ID ของ Telegram group มาให้คุณ คุณสามารถคลิกตรงนี้เพื่อคัดลอก 910 00:57:52,206 --> 00:57:55,298 แล้วผมจะแทนที่ด้วยส่วนนี้ที่เรียกว่า Telegram ID 911 00:57:55,298 --> 00:57:59,419 ขั้นตอนถัดไป เราจะกรอก thread ID สำหรับสามช่อง และสำหรับสิ่งนั้น 912 00:57:59,419 --> 00:58:03,026 ผมจะกลับเข้ามาใน Telegram group ของเรา แต่ในกรณีส่วนใหญ่ 913 00:58:03,026 --> 00:58:06,246 ช่องแรกที่คุณสร้างมักจะมี thread ID เป็น 1 ดังนั้น 914 00:58:06,246 --> 00:58:09,338 orchestrator น่าจะตอบว่าเป็น 1 แต่เพื่อความแน่ใจ 915 00:58:09,338 --> 00:58:12,558 ขอถามมันอีกที เอาล่ะ มันตอบว่า thread ID ของมันคือ 916 00:58:12,558 --> 00:58:15,778 1 เพราะมันถูกสร้างก่อน ผมจะใส่ 1 ตรงนี้ ไปที่ Kite 917 00:58:15,778 --> 00:58:18,869 Kite คือ 36 ขอใส่ 36 แล้วมาที่ studio ซึ่งคือ 40 918 00:58:18,869 --> 00:58:23,184 แล้วก็เสร็จ แค่สี่พารามิเตอร์นี้เท่านั้นที่คุณต้องกรอกในพรอมป์ต์นี้ 919 00:58:23,184 --> 00:58:26,597 หลังจากนั้นคัดลอกข้อความ สำคัญมาก อย่าทำในช่อง studio 920 00:58:26,597 --> 00:58:30,140 หรือ Kite ให้ทำในช่องของ orchestrator แล้ววางข้อความนี้ 921 00:58:30,140 --> 00:58:34,133 ส่งให้ orchestrator เพื่อให้มัน implement การผูกช่องกับเอเจนต์ 922 00:58:34,133 --> 00:58:37,417 (topic-lane agent binding) orchestrator ตอบว่า "เฮ้ 923 00:58:37,417 --> 00:58:41,796 ผมบันทึกข้อมูล lane ทั้งสี่ลงในหน่วยความจำแล้ว และทำส่วนบันทึกเสร็จ" 924 00:58:41,796 --> 00:58:45,983 แต่มันมีปัญหาอยู่อย่างหนึ่ง มันไม่สามารถรันคำสั่งนี้เพื่อรีสตาร์ท 925 00:58:45,983 --> 00:58:49,782 gateway ได้ มันเลยบอกให้เรารันให้มัน ผมจะคัดลอกคำสั่งตรงนี้ 926 00:58:49,782 --> 00:58:53,260 กลับมาที่เทอร์มินัล ขอเคลียร์หน้าจอเพื่อให้ดูสะอาดขึ้น 927 00:58:53,260 --> 00:58:56,867 แล้ววางคำสั่งนี้ สำคัญมากอีกครั้ง ให้แน่ใจว่าถ้าคุณสร้าง 928 00:58:56,867 --> 00:59:00,280 user ใหม่ คุณอยู่บน user ใหม่ ไม่ใช่บัญชี root แล้วกด 929 00:59:00,280 --> 00:59:04,015 enter และมันก็เกิดแบบนี้ตอนที่ผมทดสอบด้วย คุณจะได้คำตอบว่า 930 00:59:04,015 --> 00:59:07,107 failed to connect to bus ให้คัดลอกทุกอย่างตรงนี้ 931 00:59:07,107 --> 00:59:10,327 แล้วมาที่ Telegram บอก orchestrator ว่า "เฮ้ ผมเจอ 932 00:59:10,327 --> 00:59:13,483 error นี้" แล้ววางมัน อุ๊ย ผมคิดว่าผมไม่ได้คัดลอก 933 00:59:13,483 --> 00:59:16,767 กลับไปที่ PowerShell กด control+shift+C เพื่อคัดลอก 934 00:59:16,767 --> 00:59:22,113 กลับมาที่ Telegram แล้ววาง จากนั้นมันจะแก้ไขให้และให้คำสั่งอื่นที่เราใช้แก้ปัญหานี้ 935 00:59:22,113 --> 00:59:26,363 และผมควรจะหาเจอ มันบอกว่า error นี้หมายความว่าเชลล์ของคุณไม่ได้ใช้ 936 00:59:26,363 --> 00:59:30,034 bus environment มันเลยให้คำสั่งอื่นมารัน ผมจะคัดลอกอันนี้ 937 00:59:30,034 --> 00:59:35,766 ล้างหน้าจออีกครั้ง วางคำสั่งใหม่นี้ กด enter แล้วคุณจะเห็นว่าผมได้รับการแจ้งเตือนทันทีว่า 938 00:59:35,766 --> 00:59:39,179 gateway ของผมกำลังรีสตาร์ท นั่นหมายความว่าคำสั่งได้ผล 939 00:59:39,179 --> 00:59:43,494 ใช้เวลาไม่กี่วินาทีกว่าทุกอย่างจะเสร็จ ให้อดทนอีกนิดเมื่อเห็นแบบนี้ 940 00:59:43,494 --> 00:59:47,294 ผมจะคัดลอกตรงนี้ กด control+shift+C แล้วส่งให้ orchestrator 941 00:59:47,294 --> 00:59:51,802 ว่า "มันทำงานแล้ว นี่คือข้อความที่ผมได้รับ" คุณจะเห็นว่าตอนที่ผมส่งให้ 942 00:59:51,802 --> 00:59:54,829 orchestrator ทันที มันไม่ตอบ เพราะผมว่า gateway 943 00:59:54,829 --> 00:59:57,985 ยังบูตเอเจนต์ทั้งหมดอยู่ บางครั้งเมื่อคุณรีสตาร์ท 944 00:59:57,985 --> 01:00:02,686 gateway มันต้องใช้เวลาสักพักกว่า gateway ทั้งหมดของเอเจนต์จะรีสตาร์ทเสร็จ 945 01:00:02,686 --> 01:00:05,842 ดังนั้นเมื่อคุณส่งข้อความนี้ทันทีแล้วไม่เห็นคำตอบ 946 01:00:05,842 --> 01:00:09,899 ให้อดทนอีกนิด และนี่คือทิป เมื่อคุณกลับมาที่เทอร์มินัลแล้วพิมพ์ 947 01:00:09,899 --> 01:00:13,506 hermes profile list แล้วกด enter คุณจะเห็นว่าตอนนี้เรามี 948 01:00:13,506 --> 01:00:16,855 gateway สองตัวที่กำลังรันอยู่ ตอนแรกเรามีแค่ default 949 01:00:16,855 --> 01:00:19,882 gateway ที่รันอยู่ และ gateway ของ dev หยุดอยู่ 950 01:00:19,882 --> 01:00:23,231 แต่ตอนนี้คุณจะเห็นว่าเรามี gateway อีกตัวที่สร้างให้ 951 01:00:23,231 --> 01:00:26,451 Kite ซึ่งกำลังรันอยู่ สิ่งที่เราจะทำตอนนี้คือเพิ่ม 952 01:00:26,451 --> 01:00:29,542 Kite เข้าไปใน group ที่เราสร้าง ในการทำอย่างนั้น 953 01:00:29,542 --> 01:00:32,633 ไปที่ BotFather คลิกที่ URL ที่มันให้ไว้เพื่อดึง 954 01:00:32,633 --> 01:00:35,982 ID ของ Kite คลิกที่ชื่อ แล้วคลิกเพื่อคัดลอก username 955 01:00:35,982 --> 01:00:39,074 ของ Kite แล้วกลับมาใน group ของเรา ผมจะไปที่ all 956 01:00:39,074 --> 01:00:42,487 คลิกจุดสามจุดตรงนี้ ไปที่ view group info จากนั้นคลิก 957 01:00:42,487 --> 01:00:45,514 manage ลงมาที่ members คลิก add members แล้วใส่ 958 01:00:45,514 --> 01:00:48,670 username ของ Kite bot เลือกมันแล้วคลิก add ตอนนี้ 959 01:00:48,670 --> 01:00:51,761 Kite ถูกเพิ่มเข้าไปใน group แล้ว เรายังต้องทำให้ 960 01:00:51,761 --> 01:00:54,917 Kite เป็น administrator เพื่อให้มันทำงานที่นี่ได้ 961 01:00:54,917 --> 01:00:58,008 ยังอยู่บนแท็บ all ผมจะคลิกจุดสามจุด ไปที่ manage 962 01:00:58,008 --> 01:01:01,808 group จากนั้นไปที่ administrator แล้วคลิก add administrator 963 01:01:01,808 --> 01:01:04,899 เพิ่ม Kite ลงไป ตรวจสอบสิทธิ์ ถ้าพอใจก็คลิก save 964 01:01:04,899 --> 01:01:08,119 แล้วปิดได้ ตอนนี้เราเพิ่ม Kite เข้าไปใน group แล้ว 965 01:01:08,119 --> 01:01:12,241 สิ่งที่เราจะทำตอนนี้คือ เข้ามาในช่องของ Kite แล้วส่งข้อความอย่าง 966 01:01:12,241 --> 01:01:15,526 "คุณคือใคร?" และนี่คือส่วนที่ทำให้ผมประหม่าทุกครั้ง 967 01:01:15,526 --> 01:01:19,454 เพราะนี่คือจุดที่คุณจะเห็นว่าการผูกเอเจนต์กับช่องทำงานหรือไม่ 968 01:01:19,454 --> 01:01:22,868 ถ้าทุกอย่างทำงาน เราควรเห็นข้อความจาก Kite ว่า "ผมคือ 969 01:01:22,868 --> 01:01:26,281 Kite" มาดูกันว่ามันจะทำงานไหม สมบูรณ์แบบ ผมโล่งใจไปที 970 01:01:26,281 --> 01:01:29,630 ตรงนี้ Kite ตอบว่า "ผมคือ Kite นักออกแบบและวิศวกรของ 971 01:01:29,630 --> 01:01:32,850 Cadence ของ Larry" เพื่อให้แน่ใจว่าส่วนอื่นๆ ทำงาน 972 01:01:32,850 --> 01:01:36,779 ผมจะส่งแบบเดียวกันนี้ไปให้ orchestrator และถ้ามันตอบว่ามันคือ 973 01:01:36,779 --> 01:01:40,127 orchestrator ก็ดี แต่ถ้า Kite ตอบในช่อง orchestrator 974 01:01:40,127 --> 01:01:46,954 เราก็มีปัญหา ขอทำแบบเดียวกันกับ studio เพื่อความปลอดภัยว่าเรามีเอเจนต์ที่ถูกต้องอยู่เบื้องหลังช่องเหล่านี้ 975 01:01:46,954 --> 01:01:50,110 เยี่ยม ในช่องของ orchestrator มันยังตอบว่า "ผมคือ 976 01:01:50,110 --> 01:01:53,266 orchestrator" ซึ่งหมายความว่าสิ่งนี้ทำงานได้ดีมาก 977 01:01:53,266 --> 01:01:56,872 Kite ถ้าจำได้ก็ตอบว่ามันคือ Kite เช่นกัน และเมื่อผมไปที่ 978 01:01:56,872 --> 01:02:00,286 studio orchestrator ก็ตอบว่า orchestrator อยู่ที่นั่น 979 01:02:00,286 --> 01:02:03,506 นั่นหมายความว่าการผูกช่อง Telegram กับเอเจนต์ทำงาน 980 01:02:03,506 --> 01:02:06,983 Kite จะไม่ไปฟังในช่องของ orchestrator และ orchestrator 981 01:02:06,983 --> 01:02:10,461 ก็จะไม่ฟังในช่องของ Kite ซึ่งเป็นสิ่งที่เราต้องการเป๊ะ 982 01:02:10,461 --> 01:02:14,390 ตอนนี้เรามีส่วนหลักทั้งหมดของเฟรมเวิร์กที่เราต้องการพร้อมแล้ว 983 01:02:14,390 --> 01:02:17,932 Hermes Agent พร้อมแล้ว orchestrator ตั้งค่าเสร็จสมบูรณ์ 984 01:02:17,932 --> 01:02:21,088 Kite นักพัฒนาของเราก็ตั้งค่าเสร็จ group พร้อมแล้ว 985 01:02:21,088 --> 01:02:24,243 เราสามารถเริ่ม build แดชบอร์ดได้เลย ตลอดการ build 986 01:02:24,243 --> 01:02:28,558 แดชบอร์ดทั้งหมด เราจะใช้ Kite ซึ่งรับบทเป็นทั้งนักออกแบบและนักพัฒนา 987 01:02:28,558 --> 01:02:32,938 และก่อนที่เราจะให้ Kite เริ่ม build แดชบอร์ด เราจะต้องแจ้งรายละเอียด 988 01:02:32,938 --> 01:02:36,287 (brief) ให้ Kite ทราบเกี่ยวกับทั้งหมดที่เราอยากสร้าง 989 01:02:36,287 --> 01:02:40,730 ตั้งแต่ต้นจนจบ และแนวคิด (concept) ที่เรามีสำหรับสิ่งที่เรากำลังสร้าง 990 01:02:40,730 --> 01:02:46,913 และสำหรับสิ่งนั้น ผมจะให้พรอมป์ต์นี้กับ Kite เป็นการสรุปรายละเอียดเพื่อให้มันรู้ว่าเราอยากทำอะไร 991 01:02:46,913 --> 01:02:51,550 ผมเพิ่งส่งอันนี้ให้ Kite และระหว่างนี้ผมจะอธิบายให้คุณฟังว่าผมส่งอะไรให้ 992 01:02:51,550 --> 01:02:55,607 Kite ผมบอก Kite ว่า "เฮ้ ก่อนที่เราจะเขียนโค้ดแม้แต่บรรทัดเดียว 993 01:02:55,607 --> 01:02:59,085 นี่คือภาพรวมทั้งหมดของสิ่งที่เรากำลังสร้าง" ผมกำลังบอก 994 01:02:59,085 --> 01:03:04,559 Kite เรากำลังสร้างสตูดิโอระบบอัตโนมัติคอนเทนต์ระดับพรีเมียมพร้อมแดชบอร์ดเว็บที่สวยงาม 995 01:03:04,559 --> 01:03:07,908 ผมบอก Kite ว่ากระบวนการทั้งหมดจะทำงานอย่างไร เราจะมี 996 01:03:07,908 --> 01:03:12,674 Atlas นักวิจัยของเราที่ไปเสนอไอเดีย แล้วเราจะโปรโมตไอเดียหนึ่งในฐานะผู้ใช้ 997 01:03:12,674 --> 01:03:15,701 จากนั้น Vera จะเขียนเนื้อหาของสไลด์ พอเสร็จแล้ว 998 01:03:15,701 --> 01:03:21,433 Kite ซึ่งเป็นทั้งนักพัฒนาและนักออกแบบของเราจะนำคอนเทนต์นั้นใส่ลงในเทมเพลตหนึ่งที่เราเลือก 999 01:03:21,433 --> 01:03:24,975 แล้วเรนเดอร์เทมเพลตนั้นจากเอกสาร HTML เป็นภาพขนาดประมาณ 1000 01:03:24,975 --> 01:03:31,351 1080x1350 พิกเซล จากนั้น Orion นักเผยแพร่ของเราจะเผยแพร่สิ่งนี้ไปยังเครือข่ายใดก็ตามที่เราอยากสร้าง 1001 01:03:31,351 --> 01:03:34,700 และผมยังบอก Kite ด้วยว่าเราจะรันสิ่งนี้บนเซิร์ฟเวอร์ 1002 01:03:34,700 --> 01:03:37,920 Python ขนาดเล็กซึ่งจะอยู่บนแดชบอร์ด และที่สำคัญมาก 1003 01:03:37,920 --> 01:03:44,489 ผมบอก Kite ว่าเราจะให้เทมเพลตที่เราจะทำงานด้วย และผมอยากให้เทมเพลตนี้เป็นแหล่งอ้างอิงความจริงของดีไซน์ 1004 01:03:44,489 --> 01:03:49,834 (design source of truth) เพราะผมไม่อยากให้มันเปลี่ยนอะไรก็ตามที่เราจะใส่ลงในเทมเพลต 1005 01:03:49,834 --> 01:03:54,021 และยังมีอีกสองสามอย่างที่ผมให้มัน คืออยากให้มีโปรโตคอลสำรองข้อมูล 1006 01:03:54,021 --> 01:03:57,112 (backup protocol) และหลักการบางอย่างว่าการ build 1007 01:03:57,112 --> 01:04:00,203 ทั้งหมดจะเป็นอย่างไร Kite ตอบว่า "เฮ้ เข้าใจแล้ว 1008 01:04:00,203 --> 01:04:08,189 นี่คือแผนในคำพูดของผมเอง Cadence เป็นสตูดิโอระบบอัตโนมัติคอนเทนต์ที่สมบูรณ์พร้อมแดชบอร์ดเว็บที่ขัดเกลาเป็นอินเทอร์เฟซควบคุม" 1009 01:04:08,189 --> 01:04:13,341 และมันก็แค่พูดซ้ำทุกอย่างที่เราบอก Kite ตามลำดับว่ากระแสงานทั้งหมดจะทำงานอย่างไร 1010 01:04:13,341 --> 01:04:17,206 Kite พร้อมที่จะเริ่ม build แดชบอร์ดกับเราแล้ว ในขั้นตอนถัดไป 1011 01:04:17,206 --> 01:04:21,456 เราจะบอก Kite ให้สร้างแบ็กเอนด์ Python ที่แดชบอร์ดเว็บนี้จะรันอยู่ 1012 01:04:21,456 --> 01:04:24,548 ผมจะให้พรอมป์ต์นี้เพื่อเตรียมสิ่งนั้น ผมบอก Kite 1013 01:04:24,548 --> 01:04:27,703 ว่า "เฮ้ เราจะสร้างแดชบอร์ดนี้ในแบบที่ปลอดภัยมาก" 1014 01:04:27,703 --> 01:04:30,923 สำหรับส่วนแรก เราจะตั้งค่าสิ่งนี้บนสิ่งที่เรียกว่า 1015 01:04:30,923 --> 01:04:35,625 SSH tunneling นั่นหมายความว่าเมื่อไหร่ก็ตามที่คุณอยากเชื่อมต่อกับแดชบอร์ด 1016 01:04:35,625 --> 01:04:39,360 คุณจะใช้คำสั่งอย่าง ssh -N -L พอร์ตนี้ แล้วตอนท้ายคุณจะใส่ 1017 01:04:39,360 --> 01:04:43,546 username และ IP address ของคุณ แต่ผมจะโชว์ให้ดูว่ามันทำงานอย่างไร 1018 01:04:43,546 --> 01:04:48,634 เหตุผลที่เราใช้วิธีนี้ตั้งแต่แรกคือ แดชบอร์ดเว็บจะไม่เปิดให้อินเทอร์เน็ตสาธารณะ 1019 01:04:48,634 --> 01:04:54,044 มีเพียงคนที่รู้รหัสผ่านของเซิร์ฟเวอร์ VPS ของคุณเท่านั้นที่จะเชื่อมต่อกับแดชบอร์ดได้ 1020 01:04:54,044 --> 01:04:58,037 นั่นคือสิ่งที่ทำให้มันปลอดภัยมาก แต่แม้หลังจากที่เราสร้างเสร็จ 1021 01:04:58,037 --> 01:05:01,128 เราจะติดตั้ง Tailscale ซึ่งจะโฮสต์แดชบอร์ดให้เรา 1022 01:05:01,128 --> 01:05:08,019 Tailscale เป็นหนึ่งในการตั้งค่าความปลอดภัยที่แข็งแกร่งที่สุดที่เราสามารถใช้เพื่อนำแดชบอร์ดของเราขึ้นออนไลน์ 1023 01:05:08,019 --> 01:05:11,755 ดังนั้นครั้งแรกเราจะใช้ SSH tunneling เพื่อเข้าถึงแดชบอร์ด 1024 01:05:11,755 --> 01:05:16,005 แต่เมื่อเสร็จแล้ว เราจะติดตั้ง Tailscale ซึ่งจะโฮสต์ทุกอย่างให้เรา 1025 01:05:16,005 --> 01:05:20,513 และสิ่งที่ดีที่สุดเกี่ยวกับ Tailscale คือ เราจะสามารถเข้าถึงแดชบอร์ดบน 1026 01:05:20,513 --> 01:05:25,086 PC ใดก็ตามที่รันบัญชี Tailscale ของเรา หรือแม้แต่บนโทรศัพท์มือถือของคุณ 1027 01:05:25,086 --> 01:05:29,015 เอาล่ะ Kite เสร็จแล้ว มันตั้งค่าแบ็กเอนด์ที่เราใช้รันแดชบอร์ด 1028 01:05:29,015 --> 01:05:32,621 และมันยังให้คำสั่ง SSH tunnel ที่เราจะใช้เข้าถึงแดชบอร์ด 1029 01:05:32,621 --> 01:05:35,970 สิ่งที่เราต้องทำคือคัดลอกคำสั่งที่ Kite ให้ไว้ตรงนี้ 1030 01:05:35,970 --> 01:05:41,187 กลับไปที่ PowerShell แล้วใส่คำสั่งนี้ ssh -L พอร์ตนี้คือพอร์ตที่เราใช้เซฟแดชบอร์ด 1031 01:05:41,187 --> 01:05:44,214 นี่คือฝั่งความปลอดภัย และนี่คือ username ของคุณ 1032 01:05:44,214 --> 01:05:47,369 ซึ่งในกรณีของผม ผมสร้าง username ใหม่ถ้าจำได้ชื่อ 1033 01:05:47,369 --> 01:05:52,071 Larry และนี่คือ IP address ของเซิร์ฟเวอร์ VPS ตรงนี้ผมจะใส่รหัสผ่านแล้วกด 1034 01:05:52,071 --> 01:05:55,549 enter มันจะพาคุณมาถึงจุดนี้ จะเป็นแค่เคอร์เซอร์กระพริบ 1035 01:05:55,549 --> 01:05:58,962 นั่นหมายความว่าคุณเชื่อมต่อกับแบ็กเอนด์ของเซิร์ฟเวอร์ 1036 01:05:58,962 --> 01:06:01,989 VPS แล้ว สิ่งที่เราจะทำตอนนี้คือเปิดเบราว์เซอร์ 1037 01:06:01,989 --> 01:06:05,080 แล้วอย่างที่ Kite ให้ไว้ มันบอกว่าเราควรเปิด URL 1038 01:06:05,080 --> 01:06:08,493 นี้บนเบราว์เซอร์ เราจะคัดลอก URL นี้ วางตรงนี้ แล้วกด 1039 01:06:08,493 --> 01:06:11,649 enter แล้วคุณจะเห็นว่าเราเชื่อมต่อกับแดชบอร์ดแล้ว 1040 01:06:11,649 --> 01:06:14,869 แต่เพราะเรายังไม่มีอะไรอยู่ตรงนั้น เราจึงเจอ error 1041 01:06:14,869 --> 01:06:19,506 response แบบนี้ แต่โดยหลักการแล้ว เราเชื่อมต่อกับแบ็กเอนด์ของเซิร์ฟเวอร์ 1042 01:06:19,506 --> 01:06:25,882 Python แล้ว สิ่งที่เราจะทำต่อไปคือ ต้องใส่อะไรบางอย่างบนแดชบอร์ดเพื่อให้เราเห็นสิ่งที่เรากำลังสร้าง 1043 01:06:25,882 --> 01:06:29,424 และสำหรับสิ่งนั้น เราจะบอก Kite ให้สร้างหน้าเว็บอัปโหลด 1044 01:06:29,424 --> 01:06:35,285 (web upload page) ในหน้านี้เราจะอัปโหลดไฟล์ทั้งหมดที่จะใช้เป็นเทมเพลตของสิ่งที่เราอยากสร้าง 1045 01:06:35,285 --> 01:06:40,824 ผมจะคัดลอกพรอมป์ต์นี้ให้ Kite แล้วส่งให้มันสร้างจุดอัปโหลดที่เราสามารถอัปโหลดสิ่งต่างๆ 1046 01:06:40,824 --> 01:06:44,108 ของแดชบอร์ดที่เราต้องการได้ ซึ่งจะประกอบด้วยเทมเพลต 1047 01:06:44,108 --> 01:06:47,715 HTML ของแดชบอร์ด และสไลด์ทั้งหมดที่เราจะใช้ตอนสร้างสไลด์ 1048 01:06:47,715 --> 01:06:53,060 carousel เหล่านี้ ระหว่างที่ Kite กำลังสร้าง ขอโชว์ให้ดูว่าเทมเพลตหน้าตาเป็นอย่างไร 1049 01:06:53,060 --> 01:06:56,795 นี่คือเทมเพลตเปล่าที่เราจะให้ Kite อัปโหลดบนแดชบอร์ดให้เรา 1050 01:06:56,795 --> 01:07:00,466 เราจะเห็นว่าเรามีแท็บ content ซึ่งมีการเติมข้อมูลเล็กน้อย 1051 01:07:00,466 --> 01:07:03,558 แท็บ ideas ดูว่างเปล่า แท็บ studio ก็ดูว่างเปล่า 1052 01:07:03,558 --> 01:07:07,680 ทุกอย่างดูว่างเปล่า แต่พอมันเสร็จ มันจะเพิ่มสิ่งนี้ลงในแบ็กเอนด์ 1053 01:07:07,680 --> 01:07:11,093 แล้วเราจะค่อยๆ เติมแดชบอร์ดเทมเพลตนี้ในขณะที่เราสร้าง 1054 01:07:11,093 --> 01:07:16,889 เอาล่ะ Kite เสร็จแล้ว มันสร้างแบ็กเอนด์ที่เราใช้สำหรับอัปโหลดไฟล์ทั้งหมดที่มันต้องใช้ในการ 1055 01:07:16,889 --> 01:07:20,109 build แดชบอร์ด และมันให้ URL นี้มา ฉันจะคัดลอก URL 1056 01:07:20,109 --> 01:07:24,295 เปิดเบราว์เซอร์ แล้ววาง URL นี้ หวังว่าเราจะมีแดชบอร์ดอัปโหลดเว็บ 1057 01:07:24,295 --> 01:07:27,451 โอเค อันนี้ทำงานได้ดีมาก มันสร้างแบ็กเอนด์อัปโหลด 1058 01:07:27,451 --> 01:07:30,736 Cadence ขึ้นมา และมันบอกเราว่ามันคาดหวังไฟล์สี่ไฟล์ 1059 01:07:30,736 --> 01:07:34,922 นั่นคือเทมเพลต HTML และไฟล์ JSON สามไฟล์ซึ่งจะเป็นเทมเพลตของสไลด์ 1060 01:07:34,922 --> 01:07:38,528 carousel และสำหรับ reel ผมจึงอัปโหลดไฟล์ทั้งสี่ที่จำเป็น 1061 01:07:38,528 --> 01:07:42,393 และนี่ก็ได้รับการยืนยันบนแดชบอร์ดว่าไฟล์ทั้งสี่ถูกบันทึกแล้ว 1062 01:07:42,393 --> 01:07:47,996 ขั้นตอนถัดไป ผมจะบอก Kite ว่า "เฮ้ ผมอัปโหลดไฟล์ทั้งสี่ที่จำเป็นต่อการสร้างเทมเพลตเพื่อ 1063 01:07:47,996 --> 01:07:51,989 build แดชบอร์ดแล้ว ผมอยากให้คุณเสิร์ฟไฟล์เหล่านี้บนเซิร์ฟเวอร์ 1064 01:07:51,989 --> 01:07:55,660 Python เพื่อที่เราจะได้เห็นว่ามันทำงานจริง" สิ่งที่เราบอก 1065 01:07:55,660 --> 01:07:59,137 Kite ในพรอมป์ต์นี้คือ ไฟล์เทมเพลตที่เราอัปโหลดเรียกว่า 1066 01:07:59,137 --> 01:08:03,130 cadence_dashboard_template.html แต่ผมอยากให้มันเปลี่ยนชื่อเป็น 1067 01:08:03,130 --> 01:08:06,930 index.html ในโฟลเดอร์เฉพาะที่เราสร้างสำหรับแดชบอร์ดที่เราจะ 1068 01:08:06,930 --> 01:08:11,181 build และที่สำคัญมาก อย่างน้อยในกรณีของผม ถ้าคุณอยากเปลี่ยนเทมเพลต 1069 01:08:11,181 --> 01:08:14,530 คุณไม่จำเป็นต้องให้คำสั่งนี้กับ Kite แต่สิ่งที่ผมบอก 1070 01:08:14,530 --> 01:08:17,878 Kite คือ "เฮ้ นี่จะเป็นแหล่งอ้างอิงความจริงของดีไซน์ 1071 01:08:17,878 --> 01:08:24,834 เมื่อไหร่ก็ตามที่มันสร้างอะไร มันควรตรวจสอบเทมเพลตเสมอเพื่อให้แน่ใจว่ามันไม่ได้เปลี่ยนแปลงดีไซน์ของเทมเพลตไป 1072 01:08:24,834 --> 01:08:28,634 เพื่อให้สิ่งที่มันสร้างออกมาเหมือนกับที่เรามีในเทมเพลตเป๊ะ" 1073 01:08:28,634 --> 01:08:34,237 ผมบอกมันว่า "เทมเพลตมีค่าม็อก (mock values) แบบฮาร์ดโค้ดไว้เพื่อให้ไม่มีอะไรดูว่างเปล่า 1074 01:08:34,237 --> 01:08:39,325 แต่ตัวเลขเหล่านั้นบนเทมเพลตจะถูกแทนที่ด้วยเมตริกจริงเมื่อเราเริ่มสร้างแดชบอร์ด" 1075 01:08:39,325 --> 01:08:44,284 และนี่คือหนึ่งในสิ่งที่ผมชอบเกี่ยวกับ Hermes สิ่งที่คุณเห็นตรงนี้ตัวอย่างเช่น 1076 01:08:44,284 --> 01:08:48,405 มันทำงานที่เราให้เสร็จแล้ว และคุณจะเห็นว่ามันใช้เบราว์เซอร์ในตัว 1077 01:08:48,405 --> 01:08:52,398 (inbuilt browser) เพื่อตรวจสอบว่าทุกอย่างที่อยู่ตรงนั้นถูกต้อง 1078 01:08:52,398 --> 01:08:56,069 มันคลิกและถ่ายภาพหน้าจอของเบราว์เซอร์ (browser snapshots) 1079 01:08:56,069 --> 01:09:02,316 มันคลิกส่วนต่างๆ แล้วถ่ายภาพหน้าจอของแต่ละส่วน เพื่อให้แน่ใจว่าสิ่งที่มันทำเหมือนกับในเทมเพลตเป๊ะ 1080 01:09:02,316 --> 01:09:05,472 และนี่คือหนึ่งในเหตุผลหลักที่ผมชอบทำงานกับ Hermes 1081 01:09:05,472 --> 01:09:08,692 มาก เพราะผมสร้างแดชบอร์ดบ่อย ถ้าเอเจนต์หรือ Hermes 1082 01:09:08,692 --> 01:09:12,299 อนุญาตให้เอเจนต์ทำงานกับเบราว์เซอร์แบบไม่มีหัว (headless 1083 01:09:12,299 --> 01:09:15,841 browser) เพื่อให้เห็นสิ่งที่มันกำลังสร้าง นี่มันเจ๋งมาก 1084 01:09:15,841 --> 01:09:21,186 เอาล่ะ Kite บอกว่ามันเสร็จแล้ว มันบอกว่าเทมเพลตถูกล็อกอินแล้วแต่สมบูรณ์เพียงบางส่วน 1085 01:09:21,186 --> 01:09:24,728 เพราะมีไฟล์หนึ่งที่หายไป พอผมดูตรงนี้ มันบอกว่ามันไม่พบ 1086 01:09:24,728 --> 01:09:28,528 templates_pack เพราะมันเป็น false zero ขอดูว่าเป็นเพราะอะไร 1087 01:09:28,528 --> 01:09:34,196 เป็นไปได้ว่าการอัปโหลดของเราไม่ทำงาน มันบอกว่าเราควรอัปโหลดไฟล์นี้อีกครั้งผ่านจุดอัปโหลด 1088 01:09:34,196 --> 01:09:37,287 ผมจะใส่อันนี้ตรงนี้อีกครั้งแล้วอัปโหลด templates 1089 01:09:37,287 --> 01:09:40,958 pack ใหม่ ผมจะบอก Kite ว่า "ผมอัปโหลด templates_pack.json 1090 01:09:40,958 --> 01:09:46,368 ใหม่แล้ว ช่วยยืนยันหน่อย" สมบูรณ์แบบ ดูเหมือนมีบางอย่างเกิดขึ้นตอนที่อัปโหลดครั้งแรก 1091 01:09:46,368 --> 01:09:49,846 มันบอกว่า "ใช่ ตอนนี้ผมเห็นมันแล้ว" มันตรวจสอบไฟล์แล้ว 1092 01:09:49,846 --> 01:09:54,611 และไฟล์ต้นฉบับที่อัปโหลดทั้งหมดตอนนี้อยู่ในโฟลเดอร์ที่เราต้องการให้มันอยู่ 1093 01:09:54,611 --> 01:09:59,184 ซึ่งสมบูรณ์แบบ ต่อไปไปที่แดชบอร์ดแล้วดูว่าแดชบอร์ดเรนเดอร์บนเซิร์ฟเวอร์ 1094 01:09:59,184 --> 01:10:02,984 Python จริงหรือไม่ ในการทำอย่างนั้น เราจะใช้ localhost:8892 1095 01:10:02,984 --> 01:10:09,939 เลข 8892 คือพอร์ตของเซิร์ฟเวอร์ และ localhost คือพื้นที่ภายในเครื่องบนเซิร์ฟเวอร์ของเราที่ใช้เข้าถึงแดชบอร์ด 1096 01:10:09,939 --> 01:10:14,769 แล้วพอเปิด หวังว่าสวยงาม คุณจะเห็นว่าเรามีแดชบอร์ดโหลดขึ้นมาเหมือนในเทมเพลต 1097 01:10:14,769 --> 01:10:19,471 ขอเปิดเทมเพลตเพื่อเปรียบเทียบแบบหนึ่งต่อหนึ่ง นี่คือสิ่งที่เรามีในเทมเพลต 1098 01:10:19,471 --> 01:10:24,043 และนี่คือสิ่งที่ถูกเสิร์ฟบนแดชบอร์ดของเรา ทุกหน้าเหมือนกับในเทมเพลตเป๊ะ 1099 01:10:24,043 --> 01:10:29,711 Kite ทำงานได้ดีมาก ในขั้นตอนถัดไป นี่คือหนึ่งในสิ่งที่ผมแนะนำเสมอเวลาสร้างอะไรกับเอเจนต์ 1100 01:10:29,711 --> 01:10:34,026 ให้เอเจนต์สร้างสำเนา (copy) ของแดชบอร์ดก่อนที่จะเปลี่ยนแปลงอะไรเสมอ 1101 01:10:34,026 --> 01:10:37,697 ผมพูดแบบนี้ในทุกวิดีโอ เพราะผมเคยทำงานบนแดชบอร์ดมาหลายวัน 1102 01:10:37,697 --> 01:10:43,622 แล้วเอเจนต์ของผมทำผิดพลาด และผมเสียทุกอย่างไป นี่คือเหตุผลที่สำคัญมากที่คุณต้องบอกเอเจนต์ว่า 1103 01:10:43,622 --> 01:10:49,482 "เฮ้ ก่อนที่คุณจะเปลี่ยนอะไรบนแดชบอร์ด กรุณาสร้างสำเนาของแดชบอร์ดและบันทึกไว้ที่ไหนสักแห่ง" 1104 01:10:49,482 --> 01:10:52,896 และบนแดชบอร์ด เรามีส่วนนี้ที่เป็นเลขเวอร์ชัน (version 1105 01:10:52,896 --> 01:10:57,404 number) ผมอยากให้มันอัปเดตเลขเวอร์ชันทุกครั้งที่มันเปลี่ยนแปลงแดชบอร์ด 1106 01:10:57,404 --> 01:11:00,753 ผมจะคัดลอกพรอมป์ต์นี้แล้วส่งให้ Kite เพื่อ implement 1107 01:11:00,753 --> 01:11:05,132 สิ่งนี้ และ Kite ก็ทำเสร็จแล้ว เมื่อเรามาที่แดชบอร์ดและรีโหลดเทมเพลต 1108 01:11:05,132 --> 01:11:08,159 เราควรเห็นว่ามันเปลี่ยนไปแล้ว เดิมเรามี version 1109 01:11:08,159 --> 01:11:12,217 0.1 editorial ขอเปิดเทมเพลตให้ดูว่าก่อนหน้านี้หน้าตาเป็นอย่างไร 1110 01:11:12,217 --> 01:11:15,759 ในเทมเพลตตรงส่วนล่างนี้ เดิมเรามี version 0.1 editorial 1111 01:11:15,759 --> 01:11:18,914 และตอนนี้คุณจะเห็นว่ามันถูกอัปเดตเป็น version 0.1 1112 01:11:18,914 --> 01:11:24,389 ในแดชบอร์ดของเรา หมายความว่า Kite จะคอยอัปเดตเวอร์ชันให้ตลอดเวลาเมื่อเราเดินหน้าต่อไป 1113 01:11:24,389 --> 01:11:28,317 ตอนนี้เราจะเริ่ม build กัน พารามิเตอร์ทั้งหมดที่คุณเห็นในแท็บ 1114 01:11:28,317 --> 01:11:32,825 content เป็นค่าฮาร์ดโค้ดจากเทมเพลตที่ผมสร้าง และทุกอย่างที่เรามีในแท็บ 1115 01:11:32,825 --> 01:11:36,368 agents, heat map ทุกอย่างเป็นฮาร์ดโค้ด เราจะให้พรอมป์ต์ 1116 01:11:36,368 --> 01:11:39,910 Kite เพื่ออัปเดตเมตริกแดชบอร์ดที่เรามีตรงนี้ รวมถึงแท็บ 1117 01:11:39,910 --> 01:11:43,130 agents เพื่อให้มีข้อมูลจริงจาก Hermes setup ของเรา 1118 01:11:43,130 --> 01:11:46,350 ไม่ใช่จากค่าฮาร์ดโค้ดในเทมเพลต และผมบอกมันว่า "เฮ้ 1119 01:11:46,350 --> 01:11:49,441 เมื่อคุณเสร็จ ยืนยันว่าแท็บทั้งสองแสดงข้อมูลจริง 1120 01:11:49,441 --> 01:11:56,976 และ heat map ตรงกับตาราง runs" สำหรับ heat map ข้อมูลทั้งหมดจะถูกดึงมาจากฐานข้อมูลบันทึกการทำงานของเอเจนต์ที่เราสร้าง 1121 01:11:56,976 --> 01:12:03,095 ถ้าจำได้ เราสร้างสิ่งที่เอเจนต์ทุกตัวจะบันทึกกิจกรรมเมื่อไหร่ก็ตามที่มันทำอะไรหรือปฏิบัติการใดๆ 1122 01:12:03,095 --> 01:12:06,250 เอาล่ะ Kite ทำเสร็จแล้ว มาดูสิ่งที่ Kite สร้างกัน 1123 01:12:06,250 --> 01:12:11,725 รีโหลดแดชบอร์ด ตรงนี้คุณจะเห็นว่ามันดึงเมตริกจริงจากฐานข้อมูลเอเจนต์ของเราที่เราสร้าง 1124 01:12:11,725 --> 01:12:16,426 คุณจะเห็นว่า Kite พยายามดึงเมตริกจริงจากฐานข้อมูลบันทึกการทำงานของเอเจนต์ 1125 01:12:16,426 --> 01:12:21,900 คุณจะเห็นว่าตอนนี้ในส่วน workload ของเอเจนต์ เพราะไม่มีเอเจนต์ตัวไหนทำงานอะไรในวันนี้ 1126 01:12:21,900 --> 01:12:24,992 ทุกอย่างจึงเป็นศูนย์สำหรับ Atlas, Vera และ Orion 1127 01:12:24,992 --> 01:12:28,083 และ Kite เป็นตัวเดียวที่จะทำงานกับเราวันนี้ Kite 1128 01:12:28,083 --> 01:12:32,333 จึงอยู่ที่ประมาณ 100% และเช่นเดียวกันเมื่อคุณมาที่ฐานข้อมูลเอเจนต์ 1129 01:12:32,333 --> 01:12:35,811 คุณจะเห็นว่าทุกอย่างเกือบเป็นศูนย์สำหรับเอเจนต์ทั้งหมด 1130 01:12:35,811 --> 01:12:39,804 เพราะพวกมันยังไม่ได้ทำอะไรในวันนี้ ผมกำลังอัดวิดีโอในวันที่สอง 1131 01:12:39,804 --> 01:12:42,831 ดังนั้นผมคาดว่าจะมีเมตริกบางอย่างจากวันก่อนหน้า 1132 01:12:42,831 --> 01:12:47,726 ผมจะบอก Kite ว่า "เฮ้ ดูเหมือนว่าเมตริกที่ถูกดึงมานั้นดึงมาจากวันนี้เท่านั้น 1133 01:12:47,726 --> 01:12:53,522 แต่ควรมีกิจกรรมจากเอเจนต์ในวันก่อนหน้าด้วย มันควรทำให้แน่ใจว่าแดชบอร์ดไม่เพียงสะท้อนวันนี้ 1134 01:12:53,522 --> 01:12:57,773 แต่สะท้อนข้อมูลทั้งหมดที่เรามีในฐานข้อมูลบันทึกการทำงานของเอเจนต์" 1135 01:12:57,773 --> 01:13:01,315 ผมบอก Kite ว่า "เฮ้ อันนี้ดูเจ๋งมาก ขอบคุณ อย่างไรก็ตาม 1136 01:13:01,315 --> 01:13:04,664 ดูเหมือนว่าเมตริกเอเจนต์ที่แสดงเป็นของวันนี้เท่านั้น 1137 01:13:04,664 --> 01:13:08,657 ผมไม่เห็นข้อมูลจากเมื่อวานเลย แม้ว่าฐานข้อมูลควรจะมีข้อมูลนี้" 1138 01:13:08,657 --> 01:13:15,741 มันควรตรวจสอบว่าอะไรผิดปกติ และทำให้แน่ใจว่าเราเสิร์ฟข้อมูลทั้งหมดที่มีอยู่ในฐานข้อมูลบันทึกการทำงานของเอเจนต์ 1139 01:13:15,741 --> 01:13:19,219 เอาล่ะ Kite บอกว่ามันเสร็จแล้ว ดูเหมือนมีปัญหาเกิดขึ้น 1140 01:13:19,219 --> 01:13:22,632 มันบอกว่าปัญหาที่แท้จริงคือมีปัญหากับเซิร์ฟเวอร์ทดสอบ 1141 01:13:22,632 --> 01:13:26,754 (test server) ของ Python ที่ลบสิ่งต่างๆ ออกจากฐานข้อมูลโปรดักชัน 1142 01:13:26,754 --> 01:13:29,909 มันจึงแก้ไขสิ่งนี้ด้วย มันบอกว่าการแก้ไขเสร็จสิ้น 1143 01:13:29,909 --> 01:13:33,001 เซิร์ฟเวอร์ทดสอบไม่แตะฐานข้อมูลโปรดักชันอีกต่อไป 1144 01:13:33,001 --> 01:13:37,187 และมันเพิ่มมาตรการบางอย่างเพื่อให้แน่ใจว่าสิ่งนี้จะไม่เกิดขึ้นอีก 1145 01:13:37,187 --> 01:13:40,536 แต่สิ่งที่ผมอยากให้ Kite ทำก่อนที่เราจะเดินหน้าต่อไป 1146 01:13:40,536 --> 01:13:43,627 ผมอยากแน่ใจว่าปัญหานี้แก้ไขแล้วจริง ผมจะบอก Kite 1147 01:13:43,627 --> 01:13:47,620 ว่า "เฮ้ ทำการทดสอบแบบ end-to-end smoke test กับเอเจนต์ทั้งหมด 1148 01:13:47,620 --> 01:13:54,576 กระตุ้นกิจกรรมทดสอบสองสามอย่าง แล้วตรวจสอบว่าข้อมูลที่ได้ถูกบันทึกในฐานข้อมูลและสะท้อนบนแดชบอร์ดอย่างถูกต้อง 1149 01:13:54,576 --> 01:14:01,660 ถ้ามีอะไรที่ขาดหายไป ก็แก้ไขมันด้วย" เพราะฐานข้อมูลบันทึกการทำงานของเอเจนต์จะเป็นส่วนสำคัญของสิ่งที่เราจะสร้าง 1150 01:14:01,660 --> 01:14:05,073 ผมจึงอยากแน่ใจร้อยเปอร์เซ็นต์ว่าเอเจนต์บันทึกการทำงาน 1151 01:14:05,073 --> 01:14:08,551 และทุกสิ่งที่พวกมันทำสะท้อนบนแดชบอร์ดนี้ และยังไงก็ตาม 1152 01:14:08,551 --> 01:14:12,673 พรอมป์ต์เชิงลึกทั้งหมดที่ผมเพิ่มเข้าไปนี้ ผมจะทำให้คุณเข้าถึงได้ 1153 01:14:12,673 --> 01:14:17,181 ถ้าคุณเจอสถานการณ์เดียวกัน คุณก็แค่คัดลอกวางพรอมป์ต์แล้วให้เอเจนต์หรือ 1154 01:14:17,181 --> 01:14:20,466 Kite แก้ไขให้คุณ เอาล่ะ Kite บอกว่ามันทำ smoke test 1155 01:14:20,466 --> 01:14:25,747 เสร็จแล้ว มันทำซ้ำกับเอเจนต์ทั้งหมด และตอนนี้คุณจะเห็นว่าเอเจนต์ทั้งหมดทำเสร็จแล้ว 1156 01:14:25,747 --> 01:14:30,319 เมื่อเรากลับมาที่แดชบอร์ด คุณจะเห็นว่าตอนนี้เราไม่มีค่าศูนย์ที่เราเคยมี 1157 01:14:30,319 --> 01:14:35,987 เรามีเมตริกจากเอเจนต์ทั้งหมด ที่ถูกดึงมาจากฐานข้อมูลบันทึกการทำงานของเอเจนต์อย่างถูกต้อง 1158 01:14:35,987 --> 01:14:39,336 และเช่นเดียวกันกับ heat map และเมื่อเรามาที่แดชบอร์ด 1159 01:14:39,336 --> 01:14:42,813 เรายังเห็นว่าจำนวน runs ทั้งหมดของเอเจนต์ก็ถูกต้องด้วย 1160 01:14:42,813 --> 01:14:47,772 ยังมีอีกอย่างหนึ่งที่ไม่ถูกต้องตรงนี้ ซึ่งเกี่ยวกับการกระจายภาระงานของเอเจนต์ 1161 01:14:47,772 --> 01:14:50,864 (agent workload distribution) อันนี้ควรรวมกันได้ 1162 01:14:50,864 --> 01:14:54,921 100 เสมอ เพื่อที่เราจะได้เห็นว่าเอเจนต์ตัวไหนมีภาระงานมากที่สุด 1163 01:14:54,921 --> 01:14:58,399 ผมจะบอก Kite ให้แก้ไขอันนี้ด้วย แล้วเราค่อยไปต่อกับการ 1164 01:14:58,399 --> 01:15:04,517 build ผมบอก Kite ว่า "เฮ้ บนหน้าแรกของแดชบอร์ด การกระจายส่วนแบ่งภาระงานของเอเจนต์ไม่สมเหตุสมผล" 1165 01:15:04,517 --> 01:15:08,574 ผมบอกมันว่าทุกอย่างควรรวมกันได้ 100% แต่ตอนนี้ทุกอย่างรวมกันได้ 1166 01:15:08,574 --> 01:15:13,791 350 แนวคิดคือ เมื่อไหร่ก็ตามที่ผมดูอันนี้ ผมควรจะเห็นว่าเอเจนต์ตัวไหนทำงานมากกว่า 1167 01:15:13,791 --> 01:15:18,042 มันควรแก้ไขอันนี้ให้เรา Kite ก็ทำเสร็จแล้ว ตอนนี้เมื่อผมดูแดชบอร์ด 1168 01:15:18,042 --> 01:15:21,133 คุณจะเห็นว่าการกระจายสมเหตุสมผลแล้ว มันรวมกันได้ 1169 01:15:21,133 --> 01:15:24,675 100% และผมเห็นชัดเจนว่า Kite เป็นเอเจนต์ที่แอคทีฟที่สุด 1170 01:15:24,675 --> 01:15:30,536 เพราะมันเป็นคนสร้างแดชบอร์ดอยู่แล้ว ตอนนี้ฐานข้อมูลบันทึกการทำงานของเอเจนต์ทำงานถูกต้องแล้ว 1171 01:15:30,536 --> 01:15:34,207 เมตริกทั้งหมดที่วางบนแท็บ agents ก็สมเหตุสมผล เราจึงเริ่ม 1172 01:15:34,207 --> 01:15:39,294 build คอมโพเนนต์อื่นๆ ของแดชบอร์ดได้ ผมจะอธิบายแนวคิดว่าพรอมป์ต์ทั้งหมดจะทำอะไร 1173 01:15:39,294 --> 01:15:44,576 และผมจะใส่พรอมป์ต์ทั้งหมดนี้ในครั้งเดียว เพื่อที่คุณจะได้ไม่ต้องนั่งดูผมใส่ทีละอัน 1174 01:15:44,576 --> 01:15:48,955 ในพรอมป์ต์ถัดไปเราจะสร้าง exporter และขออธิบายว่าทำไมเราถึงต้องมีมัน 1175 01:15:48,955 --> 01:15:52,046 เดิมที เมื่อไหร่ก็ตามที่คุณอยากสร้างภาพ carousel 1176 01:15:52,046 --> 01:15:55,138 หรือสไลด์ คุณต้องออกแบบทุกอย่างในโปรแกรมแก้ไขภาพ 1177 01:15:55,138 --> 01:15:58,164 (photo editor) เสมอ แล้วบันทึก ส่งออกเป็นรูปภาพ 1178 01:15:58,164 --> 01:16:02,222 แล้วคุณก็ได้ภาพ carousel ของคุณ แต่เคล็ดลับที่เราจะใช้ตรงนี้คือ 1179 01:16:02,222 --> 01:16:05,378 เราจะเรนเดอร์ทุกสไลด์ เราจะสร้างทุกสไลด์เป็น HTML 1180 01:16:05,378 --> 01:16:09,177 ถ้าคุณสร้างสไลด์เป็นภาพ คุณจะจ่ายเงินทุกครั้งต่อภาพที่สร้าง 1181 01:16:09,177 --> 01:16:13,235 ถ้าอยากเปลี่ยนข้อความในภาพ นั่นหมายความว่าคุณต้องจ่ายเงินสำหรับ 1182 01:16:13,235 --> 01:16:16,970 API call ทุกครั้ง ซึ่งทำให้การทำงานกับสไลด์ไม่สนุกอีกต่อไป 1183 01:16:16,970 --> 01:16:20,126 เราจะสร้างมันด้วยวิธีที่ฉลาดกว่านี้ เราจะสร้างทุก 1184 01:16:20,126 --> 01:16:25,986 carousel เป็นไฟล์ HTML เพราะมันจะเป็นไฟล์ HTML เราจะแก้ไขข้อความใดก็ตามที่อยากแก้ได้ง่ายมาก 1185 01:16:25,986 --> 01:16:30,752 ขอเข้าไปในเซ็ตอัปของผมเพื่ออธิบายให้คุณเห็นแนวคิดว่าเราจะสร้างสไลด์อย่างไร 1186 01:16:30,752 --> 01:16:34,488 ขอยกอันนี้เป็นตัวอย่าง ทุกอย่างที่คุณเห็นตรงนี้ดูเหมือนภาพ 1187 01:16:34,488 --> 01:16:38,738 แต่จริงๆ แล้วมันไม่ใช่ภาพ มันเป็นเอกสาร HTML ที่เรนเดอร์ไฟล์แบบนี้ 1188 01:16:38,738 --> 01:16:42,538 เมื่อไหร่ก็ตามที่ผมอยากส่งออกเป็นภาพ ผมจะใช้สิ่งที่เรียกว่า 1189 01:16:42,538 --> 01:16:45,758 headless browser (เบราว์เซอร์ไร้หน้าต่าง) headless 1190 01:16:45,758 --> 01:16:50,459 browser ไม่จำเป็นต้องมีเดสก์ท็อปในการรัน มันจะเรนเดอร์ไฟล์นี้ซึ่งเป็นไฟล์ 1191 01:16:50,459 --> 01:16:56,256 HTML แล้วถ่ายภาพหน้าจอของสิ่งที่มันเห็น ดังนั้นทุกสิ่งที่เราเห็นตรงนี้ซึ่งเรนเดอร์เป็นโค้ด 1192 01:16:56,256 --> 01:17:00,120 จะถูกส่งออกเป็น JPEG ในที่สุด แล้วคุณก็สามารถอัปโหลดมันไปยัง 1193 01:17:00,120 --> 01:17:05,336 Instagram, TikTok หรือที่ไหนก็ตามที่อยากสร้าง เหตุผลที่เราทำด้วยวิธีที่ฉลาดนี้คือ 1194 01:17:05,336 --> 01:17:08,492 เดิมทีเมื่อไหร่ก็ตามที่คุณอยากสร้างสไลด์ carousel 1195 01:17:08,492 --> 01:17:11,648 คุณต้องใช้เครื่องสร้างภาพ บางทีคุณอาจใช้ Leonardo 1196 01:17:11,648 --> 01:17:17,187 หรือโมเดล AI ทั้งหลายที่มีอยู่เพื่อสร้างภาพ แต่เมื่อคุณอยากเปลี่ยนข้อความแม้แต่คำเดียว 1197 01:17:17,187 --> 01:17:20,858 คุณต้องบอกโมเดล AI อีกครั้งว่า "เฮ้ ผมอยากเปลี่ยนข้อความ" 1198 01:17:20,858 --> 01:17:24,013 เช่น ผมอยากเปลี่ยนจาก most people เป็น most users 1199 01:17:24,013 --> 01:17:27,749 ผมต้องบอกโมเดล AI อีกครั้งว่า "เฮ้ ผมอยากเปลี่ยนข้อความจาก 1200 01:17:27,749 --> 01:17:31,742 most people เป็น most users" แล้วคุณก็จ่ายเงินทุกครั้งที่แก้ไข 1201 01:17:31,742 --> 01:17:36,314 ซึ่งอาจไม่ใช่วิธีที่ฉลาดที่สุด วิธีที่ผมสร้างและที่ผู้ใช้ส่วนใหญ่ใช้คือ 1202 01:17:36,314 --> 01:17:39,405 คุณสร้างสไลด์ทั้งใบเป็นไฟล์ HTML และด้วยวิธีนั้น 1203 01:17:39,405 --> 01:17:44,751 คุณสามารถเปลี่ยนทุกอย่างที่อยากเปลี่ยนในไฟล์ได้โดยไม่ต้องสร้างพรอมป์ต์ใหม่หรือสร้าง 1204 01:17:44,751 --> 01:17:48,744 API keys ใหม่ ตัวอย่างเช่น นี่คือสิ่งที่แดชบอร์ดของเราจะทำด้วย 1205 01:17:48,744 --> 01:17:53,381 เมื่อผมคลิก fine-tune แล้วเลือกองค์ประกอบนี้ ผมก็เปลี่ยนข้อความตรงนี้จาก 1206 01:17:53,381 --> 01:17:56,987 people เป็น most builders ได้เลย และคุณจะเห็นว่ามันทำได้ 1207 01:17:56,987 --> 01:18:01,174 ผมสามารถบันทึกและเรนเดอร์ใหม่ แล้วผมก็ได้สไลด์ใหม่โดยไม่ต้องเรียก 1208 01:18:01,174 --> 01:18:04,265 API เลย เช่นเดียวกัน ผมเปลี่ยนคอนเทนต์ทั้งหมดได้ 1209 01:18:04,265 --> 01:18:08,516 นี่คือเหตุผลที่ผมชอบสิ่งที่เราสร้างตรงนี้มาก ผมเปลี่ยนเลย์เอาต์ได้ 1210 01:18:08,516 --> 01:18:13,024 ย้ายคอนเทนต์ทุกชิ้นตรงนี้ เปลี่ยนขนาด ใส่ในรูปแบบไหนก็ได้ตามที่ต้องการ 1211 01:18:13,024 --> 01:18:16,630 โดยไม่ต้องจ่ายค่า API call เลย ดังนั้นสิ่งที่เราสร้างคือ 1212 01:18:16,630 --> 01:18:20,430 เราสร้างสไลด์ carousel ทุกใบเป็นไฟล์ HTML แล้วเมื่อเราพร้อม 1213 01:18:20,430 --> 01:18:28,931 เราก็ใช้ headless browser ที่ดูไฟล์ HTML ที่เราสร้างและสร้างภาพหน้าจอเป็นรูปภาพที่เราสามารถอัปโหลดไปยังแพลตฟอร์มโซเชียลมีเดียใดก็ได้ 1214 01:18:28,931 --> 01:18:32,344 เราจึงหลีกเลี่ยงการทำให้การออกแบบภาพ carousel ซับซ้อน 1215 01:18:32,344 --> 01:18:36,402 ที่คุณต้องเรียก API ทุกครั้งที่แก้ไขและจ่ายเงินทุกครั้งที่แก้ไข 1216 01:18:36,402 --> 01:18:40,202 เรากำลังเรนเดอร์ทุกอย่างเป็นไฟล์ HTML ที่แก้ไขได้อย่างอิสระ 1217 01:18:40,202 --> 01:18:43,229 ค่อนข้างบ้ามากที่คุณสามารถทำได้กับ HTML มาตรฐาน 1218 01:18:43,229 --> 01:18:47,093 อย่างที่คุณเห็นเทมเพลตทั้งหมดตรงนี้ ไม่มีสักอันที่เป็นรูปภาพ 1219 01:18:47,093 --> 01:18:52,052 ทุกอย่างสร้างด้วย HTML มาตรฐาน ซึ่งบางคนอาจไม่เชื่อด้วยซ้ำว่าสิ่งนี้สร้างด้วย 1220 01:18:52,052 --> 01:18:55,336 HTML โดยพื้นฐานแล้ว พรอมป์ต์นี้จะสร้างการตั้งค่าของ 1221 01:18:55,336 --> 01:18:58,685 headless browser ที่จะเรนเดอร์สิ่งที่เราสร้างจากไฟล์ 1222 01:18:58,685 --> 01:19:03,193 HTML ให้เป็นภาพที่สามารถอัปโหลดบนแพลตฟอร์มโซเชียลมีเดียใดก็ตามที่เรามี 1223 01:19:03,193 --> 01:19:07,508 เราไม่ได้สร้างภาพตรงๆ เราสร้างไฟล์ HTML ที่มีโครงสร้างที่เราต้องการ 1224 01:19:07,508 --> 01:19:11,437 แล้วพอเราพอใจกับมัน เราก็ส่งออกเป็นภาพ และสำหรับสิ่งนี้เราใช้ 1225 01:19:11,437 --> 01:19:14,979 headless browser ที่เรียกว่า Chromium และโดยค่าเริ่มต้น 1226 01:19:14,979 --> 01:19:19,938 Hermes setup ส่วนใหญ่มาพร้อมกับ Chromium เราจึงอาจไม่ต้องติดตั้งมันเองด้วยซ้ำ 1227 01:19:19,938 --> 01:19:24,897 เราแค่ใช้ประโยชน์จากสิ่งที่ Hermes มีอยู่แล้ว แล้วใช้มันสร้างสิ่งที่อยากสร้าง 1228 01:19:24,897 --> 01:19:29,405 ถ้าจำได้ ตอนที่เราสร้างแดชบอร์ด มีส่วนที่ผมบอกว่าเอเจนต์ใช้เบราว์เซอร์ 1229 01:19:29,405 --> 01:19:35,524 ตัวอย่างเช่น คุณจะเห็นว่า Kite เรนเดอร์เบราว์เซอร์ที่มันไปที่แดชบอร์ดและตรวจสอบว่าทุกอย่างทำงาน 1230 01:19:35,524 --> 01:19:39,839 นั่นคือแนวคิดเดียวกันที่ผมจะใช้ เราจะให้นักออกแบบซึ่งในกรณีนี้ก็คือ 1231 01:19:39,839 --> 01:19:44,862 Kite ใช้ headless browser ตัวเดียวกัน แต่ตอนนี้มันจะไม่ใช้เพื่อตรวจสอบแดชบอร์ด 1232 01:19:44,862 --> 01:19:50,401 แต่จะใช้เพื่อแปลงสิ่งที่ไฟล์ HTML มีอยู่ มันทำให้การสร้างสไลด์ง่ายมากโดยไม่ต้องจ่ายค่า 1233 01:19:50,401 --> 01:19:53,749 API call ทุกครั้ง และ Kite ก็ทำเสร็จแล้ว มันทำ smoke 1234 01:19:53,749 --> 01:19:57,163 test และยืนยันว่าภาพถูกเรนเดอร์จากเบราว์เซอร์เป็นไฟล์ 1235 01:19:57,163 --> 01:20:01,156 PNG จริง ในขั้นตอนถัดไป เราจะสร้างทุกอย่างที่จะรันจากแบ็กเอนด์ 1236 01:20:01,156 --> 01:20:04,376 ผมจะอธิบายพรอมป์ต์แบ็กเอนด์ทั้งหมดเหล่านี้ แล้วให้ 1237 01:20:04,376 --> 01:20:10,687 Kite แต่ผมจะอธิบายพรอมป์ต์ทั้งหมดเหล่านี้จนถึงจุดที่เราไปถึงพรอมป์ต์ที่กระตุ้นการออกแบบฟรอนต์เอนด์ 1238 01:20:10,687 --> 01:20:13,714 เมื่อคุณใช้พรอมป์ต์ ทุกอย่างที่ผมพูดว่า backend 1239 01:20:13,714 --> 01:20:16,999 ผมจะพยายามเพิ่มคำนี้ เพื่อให้คุณรู้ว่าจะคาดหวังอะไร 1240 01:20:16,999 --> 01:20:20,283 ถ้าเป็นพรอมป์ต์แบ็กเอนด์ มันจะไม่แสดงอะไรบนแดชบอร์ด 1241 01:20:20,283 --> 01:20:23,954 มันกำลังสร้างรากฐานที่เราจะใช้เพื่อแสดงบางอย่างบนแดชบอร์ด 1242 01:20:23,954 --> 01:20:29,171 เมื่อเราไปถึงจุดที่ผมเขียนว่า design นั่นหมายความว่าสิ่งที่คุณจะทำคือจะแสดงดีไซน์ 1243 01:20:29,171 --> 01:20:32,456 แต่ถ้าผมไปถึงจุดที่ผมรู้สึกว่ามีประโยชน์ที่จะอธิบาย 1244 01:20:32,456 --> 01:20:37,672 ผมก็จะอธิบายให้คุณฟังด้วย เพื่อที่คุณจะเข้าใจว่าพรอมป์ต์เหล่านี้หน้าตาเป็นอย่างไร 1245 01:20:37,672 --> 01:20:43,082 และในทุกกรณีผมมักใส่คำอธิบายสั้นๆ เพื่ออธิบายว่าพรอมป์ต์จะทำอะไรและคุณควรคาดหวังอะไร 1246 01:20:43,082 --> 01:20:46,624 ตอนนี้เราทำพรอมป์ต์ exporter เสร็จแล้ว พรอมป์ต์ถัดไปคือ 1247 01:20:46,624 --> 01:20:50,166 template packs auto fit เมื่อไหร่ก็ตามที่เราสร้างไอเดีย 1248 01:20:50,166 --> 01:20:53,644 ขอใช้เซ็ตอัปของผมเพื่อให้คุณเห็นแนวคิดว่าผมกำลังทำอะไร 1249 01:20:53,644 --> 01:20:58,088 เมื่อผมคลิก generate ideas มาดูกัน ผมมีไอเดียที่ถูกสร้างไว้แล้วตรงนี้ 1250 01:20:58,088 --> 01:21:01,501 ขอดูตัวอย่างอย่าง "building a one person AI operation 1251 01:21:01,501 --> 01:21:07,684 team" เมื่อผมชอบไอเดียนี้และคลิก promote โดยพื้นฐานแล้วผมสามารถตัดสินใจจำนวนสไลด์ที่ต้องการสร้าง 1252 01:21:07,684 --> 01:21:11,934 สมมติว่าผมอยากสร้างหกสไลด์แล้วกด write slides สิ่งที่จะเกิดขึ้นคือ 1253 01:21:11,934 --> 01:21:16,829 Vera นักเขียนของเราจะเขียนสไลด์สำหรับ carousel หรือคอนเทนต์หรือข้อความสำหรับ 1254 01:21:16,829 --> 01:21:19,920 carousel ที่เราอยากสร้าง อย่างที่บอก ทุกอย่างที่ 1255 01:21:19,920 --> 01:21:25,910 Vera ให้เรามาเป็นเพียงข้อความดิบ (raw text) แต่เราต้องสามารถแทรกข้อความเหล่านี้ลงในเทมเพลตได้ 1256 01:21:25,910 --> 01:21:29,387 พรอมป์ต์ที่เราจะสร้างตรงนี้จะสร้างส่วนที่นำคอนเทนต์ที่ 1257 01:21:29,387 --> 01:21:34,991 Vera สร้างขึ้นมาแทรกลงในเทมเพลต HTML ที่เรามี เทมเพลตทั้งหมดที่คุณเห็นตรงนี้อย่างที่บอก 1258 01:21:34,991 --> 01:21:38,919 เป็นเทมเพลต HTML โดยพื้นฐาน ตัวอย่างเช่น เมื่อผมดูตัวอย่างนี้ 1259 01:21:38,919 --> 01:21:43,105 คุณจะเห็นว่าบางอันมีตัวอักษรยาวกว่าบางอัน อันนี้มีตัวอักษรยาวกว่า 1260 01:21:43,105 --> 01:21:46,519 อันนี้มีเลย์เอาต์ต่างกันและอื่นๆ สิ่งที่จะเกิดขึ้นคือ 1261 01:21:46,519 --> 01:21:50,576 แบ็กเอนด์ที่เราจะสร้างจะดูเทมเพลตที่คุณเลือก แล้วปรับข้อความที่ 1262 01:21:50,576 --> 01:21:54,762 Vera สร้างให้เข้ากับเทมเพลตนั้น และนี่คือสิ่งที่ผมเรียกว่าฟีเจอร์ 1263 01:21:54,762 --> 01:21:58,369 auto fit เพื่อให้สิ่งนี้ทำงาน เราต้องสร้างเรนเดอร์เอนจิน 1264 01:21:58,369 --> 01:22:02,619 (render engine) ที่จะดูคอนเทนต์ที่ Vera สร้าง แล้วดูเทมเพลตปลายทาง 1265 01:22:02,619 --> 01:22:05,646 ตัวอย่างเช่น ถ้าผมบอกว่า "เฮ้ ผมชอบคอนเทนต์นี้" 1266 01:22:05,646 --> 01:22:09,961 เมื่อผมมาที่ approve และเลือกเทมเพลต มันจะถามว่าผมอยากใช้เทมเพลตไหน 1267 01:22:09,961 --> 01:22:15,886 เมื่อไหร่ก็ตามที่ผมเลือกเทมเพลตที่อยากใช้ แบ็กเอนด์ที่เราจะสร้างตรงนี้จะดูเทมเพลตที่เราเลือก 1268 01:22:15,886 --> 01:22:19,042 ดูจำนวนคำและตัวอักษรที่มี แล้วปรับข้อความที่ Vera 1269 01:22:19,042 --> 01:22:22,069 สร้างให้เข้ากับเทมเพลตนั้น ลองนึกภาพว่าถ้าคำที่ 1270 01:22:22,069 --> 01:22:26,062 Vera สร้างยาวเกินกว่าที่เทมเพลตรองรับ carousel ก็จะดูน่าเกลียด 1271 01:22:26,062 --> 01:22:30,248 นี่คือเหตุผลที่เราสร้างเรนเดอร์เอนจินนี้เพื่อจัดการสิ่งนั้นให้เรา 1272 01:22:30,248 --> 01:22:34,434 และหลังจากนั้นเราจะสร้างไปป์ไลน์ (pipeline) เพื่อคุยกับทีมเอเจนต์ 1273 01:22:34,434 --> 01:22:37,719 ตอนนี้เวลาผมคุยกับทีม ผมแชทกับ Kite ได้ แชทกับ Vera 1274 01:22:37,719 --> 01:22:42,549 ได้ แต่ยังแชทกับนักเผยแพร่ของเราไม่ได้ แต่เราอยากคุยกับพวกมันจากแดชบอร์ดได้ 1275 01:22:42,549 --> 01:22:45,576 และคำว่า "คุย" ที่ผมหมายถึงคือ เมื่อผมมาที่แท็บ 1276 01:22:45,576 --> 01:22:48,796 ideas แล้วคลิก generate ideas นี่จะส่งข้อความไปที่ 1277 01:22:48,796 --> 01:22:52,467 Atlas นักวิจัยของเราเพื่อหาไอเดียว่าเราสามารถสร้างอะไรได้ 1278 01:22:52,467 --> 01:22:55,687 ผมกำลังคุยกับ Atlas ผ่านโค้ดที่ผมส่งทริกเกอร์ไปที่ 1279 01:22:55,687 --> 01:22:59,938 Atlas ว่า "เฮ้ สร้างไอเดียให้หน่อย" และเช่นเดียวกันกับเอเจนต์อื่นๆ 1280 01:22:59,938 --> 01:23:03,737 ทั้งหมด เมื่อไหร่ก็ตามที่เราอยากเผยแพร่อะไร เราไม่ต้องมาที่ 1281 01:23:03,737 --> 01:23:09,662 Telegram แล้วบอกให้มันเผยแพร่ เราอยากกดปุ่มบนแดชบอร์ดที่จะทริกเกอร์เอเจนต์ให้เผยแพร่คอนเทนต์ 1282 01:23:09,662 --> 01:23:15,781 และนี่คือสิ่งที่พรอมป์ต์ 17 จะทำ มันจะสร้างอินเทอร์เฟซที่เมื่อไหร่ก็ตามที่เราคลิกปุ่มบนแดชบอร์ด 1283 01:23:15,781 --> 01:23:20,160 มันจะส่งและทริกเกอร์เอเจนต์ให้ทำงานนั้นให้เรา จากนั้นเราจะมีพรอมป์ต์ 1284 01:23:20,160 --> 01:23:25,119 18 พรอมป์ต์ 18 จะเป็นของ Atlas โดยเฉพาะ ซึ่งเป็นคนดูแลไอเดียและนักวิจัยของเรา 1285 01:23:25,119 --> 01:23:28,726 และผมก็แค่บอก Atlas ว่าผมอยากให้ carousel ออกแบบมาแบบไหน 1286 01:23:28,726 --> 01:23:31,881 ตรงนี้เป็นแค่ตัวอย่างที่ผมใส่ลงไป ผมบอก Atlas ว่า 1287 01:23:31,881 --> 01:23:36,583 "เฮ้ เมื่อไหร่ก็ตามที่คุณเขียนสไลด์ carousel ผมอยากให้เขียนด้วยภาษาธรรมดา 1288 01:23:36,583 --> 01:23:39,610 ง่ายๆ คำสั้นๆ ประโยคสั้นๆ ไม่มีการโอเวอร์ ไม่มี 1289 01:23:39,610 --> 01:23:43,281 buzz words อะไรแบบนั้น" ดังนั้นพรอมป์ต์นี้จึงให้แนวทางแก่ 1290 01:23:43,281 --> 01:23:46,436 Atlas ว่าเราอยากให้คอนเทนต์เป็นแบบไหน รวมถึง Vera 1291 01:23:46,436 --> 01:23:50,816 นักเขียนคอนเทนต์ของเราว่าเราอยากให้คอนเทนต์ของสไลด์หน้าตาเป็นอย่างไร 1292 01:23:50,816 --> 01:23:54,229 และตรงนี้เรายังให้แนวทางกับมันเกี่ยวกับการสร้างไอเดีย 1293 01:23:54,229 --> 01:23:57,320 มันควรสร้างสี่ไอเดีย และแนวทางว่าเราอยากให้สไลด์ 1294 01:23:57,320 --> 01:24:01,764 carousel ทั้งหมดหน้าตาเป็นอย่างไร จากนั้นเราจะมีพรอมป์ต์สุดท้ายตรงนี้ 1295 01:24:01,764 --> 01:24:05,435 ซึ่งสำหรับนักเผยแพร่ของเราเมื่อไหร่ก็ตามที่เราอยากเผยแพร่ 1296 01:24:05,435 --> 01:24:08,849 ตัวอย่างเช่น เมื่อเรามาที่แดชบอร์ดและมาที่แท็บ studio 1297 01:24:08,849 --> 01:24:13,614 ถ้าผมอยากเผยแพร่อะไรตรงนี้ ผมก็แค่คลิก post แล้วมันก็สามารถเผยแพร่ตรงไปยัง 1298 01:24:13,614 --> 01:24:19,217 Instagram, TikTok หรือที่ไหนก็ตามที่คุณอยากใช้ แต่สำหรับสิ่งนั้นเราก็ต้องสร้างแบ็กเอนด์ 1299 01:24:19,217 --> 01:24:25,786 และนั่นคือสิ่งที่พรอมป์ต์นี้จะทำ พรอมป์ต์นี้จะสร้างแบ็กเอนด์ที่เมื่อไหร่ก็ตามที่เราทริกเกอร์การอัปโหลด 1300 01:24:25,786 --> 01:24:30,552 การอัปโหลดนั้นก็สามารถถูกส่งตรงไปยังแพลตฟอร์มโซเชียลมีเดียที่เราอยากส่งได้ 1301 01:24:30,552 --> 01:24:36,413 ผมจะรันพรอมป์ต์ทั้งหมดนี้ พรอมป์ต์แรกคือตัวที่จะนำข้อความที่ถูกสร้างมาปรับให้เข้ากับเทมเพลต 1302 01:24:36,413 --> 01:24:42,145 พรอมป์ต์ถัดไปคือตัวที่ดูแลให้เราใช้ปุ่มทั้งหมดบนแดชบอร์ดเพื่อทริกเกอร์แอ็กชันไปที่เอเจนต์ 1303 01:24:42,145 --> 01:24:45,687 พรอมป์ต์ 18 ซึ่งจะดูแลว่าเราอยากให้ไอเดียถูกสร้างแบบไหน 1304 01:24:45,687 --> 01:24:49,487 จำนวนไอเดียที่อยากให้สร้าง อยากให้แคปชันแบบไหน อยากให้สไลด์ 1305 01:24:49,487 --> 01:24:57,923 carousel คอนเทนต์หน้าตาแบบไหน และเราจะมีพรอมป์ต์สุดท้ายที่ดูแลการเผยแพร่ไปยังเซิร์ฟเวอร์หรือแพลตฟอร์มโซเชียลมีเดียที่เราอยากเผยแพร่ 1306 01:24:57,923 --> 01:25:02,303 ผมจะรันพรอมป์ต์ทั้งหมดนี้ ถ้าเจอปัญหาอะไร ผมจะหยุดและอธิบายให้คุณฟัง 1307 01:25:02,303 --> 01:25:05,523 เพื่อให้คุณตามสิ่งที่เราจะทำตรงนั้นได้ เอาล่ะ Kite 1308 01:25:05,523 --> 01:25:08,614 ประมวลผลพรอมป์ต์ทั้งหมดนั้นเสร็จแล้ว อย่างที่บอก 1309 01:25:08,614 --> 01:25:11,963 ผมไม่ต้องตอบอะไรเลย ผมแค่คัดลอกวางพรอมป์ต์ทั้งหมดให้ 1310 01:25:11,963 --> 01:25:15,377 Kite แล้วมันก็ประมวลผลแบ็กเอนด์ทั้งหมด ในขั้นตอนถัดไป 1311 01:25:15,377 --> 01:25:18,597 เราจะหา API keys มาบางอัน และผมจะอธิบายทุก API key 1312 01:25:18,597 --> 01:25:22,718 ว่าคืออะไรและทำไมเราถึงต้องใช้มัน API key แรกที่เราจะหาคือสำหรับ 1313 01:25:22,718 --> 01:25:27,291 Perplexity Perplexity เป็นหนึ่งในโมเดล AI ที่แข็งแกร่งมากในด้านการวิจัย 1314 01:25:27,291 --> 01:25:30,769 ผมจึงเพิ่มฟีเจอร์นี้ เพื่อที่ว่าเมื่อคุณเขียน carousel 1315 01:25:30,769 --> 01:25:33,989 และอยากให้เอเจนต์ใช้ข้อมูลล่าสุดจริงๆ ตัวอย่างเช่น 1316 01:25:33,989 --> 01:25:37,080 คุณสามารถใช้ Perplexity เป็นโมเดลวิจัย โดย Atlas 1317 01:25:37,080 --> 01:25:41,460 จะสอบถาม Perplexity เพื่อทำการวิจัยก่อนที่คอนเทนต์ของสไลด์จะถูกเขียน 1318 01:25:41,460 --> 01:25:46,161 ขอยกตัวอย่างว่าเราจะใช้มันตรงไหน ตัวอย่างเช่น เมื่อผมมาที่แดชบอร์ดและคลิก 1319 01:25:46,161 --> 01:25:50,154 generate ideas คุณจะเห็นว่าผมมีไอเดียสองสามอันที่ถูกสร้างให้ผม 1320 01:25:50,154 --> 01:25:53,310 ตัวอย่างเช่น ลองเลือก "builder AI automation map" 1321 01:25:53,310 --> 01:25:56,787 เมื่อผมอยากโปรโมตบทความนี้หรือโปรโมตไอเดียนี้เป็นสไลด์ 1322 01:25:56,787 --> 01:26:00,330 ผมมีตัวเลือกนี้คือ research with Perplexity ถ้าคุณเลือก 1323 01:26:00,330 --> 01:26:03,743 research with Perplexity แล้ว เอเจนต์จะใช้ Perplexity 1324 01:26:03,743 --> 01:26:07,478 เป็นเครื่องมือวิจัยเพื่อรวบรวมข้อมูลเกี่ยวกับไอเดียใหม่นี้ 1325 01:26:07,478 --> 01:26:13,017 ถ้าคุณไม่เลือกอันนี้ เอเจนต์ก็จะทำการค้นหาเว็บแบบมาตรฐานเพื่อหาไอเดียสำหรับคอนเทนต์นี้ 1326 01:26:13,017 --> 01:26:18,169 หรืออาจใช้สิ่งที่เอเจนต์ถูกฝึกมาแล้ว แต่ถ้าคุณอยากได้คอนเทนต์ที่อิงงานวิจัยจริงๆ 1327 01:26:18,169 --> 01:26:25,382 คุณก็เปิด research with Perplexity แล้วเอเจนต์จะสร้างคอนเทนต์ที่อิงการวิจัยสำหรับบทความหรือไอเดียที่คุณอยากสร้าง 1328 01:26:25,382 --> 01:26:28,989 นั่นจะเป็นคีย์แรกที่เราจะได้มา ในการหามัน คุณสามารถมาที่ 1329 01:26:28,989 --> 01:26:32,531 console.perplexity.ai ผมจะใส่ลิงก์ไว้ในส่วนคำอธิบายด้วย 1330 01:26:32,531 --> 01:26:36,009 เมื่อมาถึงตรงนี้ แค่สร้างบัญชีหรือล็อกอินถ้ามีอยู่แล้ว 1331 01:26:36,009 --> 01:26:39,551 เมื่อคุณล็อกอินเข้าคอนโซลแล้ว คุณไม่ต้องทำอะไรมากตรงนี้ 1332 01:26:39,551 --> 01:26:42,642 แค่มาที่ส่วนด้านซ้ายแล้วคลิก API keys จากนั้นใต้ 1333 01:26:42,642 --> 01:26:45,669 API keys ให้มาที่มุมขวาบน คลิก generate API key 1334 01:26:45,669 --> 01:26:49,082 คุณสามารถตั้งชื่อคีย์ได้ตามต้องการ สำหรับบทช่วยสอนนี้ 1335 01:26:49,082 --> 01:26:52,109 ผมจะเรียกมันว่า Komputer Mechanic tutorial test 1336 01:26:52,109 --> 01:26:55,329 แล้วคลิก create a key หลังจากนั้น คุณจะเห็นว่า API 1337 01:26:55,329 --> 01:26:59,000 key ถูกสร้างให้คุณ คัดลอก API key นี้ เก็บไว้ในที่ปลอดภัย 1338 01:26:59,000 --> 01:27:02,221 แล้วเราจะใช้ API key นี้ ขั้นตอนถัดไป เราจะได้ API 1339 01:27:02,221 --> 01:27:05,312 key จาก ImgBB แต่ขออธิบายว่าทำไมเราถึงต้องใช้มัน 1340 01:27:05,312 --> 01:27:08,661 สิ่งที่เราอยากทำกับการตั้งค่าของเราคือ เรามี Cadence 1341 01:27:08,661 --> 01:27:11,881 และอยากส่งภาพจากตรงนี้ไปยัง Instagram เป็นตัวอย่าง 1342 01:27:11,881 --> 01:27:15,037 ปัญหาคือ ถ้าเราอยากส่งสไลด์ของเราตรงๆ จาก Cadence 1343 01:27:15,037 --> 01:27:18,901 ไปยัง Instagram เราต้องได้ Instagram API key ถ้าอยากทำสำหรับ 1344 01:27:18,901 --> 01:27:22,572 TikTok คุณต้องสร้าง TikTok flow ของคุณเอง ถ้าอยากทำสำหรับ 1345 01:27:22,572 --> 01:27:26,243 Facebook คุณต้องสร้างคีย์ของคุณเอง flow ของคุณเองและอื่นๆ 1346 01:27:26,243 --> 01:27:32,747 และนี่ซับซ้อนมาก เราจะใช้เวลากับการสร้างการเชื่อมต่อเหล่านั้นมากกว่าที่จะโฟกัสกับแดชบอร์ดที่อยากสร้าง 1347 01:27:32,747 --> 01:27:36,032 ดังนั้นสิ่งที่เราจะทำคือ มีบางแพลตฟอร์มอย่าง Buffer 1348 01:27:36,032 --> 01:27:39,059 หรือ Metricool และสิ่งที่แพลตฟอร์มเหล่านี้ทำคือ 1349 01:27:39,059 --> 01:27:42,086 พวกมันมีการเข้าถึงแพลตฟอร์มโซเชียลมีเดียทั้งหมด 1350 01:27:42,086 --> 01:27:48,333 และพวกมันจัดการแบ็กเอนด์ทั้งหมดนั้นให้คุณแล้ว สิ่งที่เราต้องทำคือส่งสไลด์ของเราผ่านแพลตฟอร์มอย่าง 1351 01:27:48,333 --> 01:27:53,678 Metricool หรือ Buffer แล้วพวกมันก็จะส่งสไลด์ไปยังแพลตฟอร์มโซเชียลมีเดียที่เราอยากไป 1352 01:27:53,678 --> 01:27:56,834 มีข้อแม้หนึ่งข้อ อย่างน้อยจากการทดสอบของผม Buffer 1353 01:27:56,834 --> 01:28:02,051 ไม่อนุญาตให้เราส่งภาพตรงๆ ไปยังแพลตฟอร์มนั้น เราจึงต้องมีพื้นที่เก็บข้อมูลตัวกลาง 1354 01:28:02,051 --> 01:28:05,271 (intermediate storage) ที่ภาพที่เราสร้างจะถูกส่งไป 1355 01:28:05,271 --> 01:28:10,423 แล้วจากนั้นภาพก็จะไปที่ Buffer และสำหรับสิ่งนั้นเราจะต้องใช้แพลตฟอร์มที่เรียกว่า 1356 01:28:10,423 --> 01:28:15,446 ImgBB ซึ่ง ImgBB นี้ฟรี สิ่งที่จะเกิดขึ้นคือ เมื่อไหร่ก็ตามที่คุณส่งภาพหรือส่ง 1357 01:28:15,446 --> 01:28:18,989 story หรือ carousel จาก Cadence ของเรา มันจะถูกส่งไปที่ 1358 01:28:18,989 --> 01:28:22,015 ImgBB ก่อน แล้วจาก ImgBB ภาพก็จะไปที่ Instagram 1359 01:28:22,015 --> 01:28:25,686 ฟังดูซับซ้อนจากการตั้งค่าที่ผมกำลังอธิบาย แต่เราจะเดินสาย 1360 01:28:25,686 --> 01:28:30,517 (wire) สิ่งนี้เข้าไป และเมื่อคุณคลิก post เช่น เมื่อผมมาที่แดชบอร์ดแล้วคลิก 1361 01:28:30,517 --> 01:28:35,025 post แล้วเลือก เช่น ผมอยากโพสต์ไปที่ Instagram นี่คือสิ่งที่จะเกิดขึ้น 1362 01:28:35,025 --> 01:28:39,855 การโอนย้ายทั้งหมดนี้จะเกิดขึ้นโดยอัตโนมัติ คุณไม่ต้องไปส่งจากที่นี่ไปที่นี่ 1363 01:28:39,855 --> 01:28:43,462 ส่งจากที่นี่ไปที่นี่ เราจะเดินสายการเชื่อมต่อทั้งหมดนั้น 1364 01:28:43,462 --> 01:28:46,811 ในการทำอย่างนั้น เราจะมาที่ ImgBB ซึ่งฟรีโดยสิ้นเชิง 1365 01:28:46,811 --> 01:28:51,383 คุณสามารถสร้างบัญชีฟรีได้ เมื่อสร้างบัญชีแล้ว มาที่ส่วนด้านซ้ายแล้วคลิก 1366 01:28:51,383 --> 01:28:54,474 API นี่จะพาคุณไปที่หน้า API เมื่ออยู่ตรงนี้ คลิก 1367 01:28:54,474 --> 01:28:58,081 add API key สร้าง API key เก็บ API key แล้วเราก็ไปต่อยัง 1368 01:28:58,081 --> 01:29:06,003 API key ถัดไปที่เราต้องการ API key ถัดไปที่เราต้องการคือแพลตฟอร์มที่จะส่งสไลด์ของเราไปยังแพลตฟอร์มโซเชียลมีเดียที่เราอยากไป 1369 01:29:06,003 --> 01:29:09,029 ตรงนี้มีหลายแพลตฟอร์ม ตัวอย่างเช่น เรามี Buffer 1370 01:29:09,029 --> 01:29:12,765 ที่ทำสิ่งนี้ให้เราได้ และเราก็มี Metricool ที่ทำได้เช่นกัน 1371 01:29:12,765 --> 01:29:17,788 ทั้งคู่ทำงานได้ ผมรู้ว่าหลายคนใช้ Metricool เพราะพวกเขามีแดชบอร์ดที่ทรงพลังมาก 1372 01:29:17,788 --> 01:29:21,330 แต่จากการทดสอบของผม ผมพบว่าเพื่อให้คุณสามารถส่งสไลด์จาก 1373 01:29:21,330 --> 01:29:24,744 Cadence OS ไปยัง Instagram หรือ TikTok ได้ ถ้าอยากใช้ 1374 01:29:24,744 --> 01:29:28,479 Metricool เราต้องเลือกแผนที่แพงขึ้น มีเพียงตัวเลือกขั้นสูง 1375 01:29:28,479 --> 01:29:33,052 (advanced) ที่คุณจ่าย 43 ดอลลาร์ต่อเดือนในกรณีของผมเท่านั้นที่จะมาพร้อม 1376 01:29:33,052 --> 01:29:36,787 Metricool API อันนี้ค่อนข้างแพงสำหรับผม เพราะถ้าคุณอยากให้ 1377 01:29:36,787 --> 01:29:39,878 Metricool ทำงานกับ Cadence จริงๆ คุณต้องเลือกแผน 1378 01:29:39,878 --> 01:29:43,098 advance ที่จ่ายเป็นดอลลาร์ต่อเดือนเพื่อเข้าถึง API 1379 01:29:43,098 --> 01:29:47,478 ของพวกเขา จำไว้ว่า API คืออินเทอร์เฟซที่ให้เราสื่อสารกับแพลตฟอร์มได้ 1380 01:29:47,478 --> 01:29:51,278 และในกรณีของผม ผมมีบัญชีโซเชียลมีเดียแค่สองบัญชีที่ใช้ทดสอบ 1381 01:29:51,278 --> 01:29:56,043 ผมไม่อยากจ่าย 43 ดอลลาร์ต่อเดือนเพื่อแพลตฟอร์มโซเชียลมีเดียแค่สองแพลตฟอร์ม 1382 01:29:56,043 --> 01:29:59,328 แต่ข้อดีของ Metricool คือ คุณสามารถเลือกแผนเริ่มต้น 1383 01:29:59,328 --> 01:30:07,121 (starter plan) ที่จ่าย 16 ดอลลาร์ต่อเดือน แล้วคุณสามารถเพิ่มแพลตฟอร์มโซเชียลมีเดียได้มากเท่าที่ต้องการโดยไม่ต้องเพิ่มราคา 1384 01:30:07,121 --> 01:30:10,598 ตัวอย่างเช่น ถ้าคุณมีสี่แพลตฟอร์มโซเชียลมีเดีย TikTok, 1385 01:30:10,598 --> 01:30:14,076 Facebook, LinkedIn ฯลฯ คุณก็ยังจ่าย 16 ดอลลาร์ต่อเดือน 1386 01:30:14,076 --> 01:30:17,361 ซึ่งผมว่าค่อนข้างเจ๋ง และผมจะโชว์ให้ดูตอนที่ผมเลือก 1387 01:30:17,361 --> 01:30:23,350 Metricool เรามีอีกแพลตฟอร์มที่เรียกว่า Buffer และนั่นคือสิ่งที่ผมใช้ในสิ่งที่เรากำลังสร้างกับ 1388 01:30:23,350 --> 01:30:26,441 Hermes ข้อดีของ Buffer คือ พวกเขาอนุญาตให้เราใช้ 1389 01:30:26,441 --> 01:30:30,434 API assets ของพวกเขาได้แม้กับแผนมาตรฐาน และผมคิดว่าในกรณีของผม 1390 01:30:30,434 --> 01:30:34,556 ผมเลือกแผน 5 ดอลลาร์ซึ่งเป็นแบบ essential ถึงแม้กับแผนนี้คุณก็มี 1391 01:30:34,556 --> 01:30:38,227 API keys สามอันและใช้มันได้ แต่กับ Metricool คุณจะเข้าถึง 1392 01:30:38,227 --> 01:30:41,254 API key ได้ก็ต่อเมื่อมีแผน 43 ดอลลาร์ ข้อแม้ของ 1393 01:30:41,254 --> 01:30:44,281 Buffer คือ ทุกแพลตฟอร์มโซเชียลมีเดียที่คุณเพิ่ม 1394 01:30:44,281 --> 01:30:47,630 คุณจ่ายเพิ่มอีก 5 ดอลลาร์ ถ้าคุณมี TikTok, Facebook, 1395 01:30:47,630 --> 01:30:50,979 Instagram ก็เป็น 15 ดอลลาร์ ถ้าเพิ่ม LinkedIn ก็เป็น 1396 01:30:50,979 --> 01:30:55,745 20 ดอลลาร์ มันอาจแพงขึ้นเรื่อยๆ ในกรณีนั้น ถ้าคุณไม่สนใจเรื่องการส่งตรงจาก 1397 01:30:55,745 --> 01:31:02,121 Cadence ไปยังแพลตฟอร์มโซเชียลมีเดีย ผมก็เพิ่มตัวเลือกบนแดชบอร์ดที่คุณสามารถดาวน์โหลดสไลด์ทั้งหมดได้ 1398 01:31:02,121 --> 01:31:06,886 ขอทำตัวอย่างให้ดู เมื่อผมคลิก slides คุณจะเห็นว่าสไลด์ถูกดาวน์โหลดมาที่นี่ 1399 01:31:06,886 --> 01:31:10,944 เมื่อผมคลิกอันนี้ คุณจะเห็นว่าผมมีสไลด์ทั้งหมดดาวน์โหลดมาที่นี่ 1400 01:31:10,944 --> 01:31:14,099 ขอไปที่ thumbnails แล้วคุณจะเห็นว่าผมมีภาพทั้งหมด 1401 01:31:14,099 --> 01:31:17,191 และสิ่งที่ผมเพิ่มให้คุณอีกอย่างคือ คุณสามารถคลิก 1402 01:31:17,191 --> 01:31:20,411 caption แล้วคุณจะเห็นแคปชันที่จำเป็นสำหรับการโพสต์ 1403 01:31:20,411 --> 01:31:23,695 แล้วคุณก็โพสต์ด้วยตัวเองได้ และในกรณีนั้น Metricool 1404 01:31:23,695 --> 01:31:26,722 น่าจะเป็นตัวเลือกที่ดีที่สุด เพราะพวกเขามี เช่น 1405 01:31:26,722 --> 01:31:30,200 สำหรับแผน 16 ดอลลาร์ คุณจะเพิ่มโซเชียลมีเดียได้มากขึ้น 1406 01:31:30,200 --> 01:31:35,224 คุณเห็นตรงนี้ได้ถึง 10 แบรนด์ ซึ่งเจ๋งมาก แต่ถ้าคุณอยากใช้ประโยชน์จากการส่งจาก 1407 01:31:35,224 --> 01:31:38,508 Cadence ตรงๆ ไปยังแพลตฟอร์มโซเชียลมีเดียของคุณจริงๆ 1408 01:31:38,508 --> 01:31:44,755 Buffer อาจเป็นตัวเลือกที่ถูกกว่า ผมแค่พยายามอธิบายว่าคุณจะตัดสินใจเลือกแพลตฟอร์มที่อยากใช้อย่างไร 1409 01:31:44,755 --> 01:31:47,911 สำหรับตัวอย่างนี้เราจะใช้ Buffer เพราะอย่างที่บอก 1410 01:31:47,911 --> 01:31:51,131 ผมมีบัญชีโซเชียลมีเดียแค่สองบัญชี และผมไม่อยากจ่าย 1411 01:31:51,131 --> 01:31:56,670 43 ดอลลาร์ตรงนี้เพื่อการทดสอบของผม คุณจึงสามารถสร้างบัญชีกับแพลตฟอร์มใดก็ได้ที่อยากใช้ 1412 01:31:56,670 --> 01:31:59,954 แล้วล็อกอินเข้าบัญชีของคุณ เมื่อคุณล็อกอินเข้าบัญชี 1413 01:31:59,954 --> 01:32:04,269 Buffer ของคุณแล้ว แดชบอร์ดของ Buffer ให้มาที่ส่วนล่างตรงนี้ที่คุณมี 1414 01:32:04,269 --> 01:32:07,360 my organization แล้วคลิก API จากนั้นคลิก new key 1415 01:32:07,360 --> 01:32:11,160 แล้วคุณก็สามารถสร้าง API key ได้ ด้วย API keys สามอันนี้จาก 1416 01:32:11,160 --> 01:32:14,831 Perplexity, ImgBB และ Buffer เราจะสามารถเดินสายมันเข้ากับ 1417 01:32:14,831 --> 01:32:18,051 Cadence และ build ต่อไปได้ เมื่อเรารวบรวม API keys 1418 01:32:18,051 --> 01:32:21,593 เหล่านี้แล้ว เราต้องเก็บ API keys ลงบนเซิร์ฟเวอร์ของเรา 1419 01:32:21,593 --> 01:32:26,424 ในการทำอย่างนั้น เราจะกลับมาที่ PowerShell ผมจะล็อกอินกลับเข้าสู่เทอร์มินัล 1420 01:32:26,424 --> 01:32:29,515 กลับมาแล้ววางคำสั่งนี้ คำสั่งนี้จะถามหา API keys 1421 01:32:29,515 --> 01:32:33,315 ทั้งหมด และมันจะถูกเก็บอย่างลับๆ โดยหลักการแล้วคุณสามารถให้ 1422 01:32:33,315 --> 01:32:36,599 API keys ตรงๆ กับ Kite ได้ แต่นี่ไม่ใช่วิธีที่แนะนำ 1423 01:32:36,599 --> 01:32:39,626 เพราะถ้ามันถูกบุกรุก ใครบางคนจะเข้าถึง API keys 1424 01:32:39,626 --> 01:32:42,846 ของคุณ นี่คือเหตุผลที่เมื่อไหร่ก็ตามที่ผมเพิ่ม API 1425 01:32:42,846 --> 01:32:45,873 keys หรือความลับ (secrets) ผมชอบทำจากเทอร์มินัล 1426 01:32:45,873 --> 01:32:49,093 มากกว่าที่จะให้ Kite หรือ Telegram โดยตรง กด enter 1427 01:32:49,093 --> 01:32:52,636 แล้วมันจะถามหา Buffer access token ของคุณ ตรงนี้ผมจะวาง 1428 01:32:52,636 --> 01:32:56,178 Buffer key ของผม วางลงไป แล้วกด enter จากนั้นมันจะถามหา 1429 01:32:56,178 --> 01:32:59,269 ImgBB API key ผมจะคัดลอกอันนี้เช่นกัน วางลงไป กด 1430 01:32:59,269 --> 01:33:02,489 enter แล้วอันสุดท้ายจะถามหา Perplexity ของคุณ อุ๊ย 1431 01:33:02,489 --> 01:33:05,645 ผมรู้ตัวว่าผมทำผิด อันแรกที่ผมใส่ไม่ใช่ของ Buffer 1432 01:33:05,645 --> 01:33:09,316 แต่เป็นของ Perplexity ผมจะยกเลิกอันนี้แล้วรันใหม่อีกครั้ง 1433 01:33:09,316 --> 01:33:12,922 หวังว่ามันจะไม่เละ ผมจะบอก Kite ระหว่างทางว่าผมทำผิดพลาด 1434 01:33:12,922 --> 01:33:16,271 ผมจะเรียกคำสั่งเดิมที่ใช้ กด enter แล้วคัดลอก Buffer 1435 01:33:16,271 --> 01:33:19,620 key ที่ถูกต้อง จากนั้นคัดลอก ImgBB key จากนั้นคัดลอก 1436 01:33:19,620 --> 01:33:23,806 Perplexity API key วางลงไป แล้วคุณจะเห็นว่าข้อมูลทั้งหมดถูกบันทึก 1437 01:33:23,806 --> 01:33:28,121 และเราได้รับการแจ้งเตือนว่าทุกอย่างเสร็จสิ้น สิ่งที่ผมจะทำตอนนี้คือ 1438 01:33:28,121 --> 01:33:31,277 มาที่ Kite แล้วบอก Kite ว่า "เฮ้ เราเก็บ API keys 1439 01:33:31,277 --> 01:33:35,592 สามอันนี้แล้ว มันควรทำ smoke test เพื่อให้แน่ใจว่าคีย์ทั้งหมดทำงาน" 1440 01:33:35,592 --> 01:33:39,456 ผมจะคัดลอกอันนี้และให้ Kite แต่เพราะผมทำผิดและใส่มันสองครั้ง 1441 01:33:39,456 --> 01:33:43,965 ผมจะเขียนบอกมันว่า "ผมทำผิดและเพิ่มมันสองครั้ง คุณเพิกเฉยรายการนี้ได้" 1442 01:33:43,965 --> 01:33:48,151 จากนั้นบอกให้มันทำ smoke test ผมหวังว่าความผิดพลาดครั้งแรกที่ผมทำ 1443 01:33:48,151 --> 01:33:53,303 มันจะแก้ไขให้และเห็นว่าคีย์ทั้งหมดทำงาน เฮ้ ถ้าคุณเห็นคุณค่าในคอนเทนต์ที่ผมสร้าง 1444 01:33:53,303 --> 01:33:56,330 กดปุ่ม subscribe สมัครสมาชิกช่องของผม และกดปุ่ม 1445 01:33:56,330 --> 01:34:00,194 like เพื่อให้อัลกอริทึมของ YouTube ผลักวิดีโอนี้ไปยังคนอื่นๆ 1446 01:34:00,194 --> 01:34:04,895 ที่อยู่ข้างนอก มันไม่เสียเงินคุณเลย แต่มันสนับสนุนการเติบโตของช่องผมจริงๆ 1447 01:34:04,895 --> 01:34:08,116 มีงานจำนวนมากที่ใส่ลงไปในการสร้างบทช่วยสอนเหล่านี้ 1448 01:34:08,116 --> 01:34:12,559 การสร้างพรอมป์ต์ นี่คือเหตุผลที่ผมไม่สามารถอัปโหลดวิดีโอทุกสัปดาห์ได้ 1449 01:34:12,559 --> 01:34:16,037 เพราะผมทดสอบทุกอย่างประมาณ 20 ครั้งก่อนที่จะปล่อยออกไป 1450 01:34:16,037 --> 01:34:19,450 นี่คือเหตุผลที่ผมต้องอัปโหลดวิดีโอตามกำหนดการรายปักษ์ 1451 01:34:19,450 --> 01:34:23,443 (bi-weekly) เพราะมีงานจำนวนมากที่ใส่ลงไปในการสร้างสิ่งเหล่านี้ 1452 01:34:23,443 --> 01:34:26,728 Kite ก็ทำเสร็จเช่นกัน มันทำ smoke test มันยืนยันว่า 1453 01:34:26,728 --> 01:34:30,077 Buffer ทำงาน ImgBB ทำงาน และ Perplexity ทำงาน เอาล่ะ 1454 01:34:30,077 --> 01:34:35,615 ในขั้นตอนถัดไป เราจะใส่พรอมป์ต์ 20 พรอมป์ต์ 20 จะให้ทริกเกอร์ที่เราสามารถเผยแพร่ไอเดีย 1455 01:34:35,615 --> 01:34:39,158 สร้างไอเดีย เรนเดอร์คอนเทนต์ เรนเดอร์ carousel และอื่นๆ 1456 01:34:39,158 --> 01:34:42,185 แค่คัดลอกพรอมป์ต์นี้แล้วให้ Kite เช่นกัน เอาล่ะ 1457 01:34:42,185 --> 01:34:46,113 Kite ก็ทำเสร็จแล้ว พรอมป์ต์สามอันถัดไปจะเป็นพรอมป์ต์การออกแบบ 1458 01:34:46,113 --> 01:34:49,140 (design prompts) อันนี้จะเดินสายแท็บ ideas แท็บ 1459 01:34:49,140 --> 01:34:52,747 promotes และแท็บ studio และหลังจากนั้นเราจะทดสอบทั้งระบบ 1460 01:34:52,747 --> 01:34:55,967 ตอนนี้เรามีแท็บ ideas ที่ไม่มีอะไรอยู่ แท็บ studio 1461 01:34:55,967 --> 01:34:59,444 ที่ไม่มีอะไรอยู่ แท็บ publish ที่ไม่มีอะไรอยู่ และแท็บ 1462 01:34:59,444 --> 01:35:02,922 templates ด้วย สิ่งที่เราจะทำคือให้พรอมป์ต์เหล่านี้กับ 1463 01:35:02,922 --> 01:35:07,108 Kite เพื่อเดินสายพวกมัน หลังจากนั้นเราสามารถทดสอบฟังก์ชันบางอย่าง 1464 01:35:07,108 --> 01:35:11,230 เพื่อให้คุณเห็นสิ่งที่เรากำลังสร้าง ผมจะให้พรอมป์ต์ทั้งหมดนี้กับ 1465 01:35:11,230 --> 01:35:14,450 Kite ตามลำดับ แล้วเราก็ไปดูการทดสอบกัน เอาล่ะ Kite 1466 01:35:14,450 --> 01:35:19,023 ประมวลผลพรอมป์ต์ทั้งหมดนั้นเสร็จแล้ว ผมรู้ว่าเราสร้างกันมาระยะหนึ่งแล้ว 1467 01:35:19,023 --> 01:35:22,694 มาดูเดโม่จริงแบบ end-to-end เพื่อให้แน่ใจว่าทุกอย่างทำงาน 1468 01:35:22,694 --> 01:35:25,914 ผมจะกลับมาที่แดชบอร์ด รีโหลดแดชบอร์ด แล้วไปที่แท็บ 1469 01:35:25,914 --> 01:35:30,937 ideas ตอนนี้ผมเห็นว่า Kite ทำ smoke test โดยทดสอบเอเจนต์หนึ่งตัวก่อนที่จะไว้ใจ 1470 01:35:30,937 --> 01:35:33,964 มันแค่ทำ smoke test เพื่อให้แน่ใจว่าไอเดียทำงาน 1471 01:35:33,964 --> 01:35:37,056 มาคลิก generate ideas เพื่อดูว่ากระแส end-to-end 1472 01:35:37,056 --> 01:35:40,211 ที่ Atlas ทำงานวิจัยและให้ไอเดียเราจะทำงานหรือไม่ 1473 01:35:40,211 --> 01:35:44,140 ผมเห็นการแจ้งเตือนว่ามันกำลังทำวิจัย ขอรอจนกว่าผลลัพธ์จะออกมา 1474 01:35:44,140 --> 01:35:48,197 และอันนี้ทำงานได้ดีมาก คุณจะเห็นว่าเรามีสี่ไอเดียที่ถูกสร้างโดย 1475 01:35:48,197 --> 01:35:51,546 Atlas "Browser agents should verify, not just click" 1476 01:35:51,546 --> 01:35:54,638 "Your agent needs a sandbox before it needs more 1477 01:35:54,638 --> 01:35:57,858 tokens" สมมติว่าเราอยากโปรโมตหนึ่งในไอเดียเหล่านี้ 1478 01:35:57,858 --> 01:36:01,271 ลองเลือก "stop giving agents your whole app" แล้วคลิก 1479 01:36:01,271 --> 01:36:04,362 promote ตรงนี้สมมติว่าเราอยากสร้างสไลด์ carousel 1480 01:36:04,362 --> 01:36:07,776 สิบสไลด์ และผมจะเลือก research with Perplexity ตรงนี้ 1481 01:36:07,776 --> 01:36:10,931 Perplexity ถูกเปิดใช้งาน เพราะเราอยากทดสอบว่า API 1482 01:36:10,931 --> 01:36:13,958 key ทำงาน และผมยังเพิ่มตัวเลือกนี้ steroid mode 1483 01:36:13,958 --> 01:36:16,985 ซึ่งจะสร้างคำที่ทรงพลังกว่าสำหรับสไลด์ carousel 1484 01:36:16,985 --> 01:36:20,978 ขอเปิดทั้งสองอันนี้ แล้วไปที่ write 10 slides อันนี้กำลังทำงาน 1485 01:36:20,978 --> 01:36:24,134 Vera ถูกทริกเกอร์ Vera คือเอเจนต์ที่เขียนคอนเทนต์ 1486 01:36:24,134 --> 01:36:27,805 มันกำลังอ่านไอเดียและทำวิจัยเพื่อให้แน่ใจว่าทุกอย่างทำงาน 1487 01:36:27,805 --> 01:36:33,022 ทำวิจัยเพื่อให้แน่ใจว่ามันได้ข้อมูลทั้งหมดที่เราต้องการสำหรับการเขียนคอนเทนต์นั้น 1488 01:36:33,022 --> 01:36:37,530 เอาล่ะ Vera สร้างคอนเทนต์แล้ว คุณจะเห็นว่าเรามีสไลด์ทั้งสิบอันถูกสร้าง 1489 01:36:37,530 --> 01:36:40,685 เรามีข้อความปก (cover text) ที่บอกว่า "your agent 1490 01:36:40,685 --> 01:36:46,868 is not dumb, your prompt is bloated" จากนั้นมันก็เขียนคอนเทนต์ทั้งหมดที่จะอยู่บนทุกสไลด์ที่เรามี 1491 01:36:46,868 --> 01:36:50,153 สมมติว่าเราอยากอนุมัติอันนี้และโปรโมตมันลงในเทมเพลต 1492 01:36:50,153 --> 01:36:54,017 คลิก approve แล้วเลือกเทมเพลตในขั้นตอนถัดไป ตรงนี้เราจะสร้าง 1493 01:36:54,017 --> 01:36:58,525 Instagram carousel เราจึงต้องมีอัตราส่วน 4:5 สมมติว่าสำหรับตัวอย่างนี้ 1494 01:36:58,525 --> 01:37:02,196 ผมจะเลือกอันสีม่วงที่เรามีตรงนี้ ผมจะเลือกอันนั้นแล้วคลิก 1495 01:37:02,196 --> 01:37:10,246 fit copy to this สิ่งที่จะเกิดขึ้นคือ Vera จะตรวจสอบว่าคอนเทนต์หรือข้อความที่มันสร้างเข้ากับจำนวนตัวอักษรในเทมเพลตนั้นหรือไม่ 1496 01:37:10,246 --> 01:37:14,368 เพราะถ้าคำยาวเกินกว่าที่เทมเพลตรองรับ ดีไซน์ทั้งหมดจะดูน่าเกลียด 1497 01:37:14,368 --> 01:37:18,490 สิ่งที่ Vera จะทำคือ Vera จะอ่านข้อความฮาร์ดโค้ดทั้งหมดในเทมเพลต 1498 01:37:18,490 --> 01:37:22,354 แล้วพยายามปรับและใส่คอนเทนต์ที่มันสร้างให้เข้ากับเทมเพลตนั้น 1499 01:37:22,354 --> 01:37:26,733 และ Vera ก็ปรับคอนเทนต์ที่มันสร้างเพื่อให้เข้ากับเทมเพลตที่เรามีแล้ว 1500 01:37:26,733 --> 01:37:30,855 เพราะเทมเพลตที่เราเลือกมีคำในส่วนปกน้อยกว่า มันจึงเขียนปกใหม่จาก 1501 01:37:30,855 --> 01:37:35,363 "your package is bloated" เป็น "agent fat" แล้วเขียนคอนเทนต์ทั้งหมดที่ 1502 01:37:35,363 --> 01:37:39,485 จะอยู่บนสไลด์ ตอนนี้ผมจะคลิก render now เพื่อส่งสิ่งนี้ไปยังแท็บ 1503 01:37:39,485 --> 01:37:43,865 studio เพื่อที่เราจะได้เห็นว่ามันจะดูเป็นอย่างไรบนเทมเพลตที่เราเลือก 1504 01:37:43,865 --> 01:37:47,342 ตอนนี้คุณเห็นการแจ้งเตือน open in studio เราสามารถคลิก 1505 01:37:47,342 --> 01:37:51,657 open in studio ตรงนี้ได้ และมันจะเปิดสไลด์ที่เราเพิ่งสร้างในสตูดิโอ 1506 01:37:51,657 --> 01:37:55,006 มาคลิกที่อันนี้ แล้วคุณจะเห็นว่า อย่างที่ Vera เขียน 1507 01:37:55,006 --> 01:37:58,162 "agent okay, package fat, package fat, bad agent, 1508 01:37:58,162 --> 01:38:01,575 run starts with too much context, whole ripple noise, 1509 01:38:01,575 --> 01:38:06,019 guesses" แล้วเมื่อคุณคลิกที่อันนี้ คุณจะเห็นข้อความทั้งหมดที่ถูกสร้าง 1510 01:38:06,019 --> 01:38:09,046 สมมติว่าเราไม่อยากใช้ข้อความนี้สำหรับปก เราอยาก 1511 01:38:09,046 --> 01:38:12,266 fine-tune คุณสามารถคลิก fine-tune the slide ตรงนี้ 1512 01:38:12,266 --> 01:38:15,422 แล้วมันจะโหลดสไลด์ขึ้นมา และเมื่อเราคลิกที่อันนี้ 1513 01:38:15,422 --> 01:38:18,706 ตัวอย่างเช่น ผมสามารถเขียน "agents not the problem, 1514 01:38:18,706 --> 01:38:22,635 prompt fat" แล้วคุณยังสามารถเลื่อนสไลด์ขึ้นลงได้ตามที่ต้องการ 1515 01:38:22,635 --> 01:38:25,791 ทั้งหมดนี้เป็นไปได้ในแท็บ fine-tune ผมจะปิดอันนี้ 1516 01:38:25,791 --> 01:38:29,204 ทิ้งการเปลี่ยนแปลง แล้วสมมติว่าเราอยากส่งสิ่งนี้ไปยัง 1517 01:38:29,204 --> 01:38:32,617 Instagram และนี่คือส่วนที่ทำให้ผมประหม่า ผมสร้างบัญชี 1518 01:38:32,617 --> 01:38:36,353 Instagram ทดลองชื่อ content vibe เพื่อที่เมื่อเราส่งตรงจาก 1519 01:38:36,353 --> 01:38:39,766 Cadence นี้ มันจะผ่าน Buffer แล้วมาที่บัญชี Instagram 1520 01:38:39,766 --> 01:38:43,051 นี้ ขอเปิดแพ็กเกจอีกครั้ง คลิกที่มัน แล้วยังไงก็ตาม 1521 01:38:43,051 --> 01:38:47,559 คุณสามารถเปลี่ยนเทมเพลตได้เสมอเมื่อไหร่ก็ตามที่คุณอยากเลือกเทมเพลตอื่น 1522 01:38:47,559 --> 01:38:52,582 คุณเลือกเทมเพลตอะไรก็ได้ แล้ว Cadence จะเขียนคอนเทนต์ใหม่ให้เข้ากับเทมเพลตนั้น 1523 01:38:52,582 --> 01:38:56,382 ตอนนี้ขอมาที่นี่ คลิก post now แล้วตรงนี้ เพราะผมตั้งค่าแค่ 1524 01:38:56,382 --> 01:38:59,666 Instagram มันจะโชว์แค่ Instagram ผมจะคลิก Instagram 1525 01:38:59,666 --> 01:39:02,693 only แล้วมันจะเตือนผม และผมจะได้รับการแจ้งเตือน 1526 01:39:02,693 --> 01:39:06,300 "เฮ้ แน่ใจนะว่าจะโพสต์อันนี้?" ผมจะตอบว่า "ใช่ โพสต์เลย" 1527 01:39:06,300 --> 01:39:09,456 แล้วอันนี้จะถูกส่งไปที่ Buffer และหวังว่าถ้ากระแส 1528 01:39:09,456 --> 01:39:12,483 end-to-end ทำงาน เราควรเห็นโพสต์มาถึง Instagram 1529 01:39:12,483 --> 01:39:15,767 โดยตรง และเราได้รับการแจ้งเตือนว่าอันนี้ถูกส่งไปที่ 1530 01:39:15,767 --> 01:39:18,858 Buffer แล้ว คลิก okay แล้วอันนี้จะถูกย้ายจากแท็บ 1531 01:39:18,858 --> 01:39:22,143 studio ไปยังแท็บ publish เมื่อมันถูกส่งไปที่ Buffer 1532 01:39:22,143 --> 01:39:25,685 แล้ว ต่อไปไปที่ Instagram แล้วดูว่าเราจะเห็นโพสต์นี้ไหม 1533 01:39:25,685 --> 01:39:29,614 ผมจะมาที่ Instagram ของผม แล้วเฮ้ คุณเห็นไหม มันโพสต์ตรงไปที่ 1534 01:39:29,614 --> 01:39:32,898 Instagram แล้ว คุณเห็นโพสต์นี้ที่เราสร้างใน Cadence 1535 01:39:32,898 --> 01:39:39,789 เป๊ะ ซึ่งเป็นโพสต์แรกที่ผมทดสอบกับบัญชีนี้ และคุณจะเห็นว่าข้อความทั้งหมดออกมาเหมือนที่เราเรนเดอร์บนเว็บไซต์ 1536 01:39:39,789 --> 01:39:42,881 Cadence และตรงนี้เราก็มีข้อความที่ถูกสร้างโดย AI 1537 01:39:42,881 --> 01:39:46,938 สำหรับส่วนคำอธิบายด้วย อันนี้ทำงานได้ดีมาก เมื่อผมกลับมาที่แท็บ 1538 01:39:46,938 --> 01:39:50,545 studio และไปที่ published ผมควรจะเห็น โอ้ อันนี้ไม่ทำงาน 1539 01:39:50,545 --> 01:39:53,894 มันแสดงว่าเรามีหนึ่งอัน แต่ผมไม่เห็นสไลด์ที่ถูกสร้าง 1540 01:39:53,894 --> 01:39:58,015 ผมจึงบอก Kite ว่า "เฮ้ แท็บ publish ไม่แสดงคอนเทนต์ที่เผยแพร่เลย 1541 01:39:58,015 --> 01:40:02,781 ผมเห็นจำนวนหนึ่งซึ่งบ่งบอกว่ารายการมีอยู่ แต่หน้านั้นว่างเปล่าโดยสิ้นเชิง" 1542 01:40:02,781 --> 01:40:07,998 ให้ Kite แก้ไขอันนี้ให้เรา และหวังว่าหลังจากนั้นเราจะเห็นคอนเทนต์โผล่ขึ้นมาตรงนี้ 1543 01:40:07,998 --> 01:40:11,282 อีกสองอย่างที่เราจะทำ ผมจะโชว์ว่าแท็บ configuration 1544 01:40:11,282 --> 01:40:15,597 ทำงานอย่างไร บนแท็บ configuration คุณจะมีโอกาสแก้ไขชื่อบรานด์ของคุณ 1545 01:40:15,597 --> 01:40:19,397 แก้ไขแฮนเดิล เขียนเล็กน้อยเกี่ยวกับคอนเทนต์ที่คุณกำลังสร้าง 1546 01:40:19,397 --> 01:40:23,905 เพื่อที่เอเจนต์จะได้อ่านสิ่งนี้เสมอเพื่อหาไอเดียและสร้างคอนเทนต์ให้คุณ 1547 01:40:23,905 --> 01:40:27,190 และคุณยังสามารถเลือกค่าเริ่มต้นการสร้าง (generation 1548 01:40:27,190 --> 01:40:31,311 defaults) ที่ต้องการได้ และสำหรับสิ่งนั้น เราจะให้พรอมป์ต์นี้กับ 1549 01:40:31,311 --> 01:40:35,948 Cadence เพื่อเดินสายแท็บ configuration แต่ผมจะรอให้มันทำแบ็กเอนด์ของแท็บ 1550 01:40:35,948 --> 01:40:38,975 publish เสร็จก่อน หลังจากนั้นเราจะเข้าไปที่แท็บ 1551 01:40:38,975 --> 01:40:42,775 configuration แล้วเดินสายมันเช่นกัน และระหว่างที่อยู่ตรงนี้ 1552 01:40:42,775 --> 01:40:46,511 เราก็มีแท็บ calendar ที่เมื่อไหร่ก็ตามที่คุณกำหนดเวลาโพสต์ 1553 01:40:46,511 --> 01:40:50,117 บางทีคุณไม่อยากเผยแพร่ทันที อยากกำหนดเวลาเป็นวันที่เฉพาะ 1554 01:40:50,117 --> 01:40:54,239 เมื่อคุณเข้ามาที่ปฏิทิน คุณจะเห็นจำนวนโพสต์ที่คุณได้กำหนดเวลาไว้ 1555 01:40:54,239 --> 01:40:57,266 ตัวอย่างเช่น คุณจะเห็นว่าโพสต์ที่เราโพสต์วันนี้ 1556 01:40:57,266 --> 01:41:00,550 24 กรกฎาคม แสดงอยู่ในแท็บ calendar แล้ว เอาล่ะ Kite 1557 01:41:00,550 --> 01:41:03,642 ทำเสร็จแล้ว รีโหลดแดชบอร์ด แล้วมาที่แท็บ publish 1558 01:41:03,642 --> 01:41:07,699 สมบูรณ์แบบ ตอนนี้คุณจะเห็นว่าโพสต์ที่ถูกเผยแพร่มาอยู่ที่นี่แล้ว 1559 01:41:07,699 --> 01:41:11,177 สองสิ่งที่เราจะทำต่อไปอย่างที่บอกคือแท็บ configuration 1560 01:41:11,177 --> 01:41:15,943 ที่คุณสามารถแก้ไขการตั้งค่าต่างๆ ได้ แล้วเอเจนต์จะรับการอัปเดตใหม่ที่คุณมี 1561 01:41:15,943 --> 01:41:19,871 และสำหรับสิ่งนั้น ผมจะส่งพรอมป์ต์นี้ให้ Kite เพื่อเดินสายแท็บ 1562 01:41:19,871 --> 01:41:23,284 configuration เอาล่ะ นั่นหมายความว่าเมื่อเรามาที่แท็บ 1563 01:41:23,284 --> 01:41:26,827 configuration ขอรีโหลดอันนี้ คุณสามารถเปลี่ยนชื่อบรานด์ 1564 01:41:26,827 --> 01:41:30,498 แฮนเดิล จำนวนสไลด์ที่คุณอยากให้เป็นค่าเริ่มต้น ถ้าอยากให้ 1565 01:41:30,498 --> 01:41:35,392 Perplexity เป็นค่าเริ่มต้น ตัวอย่างเช่น เมื่อผมปิดอันนี้แล้วบันทึกการตั้งค่า 1566 01:41:35,392 --> 01:41:39,385 และผมกำลังสร้างไอเดีย มันก็จะไม่ใช้ Perplexity เป็นค่าเริ่มต้น 1567 01:41:39,385 --> 01:41:42,541 และหลังจากนั้น เราก็เสร็จสิ้นส่วนหลักของการ build 1568 01:41:42,541 --> 01:41:49,239 แล้ว ผมยังมีพรอมป์ต์อื่นๆ ที่ให้คุณเป็นตัวเลือกเสริมที่คุณสามารถเพิ่มในการตั้งค่าเพื่อให้ทรงพลังยิ่งขึ้น 1569 01:41:49,239 --> 01:41:52,266 สิ่งที่เราจะสร้างตอนนี้คือรีโมตคอนโทรล Telegram 1570 01:41:52,266 --> 01:41:55,550 (telegram remote control) ถ้าจำได้ เรามีแท็บ studio 1571 01:41:55,550 --> 01:41:59,414 ที่เราสร้าง ซึ่งเราอยากใช้สร้างไอเดียโดยไม่ต้องมาที่แดชบอร์ด 1572 01:41:59,414 --> 01:42:03,472 แนวคิดคือ เมื่อไหร่ก็ตามที่คุณอยากสร้างไอเดีย คุณก็แค่มาที่แท็บ 1573 01:42:03,472 --> 01:42:07,400 studio ใน Telegram สร้างไอเดีย โปรโมต และอื่นๆ สำหรับสิ่งนั้น 1574 01:42:07,400 --> 01:42:10,749 เราจะให้พรอมป์ต์นี้กับ Kite เพื่อตั้งค่ารีโมตคอนโทรล 1575 01:42:10,749 --> 01:42:14,807 Telegram เอาล่ะ Kite บอกว่ามันเสร็จแล้ว มันสร้างและตรวจสอบรีโมต 1576 01:42:14,807 --> 01:42:17,898 Telegram เท่าที่มันทำได้ มันยังบอกว่ามันทำ smoke 1577 01:42:17,898 --> 01:42:22,213 test มาที่แท็บ studio แล้วเราจะเห็นว่ามันทดสอบโดยทริกเกอร์สิ่งต่างๆ 1578 01:42:22,213 --> 01:42:26,141 บนแท็บ studio แต่ผมต้องบอกว่ามันพูดถึงบางอย่างที่มันรันไม่ได้ 1579 01:42:26,141 --> 01:42:29,684 ขอเลื่อนลงไปด้านล่างสุด มันบอกว่ามันมีอุปสรรค (blocker) 1580 01:42:29,684 --> 01:42:34,965 มันไม่สามารถรีสตาร์ท Hermes gateway เองได้ มันบอกให้เราจากเชลล์แยกต่างหากบนเครื่อง 1581 01:42:34,965 --> 01:42:37,992 รันคำสั่งนี้ แล้วบอกมันว่า gateway รีสตาร์ทแล้ว 1582 01:42:37,992 --> 01:42:41,019 ขอคัดลอกอันนี้ มาที่ PowerShell ขอเคลียร์หน้าจอ 1583 01:42:41,019 --> 01:42:45,527 วางคำสั่งนี้ เชื่อมต่อกับเซิร์ฟเวอร์อีกครั้ง แล้วรันคำสั่งที่มันให้เรา 1584 01:42:45,527 --> 01:42:48,554 เอาล่ะ gateway นี้รีสตาร์ทแล้ว ผมจะรอสักครู่ให้ 1585 01:42:48,554 --> 01:42:51,645 gateway บูตสมบูรณ์ หลังจากนั้นผมจะส่งข้อความไปหา 1586 01:42:51,645 --> 01:42:55,123 Kite ว่า "restarted" จากนั้นผมจะส่งข้อความ "restarted" 1587 01:42:55,123 --> 01:42:58,600 ไปให้ Kite แล้วหวังว่ามันจะไปต่อกับสิ่งที่มันทำอยู่ได้ 1588 01:42:58,600 --> 01:43:01,885 เอาล่ะ มันบอกว่ามันเสร็จแล้ว ทุกอย่างถูกเดินสายแล้ว 1589 01:43:01,885 --> 01:43:05,363 ไปที่แท็บ studio แล้วเขียนอะไรบางอย่าง เช่น สแลชคำสั่ง 1590 01:43:05,363 --> 01:43:08,647 ขอตรวจก่อนว่าคำสั่งสแลชคืออะไร ผมจำไม่ได้ว่ามันเป็น 1591 01:43:08,647 --> 01:43:13,349 ideas หรือ idea ใช่ มันคือ ideas ส่ง /ideas แล้วหวังว่ามันจะทริกเกอร์แท็บ 1592 01:43:13,349 --> 01:43:16,633 ideas ในสตูดิโอตรงนี้ และมันก็ทำงาน เรามีไอเดียใหม่ 1593 01:43:16,633 --> 01:43:20,497 "stop asking one agent to do the whole job" เมื่อผมมาที่แท็บ 1594 01:43:20,497 --> 01:43:23,782 studio ผมก็เห็นแบบเดียวกัน นี่คือการสะท้อน (mirror) 1595 01:43:23,782 --> 01:43:27,066 ทุกอย่างที่เรามีบนแดชบอร์ด เหตุผลที่เราทำสิ่งนี้คือ 1596 01:43:27,066 --> 01:43:31,317 ผมอยากให้คุณสร้างไอเดียและอื่นๆ ได้โดยไม่ต้องมาที่แดชบอร์ดตลอดเวลา 1597 01:43:31,317 --> 01:43:35,696 สมมติว่าเราอยากโปรโมตไอเดียนี้ พิมพ์ /promote แล้วใส่จำนวนไอเดียนั้น 1598 01:43:35,696 --> 01:43:39,174 11 อุ๊ย ผมทำผิด ผมตั้งใจจะพิมพ์ 11 และมันก็ถูกต้องเป๊ะ 1599 01:43:39,174 --> 01:43:42,652 มันบอกว่า "idea 1 not found" ขอทำใหม่ /promote แล้วส่ง 1600 01:43:42,652 --> 01:43:47,224 11 นั่นคือสิ่งที่ผมตั้งใจจะส่ง แล้วคุณจะเห็นว่าเราทริกเกอร์สิ่งนี้ทันที 1601 01:43:47,224 --> 01:43:50,831 อันนี้ก็แสดงบนแดชบอร์ดด้วย เราเห็นว่า Vera ถูกโปรโมตแล้ว 1602 01:43:50,831 --> 01:43:54,631 คุณเห็นว่าไอเดียถูกโปรโมต และ Vera กำลังเขียนไอเดียที่เรามี 1603 01:43:54,631 --> 01:43:58,237 และเราเห็นสิ่งเดียวกันตรงนี้ เกิดการโปรโมตไอเดียขึ้นจริง 1604 01:43:58,237 --> 01:44:01,393 มันทำงานบนแดชบอร์ด เราเห็นว่าไอเดียถูกสร้าง แต่บน 1605 01:44:01,393 --> 01:44:05,064 Telegram เราได้รับข้อความ "promotes field list attributes 1606 01:44:05,064 --> 01:44:08,993 no get" ผมจะบอก Kite ให้แก้ไขอันนี้ให้เรา ผมให้พรอมป์ต์นี้กับ 1607 01:44:08,993 --> 01:44:12,792 Kite "ผมทดสอบคำสั่ง /ideas ใน Telegram ทำงานอย่างสมบูรณ์แบบ 1608 01:44:12,792 --> 01:44:16,077 อย่างไรก็ตาม เมื่อผมโปรโมตไอเดียด้วยคำสั่ง /promote 1609 01:44:16,077 --> 01:44:19,361 หมายเลขไอเดีย ไอเดียถูกโปรโมตอย่างถูกต้องบนแดชบอร์ด 1610 01:44:19,361 --> 01:44:24,192 แต่ Telegram ส่งข้อความนี้มาให้เรา คุณเห็นปัญหาคืออะไรแล้วแก้ไขให้เราหน่อย" 1611 01:44:24,192 --> 01:44:29,022 เอาล่ะ Kite บอกว่ามันเสร็จแล้ว ลองอีกครั้ง ผมจะกลับมาที่แอปนี้แล้วทริกเกอร์ 1612 01:44:29,022 --> 01:44:32,564 ideas สิ่งที่คุณทำได้เพื่อให้ง่ายขึ้นตอนโปรโมตไอเดียคือ 1613 01:44:32,564 --> 01:44:36,493 คุณสามารถเพิ่มเทมเพลตที่อยากใช้ได้โดยตรง และสิ่งที่ผมแนะนำคือ 1614 01:44:36,493 --> 01:44:40,421 ใช้ Telegram เพื่อระดมความคิดไอเดียแล้วโปรโมตมันเข้ามาที่แท็บ 1615 01:44:40,421 --> 01:44:45,767 studio แล้วพอคุณอยู่ในแท็บ studio คุณก็ทำทุกอย่างเกี่ยวกับเทมเพลตว่าจะใช้เทมเพลตไหน 1616 01:44:45,767 --> 01:44:50,919 แก้ไขอะไร และอื่นๆ แต่จะดีกว่าถ้าใช้ Telegram สำหรับการสร้างไอเดียและอะไรแบบนั้น 1617 01:44:50,919 --> 01:44:55,620 หรือบางทีเมื่อไหร่ก็ตามที่อยากได้ไอเดีย คุณก็แค่มาที่นี่แล้วบอกเอเจนต์ว่า 1618 01:44:55,620 --> 01:45:00,901 "เฮ้ ให้ไอเดียเกี่ยวกับระบบอัตโนมัติหน่อย" สมมติว่าตรงนี้เราอยากโปรโมตเป็นตัวอย่าง 1619 01:45:00,901 --> 01:45:03,992 ขอไปที่ /promote แล้วใส่อุ๊ย 18 ขอโทษที พิมพ์ผิด 1620 01:45:03,992 --> 01:45:07,084 /promote 18 แล้วใส่เทมเพลต ขอไปที่แท็บ templates 1621 01:45:07,084 --> 01:45:10,304 เพื่อดูตัวอย่าง สมมติว่าผมอยากใช้เทมเพลต statement 1622 01:45:10,304 --> 01:45:13,975 พิมพ์ statement แล้ว enter แล้วหวังว่ามันจะถูกสร้างให้เรา 1623 01:45:13,975 --> 01:45:18,032 แต่แปลกที่มันบอกว่า template not found ขอดูว่าทำไมถึงเป็นแบบนี้ 1624 01:45:18,032 --> 01:45:21,188 พิมพ์ templates เพื่อดูว่าผมจะได้รายการเทมเพลตไหม 1625 01:45:21,188 --> 01:45:24,215 ดูเหมือนว่าชื่อของเทมเพลตต่างจากที่ผมเห็นตรงนี้ 1626 01:45:24,215 --> 01:45:27,306 ขอหาตัวอย่าง สมมติว่าผมอยากใช้เทมเพลตที่เรียกว่า 1627 01:45:27,306 --> 01:45:30,526 isometric กลับมาโปรโมตอีกครั้ง แล้วไปที่ isometric 1628 01:45:30,526 --> 01:45:33,553 สิ่งที่คุณสามารถบอก Kite ให้ทำเพื่อคุณทีหลังคือ 1629 01:45:33,553 --> 01:45:37,417 ทำให้แน่ใจว่าชื่อที่คุณเห็นสำหรับเทมเพลตตรงกับชื่อบนแดชบอร์ด 1630 01:45:37,417 --> 01:45:41,217 เพื่อให้ทำงานกับมันง่ายขึ้น ผมคิดว่าเหตุผลที่ชื่อต่างกันคือ 1631 01:45:41,217 --> 01:45:44,631 ตัวอย่างเช่น tip deck มีสองคำ และเพื่อให้คุณใช้มันได้ 1632 01:45:44,631 --> 01:45:48,173 คุณต้องพิมพ์ tip-deck แต่เป็นเพียงพรอมป์ต์ เราสามารถบอก 1633 01:45:48,173 --> 01:45:51,264 Kite ให้ทำสิ่งนี้ แล้วมันจะแก้ไขให้คุณได้เช่นกัน 1634 01:45:51,264 --> 01:45:55,257 แล้วโดยพื้นฐานแล้วคุณจะเห็นว่าสไลด์ถูกสร้าง เมื่อผมมาที่ตรงนี้ 1635 01:45:55,257 --> 01:46:00,087 คุณจะเห็นว่าเทมเพลตที่เราเลือกอยู่ที่นี่ แล้วเราเห็นสไลด์ทั้งหมดที่ถูกสร้าง 1636 01:46:00,087 --> 01:46:05,046 สิ่งที่ผมคิดว่าผมทำเพื่อคุณได้คือ ผมจะให้พรอมป์ต์เพื่อแก้ไขความไม่สอดคล้องนี้ 1637 01:46:05,046 --> 01:46:08,138 ที่ชื่อเทมเพลตต่างจากเทมเพลตที่เราใช้ใน Telegram 1638 01:46:08,138 --> 01:46:11,744 และผมจะให้พรอมป์ต์นี้ที่เราสามารถให้ Kite แก้ไขให้เราได้ 1639 01:46:11,744 --> 01:46:16,445 เราจะบอก Kite ว่า "เฮ้ ชื่อเทมเพลตที่แสดงบนแดชบอร์ดไม่ตรงกับชื่อที่คำสั่ง 1640 01:46:16,445 --> 01:46:19,730 /promote ยอมรับ ตัวอย่างเช่น บนแดชบอร์ดเมื่อผมพิมพ์ 1641 01:46:19,730 --> 01:46:23,465 statement มันบอกว่า template not found" มันควรแก้ไขสิ่งนี้ 1642 01:46:23,465 --> 01:46:27,587 ผมจะให้พรอมป์ต์ทั้งหมดนี้กับคุณ เพื่อที่ว่าถ้าคุณมีปัญหาเดียวกัน 1643 01:46:27,587 --> 01:46:31,387 คุณก็คัดลอกวางพรอมป์ต์ แล้วเอเจนต์ของคุณควรจะแก้ไขให้คุณได้ 1644 01:46:31,387 --> 01:46:35,380 ระหว่างที่ Kite กำลังสร้างและแก้ไขปัญหาชื่อเทมเพลตที่ไม่ตรงกับ 1645 01:46:35,380 --> 01:46:40,146 Telegram มีอีกอย่างหนึ่งที่เราอยากทำ ผมอยากใช้เวลาให้เป็นประโยชน์ระหว่างรอ 1646 01:46:40,146 --> 01:46:44,332 Kite เสร็จ ตอนนี้ถ้าจำได้ เมื่อไหร่ก็ตามที่เราอยากเข้าถึงแดชบอร์ด 1647 01:46:44,332 --> 01:46:47,810 เราทำผ่านสิ่งที่เรียกว่า SSH tunneling โดยใส่คำสั่งนี้ 1648 01:46:47,810 --> 01:46:52,318 ssh -N -L และชื่อและอื่นๆ กด enter แล้วใส่รหัสผ่านของบัญชีผู้ใช้ของเรา 1649 01:46:52,318 --> 01:46:56,375 แล้ว SSH tunnel จึงจะถูกเปิดใช้งานที่ทำให้เราเข้าถึงแดชบอร์ดได้ 1650 01:46:56,375 --> 01:47:00,755 แต่สิ่งที่คุณทำได้ซึ่งเป็นวิธีที่ดีกว่าในการเข้าถึงแดชบอร์ดคือการใช้ 1651 01:47:00,755 --> 01:47:05,392 Tailscale สิ่งที่ Tailscale ทำคือ มันให้คุณเข้าถึงแดชบอร์ดโดยไม่ต้องผ่าน 1652 01:47:05,392 --> 01:47:08,998 SSH tunneling และอื่นๆ แนวคิดคือ คุณดาวน์โหลดแอปพลิเคชัน 1653 01:47:08,998 --> 01:47:12,218 Tailscale เชื่อมต่อบัญชีของคุณ แล้วตรงนั้นคุณจะได้ 1654 01:47:12,218 --> 01:47:15,503 URL เฉพาะที่คุณสามารถเชื่อมต่อกับแดชบอร์ดได้ง่ายมาก 1655 01:47:15,503 --> 01:47:18,594 โดยไม่ต้องใส่รหัสผ่านทุกครั้ง ส่วนที่ดีที่สุดของ 1656 01:47:18,594 --> 01:47:22,523 Tailscale ในการตั้งค่านี้คือ บนทุก PC ตัวอย่างเช่นในกรณีของผม 1657 01:47:22,523 --> 01:47:25,936 ผมมีเดสก์ท็อปที่ทำงานด้วย มี MacBook มีโทรศัพท์มือถือ 1658 01:47:25,936 --> 01:47:29,929 และอุปกรณ์อีกมากมายที่ผมทำงานด้วย บนอุปกรณ์ใดก็ตามที่ผมติดตั้ง 1659 01:47:29,929 --> 01:47:36,176 Tailscale และเชื่อมต่อบัญชีของผมแล้ว ผมก็สามารถเข้าถึงแดชบอร์ดได้โดยไม่ต้องผ่านเทอร์มินัลทุกครั้ง 1660 01:47:36,176 --> 01:47:39,525 โดยเฉพาะบนโทรศัพท์มือถือของคุณ ไม่ว่าคุณจะอยู่ที่ไหน 1661 01:47:39,525 --> 01:47:43,969 คุณก็สามารถทำงานกับแดชบอร์ดบนโทรศัพท์มือถือได้ ตราบใดที่คุณติดตั้งแอป 1662 01:47:43,969 --> 01:47:47,060 Tailscale และเชื่อมต่อบัญชีของคุณ ในการทำสิ่งนี้ 1663 01:47:47,060 --> 01:47:51,246 เราจะดาวน์โหลดแอปพลิเคชันที่เรียกว่า Tailscale ซึ่งฟรีโดยสิ้นเชิง 1664 01:47:51,246 --> 01:47:55,497 ตอนนี้ผมมีเซิร์ฟเวอร์เจ็ดตัวที่รันบน Tailscale และผมไม่จ่ายอะไรเลย 1665 01:47:55,497 --> 01:47:59,425 เมื่อคุณมาที่นี่ แค่คลิก get started แล้วคุณสามารถสมัครสมาชิก 1666 01:47:59,425 --> 01:48:04,062 สร้างบัญชี ทุกอย่างฟรี คุณไม่ต้องจ่ายอะไรเลย เมื่อการติดตั้งเสร็จสมบูรณ์ 1667 01:48:04,062 --> 01:48:07,540 คุณก็มาที่นี่และดาวน์โหลด Tailscale บนหน้าแรกของพวกเขา 1668 01:48:07,540 --> 01:48:10,953 คลิกปุ่มดาวน์โหลดตรงนี้ แล้วมันจะดาวน์โหลดแอปพลิเคชัน 1669 01:48:10,953 --> 01:48:14,624 Tailscale ตรงนี้ เลือกระบบปฏิบัติการที่คุณใช้ ในกรณีของผม 1670 01:48:14,624 --> 01:48:18,295 ผมใช้ Windows ผมจะคลิกที่ Windows และดาวน์โหลดแอปพลิเคชัน 1671 01:48:18,295 --> 01:48:21,580 Windows สำหรับ Tailscale ถ้าคุณใช้อินเทอร์เฟซสำหรับ 1672 01:48:21,580 --> 01:48:24,800 Mac OS มันดียิ่งกว่าอินเทอร์เฟซของ Windows เสียอีก 1673 01:48:24,800 --> 01:48:28,213 ผมจะเปิดตัวติดตั้ง ยอมรับข้อกำหนดและเงื่อนไข แล้วคลิก 1674 01:48:28,213 --> 01:48:31,434 install แล้วแอปพลิเคชัน Tailscale ก็จะติดตั้งเสร็จ 1675 01:48:31,434 --> 01:48:36,843 ดูเหมือนว่างานที่ผมให้ Kite ทำเพื่อให้แน่ใจว่าเทมเพลตตรงกันนั้นเป็นงานที่หนักพอสมควร 1676 01:48:36,843 --> 01:48:40,579 มันทำงานมาเกือบ 15 นาทีแล้ว และยังไม่เสร็จ เมื่อการติดตั้ง 1677 01:48:40,579 --> 01:48:43,670 Tailscale เสร็จสมบูรณ์ในฝั่งของผม ผมก็คลิก close 1678 01:48:43,670 --> 01:48:47,727 ได้ แล้วเมื่อผมลงมาที่ตรงนี้ บน Windows คุณจะเห็นสัญลักษณ์เล็กๆ 1679 01:48:47,727 --> 01:48:51,205 ตรงนี้ อันนี้สำหรับ Tailscale ที่มีจุดประมาณเจ็ดแปดจุด 1680 01:48:51,205 --> 01:48:54,232 เมื่อคุณคลิกขวาที่มัน คุณจะต้องล็อกอินเข้าบัญชี 1681 01:48:54,232 --> 01:48:57,517 Tailscale ของคุณ เมื่อคุณล็อกอินเข้าบัญชี Tailscale 1682 01:48:57,517 --> 01:49:00,994 แล้ว คุณก็เสร็จสิ้นการติดตั้ง Tailscale โดยพื้นฐานแล้ว 1683 01:49:00,994 --> 01:49:06,018 เมื่อคุณล็อกอินเข้าบัญชี Tailscale คุณจะเห็นอุปกรณ์ทั้งหมดที่เชื่อมต่อกับบัญชี 1684 01:49:06,018 --> 01:49:09,238 Tailscale ของคุณอยู่ และด้วยอุปกรณ์ทั้งหมดเหล่านี้ 1685 01:49:09,238 --> 01:49:13,746 คุณจะได้ URL เฉพาะที่คุณสามารถใช้เข้าถึงเซิร์ฟเวอร์ที่เรากำลังสร้างได้ 1686 01:49:13,746 --> 01:49:17,159 ตอนนี้แอปพลิเคชัน Tailscale ติดตั้งแล้ว เราสร้างบัญชี 1687 01:49:17,159 --> 01:49:20,508 Tailscale แล้ว หรือถ้าคุณมีบัญชีอยู่แล้วก็สมบูรณ์แบบ 1688 01:49:20,508 --> 01:49:23,857 สิ่งที่เราต้องทำต่อคือ บอก Kite ให้ติดตั้ง Tailscale 1689 01:49:23,857 --> 01:49:28,430 ให้เรา และผูกแดชบอร์ดหรือแดชบอร์ด Cadence ที่เราสร้างเข้ากับเซิร์ฟเวอร์ 1690 01:49:28,430 --> 01:49:33,002 Tailscale ของเรา และด้วยสิ่งนั้น เราจะสามารถเข้าถึงแดชบอร์ดได้โดยตรงจาก 1691 01:49:33,002 --> 01:49:36,223 URL บนเบราว์เซอร์ โดยไม่ต้องผ่านส่วน SSH tunneling 1692 01:49:36,223 --> 01:49:39,958 ขอรอให้ Kite ทำงานที่มันทำเสร็จก่อน ผมว่ามันเกือบเสร็จแล้ว 1693 01:49:39,958 --> 01:49:45,368 ตอนนี้คุณจะเห็นว่ามันกำลังท่องเว็บเพื่อให้แน่ใจว่าการเปลี่ยนแปลงทั้งหมดที่มันทำทำงาน 1694 01:49:45,368 --> 01:49:48,395 แล้วพอมันเสร็จ เราก็ให้คำสั่ง Kite ทำการเดินสาย 1695 01:49:48,395 --> 01:49:51,550 Tailscale ให้เรา แล้วเราก็จะจบบทช่วยสอนนี้ และเฮ้ 1696 01:49:51,550 --> 01:49:54,835 ผมกำลังทำงานกับตัวติดตั้งอัตโนมัติ (auto installer) 1697 01:49:54,835 --> 01:49:59,343 ที่จะติดตั้งทั้งหมดนี้ให้คุณภายในไม่กี่นาที สมัครสมาชิกคอมมูนิตี้ของผม 1698 01:49:59,343 --> 01:50:02,435 คุณจะได้รับคีย์เฉพาะที่คุณสามารถใช้ตัวติดตั้งได้ 1699 01:50:02,435 --> 01:50:06,363 และผมจะสร้างบทช่วยสอนวิธีใช้ตัวติดตั้งให้คุณด้วยเมื่อมันพร้อม 1700 01:50:06,363 --> 01:50:12,739 และในที่สุด Kite ก็ทำงานใหญ่เสร็จแล้ว ชื่อเทมเพลตที่เราเห็นบนแดชบอร์ดตรงนี้จะตรงกับชื่อที่เราเห็นบน 1701 01:50:12,739 --> 01:50:16,281 Telegram กลับมาที่ประเด็น Tailscale Kite ทำงานเสร็จแล้ว 1702 01:50:16,281 --> 01:50:19,694 เราสามารถให้พรอมป์ต์ Kite ทำงานการเชื่อมต่อ Tailscale 1703 01:50:19,694 --> 01:50:22,850 ให้เราได้ และสำหรับสิ่งนั้น ผมจะให้พรอมป์ต์นี้กับ 1704 01:50:22,850 --> 01:50:26,328 Kite ผมบอก Kite ว่า "เฮ้ ตั้งค่าการเข้าถึงแดชบอร์ดผ่าน 1705 01:50:26,328 --> 01:50:31,158 Tailscale เพื่อที่ผมจะเข้าถึงมันอย่างปลอดภัยจากอุปกรณ์ของผมเองโดยไม่ต้องใช้ 1706 01:50:31,158 --> 01:50:34,571 SSH tunnel" และผมก็ให้แนวทางว่าผมอยากให้มันเป็นแบบไหน 1707 01:50:34,571 --> 01:50:39,852 แล้วพอมันเสร็จ มันจะให้ลิงก์ที่เราจะใช้คลิกเพื่อผูกเซิร์ฟเวอร์เฉพาะนี้เข้ากับบัญชี 1708 01:50:39,852 --> 01:50:42,879 Tailscale ของเรา ขอให้แน่ใจว่าผมอยู่บนแท็บ Kite 1709 01:50:42,879 --> 01:50:46,615 แล้วส่งพรอมป์ต์นี้ให้ Kite เพื่อทำสิ่งนี้ แล้วพอเราทำเสร็จ 1710 01:50:46,615 --> 01:50:50,865 เราก็จะอยู่ที่จุดจบของบทช่วยสอน ผมเหนื่อยแล้ว ผมอัดวิดีโอมานานกว่า 1711 01:50:50,865 --> 01:50:54,150 10 ชั่วโมง ผมเริ่มเหนื่อยแล้ว เอาล่ะ Kite เสร็จแล้ว 1712 01:50:54,150 --> 01:50:59,560 มันให้ลิงก์ล็อกอินนี้ที่เราจะใช้ยืนยันตัวตนบัญชีของเรากับเซิร์ฟเวอร์เฉพาะที่เราสร้าง 1713 01:50:59,560 --> 01:51:06,064 ผมจะเปิดแท็บใหม่แล้วใส่ URL ที่ Kite ให้มา หลังจากนั้นสิ่งที่คุณต้องทำคือเชื่อมต่อและล็อกอินเข้าบัญชี 1714 01:51:06,064 --> 01:51:09,413 Tailscale ของคุณ อันนี้จะพาคุณไปที่หน้าที่ Tailscale 1715 01:51:09,413 --> 01:51:12,762 ถามว่า "เฮ้ ผมอยากเชื่อมต่ออุปกรณ์ cadence dashboard 1716 01:51:12,762 --> 01:51:16,304 กับคอมพิวเตอร์ของคุณ" ในกรณีของผม komputer-mechanic.com 1717 01:51:16,304 --> 01:51:19,589 tailnet ผมจะคลิก connect แล้วการล็อกอินก็เข้าถึงได้ 1718 01:51:19,589 --> 01:51:22,680 อุปกรณ์ของเราถูกผูกกับบัญชี Tailscale ของเราแล้ว 1719 01:51:22,680 --> 01:51:27,382 ผมจะมาที่นี่แล้วบอก Kite ว่า "done" เพราะมันบอกว่าเมื่อผมยืนยันตัวตนเสร็จ 1720 01:51:27,382 --> 01:51:30,859 ผมควรตอบว่า "เราทำเสร็จแล้ว" Kite ก็ทำเสร็จแล้วเช่นกัน 1721 01:51:30,859 --> 01:51:34,852 มันยังบอกว่ามันทดสอบ IP สาธารณะและทั้งหมดล้มเหลวในการเชื่อมต่อ 1722 01:51:34,852 --> 01:51:38,073 ซึ่งหมายความว่าแดชบอร์ดสามารถเข้าถึงได้ผ่าน IP ของ 1723 01:51:38,073 --> 01:51:41,808 Tailscale เท่านั้น ขอให้แน่ใจว่าอันนี้ทำงาน รีโหลดแดชบอร์ด 1724 01:51:41,808 --> 01:51:45,286 ตรงนี้เรามี SSH tunneling ที่ทำงานอยู่ซึ่งเป็นไปตามคาด 1725 01:51:45,286 --> 01:51:49,472 ผมจะมาที่ PowerShell และฆ่าการเชื่อมต่อ SSH แล้วกลับมาที่แดชบอร์ด 1726 01:51:49,472 --> 01:51:54,044 และพยายามเข้าถึงแดชบอร์ดผ่าน SSH tunnel แล้วคุณจะเห็นว่าผมได้รับข้อความ 1727 01:51:54,044 --> 01:51:58,424 "site cannot be reached" เมื่อไหร่ก็ตามที่ผมอยากเชื่อมต่อกับแดชบอร์ด 1728 01:51:58,424 --> 01:52:01,901 ผมก็แค่ใช้ URL ที่ Kite ให้มา ขอคัดลอก URL ของแดชบอร์ด 1729 01:52:01,901 --> 01:52:07,569 วาง URL นี้ แล้วไชโย คุณจะเห็นว่าเราสามารถเข้าถึงแดชบอร์ดได้โดยไม่ต้องผ่านความยุ่งยากของ 1730 01:52:07,569 --> 01:52:10,789 SSH tunnel Tailscale ทำงานโดยตั้งค่า VPN ในเครื่อง 1731 01:52:10,789 --> 01:52:14,202 (local VPN) บน PC ที่ติดตั้งมัน ดังนั้นถ้าคุณมีบริการ 1732 01:52:14,202 --> 01:52:17,616 VPN อื่นรันอยู่ คุณต้องหยุด VPN นั้นก่อนที่ Tailscale 1733 01:52:17,616 --> 01:52:21,029 จะทำงานได้ เพราะถ้าคุณมีสองบริการรันขนานกัน Tailscale 1734 01:52:21,029 --> 01:52:25,473 จะไม่สามารถทำงานได้ ดังนั้นให้แน่ใจว่าคุณหยุดบริการอื่นที่รันอยู่เสมอ 1735 01:52:25,473 --> 01:52:28,822 เพื่อให้ Tailscale สามารถปรับใช้เซิร์ฟเวอร์ให้คุณได้ 1736 01:52:28,822 --> 01:52:33,008 นี่จึงนำเรามาถึงจุดจบของบทช่วยสอน ขอสรุปสั้นๆ ว่าเราสร้างอะไรบ้าง 1737 01:52:33,008 --> 01:52:36,357 เรามีแท็บแดชบอร์ดที่เราเห็นทุกอย่างที่เอเจนต์กำลังทำ 1738 01:52:36,357 --> 01:52:40,350 บันทึกกิจกรรมทั้งหมดดึงมาจากฐานข้อมูลเอเจนต์ เมื่อคุณมาที่แท็บ 1739 01:52:40,350 --> 01:52:44,021 ideas เราสามารถสร้างไอเดียใหม่ได้เสมอโดยเลือกไอเดียของคุณ 1740 01:52:44,021 --> 01:52:48,143 แล้วเอเจนต์อย่าง Atlas จะรับไอเดียนั้นและสร้างเป็นคอนเทนต์ให้คุณ 1741 01:52:48,143 --> 01:52:51,298 และเมื่อไหร่ก็ตามที่คุณไม่มีไอเดีย คุณก็แค่มาคลิก 1742 01:52:51,298 --> 01:52:56,451 generate ideas แล้วไอเดียก็จะถูกสร้างให้คุณ เมื่อไหร่ก็ตามที่เราอยากโปรโมตไอเดีย 1743 01:52:56,451 --> 01:53:00,057 เราก็แค่คลิก promote แล้วมันจะถูกโปรโมตให้เราเข้าสู่แท็บ 1744 01:53:00,057 --> 01:53:03,342 studio และเมื่อไหร่ก็ตามที่เราอยากส่งโพสต์ใดๆ ไปยัง 1745 01:53:03,342 --> 01:53:06,755 Instagram, TikTok หรืออะไรก็ตามที่อยากทำ เมื่อเราคลิก 1746 01:53:06,755 --> 01:53:11,006 post now อันนี้จะถูกส่งตรงไปยังแพลตฟอร์มโซเชียลมีเดียที่เราอยากใช้ 1747 01:53:11,006 --> 01:53:14,226 และเมื่อเสร็จแล้ว อันนี้จะนำโพสต์ไปยังแท็บ publish 1748 01:53:14,226 --> 01:53:18,476 เพื่อที่คุณจะได้อ้างอิงมันได้เสมอเมื่อไหร่ก็ตามที่อยากทำอะไรกับมัน 1749 01:53:18,476 --> 01:53:22,920 เรายังมีแท็บ templates ที่เต็มไปด้วยเทมเพลตมากมายในการตั้งค่าปัจจุบัน 1750 01:53:22,920 --> 01:53:26,913 ที่คุณสามารถเลือกใช้และพัฒนาสไลด์ carousel ใดก็ตามที่อยากพัฒนา 1751 01:53:26,913 --> 01:53:30,970 จากนั้นเรามีแท็บ dedicated agents ที่เราเห็นเอเจนต์ทั้งหมดที่มี 1752 01:53:30,970 --> 01:53:35,607 heat map ของพวกมัน คุณมีปฏิทิน (calendar) ที่คุณเห็นโพสต์ที่กำหนดเวลาไว้ 1753 01:53:35,607 --> 01:53:39,278 โพสต์ที่เผยแพร่แล้ว และโพสต์ที่จะมาถึง แท็บ configuration 1754 01:53:39,278 --> 01:53:43,787 ที่คุณกำหนดค่าชื่อบรานด์ สิ่งที่คุณอยากให้เอเจนต์ทำงานเมื่อพวกมันสร้าง 1755 01:53:43,787 --> 01:53:46,878 และแท็บ docs ที่คุณสามารถทำความเข้าใจแดชบอร์ดได้ 1756 01:53:46,878 --> 01:53:51,064 ผมยังมีพรอมป์ต์อีกมากมายที่จะให้คุณใช้ ซึ่งผมแนะนำอย่างยิ่งให้ใช้ 1757 01:53:51,064 --> 01:53:57,247 ตัวอย่างเช่น สำหรับบันทึกกิจกรรมของเอเจนต์ เอเจนต์จะบันทึกลงในฐานข้อมูลเมื่อไหร่ก็ตามที่มันทำงาน 1758 01:53:57,247 --> 01:54:00,853 แต่ถ้าคุณรันสิ่งนี้เป็นเวลาทั้งปี ฐานข้อมูลของคุณจะรกมาก 1759 01:54:00,853 --> 01:54:04,138 คุณจึงสามารถตั้งค่าการทำความสะอาดรายสัปดาห์ (weekly 1760 01:54:04,138 --> 01:54:08,582 cleanup) ที่เอเจนต์จะมองหากิจกรรมที่เก่ากว่า 7 วันแล้วล้างทิ้งทั้งหมด 1761 01:54:08,582 --> 01:54:13,476 และผมยังรวมพรอมป์ต์เพิ่มเติมบางอันที่คุณสามารถใช้เพื่อขยายการตั้งค่าที่คุณมี 1762 01:54:13,476 --> 01:54:17,856 ผมรู้ว่ามันเป็นบทช่วยสอนที่ยาว แต่ผมอยากผ่านทุกอย่างที่เรากำลังสร้าง 1763 01:54:17,856 --> 01:54:23,008 กระบวนการคิดที่ผมมีเวลาสร้างอะไรแบบนี้ และคุณยังเห็นผมแก้ไขปัญหาทั้งหมดที่เราเจอ 1764 01:54:23,008 --> 01:54:26,936 เพื่อที่ว่าเมื่อคุณเจอสถานการณ์คล้ายกัน คุณก็ทำแบบเดียวกันได้ 1765 01:54:26,936 --> 01:54:29,963 ถ้าคุณพบว่าวิดีโอนี้มีประโยชน์ กรุณากดปุ่ม like 1766 01:54:29,963 --> 01:54:33,119 สมัครสมาชิกช่องของผมเพื่อดูเนื้อหาแบบนี้เพิ่มเติม